Repository navigation
Conversation
The FPGA course drifted from the bench SSOT (t27 fpga/HARDWARE_SSOT.md, measured 2026-10-08): the bench board is an ALINX AX7203 with the XC7A200T in the 484-ball FBG484 package. - Lesson 1 text names the board and package. - Lesson 1 task: the spec frame is the Wukong board file, and its LUT_TOTAL is AMD's logic cell count (1.6 per LUT6), not a LUT count. The old task called it the spec of our bench board. - Lesson 3 text: 484 balls on the bench board; the pin map draws the same die in the 676-ball FGG676 package of the Wukong board. The old text said our board has 676 balls. - The course lead lists both X accounts side by side: x.com/t27_dev and x.com/t27_lang (plain text; clickable links need Course.tsx, #1805). The RU bundle carries the same numbers as the English fields. Generated files, lesson pages and the two course cards are regenerated by scripts/course-from-spec.mjs and scripts/course-pages.mjs; both --check runs are clean. The drift rules that catch this live in t27 specs/tri/course/audit.t27 (Trinity-S-AI-DNA/t27#13239). Closes #1804 Refs #1478 Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
gHashTag
added a commit
to Trinity-S-AI-DNA/t27
that referenced
this pull request
Nov 7, 2026
…opped (#13243) PR #13241 squash-merged before its second commit (766f949) reached the PR, so master holds the bare "676" package trigger, which fires inside the CORDIC gain 1.6467602581 of the arithmetic course. This restores the " 676" trigger and its negative-control test verbatim from that commit. The v2 task table now says what merged: board-spec, audit-law, mastery-law, predict-step and review-intervals are DONE (#13241); lesson-facts stays CLAIMED (Trinity-S-AI-DNA/trinity#1806, open). A new TASK_PR column names the PR that carries each task, with a test that a DONE task names one and an OPEN task names none, so an agent reading the file sees what is in progress and where. Refs #13239 Refs #13240 Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
This was referenced Nov 7, 2026
Merged
cursor Bot
pushed a commit
to Trinity-S-AI-DNA/t27
that referenced
this pull request
Nov 9, 2026
…13249) * specs/blog: the course bench-board post, its figure as a native T27F still (Closes #13248) The post for Trinity-S-AI-DNA/trinity#1806 as a t27 entry. Its figure is no longer an SVG typed by hand: a t27b program draws it as a T27F still. - specs/blog/course_bench_board.t27: the post entry, 9 blocks. The figure block is an SVG whose one element is an <image> of the still (STILL_HREF), at the still's own size (OUT_W x OUT_H = 642 x 210). Board name, package and ball counts come from specs/boards/ax7203.t27. - specs/blog/course_bench_board_still.t27: the still, 214 x 70 at scale 3, four lines and a rule, painted with t27f::frame_render. - specs/blog/course_bench_board_still_main.t27: writes the still as one P6 file (404475 bytes) to standard output; t27b build --macho, libSystem. - specs/t27f/still_text_main.t27: a text view of any P6 still, one character per cell, so a still can be checked without an image channel. The still reuses its px_at (no new duplicate body). Tests (t27b test, T27 OS pane 15): post 7/7, still 5/5, still main 1/1, text view 5/5, rc 0 each. tools/dupe_scan.py --like: nothing in any of the four files is written elsewhere. Not claimed: how a browser shows the PNG made from the P6. The trinity side (body file, ruBody, registration, the PNG) belongs to trinity#1806. See #9063. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * specs/blog: stream the bench still and its text view under the width gate; CoursePostBlock (Closes #13248) Two CI reds on PR #13249 were caused by this branch. Verilog widths: the two mains held whole-image buffers, so gen-verilog gave ranges of [3235679:0] (still main) and [8388607:0] (text view), over the 2^20-bit limit in tools/check_verilog_widths.py. - course_bench_board_still_main.t27 now writes the P6 header and then BASE_H bands of SCALE rows, one upscaled base row at a time (5778 bytes). Its largest buffer is the 44940-byte base. - still_text_main.t27 reads the header one byte at a time, then reads the image in bands of `step` rows into a 65536-byte buffer, and writes the summary line before the rows. A side over SIDE_MAX (2048) exits 4. read_full and write_full loop until the count is met. - gen-verilog with the master t27c: widest range 359519 (still main) and 524287 (text view). Corpus ratchet: the post's four-field PostBlock was a second shape of the two-field PostBlock in epic_progress.t27 and t27b_progress.t27. It is now CoursePostBlock. Measured, t27b test in a T27 OS pane: - still_text_main: 8 passed, 0 failed - course_bench_board_still_main: 2 passed, 0 failed - course_bench_board: 7 passed, 0 failed Built program, t27b build --macho plus ld: the streamed still is 404475 bytes and byte-identical (cmp) to the still the old main wrote. The view over it prints "ppm 642 x 210 step 3 cols 214 rows 70 mixed_cells 0", byte-identical to its earlier output. t27b test cannot run sys_read or sys_write ("import sys_read run outside an object"), so the syscall paths are checked only by the built program. The tests cover the paths that make no call. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> --------- Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
This branch has not been deployed
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.
What
The FPGA course ("From zero to a chip") stated bench facts that the bench SSOT contradicts (t27
fpga/HARDWARE_SSOT.md, measured 2026-10-08: the bench board is an ALINX AX7203,xc7a200tfbg484-2). This PR corrects the two lessons and adds the X accounts to the course lead.The Russian bundle (
i18n/course.ru.json) carries the same numbers as each English field. Generated files, lesson pages and the two course cards (EN, RU) are regenerated by the existing generators; nothing generated was edited by hand.The drift rules that would have caught this are law in Trinity-S-AI-DNA/t27#13239 (
specs/tri/course/audit.t27, PR Trinity-S-AI-DNA/t27#13241); the audited strings fail its tests verbatim and the new wording passes.Not in this PR
specs/policy/course_post.t27requires a blog body in the same PR. The sanctioned route is a.t27entry with a generated body (t27c's TypeScript generator); that generator cannot be run on this Mac (load rule), and a hand-typed TS body is forbidden by the only-t27 rule. SoT27 work reportis expected to stay red onpost-per-pruntil the post lands; it is tracked in Course 1 lessons 1 and 3: bench-board facts (AX7203, FBG484, logic cells) and the author's X handles #1804.Course.tsxis hand-written TS).Closes #1804
Refs #1478
{ "version": 1, "head_sha": "0364afe33a5210683a2b4e07a1b57fa8e42d4927", "summary": "Two FPGA course lessons now name the bench board (ALINX AX7203, 484-ball FBG484) instead of implying the Wukong's 676-ball package, lesson 1 says LUT_TOTAL is a logic cell count, and the course lead lists x.com/t27_dev and x.com/t27_lang.", "changes": [ "apps/website/specs/course/course.t27: SAY_LEAD, LESSON_TEXTS[0], LESSON_TASKS[0], LESSON_TEXTS[2].", "apps/website/i18n/course.ru.json: the four matching Russian fields, with the same numbers as the English ones.", "Regenerated by scripts/course-from-spec.mjs: src/lib/course.generated.ts and public/learn/course.t27.", "Regenerated by scripts/course-pages.mjs: the EN and RU pages of the course, fpga-is-a-grid and pins-and-package, the two course cards and learn/cards.json." ], "tests": [ { "command": "cd apps/website && node scripts/course-from-spec.mjs --check", "status": "passed", "result": "rc 0: 11 courses up to date, 297 lesson specs compile, spec tests 86, asserts 401 hold; the Russian bundle passes the same-numbers check.", "evidence": "Local run on the PR head before push." }, { "command": "cd apps/website && node scripts/course-pages.mjs --check", "status": "passed", "result": "up to date: 616 pages for 11 courses, 616 cards, learn/sitemap.xml (after one regenerate that redrew 2 cards).", "evidence": "Local run on the PR head before push." }, { "command": "lefthook pre-commit and pre-push (explorer-bilingual-contract, queen-bilingual-contract, course-ladder-contract, translations-contract, english-only)", "status": "passed", "result": "all green on commit and push.", "evidence": "Local hook output on commit 0364afe33a." }, { "command": "npm run typecheck && npm run test:course && npm run check:course-pages (the node --test half)", "status": "not_run", "result": "Not run on this Mac: tests and builds run in CI only (load rule). CI runs them on this PR.", "evidence": "CI checks on this PR." } ], "limitations": [ "The course post required by specs/policy/course_post.t27 is not in this PR, so the post-per-pr rule is expected to fail until it lands (see Not in this PR).", "The X handles are plain text in the lead, not links: the course page has no link slot that a spec can fill (#1805).", "Only the three drifts found in the audit at ca7ec465e5 are fixed; no other lesson was re-checked against the bench beyond the drift rules in Trinity-S-AI-DNA/t27#13239." ], "tags": ["Course", "Engineering", "Verification"], "blog": { "title": "The course said 676 balls; the bench board has 484", "summary": "An audit against the bench SSOT found three sentences in the FPGA course that were true of a different board, and the rule that catches them is now a t27 spec.", "outline": [ "Lessons 1 and 3 described the XC7A200T on the Wukong board (FGG676, 676 balls) as if it were the bench chip, which sits on an ALINX AX7203 in the 484-ball FBG484, and called a logic cell count a LUT count.", "The fix names the board and package in each sentence and keeps the Wukong frame and pin map, saying which board they draw; a drift rule (trigger, required context) in specs/tri/course/audit.t27 fails the old strings and passes the new ones, and its package trigger is ' 676' with a space so it does not fire inside 1.6467602581.", "The audit has no tri glue yet, so it runs only through its own tests; the clickable X links and a mastery page wait on a course page that a spec can drive." ] } }🤖 Generated with Claude Code