diff --git a/PROJECT_STATE.md b/PROJECT_STATE.md index a2d31b71..f6c916c6 100644 --- a/PROJECT_STATE.md +++ b/PROJECT_STATE.md @@ -53,7 +53,7 @@ Opens frontend at http://localhost:5173 → backend :8787. - frontend: `cd frontend && npm run dev` (Vite; `VITE_BACKEND_URL` → backend) - harness install: `cd harness && python -m venv .venv && pip install -e ".[dev]"` → `tht` on PATH -## How to test (all green as of 2026-07-07: harness pytest 314 / gate JS 103 / backend 71 / frontend 182) +## How to test (all green as of 2026-07-07: harness pytest 330 / gate JS 107 / backend 71 / frontend 182) - harness: `cd harness && .venv/bin/pytest -q` (5 L2/real-DB tests are deselected by default) - backend: `cd backend && npx vitest run` · typecheck `npx tsc --noEmit -p .` - frontend: `cd frontend && npx vitest run` · typecheck `npx tsc -b` · e2e `npm run e2e` (Playwright) @@ -104,6 +104,15 @@ workspace `psd` via `./scripts/run-stack.sh` to verify (a) the promotion checkli pre-selected and persists selected/declined correctly, (b) finalize indexes the pair, (c) `tht memory solved-search` returns it with sql + tables. +**Fast-follow:** +- RestSearcher top-k dilution: `memory` and `solved_question` share the pgvector table and + `search_similar` has no server-side kind filter — with many solved records the client-side + filter can starve `tht memory search` results (and vice versa); fix = over-fetch (top_n*3) + when kinds is a strict subset, or kind param in the RPC — da fare prima che i solved record + si accumulino. +- `tht memory solved-search` muore con traceback grezzo se il vectordb è irraggiungibile + (SKILL.md la prescrive in F4/F6/F7) — degradare a messaggio di una riga. + ## 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/extensions/tht-gate.js b/harness/.pi/extensions/tht-gate.js index 06832293..9302d743 100644 --- a/harness/.pi/extensions/tht-gate.js +++ b/harness/.pi/extensions/tht-gate.js @@ -1076,13 +1076,13 @@ export default function (pi) { ctx, ["memory", "save-one", "--session", session, "--decision", String(c.decision_seq), "--json"], - "", + `Recupero manuale (umano): tht memory save-one --session ${session} --decision ${c.decision_seq}. Finora salvate: ${saved}.`, ); if (err) return err; const e2 = relayIfThtFails(ctx, decisionAddArgs(session, { type: "memory_promoted", subject: c.subject, detail: `seq:${c.decision_seq}`, rationale: c.rationale || c.detail || "", - }), ""); + }), `Memoria salvata nel vectordb ma decisione memory_promoted NON registrata: recupero manuale (umano) con tht decision add --session ${session} --type memory_promoted --subject "${c.subject}" --detail seq:${c.decision_seq}.`); if (e2) return e2; saved++; } diff --git a/harness/tht/cli/memory_cmd.py b/harness/tht/cli/memory_cmd.py index f4e1a6be..5ffa21cb 100644 --- a/harness/tht/cli/memory_cmd.py +++ b/harness/tht/cli/memory_cmd.py @@ -456,8 +456,8 @@ def index_solved_session(cfg, session_id: str) -> int: if not has_vector_write_rest(cfg): raise RuntimeError( - "vector_write_rest assente: la coppia domanda->SQL si indicizza con la " - "writer key (workstation) o dal server" + "vector_write_rest assente: la coppia domanda->SQL si indicizza solo con la " + "writer key configurata nel workspace yaml" ) manifest = load_session_or_exit(cfg, session_id) record = build_solved_record(