Repository navigation
feat(ci): detect caller-template drift (DEC-080) - #57
Merged
Merged
Conversation
make link-workflows COPIES the caller templates into a consumer, and devkit-sync
deliberately never writes .github/workflows/. So the vendored devkit advances
while the copied caller stands still and nothing at runtime notices. Both known
instances were silent by construction:
- share-chat could not reach the capture_all_traces input for weeks, because
its caller predated it; no run ever failed to say so
- actions: write (DEC-074) needed hand-propagating to 4 repos in 4 PRs, and
until then the prune degraded to a WARNING rather than failing
The check compares the EXECUTABLE CONTRACT — triggers, dispatch inputs,
permissions, job ids, uses refs, with inputs, secrets shape — and ignores
comments, whitespace, quoting, key order and prose descriptions. That line is
deliberate: a byte-diff would have fired on all four consumers the moment the
devkit rewrote a header comment for DEC-079, and a checker that cries wolf gets
|| true-d.
Templates resolve to the consumers own pinned tests/_testkit when available, so
each repo is judged against the devkit ref IT pinned, not whatever main is.
The self-test replays both real incidents as positive controls and pins the
cosmetic tolerances as negative controls — so the tempting fix for a noisy
checker (loosen until quiet) fails the suite instead of passing silently.
10/10 green.
Verified against live main: 3 of 4 consumers in sync, share-chat drifted on 4
paths (the capture_all_traces input and its wiring) — the one genuine gap.
omar-nahhas
force-pushed
the
feat/caller-drift-check
branch
from
August 5, 2026 00:18
1cf62e8 to
923bbef
Compare
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Closes C5.
make link-workflowscopies the caller templates into a consumer, anddevkit-syncdeliberately never writes.github/workflows/. So the vendored devkit advances while the copied caller stands still — and nothing at runtime notices. Both known instances were silent by construction:capture_all_tracesinput for weeks; no run ever failed to say soactions: write(DEC-074) needed hand-propagating to 4 repos in 4 PRs, and until then the prune degraded to a warning rather than failingWhat counts as drift
Compares the executable contract — triggers, dispatch inputs, permissions, job ids,
usesrefs,withinputs, secrets shape. Ignores comments, whitespace, quoting, key order, prose descriptions.That line is deliberate: a byte-diff would have fired on all four consumers the moment the devkit rewrote a header comment for DEC-079, and a checker that cries wolf gets
|| true'd.Templates resolve to the consumer's own pinned
tests/_testkitwhen available, so each repo is judged against the devkit ref it pinned.The self-test is the point
It replays both real incidents as positive controls, and pins the cosmetic tolerances as negative controls — so the tempting fix for a noisy checker (loosen until quiet) fails the suite instead of passing silently. 10/10 green.
Verified against live main
capture_all_tracesinput + itswith:wiringFixing share-chat separately.