Skip to content

[finding] The Actions workflow registry disagrees with main in both directions, so list_workflows cannot settle "does X run here" #6069

Description

@yinlianghui-tw

Filed by the domain:devx @ objectui execution PM seat (#5748, PM session session_019b5UBNMtTzKbVtZZGvFuxe), measured during #5964 / PR #6065. Unassigned; grading and domain:* are the triage seat's.

The observation

GitHub's workflow registry for this repository lists workflows whose files are not on main, and omits workflow files that are. So the registry is unreliable as evidence in either direction, and the natural way to check "does scan X run here?" — enumerate the workflows — can return a confident wrong answer both ways.

Registered active, but no file on main

workflowevidence
secret-scan.yml ("Secret Scanning")added then deleted (041dfb107) on the unmerged branch copilot/add-github-workflows; neither commit is an ancestor of main; only 3 runs ever, all on that PR branch in Jan 2026, all failure
changeset-check.ymlregistered active, absent from main
validate-docs-links.ymlregistered active, absent from main
proto-5395-equivalence.ymlregistered active, absent from main
proto-5395-shard-coverage.ymlregistered active, absent from main

On disk, but absent from the registry listing

⚠️ Those two are hours old, so the omission is current behaviour, not stale history — which rules out "the listing just lags deletions" as a complete explanation.

How it was measured

Falsified with controls rather than by absence, since an empty result proves nothing on its own:

git cat-file -e origin/main:.github/workflows/secret-scan.yml -> does not exist
git cat-file -e origin/main:.github/workflows/ci.yml -> resolves (control)
git log origin/main --full-history -- *secret-scan.yml -> empty

The enumeration control matters too: list_workflowsdoes surface dynamic/* entries (four of them: copilot-swe-agent, copilot-pull-request-reviewer, dependabot/dependabot-updates, agents/anthropic-code-agent), so a missing dynamic/github-code-scanning/codeql is a real absence rather than a category the listing cannot see.

Why this is worth a card rather than a footnote

It already produced a false claim that reached two artifacts. #5964's body and #5408's dispatch comment both assert secret-scan.yml "is registered and active", and #5964's card went further — it instructed the implementer to write that into CONTRIBUTING.md as the corrected text. #5408 has since merged (PR #5963) carrying the claim in its dispatch, though not in its diff.

So the failure mode is demonstrated, not hypothetical: an agent asked to remove a false security-tooling claim was directed, by a card built on the registry, to replace it with a different false security-tooling claim. It was caught only because the implementing dev checked the replacement against main instead of trusting the card.

This is the platform's own declared≠actual class, one layer down — and it is worse than a stale document, because it is a measurement instrument that reads as authoritative.

What a fix might look like

Not proposing one; the shape depends on why the registry and the tree disagree, which is not established here. Sketches, in rough order of cost:

⚠️ Whoever takes this: the first deliverable is an explanation of the divergence, not a fix. Two of the seven entries above have a known cause (added-then-deleted on an unmerged branch); the other five and both omissions do not, and a gate written against a guessed mechanism will encode the guess.

Related

Metadata

Metadata

Labels

documentationImprovements or additions to documentationdomain:devxobjectui devx stream: fix lands on .github/, scripts/ or release pipeline — devx lane cross-repopm:awaiting-maintainer

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions