# Router-Owned Final Diagnosis

<!-- auto-oncall-optimization-record
{
  "schemaVersion": "auto-oncall-optimization-record-v1",
  "optimizationId": "router-owned-final-diagnosis-2026-08-11",
  "problems": [
    {
      "problemId": "post-scenario-diagnosis-has-multiple-semantic-owners",
      "summary": "Final Synthesis and later publication correction stages can re-diagnose, override, or replace valid scenario findings after local diagnosis, leaving no single owner for the final ticket-level decision.",
      "status": "candidate",
      "issueKeys": ["ST-2863"],
      "sourceRefs": [],
      "signalTextIncludesAny": [
        "Final Synthesis re-diagnoses scenario packets",
        "publication guard replaces valid diagnosis",
        "post-normalization workload attribution correction",
        "capacity decision applied after final synthesis"
      ],
      "observedThrough": "2026-08-11",
      "effectiveAt": null,
      "verifiedAt": null,
      "attemptedAction": "Make the persistent Scenario Router own final cross-scenario reconciliation, restrict Final Response to two Markdown fields, and skip post-final semantic correction and duplicate normalization for the scenario pipeline.",
      "evidenceUrl": "https://github.com/tidbcloud/aisupport/tree/main/auto-oncall-services/docs/opts/2026-08-11-router-owned-final-diagnosis.md"
    }
  ]
}
-->

- Optimization ID: `router-owned-final-diagnosis-2026-08-11`
- Owner: auto-oncall-services diagnostic runner
- Source reference: operator architecture review on 2026-08-11
- Implementation status: local candidate
- Effective status: `candidate`

## Bounded problem

The runtime had multiple semantic owners after each Scenario Diagnostic Agent.
Final Synthesis ranked and revised scenario conclusions, then publication
correction, reply normalization, and deterministic workload, monitoring, and
capacity enforcement could rewrite the result again. Valid evidence could be
lost and the final diagnosis could disagree with the intended ownership model.

## Candidate change

- Resume the Scenario Router after every selected scenario finishes and make it
  the sole owner of ticket-level deduplication, conflict resolution, evidence
  precedence, cause, alternative, mitigation, severity, and handoff.
- Give the Final Response Agent only the canonical Router decision and permit it
  to return only internal and Jira-facing Markdown.
- Do not run publication-correction or duplicate normalization Agents after the
  Final Response Agent in the scenario pipeline.
- Move workload attribution, monitoring semantics, capacity, Digest, OP target,
  and transient-domain semantics into Router reconciliation. Keep only true
  disclosure, tenant, privileged-action, destructive-action, policy, and
  publication eligibility checks after final wording.
- Preserve adaptive evidence rounds while keeping one persistent local Scenario
  Diagnostic Agent per scenario; only a materially changed evidence batch may
  justify another diagnostic turn.

## Verification evidence

Local validation completed on 2026-08-11:

- `npm run typecheck` passed.
- `npm test` passed all 737 tests across 101 suites.
- `quick_validate.py skills/op-diagnosis` passed.

This validates the local implementation and contracts only. No deployment or
case replay has occurred, so the problem remains `candidate`.

## Unresolved gaps

- The candidate is not deployed.
- No historical case replay or Jira internal-comment refresh has been run.

## Next validation action

Deploy separately and replay the affected cases before promoting the problem
beyond `candidate`.
