STARSPELL · DESIGN REVIEW · 2026-09-22 · ROUND TWO ON THE VERSUS PAGE · REVISED THE SAME NIGHT

THE DUELING GROUND, FILLED

The 9/9 UNDER ONE SKY round built this page its world; this round makes the middle earn its ground. One move does most of it: the mages you can replay stop being 118-unit pills and become full replay rows — the seal-plaques’ own furniture — and the page fills itself with them by law, in every state, on every height of phone. Names breathe, AGAIN never shrinks again, and the dead middle dies by construction.

Skylar’s ask, verbatim (9/22, voice): “For the versus screen before you go into a battle, we need to do a redesign on that, you can put the redesign in a sky pilot GitHub page. Right now there’s too much dead space in the middle of the screen. The mages you can replay are way too small. Their names are being cut off. The Again button is being cut off as well. We need to fill that space up and make it look better. Right now it’s just too much dead space in the middle of the screen.”

How to rule: tap the state tabs, then answer the four questions at the foot — COPY VERDICTS builds the paste-back block. Nothing here is built.
REVISED, SAME NIGHT — Wyatt’s notes (relayed via Skylar’s console), 9/22 late, verbatim: “They’re good but specifically you can see where text gets are too tight/overlapped and text that need more buffer padding from lines —I feel like it’s a little overwhelming with how much text is on the screen too. —I don’t think it needs to tell you how many victories you have on the bottom —I don’t think it should have all the text on the bottom (“Mock, Shipped strings, ect) —Under Challenge a Friend you don’t need to have a subline. —Under Challenge World Worldwide you don’t need to have a subline.”

What this revision does: THE AIR LAW enters §VI (minimum buffer between text and any line — and the tight seats it cures are real: the live page’s own band head and fold chips ride into the plaques, measured in §I) · the ✦-victories whisper dies · every door drops its subline — the two gold doors by Wyatt’s word, the dark doors and the sheet’s invite plate by the same law · the mock caption labels are gone from the frames · row subs turn presence-only and §V’s texture question is reshaped around the quieter direction (Q3 — the ★ moves) · the offline ghost line and the header caption are cut or demoted (§VI law 13 carries the full list as build rulings). The original round stands in git history.

I · THE COMPLAINT, MEASURED

Measured against versus.js at v0.103.0 HEAD (the layout is byte-identical to the v0.102.0 stack — the only versus.js change since is the App Store URL). Design box 420×800; safeB is the computed true foot, ~800 on a box-exact phone and ~830–855 on tall phones, where the doors sink with the foot but the middle band does not follow — the void grows with the screen.
STATE (TODAY)THE MIDDLE ENDS ATTHE FIRST DOOR STARTS ATDEAD NIGHT
zero duels (the common evening: you finished your games)~y360 — the pill stripy612≈252–300 pts, ~a third of the screen
1 plaque~y420y612≈192 pts
2 plaques~y478y612≈134 pts
3 plaques~y536y612≈76 pts
4 plaques (fold)~y580y612fine — the busy page was never the problem
offline~y523 — the retry door— (no doors)≈230 pts above the foot note
REPLAY SURFACE (TODAY)NAME GETSTHE AFFORDANCE
presence strip pill · on the page (versus.js buildStrip)44 units at 9 pt — “Moonlit Hare” renders “Moonlit H…”AGAIN tag 48×20, font shrinks 7.5 → 5.5 pt floor, then clips — es “OTRA VEZ” and de “NOCHMAL” live at the floor
social sheet RECENT row (openSocial)118 units at 12 ptAGAIN button 76×24, font shrinks 9.5 → 7 pt floor
Both of Skylar’s sentences are one defect: the people worth re-fighting were given the smallest furniture on the page, while the ground that could seat them full-size sits empty right above the doors. The fix is the same move in both directions — promote the people into the space.
And Wyatt’s padding note has a measured live root — these seats are tight in versus.js today, not just in the mocks: The doors themselves clear each other by exactly 8 (tops safeB−188/−120, 60 tall) — legal under the law below. THE AIR LAW (§VI, law 12) names the minimum buffers and the cures; the PROPOSED column obeys it everywhere, and the TODAY column reproduces the tight seats as they live.

II · THE FILLED GROUND — EVERY STATE, BEFORE AND AFTER

The TODAY column reproduces the live page’s own seats, tight ones included — that tightness is part of the complaint (§I). The PROPOSED column obeys THE AIR LAW everywhere.

← swipe — TODAY left, PROPOSED right →

TODAY — LIVE v0.103.0
PROPOSED — FILLED

THE PLAQUE LADDER — 1 → 4 STANDING DUELS, PROPOSED

The in-between states, so no plaque count is taken on faith: the duel band never moves, and the replay rows yield a slot at a time until the fold. (Zero duels and the fold live full-size in the tabs above.)

the fill law breathing: 1 plaque · 3 rows → 2 · 2 → 3 · 1 → 4 · the detagged fold
The fill law, once (what the build implements):

III · THE REPLAY ROW — ANATOMY, AND THE TRUNCATION LAW

One row builder serves the page and the sheet. The law it obeys, stated once and inherited by the build card verbatim: words never shrink to fit furniture — furniture sizes to words, and only names ellipsize.

Moonlit Hare
last night
AGAIN
row 344×50, pitch 58 — the plaque’s twin presence dot r 4.5 — green pulse / amber busy / gold glint (circle) / slate name fixed 13 pt · ellipsis at 168 units — no font shrink, ever sub fixed 9.5 pt · presence word / night-clock alone — a circle row carries no sub (ratings only if Q3 turns) pill fixed 10 pt · width = its word (10-unit buckets, 76–128) · gold = starts now, dark = summons waits tap whole row + pill, 44-pt zones

THE PILL SIZES TO ITS WORD — ALL FIVE LANGUAGES, NO SHRINK LOOP

vsAgain across en·es·fr·pt·de, each at the same fixed 10 pt — the bucket width printed beneath. The same rule dresses vsDuelTag (DUEL·DUELO·DUEL·DUELO·DUELL).
OTRA VEZ
today’s floor, actual size —
the strip tag at 5.5 pt
OTRA VEZ
the same tag ×3 — what a phone
actually asks a child to read
OTRA VEZ
proposed: fixed 10 pt,
the pill grew instead

THE LONG-NAME TEST

Keeper of the Ninth Star
online
DUEL
24 characters — the name input’s own cap — measures ≈163 units at 13 pt Georgia: the full worst-case name fits whole. The ellipsis loop survives as a guard (registry dedupe suffixes like “Astral Raven 1” can push past the cap), not as a lifestyle.
The truncation law, verbatim for the build card:
  1. Buttons and tags never shrink. Pill width = ceil((textWidth+28)/10)·10, clamped 76–128, font fixed 10 pt. The 7.5→5.5 pt strip loop and the 9.5→7 pt sheet loop die.
  2. Names never shrink. Fixed 13 pt (page rows) / 13 pt (sheet rows) / 10 pt (fold pills), the shipped ellipsis-while-loop at 168 / 128 / 78 units.
  3. Subs never shrink. Fixed 9.5 pt, same clip as their name.
  4. Page floor: nothing interactive under 10 pt, nothing readable under 8.5 pt — today’s floors are 5.5 pt (interactive!) and 6.5–7 pt. The big gold doors keep their fit-to-width loops (long de/pt labels genuinely need them) with the floor raised 7 → 9 pt.
  5. Checked in all five languages — the harness pins es OTRA VEZ and de NOCHMAL (the widest words) at full 10 pt in their buckets, and a 24-char name whole at 13 pt.

IV · TWO SURFACES, ONE ANATOMY — WHY THE SHEET SURVIVES

Keep both surfaces, unify the row. The page seats the few — ranked picks, zero taps away. The sheet holds the many — the full friends roll, the deep recent list, add-by-name, the app invite. One row builder means one truncation law everywhere; merging them entirely would either scroll the scene (new machinery, new laws) or cap the roll at what the page can seat. The “› ALL MAGES” door survives only in the fold — on the open page the gold CHALLENGE A FRIEND door already is the sheet’s front door, and two doors to one room is one too many.

SHEET TODAY — 372×380
SHEET PROPOSED — 372×448
The regrown sheet: panel 380 → 448 tall (still well inside the design box), row pitch 32 → 38, names at fixed 13 pt with the bucket pill — and the freed height seats a fourth recent rival. The friends rows, the +, the ✕ and the pinned invite keep their seats and their manners — and the invite plate drops its subline (the door law: a label alone). Subs stay presence-only unless Q3 turns.

V · TEXTURE — REWORKED ON WYATT’S NOTES (question 3)

The original round argued for adding a line of texture to every row — rating first, an optional last-word whisper. Wyatt’s 9/22 direction runs the other way (“overwhelming with how much text”), so the recommendation flips: the quiet lane — presence only. The sub carries exactly the strip’s own words today: online for a friend, the night-clock for a rival, nothing at all for a circle mage (their sub is empty by the shipped fiction, and an empty line is air, not a hole). The mocks above now show this lane.

The ratings texture stays on the table as Q3’s open alternative, mechanics unchanged from the round: ✦ 1024 · last night — ≤5 registry reads per page open, cached for the visit, rows dressing in place when the number lands (the redress law); circle ratings from the rival engine’s own Elo; the last-word garnish only where a near-duel note already holds it. Zero new synced data either way — but if PRESENCE ONLY rules, slice F below never fires at all. Skylar rules; the question stands reshaped, not removed.

VI · THE LAWS THE BUILD INHERITS

  1. safeB anchoring. Doors at safeB−158/−90, whisper/note at safeB−44, formula verbatim (the suites pin it). NEW: the funnel’s three doors join the safeB family (safeB−370/−296/−222) and the offline retry anchors safeB−158 — today both sit at fixed y and open a foot gap on tall phones.
  2. The doorsC contract. Doors live in a container, destroyed + rebuilt on funnel↔duels flips; container children never appear in scene.children.list — suites aim at refs (chWorldB = the sentinel, chFriendB NULL in funnel); every ref nulled in create() because scene instances persist across restarts.
  3. pendC rebuilds, stripC redresses. The replay rows live in pendC (their count is plaque-coupled), so the pendKey gains the shown-row-count + picks component; the fold strip stays built-once. Picks rank once per open; the 1-s tick redresses dots/subs/pills in place and never reorders.
  4. 44-pt tap zones everywhere (rows are 50 tall; pills wear ssHitPad 44).
  5. Five-duel cap pips; an unclaimed summons holds no slot; every row action routes through the cap gate (vsCapSheet) exactly as the chips do today.
  6. Funnel and offline are designed states. Funnel: hero 2.0 + fiction + three safeB-anchored doors — no people invented for a device that knows nobody. Offline: the ghost ledger becomes ghost rows (same anatomy, dimmed, no pills, the shipped status fiction as the sub) + vsGhost line + anchored retry.
  7. The sky is kept. ssSkyWorld versus dress, seed 0x1701, no moon, navy veil, crest fireflies — the hero flex touches scale and anchors only.
  8. Bots indistinguishable. Circle rows byte-dress like human rows; glint, never “online”; no circle/bot/ai word on any surface.
  9. Record shapes kept. pendRows verbatim; the new rosterRows records ship for the suites the way chipRows do; vsGameRows() untouched.
  10. The U+2694 grep gate stands. Zero new strings ×5 — every word on the filled page already ships (vsTonight, vsAgain, vsDuelTag, the presence words, the night-clock). No new art files. And the revision only removes words: six shipped lines stop rendering (law 13) with strings.js bytes untouched.
  11. Out of scope, named: the HOME meadow duel strip (game.js ~6150–6239) is a different surface and does not move. Card 03 (the in-battle duel column) is independent — a plaque’s › still enters vsbattle, and any battle doorway this design implies assumes card 03’s bigger-health-bar language once it lands.
  12. THE AIR LAW (new — Wyatt’s 9/22 note: text needs buffer from lines). In design pts: bare text (heads, fictions, captions, whispers) keeps ≥12 to any furniture edge, rule, or neighboring text · furniture (plaques, rows, chips, doors, pills) keeps ≥8 to furniture · text inside a panel keeps ≥6 to its box · nothing ever touches or crosses a line. The transient noteT is exempt while it passes (it steps in front and steps away). The cures this design already seats: plaques 336 → 350 · the fold chips at last-plaque-bottom + 32 · the zero-duels head at y330 with rows from 374 · the whisper retired outright (law 13) — and the strip-head-over-chips squeeze dies with the strip itself. The doors’ own 8-pt gap (tops safeB−188/−120, 60 tall) already passes. The build’s harness measures the law on every state.
  13. THE QUIET GROUND (Wyatt’s 9/22 cuts — build rulings, all render-only; strings.js bytes untouched, the keys simply go unread). These stop rendering: the ✦-victories whisper (vsVict; noteT keeps the safeB−44 seat for transient notes) · the gold doors’ sublines (vsChFriendSub, vsChWorldSub — Wyatt’s word) · the dark doors’ sublines (vsAddFriendSub, vsInviteNewSub, the sheet’s invite plate included — the same law: a door carries its label alone, centered, geometry unchanged) · the offline ghost line (vsGhost — the dimmed rows speak for themselves). vsAsync survives on the funnel alone, where it teaches. Row subs carry presence only unless Q3 rules for ratings.

VII · BUILD COST, HONESTLY — AND THE ORDER

SLICEWHATSIZE
A · the rows + the fill lawreplay rows in pendC, geometry-driven count, fold-to-strip at 4 plaques (detagged), picks frozen per openM
B · the truncation lawbucket pills + fixed fonts on page rows, fold pills, sheet rows; door floors 7→9; shrink loops removedS
C · the hero flexthree scales (1.5/1.85/2.0), zenith + fly-in anchors ride, reduced-motion honoredS
D · funnel + offline respacesafeB-anchored funnel doors + retry, ghost rows, fiction reseats under the 2.0 heroS
E · the sheet regrownpanel 448, pitch 38, fourth recent, shared row anatomyS
F · the texture (gated on Q3 — the revision’s lane is presence-only; F fires only if RATINGS rules)ratings on rows (registry reads ≤5/open, cached, redress-in-place; circle Elo from the engine) · last-word garnish where heldM
G · the harnessvspage re-aims (strip refs → row refs), fill-geometry pins ×5 states, truncation pins ×5 languages, fold-detag pin, funnel/offline anchor pins — rides the build card, ×3 green on final bytesM
Suggested order: one build card carries A → B → C → D → E (B is A’s own law; C/D/E are geometry riding the same rebuild; the air law and the quiet-ground cuts ride A for free — they are seat numbers and deleted draw calls), with G alongside — versus.js + tools only, zero strings.js bytes, zero game.js bytes, roughly two dev-days. F is its own card, fired only if Q3 rules for ratings — it is the one slice that adds reads. Per the queue law, nothing fires until the verdicts land and Skylar says go.

FOR SKYLAR — ANSWER BY NUMBER

Astro (Skylar’s console) · 2026-09-22 · Nothing here is built — zero game bytes were touched for this page. Sources: live game v0.103.0 (HEAD 4f35e097; versus.js read end-to-end — the measured stack is v0.102.0’s, byte-identical but for the App Store URL) · the shipped sky-world / letterpress / nine-slice / plaque systems, reused verbatim in the mocks · strings.js ×5 for every word shown · prior rounds: under one sky (9/9) · the turning sky. Mock names are circle-minter names; every string on the mocks ships today.

Revised 2026-09-22, late, on Wyatt’s notes relayed via Skylar’s console (quoted in full at the top): the air law, the quiet-ground cuts, Q3 reshaped toward presence-only, the frames’ mock labels removed. Verdicts already clicked on this device carry over (Q3’s renamed chips migrate). The original round stands in git history.
0 / 4 ruled