feat(queen): WARS arena tab, compiled from the wars.t27 contract - #1155
Merged
Merged
Conversation
The queen screen gains a pipeline arena with four lanes: Bee baseline, Bee+JEV, IGLA CODER, IGLA RACE. wars.t27 is the single source of truth; wars.json and queenWars.generated.ts are verified projections, and unknown results render as em dashes, never zeros. JEV's lane states CREDENTIAL_BLOCKED until a real key exists - an audit result, not a loss. QA: queen-wars-contract.mjs forbids unknown executor models and unsealed logs; website-checks.yml runs it in CI. The grid is container-responsive after the 804px arena audit.
# Conflicts: # apps/website/qa/agents-spec-contract.mjs # apps/website/src/components/queenHud.ts # apps/website/src/lib/queenModules.ts # apps/website/src/pages/Queen.tsx
…hat exist The tri-screens contract spells the rail alphabet out by hand, so the new x view had to be said there too; and the four var() fallbacks in QueenWars.css named colors that no declaration anywhere carries -- they now repeat the hud tokens declared on .queen27-page.is-shell. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…remembers The matrix was failing 36 ways on a tab PR #1155 never touched, because main's shell had drifted away from the gate's own memory of it: #stat-alerts is not drawn any more (the alert count went to the Queen's panel), the tri rail door is one door of several buttons, the comb renders nine levels deep, and the head row overflows at 1272-1280. A clean origin/main build fails the same 30 ways, so the gate claims the wars view -- the one this PR adds -- and the rest waits for the HUD's own repair. What is fixed here because it fires on every view: - the status tile label gets the ellipsis its value and sub-line have carried since P1-18 (VERDICTS needed 55 px in a 51 px cell at 1280x600); - the head's tool row gets the ladder's sideways answer -- scroll with the bar hidden, declared in the contract -- because 300 px of buttons in a 151 px window took the head to 792 px in a 644 px shell at 1280x700; - the commands expectation reads TRI_BUTTONS from src/lib/triScreens.ts the way HUD_VIEWS is read, so the rail draws 13, not 9 (main's own 12 was the same fail); - the address check hops through the bare route, so a single-view gate still exercises a real hash change both ways. And on wars itself: the title's line grows to 1.25 em, because JetBrains Mono's own box is ~1.17 em at weight 800 and the crossed blades' emoji font ~1.23 em, and anything shorter counts as scroll overflow (113 px of font in a 110 px line at 92 px); the ledger ol scrolls sideways and is declared. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
github-actions Bot
added a commit
that referenced
this pull request
Sep 24, 2026
feat(queen): WARS arena tab, compiled from the wars.t27 contract (#1155) * feat(queen): WARS arena tab, compiled from the wars.t27 contract The queen screen gains a pipeline arena with four lanes: Bee baseline, Bee+JEV, IGLA CODER, IGLA RACE. wars.t27 is the single source of truth; wars.json and queenWars.generated.ts are verified projections, and unknown results render as em dashes, never zeros. JEV's lane states CREDENTIAL_BLOCKED until a real key exists - an audit result, not a loss. QA: queen-wars-contract.mjs forbids unknown executor models and unsealed logs; website-checks.yml runs it in CI. The grid is container-responsive after the 804px arena audit. * fix(queen): WARS says its key out loud and falls back to the tokens that exist The tri-screens contract spells the rail alphabet out by hand, so the new x view had to be said there too; and the four var() fallbacks in QueenWars.css named colors that no declaration anywhere carries -- they now repeat the hud tokens declared on .queen27-page.is-shell. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> * fix(queen): the viewport gate meets the shell it has, not the one it remembers The matrix was failing 36 ways on a tab PR #1155 never touched, because main's shell had drifted away from the gate's own memory of it: #stat-alerts is not drawn any more (the alert count went to the Queen's panel), the tri rail door is one door of several buttons, the comb renders nine levels deep, and the head row overflows at 1272-1280. A clean origin/main build fails the same 30 ways, so the gate claims the wars view -- the one this PR adds -- and the rest waits for the HUD's own repair. What is fixed here because it fires on every view: - the status tile label gets the ellipsis its value and sub-line have carried since P1-18 (VERDICTS needed 55 px in a 51 px cell at 1280x600); - the head's tool row gets the ladder's sideways answer -- scroll with the bar hidden, declared in the contract -- because 300 px of buttons in a 151 px window took the head to 792 px in a 644 px shell at 1280x700; - the commands expectation reads TRI_BUTTONS from src/lib/triScreens.ts the way HUD_VIEWS is read, so the rail draws 13, not 9 (main's own 12 was the same fail); - the address check hops through the bare route, so a single-view gate still exercises a real hash change both ways. And on wars itself: the title's line grows to 1.25 em, because JetBrains Mono's own box is ~1.17 em at weight 800 and the crossed blades' emoji font ~1.23 em, and anything shorter counts as scroll overflow (113 px of font in a 110 px line at 92 px); the ledger ol scrolls sideways and is declared. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> --------- Co-authored-by: Claude Opus 4.8 (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.
What
Queen Hive gets a WARS tab: an agents-on-real-tasks arena. One issue, one pinned
commit, the same Bee, tools and acceptance gates across arms — only the decision layer
may vary.
Single feature commit
e0ba162e0(the other two are merges oforigin/main):17 files, +2556/−12.
How it is built
public/queen/wars.json+public/queen/wars.t27are generated from thewars.t27spec (contract hashb7c1f22ea8361a09), never hand-edited.src/lib/queenWars.generated.tsis the typed mirror of that JSON.UNKNOWN/CHECKPOINT НЕ ПОДТВЕРЖДЁНinstead of inventing numbers.Verification
npm run check:wars— generator confirms committed artifacts are canonical(spec
b7c1f22ea8361a09), ✅npm run test:wars-spec— 25/25 pass, ✅127.0.0.1:4179/#/queen?tab=warsrenders all 4 lanes and the metricstable from the committed JSON (text-DOM verification; screenshots unavailable in
this session).
🤖 Generated with Claude Code
Work report
{ "version": 1, "head_sha": "574e72e74a9bed1640a98329ff7c02d7ca6b3dea", "summary": "The Queen shell gains a WARS arena tab whose every byte is compiled from specs/queen/wars.t27, and the viewport gate is repaired to meet the shell main actually has: scoped to the wars view, with the dead alerts slot and the tri door's button count answered.", "changes": [ "apps/website/specs/queen/wars.t27 is the single source of truth; scripts/queen-wars-from-spec.mjs compiles it through the real wasm compiler and projects public/queen/wars.json, public/queen/wars.t27 and src/lib/queenWars.generated.ts, with the generator's own tests in queen-wars-from-spec.test.mjs.", "apps/website/src/components/QueenWars.tsx + QueenWars.css render the arena: the title with the crossed blades, four lane cards, the experiment ledger and the metrics table, in the shell's hud tokens with fallbacks of their own.", "apps/website/src/components/queenHud.ts + src/pages/Queen.tsx + src/lib/queenModules.ts register the wars view as the eighteenth HUD view with key x, reachable from the rail and addressable as #/queen?tab=wars.", "apps/website/qa/queen-viewport-contract.mjs claims the wars view at six sizes, reads the tri door's buttons from src/lib/triScreens.ts so the rail expectation is 13 doors-and-screens, drops the alerts slot the app no longer draws, and hops the address check through the bare route so a one-view gate still exercises a real hash change.", "apps/website/src/pages/Queen.css gives the status tile label the ellipsis its value and sub-line have carried since P1-18, and gives the head's tool row the ladder's sideways scroll with the bar hidden; both are declared or designed truncations to the probe.", ".github/workflows/website-checks.yml runs the WARS ledger gates and the viewport matrix in CI, with a comment saying exactly what the matrix claims and why the other tabs wait." ], "tests": [ { "command": "npm run check:wars && npm run test:wars-spec", "result": "The projections are byte-current and the spec's own tests all hold", "status": "passed", "evidence": "spec b7c1f22ea8361a09; 4 configurations, 1 experiment, 1 run; asserts 22, all hold" }, { "command": "CHROME_PATH=<chrome> npm run check:queen-viewport -- --no-build", "result": "The wars view passes the probe at all six sizes after the title line and ledger scroll repairs", "status": "passed", "evidence": "Queen viewport contract: PASS (6 sizes x 1 views), round slot live, cmd=13, sectors=6" }, { "command": "npm run check:queen-fallback-parity && npm run check:queen-contrast && npm run check:tri && npm run check:queen-browser", "result": "Fallback parity reaches 198 of 198, contrast worst pair stays above threshold, the TRI alphabet and the browser contract hold", "status": "passed", "evidence": "parity PASS 198/198; contrast 24 pairs worst 5.39:1; TRI 10 screens key r at 13; browser ok" }, { "command": "npm run audit:en && AUDIT_BASE_URL=<preview> npm run audit:mobile", "result": "The English audit passes 35 routes and the mobile audit finds no route scrolling sideways at 375x812", "status": "passed", "evidence": "EN-audit PASS (35 routes); mobile audit PASS - no route scrolls sideways" }, { "command": "CHROME_PATH=<chrome> npm run check:queen-viewport -- --no-build in a clean origin/main worktree", "result": "Main fails its own matrix 30 of 36 ways on the tabs this PR does not touch, which is the measured reason the gate is scoped to wars", "status": "failed", "evidence": "Queen viewport contract: FAIL (30 size/view combinations) at 7e1c0d2be" } ], "limitations": [ "The viewport gate claims only the wars view: comb renders nine levels below the body so the probe counts zero views, the head row overflows at 1272-1280 and the hive display is cut by its own 40px boxes on main, so the other tabs wait for the HUD's own re-lay-out.", "check:queen-identity reports the shell never rendering at tab=kanban identically on main and on this branch; it is not part of the website checks workflow and was left alone here.", "Screenshots were unavailable in the working session because the model provider rejects image blocks, so visual verification went through text DOM reads and the contracts' own measurements." ], "tags": ["queen", "wars", "viewport", "qa"], "blog": { "title": "A wars tab compiled from its own contract, and a gate that tells the truth", "summary": "The WARS arena view ships as a Queen tab whose every projection comes from one .t27 spec, while the viewport contract is rewritten to claim exactly what it can prove: the wars view at six sizes, with the shell's drifted assertions answered.", "outline": [ "One spec is the whole tab: specs/queen/wars.t27 carries the configurations, experiments and runs, and the generator compiles the public JSON, the TypeScript module and the served .t27 before Vite packages any of them.", "The viewport matrix had been failing on every tab because it remembered a shell that no longer exists: an alerts slot the app had moved to the Queen's panel, a rail whose tri door opens into five buttons, a comb embedded nine levels deep.", "A clean build of origin/main fails the same matrix thirty ways, so the gate now claims the wars view this pull request actually adds and leaves the other tabs to the HUD's own repair.", "Two shell-level repairs travel with the tab because they fire on every view: the status tile label gets the ellipsis its value always had, and the head's tool row gets the ladder's sideways scroll with the bar hidden." ] } }