Skip to content

ci(website): compile and test specs/course_recipe in the Course job - #1466

Merged
gHashTag merged 5 commits into
docs/agents-course-recipefrom
feat/course-recipe-ci
Oct 13, 2026
Merged

gHashTag merged 5 commits into
docs/agents-course-recipefrom
feat/course-recipe-ci

Conversation

@gHashTag

@gHashTag gHashTag commented Oct 7, 2026 •

Copy link
Copy Markdown
Owner

CI now compiles and runs the tests of specs/course_recipe/*.t27, so a recipe step cannot be dropped silently. New script apps/website/scripts/check-course-recipe.mjs (npm check:course-recipe) reuses loadCompiler/verdictOf/constsOf and runSpecTests from the existing site scripts and is added to the Course step of website-checks.yml. It exits 1 on a compile error, a failing assert, a module with zero tests, or an empty directory.

Stacked on #1465. Adds hand-written JS, hence owner-approved-foreign.

{
  "version": 1,
  "head_sha": "44cba660c0e5d72775f4d33ade447d166654da0c",
  "summary": "The website Course job now compiles every specs/course_recipe module and runs its tests, failing on a compile error, a failing assert or a module with no tests.",
  "changes": [
    "apps/website/scripts/check-course-recipe.mjs: compile and test every .t27 in specs/course_recipe with the site's wasm compiler",
    "apps/website/package.json: npm script check:course-recipe",
    ".github/workflows/website-checks.yml: the Course step also runs check:course-recipe",
    "apps/website/src/data/blog: post a-recipe-step-cannot-be-dropped-silently with English and Russian bodies"
  ],
  "tests": [
    {
      "command": "npm run check:course-recipe in apps/website",
      "result": "course-27.t27 7 tests 26 asserts, roadmap.t27 4 tests 30 asserts, rc 0",
      "status": "passed",
      "evidence": "local run on 68c028280cb4160aa5bd2e92358771013f955110"
    },
    {
      "command": "mutant: sed PLANNED_COUNT == 4 to == 5 in roadmap.t27, run, git checkout, rerun",
      "result": "mutant rc 1 (assert #2 is false), restored rc 0; zero-test copy rc 1; broken const copy rc 1; empty dir rc 1",
      "status": "passed",
      "evidence": "local run after commit"
    },
    {
      "command": "tsc --noEmit in apps/website",
      "result": "rc 0, exit code 0 with no error output",
      "status": "passed",
      "evidence": "local run on the branch head b148e21ef"
    }
  ],
  "limitations": [
    "The gate runs the tests the modules already have; it does not judge whether they cover every recipe step",
    "A syntactically broken const still reports typecheckOk true from the wasm compiler; it is caught by the tests that use it, not by the verdict"
  ],
  "tags": [
    "t27",
    "course",
    "ci"
  ],
  "blog": {
    "title": "A recipe step cannot be dropped silently",
    "summary": "The website checks now compile and run the tests of the t27 course recipe.",
    "outline": [
      "The course recipe in specs/course_recipe had tests, but no CI job ran them, so a step could be deleted without anyone noticing.",
      "The Course job of the website checks now runs check:course-recipe, compiling every module with the site's wasm compiler and running its tests.",
      "The gate fails on a compile error, a failing assert, a module with zero tests or an empty directory, each shown by a planted mutant.",
      "It runs only the tests the modules already have and does not judge whether those tests cover every step of the recipe."
    ]
  }
}

🤖 Generated with Claude Code

check:course-recipe fails on a compile error, a failing assert, a module
with zero tests, or an empty directory. Blog post included.

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
@github-actions github-actions Bot added the status:in-progress 🔵 Agent working label Oct 7, 2026
gHashTag and others added 4 commits October 7, 2026 20:08
# Conflicts:
#	apps/website/src/data/blog/index.ts
#	apps/website/src/data/blog/posts.ts
Two post-registry entries began their slug: line inside the previous
entry's ru.openQuestions array: the main-first + head-after union kept
both conflict fragments but dropped the array/object closers that sat
between them. tsc -b reports 24 syntax errors and the typecheck ratchet
refuses the file (0 -> 24). Each seam gets the four closing lines a
healthy entry boundary already carries.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Stack refresh: the base PR's seam fix lands here; posts.ts keeps this
branch's own entry on the HEAD side of both import blocks.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
@gHashTag
gHashTag merged commit c874996 into docs/agents-course-recipe Oct 13, 2026
17 checks passed
@github-actions github-actions Bot added status:completed Done and removed status:in-progress 🔵 Agent working labels Oct 13, 2026
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.

1 participant