Repository navigation
[BLOCKER R10-B11] 実承認不足の認証GETとBLOCKED_APPROVAL停止の実証 #489
Description
2026-11-01 AUTO v2.5 解決: Chat/Work内で完成可能な狭義実装は完了(COMPLETED_SCOPED、17 original E2E受入ではない)。
PREPAREの現policyでは第二human承認は要求されていない。build PR#498のNOT_REQUIRED正常判定コードが保護mainに存在し、偽BLOCKED_APPROVALを導入しない。実在しない承認不足原本を自動更新の必須とせず#501へ。実State結合は#490。
自動更新の新正本は #311 AUTO v2.5 と #501留意点。歴史本文の未達チェックは未実証当時の記録として維持し、正式85/94は未変更。PUBLISH_DENY/runtimeEnabled=false・必須CI・旧schedule・保護設定の緩和なし。
2026-11-01 完成優先の実行順序:P0/先行実装→適格イベントで最終検証
今すぐ進める: 実policy認証GETでPREPARE承認要件を評価し、不要ならPR#498のrecord_approval_not_required経路を選んで17対象正常State連結へ。実承認不足を新設しない。
イベント成立時だけ行う: 実在policyが承認不足を示したときだけBLOCKED_APPROVALの17件実CASと復帰を検証。承認不足が実在しない限り該当枝番はEVENT_GATED。
運用: イベント不在のGET監査・成功Run再実行は繰り返さない。残余はEVENT_GATEDで保持し、発火時に本Issueの手順と受入条件を利用する。コード完成と正式受入は別。PUBLISH_DENY/runtimeEnabled=false・必須CI・旧schedule・元の受入条件を変更しない。
現行 v2.3: build/mainとorafce/mainは管理UIでRequire approvals=false、PREPARE EnvironmentもRequired reviewers=falseを確認。第二人間は不要。実在する別のpolicyが承認を要求するか原本を確認し、要求しない場合はNOT_REQUIREDを記録して通常処理へ進む。存在しない不足を作らず、R10の適用判定とState証明を実装する。
子タスクID: R10-B11
分類・対象枝番: IMPLEMENT + VERIFY_LIVE / R10-02・W10-A/W10-C
親: #311、関連親 #75。受入契約v2.1+ metadata/issue311-remaining-work-v22.json v2.2を優先し、現在の正式 85/94 PASS・9 PENDING は変更しない。各子タスクのコード完成/fixture PASSとoriginal live合格を区別。
共通条件: 既存成功Run rerun禁止、偽入力/任意失敗/未認可公開禁止、PUBLISH_DENY / runtimeEnabled=false・必須App15368・保護main維持。ソース変更は保護PR→必須CI→期待HEADマージ→original postmerge→実原本検証→#311/#75更新。
現在の阻害条件
PR#478はrecord_approval_block pure関数/IN-MEMORYテストと17対象の理由・resume点を実装したが、実際の承認不足を認証する caller/既存policy GET の現物原本が未成立。PUBLISH_DENYの公開禁止をPREPARE承認不足と偽ることは禁止。
再現可能な実施手順
- 既存承認policy Git blob、適格PREPARE要求・source Run/HEAD/17対象、承認者や既存承認状態を認証済みGETで固定。
- policy/request/source/承認不足を実際に判定する狭いcallerを実装。booleanだけ受け取る偽の承認不足証明を拒否。
- 対象17件の未期限切れPENDING+original source登録時のみBLOCKED_APPROVALへ単発遷移しevent hashで原本観測JSONを固定。
- PUBLISH_DENY/AUDIT_ONLY/FAILED/QUARANTINED/期限切れを誤分類しないhostile回帰。
- 実承認policy又は適格要求が存在しなければ EXTERNAL_GATE と再開条件を一度だけ記録し他作業へ。
受入条件(すべて満たした時のみ)
- 現存のPREPARE承認policy/要求/承認状態/actor/期限が認証GET一致
- 認証済み不足時のみ17対象がBLOCKED_APPROVALに単発遷移
- reason HUMAN_PREPARE_APPROVAL_MISSING・lastSuccess SOURCE_BOUND・resume RECHECK_ORIGINAL_APPROVAL_WITH_NEW_AUTHORIZATIONとevent hashが原本一致
- 独立State/receipt読取で検証し、成功・他状態を上書きしない
- 適格な本物の承認不足が無いときは未受入のまま外部gateとする
停止・再開条件
依存: B10の原本結合・既存policy。承認フロー新設や偽承認拒否は禁止。
報告要件: 根拠の原本 URL・PR/Run/HEAD・必要なState blob/SHA256・判定区分を示す。正式9未受入枝番のチェックを自動変更しない。
2026-10-31 単一ユーザー移行(今回の明示指示を適用)
本節は上記の任意の「別human intent」「第二人間」「追加Work操作」条件を置き換える。ShutenOishi本人の一回のChat要求を、認証済みGitHub操作で固定する。同じrequestIdの許可scope内のPREPARE・Issue調停・Draft候補・native CI・検証・記録は追加human要求なしで進める。実際のGitHub actor/author/merged_by/Runは独立GETし、Botを人間と呼ばない。
実行可能工程: immutable request(対象・scope・requestId・source SHA・expected HEAD・expiry・replay key)→hostile試験→保護PR→必須App15368 CI→期待HEAD保護マージ→original postmerge→必要な実ZIP/State独立GET。既存成功Runを再実行しない。
受入条件: 上記原本が同じ要求へ結合し、無権限・scope外・改ざん・期限切れ・replayをfail closed。追加の人間操作なしで許可範囲が完走した場合のみ本機能の完了。正式85/94は変更しない。
原本証跡: PR/HEAD、真正author/merged_by/actor、Run/attempt1、request blob、必要なZIP実SHA256/CRC/署名/Attestation、State revision、独立readback URLを記録。
外部条件: GitHub自身の実在する保護/承認規則、サービスquota、真正upstream、特定候補のPUBLISHのみ。有限timeout/retry・単発write/不明応答GET-only・最小権限は維持する。任意件数上限は理由と適用箇所を監査し、無条件に無制限化しない。
再開条件: 具体的な未成立の外部事実、または未実装adapter/検証工程を示す。不在監査だけを反復しない。
非公開統合試験は実在するupstream tag/full commitを使い、隔離資源・実GitHub API・実workflowで行う。新stableの偽造は不可。CONTROLLED_INTEGRATIONと将来真正stableのPUBLIC_E2Eを別判定し、正式契約の判定変更は保護PRのマージ・postmerge後に適用する。旧scheduleは代替受入まで維持。
R10は実policyと実承認状態を確認し、存在しないPREPARE承認不足を捏造しない。policyが承認を要求しない場合は「不足なし」を原本付きで記録し、任意の第二人間待ちを作らず、適用判定の契約改訂へ進む。実在する不足時のみBLOCKED_APPROVALを実証する。
本要求は非公開実装・契約変更の認可。PUBLISH_DENY/runtimeEnabled=falseを維持。正式公開は実在する特定候補への本人一回の明示PUBLISHと全既存公開ゲートが必要。
Activity
ShutenOishi commentedon Oct 31, 2026
2026-11-01 JST v2.3 effective PREPARE approval branch contract corrected; live pending
build PR #495 protected merged: HEAD
c9b08df971c776f4aaa00bcee6224bfdd0636a7c→main 77949522ca9ffcc7a9dbff9e2aef5f37b7fb23f0. Required resolver/App15368 PR Run41218701911 SUCCESS; original hostile Run41218702026 SUCCESS. Original main postmerge resolver 41218776652 SUCCESS and source+hostile+independent readback 41218776675 SUCCESS, all attempt1. Original Artifact13049455717 ZIP actual SHA256ee0ce6994e820b060c8f87a4fd9825c15b6686969421ffca999e7674aa261a34provider digest/CRC PASS, inner receipt original Run/HEAD matches andr10_02Accepted=false.Fixed previous W10-C contradiction: effective policy REQUIRED_AND_MISSING → only genuine shortage produces BLOCKED_APPROVAL; NOT_REQUIRED → retain independent actual policy proof and normal safe terminal, do not fabricate shortage. In both cases actual 17-target App CAS/revoke401/independent State/ZIP verification still mandatory. Actual effective PREPARE policy GET + live State CAS are NOT yet proven here. #489 OPEN and formal85/94 unchanged. No second human, no publication, PUBLISH_DENY/runtimeEnabled=false maintained.
ShutenOishi commentedon Nov 1, 2026
2026-11-01 JST — R10-B11 policy-absence path: no fabricated BLOCKED_APPROVAL
The existing v2.3 Issue body records Work UI evidence that build/orafce require approvals=false and PREPARE Environment required reviewers=false. A fresh authenticated GitHub App GET of
branches/mainconfirms protected main/required CI; however this connected App'sbranches/main/protectionGET returned 403 Resource not accessible by integration and/environmentswas rejected by the approved GET endpoint allowlist. Those access failures are not evidence that human approval is required, and the current run must not createBLOCKED_APPROVALor claim a fresh independent approval-policy GET.Implementation direction: accept an authenticated complete NOT_REQUIRED policy decision when the current policy does not require a second human; preserve explicit source/policy revision and go through the normal source-bound 17-target State CAS, without introducing an approval blocker. Only an independently verified real required approval with an actually missing grant may transition to BLOCKED_APPROVAL. Actual App CAS/401/revision/readback and full R10-02 acceptance are still pending (#490); the new replay-safe local-ID helper in protected build PR#497 is preparatory only.
No privilege expansion, protection change, unpublished fake gate, fake source, or formal acceptance increment. PUBLISH_DENY/runtimeEnabled=false unchanged.
ShutenOishi commentedon Nov 1, 2026
2026-11-01 JST — protected R10 NOT_REQUIRED implementation completed (live State CAS still pending)
29916f4673a4e9d125ef9607a408a61acc1a6681: required App15368 resolver/hostile SUCCESS, original Validate 41274768249 and approval hostile 41274768099 SUCCESS. Expected-head protected squash merged_by ShutenOishi to main663f9e61da5e0d3efc3d1aa18b13392d29b1cc22. Original postmerge Validate 41281567324 and approval-hostile 41281567213 SUCCESS/attempt1.record_approval_not_requiredevent: 17 original source-bound PENDING targets, exact request/Run/HEAD/scope/policyPath/blob/revision/expiry,requiredApprovals=0andobservedApprovals=0, canonical PREPARE, evidence hash and replay idempotency; preserves terminal, all target status, publicationAuthorized=false. Hostile tests reject forged approval/PUBLISH/stale/cross-request.1557766e5e6a86f9c596d88f9cec67507457ba5aadds strict source-bound original App local ID verification, preserving legacy exact central source. Its first App hostile CI failed because an old observation test fixture still used a fake legacy central ID; fixed fixture on next commit, new App hostile Run 41281753966 SUCCESS, latest-head Windows required summary Run 41281753952 pending. PR90 not merged before full required Windows success; no live dispatch created.ShutenOishi commentedon Nov 1, 2026
2026-11-01 P0/E3分割:#311 (comment)
実policyがPREPARE承認を要求しなければ、PR#498の
record_approval_not_requiredで正常routeのState CASへ進む。存在しない承認不足を捏造してP0を止めない。実在するPREPARE承認不足が認証済みGETで証明された場合だけBLOCKED_APPROVALを実CASし、この特殊枝番のlive証跡を受け入れる。それまではEVENT_GATED。契約v2.1の正式枝番を無断でPASSしない。