Answer to "is the Friday routine enough to turn development red when the GATES change?"
Design: yes. Reality: no — the routine has never successfully run.
Measured 2026-08-20:
| workflow |
runs ever |
last result |
fleet-drift-sweep.yml |
1 |
failure (2026-08-19) |
fleet-cve-release.yml |
1 |
failure (2026-08-19) |
fleet-friday-merge.yml |
0 |
never executed |
All three stop at the same line:
##[error]FLEET_DISPATCH_TOKEN is not set, so this sweep can dispatch nothing.
Why the design is right
A gate change reaches every app without any commit in that app, because each app's Code Quality calls ConductionNL/.github/.github/workflows/quality.yml@main and the gate package is resolved at run time. So the only missing ingredient is a run.
The sweep handles the subtle part correctly: schedule: cannot choose a branch — GitHub runs cron from the repository's DEFAULT branch, and the fleet's defaults are split (11 apps default to development, the rest to main). A per-app cron would therefore measure the wrong branch on roughly half the fleet. The sweep instead dispatches centrally with --ref development stated explicitly for every app.
Why it produces nothing today
FLEET_DISPATCH_TOKEN does not exist. The sweep fails loudly on the first step rather than dispatching a partial fleet, which is the correct behaviour — but the net effect is that no gate-drift detection has ever run.
This is the failure mode the fleet keeps hitting in other forms: a check that did not run looks exactly like one that passed. The routine exists, reads as complete, and has produced exactly zero verdicts.
Remediation (needs an org admin — I cannot provision a secret)
- Mint a fine-grained PAT with Actions: read and write on the ConductionNL org, or a GitHub App installation token with the same.
- Add it as an org-level secret named
FLEET_DISPATCH_TOKEN, visible to ConductionNL/.github.
- Verify with a manual dispatch:
gh workflow run fleet-drift-sweep.yml --repo ConductionNL/.github --ref main -f ref=development
- Confirm it dispatched rather than merely "succeeded" — count the
workflow_dispatch runs it started:
gh api "repos/ConductionNL/<app>/actions/runs?event=workflow_dispatch&per_page=5" \
--jq '.workflow_runs[]|"\(.head_branch) \(.created_at) \(.status)"'
A green sweep job that dispatched zero runs is the same non-event as today's failure, just quieter.
Known follow-on, already handled
Sweep runs are workflow_dispatch, and shields.io badges filter event=push — so a sweep that finds drift moves no badge. That is why fleet-drift-sweep.yml carries a collect job: it reads the dispatched runs' conclusions directly instead of relying on badges.
Related, unblocked separately
Four apps went red today on a transient HTTP/2 504 from GitHub's zipball CDN during the sibling-app composer install (decidesk 5 legs, scholiq 6, pipelinq 4, larpingapp 1 — each naming a different package). Fixed in #522 with a bounded 3-attempt retry that still hard-fails if the install genuinely cannot complete.
Answer to "is the Friday routine enough to turn
developmentred when the GATES change?"Design: yes. Reality: no — the routine has never successfully run.
Measured 2026-08-20:
fleet-drift-sweep.ymlfleet-cve-release.ymlfleet-friday-merge.ymlAll three stop at the same line:
Why the design is right
A gate change reaches every app without any commit in that app, because each app's
Code QualitycallsConductionNL/.github/.github/workflows/quality.yml@mainand the gate package is resolved at run time. So the only missing ingredient is a run.The sweep handles the subtle part correctly:
schedule:cannot choose a branch — GitHub runs cron from the repository's DEFAULT branch, and the fleet's defaults are split (11 apps default todevelopment, the rest tomain). A per-app cron would therefore measure the wrong branch on roughly half the fleet. The sweep instead dispatches centrally with--ref developmentstated explicitly for every app.Why it produces nothing today
FLEET_DISPATCH_TOKENdoes not exist. The sweep fails loudly on the first step rather than dispatching a partial fleet, which is the correct behaviour — but the net effect is that no gate-drift detection has ever run.This is the failure mode the fleet keeps hitting in other forms: a check that did not run looks exactly like one that passed. The routine exists, reads as complete, and has produced exactly zero verdicts.
Remediation (needs an org admin — I cannot provision a secret)
FLEET_DISPATCH_TOKEN, visible toConductionNL/.github.workflow_dispatchruns it started:Known follow-on, already handled
Sweep runs are
workflow_dispatch, and shields.io badges filterevent=push— so a sweep that finds drift moves no badge. That is whyfleet-drift-sweep.ymlcarries acollectjob: it reads the dispatched runs' conclusions directly instead of relying on badges.Related, unblocked separately
Four apps went red today on a transient
HTTP/2 504from GitHub's zipball CDN during the sibling-app composer install (decidesk 5 legs, scholiq 6, pipelinq 4, larpingapp 1 — each naming a different package). Fixed in #522 with a bounded 3-attempt retry that still hard-fails if the install genuinely cannot complete.