# v1.73 Milestone Audit

Status: passed

## Scope Closed

- Phase `147`: Research Question Competing Hypotheses Surface

## Requirements Coverage

Score: `4/4` requirements satisfied

- `REQ-HYP-01` satisfied
  - the research-question contract now records multiple competing hypotheses
    with explicit status, evidence refs, and exclusion notes
  - evidence:
    - `research/knowledge-hub/knowledge_hub/runtime_read_path_support.py`
    - `research/knowledge-hub/knowledge_hub/topic_shell_support.py`
    - `schemas/research-question.schema.json`
- `REQ-HYP-02` satisfied
  - runtime status, runtime protocol note, and replay all surface the active
    competing hypotheses directly
  - evidence:
    - `research/knowledge-hub/knowledge_hub/runtime_bundle_support.py`
    - `research/knowledge-hub/knowledge_hub/topic_replay.py`
    - `research/knowledge-hub/tests/test_topic_replay.py`
    - `research/knowledge-hub/tests/test_aitp_service.py -k "runtime_protocol_bundle_matches_public_schema or topic_status_and_prepare_verification_surface_new_shell_fields"`
- `REQ-HYP-03` satisfied
  - the question-level hypothesis surface coexists with deferred candidates and
    follow-up subtopics rather than replacing them
  - evidence:
    - `research/knowledge-hub/runtime/scripts/run_competing_hypotheses_acceptance.py`
    - `research/knowledge-hub/tests/test_competing_hypotheses_contracts.py`
- `REQ-VERIFY-01` satisfied
  - the milestone closes with one isolated acceptance lane and targeted
    regression coverage
  - evidence:
    - `research/knowledge-hub/runtime/scripts/run_competing_hypotheses_acceptance.py --json`
    - `research/knowledge-hub/tests/test_runtime_scripts.py -k "competing_hypotheses_acceptance" -q`
    - `research/knowledge-hub/tests/test_schema_contracts.py -q`

## Cross-Surface Integration Check

The milestone is single-phase, so the integration audit is cross-surface rather
than cross-phase:

- question contract integration passed
  - `research_question.contract.json|md` persists and renders
    `competing_hypotheses`
- runtime bundle integration passed
  - `status --json` exposes `competing_hypothesis_count`,
    `leading_hypothesis_id`, and normalized rows through
    `active_research_contract`
- replay integration passed
  - `replay-topic --json` surfaces the leading hypothesis and count/exclusion
    summary, and keeps the question contract in the reading path
- coexistence integration passed
  - deferred buffer visibility and follow-up subtopic visibility remain intact
    in the bounded acceptance lane
- docs/test integration passed
  - root README, kernel README, runtime README, and runbook all reference the
    new acceptance lane and surface

## Verification Evidence

- `python -m pytest research/knowledge-hub/tests/test_competing_hypotheses_contracts.py -q`
  - result: `2 passed`
- `python -m pytest research/knowledge-hub/tests/test_schema_contracts.py -q`
  - result: `10 passed`
- `python -m pytest research/knowledge-hub/tests/test_topic_replay.py -q`
  - result: `2 passed`
- `python research/knowledge-hub/runtime/scripts/run_competing_hypotheses_acceptance.py --json`
  - result: `success`
- `python -m pytest research/knowledge-hub/tests/test_runtime_scripts.py -k "competing_hypotheses_acceptance" -q`
  - result: `1 passed, 32 deselected`
- `python -m pytest research/knowledge-hub/tests/test_runtime_profiles_and_projections.py -k "projection_helpers_write_valid_outputs" -q`
  - result: `1 passed, 12 deselected`
- `python -m pytest research/knowledge-hub/tests/test_aitp_service.py -k "runtime_protocol_bundle_matches_public_schema or topic_status_and_prepare_verification_surface_new_shell_fields" -q`
  - result: `1 passed, 129 deselected`

## Accepted Open Gaps

- broader branch-management automation remains deferred beyond the explicit
  question-level hypothesis surface
- hypothesis auto-discovery or adjudication heuristics remain outside this
  milestone
- broader `test_runtime_profiles_and_projections.py -q` failures remain present
  in unrelated paired-backend/control-plane/layer-graph expectations in the
  current working tree and were not introduced by `v1.73`
