Rifqi Hafizuddin commited on
Commit
68f76b1
Β·
1 Parent(s): 735c421

update progress.md file

Browse files
Files changed (1) hide show
  1. PROGRESS.md +15 -15
PROGRESS.md CHANGED
@@ -51,7 +51,7 @@ Verified against code before logging. Severity: **critical** / important / nice-
51
  | R9 | **`extra="ignore"`** in `settings.py:15` (currently `allow` β†’ typo'd env vars silently swallowed); require Azure keys in prod. | nice-to-have | B | `[ ]` |
52
  | R10 | **Read-only enforcement is session-state, not a server role.** `REPO_CONTEXT.md` counts "read-only DB credentials" as a defense layer but nothing requests/verifies a read-only role. Either request read-only creds at registration (verify via `SELECT current_setting(...)`) or drop the claim. | important | DB | `[ ]` |
53
  | R11 | **De-duplicate** `_PLACEHOLDER_RE` (`task_runner.py:31` vs validator) and `_DATA_ACCESS_TOOLS` (invoker vs planner registry) β€” import one from the other; comments aren't a sync mechanism. | nice-to-have | agent/tool | `[ ]` |
54
- | R12 | **Doc/process hygiene** β€” gitignored canonical docs (`AGENT_ARCHITECTURE_CONTEXT_new.md`, `PROJECT_SUMMARY.md`) are cited by code docstrings but absent on disk; `CLAUDE.md` lists deleted modules (enricher, `pipeline/orchestrator.py`); `main` is 38 commits behind on a dead architecture. | nice-to-have | agent | `[ ]` |
55
  | R13 | **Pre-existing test failure** (found during R2, NOT caused by it): `tests/query/planner/test_prompt.py::test_render_catalog_with_sources` fails β€” `query/planner/prompt.py::render_catalog` now renders stable IDs (`src_test_db`) the test asserts are absent. Old query-planner path; confirmed failing on a clean tree. | nice-to-have | DB | `[ ]` |
56
 
57
  **Architecture verdict:** fundamentally sound (catalog-driven IR + deterministic compiler
@@ -167,8 +167,8 @@ across all of them.
167
 
168
  ## What just shipped (2026-06-08 β€” KM-626: slow-path agent layer)
169
 
170
- The rest of the slow path after the Planner (KM-567), from
171
- `AGENT_ARCHITECTURE_CONTEXT_new.md` Β§7.4 / Β§7.5 / Β§8.2–8.4. Built and tested against
172
  mocks; **not yet wired into the live `ChatHandler`** (waits on the tool team's real
173
  `ToolInvoker` + a real `BusinessContext`). Fast path untouched.
174
 
@@ -177,9 +177,9 @@ The slow-path **workers** live in **`agents/slow_path/`** β€” deliberately NOT n
177
  "orchestrator".
178
 
179
  **Files added** (`src/agents/slow_path/`):
180
- - `schemas.py` β€” `TaskResult`, `RunState` (Β§8.2); `TaskSummary`, `AnalysisRecord`,
181
- `AssembledOutput`, `AssemblerNarrative` (Β§8.3). Reuses `ToolOutput`.
182
- - `invoker.py` β€” `ToolInvoker` Protocol only (Β§8.4); the tool team owns the impl (KM-418).
183
  - `errors.py` β€” `SlowPathError`, `AssemblerError`.
184
  - `task_runner.py` β€” deterministic, 0 LLM: wave-based execution, `${t<id>}` placeholder
185
  resolution, internal `validate_args`, never-throw invoke, status labeling,
@@ -208,7 +208,7 @@ Team decisions after the teammate pushed KM-624 (`src/tools/analytics/`):
208
  - **Composite tools, not atomic.** v1 uses **composite "family" tools** (`analyze_*`),
209
  not the atomic `compute_*` set the earlier draft assumed. One `analyze_*` call does a
210
  whole analytical job (e.g. `analyze_descriptive` subsumes median/mode/stddev/percentile;
211
- `analyze_trend` subsumes `date_trunc`). Arch doc Β§9.3/Β§9.4 + decisions table updated.
212
  - **Tool team owns ALL tools** β€” compute, data-access (`query_structured`,
213
  `retrieve_documents`, `list_sources`, `describe_source`), the wrapper/invoker layer
214
  (KM-418), and **all tool tests**. The agent team owns nothing below the registry contract.
@@ -232,7 +232,7 @@ then Orchestrator slow-path wiring. Stubs still to retire on integration: `contr
232
 
233
  ## What just shipped (2026-06-05 β€” Phase 3: Planner agent)
234
 
235
- First slow-path agent from `AGENT_ARCHITECTURE_CONTEXT_new.md` Β§7.3. A single LLM
236
  call turns BusinessContext + Catalog + ToolRegistry + question + Constraints into a
237
  validated, **static** `TaskList` (DAG of fully-specified tool-call chains). No
238
  replanning (INV-6); tool-agnostic against a registry contract (INV-7). Fast path
@@ -240,9 +240,9 @@ replanning (INV-6); tool-agnostic against a registry contract (INV-7). Fast path
240
 
241
  **Files added** (`src/agents/planner/`):
242
  - `contracts.py` β€” **STUB** Pydantic contracts pending reconciliation: `BusinessContext`
243
- (+KeyTerm/DataTableNote/DataColumnNote, lead's Β§7.1), `ToolSpec`/`ToolRegistry` (tool
244
- team KM-608, Β§9.2), `ToolOutput` envelope (Β§8.1).
245
- - `schemas.py` β€” `CrispStage`, `ToolCall`, `Task`, `TaskList` (Β§7.3). No replan schemas.
246
  - `inputs.py` β€” `CatalogSummary` (condensed, PII `sample_values` nulled, `from_catalog`
247
  builder + `render`) and `Constraints` (max_tasks=5, modeling_allowed=False).
248
  - `registry.py` β€” **STUB** v1 P0 registry: query_structured, retrieve_documents,
@@ -252,7 +252,7 @@ replanning (INV-6); tool-agnostic against a registry contract (INV-7). Fast path
252
  per-call human content (context + catalog + tools + constraints + few-shots + question).
253
  - `examples.py` β€” two few-shots (A exploratory revenue-by-category; B descriptive
254
  monthly-trend-by-region with date_trunc), built from the real `TaskList` schema.
255
- - `validator.py` β€” `PlannerValidator` running the 8 checks (Β§7.3); reuses the existing
256
  `IRValidator` for inline `query_structured` IRs.
257
  - `service.py` β€” `PlannerService` + `plan_analysis(...)`: chain (mirrors
258
  `query/planner/service.py`) + validate-and-retry loop (max 3, mirrors `QueryService`).
@@ -264,8 +264,8 @@ replanning (INV-6); tool-agnostic against a registry contract (INV-7). Fast path
264
 
265
  **Open follow-ups (not blockers):** reconcile `BusinessContext` with the lead and
266
  `ToolRegistry`/`ToolSpec` + real tools with teammate (KM-608); "GPT mini" currently uses
267
- the configured 4o deployment (swap `azure_deployment` when a mini deployment exists). Next
268
- per the architecture doc: Orchestrator slow-path expansion + TaskRunner + Assembler.
269
 
270
  ---
271
 
@@ -378,7 +378,7 @@ per the architecture doc: Orchestrator slow-path expansion + TaskRunner + Assemb
378
 
379
  ### Tools β€” slow-path "Tools" component (TAB)
380
 
381
- New scope after the original 42-item table; added as the tool layer landed (KM-608/624–631). All TAB-owned (`src/tools/`), all never-throw (Β§8.4).
382
 
383
  | # | Item | Owner | Status | Notes |
384
  |---|---|---|---|---|
 
51
  | R9 | **`extra="ignore"`** in `settings.py:15` (currently `allow` β†’ typo'd env vars silently swallowed); require Azure keys in prod. | nice-to-have | B | `[ ]` |
52
  | R10 | **Read-only enforcement is session-state, not a server role.** `REPO_CONTEXT.md` counts "read-only DB credentials" as a defense layer but nothing requests/verifies a read-only role. Either request read-only creds at registration (verify via `SELECT current_setting(...)`) or drop the claim. | important | DB | `[ ]` |
53
  | R11 | **De-duplicate** `_PLACEHOLDER_RE` (`task_runner.py:31` vs validator) and `_DATA_ACCESS_TOOLS` (invoker vs planner registry) β€” import one from the other; comments aren't a sync mechanism. | nice-to-have | agent/tool | `[ ]` |
54
+ | R12 | **Doc/process hygiene** β€” some code docstrings cite internal design specs that are not committed to the repo (design docs are kept out of version control), so the references dangle for anyone but the author; `CLAUDE.md` lists deleted modules (enricher, `pipeline/orchestrator.py`); `main` is 38 commits behind on a dead architecture. | nice-to-have | agent | `[ ]` |
55
  | R13 | **Pre-existing test failure** (found during R2, NOT caused by it): `tests/query/planner/test_prompt.py::test_render_catalog_with_sources` fails β€” `query/planner/prompt.py::render_catalog` now renders stable IDs (`src_test_db`) the test asserts are absent. Old query-planner path; confirmed failing on a clean tree. | nice-to-have | DB | `[ ]` |
56
 
57
  **Architecture verdict:** fundamentally sound (catalog-driven IR + deterministic compiler
 
167
 
168
  ## What just shipped (2026-06-08 β€” KM-626: slow-path agent layer)
169
 
170
+ The rest of the slow path after the Planner (KM-567) β€” TaskRunner, Assembler, and
171
+ the coordinator. Built and tested against
172
  mocks; **not yet wired into the live `ChatHandler`** (waits on the tool team's real
173
  `ToolInvoker` + a real `BusinessContext`). Fast path untouched.
174
 
 
177
  "orchestrator".
178
 
179
  **Files added** (`src/agents/slow_path/`):
180
+ - `schemas.py` β€” `TaskResult`, `RunState`; `TaskSummary`, `AnalysisRecord`,
181
+ `AssembledOutput`, `AssemblerNarrative`. Reuses `ToolOutput`.
182
+ - `invoker.py` β€” `ToolInvoker` Protocol only; the tool team owns the impl (KM-418).
183
  - `errors.py` β€” `SlowPathError`, `AssemblerError`.
184
  - `task_runner.py` β€” deterministic, 0 LLM: wave-based execution, `${t<id>}` placeholder
185
  resolution, internal `validate_args`, never-throw invoke, status labeling,
 
208
  - **Composite tools, not atomic.** v1 uses **composite "family" tools** (`analyze_*`),
209
  not the atomic `compute_*` set the earlier draft assumed. One `analyze_*` call does a
210
  whole analytical job (e.g. `analyze_descriptive` subsumes median/mode/stddev/percentile;
211
+ `analyze_trend` subsumes `date_trunc`). Tool-taxonomy decision recorded.
212
  - **Tool team owns ALL tools** β€” compute, data-access (`query_structured`,
213
  `retrieve_documents`, `list_sources`, `describe_source`), the wrapper/invoker layer
214
  (KM-418), and **all tool tests**. The agent team owns nothing below the registry contract.
 
232
 
233
  ## What just shipped (2026-06-05 β€” Phase 3: Planner agent)
234
 
235
+ First slow-path agent (the Planner). A single LLM
236
  call turns BusinessContext + Catalog + ToolRegistry + question + Constraints into a
237
  validated, **static** `TaskList` (DAG of fully-specified tool-call chains). No
238
  replanning (INV-6); tool-agnostic against a registry contract (INV-7). Fast path
 
240
 
241
  **Files added** (`src/agents/planner/`):
242
  - `contracts.py` β€” **STUB** Pydantic contracts pending reconciliation: `BusinessContext`
243
+ (+KeyTerm/DataTableNote/DataColumnNote, lead's), `ToolSpec`/`ToolRegistry` (tool
244
+ team KM-608), `ToolOutput` envelope.
245
+ - `schemas.py` β€” `CrispStage`, `ToolCall`, `Task`, `TaskList`. No replan schemas.
246
  - `inputs.py` β€” `CatalogSummary` (condensed, PII `sample_values` nulled, `from_catalog`
247
  builder + `render`) and `Constraints` (max_tasks=5, modeling_allowed=False).
248
  - `registry.py` β€” **STUB** v1 P0 registry: query_structured, retrieve_documents,
 
252
  per-call human content (context + catalog + tools + constraints + few-shots + question).
253
  - `examples.py` β€” two few-shots (A exploratory revenue-by-category; B descriptive
254
  monthly-trend-by-region with date_trunc), built from the real `TaskList` schema.
255
+ - `validator.py` β€” `PlannerValidator` running the 8 checks; reuses the existing
256
  `IRValidator` for inline `query_structured` IRs.
257
  - `service.py` β€” `PlannerService` + `plan_analysis(...)`: chain (mirrors
258
  `query/planner/service.py`) + validate-and-retry loop (max 3, mirrors `QueryService`).
 
264
 
265
  **Open follow-ups (not blockers):** reconcile `BusinessContext` with the lead and
266
  `ToolRegistry`/`ToolSpec` + real tools with teammate (KM-608); "GPT mini" currently uses
267
+ the configured 4o deployment (swap `azure_deployment` when a mini deployment exists). Next:
268
+ Orchestrator slow-path expansion + TaskRunner + Assembler.
269
 
270
  ---
271
 
 
378
 
379
  ### Tools β€” slow-path "Tools" component (TAB)
380
 
381
+ New scope after the original 42-item table; added as the tool layer landed (KM-608/624–631). All TAB-owned (`src/tools/`), all never-throw.
382
 
383
  | # | Item | Owner | Status | Notes |
384
  |---|---|---|---|---|