Skip to content

feat(course): course 0 -- t27 basics in 27 modules with infographics - #1463

Merged
gHashTag merged 14 commits into
mainfrom
feat/course-t27-basics-0
Oct 7, 2026
Merged

gHashTag merged 14 commits into
mainfrom
feat/course-t27-basics-0

Conversation

@gHashTag

@gHashTag gHashTag commented Oct 7, 2026 •

Copy link
Copy Markdown
Owner

Closes #1464

Stacked on #1456 (base head 52a84af). Merge #1456 first; this branch then rebases onto main.

Course 0, t27-basics: 27 modules of one lesson on the t27 language, before the FPGA course and the AI numbers course. Each lesson opens one black-and-white infographic (a real <table> with caption and header cells, plus an SVG flow diagram with a <title> in some lessons; one card per row under 480px) and one lesson spec that compiles clean on all 7 backends in the site's wasm compiler with its tests passing.

  • specs/course/t27-basics.t27, t27-basics-ru.t27, i18n/t27-basics.ru.json
  • specs/course/courses.t27: three courses chained t27-basics -> course -> ai-numbers. The first course takes learn/ (generator rule), so course 1's index moves to learn/course/; lesson pages stay at learn/<lesson>/. Older blog links to course 1 now point at learn/course/.
  • 27 widget specs specs/widgets/basics-*.t27 (words and rows in the spec), one shared public/widgets/infographic.js + .css (hand-written JS, no words of its own), B&W cards; gallery is 96 widgets
  • scripts/course-pages.mjs: the learn/ landing lists the three courses, with a test
  • routes #/t27-basics, starfield root, nav entry
  • blog post course-zero-t27-basics with EN body and RU ruBody
  • specs/catalog/onboarding.t27: llms.txt and agents.t27 name all three courses

course-27 checklist (~/.claude/skills/course-27/course-27.t27)

Steps: pick done (roadmap.t27 LIVE 3); specs PARTIAL, the 27 lesson specs are in the site mirror and not yet in gHashTag/t27; shape done; words done (no superlatives, generator check); russian done; widgets PARTIAL, 27 own B&W widgets with spec tests, but no casts; catalog done; generate done; preview NOT done in a browser; post done; land done here (issue, PR, report), merge left to a reviewer; ship, social pending after merge; learn done for roadmap.t27.

Rules: twenty-seven, spec-and-widget, black-and-white, post-per-pr, seo, no-superlatives, no-reddit, owner-says-yes hold. numbers-from-runs holds for the infographic data (wasm compiler runs). casts-through-tri is NOT met: the widgets are infographics, not tri recordings; the 27 casts are pending, as for the gft lessons, and none is faked.

Gates: all 8 rc 0 on a3c0d40 (check:widgets, test:widgets-spec, check:widget-pages, check:course, test:course, check:course-pages, check:onboarding, tsc).

Follow-up on e8519e1: Russian infographic words (contract specs/widgets/i18n/widgets-ru.t27 + bundle i18n/widgets.ru.json, swapped in by ?lang=ru), shared files in the ?v= stamp, stale play pages from #1456 regenerated, and check:subpath-urls fixed (Course.tsx:60). Gates rc 0 on e8519e1: check:widgets, test:widgets-spec, check:widget-pages, check:course, test:course, check:course-pages, check:onboarding, check:play, check:subpath-urls, tsc.

{
  "version": 1,
  "head_sha": "d907f2b5153590bbc49a90fc4ed02d04599b4633",
  "summary": "Course 0, t27 basics: 27 modules of one lesson on the t27 language, each with a black-and-white table or diagram drawn from its own widget spec and a lesson spec that compiles on all 7 backends.",
  "changes": [
    "apps/website/specs/course/t27-basics.t27 and t27-basics-ru.t27, i18n/t27-basics.ru.json: the course, its Russian contract and bundle",
    "apps/website/specs/course/courses.t27: three courses, t27-basics first; course.t27 share path moves to learn/course/",
    "apps/website/specs/widgets/basics-*.t27 and public/widgets/basics-*/: 27 infographic widgets with cards; gallery.t27 at 96",
    "apps/website/public/widgets/infographic.js and infographic.css: one shared renderer for table and SVG flow",
    "apps/website/public/t27/files/specs/basics/: 27 lesson specs",
    "apps/website/scripts/course-pages.mjs: the learn/ landing lists every course; course-from-spec test indices shifted by one course",
    "apps/website/src: routes, starfield, nav entry, blog post course-zero-t27-basics, generated catalogs and pages",
    "apps/website/scripts/widget-pages-from-spec.mjs: Russian SAY_ words from i18n/widgets.ru.json under the contract specs/widgets/i18n/widgets-ru.t27; the ?v= stamp hashes widget.css and shared files a widget loads, applied to shared modules by an import map"
  ],
  "tests": [
    {
      "command": "npm run check:course, check:course-pages, check:widgets, check:widget-pages",
      "result": "3 courses of 27 lessons, 96 widgets, 81 lesson specs compile clean, spec tests 21 with 101 asserts hold; 168 course pages and cards current",
      "status": "passed",
      "evidence": "local runs, rc 0 each"
    },
    {
      "command": "npm run test:course, test:widget-pages, test:widgets-spec; node --test scripts/course-pages.test.mjs and the two blog-cover tests",
      "result": "course 22 of 22, course-pages 9 of 9, blog cover tests 12 of 12, widget tests pass",
      "status": "passed",
      "evidence": "local node --test summaries"
    },
    {
      "command": "t27check on t27-basics.t27, t27-basics-ru.t27, courses.t27; tsc --noEmit",
      "result": "all clean; typecheck rc 0",
      "status": "passed",
      "evidence": "local runs on the branch head e8519e1d7"
    },
    {
      "command": "npm run check:onboarding",
      "result": "llms.txt and agents.t27 name the three courses; spec tests 10, asserts 55 hold",
      "status": "passed",
      "evidence": "local run on a3c0d408"
    },
    {
      "command": "lefthook pre-commit and commit-msg",
      "result": "language contracts pass, subject is English ASCII",
      "status": "passed",
      "evidence": "hook output on 127ac93fa"
    },
    {
      "command": "npm run check:play, check:subpath-urls; negative control: drop basics-trits.SAY_NOTE and shorten basics-arrays.SAY_TABLE_HEAD in the bundle",
      "result": "both gates rc 0; the control fails widget-pages-from-spec with 2 named problems, restoring the bundle makes it pass",
      "status": "passed",
      "evidence": "local runs on e8519e1d"
    }
  ],
  "limitations": [
    "The pages were not opened in a browser for this PR; the cards were checked as images",
    "The browser runner skips invariant and bench blocks, and does not load modules named by use",
    "The lesson specs live in the site mirror, not yet in gHashTag/t27",
    "No lesson has a tri cast yet; casts-through-tri is pending for all 27",
    "Russian widget words cover only the SAY_ fields of the basics-* widgets; other widgets and the widget page head and foot stay English (hidden inside course frames)"
  ],
  "tags": [
    "t27",
    "course",
    "infographics"
  ],
  "blog": {
    "title": "Course 0: t27 basics in 27 lessons, each with an infographic",
    "summary": "A new course comes before the FPGA and AI numbers courses: 27 lessons on the t27 language, each with a table or diagram drawn from its own spec.",
    "outline": [
      "The two existing t27 courses start at the chip and assume the reader already reads a spec, so a course on the language itself now comes before them.",
      "Each of the 27 lessons is its own module, from what a spec is and the module line through types, functions and tests to the compiler and its backends.",
      "Every lesson opens one black-and-white table or flow diagram whose words and rows live in a t27 widget spec with its own tests.",
      "Every lesson spec compiles clean on all seven backends in the browser, and the course generator refuses to build if one does not.",
      "The post names what is still missing: skipped invariant blocks in the browser, and specs not yet in the t27 repository."
    ]
  }
}

🤖 Generated with Claude Code

gHashTag and others added 8 commits October 7, 2026 13:40
…k Float

Six new lessons (34-39) after the MX module, each on a widget compiled
from a real t27 spec: gfternary (phi-scaled ternary weights), golden_sieve
(five rules for a weight alphabet, and a spec that does not compile with
one more trit) and tnf17 (a 17-bit float whose exponent is four balanced
trits). Each spec gets an in-browser player and a native t27c recording
from the Railway lab with a planted one-character mutant.

course.t27: 13 modules, 39 lessons; the core stays 27 (asserted).
gallery.t27: 54 widgets, six new compiler-shelf entries after t27c-ocp-mx.
All pages, cards and the RU bundle are generator output; every --check
passes and the RU digit and superlative guards hold.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Local checkpoint, not pushed: 9 new cast widgets still to record through tri.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…d Russian

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…aceholders

Both courses keep their 27 lessons in order; each lesson is now its own
module (courses.t27: MODULES_PER_COURSE 27, LESSONS_PER_MODULE 1). Specs,
Russian bundles, tests and generated pages follow.

The 9 t27c-gft-* widgets of lessons 13-21 get placeholder pages that say
the recording is pending gHashTag/t27#7400 and show no run. The words
live in specs/widgets/gallery.t27 and the lesson texts. The blog post
says 27 modules and names the pending recordings.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The nine placeholder pages, the ai-numbers lessons 13-21 sentence (EN and
RU bundle) and the blog post said the recordings wait on "the t27c gft
commands" of gHashTag/t27#7400. #7400 adds no t27c gft command: it changes
`tri test` and adds `tri mutate plant`, which are exactly the two commands
the recording script runs. The text now says that.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Course 0 (t27-basics) comes before the FPGA and AI numbers courses: 27
modules of one lesson on the t27 language itself. Each lesson opens one
black-and-white infographic (a real <table>, and in some lessons an SVG
flow diagram with a <title>) whose words and rows live in
specs/widgets/basics-<lesson>.t27, and one lesson spec under
public/t27/files/specs/basics/ that compiles clean on all 7 backends in
the site's wasm compiler with its tests passing.

- specs/course/t27-basics.t27, t27-basics-ru.t27 and the RU bundle
- courses.t27: three courses, chained t27-basics -> course -> ai-numbers;
  course 0 takes learn/, course 1's index moves to learn/course/
- 27 widget specs, one shared infographic.js/.css, B&W cards; gallery 96
- the learn/ landing lists the three courses (course-pages.mjs + test)
- routes #/t27-basics, starfield root, nav entry
- blog post course-zero-t27-basics (EN body, RU ruBody); older posts'
  course 1 links repointed to learn/course/

Stacked on #1456.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@gHashTag gHashTag added the owner-approved-foreign Owner approved hand-written non-t27 code in this PR label Oct 7, 2026
gHashTag and others added 4 commits October 7, 2026 18:01
Course 0 t27-basics now holds /learn/ and course 1 moved to /learn/course/;
the onboarding note said two courses and pointed at the old address.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
A bilingual post (EN body + RU ruBody) on gHashTag/t27#7400, which the
pending recordings of lessons 13 to 21 wait on: before, tri test only
listed tests and printed that they passed, so a planted bug stayed
green; now it runs them and exits non-zero on a failure, and tri mutate
plant records one mutant with a clean baseline and a hash check of the
original. Says plainly #7400 is open and t27#7370 (the t27c test-report
exit code) is still open.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…eat/course-t27-basics-0

# Conflicts:
#	apps/website/src/data/blog/index.ts
#	apps/website/src/data/blog/posts.ts
… in the ?v= stamp, fresh play pages

- specs/widgets/i18n/widgets-ru.t27: a translation contract (no Cyrillic) naming
  i18n/widgets.ru.json, keyed by widget ID then SAY_ field. widget-pages-from-spec
  checks it (unknown widget or field, changed array length, empty word, a basics-*
  SAY_ field with no Russian all fail) and inlines the words; ?lang=ru swaps them in.
  Course.tsx adds lang=ru to widget frames on Russian pages. infographic.js gains no words.
- The ?v= stamp now hashes every file the page loads: widget.css and shared files
  reached from the widget's scripts (../infographic.js -> ./infographic.css). Shared
  modules get the stamp through an import map; infographic.js passes it to its CSS.
- Regenerated play pages left stale by #1456 (check:play green).
- check:subpath-urls: the Link target in Course.tsx is no longer named href.
- Blog post: dropped the closed "infographics are English-only" gap (EN+RU).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@github-actions

github-actions Bot commented Oct 7, 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

@github-actions

github-actions Bot commented Oct 7, 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 and others added 2 commits October 7, 2026 21:46
# Conflicts:
#	apps/website/src/data/blog/index.ts
#	apps/website/src/data/blog/posts.ts
… (learn/<id>/)

Same change as trinity#1456 65cff5a, so the two branches merge clean:
courses.t27 puts every course after the first under learn/<id>/ and the
contract demanded one path segment.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@gHashTag
gHashTag merged commit e13c5f5 into main Oct 7, 2026
25 of 29 checks passed
@github-actions github-actions Bot added status:completed Done and removed status:in-progress 🔵 Agent working labels Oct 7, 2026
github-actions Bot added a commit that referenced this pull request Oct 7, 2026
Merge PR #1463: feat(course): course 0 -- t27 basics in 27 modules with infographics

feat(course): course 0 -- t27 basics in 27 modules with infographics
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

owner-approved-foreign Owner approved hand-written non-t27 code in this PR status:completed Done

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Course 0: t27 basics in 27 modules with infographics

1 participant