Skip to content

release: remove the raw placeholder #3276 put on the Ethereum tab, and close the gate - #3278

Merged
Flotapponnier merged 1 commit into
mainfrom
dev
Oct 24, 2026
Merged

Flotapponnier merged 1 commit into
mainfrom
dev

Conversation

@Flotapponnier

@Flotapponnier Flotapponnier commented Oct 24, 2026 •

Copy link
Copy Markdown
Collaborator

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_name and worst_p50 with a :chain: scope; count exists 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.ts lints every placeholder and passed this one twice. First, per_chain_explainer was 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. Both h2 and body are 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 validate 253 specs, tsc --noEmit clean, bun test src/ 719 pass.

…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>
@Flotapponnier
Flotapponnier merged commit bf7b97a into main Oct 24, 2026
7 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant