Repository navigation
a raw placeholder is on the Ethereum tab, and validate let it through twice - #3277
Merged
Merged
Conversation
…et it through My own defect, shipped minutes ago in #3275. The Ethereum explainer said "across the 7 measured providers" while eleven published, so I replaced the hand-typed number with {{count:chain:ethereum}}. The renderer does not resolve that form: bench-template's CHAIN_TEMPLATE_RE takes best_name, best_p50, worst_name and worst_p50 only, and count exists for :tier: alone. An unmatched token is passed through unchanged, so the page now reads "across the {{count:chain:ethereum}} measured providers" on a live indexed URL. A wrong number became a visible placeholder, which is worse. The clause is removed rather than fixed. Adding a per-chain count to the renderer is not cheap: the chain path has bestPerChain and worstPerChain, a single leader and trailer per chain, not the rows, so there is nothing to count. And {{count}} unscoped is not a substitute: the Ethereum explainer renders on EVERY tab of the bench (checked on ?chain=all, ?chain=ethereum and ?chain=bsc, present on all three), so on the BNB tab it would print 9 inside a paragraph about Ethereum. The sentence stands without it. NOW THE PART THAT MATTERS MORE THAN THE SENTENCE. validate-specs.ts already lints every placeholder, and it passed this one twice. Two holes, and the first one hid the second. per_chain_explainer was never in the linted field list, on any spec. The list covers subtitle, seo_*, abstract, disclaimer, findings, methodology and faq. So no token in any per-chain explainer has ever been checked, which is the field written per chain and therefore the one most likely to carry a chain-scope mistake. Both h2 and body are linted now. Clean across all 253 specs, so this closes a hole without a backlog. And with that field linted the token still passed, because the chain branch checked only that the chain value is declared. The tier branch beside it has always also checked WHICH keywords may carry a tier scope ("cannot be tier-scoped"); the chain branch had no equivalent. It does now, against a CHAIN_SCOPABLE set that names what CHAIN_TEMPLATE_RE actually resolves. Tested by reinstating the exact token, not by reading the diff: the first version of this fix reported "253 specs valid" with the bad token in place, which is how the missing field list was found. After both changes: ✗ benchmarks/evm-quote-latency.yml: per_chain_explainer[0].body: {{count:chain:ethereum}} cannot be chain-scoped 1 error. The spec file was restored byte-identical afterwards and validate is green. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This was referenced Oct 25, 2026
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.
My own defect, shipped minutes ago in #3275.
The Ethereum explainer said "across the 7 measured providers" while eleven published, so I replaced the hand-typed number with
{{count:chain:ethereum}}. The renderer does not resolve that form —bench-template'sCHAIN_TEMPLATE_REtakesbest_name,best_p50,worst_nameandworst_p50only, andcountexists for:tier:alone. An unmatched token is passed through unchanged, so the live page now reads:A wrong number became a visible placeholder on an indexed URL, which is worse than what it replaced.
Why the clause is removed rather than fixed
Adding a per-chain count to the renderer is not cheap: the chain path has
bestPerChainandworstPerChain— a single leader and trailer per chain, not the rows — so there is nothing to count.And unscoped
{{count}}is not a substitute. The Ethereum explainer renders on every tab of the bench (checked on?chain=all,?chain=ethereumand?chain=bsc— present on all three), so on the BNB tab it would print 9 inside a paragraph about Ethereum. The sentence is complete without it.The part that matters more than the sentence
validate-specs.tsalready lints every placeholder, and it passed this one twice. Two holes, and the first hid the second.1.
per_chain_explainerwas never in the linted field list, on any spec. The list coverssubtitle,seo_*,abstract,disclaimer,findings,methodologyandfaq. So no token in any per-chain explainer has ever been checked — and that is the field written per chain, therefore the one most likely to carry a chain-scope mistake. Bothh2andbodyare linted now, and it comes back clean across all 253 specs, so this closes a hole without opening a backlog.2. With that field linted the token still passed, because the chain branch checked only that the chain value is declared. The tier branch sitting right beside it has always also checked which keywords may carry a tier scope (
cannot be tier-scoped); the chain branch had no equivalent. It does now, against aCHAIN_SCOPABLEset that names whatCHAIN_TEMPLATE_REactually resolves.Tested by reinstating the token, not by reading the diff
The first version of this fix reported
✓ 253 specs validwith the bad token in place — which is exactly how the missing field list was found. After both changes:The spec file was restored byte-identical afterwards. Gates:
pnpm validate253 specs,tsc --noEmitclean,bun test src/719 pass.