Skip to content

feat(queen): one kit, one meaning - #949

Merged
gHashTag merged 1 commit into
mainfrom
feat/queen-cycle-045-onekit
Sep 6, 2026
Merged

gHashTag merged 1 commit into
mainfrom
feat/queen-cycle-045-onekit

Conversation

@gHashTag

@gHashTag gHashTag commented Sep 6, 2026

Copy link
Copy Markdown
Owner

Cycle 045 — one kit, one meaning

The user: «надо подумать как сделать так чтобы визуал совпадал! там не понятные строения на карте!! убери все лишнее!!»

The cause. Two Kenney kits in one scene: 14 Space Kit models beside 7 Hexagon Kit pieces, on a steel platform with hazard rails.

The cut. Crystals, three bee costumes, the larva, the steel tiles, the hazard rails, the procedural hub, the devices prop, the multi-part shape grammar on the field, and the language tint on settlements.

The kit. Kenney Hexagon Kit (CC0) only: cabin, mill, archery, house, market, farm, wall, rocks for the settlements; plinth, walls, tower, wizard tower for the castle; the castle itself as the throne at the hub.

The pin. check:queen-honesty fails if any of the fourteen Space Kit models is named in the field. Red first.

The user, 2026-09-06: the buildings on the map are unreadable, cut everything
superfluous, make the visual agree with itself.

The field mixed two Kenney kits. Fourteen Space Kit models (hangars, a
satellite dish, a generator, a gate complex, a crater, crystals, two
astronauts, a rover and an alien) stood beside seven Hexagon Kit pieces, on
a steel platform with yellow hazard rails. Two art directions in one scene,
and half of them carried no fact at all.

Now the kingdom is built from one set of parts, Kenney Hexagon Kit (CC0):
a cabin for a module in the backlog, a mill for one running, an archery for
one in review, a house, a market and a farm for the done columns, a wall
where an issue is open, rocks where work was dropped. The castle keeps its
plinth, walls, tower and wizard tower, and the Queen's own castle stands at
the hub as the throne, replacing the hangar that used to share the cell with
it.

Cut, because nothing on the wire justified them: the crystals (hardware is
not a GitHub fact, and the devices prop leaves the field), the three bee
costumes and the larva (the server keeps bees anonymous, so drawing three
different bodies invented a distinction the data does not carry - every bee
is now the same glowing mote, bright while it works), the steel tile
texture, the hazard rails, and the procedural hub cylinder and dome.

One model per cell. Each Hexagon Kit building carries its own hex base, so
the old multi-part shape grammar stacked hex on hex and the middle of the
field turned to mush; the plan still chooses the core and the turn. The
settlements lost their language tint too: the kit's palette reads on its
own, and on this field colour means one thing, gold is done.

A new honesty pin names all fourteen Space Kit models and fails if the field
mentions any of them; red before this change.

Loop cycle 045 (the visual coherence pass).
@gHashTag
gHashTag force-pushed the feat/queen-cycle-045-onekit branch from 0b4ea3c to 34420b9 Compare September 6, 2026 05:11
@gHashTag
gHashTag merged commit 759db08 into main Sep 6, 2026
10 of 13 checks passed
github-actions Bot added a commit that referenced this pull request Sep 6, 2026
feat(queen): one kit, one meaning; the space station leaves the kingdom (#949)

The user, 2026-09-06: the buildings on the map are unreadable, cut everything
superfluous, make the visual agree with itself.

The field mixed two Kenney kits. Fourteen Space Kit models (hangars, a
satellite dish, a generator, a gate complex, a crater, crystals, two
astronauts, a rover and an alien) stood beside seven Hexagon Kit pieces, on
a steel platform with yellow hazard rails. Two art directions in one scene,
and half of them carried no fact at all.

Now the kingdom is built from one set of parts, Kenney Hexagon Kit (CC0):
a cabin for a module in the backlog, a mill for one running, an archery for
one in review, a house, a market and a farm for the done columns, a wall
where an issue is open, rocks where work was dropped. The castle keeps its
plinth, walls, tower and wizard tower, and the Queen's own castle stands at
the hub as the throne, replacing the hangar that used to share the cell with
it.

Cut, because nothing on the wire justified them: the crystals (hardware is
not a GitHub fact, and the devices prop leaves the field), the three bee
costumes and the larva (the server keeps bees anonymous, so drawing three
different bodies invented a distinction the data does not carry - every bee
is now the same glowing mote, bright while it works), the steel tile
texture, the hazard rails, and the procedural hub cylinder and dome.

One model per cell. Each Hexagon Kit building carries its own hex base, so
the old multi-part shape grammar stacked hex on hex and the middle of the
field turned to mush; the plan still chooses the core and the turn. The
settlements lost their language tint too: the kit's palette reads on its
own, and on this field colour means one thing, gold is done.

A new honesty pin names all fourteen Space Kit models and fails if the field
mentions any of them; red before this change.

Loop cycle 045 (the visual coherence pass).
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