# Source Control Ref Truth Owner Response 收件包

| 項目 | 內容 |
|------|------|
| 日期 | 2026-06-04 |
| 狀態 | 草案，等待 owner response |
| 資料契約 | `docs/schemas/source_control_ref_truth_owner_response_v1.schema.json` |
| 快照 | `docs/security/source-control-ref-truth-owner-response.snapshot.json` |
| 來源契約 | `source_control_ref_truth_classification_v1` |
| 目標契約 | `source_control_reconcile_plan_v1` |
| 模式 | `owner_ref_truth_response_intake_only` |
| 執行面授權 | `false` |

## 0. 核心結論

S4.11 補的是「AwoooP 要怎麼請 owner 回覆，以及 owner 要怎麼回覆 current `194` 個 refs review items 的真相來源、deprecated 候選、release tag retention 與 GitHub-only refs disposition」。

S4.11 不是 refs sync approval、不是 delete approval、不是 force-push approval，也不是 GitHub primary approval。它只把 owner response 的欄位、可接受決策、驗收規則、拒收規則與允許輸出固定下來，讓 AwoooP 可以只讀顯示並等待人工補證。

此文件不要求貼 token，不接受 raw secret，不 fetch、不 push refs、不 delete refs、不 rewrite branch/tag、不建立 repo、不修改 visibility、不切 primary，也不停用 Gitea。

## 1. Response 摘要

| 指標 | 值 |
|------|----|
| owner response 狀態 | `waiting_owner_response` |
| repos | 3 |
| ref review items | 194 |
| 需要人工指定真相來源 | 4 |
| deprecated / archive 候選 | 142 |
| release tag 待審核 | 3 |
| GitHub-only ref 待審核 | 20 |
| owner response request packet | 1 |
| template status ledger | 5 |
| audit event templates | 3 |
| redaction examples | 5 |
| collection checks | 6 |
| intake preflight checks | 6 |
| response templates | 5 |
| 已收到 response | 0 |
| 已接受 response | 0 |
| 已拒收 response | 0 |
| acceptance checks | 8 |
| rejection rules | 10 |
| 授權 sync refs | `false` |
| 授權 delete refs | `false` |
| 授權 force push | `false` |
| 授權切換 GitHub primary | `false` |
| 允許收集 secret value | `false` |
| 允許 action button | `false` |

## 1.1 Owner Response Request Packet

| 欄位 | 值 |
|------|----|
| request id | `s4_11_ref_truth_owner_response_request` |
| 顯示狀態 | `ready_to_request_owner_response` |
| 要求回覆 templates | 5 |
| 顯示模式 | `display_owner_response_request_only` |
| 執行授權 | `false` |
| 是否為批准 | `false` |

這個 request packet 只讓 AwoooP 顯示「請 owner 回覆哪五類 refs truth 問題、允許填哪些欄位、evidence 要怎麼脫敏、哪些 payload 必須拒收」。它不是 request sent、不是 response received、不是 response accepted，也不是 refs sync / delete / force push / primary approval。

Owner 回覆只能使用脫敏 metadata 或既有文件引用。不得貼 token、secret、private clone URL credential、git object pack、repo archive、API raw body、fetch/push/delete/force-push 指令或任何 execution request payload。

## 1.2 Template Status Ledger

| Template | 狀態 | request | received / accepted / rejected |
|----------|------|---------|--------------------------------|
| `response-main-branch-truth-source` | `waiting_owner_response` | `request_ready_not_sent` | `0 / 0 / 0` |
| `response-active-dev-branch-truth-source` | `waiting_owner_response` | `request_ready_not_sent` | `0 / 0 / 0` |
| `response-drift-deprecated-candidate-batch` | `waiting_owner_response` | `request_ready_not_sent` | `0 / 0 / 0` |
| `response-release-tag-retention` | `waiting_owner_response` | `request_ready_not_sent` | `0 / 0 / 0` |
| `response-github-only-ref-review` | `waiting_owner_response` | `request_ready_not_sent` | `0 / 0 / 0` |

Template status ledger 只讓 AwoooP 逐項顯示哪一類 refs truth response 還在等待 owner。`request_ready_not_sent` 不代表 request 已送出，`waiting_owner_response` 不代表 owner 已回覆，任何單項狀態也不代表 refs sync、delete、force push、tag rewrite、backfill 或 GitHub primary approval。

## 1.3 Audit Event Templates

| Template | 觸發點 | emitted |
|----------|--------|---------|
| `audit-ref-truth-response-request-shown` | 顯示 S4.11 request packet | 0 |
| `audit-ref-truth-response-received-metadata` | 收到脫敏 owner response metadata pointer | 0 |
| `audit-ref-truth-response-outcome-classified` | 依 acceptance checks / rejection rules 分類 outcome | 0 |

Audit event templates 只定義 AwoooP 未來可記錄的脫敏 metadata 欄位，全部維持 `template_only_not_emitted`、`emitted_event_count=0`、`stored_raw_payload_allowed=false`。它們不是 production ingestion，不代表 owner response 已收到，也不授權 refs sync、delete、force push、backfill、tag rewrite 或 GitHub primary。

## 1.4 Redaction Examples

| Example | 用途 |
|---------|------|
| `redaction-ref-truth-existing-doc-ref` | 用既有文件 / snapshot 引用 main truth evidence |
| `redaction-main-branch-truth-metadata` | 用角色、短 SHA 或 snapshot ref 表示 truth source |
| `redaction-deprecated-batch-disposition` | 用 ref pattern / count 表示 deprecated batch disposition |
| `redaction-release-tag-retention-metadata` | 用 artifact / rollback owner metadata 表示 release tag retention |
| `redaction-ref-truth-quarantine-pointer` | 不確定是否含敏感值時只留下 quarantine pointer |

Redaction examples 只示範安全回覆形狀，全部維持 `template_example_only`、`stored_raw_payload_allowed=false`。它們不是 owner response received、不是 accepted，也不讓 AwoooP 保存 git object pack、repo archive、API raw body、token、secret、private clone URL credential 或 execution request payload。

## 1.5 Collection Checks

| Check | 用途 |
|-------|------|
| `collection-ref-truth-request-packet-displayed` | 確認只顯示 S4.11 request packet，不夾帶 refs 執行要求 |
| `collection-ref-truth-read-only-submission-mode` | 確認 owner 只能用 read-only / redacted metadata 方式回覆 |
| `collection-five-ref-truth-template-tracking` | 確認五個 refs truth templates 分開追蹤 received / accepted / rejected |
| `collection-ref-truth-redacted-evidence-only` | 確認只收 repo 內文件、snapshot、短 SHA 或脫敏 metadata pointer |
| `collection-ref-truth-no-approval-language` | 確認 owner wording 不會升級成 refs sync / delete / force push / primary approval |
| `collection-ref-truth-audit-metadata-only` | 確認只記錄脫敏 audit metadata，不保存 raw payload |

Collection checks 只維持 request / received / accepted 狀態分離。它們不是 owner response received、不是 owner response accepted，也不授權 fetch、push、delete refs、force push、tag rewrite、backfill 或 GitHub primary。

## 1.6 Intake Preflight Checks

| Check | 用途 |
|-------|------|
| `preflight-known-ref-truth-lane` | 確認 response 對應 S4.11 已知 refs truth lane |
| `preflight-required-ref-truth-owner-fields` | 確認 owner、decision、repo/ref scope、truth/disposition 與 evidence_refs 完整 |
| `preflight-allowed-ref-truth-decision` | 確認 decision 在對應 template 允許值內 |
| `preflight-ref-truth-redacted-evidence-only` | 確認 evidence_refs 只含文件、snapshot、短 SHA 或脫敏 metadata pointer |
| `preflight-no-refs-execution-request` | 拒收 fetch / push / delete / force push / rewrite / backfill / primary 等執行要求 |
| `preflight-all-five-ref-truth-lanes-before-accepted` | 確認五個 templates 全部可驗收前不得標成 accepted |

Intake preflight checks 只把收到的 response 分類成可審、補證、隔離、拒收或繼續等待。Preflight pass 不是 owner response accepted，也不是 refs sync、delete、force push、tag rewrite、backfill、GitHub primary、workflow / secret / runner 或 Kali scan 授權。

## 2. Owner Response 必填欄位

每筆 response 至少要能回答：

1. `owner_role_or_team`：回覆者角色或團隊，不要求個人敏感資訊。
2. `decision`：必須是該 lane template 允許的決策值。
3. `decision_reason`：為什麼做此真相來源、retention 或 disposition 判定。
4. `repo` 與 `ref_name` / `tag_name` / `ref_pattern_or_ref_list`：批次回覆必須能重現範圍。
5. `truth_source_or_sha`、`branch_disposition`、`retention_disposition` 或 `github_only_owner`：依 lane 補齊。
6. `deploy_marker_owner`、`artifact_owner`、`rollback_point_owner` 或 `workflow_owner`：高風險 branch/tag 必須有 owner 或補證 owner。
7. `evidence_refs`：只能指向 repo 內文件、snapshot 或 owner 提供的脫敏 metadata。

## 3. 五個 Response Template

| Template | Lane | 覆蓋範圍 | 驗收重點 |
|----------|------|----------|----------|
| `response-main-branch-truth-source` | `main_truth_required` | 3 個 repo main branch | 指定 truth source、deploy marker owner、production source owner、rollback point owner |
| `response-active-dev-branch-truth-source` | `active_branch_truth_required` | `wooo/awoooi dev` | 判定 active workflow、legacy candidate 或需補 workflow owner |
| `response-drift-deprecated-candidate-batch` | `archive_or_deprecate_candidate` | `wooo/awoooi` 142 個 drift/adopt refs | deprecated candidate 只代表人工 disposition，不代表 delete approval |
| `response-release-tag-retention` | `release_tag_missing_on_github` | `awoooi` 2 個 release tags、`clawbot-v5` 1 個 tag | 指定 artifact / deploy marker owner，維持 tag action disabled |
| `response-github-only-ref-review` | `github_only_manual_review` | `wooo-aiops` 1 個 branch + 19 個 UAT tags | backfill 只能是 candidate，不代表 push approval |

## 4. 可接受決策值

| Lane | Decision |
|------|----------|
| `main_truth_required` | `choose_gitea_as_truth_candidate`、`choose_github_as_truth_candidate`、`choose_specific_sha_as_truth_candidate`、`hold_pending_deploy_marker`、`unknown_requires_more_evidence` |
| `active_branch_truth_required` | `keep_active_branch_candidate`、`mark_branch_legacy_candidate`、`hold_pending_workflow_owner`、`unknown_requires_more_evidence` |
| `archive_or_deprecate_candidate` | `mark_deprecated_candidate`、`keep_audit_retention_candidate`、`split_batch_requires_more_evidence`、`unknown_requires_more_evidence` |
| `release_tag_missing_on_github` | `keep_release_tag_candidate`、`mark_tag_legacy_candidate`、`hold_pending_artifact_owner`、`unknown_requires_more_evidence` |
| `github_only_manual_review` | `keep_github_only_candidate`、`backfill_to_gitea_candidate`、`mark_legacy_github_only_candidate`、`hold_pending_audit_owner`、`unknown_requires_more_evidence` |

## 5. 驗收規則

1. response 必須對應既有 refs truth lane。
2. `decision` 必須在該 lane template 的允許值內。
3. 必須標示 repo 與 ref scope；批次回覆必須有可重現範圍。
4. 必須說明 truth source 或 disposition；未知時要明確選 hold / unknown。
5. high-risk main branch 與 release tag 必須有 deploy、artifact、rollback 或補證 owner。
6. 不得夾帶 fetch、push refs、delete refs、force push、mirror sync、tag rewrite 或 branch rewrite 要求。
7. 不得夾帶 GitHub primary、repo creation、visibility change、disable Gitea 或 archive Gitea 要求。
8. `evidence_refs` 必須已脫敏，不得包含 token、credential、secret value、private key、deploy key value、cookie 或 session。

## 6. 必須拒收

1. token value、PAT、cookie、session、CSRF token、private key、deploy key value 或 partial credential。
2. fetch、push refs、delete refs、force push、mirror sync、tag rewrite、branch rewrite 或 prune refs。
3. 切 GitHub primary 或把 GitHub primary readiness 視為已完成。
4. 建立 repo、修改 repo visibility 或改 remote URL。
5. 把 deprecated candidate 當成 delete approval。
6. 把 backfill candidate 當成 push approval。
7. 缺 repo/ref/lane 或批次範圍無法重現。
8. main / release high-risk 回覆缺 deploy marker、artifact、rollback 或補證 owner。
9. 要求停用、刪除、封存或降級 Gitea。
10. 任何不確定是否含敏感值、私有 URL 憑證或未脫敏截圖的回覆。

## 7. AwoooP 可做

1. 顯示 1 個 owner response request packet。
2. 顯示 5 個 template statuses，逐項維持 `waiting_owner_response`。
3. 顯示 3 個 audit event templates，全部維持 `template_only_not_emitted` 與 `emitted_event_count=0`。
4. 顯示 5 個 redaction examples，全部維持 `template_example_only` 與 `stored_raw_payload_allowed=false`。
5. 顯示 6 個 collection checks，維持 request / received / accepted 分離。
6. 顯示 6 個 intake preflight checks，只分類可審、補證、隔離、拒收或等待。
7. 顯示 5 個 owner response templates。
8. 顯示 8 個 acceptance checks 與 10 個 rejection rules。
9. 在 owner response 到來後，只更新 read-only classification、draft reconcile plan、primary readiness blocker wording 與 status rollup。
10. 將不完整或可疑 response 放進 mirror quarantine。
11. 持續顯示 `received_response_count=0`、`accepted_response_count=0`，直到真的收到脫敏 response。

## 8. AwoooP 不可做

1. 不要求使用者貼 token、secret、private key、cookie、session 或 deploy key。
2. 不把 response 當成 refs sync approval。
3. 不把 response 當成 delete refs approval。
4. 不把 response 當成 force-push approval。
5. 不把 response 當成 GitHub primary approval。
6. 不建立 GitHub repo。
7. 不修改 GitHub/Gitea repo。
8. 不新增執行按鈕。

## 9. 階段定位

S4.11 是 S4.0 GitHub primary readiness 與 S4.10 GitHub target owner decision 後面的 refs owner response 收件包。

它讓 current 194 個 ref review items 的 owner response 變得可審、可驗收、可拒收，但仍停在框架期。真正進入 refs migration 或 GitHub primary 前，仍必須等 Gitea inventory、GitHub target response、workflow-secret parity、rollback ADR、owner approval 與後續 runtime gate 全部補齊。
