Skip to content

[BLOCKER R10-B11] 実承認不足の認証GETとBLOCKED_APPROVAL停止の実証 #489

Closed

Description

@ShutenOishi

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承認不足と偽ることは禁止。

再現可能な実施手順

  1. 既存承認policy Git blob、適格PREPARE要求・source Run/HEAD/17対象、承認者や既存承認状態を認証済みGETで固定。
  2. policy/request/source/承認不足を実際に判定する狭いcallerを実装。booleanだけ受け取る偽の承認不足証明を拒否。
  3. 対象17件の未期限切れPENDING+original source登録時のみBLOCKED_APPROVALへ単発遷移しevent hashで原本観測JSONを固定。
  4. PUBLISH_DENY/AUDIT_ONLY/FAILED/QUARANTINED/期限切れを誤分類しないhostile回帰。
  5. 実承認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

  1. ShutenOishi commented on Oct 31, 2026

    @ShutenOishi
    ContributorAuthor

    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 SHA256 ee0ce6994e820b060c8f87a4fd9825c15b6686969421ffca999e7674aa261a34 provider digest/CRC PASS, inner receipt original Run/HEAD matches and r10_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.

  2. ShutenOishi commented on Nov 1, 2026

    @ShutenOishi
    ContributorAuthor

    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/main confirms protected main/required CI; however this connected App's branches/main/protection GET returned 403 Resource not accessible by integration and /environments was rejected by the approved GET endpoint allowlist. Those access failures are not evidence that human approval is required, and the current run must not create BLOCKED_APPROVAL or 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.

  3. ShutenOishi commented on Nov 1, 2026

    @ShutenOishi
    ContributorAuthor

    2026-11-01 JST — protected R10 NOT_REQUIRED implementation completed (live State CAS still pending)

    • build PR#498 latest HEAD 29916f4673a4e9d125ef9607a408a61acc1a6681: required App15368 resolver/hostile SUCCESS, original Validate 41274768249 and approval hostile 41274768099 SUCCESS. Expected-head protected squash merged_by ShutenOishi to main 663f9e61da5e0d3efc3d1aa18b13392d29b1cc22. Original postmerge Validate 41281567324 and approval-hostile 41281567213 SUCCESS/attempt1.
    • Added pure record_approval_not_required event: 17 original source-bound PENDING targets, exact request/Run/HEAD/scope/policyPath/blob/revision/expiry, requiredApprovals=0 and observedApprovals=0, canonical PREPARE, evidence hash and replay idempotency; preserves terminal, all target status, publicationAuthorized=false. Hostile tests reject forged approval/PUBLISH/stale/cross-request.
    • Crucial boundary: policy evidence must be independently authenticated by future trusted caller. This primitive does not perform original authenticated policy GET, real App PUT CAS, token revoke401, or independent keyless readback. Do not claim R10-02 or [BLOCKER R10-B11] 実承認不足の認証GETとBLOCKED_APPROVAL停止の実証 #489/[BLOCKER R10-B12] 専用State App CAS・失効401・鍵なしreadbackと有限再開 #490 accepted. Existing management-UI evidence (approvals disabled) must not be replaced by a fabricated missing approval.
    • Parallel R10 pilot: orafce PR#90 latest HEAD 1557766e5e6a86f9c596d88f9cec67507457ba5a adds 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.
    • Next safe sequence: complete PR90 CI→protected merge→original postmerge real ZIP 5/5; then update central 17-target coordinator and all 17 local adapters with canonical IDs, protected PR/required CI/postmerge, one new genuine authorized original source, actual source wire journal+17 App local Runs/ZIP, App State CAS/401 and separate keyless GET.
    • PUBLISH_DENY/runtimeEnabled=false, previous genuine success Runs, old schedule, required CI, branch protection and current policy remain unchanged.
  4. ShutenOishi commented on Nov 1, 2026

    @ShutenOishi
    ContributorAuthor

    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しない。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions