feat(workshop): port spec→plan→compile pattern (4th instance) (v5.59.0)#24
Merged
Merged
Conversation
Workshop is writing's TWIN — flat-parallel section fan-out, compile=DATA
work-list, no per-project run.js, no DAG. Distinct: a rich-mechanical floor
(typst compile + check-all.py REAL exit codes) + a semantic ceiling.
- ONE shared parser scripts/workshop/workshop_slide_table.py (canonical 7-col
TABLE + legacy 4-field PROSE; tolerant-at-parser, canonical-at-emitter).
Kills the doubled LLM-Discover drift mask; emits a DATA work-list.
- workshop-generate.js: discFromIndex full-replaces the LLM Discover (no LLM
Discover when slideIndex present); grep-grounded fidelity; notes-compile gate.
- workshop-verify.js: KEEPS slides.typ enumeration + an UNBIASED free-read
semantic join (a candidate-menu biased it → appendix over-match, caught by
n=3 variance); parser contributes a JS inventory whitelist OUTSIDE the agent;
scope:{checked,notChecked} disclosure (D1).
- guard reconciled to validate = build_index().violations (S6, shrank 89 lines);
prose now PASSES → the shipped opv deck no longer rejected (parity-regression
fixed by construction); stale-approval = allow+WARN.
- skills wired to run the parser + pass args.slideIndex (back-compat fallback).
- born-canonical table emitter reconciled; structure-reorder PAUSE fixture.
Parity-validated end-to-end on the real ~/projects/opv deck (opv-parity):
Track A short-circuit byte-identical (zero wasted agents); Track B n=3 clean
(COVERED [21,21,21], appendix over-match [0,0,0]); parser A/B 21/21 generate +
21/21 verify-via-semantic-join; grep-fidelity file-backed; generate end-to-end
PASS. 8 real issues surfaced + folded.
Tests: parser 37/37, guard 6/6, engines 23/23.
D-w-8 (separate fast-follow, NOT in this port): pre-existing permanently-red
check-all.py phantoms + divider-naive overflow + critical/findings count bug.
DESIGN: docs/DESIGN-workshop-spec-plan-compile.md
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01LnjkhBxftHMpZeXmuxCjcE
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.
Summary
Ports the
spec → plan → compiled-runnerpattern to the workshop workflow — the 4th instance after ds/dev (exit-code) and writing (judgment). Workshop is writing's twin: flat-parallel section fan-out,compile = DATA work-list, no per-projectrun.js, no DAG. Distinct contribution: a rich-mechanical floor (typst compile+check-all.pyreal exit codes) + a semantic ceiling — a new gate-type data point for the pass #9 run-core extraction.What changed
scripts/workshop/workshop_slide_table.py(canonical 7-col TABLE + legacy 4-field PROSE; tolerant-at-parser, canonical-at-emitter) replaces the doubled LLM Discover and emits a DATA work-list.workshop-generate.js:discFromIndexfull-replaces the LLM Discover whenslideIndexis passed; grep-grounded inventory fidelity; notes-compile gate (notes were previously ungated — could ship malformed).workshop-verify.js: keeps theslides.typenumeration + an unbiased free-read semantic join (a candidate menu biased it → appendix over-match, caught by n=3 variance); the parser contributes a JS inventory whitelist applied outside the agent;scope:{checked,notChecked}disclosure (D1 / doctrine feat: improve skill scores (+46% avg across 5 skills) #3).validate = build_index().violations(S6, −89 lines). Prose now passes → the shipped opv deck is no longer rejected (parity regression fixed by construction); stale-approval = allow+WARN.args.slideIndex(back-compat fallback). Born-canonical table emitter reconciled; structure-reorder PAUSE fixture.Parity validation (real
~/projects/opvdeck, via theopv-paritypartner)[21,21,21], over-match[0,0,0].~, Track-A count nondeterminism, permanently-red floor, notes gate-gap).Doctrine deepenings (recorded for pass #9)
Tests
parser 37/37 · guard 6/6 · engines 23/23.
Out of scope (separate fast-follow — D-w-8)
Pre-existing mechanical-floor bugs deliberately preserved for parity, fixed separately:
check-all.pyrides cross-domain phantom constraints (→ permanently-red gate on every deck), divider-naive overflow,summary.critical≠findings.length.DESIGN:
docs/DESIGN-workshop-spec-plan-compile.md🤖 Generated with Claude Code