Commit History
-
[NOTICKET] planner: group-labelled recipes + the feasibility gate the eval caught (A18)
Rifqi Hafizuddin +1: Claude Opus 5Recipes, part 2 of A18. The table goes R1-R6 -> 18 rows, each labelled with its GROUP so the tool list (organised by group, A17) and the rules (organised by recipe) stop being two overlapping schemes the planner has to reconcile. New: R7 data-quality, R8 forecast, R9 importance, R10 pareto, R11 segmentation, R12 clustering, R13 A/B test, R14 anomaly, R15 method-infeasible. Plus a "telling the close pairs apart" block for the six intra-group confusions the group hint cannot separate -- trend vs forecast, correlation vs importance, importance vs pareto, segmentation vs clustering, A/B vs aggregate, anomaly vs descriptive. R15 is not a softer R6: R6 is "the column does not exist", R15 is "the column exists but no tool does that". Numbering note -- the pre-implementation spec called the method-infeasible recipe R12; the implemented table gives R12 to clustering and R15 to method-infeasible. Stale references in DEV_PLAN, examples.py and groups.py corrected rather than renumbering the live …b56fb4c -
[NOTICKET] planner: ten exemplars, one per tool that had none (A18, part 1)
Rifqi Hafizuddin +1: Claude Opus 5After A25 scoped few-shots to the visible tool set, three groups rendered ZERO examples demonstrating their own tools -- relationship, grouping and evaluate each kept 7, none of which called a tool from that group. forecast, data_quality and correlation had no exemplar either, correlation never having had one. Those turns planned from DESCRIPTION alone. Ten new examples, N through W, one per undemonstrated tool, following the spec agreed in DEV_PLAN before implementation: N forecast pairs against B (trend): same retrieve, past vs project O correlation two NAMED columns P importance same retrieve as O -- so the contrast is the question alone: "how do X and Y relate" -> O, "what most affects X" -> P Q pareto arithmetic share, vs P's statistical explanation R segmentation rule GIVEN -> explicit bins + labels S cluster no rule -> discovered, vs R T ab_test two named groups + a significance verdict U anomaly …57f8cee -
[NOTICKET] planner: unblock the ML tools A15 just activated (A24, A25)
Rifqi Hafizuddin +1: Claude Opus 5A15 turned on all 18 tools. Two things would have kept the four ML tools effectively unusable, both found while drafting the A15 handoff, both mine. A24 -- modeling was still forbidden in CODE. prompt.py injected, on every planner call: - modeling_allowed: False (no modeling tools exist in v1 -- do not emit modeling tasks) Rule 5 in planner.md was rewritten to permit modeling, but this line sits in the constraints block, is more specific, and flatly asserts the tools do not exist. The planner would have been told to ignore forecast/anomaly/importance/cluster the moment they went live -- four of the demo's payoffs. Constraints.modeling_allowed now defaults True, and the rendered text follows the flag rather than asserting a fixed world. Kept as a knob, not deleted: a caller can still force a strictly descriptive run. A25 -- few-shots were not scoped with the registry, an A17 gap I introduced. render_examples() took no arguments, so all 13 rendered regardless of the group hint. A…3258aa2
-
[NOTICKET] planner: rebalance few-shot exemplars EN/ID, demo the reply-language rule
Rifqi Hafizuddin +1: Claude Opus 5A19. The exemplar set was 13/13 English while the eval dataset -- and real traffic -- are majority Indonesian (17 ID / 14 EN). In-context learning over-predicts whatever the examples show most (majority-label bias, Zhao et al. ICML 2021), so an all-English set teaches the planner that Indonesian questions are out-of-distribution. Converted four questions to Indonesian (now 9 EN / 4 ID), chosen so each conversion also breaks a near-duplicate: D breaks the 3x check_data -> retrieve_data -> analyze_aggregate stack (A/D/E) M stops reading as a near-duplicate of J's English bar-chart ask L R2b "berapa banyak ..." is the recipe most often asked in Indonesian H the infeasible example -- see below H now demonstrates the reply-language rule: an Indonesian question gets an Indonesian infeasible_reason while every other field stays English. prompt.py:151 has always mandated this ("If (and only if) you return an infeasible plan, write infeasible_reason in {reply_language}") but NO e…fb30aec
-
/fix planner count and report (#19)
- /fix planner count question (11de970ff65be9b4f81f773cfb355d3dc57358d7) - [noticket] fix report bug where some answered analysis isnt included in report summary answers (8dec1825cf803ad28f4ff0400b9c373250a7d90a) - [NOTICKET] fix: split report floor from report body; scope analysis reads by user_id (fd4865b20dfc46782706be9aab318f909b9903c3) - [NOTICKET] docs: sync report floor/body + security posture; add review remediation tracker (fc5200c994441ec505ea7a82469da577afe170a5) - [NOTICKET] test: planner eval harness (rule-compliance, --selfcheck/--rescore) (4292522aa3fa3a7af8f933307334cb7e5eb0b377) - [NOTICKET] eval: repair readiness harness; commit intent/help/readiness baselines (08a0a4ad5eacc6c90df22fab5be69f2d33579f29) - [NOTICKET] fix: compiler parity — F-17 fabricated column, F-18 LIKE nulls, F-25 empty in/not_in (8f736f90f1958960a83847d332b45b13fa346168) - [NOTICKET] feat: bound catalog render + blob read; scope charts/traceability; mark degraded seams (0cb7d53cb6f7f7e7b687dd6d9c27…f282b15
-
fix/ check and new chart tool (#16)
- check: table-level column drill + drop misleading "name a table" hint (ef0c7b1c5aa49a244b02f1b5eea15cc77dcf2bcb) - [KM-715] charts: render_chart tool + message_charts store + GET /api/v1/charts + planner viz slice (87cfcf884d923ee4bcd722e0e4ef4d90d7eaedca) - [KM-715] checkpoint: S1a deterministic quality checkpoint between runner and assembler (f3c8de34dc19a573031b67fd4f48dcfbadcdfed8) - [KM-715] docs: sync REPO_STATUS/DEV_PLAN + land SPINE_V2_PLAN (W1/W2 done) (434eacbf2ac8324188ebe5e32775dbc9d2a3f49a) - planner: value-handoff (${tN.col} → list) for tabular lookup/anti-join (54070ac1407b751000e49dfe7f102a2be5ab1ff8) - [KM-715] charts: GET /charts by message_id only + tri-state status marker (b8d15761addf4d499c9631df64e7693aa1d61fa2) - [KM-715] report: embed charts as plotly EDA fences; render_chart counts toward the floor (89db8be6b6f11e86ad0776d2ee07f2306e3b6079) - [KM-715] docs: contract + status deltas for the charts lead-review round (96347ee7c55a4eb39a906409ec214463e25c5e35) - …5a60e93
-
/fix planner and report (#13)
- [KM-644] planner: infeasible plan outcome + entity-ranking few-shots (089b69d9b6111e813307c6afbd3e7613bb823f9d) - [KM-644] harden query path: grouped-select rule, int-date trends, sample decode, trace guard (74ad5261736bda0bd72bccdb41565ea67313993a) - [KM-703] add analyze_merge tool: two-table combine (analytics.combine) (8abf635532366d670367557a3ffa03d42371d831) - [KM-567] planner support for analyze_merge: data_right guard + two-retrieve merge few-shot (a029a843247e6ea4d3c79a4e2c1b7571ba4cda69) - [KM-644] report v2: BQ answers, unresolved/excluded sections, evidence tables + curation/readiness endpoints (4ceb058d85c5a2a289443b9411d2b345027fa226) - [NOTICKET] refactor: mint message_id as UUID to mirror analyses_messages id shape (4253733b6b8db0449a82442a915c732ddd55f528) - [KM-644] report: drop Notes/Unresolved/Method sections from rendered markdown (compact report) (eef6de811a139402c79fd74ad4adfc00cf7aff01) - /edit md file (8198cc188ff05a2798ae2056b90b6e56e1bea87b) Co-authored-by…49b0848
-
/fix validator and report (#10)
- /fix report: remove record_id hash citations, EDA (for future tool) change to data source, transform to mdx-safe (b1b101730ccf5628e43e80f2ad654f78fbed5207) - [NOTICKET] fix(planner): repair near-miss catalog ids in QueryIR before validation (aacd4d13def258a9815761aecbd7b246a8dae9fc) - /fix report: group findings by analysis, dedup, code-span-safe MDX escaping (029b48894e9f79af6c0d81c00a2d811a982f87ae) - [NOTICKET] fix(tools): log swallowed analytics tool errors in AnalyticsToolInvoker (93d9381b2a5f5efe058c913fe0b793ce994a9097) - fix(planner): harden plan validation to reduce retry thrash on structured questions (1619dd3c0fa74825010c7af6d4b375e3b9404847) - [NOTICKET] fix(tools): coerce numeric-string columns before analyze_* compute (6bda333866a1a8ccf1b3fe6fcee7a8e1832f28d7) - fix(planner): correct top-N guidance — in-query ranking IS supported (99aa4141aed8241a625d290fb170f74192a6d831) - feat(guardrails): add input guard, out_of_scope intent, and refusal handling (0bbc27bc40ba20e7a8e…0e5fdb5
-
feat/Knowledge & Data Tools (#3)
- [KM-641] refactor(tools): trim analytics registry to 4 active tools (66e2e4df66f1abf7eaa7e442d9900d428696ece4) - [NOTICKET] docs: add checkpoint plan for 2026-06-17 sync (8c1bb63ebdee02f9db0da9fc2b2269823b0a7688) - [KM-642] refactor(tools): rename data-access tools to data/knowledge naming (c38c0c29d3e6b245f67d03f2c35e451900e1abdb) - [KM-643] feat(tools): merge data sources into data_check + add knowledge_check (4bd5f1efdc560a64092cc8df672a7990fa949b59) - [NOTICKET] docs: record KM-642/643 in checkpoint plan + PROGRESS (4c57588b90fe0cac8d0d4d22cfe5701fc9eb52dd) - [NOTICKET] fix(chat): scope response cache by user_id + drop TTL to 1h (R5) (b701e95d300c7d2480a3608b2d4da6dfe102b19a) - [NOTICKET] feat(slow-path): persist AnalysisRecord via PostgresAnalysisStore (09f845188226dd01633cf74525caa569e4a7d37a) - [NOTICKET] Adopt verb-first skill naming (2d6406def7ed45edd1226e96645ba2a5cdbfa3d0) - [NOTICKET] docs: sync checkpoint plan — verb-first tool names + report-as-API (3b399f84d73b0d98bd99…0721bb4
-
feat/Planner Agent (#2)
- [KM-567][AI] Planner agent: contracts, schemas, inputs, registry (be96601ad46c00e8e789768dd6e89c2db827bde4) - [KM-567][AI] Planner agent: prompt + few-shot examples (83ba6b1743370145454d9315224eeb7b2d12ac18) - [KM-567][AI] Planner agent: validator + service (72306d0ce92c76d60117a20c701c7f8185bcfeef) - [KM-567] docs: record Phase 3 Planner agent in PROGRESS.md (ba2fa8892392028c8d13646c09d1155bbf34e703) - [KM-567][AI] Planner agent: fix PII leak + placeholder/retry robustness (6b3637dda097f16cd98d4b9ad6094fdaed6d1346) - [KM-624] Implement Compute Functions Tools (78c598c22d2f2a14229a83c3f43fa98c5d520ae7) - [KM-624][AI] Planner: realign stub registry + examples to composite analyze_* tools (93a24dabf48d8121e981cc470c835cb10badb62a) - [KM-624] docs: record tool taxonomy + ownership revision in PROGRESS (f3461142542f6216aff23b30a1321dfb4654afdc) - [KM-626][AI] Slow-path agent: seam contracts + TaskRunner (ac310de551d0888ccfef31e981e22d88f54c6a38) - [KM-626][AI] Slow-path agent: Assembler…81e5fe7