Skip to content

feat(queen): Kenney Space Kit models on the field, a rendered look, the tree's scroller - #912

Merged
gHashTag merged 1 commit into
mainfrom
feat/queen-cycle-016-rendered-look
Sep 4, 2026
Merged

gHashTag merged 1 commit into
mainfrom
feat/queen-cycle-016-rendered-look

Conversation

@gHashTag

@gHashTag gHashTag commented Sep 4, 2026

Copy link
Copy Markdown
Owner

What

Loop cycle 016. The user authorised the download ("download it yourself, open source"): Kenney Space Kit 2.0 (CC0) models replace the procedural buildings, hub, crystals and units on the Babylon field (loaded once, merged, thin-instanced; procedural stand-ins stay when a model fails). A rendered look: tone mapping, vignette, fog, glow on emissive parts (B-8). The technology tree declares its scroller so the 390x844 RESEARCH overflow stops flaking check:queen-viewport (P1-31).

Verified

Full chain on the Babylon default (tri game-gates full): 19 rows; viewport 25/25 after three fixes it found: the RESEARCH 390x844 console is a declared scroller (P1-31), the model loader ignores a scene disposed mid-load, and the loaded PBR materials become StandardMaterials so no BRDF lookup texture is generated on a dead engine when the view switches (an uncaught TypeError the gate counted); dead-api 25/25, touch, round, pick, placement, stale, check:queen-babylon, honesty 28/28, seven contracts, api, ratchet, eslint, tsc.. tri game-spike: 480/480 frames at vsync; chunk 385,900 B brotli.

🤖 Generated with Claude Code

…he tree's scroller (B-8, B-5, P1-31)

Loop cycle 016. The user: "which pack? download it yourself, open
source". Kenney Space Kit 2.0 (CC0, kenney.nl, 6,677,531 B archive) is the
pack; fourteen GLB models (284 KB) and its licence sit in
public/queen/models. Each model is loaded once with the glTF loader, its
root transform baked, its parts merged into one mesh, measured, and
thin-instanced at the cells with the matrices the procedural templates
already had: platform for backlog, generator for running, satellite dish
for review, three hangars for done by card number, gate for blocked,
crater for dropped, the large hangar as the Queen's hub, crystals for
verified devices; the bees are astronauts and a rover and the larvae are
aliens, instanced and turned toward where they walk. A model that fails
to load leaves its procedural stand-in.

The rendered look: tone mapping with contrast and a vignette, linear fog
into the void, a glow layer on every emissive part, the steel plates' seams
less shiny; three bee lines at three sizes with rings to match (B-8). The
technology tree declares its scroller in the shell so a strip that wraps
for a frame on a phone no longer reads as an overflow (P1-31, seen twice
in check:queen-viewport).

Contracts on the Babylon default: pick, placement, touch PASS; 480/480
frames at vsync; chunk 385,900 B brotli (+130 KB for the glTF loader and
PBR materials).

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
@gHashTag
gHashTag merged commit 63f1e52 into main Sep 4, 2026
15 of 19 checks passed
@gHashTag
gHashTag deleted the feat/queen-cycle-016-rendered-look branch September 4, 2026 13:57
github-actions Bot added a commit that referenced this pull request Sep 4, 2026
feat(queen): Kenney Space Kit models on the field, a rendered look, the tree's scroller (#912)

Loop cycle 016. The user: "which pack? download it yourself, open
source". Kenney Space Kit 2.0 (CC0, kenney.nl, 6,677,531 B archive) is the
pack; fourteen GLB models (284 KB) and its licence sit in
public/queen/models. Each model is loaded once with the glTF loader, its
root transform baked, its parts merged into one mesh, measured, and
thin-instanced at the cells with the matrices the procedural templates
already had: platform for backlog, generator for running, satellite dish
for review, three hangars for done by card number, gate for blocked,
crater for dropped, the large hangar as the Queen's hub, crystals for
verified devices; the bees are astronauts and a rover and the larvae are
aliens, instanced and turned toward where they walk. A model that fails
to load leaves its procedural stand-in.

The rendered look: tone mapping with contrast and a vignette, linear fog
into the void, a glow layer on every emissive part, the steel plates' seams
less shiny; three bee lines at three sizes with rings to match (B-8). The
technology tree declares its scroller in the shell so a strip that wraps
for a frame on a phone no longer reads as an overflow (P1-31, seen twice
in check:queen-viewport).

Contracts on the Babylon default: pick, placement, touch PASS; 480/480
frames at vsync; chunk 385,900 B brotli (+130 KB for the glTF loader and
PBR materials).

Co-authored-by: Claude Opus 5 <noreply@anthropic.com>
gHashTag added a commit that referenced this pull request Oct 8, 2026
…very task filtered in the address (Closes #1532) (#1533)

* queen: one task view and its bees, from /queen/public-tasks or the board (Refs #1532)

src/lib/queenTasks.ts mirrors gHashTag/t27 specs/queen/tasks.t27 (epic
gHashTag/t27#7718): three kinds, seven states, three bee states, and
task_matches line for line. It reads GET /queen/public-tasks, checks the body
field by field, and drops a row whose kind or state this build has not met,
because the spec says such a row matches nothing.

When the route does not answer, tasksFromBoard builds the same shape from the
public board and the activity feed the page already polls. Every card becomes
an issue in its column, with one bee per running card. A bee is working when it
was heard within BEE_QUIET_SECONDS and quiet otherwise. The feed says
source "board", so the screen can say what it is drawing.

The board filter (kind, state, repository, text) is read from and written to
the address under kinds/states/repos/q. The universe already reads repo= and
task=, so those names are not used. withEarliestSince keeps the earliest
`since` stated for each bee: the live route re-stamps it on every answer.

qa/fixtures/queen-public-tasks.json is a trimmed recording of the live route,
2026-10-08.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* queen: the bee's body is one Kenney Space Kit ship, read once (Refs #1532)

public/queen/models/craft_speederA.glb is "Models/GLTF format/craft_speederA.glb"
from Kenney's Space Kit 2.0 (https://kenney.nl/assets/space-kit, CC0,
kenney_space-kit.zip, 6,677,531 bytes). It is the same archive the field was
built from in #912, before the 3D objects left in #949 and #960. Only this one
20,496-byte file is vendored, with the kit's License.txt (line endings
normalised). The README says what is loaded and why.

queenShipModel.ts reads the GLB subset this file uses: TRS nodes, triangle
primitives and flat baseColorFactor materials. It writes each part's colour
into the vertices, so the four parts become one mesh with one material, and
every bee can be a thin instance of it. It does not use the glTF loader: the
loader and the PBR material it creates added 130 KB brotli when the kit was on
the field (#912), and this reader also runs under node, so the gate can open
the vendored file. A file outside the subset is refused with a reason.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* queen: in the game, the bees are spaceships over the issues they work on (Refs #1532)

QueenCombBabylon takes liveBees: one per dispatch in flight, each with the cell
of its issue. They are read through a ref, never through the scene's
signature, so a bee that is offered, starts, goes quiet or finishes only moves
a ship and never rebuilds the scene. The signature records only that live bees
exist. Every ship is a thin instance of one mesh, so N ships are one draw call.
The buffers are rewritten each frame and grow when more bees arrive. Ship
positions are kept by bee id across rebuilds, so a new cell does not send every
ship back to the hive.

Queued bees, and bees whose issue has no cell on this map, wait in a row at the
hive entrance. Working bees circle their issue along the cell rim, because
zoomed in the cell's card covers its middle. Quiet bees hover at the rim,
darkened, as does every bee while the feed is stale. Each lane has its own
tint. With reduced motion the ships sit still. Hovering a ship, or tapping it,
shows "#7513 · working · 12 min". The working ring follows working bees, not
board columns. The canvas comb and the slot motes stay as they were when no
live bees are given.

QueenCatalogHive maps each bee to its cell by key, ignoring case: the atlas
spells ghashtag/t27 and the supervisor gHashTag/t27. It adds the bees' issues
that the 2026-10-04 atlas does not hold as observed cells (liveIssueRows in
queenCatalogData.ts). Those cells are append-only and painted with the atlas's
own "open", so a bee coming or going never repaints, and so never rebuilds,
the map. The toolbar says "Bees live" only while the feed answers, and it says
when the feed is derived from the board.

The honesty contract now states the rule this changes: the cells draw no
model, and the only model is the bee's ship, one GLB, no glTF loader, thin
instances.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* queen: one poll feeds the game's bees and a kanban over every task, filtered in the address (Refs #1532)

useQueenTasks is the only new loop. While the kanban is not on screen it asks
for state=running, which is about 2 KB gzipped and carries every bee. While the
kanban is on screen it asks for every task, about 55 KB. After a failure it
waits 30 s before asking again. Until the full answer arrives, the board is
drawn from the public board, never from the running-only answer. The same feed
gives the catalog hive its live bees and the repository comb its ships.

The kanban draws tasks, not board cards: issues, reviews and jobs, each linked
to its own GitHub address. One new row filters by text (title or #number),
kind, state and repository. Each option shows its count over the whole feed,
and the row shows "shown / arrived" and the feed's source. The filter lives in
the address (#/queen?tab=kanban&states=running&repos=gHashTag/t27), so a
filtered board can be shared. A keystroke is drawn at once. An address changed
from outside is adopted, and an address the board wrote itself is not adopted
a second time. Leaving the tab drops the keys. The direction chips stay, and
the column counts and the 30-card paging apply after filtering. A "failed"
column appears only when it has something in it or was asked for. A running
card carries its bee: state, how long, when last heard, lane.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* queen: check:queen-tasks gates the task view, the fallback, the filter address and the ship (Refs #1532)

qa/queen-tasks-contract.mjs, 109 checks, pure and offline:
- the spec's eight task_matches vectors, plus three wrong mirrors (mask 0 as
  "none", no range check, masks swapped) that must each fail them;
- the recorded route answer parses, unknown kinds, states and off-GitHub links
  are dropped, a body that is not the contract is refused, and a re-stamped
  `since` does not reset a bee's age;
- the board fallback: rows by column, one bee per running card,
  working/quiet at BEE_QUIET_SECONDS, source "board";
- a filter only hides and keeps order, and its address round-trips without
  touching the universe's own repo=/task=;
- the bees' issues beyond the atlas become cells in the atlas's spelling, and
  no cell already placed moves;
- the vendored GLB: four parts, triangles, centred, nose at +z;
- the scene signature carries no bee.

It runs in website-checks.yml next to the direction filter.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* queen: the task view decides with the t27 card itself, not a hand mirror (Refs #1532)

The owner, 2026-10-08: logic is written in .t27, not in .mjs or a copy in
TypeScript.

- The kinds, the states, the bee states and the limits now come from
  src/lib/queenTasks.generated.ts, the `t27c gen-js` output of gHashTag/t27
  specs/queen/tasks.t27 (master blob 7443ffb).
- task_matches and bee_state run as public/t27/queen/tasks.wasm. These are
  the same bytes the Queen's server runs: t27c gen-c, then zig cc
  wasm32-wasi, with no imports. The feed waits for the card, so nothing is
  shown that it did not decide.
- qa/queen-tasks-contract.mjs, its npm script and its workflow step are
  removed. The card's own tests are the gate (4 tests, 49/49 mutants in
  t27).
- The filter row folds behind a Filter chip, so a short screen keeps a
  whole card in every column. It is one declared sideways row on a phone.
  A failed job or review shows in dropped with its own badge.

Checked locally:
- vite build passes, and the typecheck ratchet stays at 179/26 with no
  file gaining errors.
- The Queen viewport contract passes: 8 sizes × 3 views.
- On the live /queen/public-tasks, the kanban filtered from the address,
  and the ships over running issues in the game.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* queen: vendor the task card as public/t27/queen/tasks.wasm (Refs #1532)

The bytes the Queen's server runs, built from gHashTag/t27
specs/queen/tasks.t27 (master blob 7443ffb): t27c gen-c, then zig 0.16
cc --target=wasm32-wasi -Oz -DNDEBUG -mexec-model=reactor, exporting
job_state, review_state, a2a_state, bee_state and task_matches. The
sha256 starts baca275e and matches BrowserOS trios/agent-server/specs/PIN.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 5.5 <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