Files
ThothII/docs/prd/2026-08-23-refactoring-modulare-conservativo-brief.md
T

142 lines
6.7 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Brief — Refactoring modulare conservativo del workflow
**Stato:** input autorevole per `grill-with-docs`; non è ancora una specifica
implementativa.
## Obiettivo
Riorganizzare l’attuale applicazione ThothII per rendere locali e manutenibili le
modifiche a Disambiguation, Evidence e Memory, preservando integralmente comportamento,
frontend e flusso operativo esistenti.
La prima milestone è esclusivamente un refactoring. Non introduce nuove funzionalità e
non generalizza ThothII come piattaforma di plugin.
## Vincoli già decisi
- Il progetto continuerà a essere sviluppato e mantenuto da un solo proprietario, in un
unico repository e con un unico rilascio.
- I moduli sono package interni secondo normali criteri di programmazione a oggetti.
Non devono essere distribuibili indipendentemente, caricati dinamicamente o scritti da
terze parti.
- I moduli non devono condividere un contratto universale. Ogni modulo può presentare al
workflow una piccola façade adatta alla propria responsabilità.
- Moduli e fasi non coincidono necessariamente: un modulo può contribuire a più fasi e
una fase può coordinare più moduli senza introdurre un protocollo generale.
- Pi resta il runtime concreto per le elaborazioni assistite dal modello. Non viene
introdotta un’astrazione `ModelRuntime`.
- Il workflow resta ordinato e continua a usare `harness/workflow.yaml`, il ledger delle
decisioni, i documenti di sessione e gli attuali gate human-in-the-loop.
- Frontend, eventi SSE, widget, comandi `tht`, JSON, codici di uscita e formato delle
sessioni devono rimanere compatibili.
- Non sono previste migrazioni dei dati delle sessioni esistenti.
- Il flusso SQL centrale, inclusi schema linking, sintesi, CTE e SQL finale, resta nel
workflow core durante questa milestone.
- Un altro componente futuro, estraneo al workflow e al core, non appartiene a questo
refactoring.
## Moduli interni desiderati
### Admission
Occupa l’inizio logico del workflow. Nella prima milestone è un pass-through e ammette
sempre la domanda, così il comportamento osservabile non cambia.
Per una fase futura è già stata scelta questa policy: una domanda non ammessa può essere
riformulata nella stessa sessione; dopo il terzo tentativo fallito la sessione fallisce.
La classificazione e l’esperienza utente non fanno parte del primo refactoring.
### Disambiguation
Raccoglie senza cambiarne il comportamento la logica attuale di chiarimento,
interpretazione revisionata e riscrittura della domanda, comprese istruzioni Pi,
validazioni e presentazione delle relative decisioni.
### Evidence
Consolida le superfici esistenti di acquisizione, canonizzazione, ricerca e citazione.
Mantiene i seam già reali verso filesystem, HTTP e S3 e il contratto CLI/JSON necessario
fra Python e TypeScript. Non introduce un contratto generale per gli altri moduli.
### Memory
Raccoglie senza variazioni funzionali ricerca, selezione, promozione e conoscenza delle
domande già risolte, insieme alle istruzioni e ai gate specifici oggi dispersi.
### Datamart
Incapsula senza modificarla la parte di gestione del datamart oggi svolta nella fase F8.
La fase F8 rimane visivamente e funzionalmente invariata, ma l’eventuale comportamento
Memory che contiene appartiene al modulo Memory. La futura integrazione intelligente del
SQL in un progetto dbt o in un flusso ETL è deliberatamente rinviata al momento in cui
questo modulo verrà sviluppato.
## Responsabilità che restano condivise
Il workflow core conserva soltanto ciò che appartiene realmente all’intero flusso:
- ordine e avanzamento delle fasi;
- ciclo di vita e resume delle sessioni;
- ledger e documenti di sessione esistenti;
- persistenza e locking comuni;
- processo Pi e trasporto backend/frontend;
- gate generici, sicurezza anti-bypass e finalizzazione;
- coordinamento esplicito dei moduli tramite import statici.
I moduli non si scoprono tramite registry e non comunicano tramite event bus. Le
dipendenze condivise vengono ricevute dal modulo oppure coordinate dal workflow core;
un modulo non importa direttamente l’implementazione di un altro.
## Architettura esplicitamente rifiutata
Questa iniziativa non deve introdurre:
- Kernel separato dall’attuale harness;
- manifest, registry, binding o composition resolver;
- negoziazione e versionamento di un contratto universale;
- adapter di esecuzione `in_process`, `process` o `job`;
- `WorkflowDefinition`, `WorkflowCommit`, nuovo event store o upcaster;
- artifact slot e revisioni universali;
- Review Port, Interaction Request/Result o Instruction Bundle generici;
- plugin dbt o automazioni ETL nella prima milestone.
## Fatti rilevanti sul codice attuale
- `harness/.pi/extensions/tht-gate.js` è il principale punto caldo condiviso, con circa
2.000 righe e logica relativa a più domini.
- `harness/.pi/skills/tht-sessione/SKILL.md` contiene circa 450 righe di istruzioni che
attraversano tutte le fasi.
- Evidence possiede già un port reale e tre adapter per filesystem, HTTP e S3.
- Memory possiede già codice dedicato, ma responsabilità e integrazione sono distribuite
tra modulo Python, CLI, gate e istruzioni Pi.
- Disambiguation oggi è soprattutto comportamento distribuito fra istruzioni, decisioni
e gate, non un package applicativo autonomo.
- `harness/workflow.yaml` è già la fonte condivisa dell’ordine e dei requisiti delle
fasi e deve rimanere tale.
L’analisi più ampia del problema corrente resta disponibile in
[`2026-08-21-modularizzazione-disambiguazione-evidence-memory-prd.md`](2026-08-21-modularizzazione-disambiguazione-evidence-memory-prd.md).
## Criterio di riuscita
Dopo il refactoring, una modifica interna a Disambiguation, Evidence o Memory deve
richiedere normalmente interventi nella directory e nei test del relativo modulo. Il
workflow core cambia soltanto quando cambia davvero il flusso condiviso.
La suite esistente, i test di caratterizzazione e i test end-to-end devono dimostrare
che il frontend e ogni comportamento osservabile sono rimasti invariati.
## Questioni da affidare a `grill-with-docs`
L’intervista deve concentrarsi soltanto sulle decisioni necessarie al refactoring:
1. ownership esatta dei file e delle responsabilità attuali;
2. façade minima e specifica di ciascun modulo;
3. collocazione delle istruzioni Pi e degli helper del gate relativi a ciascun dominio;
4. dipendenze condivise che devono essere ricevute dai moduli;
5. ordine di estrazione incrementale e test di caratterizzazione per ogni passaggio;
6. criteri oggettivi che impediscano al refactoring di introdurre cambiamenti funzionali.
Le funzioni future di Admission e Datamart/dbt sono fuori dal frontier dell’intervista:
vanno discusse soltanto dopo il completamento del refactoring conservativo.