Skip to content

feat(queen): make the hive a truthful display - #960

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

gHashTag merged 1 commit into
mainfrom
feat/queen-cycle-050-hive

Conversation

@gHashTag

@gHashTag gHashTag commented Sep 6, 2026

Copy link
Copy Markdown
Owner

Summary

  • Replace the 3D-model board with a sharp, vertical, floating honeycomb wall whose cells lift on hover/tap.
  • Enforce the hive colour law: yellow only for real trinity T27 claims, blue for awaiting T27, red for manual code, honey only for hover.
  • Add latest-event display cards bounded by their cells, real T27 manifest coverage, gameplay documentation, and a KIE.AI asset script.
  • Remove all Kenney GLB assets and keep the Queen as the logo mark inside the hub cell.

Verification

  • npm run check:queen-honesty — PASS (112 checks)
  • npm run check:queen-languages — PASS (245 EN / 245 RU)
  • npm run check:queen-foundation — PASS
  • npm run check:queen-babylon — PASS (build + pick + placement + touch)
  • Targeted ESLint on changed TS/TSX and QA/script files — PASS
  • Headless browser probe: data-look="hive", data-orientation="facing", data-event-cards="12", retina canvas 1660×1262, coverage 2 T27 / 113 manual / 912 awaiting
  • Full repo typecheck and lint still fail on many unrelated pre-existing files; no changed-file errors remain.

Notes

The supplied KIE.AI key is unusable: the API returns 401 because organization access is disabled. No generated asset is shipped or claimed; the script reads a future enabled key from KIE_API_KEY.

@gHashTag
gHashTag merged commit de6187f into main Sep 6, 2026
33 of 43 checks passed
github-actions Bot added a commit that referenced this pull request Sep 6, 2026
feat(queen): make the hive a truthful display (#960)
@gHashTag
gHashTag deleted the feat/queen-cycle-050-hive branch September 6, 2026 14:34
@gHashTag

gHashTag commented Sep 6, 2026

Copy link
Copy Markdown
Owner Author

✅ [DONE] Merged in de6187f21c6c8969f30097730ed84ff7e7ff95e9; source branch deleted.

Production check: https://t27.ai/ serves index-C5gT42hC.js from f21a026042297513df47d8dc1f0b6da40043bdb8 (therefore including this merge). Browser probe at /#/queen: hive=hive, orientation=facing, models=0/0, event cards=1, coverage=2/113/912, hover card opened for issue #1022, and canvas backing store was 1466×1074 for 732.57×536.69 CSS px at DPR 2.

Deploy-repo hygiene: pushed d8ceceb9 removing 11,522 unreachable JS/CSS bundles; the reachable graph remains 152 bundles and live entry/check passed.

@gHashTag
gHashTag restored the feat/queen-cycle-050-hive branch September 20, 2026 13:17
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