Skip to content

chore(book): dogfood script + Phase 6 harness spec - #1903

Merged
noahgift merged 11 commits into
mainfrom
chore/book-dogfood-script
May 23, 2026
Merged

chore(book): dogfood script + Phase 6 harness spec#1903
noahgift merged 11 commits into
mainfrom
chore/book-dogfood-script

Conversation

@noahgift

Copy link
Copy Markdown
Contributor

Summary

Adds two deliverables on top of #1902:

  1. scripts/dogfood-book.sh — end-to-end book gate, runs every Phase 1-5 structural check + advisory Phase 6 + final mdbook build. Emits single GO/WARN/FAIL verdict.

  2. docs/specifications/book-execution-validation-harness-spec.md — comprehensive Phase 6 design from a Plan-agent pass. ~417 lines, six sub-PRs (6a-6f), three-tier annotation migration, four new CI jobs.

Local dogfood result on this branch

VERDICT: WARN  (2 warned, 9 passed; Phase 6 deferred is expected)

WARN is expected — Phase 6 (execution validation) is the OPEN spec, not the shipped state.

bashrs / pv / pmat compliance

🤖 Generated with Claude Code

noahgift added 11 commits May 23, 2026 17:39
…han chapters (Refs #1864-dogfood)

mdbook-linkcheck on origin/main reported 168 broken links. Triage:

- 91 link tags pointed to files that don't exist anywhere in the book
  (e.g. `[Linear Regression](./linear-regression.md)` when the canonical
  page is `./ml-fundamentals/linear-regression.md`, or pages that were
  never authored like `./iris-clustering.md`). Stripped the link
  syntax `[text](broken)` → `text`, preserving the prose.
- 6 example chapters existed on disk but weren't in SUMMARY.md
  (bench-bpe, gpu-fallback-dogfood, qa-run, qa-serve, qa-verify,
  shell-encryption-demo). Added to the examples block alphabetically.

Post-fix: 0 broken file links. Book builds clean with mdbook-linkcheck.
…hapter coverage

Closes the book gap before hiatus per docs/specifications/book-completeness-spec.md.

## What's in this PR

**Phase 2 (CLI stub generation)**:
- 103 new chapters at `book/src/cli/<cmd>.md`, one per `apr <cmd>`
- Each stub has PCU header, command synopsis, **at least one runnable bash
  example** (curated per-command, not just `apr --help`)
- 103 new PCU contracts at `contracts/apr-page-cli-<cmd>-v1.yaml`
- All 103 entries added to `book/src/SUMMARY.md` under a new `# CLI Reference` section
- Generator: `scripts/gen-cli-chapter-stubs.sh` (regenerate any missing stub)

**Phase 1 (linkcheck CI gate)**:
- `scripts/check_book_linkcheck.sh` — `mdbook-linkcheck --standalone` must report 0 file-not-found
- Wired into `.github/workflows/book.yml` as a required step

**Phase 4 (completeness contract + CI gate)**:
- `contracts/apr-book-completeness-v1.yaml` — top-level book contract (3 falsifiers)
- `scripts/check_book_cli_parity.sh` — `count(apr <cmd>) == count(book/src/cli/*.md)` (FALSIFY-BOOK-CLI-PARITY-001)
- `scripts/check_book_example_block.sh` — every `book/src/cli/*.md` has ≥1 fenced bash example (FALSIFY-BOOK-EXAMPLE-001)
- All 3 wired into `book.yml`

## Verification (local)

- ✓ `cd book && mdbook build` clean (still 0 broken links post-#1901 stack)
- ✓ `bash scripts/check_book_linkcheck.sh` — 0 broken file links
- ✓ `bash scripts/check_book_cli_parity.sh` — 103/103 CLI coverage
- ✓ `bash scripts/check_book_example_block.sh` — 103/103 chapters have bash example
- ✓ `pv validate contracts/apr-book-completeness-v1.yaml` — 0 errors
- ✓ `pv validate contracts/apr-page-cli-run-v1.yaml` (sample) — 0 errors

## Deferred (not in this PR)

- Phase 3 (library module stubs) — separate PR, ~1.5h
- Phase 5 (README contract extension) — separate PR, ~30min
- Authoring real walkthroughs to replace `<!-- TODO: walkthrough -->` — stubs are scaffolds, the gate enforces shape not content depth

## Why stubs have real examples not just `apr <cmd> --help`

The user-stated constraint: every stub MUST contain at least one runnable example. The generator's `EXAMPLE[]` table maps each command to a hand-curated invocation (e.g. `apr run` → `apr run qwen2.5-coder-1.5b "What is 2+2?" --max-tokens 16`). Commands not in the table fall back to `apr <cmd> --help`, which is still runnable.
…EOUT-001)

Adds book chapter stubs for every public module in aprender-core:
- 69 new files at book/src/lib/<mod>.md
- 69 new PCU contracts at contracts/apr-page-lib-<mod>-v1.yaml
- Each stub has PCU header + module reference + runnable rust example
- All 69 added to SUMMARY.md under a new `# Library Reference` section

New gates wired into .github/workflows/book.yml:
- scripts/check_book_lib_parity.sh — count(pub mod) == count(book/src/lib/*.md)
- scripts/check_book_lib_example_block.sh — every chapter has ```rust block

Extended contracts/apr-book-completeness-v1.yaml with 2 new falsifiers:
- FALSIFY-BOOK-LIB-PARITY-001
- FALSIFY-BOOK-LIB-EXAMPLE-001

Local verification: 0 broken links, 103/103 CLI + 69/69 lib parity, all
examples present.
Extends contracts/readme-claims-v1.yaml with 2 new falsifiers gating
book coverage:
- FALSIFY-README-005: count(book/src/cli/*.md) == count(apr <cmd>)
- FALSIFY-README-006: count(book/src/lib/*.md) == count(pub mod in aprender-core)

README's At-HEAD table now claims:
- Book CLI chapters: 103
- Book lib chapters: 69
- Provable contracts: bumped to reflect actual count (172 new PCU contracts)

QA gate QA-README-001 extended from 4→6 checks.

Closes BOOK-CLOSEOUT-001 Phase 5 (full spec: docs/specifications/book-completeness-spec.md).
…ess (honest scope)

Adds Phase 6 to docs/specifications/book-completeness-spec.md framing the
shape-vs-behavior gap honestly per the five-whys answer.

Phases 1-5 (shipped in this PR) enforce STRUCTURAL correctness:
- chapter exists, mentions command/module, has fenced bash/rust block

They do NOT enforce BEHAVIORAL correctness:
- bash code actually runs
- rust code actually compiles
- output matches prose claims

Phase 6 sketches the closure:
- Per-chapter `<!-- example-cost: trivial|model-required|gpu|destructive -->` annotation
- scripts/extract-book-examples.sh + per-cost-class executor
- New falsifiers FALSIFY-BOOK-EXAMPLE-EXECUTES-001 + FALSIFY-BOOK-EXAMPLE-COMPILES-001
- Docker fixture + model cache prerequisite

Estimate 8-12 hr. Deferred to post-hiatus. Documented here so the gap is
contract-visible, not silently shipped as "tested examples" when they're
structurally-scaffolded only.

Also adds an explicit "Honest scope statement" section.
Per CLAUDE.md "Use bashrs not shellcheck": adds a CI step running bashrs
lint against check_book_*.sh scripts. gen-*-stubs.sh excluded because
their heredoc markdown templates contain intentional em-dashes that
bashrs SC1100-flags as unicode-dash errors (but the em-dashes are
correct typography in the generated book output).

Per CLAUDE.md "DOGFOOD pv, NEVER bash" for contracts: adds an explicit
pv validate step for apr-book-completeness-v1.yaml.

Adds pmat comply check as an advisory step (does not fail CI if pmat
isn't on the runner; emits ::warning:: instead).

Locally:
- bashrs lint scripts/check_book_*.sh: 0 errors
- pv validate contracts/apr-book-completeness-v1.yaml: 0 errors / 0 warnings
- All 5 structural gates pass

Layered on top of #1902's Phase 1-5 + Phase 6 spec.
Adds the close-out dogfood script (scripts/dogfood-book.sh):
- Runs every Phase 1-5 structural gate
- Reports per-phase PASS/WARN/FAIL
- Phase 6 (execution validation) is advisory until the harness ships
- Single GO/WARN/FAIL verdict
- bashrs lint clean (0 errors)

Adds the comprehensive Phase 6 spec from sub-agent design pass:
docs/specifications/book-execution-validation-harness-spec.md

Phase 6 spec details (~500 lines):
- Mandatory <!-- example-cost: ... --> annotation (closed-set classes)
- Extractor: scripts/extract-book-examples.sh emits NDJSON per block
- Per-cost-class executor (trivial / model-required / gpu / destructive / skip / compile-only)
- Rust compile harness: generated examples/book_<slug>.rs + single cargo check
- 4 new CI jobs (compile, exec-cpu, exec-gpu, gpu-aggregate)
- 3-tier annotation migration: auto-classifier (~70%) + manual (~25%) + LLM (~5%)
- 6-PR phased migration with informational-then-blocking cutover
- Revised estimate 16-18 hr (vs parent spec's 8-12)

Top 5 design decisions:
1. Mandatory annotation, no default (prevents silent misclassification)
2. Single cargo check (3-5x faster than mdbook test per-block)
3. Explicit mock_as= for destructive (not every command has --dry-run)
4. CPU/GPU split + aggregator (prevents silent GPU-runner skip)
5. 6-PR migration (gate never enabled-but-unsatisfiable)

Layered on top of #1902 — does not block #1902 from merging.
@noahgift
noahgift enabled auto-merge (squash) May 23, 2026 16:16
@noahgift
noahgift merged commit 7c0dc43 into main May 23, 2026
17 of 18 checks passed
@noahgift
noahgift deleted the chore/book-dogfood-script branch May 23, 2026 16:40
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.

1 participant