feat(queen): LEADERBOARD, the fifteenth view -- whose lane the bees ran on - #1126
Merged
Merged
Conversation
…an on The owner, 2026-09-23: people who lend the swarm a provider token of their own should earn XP for it, and there should be a leaderboard. The tab reads /queen/public-leaderboard, which derives the score from the dispatches themselves on every read (BrowserOS#510): 100 XP for an issue the Queen accepted on that lane, 10 XP for an hour her bees spent on it. XP is not a count of tokens lent -- a key added and never used carries nothing, and paying for the adding would pay for ten dead keys. The page states the rule it draws from the server's own `scoring`, so the two cannot drift. A lane nobody claimed in TRIOS_KEY_OWNERS shows as `key #N` rather than being dropped: hiding it would make the swarm look as if it ran on fewer keys than it did. No credential appears anywhere -- only a lane's index ever reaches the database. The identity contract's guard matched `embed|screen|path|lead` as SUBSTRINGS of the address, so a view named LEADERBOARD carried `lead` and was refused. It now reads the parameters the return actually carries: one tab, a view name, nothing else -- stricter than the regexp, and blind to the letters of a view's name. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
The gate walks every stylesheet reachable from the board and refuses one it has never measured, by name. LEADERBOARD is the third sheet to arrive since that list replaced a count, and the third it caught on the first run. Measured with it on the list: 24 pairs over a lit and a dark field, worst 5.39:1. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Two gates spell the rail's key order as a literal rather than deriving it, and the comment beside one says why: adding a view has to be said out loud here. Said. `1234567890tprbwm` becomes `1234567890tprbwml`, l for LEADERBOARD. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
github-actions Bot
added a commit
that referenced
this pull request
Sep 23, 2026
feat(queen): LEADERBOARD, the fifteenth view -- whose lane the bees ran on (#1126) * feat(queen): LEADERBOARD, the fifteenth view -- whose lane the bees ran on The owner, 2026-09-23: people who lend the swarm a provider token of their own should earn XP for it, and there should be a leaderboard. The tab reads /queen/public-leaderboard, which derives the score from the dispatches themselves on every read (BrowserOS#510): 100 XP for an issue the Queen accepted on that lane, 10 XP for an hour her bees spent on it. XP is not a count of tokens lent -- a key added and never used carries nothing, and paying for the adding would pay for ten dead keys. The page states the rule it draws from the server's own `scoring`, so the two cannot drift. A lane nobody claimed in TRIOS_KEY_OWNERS shows as `key #N` rather than being dropped: hiding it would make the swarm look as if it ran on fewer keys than it did. No credential appears anywhere -- only a lane's index ever reaches the database. The identity contract's guard matched `embed|screen|path|lead` as SUBSTRINGS of the address, so a view named LEADERBOARD carried `lead` and was refused. It now reads the parameters the return actually carries: one tab, a view name, nothing else -- stricter than the regexp, and blind to the letters of a view's name. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> * test(queen): register the leaderboard sheet with the contrast gate The gate walks every stylesheet reachable from the board and refuses one it has never measured, by name. LEADERBOARD is the third sheet to arrive since that list replaced a count, and the third it caught on the first run. Measured with it on the list: 24 pairs over a lit and a dark field, worst 5.39:1. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> * test(queen): say the fifteenth rail key out loud Two gates spell the rail's key order as a literal rather than deriving it, and the comment beside one says why: adding a view has to be said out loud here. Said. `1234567890tprbwm` becomes `1234567890tprbwml`, l for LEADERBOARD. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> --------- Co-authored-by: Claude Opus 5 <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.
The fifteenth view on the Queen's rail, on the letter l: every bee runs on somebody's provider token, and this is what each of those lanes did.
Why XP is not a count of tokens lent
A key that is added and never used carries nothing. Paying for the adding would pay for ten dead keys, so the score is a reading of work that actually happened: the dispatch records which credential ran each turn (
key_index), how long it ran, and what the review said.A send-back, an escalation or an empty turn pays nothing; the hours still count, because the lender paid for them either way.
What the view shows
Rank, the lender's name, their lanes, accepted issues, bee hours, and XP with a bar showing the distance to the leader. The scoring rule is drawn from the server's own
scoringfield rather than restated on the page, so the two cannot drift.A lane nobody claimed shows as
key #Nrather than being dropped — hiding it would make the swarm look as if it ran on fewer keys than it did.Naming the lenders
TRIOS_KEY_OWNERS="0=Dmitrii,1=@alex"on the agent server. Nothing here reads a key and nothing here can: only a key's index ever reaches the database.Checks
qa/tri-identity-contract.mjs— PASS, 669 checks.qa/queen-contrast-contract.mjs— PASS, 24 pairs over a lit and a dark field, worst 5.39:1.qa/queen-language-contract.mjs— PASS, 375 EN keys, 375 RU keys.qa/queen-directives-contract.mjs— PASS, 33 checks.npm run typecheck:ratchet— no file gained errors (179 baseline).Server side: gHashTag/BrowserOS#510. The player learns the view's name in gHashTag/999-multibots-telegraf, or a sign-in from this tab returns to the comb.
{ "version": 1, "head_sha": "b9ceb7dd9149462d8d763350afbeb1620984dde9", "summary": "A new LEADERBOARD view on the Queen's rail, key l, shows whose provider token each bee ran on and what that lane earned, with XP derived from the swarm's own dispatch records on every read rather than stored in a column nobody can recompute.", "changes": [ "Add the LEADERBOARD view as the fifteenth view of the Queen, on the letter l, drawn on the rail after ROADMAP", "Add QueenLeaderboard.tsx, which reads /queen/public-leaderboard and ranks the lanes by XP with a bar for the distance to the leader", "Draw the scoring rule from the server's own scoring field instead of restating it on the page, so the stated rule cannot drift from the one applied", "Show a lane nobody claimed as key #N rather than dropping it, so the board never implies the swarm ran on fewer keys than it did", "Teach LEADERBOARD to the list of views a sign-in returns to, so the tab does not fall back to the comb", "Replace the identity gate's substring guard with a reading of the parameters a return actually carries, which no longer refuses a view whose name contains lead", "Register the leaderboard stylesheet with the contrast gate so its surfaces are measured over a lit and a dark hive", "Re-pin the rail key order in the two gates that spell it out as a literal, which is how adding a view is said out loud" ], "tests": [ { "command": "node --experimental-strip-types qa/tri-identity-contract.mjs", "result": "TRI identity contract PASS with 669 checks, including the new view's sign-in return", "status": "passed", "evidence": "The guard that refused LEADERBOARD now reads the return's parameters; every view return carries one tab and nothing else." }, { "command": "node --experimental-strip-types qa/queen-contrast-contract.mjs", "result": "24 pairs measured over a lit and a dark field, worst 5.39 to 1, 28 stylesheets walked", "status": "passed", "evidence": "The new stylesheet is named in the gate's reached list, which refused it until it was measured." }, { "command": "node --experimental-strip-types qa/queen-language-contract.mjs", "result": "Queen language contract PASS with 375 English keys and 375 Russian keys", "status": "passed", "evidence": "The view's name and hint are written in both languages and the counts stay balanced." }, { "command": "npm run typecheck:ratchet", "result": "179 errors across 26 files against a baseline of 179; no file gained type errors", "status": "passed", "evidence": "Ratchet output on this branch after the cherry-pick onto main." } ], "limitations": [ "A lane is named only if the operator set TRIOS_KEY_OWNERS; until then every row reads key #N and no person is credited by name", "The window is the last thirty days of dispatches and their archived attempts, so a lane that worked earlier and stopped falls off the board" ], "tags": [ "queen", "leaderboard", "xp" ], "blog": { "title": "XP for the lanes people lend the swarm", "summary": "Every bee runs on somebody's provider token, and until now nothing said whose or what it earned; the new LEADERBOARD view scores the work each lane actually did rather than the act of adding a key.", "outline": [ "The owner asked for XP for people who lend the swarm a provider token of their own, and for a leaderboard to show it.", "Paying for the act of adding a key would pay for ten dead keys, so the score reads work that happened: accepted issues and bee hours per lane.", "The dispatch already records which credential ran each turn, how long it took and what the review said, so no new column was needed anywhere.", "The score is derived on every read, because a number nobody can recompute is a number nobody can check against the board beside it.", "A lane nobody has claimed still appears as key #N, since hiding it would understate how many keys the swarm is actually running on." ] } }🤖 Generated with Claude Code