Skip to content

[Fleet incident] Reconcile active Actions registry with protected-main workflows #865

Description

@seonghobae

Live Actions control-plane drift

The repository's Actions API currently reports 52 workflow identities. Numerous historical bootstrap, autofix, cleanup, probe, and PR-specific repair workflows remain in state: active, including examples such as:

  • apply-pr-696-review-fixes.yml through v4;
  • autofix-pr-693-contracts.yml;
  • autofix-pr-706-locks.yml;
  • autofix-pr-716-layout.yml;
  • bootstrap-current-pr-queue.yml;
  • cleanup-pr-716-artifacts.yml and cleanup-pr-731.yml;
  • multiple pr-693-*, pr-700-*, and related repair/probe workflows.

Fresh protected-main contents lookup returns 404 Not Found for sampled active path .github/workflows/apply-pr-696-review-fixes-v4.yml. The workflow source is absent, but its registry identity remains advertised as active.

Root cause

Temporary PR repair workflows were removed from Git history after their bounded use, but the independent GitHub Actions registry state was not disabled. Existing quality checks inspect the current tree and therefore cannot detect orphaned workflow identities whose source files are gone.

The repository consequently has no trustworthy answer to “which writers are enabled,” and retains active metadata tied to superseded PR heads and completed repair attempts.

Feasible remediation

Do not restore the old YAML or create another self-deleting repair workflow. Through a normal reviewed operator/control-plane path:

  1. paginate the complete workflow registry;
  2. bind the audit to the exact protected-main SHA and tree;
  3. distinguish present repository workflows, orphaned repository workflows, disabled records, and GitHub-owned dynamic workflows;
  4. disable each active orphan after a second exact-state refetch;
  5. preserve current CI, security, dependency, release, fuzz, supported review, and active product workflows;
  6. produce an immutable before/after ledger.

Coordinate with organization control-plane issue ContextualWisdomLab/.github#945 and detector issue ContextualWisdomLab/appguardrail#929. The repository owner loop retains all mutation authority.

Prevention and acceptance

  • executable read-only audit catches active orphan records with workflow ID/path/state/default-branch SHA and pagination receipts;
  • missing permissions, transient 403/404/5xx, or branch movement fail closed;
  • no name-only heuristic disables a legitimate live workflow;
  • no temporary writer source is reintroduced;
  • adversarial tests cover pagination, path case/encoding, workflow rename/ID reuse, GitHub dynamic workflows, and a live workflow with a repair-like name;
  • exact-head CI/security/review gates pass;
  • normal protected-main integration;
  • post-remediation Actions inventory proves all reviewed orphans disabled while supported production workflows still execute.

This is part of the organization-wide Hourly Product Development fleet incident. The fleet audit remains read-only and tracks protected-main operational evidence.

Metadata

Metadata

Assignees

No one assigned

    Labels

    area: authAuthentication, authorization, identity, or tenant isolationarea: ci-cdCI, GitHub Actions, checks, release, or supply chainarea: dependenciesDependency or lockfile maintenancearea: securitySecurity boundary, hardening, or vulnerability preventionpriority: mediumNormal-priority or P2 workstatus: triagedOpen issue has an organization taxonomy assignmenttype: featureNew or expanded product capability

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions