# Audit-Verified Status Updates Design ## Goal Require audit verification before applying status changes to features or unit tests. When the requested status disagrees with what the Roslyn audit determines, require an explicit override with a comment. Track all overrides in a new table for later review. ## Architecture Inline audit verification: when `feature update`, `feature batch-update`, `test update`, or `test batch-update` runs, build the `SourceIndexer` on the fly, classify each item, and compare. If the requested status doesn't match the audit, block the update unless `--override "comment"` is provided. ## Override Table Schema ```sql CREATE TABLE status_overrides ( id INTEGER PRIMARY KEY AUTOINCREMENT, table_name TEXT NOT NULL CHECK (table_name IN ('features', 'unit_tests')), item_id INTEGER NOT NULL, audit_status TEXT NOT NULL, audit_reason TEXT NOT NULL, requested_status TEXT NOT NULL, comment TEXT NOT NULL, created_at DATETIME DEFAULT CURRENT_TIMESTAMP ); ``` Each row records: which table/item, what the audit said, what the user requested, and their justification. ## CLI Interface ### Single update ```bash # Audit agrees — applied directly dotnet run -- feature update 123 --status verified --db porting.db # Audit disagrees — blocked # Error: "Audit classifies feature 123 as 'stub'. Use --override 'reason' to force." # Override dotnet run -- feature update 123 --status verified --override "Manual review confirms complete" --db porting.db ``` ### Batch update ```bash # All items agree — applied dotnet run -- feature batch-update --module 5 --set-status verified --execute --db porting.db # Some items disagree — blocked # "15 items match audit, 3 require override. Use --override 'reason' to force all." # Override entire batch (one comment covers all mismatches) dotnet run -- feature batch-update --module 5 --set-status verified --override "Batch approved" --execute --db porting.db ``` Same interface for `test update` and `test batch-update`. ## Verification Flow 1. Build `SourceIndexer` for the appropriate directory (features → `dotnet/src/...`, tests → `dotnet/tests/...`). 2. For each item: query its `dotnet_class`, `dotnet_method`, `go_file`, `go_method` from DB. Run `FeatureClassifier.Classify()`. 3. Compare requested status vs audit status. Collect mismatches. 4. If mismatches and no `--override`: print details and exit with error. 5. If `--override` provided: apply all updates. Insert one `status_overrides` row per mismatched item. 6. Items that agree with audit: apply normally, no override row logged. Items that cannot be audited (no dotnet_class/dotnet_method) are treated as mismatches requiring override. ## Override Review Command ```bash dotnet run -- override list --db porting.db dotnet run -- override list --type features --db porting.db ``` Tabular output: id, table, item_id, audit_status, requested_status, comment, date. ## Changes Required 1. **porting-schema.sql**: Add `status_overrides` table. 2. **FeatureCommands.cs**: Add `--override` option to `update` and `batch-update`. Integrate audit verification before applying. 3. **TestCommands.cs**: Same changes as FeatureCommands. 4. **New `OverrideCommands.cs`**: `override list` command. 5. **Program.cs**: Wire `override` command group. 6. **Shared helper**: Extract audit verification logic (build indexer, classify, compare) into a reusable method since both feature and test commands need it.