Repository navigation
feat(course): course 0 -- t27 basics in 27 modules with infographics - #1463
Merged
Merged
Conversation
…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>
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>
Contributor
X Brain Health CheckScore: 100.0/100 X Brain is above merge threshold |
Contributor
🧪 Brain Stress Test ResultsTests: 261/261 passed, 0 leaked |
# 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>
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.
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.jsonspecs/course/courses.t27: three courses chained t27-basics -> course -> ai-numbers. The first course takeslearn/(generator rule), so course 1's index moves tolearn/course/; lesson pages stay atlearn/<lesson>/. Older blog links to course 1 now point atlearn/course/.specs/widgets/basics-*.t27(words and rows in the spec), one sharedpublic/widgets/infographic.js+.css(hand-written JS, no words of its own), B&W cards; gallery is 96 widgetsscripts/course-pages.mjs: thelearn/landing lists the three courses, with a test#/t27-basics, starfield root, nav entrycourse-zero-t27-basicswith ENbodyand RUruBodyspecs/catalog/onboarding.t27: llms.txt and agents.t27 name all three coursescourse-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