9.0 KiB
PRE-AI Local Completion V3 Implementation Plan
For agentic workers: REQUIRED SUB-SKILL: Use superpowers:subagent-driven-development (recommended) or superpowers:executing-plans to implement this plan task-by-task. Steps use checkbox (
- [ ]) syntax for tracking.
Goal: Complete and verify the local semantic pipeline, knowledge preparation, and operator tooling without external AI or uncertain Firebird writes.
Architecture: Extend the existing central.app.ai contracts with a deterministic scenario provider and an ID-correlated batch harness. Add conservative, versioned KB/retrieval preparation artifacts and CLI-first operational commands that compose existing read-only mechanisms.
Tech Stack: Python 3.11+, SQLAlchemy, PostgreSQL/SQLite test engines, pytest, existing Alembic models, JSON/CSV artifacts, Docker only for existing local test execution.
Global Constraints
- Do not call paid/external AI APIs.
- Keep
DETERMINISTIC_GATE_CLOSED=true. - Keep
AI_WRITE_ALLOWED=falseandFIREBIRD_AI_WRITES=0. - Never use fake answers as semantic decisions.
- Never write uncertain semantic values to Firebird.
- Preserve tenant-specific fiscal context outside global KB identity.
- Preserve all conflicts and historical evidence.
- Do not add arbitrary fiscal rules.
Task 1: Fake Provider Contract
Files:
- Create:
central/app/ai/fake_provider.py - Modify:
central/app/ai/provider.py - Test:
central/tests/test_fake_provider.py
Interfaces:
-
DeterministicFakeSemanticProvider.select_batch(items, scenario=None) -> list[dict] -
Scenarios:
CORRECT,WRONG,ABSTAIN,INVALID_JSON,MISSING_ITEM,DUPLICATE_ITEM,OUT_OF_CANDIDATE,TIMEOUT,429,500. -
The provider returns only test responses and never persists them.
-
Write tests asserting every scenario and deterministic call counters.
-
Run
python -m pytest central/tests/test_fake_provider.py -qand observe failure. -
Implement the provider using the existing
LlmEvalItem/validator contract. -
Ensure failures use typed transport/contract errors and do not mutate input items.
-
Run the focused tests and confirm pass.
Task 2: ID-Correlated Batch Harness
Files:
- Create:
central/app/ai/batch_runner.py - Test:
central/tests/test_batch_runner.py
Interfaces:
-
run_batches(items, provider, batch_size, max_retries=2) -> BatchRunResult. -
BatchRunResultexposesresults_by_work_item_id,errors,provider_calls,retries, andusage. -
Add failing tests for batch sizes 5, 10, and 20, shuffled responses, missing IDs, duplicates, invalid JSON, timeout, 429, 500, and partial failure.
-
Implement correlation by
work_item_id, never array position. -
Retry only transport failures and preserve failed item IDs.
-
Shrink/retry only according to explicit policy; never silently drop items.
-
Run focused tests.
Task 3: Budget, Cache, and Dataset Drift Tests
Files:
- Modify:
central/app/ai/provider.py - Modify:
central/app/ai/llm_provider.py - Create:
central/app/ai/cache_policy.py - Test:
central/tests/test_ai_controls_v3.py
Interfaces:
-
cache_key(input_fingerprint, candidate_set_hash, model, prompt_version, dataset_versions) -> str. -
classify_knowledge_freshness(record_versions, active_versions) -> VALID | NEEDS_REVALIDATION | CONFLICT. -
Test sufficient and exceeded budgets, including zero provider calls on pre-call rejection.
-
Test input/output/cached token accounting and unknown prices.
-
Test cache hit/miss for each key component with
provider_calls=0on hit. -
Test dataset drift classification without deleting history.
-
Implement minimal helpers and connect them to existing cache/provider paths.
-
Run focused tests.
Task 4: Offline E2E Simulation
Files:
- Modify:
central/scripts/run_real_llm_ncm_eval.py - Create:
central/scripts/run_offline_ai_simulation.py - Test:
central/tests/test_offline_ai_simulation.py
Interfaces:
-
run_offline_ai_simulation(output_dir, scenario, batch_sizes=(5,10,20)) -> dict. -
Output explicitly marks fake results as plumbing-only and
FIREBIRD_AI_WRITES=0. -
Test GOLD -> gate -> SILVER/NOISY -> residual plan sequencing.
-
Test that fake selections never enter Firebird or KB semantic truth tables.
-
Implement the command using final existing work-item/candidate contracts.
-
Emit sanitized metrics and zero-write evidence.
-
Run the command and focused tests.
Task 5: Canonical KB and Conflict Audit
Files:
- Modify:
central/app/models.py - Create:
central/alembic/versions/0015_kb_canonical_identity.py - Create:
central/app/ai/kb_consolidation.py - Create:
central/scripts/audit_kb_conflicts.py - Create:
central/tests/test_kb_consolidation.py - Generate:
docs/KB_CONFLICT_AUDIT_V1.json
Interfaces:
-
canonical_identity(observation) -> strusing GTIN first, then conservative fingerprint fields. -
classify_conflict(observations) -> strusing the six requested classifications. -
audit_conflicts(observations) -> dictwith counts, decisions, and evidence. -
Test GTIN-equivalent abbreviation merges and incompatible same-GTIN conflicts.
-
Test packaging variations remain distinct or explicitly classified.
-
Add additive canonical identity without promoting tenant fiscal fields.
-
Audit all available KB conflicts and generate the JSON artifact.
-
Run focused tests and validate artifact counts.
Task 6: Retrieval V3 Evaluation and Candidate Preparation
Files:
- Modify:
central/app/ai/retrieval.py - Create:
central/app/ai/retrieval_v3.py - Create:
central/scripts/run_retrieval_eval_v3.py - Create:
central/scripts/prepare_ai_candidates.py - Test:
central/tests/test_retrieval_v3.py - Generate:
docs/NCM_RETRIEVAL_EVALUATION_V3.json
Interfaces:
-
retrieval_v3_candidates(corpus, index, description, metadata, k=20) -> list. -
prepare_candidate_set(work_item, active_datasets) -> dictwith normalized product, top-20, scores, official descriptions, hierarchy, neighbors, GTIN evidence, and input fingerprint. -
Add holdout tests for BM25/TF-IDF/character/rarity/hierarchy/KB/GTIN/group evidence.
-
Compare V3 to V2 and activate only if GOLD recall@20 is at least 0.954 and no required metric regresses.
-
Prepare NCM invalid, CEST, EX_TIPI, and PRODUCT_ROLE payloads without making semantic decisions.
-
Persist versioned candidate artifacts idempotently.
-
Run retrieval evaluation and focused tests.
Task 7: Payload Optimization and Final Phase-1 Rerun
Files:
-
Create:
central/app/ai/payloads.py -
Modify:
central/scripts/run_offline_ai_simulation.py -
Test:
central/tests/test_payloads.py -
Generate:
docs/AI_PAYLOAD_OPTIMIZATION_V1.json -
Test compaction removes only redundant repeated evidence and preserves candidate recall.
-
Measure before/after token estimates for all 511 selection items.
-
Rerun Phase 1 simulation against final work items and candidate sets.
-
Confirm fake outputs remain non-authoritative and zero-write.
Task 8: Guided Company and Group Questionnaires
Files:
-
Create:
scripts/answer_company_context.py -
Create:
scripts/answer_group_questions.py -
Create:
central/app/ai/questionnaire.py -
Test:
central/tests/test_questionnaire.py -
Test validation, review-before-import, cancel-without-write, JSON output, and CSV output.
-
Implement one-question-at-a-time Portuguese prompts with affected products/cells/options.
-
Group questions by company, group, subgroup, NCM, question, and consequence; show examples.
-
Enforce
ENTRY_SCOPEvalues and documentMIXED_OR_DYNAMICbehavior. -
Implement
STORE_IPI_PROFILEas explicit choice plus preview/rollback plan only.
Task 9: Rollback Tooling and Full Local Validation
Files:
-
Modify:
scripts/rollback_field.py -
Create:
scripts/rollback_run.py -
Create:
scripts/run_local_validation.py -
Test:
tests/test_rollback_run.py -
Test:
tests/test_local_validation.py -
Test preview fields: run_id, database, field, product, before, current, target, affected rows.
-
Enforce
current == expected_after; emitCONFLICTand never overwrite drift. -
Compose preflight, sources, company context, KB, deterministic engine, residual classification, AI-ready preparation, and reports.
-
Make repeated runs idempotent and assert no semantic Firebird writes.
Task 10: Health Report and Final Verification
Files:
-
Create:
scripts/generate_local_health.py -
Generate:
docs/LOCAL_PRODUCT_HEALTH_V1.json -
Modify:
docs/AI_PROJECT_STATE.md -
Generate all requested health fields with measured values, not placeholders.
-
Run Phase-1 E2E again using final Phase-2 work items/candidates.
-
Run
python -m pytest tests -qandpython -m pytest central/tests -q. -
Run
git diff --checkand verify no API key or token appears in tracked artifacts. -
Report remaining blockers precisely: external Z.ai balance/credential, missing source files, unresolved human decisions, and any measurable failures.