Rifqi Hafizuddin commited on
Commit
c5e2e1b
Β·
1 Parent(s): c333ec8

update md file

Browse files
Files changed (1) hide show
  1. REPO_STATUS.md +6 -5
REPO_STATUS.md CHANGED
@@ -148,7 +148,7 @@ Two facts to internalise:
148
  - **Unstructured RAG** over PGVector.
149
  - **Analytics tools:** 4 registered composite `analyze_*` (descriptive, aggregate, correlation, trend) + 4 data-access tools (check_data, check_knowledge, retrieve_data, retrieve_knowledge). Four further composites (comparison, contribution, profile, segment) exist in code but are **not registered** with the Planner.
150
  - **Versioned report generation** from persisted records.
151
- - **Analysis sessions:** data-first creation gate (β‰₯1 bound source), per-analysis data-source binding (#10).
152
  - **Langfuse tracing** (PII-masked), **Redis caching**, **pooled DB engines** + speculative prewarm.
153
 
154
  ---
@@ -185,7 +185,7 @@ unless `SKIP_INIT_DB=true`.
185
  | `report_inputs` *(was `analysis_records`)* | jsonb `AnalysisRecord`, one per slow-path run; **Python-owned** | slow path | ReportGenerator, report readiness |
186
  | `analyses` *(dedorch, plural)* | uuid `id`, `user_id`, `analysis_title`, `objective`, `business_questions` jsonb, `status` (active\|inactive), `data_bind`(+`data_bind_version`), `report_id`, `report_collection` β€” **defined by Go migrations**; `problem_statement`/`problem_validated`/`owner_id` already **dropped** there (`0003`/`0004`) | Go `/api/v1/analyses`; Python state store | gate (no-op), Help, report |
187
  | `reports` *(dedorch)* | uuid, `analysis_id`, `user_id`, `title` + markdown `content` + `version` (UNIQUE per analysis) | Go + Python ReportStore | report API |
188
- | ~~`data_sources`~~ *(dropped from Python)* | per-analysis binding table; **no longer read or written by Python** β€” the writer (`/analysis/create`) was Go-owned/unwired so it was always empty. Scoping now reads the analysis-scope `data_catalog` row instead | β€” | β€” |
189
  | `analyses_messages` *(dedorch)* | the analysis chat room (`role ∈ user\|ai`); replaces deprecated `rooms`/`chat_messages` | Go `/analyses/{id}/messages` | Python chat path **not yet migrated here** (Β§12) |
190
 
191
  > βœ… **Python ORM ↔ dedorch drift β€” reconciled 2026-07-01.** `AnalysisStateRow` (`analyses`) dropped
@@ -339,7 +339,7 @@ Python is consumer-only). State **re-verified against the Go source 2026-06-29**
339
  **Python-owned**; its finalized schema goes to Harry so the dedorch migration creates it post-cutover.
340
  - **Connection-string cutover DONE (2026-07-01).** Python's `postgres_connstring` now points at
341
  **dedorch** and reads the Go-migrated tables directly. Every ORM model Python reads (`analyses`,
342
- `data_sources`, `analyses_messages`, `data_catalog`) has been reconciled to its dedorch shape.
343
  **`init_db()` is now skipped by default** (`settings.skip_init_db` defaults **True**): its privileged
344
  DDL (`ALTER TABLE rooms …`, index creation) fails on Go-owned tables
345
  (`InsufficientPrivilegeError: must be owner of table rooms`). Skipping is safe β€” Go migration `0001`
@@ -374,9 +374,10 @@ records-based report; floor: β‰₯1 `analyze_*` success). Wiring Go β†’ Python is
374
  `cryptography.fernet.InvalidToken` β€” whose `str()` is **empty**, so it logged as `error=""` and
375
  masqueraded as a DB-connection failure (the executor now logs `repr(e)` to expose it). Tell-apart:
376
  a valid-but-wrong key β†’ `InvalidToken`; a malformed key β†’ a non-empty `ValueError` at cipher build.
377
- - **Never-throw seams** are pervasive (tool invoker, query service, executors, state/binding reads,
378
  record persistence, report summary). Failures degrade into soft output rather than raising β€” good
379
- for UX, but they can mask real breakage (e.g. a binding silently fail-opening to the full catalog).
 
380
  - **Prompts** live in `src/config/prompts/*.md`. `chatbot_system.md` has `guardrails.md` appended so
381
  guardrails win on conflict.
382
  - **Tests** are gitignored (team decision) β€” run them locally.
 
148
  - **Unstructured RAG** over PGVector.
149
  - **Analytics tools:** 4 registered composite `analyze_*` (descriptive, aggregate, correlation, trend) + 4 data-access tools (check_data, check_knowledge, retrieve_data, retrieve_knowledge). Four further composites (comparison, contribution, profile, segment) exist in code but are **not registered** with the Planner.
150
  - **Versioned report generation** from persisted records.
151
+ - **Analysis sessions:** data-first creation gate (β‰₯1 bound source); each turn reads the analysis-scope catalog so it sees only that analysis's bound sources.
152
  - **Langfuse tracing** (PII-masked), **Redis caching**, **pooled DB engines** + speculative prewarm.
153
 
154
  ---
 
185
  | `report_inputs` *(was `analysis_records`)* | jsonb `AnalysisRecord`, one per slow-path run; **Python-owned** | slow path | ReportGenerator, report readiness |
186
  | `analyses` *(dedorch, plural)* | uuid `id`, `user_id`, `analysis_title`, `objective`, `business_questions` jsonb, `status` (active\|inactive), `data_bind`(+`data_bind_version`), `report_id`, `report_collection` β€” **defined by Go migrations**; `problem_statement`/`problem_validated`/`owner_id` already **dropped** there (`0003`/`0004`) | Go `/api/v1/analyses`; Python state store | gate (no-op), Help, report |
187
  | `reports` *(dedorch)* | uuid, `analysis_id`, `user_id`, `title` + markdown `content` + `version` (UNIQUE per analysis) | Go + Python ReportStore | report API |
188
+ | `data_sources` *(dedorch, Go-owned)* | per-analysis binding table. **Python no longer reads or writes it** β€” bindings live in Go's `analyses.data_bind`, which Go materializes into the analysis-scope `data_catalog` row; Python scopes off that row. The table exists (Go migration) but Python is fully decoupled β€” do **not** drop it manually | Go migration | β€” (unused by Python) |
189
  | `analyses_messages` *(dedorch)* | the analysis chat room (`role ∈ user\|ai`); replaces deprecated `rooms`/`chat_messages` | Go `/analyses/{id}/messages` | Python chat path **not yet migrated here** (Β§12) |
190
 
191
  > βœ… **Python ORM ↔ dedorch drift β€” reconciled 2026-07-01.** `AnalysisStateRow` (`analyses`) dropped
 
339
  **Python-owned**; its finalized schema goes to Harry so the dedorch migration creates it post-cutover.
340
  - **Connection-string cutover DONE (2026-07-01).** Python's `postgres_connstring` now points at
341
  **dedorch** and reads the Go-migrated tables directly. Every ORM model Python reads (`analyses`,
342
+ `analyses_messages`, `data_catalog`) has been reconciled to its dedorch shape.
343
  **`init_db()` is now skipped by default** (`settings.skip_init_db` defaults **True**): its privileged
344
  DDL (`ALTER TABLE rooms …`, index creation) fails on Go-owned tables
345
  (`InsufficientPrivilegeError: must be owner of table rooms`). Skipping is safe β€” Go migration `0001`
 
374
  `cryptography.fernet.InvalidToken` β€” whose `str()` is **empty**, so it logged as `error=""` and
375
  masqueraded as a DB-connection failure (the executor now logs `repr(e)` to expose it). Tell-apart:
376
  a valid-but-wrong key β†’ `InvalidToken`; a malformed key β†’ a non-empty `ValueError` at cipher build.
377
+ - **Never-throw seams** are pervasive (tool invoker, query service, executors, state/catalog reads,
378
  record persistence, report summary). Failures degrade into soft output rather than raising β€” good
379
+ for UX, but they can mask real breakage (e.g. a missing analysis-scope catalog silently falling
380
+ back to the whole user catalog).
381
  - **Prompts** live in `src/config/prompts/*.md`. `chatbot_system.md` has `guardrails.md` appended so
382
  guardrails win on conflict.
383
  - **Tests** are gitignored (team decision) β€” run them locally.