diff --git a/PROJECT_STATE.md b/PROJECT_STATE.md index c398709a..a2d31b71 100644 --- a/PROJECT_STATE.md +++ b/PROJECT_STATE.md @@ -78,6 +78,32 @@ Opens frontend at http://localhost:5173 → backend :8787. - Global user rules (`~/.claude/CLAUDE.md`): think before coding, simplicity first, surgical changes, goal-driven verification. +## Active memory — F8 promotion gate + solved-question recall — SHIPPED, L2 pending (2026-07-07) + +Two additions to close the loop on reusable memory, on top of the existing `tht memory +search` (Phase 2) reuse: + +- **F8 promotion gate.** `reviewer_memory_promote` (Phase 8, called with only the session + id): the gate computes candidates deterministically via `tht memory promote --preview + --json` (the 3 reusable decision types, already excluding previously promoted/declined + ones) and shows a pre-selected checklist. Selected → `tht memory save-one` persists to + the vectordb + records `memory_promoted`; deselected → `memory_promotion_declined` + (ledger detail `seq:`) so it is never re-proposed. `tht memory promote`/`save-one` were + added to the gate's anti-bypass FORBIDDEN list (model must go through the gate tool). +- **Solved-question exemplars.** New vector kind `solved_question` reusing the existing + `memory` pgvector table (no server-side DDL); `harness/tht/solved.py` does a one-row + upsert keyed by a hash of question+SQL. CLI: `tht memory solved-index` / `solved-search`. + `tht session finalize` auto-indexes the pair (best-effort: green line on upsert, cyan + "già aggiornata" on dedup no-op, yellow warning + the recovery command + `tht memory solved-index ` on failure). `SKILL.md` now prescribes calling + `solved-search` as reference-only context in F4 (schema linking), F6 (CTE plan) and F7 + (final SQL), and documents the finalize auto-index in "Session end". + +**Pending L2 gate (not yet run — needs VPN + writer key):** one live end-to-end session on +workspace `psd` via `./scripts/run-stack.sh` to verify (a) the promotion checklist renders +pre-selected and persists selected/declined correctly, (b) finalize indexes the pair, +(c) `tht memory solved-search` returns it with sql + tables. + ## Review gates v2 — payload strutturati + viewer dedicati — COMPLETE (2026-07-07) Plan: `~/.claude/plans/prima-di-passare-ai-inherited-marshmallow.md`. Merged to `main` @ `2410f01` diff --git a/harness/.pi/skills/tht-sessione/SKILL.md b/harness/.pi/skills/tht-sessione/SKILL.md index 1c81b42b..196b52f7 100644 --- a/harness/.pi/skills/tht-sessione/SKILL.md +++ b/harness/.pi/skills/tht-sessione/SKILL.md @@ -232,6 +232,10 @@ Prerequisite: Phase 3 closed. 1. `tht schema introspect` + `tht schema render --format mschema-text` for the schema context. Copy table/column names EXACTLY from it — never invent objects. + Also run `tht memory solved-search "" --json`: similar already-solved + questions show which tables comparable questions used. Cite relevant precedents + (session id + tables) to the reviewer as CONTEXT — they are reference material, + NOT decisions to apply; their filters/periods may not transfer. 2. Propose tables to promote/exclude with **`reviewer_schema_linking`**: pass `tables[]` as `{id, name, kind: "promote"|"exclude", rationale, suggested_columns}`. Do NOT list every column yourself — the gate loads the full column set (with @@ -281,6 +285,8 @@ Prerequisite: Phase 5 closed. 1. Read `cte.md`. Decompose the rewritten question into CTEs (Agent View Generation): each CTE captures an informative subset with a clear purpose, named in snake_case. + `tht memory solved-search "" --json` shows how similar solved questions + were structured — use as reference only. 2. Present the full CTE plan to the reviewer with `reviewer_confirm kind:"cte_plan"`, passing a **structured v2 artifact** (`artifact:{kind:"cte_plan", data:{…}}`). You author `question`, `strategy` and each `ctes[]` entry (`name`, `purpose`, @@ -322,6 +328,9 @@ Prerequisite: Phase 6 closed. 1. Read `sql-generation.md`. Recursive divide-and-conquer: the CTEs approved in Phase 6 are the preferred building blocks (reuse them by name). + `tht memory solved-search "" --json` gives the final SQL of similar + solved questions: reference exemplars — never copy filters, periods or + populations without checking them against the current rewritten question. 2. Compose the final SQL (PostgreSQL dialect, exact names from the schema context). **Output columns (F4 honoring).** The columns promoted in Phase 4's `schema_linking.json` are the reviewer-approved OUTPUT columns: project exactly @@ -354,5 +363,7 @@ Prerequisite: Phase 7 closed. ## Session end When the workflow is complete (Phase 8), `tht session finalize` closes the session -and unlocks input. The persisted state (ledger `review_decisions.jsonl` + artifacts) -is the truth: what is not recorded did not happen. +and unlocks input. Finalize also indexes the question→SQL pair in the vectordb +(kind `solved_question`, best-effort — on failure recover with `tht memory +solved-index `). The persisted state (ledger `review_decisions.jsonl` + +artifacts) is the truth: what is not recorded did not happen.