---
phase: 146-record-human-modifications-on-l2-approval
plan: 01
type: execute
wave: 1
depends_on:
  - v1.71-closure
files_modified:
  - research/knowledge-hub/knowledge_hub/promotion_gate_support.py
  - research/knowledge-hub/knowledge_hub/aitp_cli.py
  - research/knowledge-hub/knowledge_hub/topic_replay.py
  - research/knowledge-hub/runtime/scripts/run_human_modification_record_acceptance.py
  - research/knowledge-hub/tests/test_human_modification_record_contracts.py
  - research/knowledge-hub/tests/test_runtime_scripts.py
  - research/knowledge-hub/tests/test_aitp_cli.py
  - research/knowledge-hub/README.md
  - research/knowledge-hub/runtime/README.md
  - research/knowledge-hub/runtime/AITP_TEST_RUNBOOK.md
autonomous: true
requirements:
  - REQ-HUMMOD-01
  - REQ-HUMMOD-02
  - REQ-HUMMOD-03
  - REQ-VERIFY-01
must_haves:
  truths:
    - extend the existing promotion-gate path instead of inventing a disconnected evaluator log
    - modified and unchanged approvals must remain explicitly distinguishable
    - the first slice stays bounded to approval-time modification capture, not full evaluator analytics
---

<objective>
Record what the human changed when approving an `L2` promotion and make that
override visible on the promotion-gate and replay surfaces.
</objective>

<tasks>

<task type="auto">
  <name>Task 1: Add human modification capture on the approval path</name>
  <files>research/knowledge-hub/knowledge_hub/promotion_gate_support.py, research/knowledge-hub/knowledge_hub/aitp_cli.py, research/knowledge-hub/knowledge_hub/topic_replay.py</files>
  <read_first>research/knowledge-hub/knowledge_hub/promotion_gate_support.py</read_first>
  <action>Extend the approval path so operators can record what changed and why, persist that record in the promotion gate and logs, and expose it through replay surfaces.</action>
  <verify>python -m pytest research/knowledge-hub/tests/test_human_modification_record_contracts.py -q</verify>
  <acceptance_criteria>
    - approvals can carry structured modification records
    - unchanged approvals remain explicitly unchanged
    - replay/read paths surface whether and how the human modified the approved result
  </acceptance_criteria>
  <done>The human modification record is durable and operator-visible.</done>
</task>

<task type="auto">
  <name>Task 2: Add isolated acceptance and docs</name>
  <files>research/knowledge-hub/runtime/scripts/run_human_modification_record_acceptance.py, research/knowledge-hub/tests/test_runtime_scripts.py, research/knowledge-hub/tests/test_aitp_cli.py, research/knowledge-hub/README.md, research/knowledge-hub/runtime/README.md, research/knowledge-hub/runtime/AITP_TEST_RUNBOOK.md</files>
  <read_first>research/knowledge-hub/runtime/scripts/run_transition_history_acceptance.py</read_first>
  <action>Add one isolated modified-approval acceptance lane and align docs so the new promotion-gate record is testable and discoverable.</action>
  <verify>python research/knowledge-hub/runtime/scripts/run_human_modification_record_acceptance.py --json</verify>
  <acceptance_criteria>
    - docs and runbook reference the modified-approval acceptance lane
    - isolated acceptance proves the modified approval path on a temp kernel root
  </acceptance_criteria>
  <done>Phase `146` is ready to execute and verify.</done>
</task>

</tasks>
