Skip to content

community infra: issue forms, code of conduct, project setup - #3

Merged
Flotapponnier merged 1 commit into
mainfrom
community-setup
Apr 30, 2026
Merged

community infra: issue forms, code of conduct, project setup#3
Flotapponnier merged 1 commit into
mainfrom
community-setup

Conversation

@Flotapponnier

Copy link
Copy Markdown
Collaborator

Adds the GitHub-side scaffolding so contributors and providers have proper channels for proposing benchmarks, flagging data, and submitting corrections.

What's new

Issue forms (YAML, structured)

  • 📊 new-benchmark.yml — propose a benchmark formally (metric, providers, methodology, hosting plan)
  • 🐞 data-quality.yml — report a number on the site that looks wrong/stale/broken
  • ✏️ provider-correction.yml — provider-submitted disagreement with a measurement (with reproducer)
  • config.yml — disable blank issues, link to Discussions for free-form questions

Community files

  • CODE_OF_CONDUCT.md — short, technical-project-flavored rules
  • SECURITY.md — vulnerability disclosure via private advisories
  • SUPPORT.md — triage matrix mapping intent → channel

Operations

  • DISCUSSIONS_AND_PROJECT_SETUP.md — documents the manual UI setup (Discussions categories + roadmap project board + label list) so it can be re-created if wiped

Updated

  • CONTRIBUTING.md — links new templates and Discussions categories
  • README.md — adds a Community section linking everything

Manual follow-up (already done by the user)

  • Discussions enabled
  • Projects enabled
  • Categories + project board to be created per DISCUSSIONS_AND_PROJECT_SETUP.md

@Flotapponnier
Flotapponnier merged commit 6ca0829 into main Apr 30, 2026
1 check failed
@Flotapponnier
Flotapponnier deleted the community-setup branch April 30, 2026 16:31
Flotapponnier added a commit that referenced this pull request May 22, 2026
…inality) (#84)

GSC shows /benchmarks/l1-finality at 144 imp/wk and 0.69% CTR. The page already ranks (#3 on top query) but the SERP snippet doesn't convert and there's no on-page anchor for the family of 'X chain finality time' queries.

Changes:

Schema + type plumbing
- New optional YAML field per_chain_explainer: array of {slug, h2, body}
- Body strings go through the existing template resolver so {{p50:slug}} resolves to live Prom data
- Plumbed through spec-schema.ts -> Benchmark type -> spec.ts loader -> bench-template.ts renderer

Component update (ChainHeadingsSummary)
- Headings upgraded from h3 to h2 (stronger SEO signal)
- Each chain section gets id={slug} so URLs like /benchmarks/l1-finality#ethereum land at the exact section
- When per_chain_explainer has an entry for the chain's slug, render its body as a second paragraph below the live p50 line
- Backward-compatible: chains without an explainer keep the existing 1-line rendering

YAML content (l1-finality.yml)
- 12 per_chain_explainer blocks (ethereum, solana, stellar, hedera, sui, ton, bnb, avalanche, tron, cardano, litecoin, monero) at 70-90 words each
- FAQ expanded from 6 to 12 entries (cap), adding 'What is blockchain finality?', 'Probabilistic vs deterministic finality?', and per-chain entries for SUI, TON, BNB, Cardano (previously missing)

Targets these GSC query patterns:
- ethereum l1 time to finality (10 imp/wk, position 3.2)
- stellar finality time (7 imp/wk, position 6.57)
- hedera consensus finality time (4 imp/wk, position 7)
- ethereum l1 finality time epochs (1 imp/wk, position 3)
- solana finality time (1 imp/wk, position 50)
- hedera finality 3-5 seconds (1 imp/wk, position 12)
- 8 untapped queries (sui/ton/bnb/avalanche/cardano/tron/litecoin/monero finality time)

Estimated impact: 144 imp/wk -> 350-500, position ~5 -> ~3, CTR 0.69% -> 4-6%, clicks 1/wk -> 15-30/wk in 4 weeks.

pnpm validate -> 18 specs valid. pnpm typecheck -> clean.
Flotapponnier added a commit that referenced this pull request Sep 8, 2026
…nominator (#2279)

Two problems on /products/[slug], both visible on Serialized.

rankPerChainForBench only holds one real per-chain fact: the leader, from
bestPerChain. For every other provider it reused the unfiltered aggregate
order shifted by one slot, so a chip reading "#3 on Solana" was the global
rank with a chain label on it, repeated identically across every chain of
the bench. That reads as a measurement and is not one. Non-leader chips
are gone: a chip now means "leads this chain", and its absence means
"does not lead", not "ranks lower".

The chips also hid how many providers were measured on the chain. "#1 on
Solana" was #1 of 2 on bench 008 while sitting next to "#3 of 8" for the
aggregate. They now read "#1 of 4 on Ethereum", with the denominator taken
from providersPerChain and omitted when that set is unknown rather than
substituting the global count.

Wins accounting is unchanged: it already counted rank === 1 entries only.

Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com>
Flotapponnier added a commit that referenced this pull request Sep 8, 2026
…he mix (#2280)

On a bench with chain dimensions the cross-chain aggregate is a mix, not a
comparison. Ranking on it alone let a provider measured on one chain that
nobody else reported finish above a provider that led several contested
ones. Five live benches shipped that way:

  rpc-capabilities        Binance 1st on 1 chain, PublicNode led 6
  wallet-labels-coverage  XRPScan 1st on 1 chain, Serialized led 4
  token-quote-coverage    Jupiter 1st on 1 chain, Mobula led 2
  bridge-fee              Squid Router 1st on 1 chain
  perp-liq-rate           Lighter 1st on 1 chain

rankedCandidates now sorts by contested-chain wins first and uses the
aggregate value only to break ties. A chain counts only when at least two
providers reported on it, so an uncontested chain awards nothing: you do
not win a race you ran alone.

Guarded by the per-chain stashes, which materialize/load.ts populates only
on the unfiltered view. A chain-filtered variant has none, so ?chain=bnb
keeps ranking by value as before.

providers.ts reuses the same ordering. The two surfaces disagreeing is what
put "#3 of 8" next to five chain-leadership chips on the same bench row.

Known and accepted: a provider with one contested win now ranks above one
with none and a higher aggregate figure (TonAPI over XRPScan on 008). That
is what ranking on head-to-head record means; the win count is on the row.

Rule documented in methodology, section II.

Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com>
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