Live fleet finding
The GitHub Actions workflow registry currently reports 42 active workflows for ContextualWisdomLab/appguardrail, including multiple temporary one-shot identities such as:
apply-dashboard-pluralization-once.yml;
finalize-opencode-commercial-loop-once.yml;
harden-opencode-commercial-loop-once.yml through harden-opencode-commercial-loop-v6-once.yml;
apply-pinned-https-integration-once.yml;
harden-pinned-https-cli-once.yml.
Fresh contents-API reads against the current default branch develop return 404 Not Found for sampled paths including finalize-opencode-commercial-loop-once.yml, apply-dashboard-pluralization-once.yml, and harden-opencode-commercial-loop-v6-once.yml. The source files were removed, but their GitHub Actions registry entries still report state: active.
The current scheduled Commercial Readiness Loop itself is healthy: protected-default-branch run 31586926814 completed and correctly stopped with action=wait-prs for the live PR queue. This issue is therefore not a request to change that production loop.
Root cause
Temporary writer workflows were removed from Git history after use, but workflow lifecycle cleanup treated source deletion as sufficient. GitHub retains workflow registry identities independently; source removal did not disable the registered workflow records. Existing repository tests focus on file contents and cannot detect an orphan identity whose file is no longer present.
This creates:
- misleading active automation inventory;
- audit and incident-response ambiguity about which writers remain enabled;
- unnecessary attack-surface and policy noise;
- failure of the fleet invariant that no temporary write-capable/self-modifying repair workflow remains;
- a detection gap in AppGuardrail itself: the repository currently cannot report this same-class issue from live GitHub workflow metadata.
Realistic remediation
Do not recreate or self-delete the old workflow files merely to clean them up. Use the GitHub Actions workflow lifecycle API from an authorized operator/normal governance path to disable each orphaned registry identity after proving its file is absent from the current protected default branch.
Because AppGuardrail's own policy says its repository issues must be detectable by AppGuardrail, add a read-only scanner/control-plane rule that:
- paginates the live Actions workflow inventory;
- resolves the current protected default-branch tree;
- classifies every workflow record as present, orphaned-deleted, disabled, or unresolved;
- flags active orphan records, especially names/paths indicating
once, apply, finalize, repair, bootstrap, or branch-writing behavior;
- never treats a missing contents response, pagination failure, or permission failure as a clean result;
- emits exact workflow ID, path, state, current default-branch SHA, and evidence timestamp;
- proposes disablement but does not mutate workflow state from an untrusted scan job.
Acceptance criteria
- complete paginated inventory, not a sampled list;
- all active registry paths absent from the current protected default branch are reviewed and either disabled or explicitly justified;
- no production scheduled/reusable workflow is disabled merely because a historical commit contained a different path;
- no temporary write-capable/self-modifying workflow source is reintroduced;
- AppGuardrail gains executable detection coverage for active-orphan workflow identities;
- adversarial tests cover truncated pagination, transient 404/403/5xx, default-branch movement, path case differences, a disabled orphan, and a live file whose name contains
once but has an explicit supported contract;
- exact-head CI/security/review gates succeed;
- normal protected-default-branch integration;
- a post-integration live inventory shows every former orphan identity disabled and the production Commercial Readiness Loop still scheduled and operational.
This is part of the organization-wide GitHub Actions fleet incident. The AppGuardrail dedicated writer loop owns implementation; the fleet audit remains read-only and tracks the live registry to closure.
Live fleet finding
The GitHub Actions workflow registry currently reports 42 active workflows for
ContextualWisdomLab/appguardrail, including multiple temporary one-shot identities such as:apply-dashboard-pluralization-once.yml;finalize-opencode-commercial-loop-once.yml;harden-opencode-commercial-loop-once.ymlthroughharden-opencode-commercial-loop-v6-once.yml;apply-pinned-https-integration-once.yml;harden-pinned-https-cli-once.yml.Fresh contents-API reads against the current default branch
developreturn404 Not Foundfor sampled paths includingfinalize-opencode-commercial-loop-once.yml,apply-dashboard-pluralization-once.yml, andharden-opencode-commercial-loop-v6-once.yml. The source files were removed, but their GitHub Actions registry entries still reportstate: active.The current scheduled
Commercial Readiness Loopitself is healthy: protected-default-branch run31586926814completed and correctly stopped withaction=wait-prsfor the live PR queue. This issue is therefore not a request to change that production loop.Root cause
Temporary writer workflows were removed from Git history after use, but workflow lifecycle cleanup treated source deletion as sufficient. GitHub retains workflow registry identities independently; source removal did not disable the registered workflow records. Existing repository tests focus on file contents and cannot detect an orphan identity whose file is no longer present.
This creates:
Realistic remediation
Do not recreate or self-delete the old workflow files merely to clean them up. Use the GitHub Actions workflow lifecycle API from an authorized operator/normal governance path to disable each orphaned registry identity after proving its file is absent from the current protected default branch.
Because AppGuardrail's own policy says its repository issues must be detectable by AppGuardrail, add a read-only scanner/control-plane rule that:
once,apply,finalize,repair,bootstrap, or branch-writing behavior;Acceptance criteria
oncebut has an explicit supported contract;This is part of the organization-wide GitHub Actions fleet incident. The AppGuardrail dedicated writer loop owns implementation; the fleet audit remains read-only and tracks the live registry to closure.