Commit Β·
8c1bb63
1
Parent(s): 66e2e4d
[NOTICKET] docs: add checkpoint plan for 2026-06-17 sync
Browse filesShared work plan (Sofhia + Rifqi) from the 2026-06-11 checkpoint: locked
decisions, final tool-set mapping, ownership with task status, per-tool
contracts, timeline, open questions, and a dated progress snapshot
(registry trim KM-641, tool matrix, few-shot sync done).
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
- CHECKPOINT_PLAN_2026-06-17.md +134 -0
CHECKPOINT_PLAN_2026-06-17.md
ADDED
|
@@ -0,0 +1,134 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
# Checkpoint Plan β Wednesday, 17 June 2026
|
| 2 |
+
|
| 3 |
+
Working plan for Sofhia & Rifqi based on the checkpoint with mas Harry on **Thursday, 11 June 2026**.
|
| 4 |
+
Goal: everything below is **merged and demo-able before the next sync on Wednesday, 17 June (afternoon)**.
|
| 5 |
+
|
| 6 |
+
**Updated at: Friday, 12 June 2026** (Sofhia)
|
| 7 |
+
|
| 8 |
+
> Source of truth for decisions is the meeting itself. Note: the NotebookLM summary is **stale on two points** β Data Availability Check was *eliminated* as a tool, and Success Metrics was *folded into* the Problem Statement template. Do not build either as a standalone skill.
|
| 9 |
+
|
| 10 |
+
---
|
| 11 |
+
|
| 12 |
+
## 0. Progress (per Fri 12 Jun β Sofhia)
|
| 13 |
+
|
| 14 |
+
Dated snapshot of what landed this session. Live task status (incl. what's left) lives in Β§2 Ownership β this section only records the deltas + traceability.
|
| 15 |
+
|
| 16 |
+
- β
**Tool matrix** built (xlsx, all ~10 tools + status colours) β presentation material ready.
|
| 17 |
+
- β
**Registry trimmed to 4 active analytics** (`KM-641`, commit `66e2e4d`): `ACTIVE_ANALYTICS_TOOLS` (descriptive, aggregate, correlation, trend) vs `DEFERRED_ANALYTICS_TOOLS` (comparison, contribution, profile, segment) β specs + compute fns kept, only registry exposure withheld. Tests 206 pass, ruff/mypy clean.
|
| 18 |
+
- β
**Planner few-shot synced**: Example A `analyze_contribution` β `analyze_aggregate` (so few-shots don't reference a deferred tool). Name renames in `examples.py` still pending (Rifqi, Β§2).
|
| 19 |
+
|
| 20 |
+
---
|
| 21 |
+
|
| 22 |
+
## 1. Locked decisions (from the 2026-06-11 checkpoint)
|
| 23 |
+
|
| 24 |
+
1. **Single chat page.** The separate interview/survey page is killed. Sidebar = Knowledge menu (connect/manage data) + Analysis menu (sessions).
|
| 25 |
+
2. **Data-first hard gate.** Creating a new analysis requires **β₯ 1 bound data source** (server-side rejection, no empty sessions). User provides title + optional short description.
|
| 26 |
+
3. **Analysis State lives in the DB.** Per-analysis row: `user_id`, `data_source_ids[]`, `interview_status` (default `not_pass`), `report_status` (default `no_report` β `V1`, `V2`, β¦). Explicitly **NOT cached, NOT in Redis** β the Orchestrator reads it from Postgres every turn.
|
| 27 |
+
4. **Skills, not agents.** No separate interview agent. The Orchestrator routes per user turn using the Analysis State; an analytical request still executes through the existing Planner β TaskRunner β Assembler spine (static plan, no mid-run LLM).
|
| 28 |
+
5. **Interview = one skill: Problem Statement.** Success metrics become fields inside the PS template (what to increase/decrease + target). Data availability check is handled by the data-first creation gate + PS validation cross-checking fields against the bound catalog β not a separate tool.
|
| 29 |
+
6. **Analytics focus = 4 tools:** descriptive, aggregate, correlation, trend. The other four composites (comparison, contribution, profile, segment) are **deprioritized, not deleted** β keep the code, just don't register them. If "comparison" returns later it should be a proper statistical **test**, not a generic compare.
|
| 30 |
+
7. **`describe_source` merges into the listing tool** β one call returns sources *with* their schema/metadata, fewer tools for the planner.
|
| 31 |
+
8. **Report = on-demand skill.** Renders from accumulated **AnalysisRecords + the Problem Statement** β never from chat history. Each generation snapshots the record IDs it used and bumps `report_status` to `V<n>`.
|
| 32 |
+
9. **Help = deterministic guide.** No LLM: read Analysis State β tell the user the next required step. Callable in any state.
|
| 33 |
+
10. **Redis Cloud free tier, TTL = 1 hour**, env shared in the team group β for retrieval/query caching only, never for state.
|
| 34 |
+
|
| 35 |
+
### Final tool set (~10)
|
| 36 |
+
|
| 37 |
+
| Checkpoint name | Maps to (current code) | Status |
|
| 38 |
+
|---|---|---|
|
| 39 |
+
| `knowledge_check` | new β list user's documents + metadata | to build |
|
| 40 |
+
| `data_check` | `list_sources` + `describe_source` merged (catalog-backed) | merge + rename |
|
| 41 |
+
| `knowledge_retrieve` | `retrieve_documents` | rename |
|
| 42 |
+
| `data_retrieve` | `query_structured` (tabular: file + DB, both working) | rename |
|
| 43 |
+
| `analyze_descriptive` | `src/tools/analytics/descriptive.py` | done |
|
| 44 |
+
| `analyze_aggregate` | `src/tools/analytics/aggregation.py` | done |
|
| 45 |
+
| `analyze_correlation` | `src/tools/analytics/relationship.py` | done |
|
| 46 |
+
| `analyze_trend` | `src/tools/analytics/temporal.py` | done |
|
| 47 |
+
| `problem_statement` | new β interview skill (**Harry**) | Harry |
|
| 48 |
+
| `generate_report` | new β on-demand, versioned | to design |
|
| 49 |
+
| `help` | new β deterministic state guide | to build |
|
| 50 |
+
|
| 51 |
+
(`problem_statement`, `generate_report`, `help` live at the orchestrator level; the TaskRunner registry holds the 4 analytics + 4 data/knowledge tools. Unregister `analyze_comparison`, `analyze_contribution`, `analyze_profile`, `analyze_segment` from the planner-visible registry β keep the modules.)
|
| 52 |
+
|
| 53 |
+
---
|
| 54 |
+
|
| 55 |
+
## 2. Ownership
|
| 56 |
+
|
| 57 |
+
### Sofhia
|
| 58 |
+
- [x] 4 analytics tools: trim registry to 4 active, tests still pass after deprioritizing the other four. (`KM-641`, commit `66e2e4d`)
|
| 59 |
+
- [ ] Data/knowledge tools: merge `describe_source` into `data_check`, rename `retrieve_documents` β `knowledge_retrieve`, `query_structured` β `data_retrieve`, build `knowledge_check`.
|
| 60 |
+
- [ ] Co-design `generate_report` with Rifqi (see Β§3).
|
| 61 |
+
- [x] Tool matrix (see Β§4).
|
| 62 |
+
|
| 63 |
+
### Rifqi
|
| 64 |
+
- [ ] **Redis Cloud free tier** (~30β50 MB): create instance, set TTL = 1 h, share env vars in the group. Unblocks everyone's local testing β do this first.
|
| 65 |
+
- [ ] Co-design `generate_report` with Sofhia.
|
| 66 |
+
- [ ] Verify planner tool list matches the trimmed registry (4 analytics + 4 data/knowledge) and few-shots don't reference removed tools.
|
| 67 |
+
|
| 68 |
+
### Shared (Sofhia + Rifqi)
|
| 69 |
+
- [ ] `generate_report` design + skeleton: input = AnalysisRecords for the session + Problem Statement from Analysis State; output = versioned artifact; bumps `report_status`. Agree on the contract even if rendering is stubbed for Wednesday.
|
| 70 |
+
- [ ] `help` skill: deterministic β read Analysis State, return the next required step. Small, do it together or whoever finishes first.
|
| 71 |
+
- [ ] Tool behavior smoke test end-to-end on an easy case (descriptive/aggregate path), per Harry's ask: "robust tools before agents."
|
| 72 |
+
|
| 73 |
+
### Harry (dependencies β not ours, but we block on them)
|
| 74 |
+
- `problem_statement` skill + PS template (incl. increase/decrease target fields).
|
| 75 |
+
- Analysis State class + DB table, frontend analysis-builder step.
|
| 76 |
+
- Merging our PRs (he auto-merges; he clones from latest after).
|
| 77 |
+
|
| 78 |
+
---
|
| 79 |
+
|
| 80 |
+
## 3. Per-tool behavior contract (how to build each one)
|
| 81 |
+
|
| 82 |
+
Harry's framing: for every tool, define **goal / trigger / input / process / output**, and behave like a Claude-style skill β if a required argument is missing, respond with a polite feedback message asking for it (e.g. table/column name), never guess silently.
|
| 83 |
+
|
| 84 |
+
- **`knowledge_check`** β "what documents do I have?" β list documents with name, type, uploaded-at.
|
| 85 |
+
- **`data_check`** β "what data do I have?" β sources (file + DB) with schema/metadata from the data catalog, created/uploaded timestamps.
|
| 86 |
+
- **`knowledge_retrieve`** β RAG over uploaded documents; returns passages with source attribution.
|
| 87 |
+
- **`data_retrieve`** β query tabular data (file + DB) via QueryIR; output consumable by the `analyze_*` tools.
|
| 88 |
+
- **`analyze_*` (4)** β require valid table/column references; if missing or wrong, return actionable feedback instead of guessing.
|
| 89 |
+
- **`generate_report`** β on-demand only (never auto); post-pass gated; renders from AnalysisRecords + PS; snapshots record IDs; bumps version.
|
| 90 |
+
- **`help`** β no LLM; state β next step. Repeating it is fine, that's its job.
|
| 91 |
+
|
| 92 |
+
---
|
| 93 |
+
|
| 94 |
+
## 4. Tool matrix (deliverable for the sync)
|
| 95 |
+
|
| 96 |
+
Harry explicitly asked for a matrix covering every tool. Produce one sheet/markdown table with columns:
|
| 97 |
+
|
| 98 |
+
`tool | goal | trigger (when the orchestrator calls it) | input | process | output | gated by interview_status? | status (done / in progress / planned)`
|
| 99 |
+
|
| 100 |
+
Use the tool set table in Β§1 as the row list. This doubles as the presentation material on Wednesday.
|
| 101 |
+
|
| 102 |
+
---
|
| 103 |
+
|
| 104 |
+
## 5. Day-by-day
|
| 105 |
+
|
| 106 |
+
| Day | Target |
|
| 107 |
+
|---|---|
|
| 108 |
+
| **Thu 11** | Checkpoint meeting + task split with Harry. |
|
| 109 |
+
| **Fri 12 (today)** | β
Registry trimmed to 4 analytics + few-shot synced (Sofhia, KM-641). β
Tool matrix built. β³ Redis Cloud + env share (Rifqi). |
|
| 110 |
+
| **Mon 15** | Data/knowledge tools done (`data_check` merge, renames, `knowledge_check`). `generate_report` contract agreed. |
|
| 111 |
+
| **Tue 16** | `help` skill done. `generate_report` skeleton wired to AnalysisRecord. Tool matrix drafted. End-to-end smoke test on the easy path. |
|
| 112 |
+
| **Wed 17 (AM)** | Buffer: fix fallout, finalize matrix, rehearse the demo flow. |
|
| 113 |
+
| **Wed 17 (PM)** | **Sync with Harry.** |
|
| 114 |
+
|
| 115 |
+
---
|
| 116 |
+
|
| 117 |
+
## 6. Open questions to confirm with Harry on Wednesday
|
| 118 |
+
|
| 119 |
+
1. **Gate scope.** Proposal: keep the fast path + exploration tools (`knowledge_check`, `data_check`, retrieves, `help`, arguably `descriptive`) available **pre-pass**; gate only the insight tools (correlation, trend, report). Hard-gating everything risks frustrating users who just want to look at their data.
|
| 120 |
+
2. **Who flips `interview_status` to `pass`?** Proposal: a deterministic validator (PS template slots complete + fields cross-checked against the bound catalog) makes the call β the LLM conducts the conversation but never decides the pass. ("Conversational skin, deterministic skeleton.")
|
| 121 |
+
3. **Skills vs spine β one sentence to lock in writing:** *"Skills are registry tools executed by the existing Planner β TaskRunner β Assembler spine; the Analysis State gate is a pre-check in the Orchestrator."* This keeps the new flow and the locked architecture fully compatible.
|
| 122 |
+
4. `generate_report` invocation goes through the same gate (post-pass only) β confirm.
|
| 123 |
+
|
| 124 |
+
---
|
| 125 |
+
|
| 126 |
+
## 7. Definition of done for Wednesday
|
| 127 |
+
|
| 128 |
+
- [ ] All team PRs merged; Harry unblocked on the Analysis State class.
|
| 129 |
+
- [ ] Registry exposes exactly 4 analytics + 4 data/knowledge tools, all passing local tests.
|
| 130 |
+
- [ ] Redis Cloud shared and working locally for all three of us (TTL 1 h).
|
| 131 |
+
- [ ] `help` works against a (possibly stubbed) Analysis State.
|
| 132 |
+
- [ ] `generate_report` contract written; skeleton callable.
|
| 133 |
+
- [ ] Tool matrix ready to present.
|
| 134 |
+
- [ ] One end-to-end happy path runs: create analysis (with data) β blocked pre-pass β interview stub passes β descriptive/aggregate answer β record persisted.
|