Repository navigation
course: module 11, AI numbers -- the MX block (lessons 31-33) - #1443
Conversation
Closes #1440 The course continues past the lab with three lessons on the number formats AI chips use (OCP Microscaling v1.0), each opening a widget whose numbers come from a real run: - 31 One scale for a block of weights -- play-e8m0: the player compiles e8m0.t27 in the browser on seven backends and runs its tests, skipping what the browser cannot run and saying why. - 32 The scale byte on a real machine -- t27c-e8m0: native t27c and Zig on the t27c lab, 18 tests pass, 9 invariants proved at comptime. - 33 One outlier, many zeros -- t27c-ocp-mx: ocp_mx.t27 on 31 small weights and one outlier; E2M1 flushes 23 to zero, E3M2 and E4M3 none; one changed bias fails exactly one test. Words and order live in specs/course/course.t27 (LESSON_COUNT 33, MODULE_COUNT 11; the core stays 27 and the spec's own test says so). The generators wrote the TypeScript, 68 pages and 68 cards; the gallery gains the three widgets and the player a second play. scripts/course-from-spec.test.mjs loses two asserts that pinned the old counts (30, 10): the count has one home, the spec's test the_core_is_three_cubed, which buildCourse evaluates. Three in-memory mutants of that count each fail the build. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
Independent review of b9159ae (reviewer bee, not the author). Base d2a930a is the current main tip, so the branch is not behind. 1. Hand-written code rule: pass. Generators reproduce the tree. I re-ran 2. Tests
3. Mutant: the deleted JS asserts lose no coverage. I changed 4. RU words: pass. The numbers in the three new lessons and the 5. Casts: clean. 6. Work report: valid. Nits (not blocking)
The #1441 RU card clipping is known and documented. Not reviewed as a defect. CI was read once: almost every check is still pending. GitGuardian and one Build Check / Brain Health pair have passed. Not merging until checks are green. bee-reviewed: approve at b9159ae |
…the hook Review of #1443 found two imprecise phrases. The ocp_mx recording shows only E4M3 among the MXFP8 formats, so the widget hook now says "MXFP8 E4M3 none". Lesson 33's task asked for "the format that flushes none", but two formats flush none on the worked block (E3M2 and E4M3); it now asks for both. The Russian bundle carries the same change. Pages and generated files are regenerated; the cards are unchanged. Refs #1440 Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
X Brain Health CheckScore: 100.0/100 X Brain is above merge threshold |
|
Independent re-review of 1fc505d (reviewer bee, not the author), on top of the earlier review of b9159ae. 1. Scope of the fix commit: pass. 2. Both phrases are fixed, and both now match the recording: pass.
3. Generators and tests, run in
4. Work report: pass. The PR body's 5. Checks, read once. mergeStateStatus is UNSTABLE. GitGuardian is SUCCESS, T27 work report is SUCCESS, and both Weekly Brain Trend Report jobs are SKIPPED. Everything else is still QUEUED: Build & Test, claude-review, Validate VIBEE Codegen, PR Title Format, report, Code Format Validation, Brain Health Check x2, checks, Count Pattern Coverage, Update PR Status, Build Check x2. Nothing is red. Verdict: approved, waiting on checks. The content is correct and every local gate passes. I am not merging while required checks are still queued. Once they are green, merge with |
gHashTag
left a comment
There was a problem hiding this comment.
Reviewer bee: review of 1fc505d, merged
I tested the merge of 1fc505d2c into main d2a930ac0 in a scratch worktree. It was a fast-forward, because the branch already contained main. The squash commit 0e1a789d7 on main has the same tree as the head I reviewed (835657617).
Only-t27 rule: pass. The PR touches 183 files. The only hand-written JS/TS file is apps/website/scripts/course-from-spec.test.mjs, with 0 lines added and 2 deleted (the pinned 30 and 10). The other code files are src/lib/course.generated.ts and src/lib/queenWidgets.generated.ts, and both start with a GENERATED by scripts/...-from-spec.mjs header. Everything else is .t27 specs, the RU bundle, generated pages and cards, or tri cast recordings.
Generators, run with --check in apps/website:
| command | rc | summary |
|---|---|---|
course-from-spec.mjs --check |
0 | 33 lessons in 11 modules, 48 widgets, 11 lesson specs compile clean; spec tests 7, asserts 31, all hold |
course-pages.mjs --check |
0 | 68 pages (en, ru), 68 cards, learn/sitemap.xml up to date |
play-from-spec.mjs --check |
0 | 2 plays (hello-world, e8m0); spec tests 15, asserts 46, all hold |
widgets-from-spec.mjs --check |
0 | 48 widgets in 3 categories; spec tests 8, asserts 27, all hold |
widget-pages-from-spec.mjs --check |
0 | 27 tool pages; spec tests 140, asserts 740, all hold |
node --test on the five *.test.mjs |
0 | 50 tests, 50 pass, 0 fail |
npx tsc --noEmit -p . |
0 | clean |
npm run check:og-preview |
0 | ok |
npm run check:subpath-urls |
0 | 409 source files, 8 known exceptions, ok |
npm run check:spec-catalog |
0 | PASS, 1778 exact source links |
Words against numbers: pass.
- Player,
e8m0.t27: I re-ranpublic/play/t27run.jsrunSpecin node on the AST frompublic/t27/t27_compiler.wasm. The result is 17 pass, 0 fail, 10 skip, and all 10 skips give the reasonnot run: ExprCast. That is 27 blocks, which matches 18 tests plus 9 invariants natively. term/t27c-e8m0/session.castrecordstests 18 / pass 18 / FAIL 0 / invariants 9 provedandAll 18 tests passed.from zig. Thet27c-e8m0hook says "18 tests and 9 comptime invariants".term/t27c-ocp-mx/session.castrecordsblock_flushedE2M1 == 23, E2M3 == 4, INT8 == 2, E3M2 == 0, E4M3 == 0 under a 49/49 test report andAll 49 tests passed.from zig. It then changesKIND_BIAS[1, 1, 3, 7, 15, 0]to[..., 16, 0], so E5M2's bias goes from 15 to 16. The result istests 49 / pass 48 / FAIL 1, and the only failure isbias_puts_the_min_normal_at_two_to_one_minus_bias. Finallygit checkoutrestores the spec. The hook text ("MXFP4 flushes 23 of them to zero, MXFP8 E4M3 none. 49 tests pass; a planted bug fails one") matches the recording. Lesson 33's task asks for the "two" formats that flush none, which is correct: E3M2 and E4M3.specs/course/course.t27lessons 31-33 andi18n/course.ru.jsoncontain the same numbers in the same order (4, 6, 8, 32, 127, 255, 31 plus one outlier, two that flush none, exactly one failing test). The rendered EN and RU pages forscale-byte-nativeandone-outliershow the 18/9 and 49/one-bias lines.
CI: no check is red. 15 pass, including checks, Build & Test, Validate VIBEE Codegen and T27 work report on the current head. The 6 Brain Unit Tests jobs were still pending when I looked, and 2 trend reports were skipping.
Merged: gh pr merge --squash --match-head-commit 1fc505d2c, giving 0e1a789d75da77d9320d482ad90cc6924da41b6d on main. I did not use --admin and did not delete the branch. The known card-URL clipping on four RU cards is still tracked in #1441, as the PR body says.
🤖 Generated with Claude Code
🚨 CRITICAL: Brain Health Below ThresholdThe brain health CI gate has failed. This PR cannot be merged until:
Please review the failed job logs and fix the issues. |
🧪 Brain Stress Test ResultsTests: 261/261 passed, 0 leaked |
) * course: module 11, AI numbers -- the MX block (lessons 31-33) Closes #1440 The course continues past the lab with three lessons on the number formats AI chips use (OCP Microscaling v1.0), each opening a widget whose numbers come from a real run: - 31 One scale for a block of weights -- play-e8m0: the player compiles e8m0.t27 in the browser on seven backends and runs its tests, skipping what the browser cannot run and saying why. - 32 The scale byte on a real machine -- t27c-e8m0: native t27c and Zig on the t27c lab, 18 tests pass, 9 invariants proved at comptime. - 33 One outlier, many zeros -- t27c-ocp-mx: ocp_mx.t27 on 31 small weights and one outlier; E2M1 flushes 23 to zero, E3M2 and E4M3 none; one changed bias fails exactly one test. Words and order live in specs/course/course.t27 (LESSON_COUNT 33, MODULE_COUNT 11; the core stays 27 and the spec's own test says so). The generators wrote the TypeScript, 68 pages and 68 cards; the gallery gains the three widgets and the player a second play. scripts/course-from-spec.test.mjs loses two asserts that pinned the old counts (30, 10): the count has one home, the spec's test the_core_is_three_cubed, which buildCourse evaluates. Three in-memory mutants of that count each fail the build. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * fix(course): name the two formats that flush none, and MXFP8 E4M3 in the hook Review of #1443 found two imprecise phrases. The ocp_mx recording shows only E4M3 among the MXFP8 formats, so the widget hook now says "MXFP8 E4M3 none". Lesson 33's task asked for "the format that flushes none", but two formats flush none on the worked block (E3M2 and E4M3); it now asks for both. The Russian bundle carries the same change. Pages and generated files are regenerated; the cards are unchanged. Refs #1440 Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * feat(blog): one outlier, 23 zeros -- the post on course module 11 A bilingual post (EN body + RU ruBody) on the three new course lessons on the OCP Microscaling block: one byte of scale for 32 weights, what one outlier flushes to zero format by format (E2M1 23 of 31, E2M3 4, INT8 2, E3M2 0, E4M3 0), the mutant that fails exactly one of 49 tests, and a comparison with ten other places that teach MX, as their pages read on 6 October 2026. Every number has a receipt; what is not proven is listed in openQuestions, including that ocp_mx.t27 is still on an open PR. Closes #1444 Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * feat(blog): cite the post's own PR, trinity#1445 Refs #1444 Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * fix(blog): review round 1 on the MX post -- exact denominators and claims The reviewer found ten imprecise phrases; every number was right. - The block has 31 small weights, one of them exactly zero, so MXFP4 flushes 23 of the 30 non-zero ones; the table says "of 31 non-zero inputs". - FP4 has 16 codes and FP6 64, not 256; the spec decodes every code. - The 49 tests assert exact integers; the named codes and five block tables are what a kernel can be checked against. - Only the ocp_mx recording was made on t27 commit 1a3786657. - Twelve resources in ten rows; microxcaling lists MXFP6 and INT4/INT2; the Hugging Face MXFP4 blog post is now a receipt (27). - Lesson 33: the site's evaluator passes all 49 tests on ocp_mx.t27 (reproduced in node); the page does not run them because the file is not on the site yet. The e8m0 skips are named as ExprCast. - Our own PRs and issues drop the OPEN tag. Refs #1444 Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * fix(blog): t27#6828 is merged; say so in the MX post, in both languages ocp_mx.t27 was merged into t27 on 2026-10-06 as 322cc77d7 and t27#6827 was closed by it. The post still called the PR open and the issue open. The recording stays valid: ocp_mx.t27 at the branch commit 1a3786657 and at 322cc77d7 is byte-identical. The file is still not on the site, because the world scan that vendors t27 specs has been red since 2026-10-03; the open question now says that instead. Refs #1444 Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * fix(blog): the MX post asks for reports as t27 issues, not on the merged PR Review of 0d82a57 found one more sentence, in both languages, that asked for disagreement reports "on t27#6828 while it is open". The PR is merged; the sentence now asks for an issue in gHashTag/t27. Refs #1444 Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> --------- Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
Closes #1440
What
The course at
t27.ai/#/coursecontinues with module 11, "AI numbers: the MX block", lessons 31-33, after the lab. Each lesson opens a widget whose numbers come from a real run:play-e8m0e8m0.t27on seven backends in the browser: 17 pass, 0 fail, 10 skipped (ExprCast), each skip says whyt27c-e8m0t27c-ocp-mx(+t27-vs-nvfp4)ocp_mx.t27on 31 small weights + one outlier: flushed to zero E2M1 23, E2M3 4, INT8 2, E3M2 0, E4M3 0; one changed bias fails exactly one of 49 testsThe words and order live in
specs/course/course.t27; the generators wrote the TypeScript, 68 pages and 68 cards. The core stays 27 lessons (3 x 3 x 3), and the spec's testthe_core_is_three_cubedsays so.Only t27
The one hand-written non-t27 file touched is
scripts/course-from-spec.test.mjs: 0 lines added, 2 deleted. They pinned the old counts (30 lessons, 10 modules), a second home for a number the spec already tests. Three in-memory mutants of the spec's count each fail the build, so no coverage is lost.Known defect: four RU cards clip their URL (#1441)
33 cells make the card strip about 64 px longer. The RU cards of lessons 9, 11, 12 and 26 now run their URL into the right edge (
.../seven-backends-and-t27bloses its final "b"). The layout is fixed in pixels inscripts/course-pages.mjs:108-110; the fix is one CSS line in that.mjsfile and waits for the owner'sowner-approved-foreign. Renaming the slugs would break live URLs. The two new slugs were kept short (scale-byte-native,one-outlier) so the new cards do not clip.Review round 1 (1fc505d)
The reviewer approved b9159ae and named two imprecise phrases, both fixed in the spec words: the
t27c-ocp-mxhook said "MXFP8 none" while the recording shows only E4M3, so it now says "MXFP8 E4M3 none"; lesson 33's task asked for "the format that flushes none", but two do (E3M2 and E4M3), so it now asks for both. The Russian bundle carries the same change. The five generator suites still pass 50/50, and the cards are unchanged.Recordings
t27.ai/term/t27c-e8m0/andt27.ai/term/t27c-ocp-mx/, recorded on the Railway t27c lab withtri cast(staged prompt and typing, real output).{ "version": 1, "head_sha": "1fc505d2c96996c79dd10f010878502397f38969", "summary": "The course at t27.ai/#/course continues with module 11, AI numbers: the MX block -- three lessons on the shared-scale number formats AI chips use, each opening a widget whose numbers come from a real run.", "changes": [ "specs/course/course.t27: LESSON_COUNT 33, MODULE_COUNT 11, module mx and lessons 31-33 with their widgets, spec and tests the_core_is_three_cubed and the_mx_module_comes_after_the_lab", "i18n/course.ru.json: Russian words for the module, the three lessons, the course description and the shape line", "specs/widgets/gallery.t27: widgets t27c-e8m0, play-e8m0 and t27c-ocp-mx join the gallery (48 widgets) with a test that the AI-number shelf closes the compiler run", "specs/x/player.t27: a second play, e8m0, beside hello-world; the player pages for its seven backends are generated", "Generated: course.generated.ts, queenWidgets.generated.ts, 68 course pages and 68 cards (every card redrawn: the strip now has 33 cells), sitemap, play pages and cards", "public/term/t27c-e8m0 and public/term/t27c-ocp-mx: two terminal recordings made on the Railway t27c lab with tri cast", "scripts/course-from-spec.test.mjs: two asserts that pinned the old counts (30, 10) deleted; the count lives in the spec's own test" ], "tests": [ { "command": "node scripts/course-from-spec.mjs --check", "result": "up to date: 33 lessons in 11 modules, 48 widgets, 11 lesson specs compile clean, spec tests 7 asserts 31 all hold", "status": "passed", "evidence": "local run on b9159aed5, spec f54301c559b8c9f8" }, { "command": "node scripts/course-pages.mjs --check", "result": "up to date: 68 pages (en, ru), 68 cards, learn/sitemap.xml", "status": "passed", "evidence": "local run on b9159aed5" }, { "command": "node scripts/play-from-spec.mjs --check", "result": "up to date: 2 plays (hello-world, e8m0), spec tests 15 asserts 46 all hold", "status": "passed", "evidence": "local run, spec a367143149d4ba6e" }, { "command": "node scripts/widgets-from-spec.mjs --check && node scripts/widget-pages-from-spec.mjs --check", "result": "up to date: 48 widgets in 3 categories; 27 tool pages, spec tests 140 asserts 740 all hold", "status": "passed", "evidence": "local run, gallery spec c78ff1c20d88044a" }, { "command": "node --test scripts/course-from-spec.test.mjs scripts/course-pages.test.mjs scripts/play-from-spec.test.mjs scripts/widgets-from-spec.test.mjs scripts/widget-pages-from-spec.test.mjs", "result": "50 tests, 50 pass, 0 fail after the two pinned count asserts were deleted", "status": "passed", "evidence": "local node --test summary" }, { "command": "buildCourse with the spec count mutated in memory (LESSON_COUNT 34, assert MODULE_COUNT == 12, assert LESSON_COUNT == 34)", "result": "each of three mutants gives a build problem naming the_core_is_three_cubed, so the deleted JS asserts lose no coverage", "status": "passed", "evidence": "/tmp/course-mutant.mjs output, files untouched" }, { "command": "npm run check:og-preview && npm run check:subpath-urls && npm run check:spec-catalog && tsc --noEmit", "result": "og-preview ok, subpath-safe URLs ok, spec catalog PASS with 1778 links, tsc clean", "status": "passed", "evidence": "local run in apps/website" }, { "command": "fetch every link on the six new lesson pages (en, ru) from a local static server", "result": "every local link and the og:image answer 200", "status": "passed", "evidence": "browser pane run against public/ on 127.0.0.1" }, { "command": "gitleaks protect --staged", "result": "no leaks found in about 664 KB of staged changes", "status": "passed", "evidence": "local gitleaks run before the commit" }, { "command": "scan the URL row of all 68 course cards for text at the right edge", "result": "four RU cards (lessons 9, 11, 12, 26) now clip their URL; filed as #1441, the fix is in course-pages.mjs", "status": "failed", "evidence": "PIL scan: last URL pixel moved from x=1133-1144 on main to x=1197-1198" } ], "limitations": [ "Four Russian share cards clip the end of their URL with 33 cells in the strip (#1441); the fix is one CSS line in course-pages.mjs, a hand-written .mjs file that waits for the owner's approval under the only-t27 rule", "ocp_mx.t27 is not vendored into the site yet: gHashTag/t27#6828 is open and blocked by red checks on t27 master, so lesson 33 shows the native recording rather than a browser play", "The browser player skips the e8m0 tests that need ExprCast and says so; the native recording in lesson 32 runs all 18" ], "tags": [ "t27", "OCPMX", "course", "AInumbers" ], "blog": { "title": "Course module 11: AI numbers and the MX shared scale", "summary": "Three new lessons follow the lab: why AI formats share one scale per block of 32 weights, what native t27c proves about the E8M0 scale byte, and how one outlier flushes small weights to zero, format by format.", "cast": "term/t27c-ocp-mx/session.cast", "outline": [ "The course had 30 lessons and the owner reports it is in demand; the next topic was the number formats AI chips use, which the lab already compared against.", "OCP Microscaling v1.0 keeps each weight in 4, 6 or 8 bits and gives every block of 32 weights one shared E8M0 scale byte with bias 127.", "Lesson 31 opens the player on e8m0.t27: it compiles to seven backends in the browser and runs the spec's tests, skipping what the browser cannot run.", "Lesson 32 runs the same spec through native t27c and Zig on the Railway lab, where 18 tests pass and 9 invariants are proved at compile time.", "Lesson 33 runs ocp_mx.t27 on 31 small weights and one outlier: E2M1 flushes 23 of them to zero, E2M3 4, INT8 2, E3M2 and E4M3 none.", "A planted bug, the E5M2 exponent bias changed from 15 to 16, fails exactly one of the 49 tests, which is the point of a spec that carries its tests.", "Everything is generated from course.t27: the lesson count lives in its own test, and the two JavaScript asserts that copied it were deleted." ] } }🤖 Generated with Claude Code