fix(website): the silicon table follows the specs that moved repository - #1023
Merged
Merged
Conversation
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
enabled auto-merge (squash)
September 15, 2026 17:03
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>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
check:siliconis red onmainafter #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." ] } }