Skip to content

feat(website): recording pages ship session.gif for X; eight t27 tri commands recorded - #1295

Merged
gHashTag merged 2 commits into
mainfrom
feat/cast-gif-reposts
Oct 3, 2026
Merged

gHashTag merged 2 commits into
mainfrom
feat/cast-gif-reposts

Conversation

@gHashTag

@gHashTag gHashTag commented Oct 3, 2026

Copy link
Copy Markdown
Owner

A tweet that links a recording page (for example https://x.com/t27_dev/status/2106387834085220452) shows card.png, a still. X renders a link card as an image and animates only a GIF attached to the tweet as media, and an intent link cannot attach media. This PR gives every recording page a session.gif that fits X's animated-GIF limits, so the owner can attach it. It also publishes eight new recordings of t27's tri, which had 0 of 52 commands recorded.

Merge after gHashTag/t27#5775. The eight t27 tri cards are vendored from gHashTag/t27 (specs/tools/README.md: edit there, re-vendor here). Their vendored copies here carry the same CAST hunks as that PR, line for line, and the rest of each file stays at the vendored t27@bf7d8eea9. The recordings and the CASTs have to land together: check:tools-coverage fails on a recording whose card has no CAST, and check:tools fails on a CAST whose recording is missing.

Commit 1: session.gif on every recording page

  • The 10 published recordings gain public/term/<id>/session.gif, rendered by tri cast gif <id> --repo. Each GIF fits X's limits: at most 15 MB, 1280x1080, 350 frames and 300M pixels of whframes. The largest, x7-board, is 0.79 MB.
  • meta.json names the file under "gif". Each page links GIF next to Preview card.

Commit 2: eight t27 tri recordings

page runs
term/t27-tri-misread/ tri misread
term/t27-tri-discard/ tri discard top
term/t27-tri-census/ tri census audit
term/t27-tri-seals/ tri seals fresh, tri seals hollow
term/t27-tri-prose/ tri prose report
term/t27-tri-lean/ tri lean vacuous, tri lean reach
term/t27-tri-competitors/ tri competitors audit
term/t27-tri-vectors/ tri vectors debt
  • Every command ran with target/release/tri built from gHashTag/t27 at 1b12580ce699. Every exit code is 0, and the home path is scrubbed.
  • The IDs say t27 because Trinity and trios have a tri too.
  • Each page has a cast, a card, a GIF and meta.json, and the gallery now lists 18.
  • agents-from-specs.test.mjs pinned withCast at 2, but main already had 10. It now pins 18 and also checks the t27 tri misread card.

The tooling side (termgif.py and tg.py in ~/skills, which are not in this repository) now writes session.gif on publish/ship. The x.txt draft says to attach it, and the Telegram follow-up after the tap sends the GIF as a file to attach on X.

{
  "version": 1,
  "head_sha": "509ef43df34d522f380fa5a04d1af0288d51e028",
  "summary": "Every recording page now ships a session.gif within X's animated-GIF limits, because X animates only an attached GIF, never a link card; eight t27 tri commands are recorded, so t27 goes from 0 to 8 of 52 recorded commands.",
  "changes": [
    "apps/website/public/term/{devkit-flow,tri-blog-list,tri-fpga-keycheck,tri-fpga-selftest,tri-fpga-specs,tri-game-selftest,tri-game-tick,tri-game-vault,tri-selftest,x7-board}/: session.gif added, meta.json gains \"gif\", index.html links it",
    "apps/website/public/term/t27-tri-{misread,discard,census,seals,prose,lean,competitors,vectors}/: eight new recording pages (index.html, session.cast, session.gif, card.png, meta.json) and the gallery index",
    "apps/website/public/t27/files/specs/tools/tri/{misread,discard,census,seals,prose,lean,competitors,vectors}.t27: the CAST hunks of gHashTag/t27#5775, vendored line for line",
    "apps/website/public/tools/spec-tools.json: regenerated, 18 cards with a recorded run",
    "apps/website/scripts/agents-from-specs.test.mjs: withCast pinned at 18 instead of a stale 2, and the t27 tri misread card checked"
  ],
  "tests": [
    {"command": "npm run check:tools-coverage", "status": "passed", "result": "t27 8 of 52 recorded, trios 10 of 295, trinity 0 of 249; every unambiguous recorded command has its CAST", "evidence": "local run of this head, 2026-10-03"},
    {"command": "npm run check:tools", "status": "passed", "result": "607 cards, with a recorded run 18", "evidence": "local run of this head, 2026-10-03"},
    {"command": "npm run check:tools-site && npm run check:agents && npm run check:onboarding && npm run check:subpath-urls && npm run check:shared-core", "status": "passed", "result": "all five exit 0", "evidence": "local run of this head, 2026-10-03"},
    {"command": "node --test scripts/tri-commands.test.mjs scripts/agents-from-specs.test.mjs", "status": "passed", "result": "63 of 63 pass; before the test edit, 1 failed on the stale withCast count (18 !== 2)", "evidence": "local run of this head, 2026-10-03"},
    {"command": "tri cast check public/term/t27-tri-*/session.cast", "status": "passed", "result": "8 of 8: exit codes 0, key hits 0, home directory shown as ~", "evidence": "local run of this head, 2026-10-03"},
    {"command": "termgif.x_over on all 18 public/term/*/session.gif", "status": "passed", "result": "18 of 18 within X's animated-GIF limits; largest 0.79 MB", "evidence": "local run of this head, 2026-10-03"},
    {"command": "npm run check:spec-catalog", "status": "failed", "result": "the atlas records sha256 of the vendored files at t27@bf7d8eea9, and the eight edited cards no longer hash to those ids; check:spec-catalog runs only in the nightly t27-world-scan, which re-vendors from t27 master and rebuilds the atlas before it checks", "evidence": "local run of this head, 2026-10-03: assertion at qa/spec-catalog-contract.mjs:32"},
    {"command": "npx vite build (apps/website)", "status": "not_run", "result": "not run locally; the website CI build covers it", "evidence": "no local build was run for this head"}
  ],
  "limitations": [
    "Nothing was posted. Whether X keeps the attached GIF animated was not tried here: the GIFs fit X's documented limits, and the owner attaches one by hand.",
    "Until the next t27 world refresh, check:spec-catalog fails on the eight vendored cards, as stated in tests. If that refresh runs before gHashTag/t27#5775 merges, it drops the CASTs, and check:tools-coverage fails in the refresh PR.",
    "Not recorded: tri ledgers audit exits 1, tri status and tri health print ring-47 data from 2026-04-06, and tri worktrees ran past 120 s.",
    "Not opened in a browser: the pages were generated and the cards looked at as PNGs."
  ],
  "tags": ["Tooling", "Website"],
  "blog": {
    "title": "Why a recording posted on X showed a still, and the GIF that fixes it",
    "summary": "A link card on X is always a still image, so every recording page now ships a session.gif within X's limits, and eight t27 tri commands joined the gallery.",
    "outline": [
      "A post linking a recorded tri session showed a static preview card, because X renders link cards as images and animates only GIFs attached as media, which an intent link cannot attach.",
      "tri cast now renders session.gif inside X's animated-GIF limits on every publish, the drafts and the Telegram follow-up hand that file to the owner, and eight t27 tri commands were recorded with every exit code 0.",
      "Posting stays the owner's click, the vendored t27 cards wait for gHashTag/t27#5775 and the next world refresh, and four popular commands were left unrecorded because their output was failing, stale or too slow."
    ],
    "cast": "term/t27-tri-misread/session.cast",
    "reproduce": ["tri cast gif t27-tri-misread --repo <trinity checkout>/apps/website"]
  }
}

🤖 Generated with Claude Code

gHashTag and others added 2 commits October 3, 2026 23:26
… X animates

A tweet that links t27.ai/term/ID/ shows card.png: X renders a link card
as a still image, and only an animated GIF attached to the tweet as media
moves. An intent link cannot attach media, so the page now carries the
GIF the owner attaches by hand.

The ten published recordings gain session.gif, rendered by
`tri cast gif ID --repo` inside X's animated-GIF limits (15 MB,
1280x1080, 350 frames, 300M pixels of w*h*frames). meta.json names it
under "gif", and each page links it next to the preview card.

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

t27's tri had 0 of 52 cards with a recording. Eight now have one, each
run with target/release/tri built from gHashTag/t27 at 1b12580ce699,
every exit code 0, home path scrubbed:

  tri misread             tri discard top        tri census audit
  tri seals fresh/hollow  tri prose report       tri lean vacuous/reach
  tri competitors audit   tri vectors debt

Each gets public/term/t27-tri-*/ (page, cast, card, GIF, meta.json).
The IDs say t27 because Trinity and trios each have a tri too;
check:tools-coverage confirms none of the eight command words is in
another CLI.

The cards are gHashTag/t27's (specs/tools/README.md: edit there,
re-vendor here). The eight vendored cards carry the same hunks as
gHashTag/t27#5775, line for line; the rest of each file stays at the
vendored t27@bf7d8eea9 until the next world refresh. Merge after
gHashTag/t27#5775.

Recorded but left out: `tri ledgers audit` exits 1, `tri status` and
`tri health` print ring-47 data from 2026-04-06, `tri worktrees` ran
past 120 s.

agents-from-specs.test.mjs pinned withCast at 2 while main already had
10; it now pins 18 and checks the t27 tri misread card too.

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
gHashTag merged commit fc914db into main Oct 3, 2026
32 of 37 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): recording pages ship session.gif for X; eight t27 tri commands recorded (#1295)

* feat(website): every recording page ships session.gif, the one format X animates

A tweet that links t27.ai/term/ID/ shows card.png: X renders a link card
as a still image, and only an animated GIF attached to the tweet as media
moves. An intent link cannot attach media, so the page now carries the
GIF the owner attaches by hand.

The ten published recordings gain session.gif, rendered by
`tri cast gif ID --repo` inside X's animated-GIF limits (15 MB,
1280x1080, 350 frames, 300M pixels of w*h*frames). meta.json names it
under "gif", and each page links it next to the preview card.

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

* feat(website): eight t27 tri commands recorded, each card ends with its run

t27's tri had 0 of 52 cards with a recording. Eight now have one, each
run with target/release/tri built from gHashTag/t27 at 1b12580ce699,
every exit code 0, home path scrubbed:

  tri misread             tri discard top        tri census audit
  tri seals fresh/hollow  tri prose report       tri lean vacuous/reach
  tri competitors audit   tri vectors debt

Each gets public/term/t27-tri-*/ (page, cast, card, GIF, meta.json).
The IDs say t27 because Trinity and trios each have a tri too;
check:tools-coverage confirms none of the eight command words is in
another CLI.

The cards are gHashTag/t27's (specs/tools/README.md: edit there,
re-vendor here). The eight vendored cards carry the same hunks as
gHashTag/t27#5775, line for line; the rest of each file stays at the
vendored t27@bf7d8eea9 until the next world refresh. Merge after
gHashTag/t27#5775.

Recorded but left out: `tri ledgers audit` exits 1, `tri status` and
`tri health` print ring-47 data from 2026-04-06, `tri worktrees` ran
past 120 s.

agents-from-specs.test.mjs pinned withCast at 2 while main already had
10; it now pins 18 and checks the t27 tri misread card too.

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.

1 participant