Skip to content

course: module 11, AI numbers -- the MX block (lessons 31-33) - #1443

Merged
gHashTag merged 3 commits into
mainfrom
feat/course-ai-numbers
Oct 6, 2026
Merged

gHashTag merged 3 commits into
mainfrom
feat/course-ai-numbers

Conversation

@gHashTag

@gHashTag gHashTag commented Oct 6, 2026 •

Copy link
Copy Markdown
Owner

Closes #1440

What

The course at t27.ai/#/course continues 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:

# lesson widget numbers
31 One scale for a block of weights play-e8m0 the player compiles e8m0.t27 on seven backends in the browser: 17 pass, 0 fail, 10 skipped (ExprCast), each skip says why
32 The scale byte on a real machine t27c-e8m0 native t27c + Zig on the t27c lab: 18 tests pass, 9 invariants proved at comptime
33 One outlier, many zeros t27c-ocp-mx (+ t27-vs-nvfp4) ocp_mx.t27 on 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 tests

The 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 test the_core_is_three_cubed says 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-t27b loses its final "b"). The layout is fixed in pixels in scripts/course-pages.mjs:108-110; the fix is one CSS line in that .mjs file and waits for the owner's owner-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-mx hook 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/ and t27.ai/term/t27c-ocp-mx/, recorded on the Railway t27c lab with tri 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

gHashTag and others added 2 commits October 6, 2026 21:57
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>
@gHashTag

gHashTag commented Oct 6, 2026

Copy link
Copy Markdown
Owner Author

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. git diff --numstat origin/main...HEAD over *.mjs *.js *.ts *.tsx *.css *.py *.rs *.zig *.sh shows only scripts/course-from-spec.test.mjs (0 added, 2 deleted) and the two generated files src/lib/course.generated.ts and src/lib/queenWidgets.generated.ts. Everything else is .t27, i18n JSON words, generator output under public/, and tool-written casts and cards. No CSS was touched.

Generators reproduce the tree. I re-ran course-from-spec, widgets-from-spec, play-from-spec, widget-pages-from-spec and course-pages (full write, not --check). git status --porcelain stayed empty.

2. Tests

  • node --test on the course, course-pages, play, widgets and widget-pages suites: 50 tests, 50 pass, 0 fail. Of these, course-from-spec.test.mjs alone is 15 of 15.
  • check:course, check:course-pages, check:play, check:widgets, check:widget-pages, check:og-preview, check:subpath-urls and check:spec-catalog all exit 0. The spec catalog reports PASS with 1778 links.
  • typecheck:ratchet reports 179 errors across 26 files, equal to the baseline, and no file gained an error. None of the errors are in generated or course files.

3. Mutant: the deleted JS asserts lose no coverage. I changed LESSON_COUNT from 33 to 34 in course.t27. course-from-spec --check then exits 1 with three problems, all in test the_core_is_three_cubed (asserts #3, #4 and #5). I restored the file with git. The generator also requires every LESSON_* array to be LESSON_COUNT long, so the deleted lessons.length == 30 pin is covered too.

4. RU words: pass. The numbers in the three new lessons and the mx module match the English (4/6/8, 32, 31, 127, 255, E8M0, e8m0.t27, ocp_mx.t27, OCP MX v1.0), and the generator checks this as well. Phrases like "largest value" and "smallest step" translate factual comparisons in the English. They are not superlatives. The PR title, commit messages, PR body and .t27 diffs contain no Cyrillic and are ASCII.

5. Casts: clean. t27c-e8m0 and t27c-ocp-mx contain no /Users/ paths, and gitleaks detect --no-git finds no leaks in either directory. The decoded output matches the claims: e8m0 shows 18/18 tests with 9 comptime invariants, and ocp_mx shows 49/49 tests and flush counts of 23/4/2/0/0. With the bias planted, ocp_mx fails exactly bias_puts_the_min_normal_at_two_to_one_minus_bias.

6. Work report: valid. pr_blog_report.py validate passes at head b9159ae.

Nits (not blocking)

  • The t27c-ocp-mx hook says "MXFP8 none". The recording only shows E4M3 at 0; E5M2 is not run. It cannot flush more than E4M3, so the claim holds, but nothing printed shows it.
  • Lesson 33 asks the reader to find the element format that "flushes none", but two formats flush none (E3M2 and E4M3).

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>
@github-actions

github-actions Bot commented Oct 6, 2026

Copy link
Copy Markdown
Contributor

X Brain Health Check

Score: 100.0/100
Status: 🟢 HEALTHY
Threshold: 80/100

X Brain is above merge threshold

@gHashTag

gHashTag commented Oct 6, 2026

Copy link
Copy Markdown
Owner Author

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. git diff --stat b9159aed5 1fc505d2c touches 9 files, 14 lines in and 14 out: the two spec sources (specs/course/course.t27, specs/widgets/gallery.t27), the Russian bundle (i18n/course.ru.json), and generated output only (public/learn/course.t27, public/widgets/gallery.t27, public/learn/one-outlier/index.html, public/ru/learn/one-outlier/index.html, src/lib/course.generated.ts, src/lib/queenWidgets.generated.ts). There is no hand-written non-t27 code.

2. Both phrases are fixed, and both now match the recording: pass. public/term/t27c-ocp-mx/session.cast shows the spec's small_weights_vanish_in_mxfp4 asserts: E2M1 23, E2M3 4, INT8 2, E3M2 0, E4M3 0. E5M2 does not appear in the recording.

  • Widget hook: "MXFP8 none" is now "MXFP8 E4M3 none". MXFP4 = 23 and E4M3 = 0 are both true. The hook exists in English only (there is no Russian widget bundle), and grep -r "MXFP8 none" apps/website finds nothing.
  • Lesson 33 task, EN: "and which flushes none" is now "and which two flush none". This is true: E3M2 and E4M3 both flush 0 of the five formats shown.
  • Lesson 33 task, RU (i18n/course.ru.json): the Russian sentence now asks for which two formats flush none, which is the same change. It reaches course.generated.ts and public/ru/learn/one-outlier/index.html, and no copy of the old wording is left.

3. Generators and tests, run in apps/website at 1fc505d: all pass.

  • node scripts/course-from-spec.mjs --check: rc 0, up to date, spec 03695427d058cc14, 33 lessons in 11 modules, 11 lesson specs compile clean, spec tests 7/asserts 31 all hold
  • node scripts/course-pages.mjs --check: rc 0, up to date, 68 pages (en, ru), 68 cards
  • node scripts/widgets-from-spec.mjs --check: rc 0, up to date, spec 8a448a89c134d72b, 48 widgets, spec tests 8/asserts 27 all hold
  • node scripts/widget-pages-from-spec.mjs --check: rc 0, up to date, 27 tool pages, spec tests 140/asserts 740 all hold
  • node scripts/play-from-spec.mjs --check: rc 0, up to date
  • env -u LOG_LEVEL -u log_level 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: rc 0, 50 tests, 50 pass, 0 fail

4. Work report: pass. The PR body's head_sha is 1fc505d2c96996c79dd10f010878502397f38969, the same as the PR head. The T27 work report check is SUCCESS.

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 --match-head-commit 1fc505d2c96996c79dd10f010878502397f38969.

@gHashTag
gHashTag merged commit 0e1a789 into main Oct 6, 2026
23 checks passed

@gHashTag gHashTag left a comment

Copy link
Copy Markdown
Owner Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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-ran public/play/t27run.js runSpec in node on the AST from public/t27/t27_compiler.wasm. The result is 17 pass, 0 fail, 10 skip, and all 10 skips give the reason not run: ExprCast. That is 27 blocks, which matches 18 tests plus 9 invariants natively.
  • term/t27c-e8m0/session.cast records tests 18 / pass 18 / FAIL 0 / invariants 9 proved and All 18 tests passed. from zig. The t27c-e8m0 hook says "18 tests and 9 comptime invariants".
  • term/t27c-ocp-mx/session.cast records block_flushed E2M1 == 23, E2M3 == 4, INT8 == 2, E3M2 == 0, E4M3 == 0 under a 49/49 test report and All 49 tests passed. from zig. It then changes KIND_BIAS [1, 1, 3, 7, 15, 0] to [..., 16, 0], so E5M2's bias goes from 15 to 16. The result is tests 49 / pass 48 / FAIL 1, and the only failure is bias_puts_the_min_normal_at_two_to_one_minus_bias. Finally git checkout restores 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.t27 lessons 31-33 and i18n/course.ru.json contain 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 for scale-byte-native and one-outlier show 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

@github-actions

github-actions Bot commented Oct 6, 2026

Copy link
Copy Markdown
Contributor

🚨 CRITICAL: Brain Health Below Threshold

The brain health CI gate has failed. This PR cannot be merged until:

  1. All brain region unit tests pass
  2. Integration tests pass (zig build test-brain)
  3. Every stress test passes with no leaks (zig build test-brain-stress)
  4. Brain health score >= 80/100, and every probe passes in CLI Smoke

Please review the failed job logs and fix the issues.

@github-actions github-actions Bot added status:completed Done and removed status:in-progress 🔵 Agent working labels Oct 6, 2026
@github-actions

github-actions Bot commented Oct 6, 2026

Copy link
Copy Markdown
Contributor

🧪 Brain Stress Test Results

Tests: 261/261 passed, 0 leaked
Status: 🟢 PASS
Gate: every test in zig build test-brain-stress passes and none leaks

gHashTag added a commit that referenced this pull request Oct 7, 2026
)

* 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>
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.

course: module 11 -- AI numbers, the MX block (lessons 31-33)

1 participant