# v1.78 Milestone Audit

Status: passed

## Scope Closed

- Phase `152`: Hypothesis Route Choice Surface

## Requirements Coverage

Score: `4/4` requirements satisfied

- `REQ-HCHOICE-01` satisfied
  - runtime surfaces now materialize one bounded route choice summary from the
    active local route plus the primary handoff candidate
  - evidence:
    - `research/knowledge-hub/knowledge_hub/runtime_read_path_support.py`
    - `research/knowledge-hub/knowledge_hub/runtime_bundle_support.py`
    - `research/knowledge-hub/runtime/schemas/progressive-disclosure-runtime-bundle.schema.json`
- `REQ-HCHOICE-02` satisfied
  - replay and read-path surfaces now expose stay-local versus yield-to-handoff
    choice directly
  - evidence:
    - `research/knowledge-hub/knowledge_hub/topic_replay.py`
    - `research/knowledge-hub/tests/test_topic_replay.py`
    - `research/knowledge-hub/tests/test_hypothesis_route_choice_contracts.py`
- `REQ-HCHOICE-03` satisfied
  - the route choice surface coexists with current-route-choice, route
    activation, route re-entry, and route handoff mechanisms instead of
    replacing them
  - evidence:
    - `research/knowledge-hub/runtime/scripts/run_hypothesis_route_choice_acceptance.py`
    - `research/knowledge-hub/tests/test_runtime_scripts.py -k "hypothesis_route_choice_acceptance" -q`
- `REQ-VERIFY-01` satisfied
  - the milestone closes with one isolated route choice acceptance lane plus
    targeted regression coverage
  - evidence:
    - `research/knowledge-hub/runtime/scripts/run_hypothesis_route_choice_acceptance.py --json`
    - `research/knowledge-hub/tests/test_schema_contracts.py -q`
    - `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`

## Cross-Surface Integration Check

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

- runtime bundle integration passed
  - `status --json` now exposes `active_research_contract.route_choice` with
    the stay-local versus yield summary
- runtime protocol integration passed
  - `runtime_protocol.generated.md` and `research_question.contract.md` now
    render `## Route choice` plus both bounded options
- replay integration passed
  - `replay-topic --json` now surfaces the same route-choice payload and
    route-choice status
- coexistence integration passed
  - the bounded acceptance lane proves the current local route can stay local
    while the handoff candidate remains visible, without runtime mutation
- docs/test integration passed
  - kernel README, runtime README, and the runbook all reference the new route
    choice acceptance lane and surface

## Verification Evidence

- `python -m compileall research/knowledge-hub/knowledge_hub/runtime_read_path_support.py research/knowledge-hub/knowledge_hub/runtime_bundle_support.py research/knowledge-hub/knowledge_hub/topic_replay.py research/knowledge-hub/knowledge_hub/kernel_markdown_renderers.py research/knowledge-hub/runtime/scripts/run_hypothesis_route_choice_acceptance.py research/knowledge-hub/tests/test_hypothesis_route_choice_contracts.py research/knowledge-hub/tests/test_runtime_scripts.py research/knowledge-hub/tests/test_topic_replay.py research/knowledge-hub/tests/test_schema_contracts.py`
  - result: `compiled successfully`
- `python -m pytest research/knowledge-hub/tests/test_hypothesis_route_choice_contracts.py research/knowledge-hub/tests/test_hypothesis_route_handoff_contracts.py research/knowledge-hub/tests/test_hypothesis_route_reentry_contracts.py research/knowledge-hub/tests/test_hypothesis_route_activation_contracts.py research/knowledge-hub/tests/test_hypothesis_branch_routing_contracts.py research/knowledge-hub/tests/test_topic_replay.py research/knowledge-hub/tests/test_schema_contracts.py -q`
  - result: `18 passed`
- `python research/knowledge-hub/runtime/scripts/run_hypothesis_route_choice_acceptance.py --json`
  - result: `success`
- `python -m pytest research/knowledge-hub/tests/test_runtime_scripts.py -k "hypothesis_route_choice_acceptance or hypothesis_route_handoff_acceptance" -q`
  - result: `2 passed, 36 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`
- `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`

## Accepted Open Gaps

- explicit transition gating for when route mutation is allowed remains
  deferred beyond the route choice surface
- automatic candidate reactivation and parent-topic reintegration mutation
  remain deferred beyond this milestone
- no broader full-suite rerun was attempted because unrelated in-flight
  working-tree changes remain present outside the `v1.78` slice
