Skip to content

queen: a WIDGETS tab of shareable recordings and players, from specs/widgets/gallery.t27 - #1374

Merged
gHashTag merged 2 commits into
mainfrom
feat/widgets-gallery
Oct 4, 2026
Merged

gHashTag merged 2 commits into
mainfrom
feat/widgets-gallery

Conversation

@gHashTag

@gHashTag gHashTag commented Oct 4, 2026 •

Copy link
Copy Markdown
Owner

Closes #1373.

The Queen board gains a twenty-first view, WIDGETS, on key v. It gathers what of t27 a person can lift out and share: 13 terminal recordings of real bench and compiler commands, 4 X-player backends, and the WARS tab. Each card has a preview on click, iframe and Markdown embed code, and X and Telegram links.

One source. specs/widgets/gallery.t27 names the widgets, shelves and hooks. scripts/widgets-from-spec.mjs compiles it with the vendored compiler and runs its 6 test blocks. It reads each widget's own page for og:title, og:description and og:image, so the gallery cannot say what the page does not. A missing page, a missing card file, or a cast with a non-zero exit code fails the build.

Shelves:

Shelf Widgets
FPGA bench x7-board (byte-identical to openXC7), tri-x7-fasm, tri-x7-mutate, perf2-loop, RGMII hold from SDF, JTAG IDCODE, pins blast radius, devkit-flow, Verilog player
Compiler hello_world player, Rust, JS, t27c-hello-world, tri misread
Agent game WARS tab, tri-game-tick, tri-game-vault, perf2-knockouts

Ideas, not built: placement map, LUT/FF/BRAM bars, slack waterfall, bitstream diff, test waveforms, GF16 and ternary calculator, race the bee. Each is shown with the data it would read, never as a working widget.

Posts nothing. Share links open the reader's own composer.

Previews name index.html explicitly. In the dev server, a directory URL answered with the app shell, so the first preview showed the landing page.

{
  "version": 1,
  "head_sha": "4ebecd79e9ff42734ed163e4026bbd330ee4b713",
  "summary": "The Queen board gains a WIDGETS view on key v: 18 shareable recordings, players and a tab, each with a preview, embed code and share links, generated from specs/widgets/gallery.t27. Every title and card is read from the widget's own page.",
  "changes": [
    "specs/widgets/gallery.t27 (new) names 18 widgets on three shelves, why each is worth sharing, and 7 ideas not built, with 6 test blocks.",
    "scripts/widgets-from-spec.mjs (new) compiles the spec, runs its tests and reads og:title, og:description and og:image from each page; a missing page or a cast with a non-zero exit code fails.",
    "src/components/QueenWidgets.tsx and .css (new) draw the gallery: shelf filter, lazy iframe preview on click, iframe and Markdown embed code, X and Telegram links that open the reader's own composer.",
    "queenHud.ts, queenModules.ts and Queen.tsx add the twenty-first view on v with EN and RU copy and its own rail door.",
    "Contracts: rail keys move to 1234567890tprbwmlxkgv; QueenWidgets.css is grounded in the contrast gate; .queen-widgets is a declared scroll owner and a probed view in the viewport gate.",
    "package.json gets check:widgets and test:widgets-spec, the generator joins prebuild, and website-checks runs both."
  ],
  "tests": [
    {
      "command": "npm --prefix apps/website run check:widgets",
      "result": "18 widgets in 3 categories, 7 ideas not built; spec tests 6, asserts 16, all hold; generated files up to date",
      "status": "passed",
      "evidence": "Local run on this branch before the commit."
    },
    {
      "command": "npm --prefix apps/website run test:widgets-spec",
      "result": "5 tests, 5 pass, 0 fail",
      "status": "passed",
      "evidence": "node --test output, local run on this branch."
    },
    {
      "command": "npm --prefix apps/website run check:agents && npm --prefix apps/website run check:tri",
      "result": "Queen views 21, modules 21, keys 1234567890tprbwmlxkgv; TRI screens contract PASS",
      "status": "passed",
      "evidence": "Local run on this branch."
    },
    {
      "command": "npm --prefix apps/website run check:queen-contrast && npm --prefix apps/website run check:queen-spec-sync && npm --prefix apps/website run check:subpath-urls",
      "result": "contrast worst 5.39:1 over 109 grounds; spec sync PASS (26 checks); subpath-safe URLs ok",
      "status": "passed",
      "evidence": "Local run on this branch."
    },
    {
      "command": "npm --prefix apps/website run typecheck:ratchet",
      "result": "179 errors across 26 files, equal to the baseline, no file gained errors",
      "status": "passed",
      "evidence": "Local run after the tab widget shape was fixed."
    },
    {
      "command": "Browser check of #/queen?tab=widgets in EN and RU at desktop width and at 390x844",
      "result": "18 cards, no horizontal overflow at 390px; previews of term/x7-board and the hello_world player load their own pages; the shelf filter works",
      "status": "passed",
      "evidence": "Vite dev server on localhost, DOM and screenshots read in the browser pane."
    },
    {
      "command": "npm --prefix apps/website run check:queen-viewport",
      "result": "skipped locally: no Chrome on this machine; CI runs it",
      "status": "not_run",
      "evidence": "The gate printed 'no Chrome found'; the widgets view was added to its probed VIEWS."
    }
  ],
  "limitations": [
    "The seven ideas are not widgets: placement map, resource bars, slack waterfall, bitstream diff, test waveforms, GF16 calculator and race the bee are listed with the data each would read, and none is drawn.",
    "The words of the view itself (EN and RU labels) live in QueenWidgets.tsx, because specs are English-only; every widget's title and line come from its page.",
    "The WARS tab embed points at the board with embed=1; whether a third-party site may frame app.t27.ai depends on its headers, which this PR does not change.",
    "Nothing is posted anywhere. Share links open the reader's own X or Telegram composer."
  ],
  "tags": [
    "t27",
    "FPGA",
    "Widgets",
    "QueenBoard"
  ],
  "blog": {
    "title": "A widget gallery for FPGA engineers, generated from a t27 spec",
    "summary": "The Queen board has a WIDGETS tab: real bench recordings and the in-browser compiler, each with a preview, an iframe and a README embed, read from the widget's own page so the gallery cannot claim more than the page does.",
    "outline": [
      "Why a gallery: fifteen recordings and four player pages existed on t27.ai, each with a share page, and nobody could find them in one place or copy embed code for a README.",
      "The spec specs/widgets/gallery.t27 names each widget, its shelf and the reason to share it, and the generator reads the title, line and card from the widget's own page.",
      "A widget whose page is missing, whose card file is gone, or whose recorded command exited non-zero fails the build, so the gallery only shows things that worked.",
      "Each card gives a live preview on a click, iframe and Markdown embed code and share links that open the reader's own composer; the tab itself posts nothing.",
      "What FPGA engineers draw in the browser elsewhere (EDA Playground, Makerchip, DigitalJS, Surfer, WaveDrom) and t27.ai does not yet, listed as seven ideas with the data each would read."
    ]
  }
}

🤖 Generated with Claude Code

…widgets/gallery.t27

The board gets a twenty-first view on v. specs/widgets/gallery.t27 names
18 widgets on three shelves (FPGA bench, compiler, agent game): 13
terminal recordings, 4 X-player backends and the WARS tab. It also lists
7 widgets FPGA engineers use elsewhere and t27.ai does not draw yet,
shown only as ideas with the data each would read.

scripts/widgets-from-spec.mjs compiles the spec with the vendored
compiler and runs its test blocks. It reads every widget's own page for
og:title, og:description and og:image, so the gallery cannot claim what
the page does not. A missing page, a missing card file or a cast with a
non-zero exit code fails the build.

Each card gives a lazy iframe preview on click, iframe and Markdown
embed code, and X and Telegram links that open the reader's own
composer. Nothing is posted.

Gates: check:widgets and test:widgets-spec in website-checks. The rail
key strings move to 1234567890tprbwmlxkgv. QueenWidgets.css is grounded
in the contrast gate, and .queen-widgets is declared as a scroll owner
in the viewport gate.

Closes #1373

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@github-actions github-actions Bot added the status:in-progress 🔵 Agent working label Oct 4, 2026
@github-actions

github-actions Bot commented Oct 4, 2026

Copy link
Copy Markdown
Contributor

X Brain Health Check

Score: 100.0/100
Status: 🟢 HEALTHY
Threshold: 80/100

X Brain is above merge threshold

The WIDGETS view put the last command 22 px under COLLAPSE at 1272x806 and
10 px under it at 1280x600 (viewport contract, CI). Tighter rows and gaps in
the two short-height rules give the space back.

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

github-actions Bot commented Oct 4, 2026

Copy link
Copy Markdown
Contributor

🧪 Brain Stress Test Results

Tests: 261/261 passed, 0 leaked
Status: 🟢 PASS
Gate: every test in zig build test-brain-stress passes and none leaks

@gHashTag
gHashTag merged commit 021ae10 into main Oct 4, 2026
33 of 34 checks passed
@github-actions github-actions Bot added status:completed Done and removed status:in-progress 🔵 Agent working labels Oct 4, 2026
github-actions Bot added a commit that referenced this pull request Oct 4, 2026
queen: a WIDGETS tab of shareable recordings and players, from specs/widgets/gallery.t27 (#1374)

* queen: a WIDGETS tab of shareable recordings and players, from specs/widgets/gallery.t27

The board gets a twenty-first view on v. specs/widgets/gallery.t27 names
18 widgets on three shelves (FPGA bench, compiler, agent game): 13
terminal recordings, 4 X-player backends and the WARS tab. It also lists
7 widgets FPGA engineers use elsewhere and t27.ai does not draw yet,
shown only as ideas with the data each would read.

scripts/widgets-from-spec.mjs compiles the spec with the vendored
compiler and runs its test blocks. It reads every widget's own page for
og:title, og:description and og:image, so the gallery cannot claim what
the page does not. A missing page, a missing card file or a cast with a
non-zero exit code fails the build.

Each card gives a lazy iframe preview on click, iframe and Markdown
embed code, and X and Telegram links that open the reader's own
composer. Nothing is posted.

Gates: check:widgets and test:widgets-spec in website-checks. The rail
key strings move to 1234567890tprbwmlxkgv. QueenWidgets.css is grounded
in the contrast gate, and .queen-widgets is declared as a scroll owner
in the viewport gate.

Closes #1373

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

* queen: twenty rail commands fit above COLLAPSE at 1272x806 and 1280x600

The WIDGETS view put the last command 22 px under COLLAPSE at 1272x806 and
10 px under it at 1280x600 (viewport contract, CI). Tighter rows and gaps in
the two short-height rules give the space back.

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

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Queen board: a WIDGETS tab of shareable recordings and players, generated from specs/widgets/gallery.t27

1 participant