# Legacy System Inventory

Usa questo riferimento quando serve ricostruire in modalità read-only il comportamento di un sistema legacy e produrre un contratto di parità per una futura modernizzazione.

L'inventory non presuppone linguaggio, framework, runtime o paradigma del source e del target: descrivere comportamenti, contratti ed evidenze, non una traduzione tra stack predeterminati.

Non implementare il target. Se la richiesta include implementazione, cutover o coordinamento multi-fase, completare l'inventory e passare a `mcp-master-orchestrator` o alla skill specialistica.

## Preflight

Richiedere o ricavare:

- `source_project_path` assoluto e read-only;
- repository e branch sorgente;
- commit/ref per baseline puntuali;
- `target_project_path` e repository/stack target, se già noti;
- `evidence_save_path` assoluto;
- eventuale `neutral_path`;
- ticket, requisito o documento funzionale;
- obiettivo dell'inventory;
- domini funzionali prioritari;
- ambienti e DB utilizzabili;
- mapping progetto → `.env` → DB → ambiente;
- vincoli su segreti, PII e dati cliente.

Non derivare il progetto dal `cwd` e non usare `.env` del repository MCP.

Gli alias logici source/target si passano ai tool tramite `project_path`; evidence/neutral tramite `save_path`. Non introdurre nuovi campi schema MCP.

## Discovery

1. Leggere `AGENTS.md` ed eventuali `RULES.md`.
2. Identificare entry point, configurazione e dipendenze.
3. Cercare history, copie leggibili, backup e documentazione.
4. Aprire al massimo due filoni read-only paralleli, suddivisi per dominio.
5. Usare source recovery soltanto se non esiste una fonte leggibile.
6. Usare Playwright soltanto quando codice, dati, log e documenti non bastano.

## Suddivisione per domini

Preferire domini come:

- autenticazione e sessione;
- ricerca e navigazione;
- documenti e allegati;
- import/export;
- autorizzazioni;
- job e batch;
- integrazioni;
- configurazione;
- persistenza dati;
- errori e fallback.

Non suddividere soltanto per quantità di file.

## Template inventory

| Campo | Contenuto |
|---|---|
| ID | Identificativo stabile |
| Dominio | Area funzionale |
| Fonte | Repo, path, ref, simbolo o endpoint |
| Caller | Entry point o dipendenze |
| Input | Parametri e precondizioni |
| Logica osservata | Regole effettive |
| Accesso dati | Tabelle/query con valori sensibili redatti |
| Output | Shape, status, errori |
| Side effect | Scritture, notifiche, file, job |
| Edge case | Caso limite osservato |
| Stato legacy | Atteso, anomalo, non chiaro |
| Decisione | Preservare, correggere, chiarire |
| Proposta target | Equivalente previsto |
| Evidenza | Codice, test, log, query o documento |
| Confidenza | Alta, media, bassa |

## Regole sulle anomalie legacy

Non correggere silenziosamente.

Registrare:

```md
Legacy osservato:
Perché può essere un bug:
Dipendenze note:
Opzioni:
- preservare per compatibilità;
- correggere deliberatamente;
- introdurre feature flag;
- richiedere chiarimento.
Decisione:
Fonte della decisione:
```

Senza decisione verificabile usare `UNCLEAR`.

## Parity matrix

| Caso | Legacy | Target atteso | Esito | Evidenza | Decisione |
|---|---|---|---|---|---|
| ... | ... | ... | `MATCH` / `INTENTIONAL_CHANGE` / `LEGACY_BUG_PRESERVED` / `NEW_IMPLEMENTATION_BUG` / `UNCLEAR` | ... | ... |

## Sicurezza e redazione

Mantenere logica e struttura delle query, ma redigere:

- credenziali;
- token;
- segreti;
- host sensibili;
- PII;
- dati cliente;
- chiavi API;
- cookie o session ID.

Non copiare `.env` o valori reali nei deliverable.

## Output minimo

```md
# Legacy inventory — [sistema/modulo]

## Scope e baseline
## Fonti consultate
## Domini analizzati
## Evidenze osservate
## Inventory
## Anomalie legacy
## Parity matrix
## Inferenze tecniche
## Rischi
## Punti aperti
## Decisioni richieste
## Handoff consigliato
```

Separare sempre:

- evidenza osservata;
- inferenza;
- punto aperto;
- raccomandazione.

## Handoff

Passare a `mcp-master-orchestrator` quando sono richiesti:

- strategia;
- contratti;
- implementazione;
- validazione completa;
- cutover;
- rollback;
- handoff multi-skill.

Passare direttamente alla skill specialistica soltanto quando l'inventory ha ristretto il lavoro a una singola esecuzione di dominio.
