Skip to content

feat(website): tool cards end with their recorded run, and every tri command has a card - #1288

Merged
gHashTag merged 16 commits into
mainfrom
docs/t27-cards-cast
Oct 3, 2026
Merged

gHashTag merged 16 commits into
mainfrom
docs/t27-cards-cast

Conversation

@gHashTag

@gHashTag gHashTag commented Oct 3, 2026 •

Copy link
Copy Markdown
Owner

Every command of the three programs called tri now has a card on the tools page. A gate holds the cards to committed command lists. A card whose command has a published terminal recording ends with that recording, and every other tri card says "no recording yet".

Stacked on #1273. The branch also merges #1282 (trios tri cards), so the diff shows its commits until that lands.

CLI source (pinned) commands cards with a recording no recording yet
t27 gHashTag/t27@1b12580ce699 52 52 0 52
Trinity 04a7894fa64f 249 249 (29 registry-export + 220 generated) 0 249
trios gHashTag/BrowserOS@7366096248df 295 295 10 285
total 596 596 10 586
{
  "version": 1,
  "head_sha": "5c4449dbd16bc160140028f67eae90eb2b206ad5",
  "summary": "Tool cards can name a terminal recording (CAST = term/<id>/session.cast), and the tool and spec explorers end the card with the player. Every command of the three tri programs now has a card: t27 52, Trinity 249 (220 of them generated from the dispatcher source) and trios 295. A new gate fails when a command has no card or a recording misses the card of the one tri that has that command. Ten cards have a recording (trios tri devkit, tri x7-board, and eight of the most-used read-only trios commands); the other 586 say so. A manual CI workflow can record --help casts for every command; it has not been run.",
  "changes": [
    "scripts/agents-from-specs.mjs castProblems/castEntry: CAST must be term/<id>/session.cast with meta.json, asciicast v2, every exit code 0, meta agreeing with the header, and a recorded line that runs the card's COMMAND; WITNESS runtime is refused without a CAST; MCP cards cannot carry one",
    "src/pages/ToolExplorer.tsx, SpecExplorer.tsx: RECORDED RUN box with TerminalCast at the end of a tool card, and a 'no recording yet' box on tri cards without CAST; EN and RU keys added in pairs",
    "scripts/tri-commands.mjs + qa/tri-commands/{t27,trinity,trios}.json: the command list of each tri read from source at a pinned commit (clap enum, Zig early routes/namespaces/parseCommand/registry, trios case arms and tri help)",
    "scripts/tools-from-trinity-tri.mjs + public/t27/files/specs/tools/trinity/cli/*.t27: 220 generated cards; ABOUT is the command's own help text or 'no help text in gHashTag/trinity@04a7894fa64f'; COLLIDES_WITH for the 10 names t27 also has",
    "scripts/tools-from-trios-tri.mjs: emits CAST for commands a recording ran; empty-help ABOUT names the pinned source",
    "qa/tools-coverage-contract.mjs (npm run check:tools-coverage): every command has a card, every card a command, the Trinity snapshot matches src/tri, recorded unambiguous commands carry their CAST and ambiguous ones never do; prints the per-CLI table",
    "public/tools/spec-tools-trinity.json: third catalog part (771,545 bytes); spec-tools.json 262,230 and spec-tools-trios.json 898,698, all under 1 MB",
    "scripts/tri-help-casts.mjs + .github/workflows/tri-help-casts.yml: workflow_dispatch-only recorder of `tri <cmd> --help` casts with no runner secrets in the environment; uploads an artifact and publishes nothing",
    ".github/workflows/website-checks.yml: runs check:tools-coverage and test:tri-commands; the five dispatcher files trigger it",
    "scripts/tri-commands.test.mjs (10 tests) and agents-from-specs.test.mjs (catalog counts updated to 607 cards, 12 collisions)"
  ],
  "tests": [
    {
      "command": "node --experimental-strip-types qa/tools-spec-contract.mjs",
      "status": "passed",
      "result": "607 cards (tri 596, of which 249 Trinity; 12 collisions); with a recorded run 2: BrowserOS tri/devkit <- devkit-flow, tri/x7-board <- x7-board; runtime witness 0",
      "evidence": "local run of this head, 2026-10-03"
    },
    {
      "command": "node --experimental-strip-types qa/tools-coverage-contract.mjs",
      "status": "passed",
      "result": "t27 52/52, Trinity 249/249, trios 295/295 commands with a card; 10 with a recording, 586 without",
      "evidence": "local run of this head, 2026-10-03"
    },
    {
      "command": "node --test scripts/tri-commands.test.mjs && node --test scripts/agents-from-specs.test.mjs && node --test scripts/docs-from-specs.test.mjs",
      "status": "passed",
      "result": "10/10, 53/53, 8/8",
      "evidence": "local run of this head, 2026-10-03"
    },
    {
      "command": "agents-from-specs --check, docs-from-specs --check, tools-from-trinity-tri --check, tools-from-trios-tri --check and tri-commands --check for t27, trinity and trios against their pinned sources",
      "status": "passed",
      "result": "every generated file and snapshot is in step with its source",
      "evidence": "local run of this head, 2026-10-03"
    },
    {
      "command": "qa/tools-site-contract.mjs, qa/explorer-language-contract.mjs, qa/agents-spec-contract.mjs, qa/docs-spec-contract.mjs, qa/queen-spec-sync-contract.mjs",
      "status": "passed",
      "result": "607 cards open on the site; 7 explorer pages with identical en/ru key sets; agents, docs and queen spec sync pass",
      "evidence": "local run of this head, 2026-10-03"
    },
    {
      "command": "TypeScript syntax of ToolExplorer.tsx, SpecExplorer.tsx, agentSpecs.ts via ts.transpileModule",
      "status": "passed",
      "result": "0 diagnostics; a full type check is left to CI",
      "evidence": "local run of this head, 2026-10-03"
    },
    {
      "command": "npx vite build, npm run typecheck:ratchet, check:render, check:queen-embed",
      "status": "not_run",
      "result": "not run locally; left to CI",
      "evidence": "not run on the laptop by instruction (load); the embed check also needs Chrome"
    },
    {
      "command": ".github/workflows/tri-help-casts.yml (record --help casts for every command)",
      "status": "not_run",
      "result": "left to CI; workflow_dispatch only, nothing recorded or published by this PR",
      "evidence": "the recorder was only smoke-tested locally with /bin/echo standing in for tri"
    }
  ],
  "limitations": [
    "Only 10 of 596 cards have a recording: devkit, x7-board, and eight of the most-used read-only trios commands (fpga-specs, fpga-keycheck, fpga-selftest, game-selftest, game-tick, game-vault, blog, selftest), recorded with the live ~/.local/bin/tri, not a build of the pinned commit. A recording attaches only when the command name belongs to one tri: meta.json does not say which binary ran, and 19 names (aliases included) belong to more than one of the three programs.",
    "The 220 Trinity cards are source-parse: src/tri was read as text, and the CLI was not built or run. 80 of them have no help text and say so.",
    "Not counted as Trinity commands: 12 execute_map handlers that no route, namespace word, parser token or registry entry names.",
    "The t27 and trios lists are snapshots at a pinned commit. A newer command there fails nothing until someone regenerates the snapshot.",
    "SpecExplorer shows the recording and the no-recording box only for tool cards in the vendored spec corpus. The trios and trinity/cli cards are not in it.",
    "The 220 generated Trinity cards have no Russian summary yet.",
    "No visual browser check of the new boxes was made."
  ],
  "tags": ["Tooling", "Website", "t27"],
  "blog": {
    "title": "Every tri command has a card",
    "summary": "This PR is itself the blog article: three programs answer to tri, and the tools page now lists every command of all three. It gates the list against source pinned at a commit, ends a card with its terminal recording when there is one, and says so plainly when there is not.",
    "outline": [
      "Three programs are called tri, and the tools page knew 376 of their 596 commands; the rest had no card and nothing failed.",
      "Each command list is read from source at a commit and committed, with 220 Trinity cards generated from the dispatcher. Every description is the command's own help or says there is none, and a gate fails on any command without a card.",
      "Recordings: a card ends with a terminal cast only when the command name belongs to one tri. 10 of 596 have one, a CI recorder for --help casts exists and has not run, and 586 cards say no recording yet."
    ]
  }
}

🤖 Generated with Claude Code

gHashTag and others added 10 commits October 3, 2026 12:04
The header listed German, Chinese and Spanish, but the site is written in
English and Russian. Drop the three unused catalogues and the switcher
entries; a saved de/zh/es choice falls back to English.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- public/term: the asciicast player and two recordings, x7-board and
  devkit-flow, each with a share page and card for t27.ai/term/<id>/.
- A `terminal` block for posts and a TerminalCast component that loads the
  same player; captions live once in src/data/casts.ts.
- Posts "The back half of openXC7, from a spec" and "The FPGA flow, layer
  by layer", in English and Russian. The second says plainly that
  tri devkit and bitwalk are not in a tri release yet (#1272).
- #/devkit: measured per-layer times, Amdahl ceilings and an hours
  calculator from src/data/devkit.ts.
- The recordings are also shown on #/verification, #/foundry and three
  earlier board posts, each captioned as a later recording.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…00/mo

The homepage grounds, cards and primary buttons are black; the kanban,
factory and shell cards lose their green wash, and the queen-direction
contract now asserts a black card ground. A new homepage block shows the
measured FPGA flow and the club, read from data/devkit.ts and the new
data/club.ts. The club is one $300/mo TRI DEV developer-agent membership,
shared by #/foundry, #/devkit and the homepage. ModulesBlock names all four
board readings, Tech Tree included.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Every agent is sold at one price, a 10000 Stars Telegram subscription per
30 days; USD is derived with the bot's star rate. Foundry gains a showcase
of the four agent profiles the bot sells, read from the bot's catalogue with
a bundled fallback. The AGENTS hint no longer claims a 27-letter alphabet.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
TRI DEV is now the first agent card, full width, with the accent
border, the one price and the primary Telegram button; the other three
agents follow as equal cards. The draft tiers section is gone: every
agent has the same 10000 star price.

On a 375px screen the terminal recording widened its section to 565px
and pushed the heading and caption off screen. The inner column now
takes the section width and wide children scroll inside themselves.
The hero buttons stack and centre on phones.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…s/bin/tri

All 295 commands of the trios loop tri (gHashTag/BrowserOS:trios/bin/tri at
7366096) get a .t27 card under specs/tools/trios/tri/, generated by
scripts/tools-from-trios-tri.mjs from the help heredoc and the top-level case
arms. Witness is source-parse; the CLI was not run. 43 commands (all tc-*)
are dispatched but not named by `tri help`, and the cards say so.

The trios cards are written to public/tools/spec-tools-trios.json, a part
named by spec-tools.json with its count and sha256, so neither file passes
the 1 MB limit. readToolCatalog() joins them on disk and loadToolSpecs()
joins them on the site; the QA contracts read the joined catalog. Home
directory paths in dispatch lines are written as ~/.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The player draws its own share bar once a recording has a page to point at
(given as share, or derived from term/<id>/session.cast): post to X, submit
to Reddit, share to Telegram, copy the link, download the .cast. A second
row links r/t27ai, the Telegram channel, X and GitHub, the same addresses
as the site footer. Opened as a Telegram Mini App, links go through
Telegram's own openLink / openTelegramLink.

The two published share pages drop their separate X and download links and
pass their canonical address to the player; TerminalCast forwards share.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
A tri-cli .t27 tool card may now carry
`pub const CAST : str = "term/<id>/session.cast";`, naming a terminal
recording published under public/term/<id>/. The rules live in one place,
castProblems() in scripts/agents-from-specs.mjs: the cast and its meta.json
exist, the header is asciicast v2, every recorded exit code is 0, meta.json
agrees with the header, and at least one recorded command runs the card's
COMMAND. WITNESS "runtime" is refused without a CAST; a CAST never upgrades
the witness. An MCP card cannot carry one.

The generator copies the cast into the catalog (src, share page, title,
recorded time, the matching command lines) and counts withCast.
tools-from-trios-tri.mjs emits CAST for a command a recording ran, so
tri x7-board and tri devkit of the trios CLI now name term/x7-board and
term/devkit-flow; both stay source-parse, and the card comment says the
recording was made with the live ~/.local/bin/tri, not SOURCE_COMMIT.

ToolExplorer ends the detail with a RECORDED RUN box and the player;
SpecExplorer plays it after the source of a tool card, reading the cast
from the tool catalog rather than re-parsing the spec. EN and RU keys
are added in pairs. tools-spec-contract re-reads the files from disk,
and the generator tests cover parsing, each refusal and the ratchet.

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

Three programs answer to `tri`; each now has a command list committed under
apps/website/qa/tri-commands/ with the commit it was read at
(scripts/tri-commands.mjs): t27 52 commands at gHashTag/t27@1b12580ce699,
Trinity 249 at 04a7894 (early routes, namespace words, parseCommand,
registry), trios 295 at gHashTag/BrowserOS@7366096248df.

- scripts/tools-from-trinity-tri.mjs writes specs/tools/trinity/cli/: one
  card for each of the 220 Trinity commands the 29 registry-export cards do
  not cover. ABOUT is the command's own help text, else "no help text in
  gHashTag/trinity@<sha>". A name another tri also has gets COLLIDES_WITH and
  never a recording.
- qa/tools-coverage-contract.mjs (check:tools-coverage) fails when a command
  has no card, a card names no command, the Trinity snapshot is stale against
  src/tri, or a recorded unambiguous command lacks its CAST. It is wired into
  website-checks, with the five dispatcher files added to the triggers.
- Tool and spec explorers show "no recording yet" on tri cards without CAST.
- tri-help-casts.yml (workflow_dispatch only) and scripts/tri-help-casts.mjs
  record `--help` casts on a runner; nothing is published by them.
- trios ABOUT for empty help names the pin; kebab-case follows clap for
  capital runs; catalog gets a third part (spec-tools-trinity.json).

Coverage: 596 commands, 596 cards, 2 with a recording, 594 without.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@github-actions github-actions Bot added the status:in-progress 🔵 Agent working label Oct 3, 2026
gHashTag and others added 5 commits October 3, 2026 20:05
The trios commands most often run in recorded agent sessions, filtered to
those that only read, touch no board, Railway or network state they could
change, print no private correspondence, exit 0, and print English only:
fpga-specs, fpga-keycheck, fpga-selftest, game-selftest, game-tick,
game-vault (--check), blog (list), selftest. jobs-* and tg-* lead the usage
count and are left out because their output is private mail; fpga-audit,
fpga-loopcheck, loop-selftest and regress were left out for a non-zero exit;
game-lessons for Russian output.

Each was recorded with `tri cast record` in ~/trinity-fpga, scrubbed, passed
`tri cast check` (exit 0, home path scrubbed, 0 key hits) and published to
public/term/<id>/. The trios cards were regenerated from the pinned source
(7366096248df) and pick the recordings up as CAST; none of the eight names
exists in the t27 or Trinity tri. Coverage: 596 commands, 10 with a
recording, 586 without.

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

The tools-default row named spec-tools.json's own tools[0] (gHashTag/trinity:tri/bench),
but the site joins that file with its parts (trios, trinity) before choosing the
default, and opens gHashTag/BrowserOS:tri/ab. The contract failed at 768x1024,
1024x768, 1280x800 and 1920x1080 on a page that was right. It now asks
readToolCatalog(), the same join the site and tools-site-contract use.

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

src/App.tsx now reaches DevKitBlock.css, so it joins REACHED. The direction
cards are black (#000) since the homepage change, which the gate reads, so
their two UNREADABLE entries and the note about the 7% wash are removed.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@gHashTag
gHashTag changed the base branch from docs/blog-fasm-to-frames-spec to main October 3, 2026 13:36
# Conflicts:
#	apps/website/public/agents/spec-agents.json
#	apps/website/public/crons/spec-crons.json
#	apps/website/public/docs/system-docs.json
#	apps/website/public/functions/spec-functions.json
#	apps/website/public/skills/spec-skills.json
#	apps/website/public/t27/files/specs/tools/trios/tri/blog.t27
#	apps/website/public/t27/files/specs/tools/trios/tri/devkit.t27
#	apps/website/public/t27/files/specs/tools/trios/tri/fpga-keycheck.t27
#	apps/website/public/t27/files/specs/tools/trios/tri/fpga-lesson.t27
#	apps/website/public/t27/files/specs/tools/trios/tri/fpga-next.t27
#	apps/website/public/t27/files/specs/tools/trios/tri/fpga-selftest.t27
#	apps/website/public/t27/files/specs/tools/trios/tri/fpga-specs.t27
#	apps/website/public/t27/files/specs/tools/trios/tri/fpga-task.t27
#	apps/website/public/t27/files/specs/tools/trios/tri/game-finding.t27
#	apps/website/public/t27/files/specs/tools/trios/tri/game-gate.t27
#	apps/website/public/t27/files/specs/tools/trios/tri/game-selftest.t27
#	apps/website/public/t27/files/specs/tools/trios/tri/game-task.t27
#	apps/website/public/t27/files/specs/tools/trios/tri/game-tick.t27
#	apps/website/public/t27/files/specs/tools/trios/tri/game-vault.t27
#	apps/website/public/t27/files/specs/tools/trios/tri/selftest.t27
#	apps/website/public/t27/files/specs/tools/trios/tri/tg-msg.t27
#	apps/website/public/t27/files/specs/tools/trios/tri/tg-search.t27
#	apps/website/public/t27/files/specs/tools/trios/tri/tg-who.t27
#	apps/website/public/t27/files/specs/tools/trios/tri/x7-bench.t27
#	apps/website/public/t27/files/specs/tools/trios/tri/x7-board.t27
#	apps/website/public/t27/files/specs/tools/trios/tri/x7-lesson.t27
#	apps/website/public/t27/files/specs/tools/trios/tri/x7-next.t27
#	apps/website/public/t27/files/specs/tools/trios/tri/x7-refs.t27
#	apps/website/public/t27/files/specs/tools/trios/tri/x7-status.t27
#	apps/website/public/t27/files/specs/tools/trios/tri/x7-task.t27
#	apps/website/public/term/index.html
#	apps/website/public/tools/spec-tools-trios.json
#	apps/website/public/tools/spec-tools.json
#	apps/website/qa/tools-spec-contract.mjs
#	apps/website/scripts/agents-from-specs.mjs
#	apps/website/scripts/agents-from-specs.test.mjs
#	apps/website/scripts/docs-from-specs.mjs
#	apps/website/scripts/tools-from-trios-tri.mjs
#	apps/website/src/lib/agentSpecs.ts
#	apps/website/src/pages/ToolExplorer.tsx
@gHashTag
gHashTag merged commit 92b5803 into main Oct 3, 2026
20 of 22 checks passed
@github-actions github-actions Bot added status:completed Done and removed status:in-progress 🔵 Agent working labels Oct 3, 2026
github-actions Bot added a commit that referenced this pull request Oct 3, 2026
feat(website): tool cards end with their recorded run, and every tri command has a card (#1288)

* fix(website): offer English and Russian only

The header listed German, Chinese and Spanish, but the site is written in
English and Russian. Drop the three unused catalogues and the switcher
entries; a saved de/zh/es choice falls back to English.

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

* feat(website): recorded terminal sessions, two FPGA flow posts, #/devkit

- public/term: the asciicast player and two recordings, x7-board and
  devkit-flow, each with a share page and card for t27.ai/term/<id>/.
- A `terminal` block for posts and a TerminalCast component that loads the
  same player; captions live once in src/data/casts.ts.
- Posts "The back half of openXC7, from a spec" and "The FPGA flow, layer
  by layer", in English and Russian. The second says plainly that
  tri devkit and bitwalk are not in a tri release yet (#1272).
- #/devkit: measured per-layer times, Amdahl ceilings and an hours
  calculator from src/data/devkit.ts.
- The recordings are also shown on #/verification, #/foundry and three
  earlier board posts, each captioned as a later recording.

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

* feat(website): black homepage cards, devkit block, TRI DEV club at $300/mo

The homepage grounds, cards and primary buttons are black; the kanban,
factory and shell cards lose their green wash, and the queen-direction
contract now asserts a black card ground. A new homepage block shows the
measured FPGA flow and the club, read from data/devkit.ts and the new
data/club.ts. The club is one $300/mo TRI DEV developer-agent membership,
shared by #/foundry, #/devkit and the homepage. ModulesBlock names all four
board readings, Tech Tree included.

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

* feat(website): one agent price and an agents showcase

Every agent is sold at one price, a 10000 Stars Telegram subscription per
30 days; USD is derived with the bot's star rate. Foundry gains a showcase
of the four agent profiles the bot sells, read from the bot's catalogue with
a bundled fallback. The AGENTS hint no longer claims a 27-letter alphabet.

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

* feat(website): feature TRI DEV on #/foundry and fix phone overflow

TRI DEV is now the first agent card, full width, with the accent
border, the one price and the primary Telegram button; the other three
agents follow as equal cards. The draft tiers section is gone: every
agent has the same 10000 star price.

On a 375px screen the terminal recording widened its section to 565px
and pushed the heading and caption off screen. The inner column now
takes the section width and wide children scroll inside themselves.
The hero buttons stack and centre on phones.

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

* feat(website): tool cards for the trios loop tri, generated from trios/bin/tri

All 295 commands of the trios loop tri (gHashTag/BrowserOS:trios/bin/tri at
7366096) get a .t27 card under specs/tools/trios/tri/, generated by
scripts/tools-from-trios-tri.mjs from the help heredoc and the top-level case
arms. Witness is source-parse; the CLI was not run. 43 commands (all tc-*)
are dispatched but not named by `tri help`, and the cards say so.

The trios cards are written to public/tools/spec-tools-trios.json, a part
named by spec-tools.json with its count and sha256, so neither file passes
the 1 MB limit. readToolCatalog() joins them on disk and loadToolSpecs()
joins them on the site; the QA contracts read the joined catalog. Home
directory paths in dispatch lines are written as ~/.

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

* feat(website): share and follow buttons inside the terminal player

The player draws its own share bar once a recording has a page to point at
(given as share, or derived from term/<id>/session.cast): post to X, submit
to Reddit, share to Telegram, copy the link, download the .cast. A second
row links r/t27ai, the Telegram channel, X and GitHub, the same addresses
as the site footer. Opened as a Telegram Mini App, links go through
Telegram's own openLink / openTelegramLink.

The two published share pages drop their separate X and download links and
pass their canonical address to the player; TerminalCast forwards share.

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

* feat(website): tool cards end with their recorded run (CAST)

A tri-cli .t27 tool card may now carry
`pub const CAST : str = "term/<id>/session.cast";`, naming a terminal
recording published under public/term/<id>/. The rules live in one place,
castProblems() in scripts/agents-from-specs.mjs: the cast and its meta.json
exist, the header is asciicast v2, every recorded exit code is 0, meta.json
agrees with the header, and at least one recorded command runs the card's
COMMAND. WITNESS "runtime" is refused without a CAST; a CAST never upgrades
the witness. An MCP card cannot carry one.

The generator copies the cast into the catalog (src, share page, title,
recorded time, the matching command lines) and counts withCast.
tools-from-trios-tri.mjs emits CAST for a command a recording ran, so
tri x7-board and tri devkit of the trios CLI now name term/x7-board and
term/devkit-flow; both stay source-parse, and the card comment says the
recording was made with the live ~/.local/bin/tri, not SOURCE_COMMIT.

ToolExplorer ends the detail with a RECORDED RUN box and the player;
SpecExplorer plays it after the source of a tool card, reading the cast
from the tool catalog rather than re-parsing the spec. EN and RU keys
are added in pairs. tools-spec-contract re-reads the files from disk,
and the generator tests cover parsing, each refusal and the ratchet.

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

* feat(website): a card for every tri command, gated against committed command lists

Three programs answer to `tri`; each now has a command list committed under
apps/website/qa/tri-commands/ with the commit it was read at
(scripts/tri-commands.mjs): t27 52 commands at gHashTag/t27@1b12580ce699,
Trinity 249 at 04a7894 (early routes, namespace words, parseCommand,
registry), trios 295 at gHashTag/BrowserOS@7366096248df.

- scripts/tools-from-trinity-tri.mjs writes specs/tools/trinity/cli/: one
  card for each of the 220 Trinity commands the 29 registry-export cards do
  not cover. ABOUT is the command's own help text, else "no help text in
  gHashTag/trinity@<sha>". A name another tri also has gets COLLIDES_WITH and
  never a recording.
- qa/tools-coverage-contract.mjs (check:tools-coverage) fails when a command
  has no card, a card names no command, the Trinity snapshot is stale against
  src/tri, or a recorded unambiguous command lacks its CAST. It is wired into
  website-checks, with the five dispatcher files added to the triggers.
- Tool and spec explorers show "no recording yet" on tri cards without CAST.
- tri-help-casts.yml (workflow_dispatch only) and scripts/tri-help-casts.mjs
  record `--help` casts on a runner; nothing is published by them.
- trios ABOUT for empty help names the pin; kebab-case follows clap for
  capital runs; catalog gets a third part (spec-tools-trinity.json).

Coverage: 596 commands, 596 cards, 2 with a recording, 594 without.

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

* feat(website): recordings for eight of the most-used trios tri commands

The trios commands most often run in recorded agent sessions, filtered to
those that only read, touch no board, Railway or network state they could
change, print no private correspondence, exit 0, and print English only:
fpga-specs, fpga-keycheck, fpga-selftest, game-selftest, game-tick,
game-vault (--check), blog (list), selftest. jobs-* and tg-* lead the usage
count and are left out because their output is private mail; fpga-audit,
fpga-loopcheck, loop-selftest and regress were left out for a non-zero exit;
game-lessons for Russian output.

Each was recorded with `tri cast record` in ~/trinity-fpga, scrubbed, passed
`tri cast check` (exit 0, home path scrubbed, 0 key hits) and published to
public/term/<id>/. The trios cards were regenerated from the pinned source
(7366096248df) and pick the recordings up as CAST; none of the eight names
exists in the t27 or Trinity tri. Coverage: 596 commands, 10 with a
recording, 586 without.

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

* fix(website): viewport contract takes the default tool card from the joined catalog

The tools-default row named spec-tools.json's own tools[0] (gHashTag/trinity:tri/bench),
but the site joins that file with its parts (trios, trinity) before choosing the
default, and opens gHashTag/BrowserOS:tri/ab. The contract failed at 768x1024,
1024x768, 1280x800 and 1920x1080 on a page that was right. It now asks
readToolCatalog(), the same join the site and tools-site-contract use.

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

* fix(website): contrast gate measures the devkit block and forgets the tinted cards

src/App.tsx now reaches DevKitBlock.css, so it joins REACHED. The direction
cards are black (#000) since the homepage change, which the gate reads, so
their two UNREADABLE entries and the note about the 7% wash are removed.

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

---------

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
gHashTag added a commit that referenced this pull request Oct 8, 2026
…s new gf16 specs are classified (Closes #1529)

Run 37751766258 of t27 world scan, on top of #1530's region fix and #1462,
passed every gate through check:agents and then died in check:tools:
ENOENT scandir public/t27/files/specs/tools/trinity/cli.

sync-t27-specs.mjs says it wipes "what this script writes, and only that",
but it removed all of public/t27/files. Two card directories in there come
from other generators: tools-from-trinity-tri.mjs writes
specs/tools/trinity/cli (220 cards) and tools-from-trios-tri.mjs writes
specs/tools/trios/tri (295 cards) from trios/bin/tri at a pinned BrowserOS
commit, which the sync never reads. Every scan since #1288 (2026-10-03)
deleted them, and the catalog commit would have shipped that deletion.
The sync now copies both directories across the wipe. The scan then
re-runs tools-from-trinity-tri.mjs, so the trinity/cli cards are rebuilt
against the trinity/tri cards that were just vendored (no network; it reads
qa/tri-commands/*.json).

check:silicon is the last gate. #1462's local run counted 8 unclassified
gf16 specs. These six are added to EXCLUDED, each with the reason its own
header gives:
- t27: specs/port/fpga/vivado/{gf16_matmul4x4,gf16_top,gf16_uart_sim_bench}
  and specs/tri/t27b/conformance/scoped_gf16;
- dmitrii-f-t27/trinity-memory: specs/memory/gf16_ffn_{board,performance}_evidence.
Every one consumes GF16 or replays captures of a design built on it.
None of them declares the format. If others remain, the next scan lists
them by path.

Owner's request 2026-10-08 (translated): "fix t27 world scan".

Closes #1529

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.

1 participant