Skip to content

feat(queen): LEADERBOARD, the fifteenth view -- whose lane the bees ran on - #1126

Merged
gHashTag merged 3 commits into
mainfrom
feat/queen-leaderboard-tab-2
Sep 23, 2026
Merged

gHashTag merged 3 commits into
mainfrom
feat/queen-leaderboard-tab-2

Conversation

@gHashTag

@gHashTag gHashTag commented Sep 23, 2026 •

Copy link
Copy Markdown
Owner

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.

  • 100 XP for an issue the Queen accepted on that lane
  • 10 XP for an hour her bees spent on it

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 scoring field rather than restated on the page, so the two cannot drift.

A lane nobody claimed 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.

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

gHashTag and others added 2 commits September 23, 2026 11:08
…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>
@github-actions github-actions Bot added the status:in-progress 🔵 Agent working label Sep 23, 2026
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>
@gHashTag
gHashTag merged commit e2c66d9 into main Sep 23, 2026
27 of 32 checks passed
@github-actions github-actions Bot added status:completed Done and removed status:in-progress 🔵 Agent working labels Sep 23, 2026
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>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant