Skip to content

course: ring 4 theme spec and host main for lesson 01 - #13681

Merged
gHashTag merged 1 commit into
masterfrom
claude/course-ring4-theme-13674
Nov 14, 2026
Merged

gHashTag merged 1 commit into
masterfrom
claude/course-ring4-theme-13674

Conversation

@gHashTag

@gHashTag gHashTag commented Nov 14, 2026 •

Copy link
Copy Markdown
Collaborator

course: ring 4 theme spec and host main for lesson 01

Adds two spec files for issue #13674 (ring 4, course v2):

  • specs/course/lesson_01_theme.t27 — module CourseLesson01Theme, 224 lines, 9 tests
  • specs/course/lesson_01_theme_main.t27 — module CourseLesson01ThemeMain, 163 lines, 4 tests, host binary main

Boundary

  • specs/course/lesson_01_theme.t27
  • specs/course/lesson_01_theme_main.t27

Evidence

t27c check (VPS /root/t27-m13-final/target/release/t27c)

specs/course/lesson_01_theme.t27        → Typecheck OK (0 errors, 0 warnings)  rc=0
specs/course/lesson_01_theme_main.t27   → Typecheck OK (0 errors, 0 warnings)  rc=0

t27c test-report on lesson_01_theme.t27 (VPS task r4-theme)

9 tests, 0 FAIL — test-report rc=0

Vacuous pass count is not available on the VPS: t27c test-report on the host main spec is blocked by an inherited VPS toolchain defect (type 'u8' does not support array initialization syntax at a module-level [0] ** N buffer; same block on master's lesson_01_frames_main.t27, confirmed with a control run). The official vacuous count will be settled by CI.

zig test on generated l01_theme.zig (VPS task r4-theme-v5)

1/4 l01_theme.test.the_frame_is_15_header_bytes_plus_913500_rgb_bytes...OK
2/4 l01_theme.test.the_light_and_the_dark_frame_differ_on_every_scene...OK
3/4 l01_theme.test.a_frame_repeats_byte_for_byte...OK
4/4 l01_theme.test.the_first_pixel_is_the_token_fill_of_its_node...OK
All 4 tests passed.
rc=0

Host binary run (VPS task r4-theme-v4b/r4-theme-v5)

scene 0 hook:     meaning_changed 0  rects_changed 0  pixels_changed 304500 of 304500  contrast_fail light 1 dark 0
scene 1 visual:   meaning_changed 0  rects_changed 0  pixels_changed 304500 of 304500  contrast_fail light 1 dark 0
scene 2 predict:  meaning_changed 0  rects_changed 0  pixels_changed 304500 of 304500  contrast_fail light 1 dark 0
scene 3 poke:     meaning_changed 0  rects_changed 0  pixels_changed 304500 of 304500  contrast_fail light 7 dark 0
scene 4 explain:  meaning_changed 0  rects_changed 0  pixels_changed 304500 of 304500  contrast_fail light 1 dark 0
scene 5 transfer: meaning_changed 0  rects_changed 0  pixels_changed 304500 of 304500  contrast_fail light 1 dark 0
scene 6 prove:    meaning_changed 0  rects_changed 0  pixels_changed 304500 of 304500  contrast_fail light 1 dark 0
l01_theme: flat token fills by node kind; nothing here says a frame looks right
rc=0

14 PPM frames written to target/course/theme/, each 913515 bytes (375×812×3).
Frame checksums reproducible across two binary runs (identical cksum output).

Weaknesses (FR-008: nothing says a frame looks right)

  • pixels_changed is 304500 of 304500 for every scene and every theme: flat token fills differ by node kind, so the entire raster changes between themes, but the number does not discriminate scenes from each other. A discriminating delta needs vf_card::vc_render with real themed layout, outside course: lesson 1 under a theme swap (ring 4) #13674's scope.
  • meaning_changed 0 and rects_changed 0 on every scene are correct: layout and meaning never read the theme argument, so FR-002 zeros are a regression guard only.
  • Light theme has contrast failures: 1 per scene (button token fails AERT 451 < 500), 7 on scene 3 poke. Recorded in vf_theme.t27; fix is in the T27F writer's scope.
  • Three one-line orchestrator edits were applied to free-model output: extra \n in the header string, missing loop increment in host test 2, use t27f::vf_meaning::vf_gap; disambiguation line.
  • Frames were not shown to the owner; nothing in this PR says they look right.

Closes #13674
Refs #13251

🤖 Generated with Claude Code


Note

Low Risk
Additive course specs and a diagnostic host binary only; no changes to auth, persistence, or core runtime paths.

Overview
Adds ring 4 theme measurement for lesson 01: two new T27 specs that exercise every lesson_01_fpga_intro scene under light vs dark without changing layout or meaning.

specs/course/lesson_01_theme.t27 introduces CourseLesson01Theme helpers to count meaning-line diffs, rectangle diffs, per-pixel token-fill changes on a 375×812 raster, and AERT contrast failures on text/button/badge nodes, plus nine tests (theme swap invariants, pixel deltas, and contrast bounds).

specs/course/lesson_01_theme_main.t27 is the host binary: it paints flat token-fill P6 frames (not styled vc_render), writes two PPMs per scene under target/course/theme/, prints per-scene metrics, and includes four frame-format/digest tests.

The tooling explicitly treats this as metrics evidence for #13674—pixels can change on every cell while meaning/rects stay at zero; it does not assert frames look correct.

Reviewed by Cursor Bugbot for commit 6ab7869. Bugbot is set up for automated code reviews on this repo. Configure here.

- specs/course/lesson_01_theme.t27 (module CourseLesson01Theme)
  t27c check rc=0, test-report 9/9 pass on VPS (r4-theme task)
- specs/course/lesson_01_theme_main.t27 (module CourseLesson01ThemeMain)
  t27c check rc=0, t27c gen rc=0, zig build rc=0, host exit 0
  zig test on generated code 4/4 pass rc=0
  7 scenes printed, 14 PPM frames 913515 bytes each
  t27c test-report blocked on VPS by inherited toolchain defect
  (type 'u8' does not support array initialization syntax at module-
  level buffer; same block on master lesson_01_frames_main.t27)
  vacuous pass count to be settled by CI

Refs #13251
Closes #13674
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
@cursor

cursor Bot commented Nov 14, 2026

Copy link
Copy Markdown
Contributor

Bugbot couldn't run - usage limit reached

Bugbot is counted against Cursor usage for this user or team, and this run hit a usage or spend limit.

A user or team admin can review and increase usage limits in the Cursor dashboard.

(requestId: 57513f5c-7ffe-4a26-bf01-545d1a7b787f)

@github-actions

Copy link
Copy Markdown
Contributor

PR Dashboard

Generated at: 2026-11-14 07:38:04 UTC

Summary

Status Count
Total Open PRs 39
PRs with Failing Checks 35
PRs with All Checks Green 4
READY 0
FAILING 35
PENDING 0
NO CHECKS YET 0

These columns do not partition: 0 + 35 + 0 + 0 = 35, and there are 39 open PRs. A PR is being counted twice or not at all.

Seal Status

  • ⚠️ STALE -- sha256(compiler.rs)=af11a2d3abd1 != manifest seal=87e5cbd3ad94.
    The committed NMSE numbers were certified against an older compiler.rs.
    Run scripts/reseal-check.sh locally for the two-step reseal command (advisory; not a merge gate).

@gHashTag
gHashTag merged commit 6a11ca5 into master Nov 14, 2026
34 of 45 checks passed
@gHashTag
gHashTag deleted the claude/course-ring4-theme-13674 branch November 14, 2026 07:43
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

course: lesson 1 under a theme swap (ring 4)

1 participant