Skip to content

feat(course-access): every course free for everyone (rules VERSION 3) - #10842

Merged
gHashTag merged 2 commits into
masterfrom
feat/course-access-all-free
Oct 19, 2026
Merged

gHashTag merged 2 commits into
masterfrom
feat/course-access-all-free

Conversation

@gHashTag

Copy link
Copy Markdown
Owner

This replaces #10799 (same branch feat/course-access-all-free, same commits). #10799 was closed and reopened to make GitHub pick up a merge-of-master push (03d25f2) its head had not synced, and GitHub then refused to reopen it ("The pull request cannot be reopened"). Nothing in the change itself moved.

Closes #10798 (child of EPIC #9063)

Pull Request Checklist

  • PR title follows semantic convention
  • PR body includes Closes #10798
  • Tests updated: t27c test-report gives 18/18 PASS with 0 vacuous
  • Spec changed, so the seal is refreshed with t27c seal --save

Description

The owner, 2026-10-19: «сделай курсы бесплатно всех! наша задача язык раскачать!!». In English: make the courses free for everyone; our task is to grow the language. A course behind the club is a reader the language does not get. The club stays the bot's own subscription for generations.

  • step_of(opened) returns STEP_FREE for every rung. In v2 the first three courses were free and every course after them was paid. Now no course needs the club or the bot.
  • LADDER_RUNGS counts the rungs that differ before step_of repeats its last one. It was 4 in v2 (free, free, free, paid, then paid for good). It is 1 now (free, then free for good).
  • STEP_BOT and STEP_PAID stay. may_open, stays_open, mint_ok and key_days are unchanged, so a key already minted keeps opening what it opened.
  • lesson_event, tells_owner and may_report do not depend on the paid rung, so they are unchanged. SITE_CHECKOUT and CONTENT_HIDDEN stay false.
  • The header carries a dated VERSION 3 note. The one-line summary at the top and THE LADDER paragraph no longer say "rungs past the fourth stay PAID".

Changes

  • specs/automation/course-access.t27:
    • VERSION 3 and step_of returns free.
    • The test "the fourth and every one after it need the club" became "the fourth and every one after it are free too, no club asked".
    • New test "every course is free, for every reader, however many he has opened": a loop over n = 0..254 plus n = 255, 767 runtime asserts.
    • New test "a paid key a reader already holds still opens a paid step".
    • The VERSION test asserts step_of(VERSION + 1) == STEP_FREE.
  • .trinity/seals/automation_automation::course_access.json: resealed, 18/18.
  • docs/now/2026-10-19-course-access-v3-every-course-free.md

Testing

t27c is built from 239b4b0. Since then bootstrap/ has had only one commit, the tower-http dependency bump (#9340). The run used zig 0.16.0.

run tests pass FAIL vacuous
t27c test-report specs/automation/course-access.t27 18 18 0 0
t27c validate-vacuity --specs-dir <copy of this spec only> 18 – – 0
negative control: v2 step_of body (if opened >= 3 { return STEP_PAID; }) 18 15 3 –

The negative control turns three tests red: "the fourth and every one after it are free too, no club asked", "every course is free, for every reader, however many he has opened" and "VERSION says what the header's last note says".

Lowering: node scripts/t27-logic.mjs <this tree> automation/course-access from 999 lowered 9 fns, with 0 not lowered. In node, stepOf(1..10) gives [0,0,0,0,0,0,0,0,0,0] and stepOf(0, 254, 255) gives 0,0,0.

Local equivalents of the required checks, all ok:

  • tools/dupe_scan.py: no new duplicate body.
  • tools/ci/check_specs_still_parse.py: 1 changed spec, 0 newly unparseable.
  • Own-language gate check_all, rc 0. Foreign-line budget check_budget, rc 0.
  • tools/check_json_parses.py: OK.
  • tools/check_now_entry_shape.py: 1 entry, well formed.

Review Notes

  • Hosts are not changed here; their re-vendoring follows separately. In 999 that is apps/vibee-editor/render/src/spec/course-access.*. In trinity it is apps/website/specs/ladder/course-access.t27 and src/lib/courseAccess.logic.ts. The host binding tests name the spec's test titles, and two of those titles are new or renamed here.
  • The header names one case for the hosts. trinity's courseLadder.ts judges a course already in the reader's stored list by staysOpen(storedStep, paid). So a course stored on a paid rung under v2 still closes when that reader's club ends. The reader cannot reopen it either, because it is already in the list. A host that must keep it open re-rungs it with step_of. Another way is a VERSION 4 in which stays_open keeps paid rungs open.

φ² + 1/φ² = 3 | TRINITY


Generated by Claude Code

claude and others added 2 commits October 19, 2026 03:00
Owner, 2026-10-19: "make the courses free for everyone! our task is to grow
the language". step_of now returns STEP_FREE for every rung; no course needs
the club or the bot. LADDER_RUNGS is 1 (one rung, free, repeated for good).
STEP_BOT and STEP_PAID stay, and may_open, stays_open, mint_ok and key_days
are unchanged, so a key already minted keeps opening what it opened. The
club stays the bot's own subscription for generations.

Tests 18/18, 0 vacuous; a loop pins step_of(n) == STEP_FREE for n = 0..255.
Negative control: the v2 step_of body turns 3 tests red. Sealed with
t27c-bootstrap 0.5.2+239b4b059, zig 0.16.0.

Closes #10798

phi^2 + 1/phi^2 = 3 | TRINITY

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01ScHVrGSr6zZUdwkdC8DR9k
GitHub's update-branch reported a conflict; the merge is clean locally (git merge-tree). Picks up master's re-sealed specs/t27f/frontend.t27 (#10814), which this branch's coverage and spec-guards reds came from.

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

Copy link
Copy Markdown
Contributor

PR Dashboard

Generated at: 2026-10-19 04:55:20 UTC

Summary

Status Count
Total Open PRs 50
PRs with Failing Checks 44
PRs with All Checks Green 6
READY 2
FAILING 44
PENDING 0
NO CHECKS YET 0

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

Seal Status

  • ⚠️ STALE -- sha256(compiler.rs)=03f3de4a3582 != 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).

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-access VERSION 3: every course free for everyone

2 participants