docs(spec): arricchisci metadata memory vectordb (no lookup registro)
Gap trovato in user review: la tabella vectors.memory aveva metadata
{type,session_id,tables,concepts} — mancavano subject/detail/rationale strutturati,
quindi l'hit vettoriale non bastava per applicare la memoria. ChironeWp3 faceva
lookup nel registro canonico via mem_id; stesso difetto ereditato in ThothII.
Decisione: arricchire il metadata del VectorRecord memory con subject/detail/rationale
(in memory_vector_records, nsp/memory.py). pack_metadata (rest_writer.py:26) li
serializza gia' nel jsonb via **record.metadata. Nessuna modifica al writer RPC,
nessuna modifica allo schema DB. search_similar proietta gia' metadata completo ->
la F2 ricostruisce la decisione direttamente dall'hit, senza lookup registro.
Momento ideale: tabella memory vuota, niente re-indicizzazione. Aggiunto come task
esplicito in Onda 3 (dove si porta memory_cmd). Registro globale resta source-of-truth
per la promozione (F5), ma la F2 legge solo dal vectordb.
This commit is contained in:
@@ -30,6 +30,8 @@ Onda 2 — vector layer
|
||||
|
||||
Onda 3 — cmd foglia (usano radici + vector)
|
||||
memory_cmd, search_cmd, evidence_cmd, db_cmd, decision_cmd
|
||||
+ arricchimento metadata memory (subject/detail/rationale in nsp/memory.py:
|
||||
memory_vector_records) — correzione gap ereditato, vedi Sezione 3 punto 2
|
||||
|
||||
Onda 4 — cmd SQL/CTE (cluster sql_cmd)
|
||||
sql_cmd (do_run, do_explain, promoted_tables_for, _load_physical_or_exit)
|
||||
@@ -162,6 +164,8 @@ Riscrittura ex-novo che prende spunto dalla struttura ChironeWp3 ma riflette Tho
|
||||
|
||||
2. **Fase 2 — save-one (D11) invece di full resync.** Originale: `memory promote` poi `memory index` (full resync, solo-server). ThothII: in `profile=workstation`, la promozione di una singola memoria usa `nsp memory save-one` (upsert mirato via writer key, implementato in B2); `memory promote + memory index` (full resync) resta per `profile=server`. La skill guida il modello al comando corretto: presenta `memory save-one` quando il contesto è una singola memoria promossa in workstation, `memory promote + memory index` quando si fa promozione batch lato server. La discriminante è il comando invocato (la CLI legge il profilo da `.env`); la skill non deve far dedurre il profilo al modello, ma scegliere il comando in base al numero di memorie da promuovere (una → save-one, molte → promote). Onesta sul limite: save-one ha cleanup distruttivo assente (resta server-side).
|
||||
|
||||
**Arricchimento metadata vectordb (correzione del gap ereditato da ChironeWp3).** La tabella `vectors.memory` aveva `metadata = {type, session_id, tables, concepts}` — mancavano `subject`/`detail`/`rationale` strutturati, quindi l'hit vettoriale non bastava per applicare la memoria (ChironeWp3 faceva lookup nel registro canonico). ThothII arricchisce: in `memory_vector_records` (`nsp/memory.py`) si aggiungono `subject`/`detail`/`rationale` al dict `metadata` del `VectorRecord`. `pack_metadata` (`rest_writer.py:26`) li serializza automaticamente nel jsonb via `**record.metadata`. Nessuna modifica al writer RPC, nessuna modifica allo schema DB. `search_similar` proietta già `metadata` completo → la F2 ricostruisce la decisione direttamente dall'hit, senza lookup nel registro. Il registro globale resta come source-of-truth per la promozione (F5), ma la F2 legge solo dal vectordb. **Momento ideale: la tabella memory è vuota, niente re-indicizzazione di dati esistenti.**
|
||||
|
||||
3. **Fase 3 — riscrittura (invariata nel modello, solo vocabolario gate).** Prerequisito "devi essere già in Fase 3" (exit 5, `nsp/phase.py:171`), `question_rewritten` come decisione, sequenza ordinata (decisione → `rewrite_question` tool → `nsp session set-question` scrive `question.md` deterministicamente, `session/store.py:set_question`). Allineamento widget-descriptor. Gestione modifica/rifiuto invariata ("Altro" itera, "Torna indietro" riapre F1).
|
||||
|
||||
4. **Fase 4 — value grounding (D14a) + formula (D14b).** Originale F4 menziona solo `table_promoted/excluded/column_corrected`. ThothII aggiunge:
|
||||
@@ -225,7 +229,7 @@ Verifica sullo schema reale: entrambi i concetti hanno fact table dedicate (`fac
|
||||
| D14a value-grounding | sì (se Onda 0b fatta) | "ablazione"/"cardioversione" matchano tabella + campi; richiede indice LSH buildato (Onda 0b) |
|
||||
| D14b formula | sì | "stesso anno", "età nell'anno ablazione" |
|
||||
| D13 free-text | se innesca | se il reviewer corregge via "Altro" |
|
||||
| D11 save-one (F2) | solo se memorie trovate | se `nsp memory search` in F2 trova match (NOTA: tabella memory azzerata di recente — la prima sessione probabilmente salta F2 senza match, quindi D11 va validato con una seconda sessione dopo aver popolato le memorie) |
|
||||
| D11 save-one (F2) | solo se memorie trovate | se `nsp memory search` in F2 trova match (NOTA: tabella memory azzerata di recente — la prima sessione probabilmente salta F2 senza match, quindi D11 va validato con una seconda sessione dopo aver popolato le memorie). L'arricchimento metadata (Onda 3) fa sì che quando F2 trova match, l'hit basta per applicare la memoria senza lookup registro. |
|
||||
| F6 CTE | sì | decomposizione naturale |
|
||||
| D15 rollback | se innesca | se il reviewer torna indietro |
|
||||
|
||||
|
||||
Reference in New Issue
Block a user