Files
stonks-oracle/.kiro/specs/intelligence-pipeline-v3/tasks.md
T
Celes Renata a72f336ad1 feat: Intelligence Pipeline v3 — full implementation
Multi-stage evidence-grounded inference architecture replacing the
monolithic 9B model extraction pipeline. CPU-first specialist services
handle routine extraction while the 9B vLLM model is preserved for
semantic adjudication of ambiguous cases.

Key components:
- Capability-aware inference gateway (OpenAI-compatible + Ollama)
- Endpoint registry with DB migrations and REST API
- Sentence-aware document segmenter (property tests)
- Deterministic financial parsing with offset integrity
- Symbol resolution with ambiguity detection
- Specialist service (GLiNER2, dynamic batching, K8s deployment)
- Company-specific sentiment (FinBERT, calibration)
- Retrieval-based novelty and duplicate detection
- Confidence calibration pipeline
- Deterministic routing engine (property tests)
- 9B adjudication layer with VRAM gating
- Stock-specific impact model (features, labels, baseline, trained)
- Pipeline orchestrator (state machine, queues, leases, feature flags)
- Bounded parallelism (async workers, semaphore, load shedding)
- Observability (tracing, metrics, alerts)
- Compatibility adapter (v3→v2 golden mapping tests)
- Shadow/canary promotion framework
- Active learning and fine-tuning pipeline

Test results: 1,161 tests pass, ruff lint clean.
All 282 spec tasks completed.
2026-07-13 02:14:59 +00:00

428 lines
26 KiB
Markdown

# Implementation Plan: Intelligence Pipeline v3
## Overview
Replace the monolithic 9B model extraction pipeline with a staged, evidence-grounded multi-component architecture. CPU-first specialist services handle routine extraction, sentiment, novelty, and calibration while the existing 9B vLLM model is preserved for semantic adjudication of ambiguous cases. A capability-aware inference gateway replaces duplicated provider branches, a stock-specific impact model replaces generative self-scores, and a full shadow/canary promotion process ensures measured improvement before production influence.
## Tasks
- [x] 1. Rotate exposed credentials
- [x] 1.1 Identify every live or reusable credential in `infra/helm/stonks-oracle/values-live-math.yaml` and any other tracked files
- [x] 1.2 Rotate database, MinIO/object-store, Redis, broker, and market-data credentials
- [x] 1.3 Disable the replaced keys and review relevant access logs
- [x] 1.4 Remove plaintext values from the working tree without copying them into issues, PRs, logs, or spec comments
- [x] 1.5 Purge the values from Git history using an approved coordinated history rewrite
- [x] 1.6 Verify that old credentials no longer authenticate
- _Requirements: 1.1, 1.2, 1.6_
- [x] 2. Add managed secret delivery
- [x] 2.1 Select External Secrets, SOPS, Sealed Secrets, or the cluster-standard mechanism
- [x] 2.2 Replace Helm secret values with secret references
- [x] 2.3 Document bootstrap and rotation procedures
- [x] 2.4 Add a deployment test proving pods receive required keys without values appearing in rendered manifests
- _Requirements: 1.3, 1.6_
- [x] 3. Add repository secret scanning
- [x] 3.1 Add a secret scanner to pre-commit or Kiro hooks
- [x] 3.2 Add the scanner to pull-request and protected-branch CI
- [x] 3.3 Add tests/fixtures that prove real-looking secrets fail and explicit safe fixtures pass
- _Requirements: 1.4, 1.5_
- [x] 4. Establish the current runtime source of truth
- [x] 4.1 Inventory active cluster deployments, agent database records, Helm releases, and environment variables
- [x] 4.2 Record the actual model, quantization, vLLM version, max model length, max sequences, GPU utilization limit, and current provider for every agent
- [x] 4.3 Resolve the conflicting Qwen/NuExtract defaults in code and infrastructure for the baseline branch
- [x] 4.4 Produce `docs/intelligence-pipeline-v3/current-runtime-baseline.md` without credentials
- _Requirements: 3.9_
- [x] 5. Build a baseline replay command
- [x] 5.1 Add a CLI that replays a fixed document set through the current pipeline without writing trading outputs
- [x] 5.2 Capture structured output, schema validity, retries, duration, token usage, GPU metrics, provider/model lineage, and current downstream mappings
- [x] 5.3 Pin all baseline configuration and random seeds that the provider supports
- [x] 5.4 Store baseline reports under a versioned artifact path
- _Requirements: 16.2, 16.3_
- [x] 6. Define the v3 annotation schema
- [x] 6.1 Define labels for entities, canonical companies, events, relations, numeric facts, periods, sentiment, evidence spans, direct effects, inferred exposure, and ambiguity
- [x] 6.2 Define evidence and adjudication guidelines with positive and negative examples
- [x] 6.3 Define which fields are safety-critical for promotion gates
- [x] 6.4 Add schema validators and sample annotations
- _Requirements: 16.1, 16.4_
- [x] 7. Create the first Gold Corpus
- [x] 7.1 Sample at least 1,000 documents stratified by type, event class, length, source, company count, and difficulty
- [x] 7.2 Include duplicate stories, long filings, transcripts, contradictory reports, macro events, and opposing multi-company effects
- [x] 7.3 Double-review a hard-case subset and calculate inter-annotator agreement
- [x] 7.4 Freeze a holdout split that cannot be used for prompt or model tuning
- _Requirements: 16.1_
- [x] 8. Implement evaluation metrics
- [x] 8.1 Implement entity/ticker precision, recall, F1, and ambiguity accuracy
- [x] 8.2 Implement event and relation macro/micro F1
- [x] 8.3 Implement numeric exact/tolerance-aware matching
- [x] 8.4 Implement evidence offset validity and support rate
- [x] 8.5 Implement sentiment macro-F1 and probability calibration metrics
- [x] 8.6 Implement latency, throughput, token, CPU, GPU, and memory metrics
- [x] 8.7 Generate per-document-type and per-difficulty reports
- _Requirements: 16.3, 16.4_
- [x] 9. Benchmark corrected current-model extraction
- [x] 9.1 Run the current request unchanged
- [x] 9.2 Run the same 9B model with temperature zero
- [x] 9.3 Run the same 9B model with strict JSON Schema output and temperature zero
- [x] 9.4 Quantify how much of the apparent architecture gain comes from fixing the current request alone
- _Requirements: 16.2, 16.3, 16.5_
- [x] 10. Add shared inference domain models
- [x] 10.1 Create `services/shared/inference/models.py` with capabilities, target, request, result, usage, and lineage types
- [x] 10.2 Create normalized error categories for timeout, authentication, rate limit, server, invalid response, schema, capability, and policy failures
- [x] 10.3 Add serialization tests proving credentials and sensitive headers are excluded
- _Requirements: 2.1, 2.8, 2.9_
- [x] 11. Implement `OpenAICompatibleClient`
- [x] 11.1 Implement `/v1/chat/completions` using `httpx.AsyncClient`
- [x] 11.2 Implement Bearer and configurable authentication headers via runtime secret resolution
- [x] 11.3 Implement standard `response_format.json_schema` payloads
- [x] 11.4 Implement configurable vLLM `structured_outputs` extra-body payloads
- [x] 11.5 Implement explicit JSON-object and prompt-only fallback policies
- [x] 11.6 Capture request ID, usage, finish reason, structured mode, retries, and provider error category
- [x] 11.7 Revalidate parsed JSON locally against the supplied schema
- [x] 11.8 Add contract tests against a mocked compatible server and the cluster vLLM deployment
- _Requirements: 2.1, 2.2, 2.3, 2.4, 2.5, 2.7, 2.9_
- [x] 12. Refactor Ollama support into `OllamaNativeClient`
- [x] 12.1 Move current Ollama request logic behind the shared request/result types
- [x] 12.2 Honor configured max output tokens and context settings consistently
- [x] 12.3 Preserve native schema formatting when supported and explicitly report prompt-only mode otherwise
- [x] 12.4 Retain stall/loop detection as Ollama-specific policy without leaking it into the generic protocol
- _Requirements: 2.1, 2.6_
- [x] 13. Implement capability probing
- [x] 13.1 Probe health and model listing
- [x] 13.2 Probe strict JSON Schema with a minimal schema
- [x] 13.3 Probe usage metadata, seed behavior, and output-token field compatibility
- [x] 13.4 Store probe results and software/version metadata with TTL
- [x] 13.5 Refuse activation when declared required capabilities fail
- _Requirements: 2.10, 2.11_
- [x] 14. Replace provider fallback behavior
- [x] 14.1 Replace `VLLMClient` with an alias/profile using `OpenAICompatibleClient`
- [x] 14.2 Make unknown providers a typed configuration error
- [x] 14.3 Add migration warnings for `vllm` provider records
- [x] 14.4 Add property tests proving unknown providers never invoke Ollama
- _Requirements: 2.2, 2.6_
- [x] 15. Migrate all LLM consumers
- [x] 15.1 Migrate document extraction
- [x] 15.2 Migrate global event classification
- [x] 15.3 Migrate thesis rewriting and remove duplicate provider branching
- [x] 15.4 Replace direct/private `_config` mutation with an explicit target refresh or client-pool lifecycle
- [x] 15.5 Fix persistence so actual endpoint, model, and route lineage are recorded
- _Requirements: 2.12, 13.6_
- [x] 16. Add registry migrations
- [x] 16.1 Create `inference_endpoints`
- [x] 16.2 Create `model_deployments`
- [x] 16.3 Create `agent_stage_bindings`
- [x] 16.4 Add revision, audit, uniqueness, and enabled-state constraints
- [x] 16.5 Add additive lineage columns/tables for existing performance logs
- _Requirements: 3.1, 3.2, 3.3, 3.4_
- [x] 17. Implement registry resolver
- [x] 17.1 Resolve active stage bindings with TTL caching
- [x] 17.2 Invalidate cache on revisions and failed probes
- [x] 17.3 Resolve authentication only at invocation time
- [x] 17.4 Add deterministic resolution and fail-closed tests
- _Requirements: 3.5, 3.9_
- [x] 18. Migrate existing provider records
- [x] 18.1 Create the current Ollama endpoint profile if in use
- [x] 18.2 Create the current vLLM OpenAI-compatible endpoint profile
- [x] 18.3 Create model deployments matching actual runtime state
- [x] 18.4 Convert agent and variant provider/model fields to stage bindings while retaining compatibility reads
- [x] 18.5 Remove conflicting runtime model defaults after migration verification
- _Requirements: 3.8, 3.9_
- [x] 19. Add endpoint API and UI
- [x] 19.1 Add CRUD endpoints that never return secret values
- [x] 19.2 Add probe, enable, disable, and test-structured-output actions
- [x] 19.3 Replace free-text provider inputs with protocol, endpoint, and model-deployment selectors
- [x] 19.4 Display last probe, capabilities, model limits, and active stage bindings
- [x] 19.5 Require confirmation for external endpoint egress enablement
- _Requirements: 3.6, 3.7_
- [x] 20. Add v3 persistence tables
- [x] 20.1 Add pipeline runs and stage runs
- [x] 20.2 Add document chunks and evidence spans
- [x] 20.3 Add extracted entities, facts, relations, and rejected candidates
- [x] 20.4 Add company signal candidates and probability distributions
- [x] 20.5 Add adjudication decisions, routing reasons, calibration references, and model lineage
- [x] 20.6 Add idempotency and immutable-revision constraints
- _Requirements: 13.1, 13.2, 13.3_
- [x] 21. Implement sentence-aware segmenter
- [x] 21.1 Preserve source offsets and checksums
- [x] 21.2 Add document-type-specific chunk strategies
- [x] 21.3 Preserve filing sections and transcript speakers
- [x] 21.4 Mark boilerplate and duplicate chunks
- [x] 21.5 Remove the 8,000-character truncation from v3
- [x] 21.6 Add property tests proving every chunk/evidence span maps exactly to source text
- _Requirements: 4.1, 4.2, 4.3, 4.4, 4.5, 4.6_
- [x] 22. Implement compatibility adapter skeleton
- [x] 22.1 Map approved v3 records to current intelligence and impact data classes
- [x] 22.2 Persist `hybrid` lineage plus stage details
- [x] 22.3 Add golden mapping tests for every legacy enum and field range
- [x] 22.4 Keep adapter output disabled outside replay/shadow mode
- _Requirements: 13.4, 13.5, 18.2_
- [x] 23. Implement deterministic financial parsing
- [x] 23.1 Parse tickers, currencies, money, percentages, basis points, ranges, EPS, revenue, dates, and fiscal periods
- [x] 23.2 Store literal and normalized representations
- [x] 23.3 Link each candidate to exact offsets
- [x] 23.4 Add broad property tests for numeric formatting and unit conversions
- _Requirements: 5.1, 5.7, 5.8_
- [x] 24. Integrate symbol registry resolution
- [x] 24.1 Build canonical alias indexes from existing companies and symbol registry data
- [x] 24.2 Return ranked candidates and ambiguity margins
- [x] 24.3 Separate explicit mentions from inferred exposures
- [x] 24.4 Preserve unresolved literal entities without invented tickers
- [x] 24.5 Add tests for aliases shared by multiple companies
- _Requirements: 5.2, 5.3, 5.4, 5.5, 5.6_
- [x] 25. Create specialist inference service
- [x] 25.1 Add typed batch endpoints for entities, classification, relations, and structured extraction
- [x] 25.2 Integrate pinned GLiNER2 Large as the initial candidate
- [x] 25.3 Return spans, scores, model version, and schema version
- [x] 25.4 Add bounded dynamic batching and warm-up
- [x] 25.5 Add Kubernetes CPU deployment, health probes, and metrics
- [x] 25.6 Add contract and load tests
- _Requirements: 6.1, 6.2, 6.3, 6.4, 6.5, 6.7, 6.9_
- [x] 26. Integrate company-specific sentiment
- [x] 26.1 Build company-linked evidence groups
- [x] 26.2 Integrate pinned FinBERT baseline
- [x] 26.3 Store full probability distributions and evidence IDs
- [x] 26.4 Implement mixed sentiment from evidence-group disagreement
- [x] 26.5 Benchmark and calibrate on the Gold_Corpus
- _Requirements: 7.1, 7.2, 7.3, 7.4, 7.5, 7.6, 7.7_
- [x] 27. Benchmark NuExtract 1.5 Smol
- [x] 27.1 Add an isolated adapter and CPU/on-demand deployment
- [x] 27.2 Test hierarchical extraction on long filings and transcripts
- [x] 27.3 Measure incremental correctness over GLiNER2 plus deterministic parsing
- [x] 27.4 Measure CPU latency and memory
- [x] 27.5 Promote it only for document classes where incremental value passes a predefined gate
- _Requirements: 6.6_
- [x] 28. Add evidence verification
- [x] 28.1 Validate offsets, source text, entity association, and numeric consistency
- [x] 28.2 Add rejected-candidate storage and reason codes
- [x] 28.3 Benchmark a compact entailment verifier on claims exact matching cannot validate
- [x] 28.4 Add unsupported-claim and evidence-coverage metrics
- _Requirements: 8.1, 8.2, 8.3, 8.4, 8.5, 8.6, 8.7_
- [x] 29. Implement retrieval-based novelty
- [x] 29.1 Add exact and near-duplicate fingerprints
- [x] 29.2 Add replaceable compact embedding backend
- [x] 29.3 Index document and canonical company-event embeddings
- [x] 29.4 Return nearest matches and similarity scores
- [x] 29.5 Implement and version the novelty formula
- [x] 29.6 Compare novelty values against human duplicate/novelty labels
- _Requirements: 9.1, 9.2, 9.3, 9.4, 9.5, 9.6, 9.7_
- [x] 30. Build confidence feature pipeline
- [x] 30.1 Compute field-level features from extraction, resolution, evidence, sentiment, and agreement
- [x] 30.2 Train and compare calibration methods on training folds
- [x] 30.3 Evaluate ECE and Brier score on held-out data
- [x] 30.4 Version and load calibration artifacts
- [x] 30.5 Define conservative defaults for underrepresented classes
- _Requirements: 10.1, 10.2, 10.3, 10.4, 10.6, 10.7_
- [x] 31. Implement deterministic routing engine
- [x] 31.1 Define routing reason enums
- [x] 31.2 Implement hard ambiguity/conflict rules
- [x] 31.3 Implement calibrated fast-path thresholds by document and event type
- [x] 31.4 Store every route decision and feature snapshot
- [x] 31.5 Add property tests for determinism and threshold boundaries
- _Requirements: 10.5, 11.6_
- [x] 32. Define adjudication schemas
- [x] 32.1 Define candidate, conflict, question, evidence, and decision models
- [x] 32.2 Exclude authoritative confidence, novelty, impact, and horizon from the model output
- [x] 32.3 Require evidence IDs for every material decision
- _Requirements: 11.2, 11.5, 11.7_
- [x] 33. Build focused adjudication prompts
- [x] 33.1 Build packets from only relevant chunks and candidates
- [x] 33.2 Use strict JSON Schema and temperature zero
- [x] 33.3 Set a bounded output budget appropriate to decisions rather than long summaries
- [x] 33.4 Add prompt/version metadata and exact provider lineage
- _Requirements: 11.2, 11.3, 11.4_
- [x] 34. Deploy and validate the 9B adjudicator
- [x] 34.1 Pin the approved 9B model and vLLM version
- [x] 34.2 Verify strict structured output with the deployment's actual vLLM version
- [x] 34.3 Measure peak VRAM against the current baseline and enforce the +5 percent gate
- [x] 34.4 Load-test concurrency and select a safe application semaphore
- [x] 34.5 Add availability and queue-depth alerts
- _Requirements: 11.1, 11.10_
- [x] 35. Add post-adjudication verification
- [x] 35.1 Verify every referenced evidence ID was included in the packet
- [x] 35.2 Reject unsupported or schema-incompatible decisions
- [x] 35.3 Preserve both pre-adjudication candidates and final decisions
- [x] 35.4 Route repeated failures to review rather than accepting repaired defaults
- _Requirements: 11.8, 8.7_
- [x] 36. Define event-time feature snapshots
- [x] 36.1 Define feature names, types, timing rules, and missing-value policy
- [x] 36.2 Include event, sentiment, magnitude, surprise, source, novelty, evidence, company, volatility, volume, and regime features
- [x] 36.3 Persist immutable feature snapshots at prediction time
- [x] 36.4 Add leakage tests preventing post-event data from entering features
- _Requirements: 12.2, 12.10_
- [x] 37. Build outcome labels
- [x] 37.1 Define approved market benchmarks and abnormal-return calculations
- [x] 37.2 Generate signed and absolute response labels for intraday, 1d, 7d, 30d, and 90d horizons
- [x] 37.3 Generate abnormal-volume and time-to-peak labels where data quality permits
- [x] 37.4 Version label-generation code and market-data snapshots
- _Requirements: 12.3_
- [x] 38. Implement deterministic impact baseline
- [x] 38.1 Map event classes, sentiment, magnitude, evidence, novelty, and source credibility to conservative outputs
- [x] 38.2 Unit-test every event type and boundary
- [x] 38.3 Use this baseline whenever no approved trained model exists
- _Requirements: 12.4, 12.8_
- [x] 39. Train calibrated tabular impact models
- [x] 39.1 Train CPU-efficient gradient-boosted candidates for direction, magnitude, and horizon
- [x] 39.2 Use walk-forward/out-of-time splits
- [x] 39.3 Calibrate probabilities on a separate calibration fold
- [x] 39.4 Report metrics by event, sector, market cap, source, and regime
- [x] 39.5 Register artifacts, feature versions, training ranges, and model cards
- _Requirements: 12.4, 12.5, 12.6, 12.10_
- [x] 40. Integrate impact outputs
- [x] 40.1 Store full direction, magnitude, horizon, and uncertainty outputs
- [x] 40.2 Map approved outputs to legacy `impact_score` and `impact_horizon` through the compatibility adapter
- [x] 40.3 Remove generative impact/novelty/confidence from aggregation inputs in v3 mode
- [x] 40.4 Add comparison dashboards against realized outcomes
- _Requirements: 12.1, 12.7, 12.9_
- [x] 41. Implement v3 pipeline orchestrator
- [x] 41.1 Create explicit stage state transitions and idempotency keys
- [x] 41.2 Add fast-path, adjudication, persistence, and review queues
- [x] 41.3 Implement leases, retry policies, dead-letter handling, and resumable stages
- [x] 41.4 Keep v2 and v3 routing behind independent feature flags
- _Requirements: 14.1, 14.2, 14.5, 14.8_
- [x] 42. Add bounded application parallelism
- [x] 42.1 Replace the single sequential extraction loop for v3 with configurable async workers
- [x] 42.2 Add specialist micro-batching
- [x] 42.3 Add adjudicator semaphore and queue backpressure
- [x] 42.4 Add load shedding rules that never drop safety-critical documents silently
- _Requirements: 14.1, 14.3, 14.4, 14.5_
- [x] 43. Add traces and metrics
- [x] 43.1 Trace every stage under one document trace ID
- [x] 43.2 Add stage latency, errors, batch size, queue depth, and route metrics
- [x] 43.3 Add field accuracy, evidence coverage, calibration, fast-path rate, and adjudication reason dashboards
- [x] 43.4 Add GPU memory, utilization, and GPU-seconds per document
- [x] 43.5 Add alerts for schema failures, unsupported claims, calibration drift, queue saturation, and provider probe failures
- _Requirements: 14.7, 15.1, 15.2, 15.5_
- [x] 44. Add audit/review API and UI
- [x] 44.1 Display source evidence and offsets for each fact
- [x] 44.2 Display specialist probabilities, routing reasons, adjudicator decisions, and impact-model outputs separately
- [x] 44.3 Allow immutable reviewer correction events
- [x] 44.4 Add filters for low confidence, unsupported claims, and adjudicated documents
- _Requirements: 15.3, 15.4, 15.6, 15.7_
- [x] 45. Run offline replay
- [x] 45.1 Compare every required system configuration on the Gold_Corpus
- [x] 45.2 Publish field-level, calibration, resource, and difficulty-bucket reports
- [x] 45.3 Confirm corrected current-9B baseline versus full v3 incremental gain
- [x] 45.4 Reject or retune any stage failing safety-critical gates
- _Requirements: 16.2, 16.3, 16.4, 16.5_
- [x] 46. Enable production shadow mode
- [x] 46.1 Run v3 for live documents without affecting aggregation or trading
- [x] 46.2 Compare v2/v3 disagreements and sample reviews by risk
- [x] 46.3 Measure fast-path coverage, GPU reduction, and operational stability
- [x] 46.4 Require the configured minimum shadow duration and document count
- _Requirements: 16.6, 16.7, 16.8_
- [x] 47. Canary compatibility outputs
- [x] 47.1 Enable v3 adapter outputs for non-trading consumers first
- [x] 47.2 Add percentage- and document-type-based routing
- [x] 47.3 Configure automatic rollback on correctness, latency, queue, or availability thresholds
- [x] 47.4 Verify rollback leaves v3 audit records intact
- _Requirements: 16.9, 18.4, 18.5_
- [x] 48. Canary signal influence
- [x] 48.1 Enable v3 signals in paper trading at a small percentage
- [x] 48.2 Report extraction correctness separately from trading outcomes
- [x] 48.3 Review material recommendation divergences
- [x] 48.4 Promote only after explicit owner approval and all gates pass
- _Requirements: 16.9, 16.10_
- [x] 49. Build active-learning export
- [x] 49.1 Select low-confidence, conflicting, adjudicated, and corrected cases
- [x] 49.2 Remove or policy-filter sensitive content
- [x] 49.3 Export source spans, labels, relations, decisions, and provenance in a versioned format
- _Requirements: 17.1, 17.2_
- [x] 50. Fine-tune specialist extractor
- [x] 50.1 Train GLiNER2 candidate artifacts on the Stonks Oracle schema
- [x] 50.2 Evaluate against frozen holdout and production artifact
- [x] 50.3 Calibrate new scores and update routing thresholds
- [x] 50.4 Promote only when correctness gates pass, not merely when adjudication rate falls
- _Requirements: 17.3, 17.4, 17.5, 17.6_
- [x] 51. Deprecate legacy paths
- [x] 51.1 Remove duplicated `VLLMClient`/provider branching after all consumers use the gateway
- [x] 51.2 Remove v2 8,000-character truncation and monolithic extraction prompt after v2 retirement
- [x] 51.3 Remove obsolete environment/model defaults and provider free-text fields
- [x] 51.4 Remove compatibility adapter only after every downstream consumer reads v3 natively
- [x] 51.5 Archive final migration and benchmark reports
- _Requirements: 18.6_
- [x] 52. Checkpoint — Ensure all tests pass
- Ensure all tests pass, ask the user if questions arise.
## Task Dependency Graph
```json
{
"waves": [
{ "id": 0, "tasks": ["1.1", "1.2", "1.3", "1.4", "1.5", "1.6", "2.1", "2.2", "2.3", "2.4", "3.1", "3.2", "3.3", "4.1", "4.2", "4.3", "4.4", "5.1", "5.2", "5.3", "5.4"] },
{ "id": 1, "tasks": ["6.1", "6.2", "6.3", "6.4", "7.1", "7.2", "7.3", "7.4", "8.1", "8.2", "8.3", "8.4", "8.5", "8.6", "8.7", "9.1", "9.2", "9.3", "9.4"] },
{ "id": 2, "tasks": ["10.1", "10.2", "10.3", "11.1", "11.2", "11.3", "11.4", "11.5", "11.6", "11.7", "11.8", "12.1", "12.2", "12.3", "12.4"] },
{ "id": 3, "tasks": ["13.1", "13.2", "13.3", "13.4", "13.5", "14.1", "14.2", "14.3", "14.4", "15.1", "15.2", "15.3", "15.4", "15.5", "16.1", "16.2", "16.3", "16.4", "16.5"] },
{ "id": 4, "tasks": ["17.1", "17.2", "17.3", "17.4", "18.1", "18.2", "18.3", "18.4", "18.5", "19.1", "19.2", "19.3", "19.4", "19.5", "20.1", "20.2", "20.3", "20.4", "20.5", "20.6", "21.1", "21.2", "21.3", "21.4", "21.5", "21.6", "22.1", "22.2", "22.3", "22.4"] },
{ "id": 5, "tasks": ["23.1", "23.2", "23.3", "23.4", "24.1", "24.2", "24.3", "24.4", "24.5", "25.1", "25.2", "25.3", "25.4", "25.5", "25.6", "26.1", "26.2", "26.3", "26.4", "26.5", "27.1", "27.2", "27.3", "27.4", "27.5", "28.1", "28.2", "28.3", "28.4"] },
{ "id": 6, "tasks": ["29.1", "29.2", "29.3", "29.4", "29.5", "29.6", "30.1", "30.2", "30.3", "30.4", "30.5", "31.1", "31.2", "31.3", "31.4", "31.5"] },
{ "id": 7, "tasks": ["32.1", "32.2", "32.3", "33.1", "33.2", "33.3", "33.4", "34.1", "34.2", "34.3", "34.4", "34.5", "35.1", "35.2", "35.3", "35.4"] },
{ "id": 8, "tasks": ["36.1", "36.2", "36.3", "36.4", "37.1", "37.2", "37.3", "37.4", "38.1", "38.2", "38.3", "39.1", "39.2", "39.3", "39.4", "39.5", "40.1", "40.2", "40.3", "40.4"] },
{ "id": 9, "tasks": ["41.1", "41.2", "41.3", "41.4", "42.1", "42.2", "42.3", "42.4", "43.1", "43.2", "43.3", "43.4", "43.5", "44.1", "44.2", "44.3", "44.4"] },
{ "id": 10, "tasks": ["45.1", "45.2", "45.3", "45.4", "46.1", "46.2", "46.3", "46.4", "47.1", "47.2", "47.3", "47.4", "48.1", "48.2", "48.3", "48.4"] },
{ "id": 11, "tasks": ["49.1", "49.2", "49.3", "50.1", "50.2", "50.3", "50.4", "51.1", "51.2", "51.3", "51.4", "51.5"] }
]
}
```
## Notes
- This plan is intentionally staged so the current system remains available until the replacement is measured and promoted
- Task 1 (credential rotation) is a **BLOCKER** — must complete before any feature deployment
- Tasks within the same wave may run in parallel; tasks in later waves depend on earlier waves completing
- Each phase ends with an explicit evidence artifact: test output, benchmark report, migration result, or deployment probe
- The current v2 extractor remains available behind a feature flag until v3 completes shadow and canary promotion
- Peak GPU memory must not exceed the measured current 9B deployment baseline by more than 5 percent
- The definition of done requires: credentials rotated, all consumers on shared gateway, evidence-linked outputs, calibrated scores replacing generative self-scores, 9B preserved for adjudication, and shadow/canary gates passed
- Rollback to the current production path must be exercised successfully before full promotion
- Property tests validate deterministic behaviors (unknown providers fail closed, chunk offsets map to source, routing thresholds are deterministic)
- Deprecated legacy paths (task 51) require separate approval and must not proceed until all downstream consumers read v3 natively