Repository navigation
release: remove the raw placeholder #3276 put on the Ethereum tab, and close the gate - #3278
Merged
Merged
Conversation
…et it through (#3277) 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 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.
Follow-up to the release merged twenty minutes ago (#3276): it put a raw
{{count:chain:ethereum}}on the Ethereum tab of bench 033. My defect, and a visible one on an indexed URL.The renderer takes
best_name,best_p50,worst_nameandworst_p50with a:chain:scope;countexists for:tier:only, and an unmatched token is passed through unchanged. The clause is removed rather than fixed: the chain path has only a leader and a trailer per chain, not the rows, so there is nothing to count, and unscoped{{count}}is not a substitute because that paragraph renders on every tab of the bench, so the BNB tab would print 9 inside a paragraph about Ethereum.And the gate that should have stopped it, in two places.
validate-specs.tslints every placeholder and passed this one twice. First,per_chain_explainerwas never in its field list, on any spec: the field written per chain, and so the one most likely to carry a chain-scope mistake, was the one field never checked. Bothh2andbodyare linted now, clean across all 253 specs. Second, with that field linted the token still passed, because the chain branch checked only that the chain value is declared while the tier branch beside it has always also checked which keywords may carry a scope. The chain branch now does too.Verified by reinstating the exact token rather than by reading the diff — the first version of the fix still reported 253 specs valid, which is how the missing field list was found. The spec was restored byte-identical and validate is green.
Gates:
pnpm validate253 specs,tsc --noEmitclean,bun test src/719 pass.