The AGENTS.md drift check runs in two places:
.github/workflows/agents-md-sync.yml — standalone workflow (PR + main push, paths-filtered)
.github/workflows/lint.yml — agents-md-fresh job (PR + main push, runs unconditionally)
Both run identical commands (uv run python scripts/sync_agents_md.py --check). On a PR that touches CLAUDE.md / AGENTS.md / the sync script, both fire — that's one extra ~1-minute runner per relevant PR plus a duplicated setup block (checkout → install uv → install python → uv sync → run check).
The plan's stated rationale
The Phase 5d plan called for both: the lint job is the required-status-checks gate (the repo's branch protection targets the lint workflow, not the standalone), and the standalone workflow gives a discrete named status that humans can scan in the PR check list.
The tension
For a repo this size, two workflows running the same check is more bureaucracy than value. The discrete named status the standalone provides is captured by the agents-md-fresh job name in the lint workflow's check list anyway. The required-status-checks gate is the only thing that meaningfully differs.
Three paths
Path A — collapse: drop agents-md-sync.yml entirely. lint / agents-md-fresh covers everything. Saves runner minutes; loses the discrete named workflow.
Path B — collapse the other direction: drop the agents-md-fresh job from lint.yml and add agents-md-sync to the repo's required-status-checks list in branch protection. Saves runner minutes; requires a one-time branch-protection setting change.
Path C — status quo. Accept the duplication.
Why deferred from v1
The current setup works correctly; both checks fire and pass. This is an optimization / convention question, not a correctness one.
Acceptance
If pursued: pick path A or B, document the choice in the PR description, and update the 5d plan retro to reflect the final convention.
The AGENTS.md drift check runs in two places:
.github/workflows/agents-md-sync.yml— standalone workflow (PR + main push, paths-filtered).github/workflows/lint.yml—agents-md-freshjob (PR + main push, runs unconditionally)Both run identical commands (
uv run python scripts/sync_agents_md.py --check). On a PR that touches CLAUDE.md / AGENTS.md / the sync script, both fire — that's one extra ~1-minute runner per relevant PR plus a duplicated setup block (checkout → install uv → install python → uv sync → run check).The plan's stated rationale
The Phase 5d plan called for both: the lint job is the required-status-checks gate (the repo's branch protection targets the
lintworkflow, not the standalone), and the standalone workflow gives a discrete named status that humans can scan in the PR check list.The tension
For a repo this size, two workflows running the same check is more bureaucracy than value. The discrete named status the standalone provides is captured by the
agents-md-freshjob name in the lint workflow's check list anyway. The required-status-checks gate is the only thing that meaningfully differs.Three paths
Path A — collapse: drop
agents-md-sync.ymlentirely.lint / agents-md-freshcovers everything. Saves runner minutes; loses the discrete named workflow.Path B — collapse the other direction: drop the
agents-md-freshjob fromlint.ymland addagents-md-syncto the repo's required-status-checks list in branch protection. Saves runner minutes; requires a one-time branch-protection setting change.Path C — status quo. Accept the duplication.
Why deferred from v1
The current setup works correctly; both checks fire and pass. This is an optimization / convention question, not a correctness one.
Acceptance
If pursued: pick path A or B, document the choice in the PR description, and update the 5d plan retro to reflect the final convention.