sofhiaazzhr Claude Opus 4.8 commited on
Commit
8c1bb63
Β·
1 Parent(s): 66e2e4d

[NOTICKET] docs: add checkpoint plan for 2026-06-17 sync

Browse files

Shared 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>

Files changed (1) hide show
  1. 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.