# Excititor · Consensus Removal Prep (AOC-19-004) - **Date:** 2025-11-20 - **Working directory:** `src/Excititor/__Libraries/StellaOps.Excititor.Core` + `src/Excititor/StellaOps.Excititor.WebService` - **Scope:** PREP-EXCITITOR-CORE-AOC-19-004-REMOVE-CONSENS ## Objective Define the cutover plan to remove legacy consensus/severity merge logic so Excititor remains aggregation-only and emits raw facts for downstream Policy/Concelier consumers. ## Required changes (contract) - **API/Storage:** - Deprecate/disable any fields representing merged severity/status (`mergedSeverity`, `consensusScore`, `computedStatus`). - Retain raw source fields: `status`, `justification`, `impact`, `affects`, `references`, `notes`, `provenance`, `reconciledFrom`. - Add boolean `consensusDisabled: true` to existing documents during migration for audit. - **Ingestion pipeline:** - When dual/conflicting statuses arrive, store both observations; no reconciliation beyond stable ordering. - Maintain deterministic ordering when multiple observations share `(tenant, advisoryId, component)` — sort by `ingestedAt`, then `source`, then `evidenceHash`. - **Feature flag:** `excititor:aoc:disableConsensus` default `true`; only temporary `false` allowed for rollback during migration. - **Telemetry:** counter `excititor.ingest.consensus.disabled` tagged by `tenant`, `source`, `connectorId`; increment once per batch after flag applied. ## Migration outline - Backfill step sets `consensusDisabled=true` where merged fields exist, and clears merged fields without touching raw observations. - Tests must assert merged fields are absent/null after migration and ingestion flows do not write them. ## Acceptance for prep completion - Cutover rules, telemetry, and migration outline frozen here; implementation tasks must follow or update this note and sprint risks.