Skip to content

governance: external policy brokerでRuleset workflow pinをCAS更新する #54

Description

@kazukinakai

Problem / outcome

検証済みproposalを受け、organization required-workflow pinをnon-weakeningかつcompare-and-setで更新する外部authorityが存在しない。現在のpinは旧workflow SHAのままで、github-actions PR #25のlight runner routingがlive Rulesetへ反映されていない。

Dependencies

Expected behavior

外部brokerがproposal v1のdigestと固定targetを検証し、organization admin APIでcurrent Rulesetをreadし、current pinをCAS preconditionとして1 workflow SHAだけをcandidateへ更新する。更新前後payloadとaudit IDを残し、VibeOSへstatus eventを返す。

Scope

provider ADRで決まる独立deployable broker、proposal admission、GitHub App JWT/installation token、non-weakening diff、CAS、audit、kill switch、read-back verification。

Non-goals

local CLI/GitHub Actions/Doppler/self-hosted runnerへのprivate keyまたはinstallation token配布、arbitrary Ruleset mutation、bypass actor/enforcement/target変更、VibeOSへのmutation権限。

Acceptance criteria

  • AC-1: schema v1以外、digest不一致、固定org/ruleset/repository/path/ref不一致をmutation前に拒否する。
  • AC-2: admin readしたcurrent Rulesetからcurrent workflow SHAを取得し、read直後のexpected stateと異なる競合をfail closedで拒否する。
  • AC-3: permitted diffはworkflow SHA 1値だけ。enforcement、conditions、bypass、required checks、他workflowの変更は拒否する。
  • AC-4: GitHub App keyはsign-only provider内、broker runtime identityは必要最小限、installation token/private keyをresponse/log/artifactへ出さない。
  • AC-5: mutation後にorganization Rulesetとeffective repository Rulesetをread-backし、candidate workflowが実runで使用された証拠を関連付ける。
  • AC-6: append-only auditにproposal digest、before/after SHA、GitHub request ID、actor/workload、result、timestampを記録する。secretは記録しない。
  • AC-7: kill switch default deny、idempotent retry、timeout、GitHub 409/422/5xxのnegative testsを持つ。
  • AC-8: VibeOSにはsubmitted/approved/applied/rejected/failed status eventだけを返し、credentialを渡さない。

Verification plan

unitでschema/non-weakening/CAS/error matrix、sandbox orgまたはisolated test Rulesetでintegration、live適用前にdry-run diff、適用後read-backとrequired-workflow runを確認する。

Risks, dependencies, rollout

production organization mutationなので#53完了とowner-managed provider provisioningが必要。broker deployは可能でもlive mutationはdry-run証拠が揃うまでkill switchを開けない。

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