The vendor freshness gate is advisory and nothing runs it — and #669 describes it wrongly - #670
Merged
Merged
Conversation
…describes it wrongly Two things, one subject. The gate: tools/check_vendor_freshness.sh checks four vendored families against their upstreams, and a grep of the tree finds it named only in prose — CLAUDE.md, the boards, DEPLOY_HOLD, four todos, a sapper note — and in no workflow, test or hook. It runs when a session remembers to type it. That is worth naming because the failure it exists to catch already happened: third_party/draughtsman/ sat pinned at cb7fc2a for three days while the upstream had fixed a mis-routed edge, and the front page published the bad figure with nothing red. The todo records why wiring it into CI is not a one-liner — two private upstreams and a machine-local clone path — and lists the candidates. The misreading: #669, merged today, says in its body that the gate compares each family file with the last upstream commit touching that file, and concludes the draughtsman family will read stale permanently. Neither holds. There is no per-file history lookup in murderboard_freshness.sh; the first listed file supplies one stamp for the family, the others are reported only when they disagree with it, and that stamp is compared against upstream HEAD. A family going stale when its upstream moves is the gate working. A merged PR body cannot be unpublished, so the correction is filed where a later session reading #669 will meet it. Also recorded: #669 was opened and merged two minutes apart, before CI finished on a branch whose suite takes two hours. Three stamp lines over a byte-identical package, so nothing broke — but merge_when_green.sh exists to refuse exactly that, and the API route goes around it. An INDEX row now points at the gate, because there was none. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_017hQX6iESxBsQk7Jan875e3
… report does not say so Found by the session that wrote #669, tracing where its own wrong claim came from — the useful half of that story. murderboard_freshness.sh caches the resolved upstream HEAD per family in the git common dir for TTL seconds, default 43200. --refresh is the only bypass. The verdict line names the cached sha as "upstream" without marking it as cached, so a session can reason about a repository state that stopped existing hours ago. That is what happened: the cache held a draughtsman sha written before draughtsman #1 merged. The gate guards the behind-cache direction and self-tests it, so a consumer stamped at or after the cached sha is not accused. But "provably at-or-ahead of a twelve-hour-old sha" is weaker than "current", and nothing in the output separates them. The window is exactly the one the gate exists for: upstream merges, a session re-vendors the same day and checks. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_017hQX6iESxBsQk7Jan875e3
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.
Three things about one gate, filed as a todo plus the INDEX row that was missing.
The gate nobody runs
tools/check_vendor_freshness.shchecks four vendored families against their upstreams. A grep of the tree finds it named inCLAUDE.md,docs/SESSIONS.md,docs/DEPLOY_HOLD.md, four todos and a sapper-feedback note — and in no workflow under.github/, no test undertests/, no hook under.githooks/. It runs when a session remembers to type it.Worth naming because the failure it exists to catch already happened:
third_party/draughtsman/sat pinned atcb7fc2afor three days while draughtsman had fixed a mis-routed edge inbb83174, and the front page published that figure with nothing red.The todo says why wiring it into CI is not a one-liner — it resolves upstream through
ghagainst two private repositories, andBUGARACH_INTERFACE2names a machine-local clone no runner has — and lists the candidates in order of cost. Its own design anticipates this: exit2means could not determine, chosen deliberately because a false STALE is its own harm.The upstream answer can be twelve hours old, and the report doesn't say so
murderboard_freshness.shcaches the resolved upstream HEAD per family in the git common dir forTTLseconds — default 43,200.--refreshis the only bypass. The verdict line names the cached sha as "upstream" without marking it as cached.That is not hypothetical: it is where #669's wrong claim came from. Its cache held a draughtsman sha written before draughtsman #1 merged, so the session reasoned about a repository state that had stopped existing hours earlier.
The gate does guard the behind-cache direction, with a self-test ("a BEHIND cache is not stale") that keeps a consumer stamped at or after the cached sha from being accused. But provably at-or-ahead of a twelve-hour-old sha is weaker than current, and nothing in the output separates them — in the exact window the gate exists for: upstream merges, a session re-vendors the same day and checks its work.
Credit where it is due: the session that wrote the wrong claim is the one that traced it to this.
A published misreading, corrected
#669 said in its body that the gate "compares each family file with the last upstream commit touching that file" and therefore that the draughtsman family "reports stale permanently." Neither holds, and its author has since corrected the body and confirmed the reading here. The correction is recorded in the tree anyway, because the PR is merged and a later session will meet the claim before it meets any reply:
murderboard_freshness.sh— nogit log -- <path>. The first listed file supplies one stamp for the whole family; the others are reported only when they disagree with it, which is the half-finished-re-vendor check.One more thing recorded
#669 was opened at 17:42 EDT and merged at 17:44 — before CI finished, on a branch whose suite now takes two hours. Three stamp lines over a byte-identical package, so nothing broke. But
tools/merge_when_green.shexists to refuse exactly that, and merging through the API goes around it. Noted, not escalated.Docs only: one new todo, one INDEX row.
tests/test_index_resolves.py334 passed; sapper,check_quotesandcheck_pipelinesclear.🤖 Generated with Claude Code
https://claude.ai/code/session_017hQX6iESxBsQk7Jan875e3