Rifqi Hafizuddin commited on
Commit Β·
68f76b1
1
Parent(s): 735c421
update progress.md file
Browse files- 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** β
|
| 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),
|
| 171 |
-
|
| 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`
|
| 181 |
-
`AssembledOutput`, `AssemblerNarrative`
|
| 182 |
-
- `invoker.py` β `ToolInvoker` Protocol only
|
| 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`).
|
| 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
|
| 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
|
| 244 |
-
team KM-608
|
| 245 |
-
- `schemas.py` β `CrispStage`, `ToolCall`, `Task`, `TaskList`
|
| 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
|
| 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 |
-
|
| 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
|
| 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 |
|---|---|---|---|---|
|