Skip to content

fix(website): the silicon table follows the specs that moved repository - #1023

Merged
gHashTag merged 5 commits into
mainfrom
site/silicon-table-follows-specs
Sep 15, 2026
Merged

gHashTag merged 5 commits into
mainfrom
site/silicon-table-follows-specs

Conversation

@gHashTag

Copy link
Copy Markdown
Owner

check:silicon is red on main after #1021, and the same table ships in the bundle: fifteen specs currently read "No hardware run" on t27.ai while their silicon record sits one renamed key away.

{
  "version": 1,
  "head_sha": "8a2629a87fd485925b1a468e71942ecc08537f1d",
  "summary": "The silicon coverage table names spec paths, and the GitHub-sourced catalog refresh moved the GF ladder's second copy from chips/euler to tt-trinity-euler; this follows those fifteen entries and classifies the nine widths the refresh brought in from t27 master.",
  "changes": [
    "src/data/siliconHistory.ts: fifteen SPEC_TO_FORMAT, EXCLUDED and FAMILY_SPECS entries renamed from chips/euler/** to tt-trinity-euler/**, the repository that owns those files; the bytes are the same ones, attributed differently by the refresh.",
    "src/data/siliconHistory.ts: GF6, GF10 and GF14 excluded as widths between the rungs of the silicon-verified GF4-GF24 ladder, and GF48, GF96, GF512 and GF1024 as widths above it, each with the wording the table already uses for its neighbours.",
    "src/data/siliconHistory.ts: the canonical copies of GF64, GF128 and GF256 excluded alongside their tt-trinity-euler twins, so one copy excluded and its twin silent cannot recur.",
    "No spec gains a hardware claim here: every entry added says a cell was not run, which is the understating direction the table's header asks for when a record is absent."
  ],
  "tests": [
    {
      "command": "npm run check:silicon",
      "result": "every spec naming a verified format is now classified",
      "status": "passed",
      "evidence": "1407 specs scanned, 19 mapped, 7 family, 23 excluded; the guard's own self-test still detects an unclassified gf16 path"
    },
    {
      "command": "npm run check:api check:aria check:clients-console check:crons-catalog check:discovery check:explorer-languages check:skills-catalog check:subpath-urls check:tools-site check:tri-identity check:viewport",
      "result": "every other file-driven check in the website-checks list passes",
      "status": "passed",
      "evidence": "run with BOT_ROOT and T27_ROOT pointed at a nonexistent path, as a runner has them"
    },
    {
      "command": "npm run test:sync-crons test:sync-skills test:viewport-spec typecheck:ratchet",
      "result": "the unit tests and the type ratchet hold at baseline",
      "status": "passed",
      "evidence": "179 errors across 26 files, baseline 179 across 26, no file gained type errors"
    },
    {
      "command": "npm run audit:en audit:ru audit:mobile",
      "result": "the three browser audits could not run on this machine",
      "status": "not_run",
      "evidence": "each exits with: Chrome/Chromium not found, set CHROME_PATH; no Chrome or Chromium is installed here, so CI is the first place they run"
    }
  ],
  "limitations": [
    "The three language and mobile audits are unrun here for want of a browser, so this branch relies on CI for them.",
    "The exclusions state that no hardware cell was run for those widths, which is a statement about the absence of a record rather than a measurement of the format.",
    "t27.ai carries the previous bundle until this lands and is published again, so the fifteen understated specs stay understated until then."
  ],
  "tags": ["website", "silicon", "catalog", "specs"],
  "blog": {
    "title": "When a spec changes repository, its record has to follow",
    "summary": "A catalog refresh attributed the GF ladder's second copy to the repository that owns it, and fifteen hardware records quietly stopped matching the specs they belonged to.",
    "outline": [
      "The corpus carried the GF ladder three times over, and the silicon table lists every copy by path precisely so that a spec describing a silicon-verified format does not read as unverified merely because a reader opened a different copy of it.",
      "Vendoring the corpus from GitHub rather than from a branch that inlined the chip repositories changed where the second copy lives, from chips/euler to tt-trinity-euler, and a table keyed by path cannot follow that on its own.",
      "The gate caught it, which is what the gate is for, but the same table ships to the browser, so for the length of one deploy fifteen specs understated what had been measured about them.",
      "The refresh also brought nine widths that declare a format and have no cell behind them, and each is now excluded with a stated reason rather than left to be discovered again by the next person who runs the guard."
    ]
  }
}

gHashTag and others added 5 commits September 15, 2026 22:29
The catalog behind the Queen map and the Spec Explorer had been frozen since
2026-09-12 at 856 specs while GitHub held far more, and three separate things
had to be true at once for that to happen.

1. sync-t27-specs.mjs read gHashTag/t27 from a working copy at /Users/playom/t27,
   so the repository holding two thirds of the corpus was the one repository CI
   could not refresh. That checkout sat on a feature branch 704 commits behind
   master, which is how the site came to be missing 540 specs that were on
   master all along -- specs/tools (94), bootstrap/tests (90), specs/ternary
   (60), specs/igla (44), specs/crons (33), specs/agents (27), specs/skills (26).
   It now pulls a tarball like the other four founding sources, reuses the
   vendored compiler wasm when cargo is not available, and brings the teaching
   course -- which lives on a branch never merged to master -- through a named
   overlay ref that contributes only the paths master lacks, so the overlay
   retires itself the day the course is merged.

2. The nightly workflow never ran that sync at all, only the discovery scan; and
   every run since 2026-09-13 died at check:tools before reaching its commit
   step. That gate asserted mcpWithTools + mcpExternal == mcp.length while its
   own message states "either lists tools or is external" -- an OR written as a
   sum, which held only while no external server listed any tools.
   mcp/inngest-dev is both, truthfully, so the gate now asserts the invariant it
   names.

3. Even green, its `git push` to main is rejected by ruleset 23148303, which
   requires the "T27 work report" check and lists no bypass actors. It now
   commits to bot/t27-world-scan, generates a report from the artifacts the run
   itself wrote, opens or updates a pull request and enables auto-merge.

Result: 1407 specs across 10 repositories, from GitHub, with no laptop in the
path. Two worlds the frozen catalog never saw -- tt-trinity-euler (46) and
turbobaby-user-bot (12) -- are on the map, and chips/euler is now attributed to
tt-trinity-euler, the repository that owns it.

Also here, all found while proving the above:
- Duplicate copies are recorded as {path, repo, sameAs} pairs instead of only
  counted, and the Spec Explorer shows a spec's other homes. The bytes are
  discarded at vendor time, so nothing downstream could reconstruct this.
- The embedded Explorer lifted its course filter only for a spec outside the
  course. The homepage frame opens hello_world, which is lesson 0, so it read
  "9 specs" beside a map saying 856. An address that names a spec now shows the
  whole library.
- .spec-x-brief is a flex item with nothing to give: measured at 404px it was a
  0px box around 636px of content, which drew over the tab strip and the code.
  No variant shrinks now; an open one takes up to 45vh and scrolls.
- A spec's SOURCES and BODY_EN name files that are not .t27, so a GitHub-sourced
  refresh deleted the seven docs/system/*.md a chapter renders. They are
  vendored from the same tarball, at the same commit, as the spec naming them.
- The Chip panel's "of 676 specs, 361 produce Verilog" now says when it was
  measured and that the corpus has grown since.

Каталог за картой Королевы и обозревателем спек стоял с 12 сентября на 856
спеках, хотя на GitHub их было куда больше, и для этого должны были совпасть
три вещи: основной синк читал gHashTag/t27 с ноутбука (ветка на 704 коммита
позади master), ночной workflow этот синк вообще не запускал и падал на
неродственном гейте check:tools, а даже зелёным не смог бы запушить в main
из-за правила о рабочем отчёте. Теперь источник -- GitHub, курс приходит через
именованный overlay-ref, гейт проверяет то, что заявляет, а workflow открывает
pull request с отчётом и включает авто-мердж. Итог: 1407 спек в 10
репозиториях без участия чьей-либо машины.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
sync-t27-specs.mjs records which file was dropped for which, and then
mergeWorld rebuilt the manifest from a fixed list of fields and dropped the
list itself -- so the one place that knows a spec lives in more than one
repository was thrown away one step later. It is carried through now, a
scanned world contributes its own pairs the same way it contributes entries,
and the contract's manifest key order names the new field rather than failing
on it.

Синк записывает, какой файл отброшен в пользу какого, а шаг vendor пересобирал
манифест по фиксированному списку полей и терял этот список. Теперь он
переносится, найденный мир добавляет свои пары так же, как свои записи, а
контракт порядка ключей знает о новом поле.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
The copy loop named t27, queen, wasm and fonts while dist also holds agents,
crons, docs, functions, skills and tools -- the six generated catalogs the
Explorer tabs read. They are live on t27.ai only because a person copied them
by hand; the next clean run of this workflow would have 404ed all six. The
loop's own comment claimed that copying directories rather than named files
meant the next data file would arrive without anyone remembering to add a line,
which was true only inside the four it named. It now iterates what the build
actually produced.

Цикл копирования перечислял t27, queen, wasm и fonts, тогда как в dist лежат
ещё agents, crons, docs, functions, skills и tools -- шесть сгенерированных
каталогов, которые читают вкладки обозревателя. На t27.ai они живы только
потому, что их скопировали руками. Теперь цикл идёт по тому, что реально
собралось.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
The shell was rendered only once universe-atlas.json had arrived: on failure
the branch returned an error paragraph in place of <Runtime/>, so one
unreachable JSON file took Kanban, the Spec Explorer, Agents, Tools, Crons,
Skills, Functions, Project, TRI, Factory, Research and the Mission Map down
with it -- none of which read the atlas at all.

Queen already takes sharedCatalog as optional and falls back to the older hive
without it; that is the path a connected repository has always used. So the
shell mounts either way and the failure is reported over the map instead of in
place of it, with the same Retry, which restores the catalog hive and keeps
whichever tab you were on.

Verified with the file 404ing: all thirteen tabs mount and switch, the address
follows (?tab=kanban, ?tab=specs, ?tab=tools, ?tab=agents, ?tab=project,
?tab=research), the banner clears the command rail, and Retry brings the map
back on ?tab=research without leaving it.

Оболочка рисовалась только после загрузки universe-atlas.json, а при ошибке
ветка возвращала абзац с ошибкой вместо <Runtime/> -- один недоступный JSON
уносил с собой все тринадцать вкладок, включая те, что атлас вообще не читают.
Queen принимает sharedCatalog как необязательный, поэтому оболочка теперь
поднимается в любом случае, а сбой показывается поверх карты, а не вместо неё.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
The GitHub-sourced refresh attributes the GF ladder's second copy to
tt-trinity-euler, the repository that owns it, instead of chips/euler, a
directory that existed only while the corpus came from a t27 branch carrying
the chip repositories inline. Fifteen entries here still named the old paths,
so check:silicon failed on main and -- because this table ships in the bundle,
not just in the gate -- fifteen specs read "No hardware run" on the live site
while their silicon record sat one renamed key away. That is the understating
direction the file's own header warns about.

The refresh also brought nine widths from t27 master that declare a verified
format and had no classification: GF6, GF10 and GF14 between the rungs of the
silicon-verified GF4-GF24 ladder, and GF48, GF96, GF128, GF256, GF512 and
GF1024 above it. Each is excluded with the reason the table already uses for
its neighbours; none of them gains a hardware claim, because none was run.

check:silicon: 1407 specs scanned, 19 mapped, 7 family, 23 excluded, every spec
naming a verified format classified.

Обновление из GitHub приписало вторую копию лестницы GF репозиторию
tt-trinity-euler, которому она принадлежит, а пятнадцать записей таблицы всё
ещё указывали на chips/euler. Гейт падал, и, поскольку таблица уезжает в бандл,
пятнадцать спек на живом сайте показывали «нет аппаратного прогона» вместо
своей записи. Ещё девять новых ширин из master занесены в исключения с теми же
формулировками, что у соседей: ни одна не получает аппаратного утверждения.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
@gHashTag
gHashTag enabled auto-merge (squash) September 15, 2026 17:03
@gHashTag
gHashTag merged commit 5d0e30d into main Sep 15, 2026
14 of 18 checks passed
github-actions Bot added a commit that referenced this pull request Sep 15, 2026
fix(website): the silicon table follows the specs that moved repository (#1023)

* feat(website): the .t27 catalog syncs itself from GitHub, nightly

The catalog behind the Queen map and the Spec Explorer had been frozen since
2026-09-12 at 856 specs while GitHub held far more, and three separate things
had to be true at once for that to happen.

1. sync-t27-specs.mjs read gHashTag/t27 from a working copy at /Users/playom/t27,
   so the repository holding two thirds of the corpus was the one repository CI
   could not refresh. That checkout sat on a feature branch 704 commits behind
   master, which is how the site came to be missing 540 specs that were on
   master all along -- specs/tools (94), bootstrap/tests (90), specs/ternary
   (60), specs/igla (44), specs/crons (33), specs/agents (27), specs/skills (26).
   It now pulls a tarball like the other four founding sources, reuses the
   vendored compiler wasm when cargo is not available, and brings the teaching
   course -- which lives on a branch never merged to master -- through a named
   overlay ref that contributes only the paths master lacks, so the overlay
   retires itself the day the course is merged.

2. The nightly workflow never ran that sync at all, only the discovery scan; and
   every run since 2026-09-13 died at check:tools before reaching its commit
   step. That gate asserted mcpWithTools + mcpExternal == mcp.length while its
   own message states "either lists tools or is external" -- an OR written as a
   sum, which held only while no external server listed any tools.
   mcp/inngest-dev is both, truthfully, so the gate now asserts the invariant it
   names.

3. Even green, its `git push` to main is rejected by ruleset 23148303, which
   requires the "T27 work report" check and lists no bypass actors. It now
   commits to bot/t27-world-scan, generates a report from the artifacts the run
   itself wrote, opens or updates a pull request and enables auto-merge.

Result: 1407 specs across 10 repositories, from GitHub, with no laptop in the
path. Two worlds the frozen catalog never saw -- tt-trinity-euler (46) and
turbobaby-user-bot (12) -- are on the map, and chips/euler is now attributed to
tt-trinity-euler, the repository that owns it.

Also here, all found while proving the above:
- Duplicate copies are recorded as {path, repo, sameAs} pairs instead of only
  counted, and the Spec Explorer shows a spec's other homes. The bytes are
  discarded at vendor time, so nothing downstream could reconstruct this.
- The embedded Explorer lifted its course filter only for a spec outside the
  course. The homepage frame opens hello_world, which is lesson 0, so it read
  "9 specs" beside a map saying 856. An address that names a spec now shows the
  whole library.
- .spec-x-brief is a flex item with nothing to give: measured at 404px it was a
  0px box around 636px of content, which drew over the tab strip and the code.
  No variant shrinks now; an open one takes up to 45vh and scrolls.
- A spec's SOURCES and BODY_EN name files that are not .t27, so a GitHub-sourced
  refresh deleted the seven docs/system/*.md a chapter renders. They are
  vendored from the same tarball, at the same commit, as the spec naming them.
- The Chip panel's "of 676 specs, 361 produce Verilog" now says when it was
  measured and that the corpus has grown since.

Каталог за картой Королевы и обозревателем спек стоял с 12 сентября на 856
спеках, хотя на GitHub их было куда больше, и для этого должны были совпасть
три вещи: основной синк читал gHashTag/t27 с ноутбука (ветка на 704 коммита
позади master), ночной workflow этот синк вообще не запускал и падал на
неродственном гейте check:tools, а даже зелёным не смог бы запушить в main
из-за правила о рабочем отчёте. Теперь источник -- GitHub, курс приходит через
именованный overlay-ref, гейт проверяет то, что заявляет, а workflow открывает
pull request с отчётом и включает авто-мердж. Итог: 1407 спек в 10
репозиториях без участия чьей-либо машины.

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

* fix(website): the duplicate list survives the vendor step

sync-t27-specs.mjs records which file was dropped for which, and then
mergeWorld rebuilt the manifest from a fixed list of fields and dropped the
list itself -- so the one place that knows a spec lives in more than one
repository was thrown away one step later. It is carried through now, a
scanned world contributes its own pairs the same way it contributes entries,
and the contract's manifest key order names the new field rather than failing
on it.

Синк записывает, какой файл отброшен в пользу какого, а шаг vendor пересобирал
манифест по фиксированному списку полей и терял этот список. Теперь он
переносится, найденный мир добавляет свои пары так же, как свои записи, а
контракт порядка ключей знает о новом поле.

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

* fix(ci): the apex deploy copies every directory the build produced

The copy loop named t27, queen, wasm and fonts while dist also holds agents,
crons, docs, functions, skills and tools -- the six generated catalogs the
Explorer tabs read. They are live on t27.ai only because a person copied them
by hand; the next clean run of this workflow would have 404ed all six. The
loop's own comment claimed that copying directories rather than named files
meant the next data file would arrive without anyone remembering to add a line,
which was true only inside the four it named. It now iterates what the build
actually produced.

Цикл копирования перечислял t27, queen, wasm и fonts, тогда как в dist лежат
ещё agents, crons, docs, functions, skills и tools -- шесть сгенерированных
каталогов, которые читают вкладки обозревателя. На t27.ai они живы только
потому, что их скопировали руками. Теперь цикл идёт по тому, что реально
собралось.

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

* fix(queen): a failed atlas loses the map, not all thirteen tabs

The shell was rendered only once universe-atlas.json had arrived: on failure
the branch returned an error paragraph in place of <Runtime/>, so one
unreachable JSON file took Kanban, the Spec Explorer, Agents, Tools, Crons,
Skills, Functions, Project, TRI, Factory, Research and the Mission Map down
with it -- none of which read the atlas at all.

Queen already takes sharedCatalog as optional and falls back to the older hive
without it; that is the path a connected repository has always used. So the
shell mounts either way and the failure is reported over the map instead of in
place of it, with the same Retry, which restores the catalog hive and keeps
whichever tab you were on.

Verified with the file 404ing: all thirteen tabs mount and switch, the address
follows (?tab=kanban, ?tab=specs, ?tab=tools, ?tab=agents, ?tab=project,
?tab=research), the banner clears the command rail, and Retry brings the map
back on ?tab=research without leaving it.

Оболочка рисовалась только после загрузки universe-atlas.json, а при ошибке
ветка возвращала абзац с ошибкой вместо <Runtime/> -- один недоступный JSON
уносил с собой все тринадцать вкладок, включая те, что атлас вообще не читают.
Queen принимает sharedCatalog как необязательный, поэтому оболочка теперь
поднимается в любом случае, а сбой показывается поверх карты, а не вместо неё.

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

* fix(website): the silicon table follows the specs that moved repository

The GitHub-sourced refresh attributes the GF ladder's second copy to
tt-trinity-euler, the repository that owns it, instead of chips/euler, a
directory that existed only while the corpus came from a t27 branch carrying
the chip repositories inline. Fifteen entries here still named the old paths,
so check:silicon failed on main and -- because this table ships in the bundle,
not just in the gate -- fifteen specs read "No hardware run" on the live site
while their silicon record sat one renamed key away. That is the understating
direction the file's own header warns about.

The refresh also brought nine widths from t27 master that declare a verified
format and had no classification: GF6, GF10 and GF14 between the rungs of the
silicon-verified GF4-GF24 ladder, and GF48, GF96, GF128, GF256, GF512 and
GF1024 above it. Each is excluded with the reason the table already uses for
its neighbours; none of them gains a hardware claim, because none was run.

check:silicon: 1407 specs scanned, 19 mapped, 7 family, 23 excluded, every spec
naming a verified format classified.

Обновление из GitHub приписало вторую копию лестницы GF репозиторию
tt-trinity-euler, которому она принадлежит, а пятнадцать записей таблицы всё
ещё указывали на chips/euler. Гейт падал, и, поскольку таблица уезжает в бандл,
пятнадцать спек на живом сайте показывали «нет аппаратного прогона» вместо
своей записи. Ещё девять новых ширин из master занесены в исключения с теми же
формулировками, что у соседей: ни одна не получает аппаратного утверждения.

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

---------

Co-authored-by: Claude Opus 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