Workshop-kit — build the crew
Doctrine (lab-first): participants leave having done the thing, proven against a
binary done-when, on their stack. Design backward — from what people must do in
production, to the capability that names it, to the assessment that proves it, to the lab
that carries them there. Most teams don't fail for lack of tools; they know what tools do
but not why systems are built that way. Start at the capability, never at the topic.
Read ../forge/references/evidence-rules.md (every stat sourced or flagged; unknowns
never guessed) and ../forge/references/design-rigor.md (participant-facing pieces pass
the QA ladder) before building. Consume design/tokens.css.
H1 · Typed input slots (fill at intake; UNKNOWN is legal, never invented)
AUDIENCE_ROLES: list[{role:str, count:int}] # who + headcount per role
COHORT_SIZE: int # = Σ counts; drives debrief math + breakout staffing
SKILL_BASELINE: str|UNKNOWN # current level; UNKNOWN → start guided + discovery Q
STACK: list[str]|UNKNOWN # tools/langs/platforms labs run on
FORMAT: {in-person|virtual|hybrid}
DURATION_BAND: {half-day|1-day|2-day|multi-day|academy}
CHANGE_APPETITE: {augment|transform|explore}|UNKNOWN # inherited from SYNTHESIS
CAPABILITIES_TO_GAIN: list[Capability] # 3–5, each verb+object+condition+standard,
# each traced → tell:<id> | sponsor-goal:<id>
SPONSOR_GOALS: list[str]
LOGISTICS: str|UNKNOWN # room, breakout capacity, tooling access, network
Mislabeling any slot changes the kit: wrong FORMAT breaks the agenda math (virtual
deltas), wrong SKILL_BASELINE picks the wrong difficulty rung, a guessed STACK produces
labs that can't run. Any unknown STACK/LOGISTICS detail → 01-research/UNKNOWNS.md row
- a one-sentence discovery question. Never guess the stack to keep building.
Typed outputs (write to 06-workshop/): agenda.md · labs/NN-name.md (one per lab)
· facilitator-guide.md · handouts/crib-sheet.md + handouts/monday-morning.md ·
slides (HTML or pptx) · followup.md. Plus atoms → FACTORY/atoms.md.
H2 · Artifact specs + acceptance checklists
Schemas and per-piece acceptance checklists live in references/kit-templates.md — every
piece has a fixed section contract and a checkable acceptance list. The measurable spine:
- agenda.md — block table; header carries computed scheduled-sum, slack %, hands-on
ratio. Accept when rows sum to the window, slack ≥ 10%, ratio ≥ 0.60, every lab row has a
done-when.
- labs/NN-name.md — setup(prerequisites)/exercise(checkpoints ≤10 min)/done-when/
stretch/unstick-notes. Accept when no unstated access + self-sufficient.
- facilitator-guide.md — minute-by-minute run-of-show + expected-wrong-answers table.
Accept when every lab/demo has a tech fallback.
- handouts/ — crib-sheet + one-page Monday-morning checklist. Accept when an absent
participant completes every lab from them alone.
- slides — instructional spine (context→demo→lab launch→debrief), via
pitch-deck
machinery. Accept when zero bullet-wall concept slides + every stat sourced.
- followup.md — 30/60/90 rows, each metric + owner + date; escalation ladder traced to
fresh tells (coordinate with
account-copy).
H3 · Frame → Do → Review → Capture
- Frame — set slots; extract 3–5 capabilities from SYNTHESIS/tells; state the day's
thesis in CHANGE_APPETITE's voice (augment → "your workflow, accelerated"; transform →
"the new way, practiced safely"; explore → "structured discovery").
- Do — design assessments, derive labs (
lab-grammar.md), compute the agenda
(agenda-math.md), build the kit to the templates.
- Review — the rehearse pass + participant-absence test (below) as blocking gates,
then the design-rigor QA ladder on participant-facing pieces.
- Capture — mint atoms to
FACTORY/atoms.md, each typed per ../mint-atoms/references/atom-schema.md: lab patterns that landed → template; timing
actuals vs. planned (feeds the ×1.5 constant per stack/rung) → benchmark; and stuck-points → tell-pattern (new
rows for unstick-notes and the wrong-answers table). A delivery that doesn't write down
what it learned makes the next one no cheaper.
H4 · Scale-native (a harness for X clients, not one workshop)
- Module library. Labs and modules are the reusable unit. A module = capability +
assessment + labs + slides spine, written stack-parameterized. Store generalized modules
in the library; instances only bind the client's stack.
- Client-stack customization is isolated. The stack-specific surface (commands, repos,
credentials, screenshots) lives in the setup/crib-sheet layer; the capability and step
logic stay stack-agnostic. Re-skinning a module for a new client touches only that layer.
- Parallel kit assembly. Independent labs are context-complete packets — build them in
parallel (one agent per lab), then the main pass runs the agenda math and QA across the
set. Labs never depend on each other's build, only on stated prerequisite order.
- Academy = composed bootcamp modules over time. A multi-week academy is bootcamp
modules sequenced with spaced reinforcement between them;
followup.md horizons become
the inter-module scaffolding. Compose, don't re-invent.
H5 · Judgment lives in the references
references/lab-grammar.md — backward design as mechanical grammar: capability format,
assessment design, step derivation, the difficulty ladder, the ≥60% ratio arithmetic.
references/agenda-math.md — block types, duration formulas (debrief scales with cohort;
lab = solo×1.5 + checkpoint overhead), 10% slack, energy-curve placement, virtual deltas,
the cut protocol.
references/kit-templates.md — typed template + acceptance list for every artifact.
H6 · Checkable predicates (machine-verifiable, not vibes)
- Timebox sum: Σ(block minutes) = window − slack, and slack ≥ 0.10 × contact time.
- Ratio: hands_on_minutes / contact_minutes ≥ 0.60, computed from the block table.
- Done-when: every lab has a binary done-when criterion; a lab without one is not done.
- Checkpoint density: no >10-minute span in any lab without a
check: predicate.
- Handout self-sufficiency: each lab completable from the crib-sheet alone.
- Prerequisite closure: no lab depends on unstated access; unknown stack → UNKNOWNS.
H7 · References index
| file |
when to read |
references/lab-grammar.md |
designing any lab; verifying the hands-on ratio |
references/agenda-math.md |
timeboxing; virtual conversion; cutting overflow |
references/kit-templates.md |
building any artifact; running acceptance checks |
../forge/references/evidence-rules.md |
any stat, any unknown |
../forge/references/design-rigor.md |
participant-facing QA ladder + tokens |
H8 · Core invariants
- Every stat in every material is sourced/dated or flagged
EST — no plausible-sounding
numbers (evidence-rules).
- Unknown stack/logistics details go to UNKNOWNS + discovery questions, never guessed —
a lab on an unverified stack is a lab that fails live.
- Every claimed outcome is measurable; every capability has an observable assessment.
- Plain language in all participant-facing pieces; internal machinery stays internal.
- Artifacts ingest only SYNTHESIS-vetted numbers; refined input ⇒ regenerate, never
hand-patch.
H9 · DONE predicate + refusals
DONE when: all contracted files exist · timebox sum verified with ≥10% slack · ratio
≥0.60 computed and recorded · every lab has a done-when and ≤10-min checkpoints · absence
test passes · one lab dry-run completed · follow-up has metrics+owners+dates · every stat
cited · Stage-3b corrections applied · ≥1 atom minted.
Refuse (and say why) when:
- the agenda is overstuffed — the sum overruns or slack < 10% and the cut protocol hasn't
been run. Return the cut options, not a padded-looking agenda.
- a lab rests on unverified
STACK assumptions — surface the UNKNOWNS + discovery
questions instead of guessing tools/versions/access.
- a "capability" is a topic (no observable verb+standard) or has no tell/sponsor trace.
- difficulty jumps to the open rung on an
UNKNOWN baseline.
H10 · Feedback tracing
After delivery/human feedback: log to FACTORY/feedback-loop.md; trace each correction to
the slot, formula, or template line that allowed it (e.g. "lab ran 20 min long" → the ×1.5
constant for that stack/rung → update the atom); apply the fix by regenerating; re-test the
change against 2–3 other module instances so tuning generalizes rather than overfits the
last cohort.
Assembly procedure
- Fill H1 slots from SYNTHESIS/tells; unknowns → UNKNOWNS + discovery questions.
- Extract 3–5 capabilities (verb+object+condition+standard), each traced to a tell or
sponsor goal. Reject topics.
- Module selection/creation: reuse library modules whose capability matches; else create,
generalized and stack-parameterized.
- Design each assessment, then derive labs backward (
lab-grammar.md).
- Compute the agenda (
agenda-math.md): block durations, sum, slack, ratio, energy curve,
virtual deltas if applicable.
- Build the kit to
kit-templates.md; run design-rigor QA on participant-facing pieces.
- Rehearse pass (blocking): re-add every timebox by hand (must equal window − slack);
re-verify the ratio ≥0.60; dry-run one lab end to end on the stated stack, timing it
against its live budget. If any fails → cut protocol / fix, regenerate.
- Participant-absence test (blocking): hand the handouts to a fresh reader mentally —
can they complete every lab without the facilitator's voice? Missing context goes into
the crib-sheet, not left implicit.
- Capture atoms; mark DONE only when H9 holds.
1---2name: workshop-kit3description: Workshop-kit — build the crew4---56# Workshop-kit — build the crew78Doctrine (lab-first): participants leave having **done** the thing, proven against a9binary done-when, on **their** stack. Design backward — from what people must do in10production, to the capability that names it, to the assessment that proves it, to the lab11that carries them there. Most teams don't fail for lack of tools; they know *what* tools do12but not *why* systems are built that way. Start at the capability, never at the topic.1314Read `../forge/references/evidence-rules.md` (every stat sourced or flagged; unknowns15never guessed) and `../forge/references/design-rigor.md` (participant-facing pieces pass16the QA ladder) before building. Consume `design/tokens.css`.1718## H1 · Typed input slots (fill at intake; `UNKNOWN` is legal, never invented)1920```21AUDIENCE_ROLES: list[{role:str, count:int}] # who + headcount per role22COHORT_SIZE: int # = Σ counts; drives debrief math + breakout staffing23SKILL_BASELINE: str|UNKNOWN # current level; UNKNOWN → start guided + discovery Q24STACK: list[str]|UNKNOWN # tools/langs/platforms labs run on25FORMAT: {in-person|virtual|hybrid}26DURATION_BAND: {half-day|1-day|2-day|multi-day|academy}27CHANGE_APPETITE: {augment|transform|explore}|UNKNOWN # inherited from SYNTHESIS28CAPABILITIES_TO_GAIN: list[Capability] # 3–5, each verb+object+condition+standard,29 # each traced → tell:<id> | sponsor-goal:<id>30SPONSOR_GOALS: list[str]31LOGISTICS: str|UNKNOWN # room, breakout capacity, tooling access, network32```3334Mislabeling any slot changes the kit: wrong `FORMAT` breaks the agenda math (virtual35deltas), wrong `SKILL_BASELINE` picks the wrong difficulty rung, a guessed `STACK` produces36labs that can't run. Any unknown `STACK`/`LOGISTICS` detail → `01-research/UNKNOWNS.md` row37+ a one-sentence discovery question. **Never guess the stack to keep building.**3839**Typed outputs** (write to `06-workshop/`): `agenda.md` · `labs/NN-name.md` (one per lab)40· `facilitator-guide.md` · `handouts/crib-sheet.md` + `handouts/monday-morning.md` ·41`slides` (HTML or pptx) · `followup.md`. Plus atoms → `FACTORY/atoms.md`.4243## H2 · Artifact specs + acceptance checklists4445Schemas and per-piece acceptance checklists live in `references/kit-templates.md` — every46piece has a fixed section contract and a checkable acceptance list. The measurable spine:4748- **agenda.md** — block table; header carries computed scheduled-sum, slack %, hands-on49 ratio. Accept when rows sum to the window, slack ≥ 10%, ratio ≥ 0.60, every lab row has a50 done-when.51- **labs/NN-name.md** — setup(prerequisites)/exercise(checkpoints ≤10 min)/done-when/52 stretch/unstick-notes. Accept when no unstated access + self-sufficient.53- **facilitator-guide.md** — minute-by-minute run-of-show + expected-wrong-answers table.54 Accept when every lab/demo has a tech fallback.55- **handouts/** — crib-sheet + one-page Monday-morning checklist. Accept when an absent56 participant completes every lab from them alone.57- **slides** — instructional spine (context→demo→lab launch→debrief), via `pitch-deck`58 machinery. Accept when zero bullet-wall concept slides + every stat sourced.59- **followup.md** — 30/60/90 rows, each metric + owner + date; escalation ladder traced to60 fresh tells (coordinate with `account-copy`).6162## H3 · Frame → Do → Review → Capture63641. **Frame** — set slots; extract 3–5 capabilities from SYNTHESIS/tells; state the day's65 thesis in CHANGE_APPETITE's voice (augment → "your workflow, accelerated"; transform →66 "the new way, practiced safely"; explore → "structured discovery").672. **Do** — design assessments, derive labs (`lab-grammar.md`), compute the agenda68 (`agenda-math.md`), build the kit to the templates.693. **Review** — the rehearse pass + participant-absence test (below) as blocking gates,70 then the design-rigor QA ladder on participant-facing pieces.714. **Capture** — mint atoms to `FACTORY/atoms.md`, each typed per `../mint-atoms/references/atom-schema.md`: lab patterns that landed → `template`; **timing72 actuals vs. planned** (feeds the ×1.5 constant per stack/rung) → `benchmark`; and stuck-points → `tell-pattern` (new73 rows for unstick-notes and the wrong-answers table). A delivery that doesn't write down74 what it learned makes the next one no cheaper.7576## H4 · Scale-native (a harness for X clients, not one workshop)7778- **Module library.** Labs and modules are the reusable unit. A module = capability +79 assessment + labs + slides spine, written stack-parameterized. Store generalized modules80 in the library; instances only bind the client's stack.81- **Client-stack customization is isolated.** The stack-specific surface (commands, repos,82 credentials, screenshots) lives in the setup/crib-sheet layer; the capability and step83 logic stay stack-agnostic. Re-skinning a module for a new client touches only that layer.84- **Parallel kit assembly.** Independent labs are context-complete packets — build them in85 parallel (one agent per lab), then the main pass runs the agenda math and QA across the86 set. Labs never depend on each other's *build*, only on stated prerequisite *order*.87- **Academy = composed bootcamp modules over time.** A multi-week academy is bootcamp88 modules sequenced with spaced reinforcement between them; `followup.md` horizons become89 the inter-module scaffolding. Compose, don't re-invent.9091## H5 · Judgment lives in the references9293- `references/lab-grammar.md` — backward design as mechanical grammar: capability format,94 assessment design, step derivation, the difficulty ladder, the ≥60% ratio arithmetic.95- `references/agenda-math.md` — block types, duration formulas (debrief scales with cohort;96 lab = solo×1.5 + checkpoint overhead), 10% slack, energy-curve placement, virtual deltas,97 the cut protocol.98- `references/kit-templates.md` — typed template + acceptance list for every artifact.99100## H6 · Checkable predicates (machine-verifiable, not vibes)101102- **Timebox sum:** Σ(block minutes) = window − slack, and slack ≥ 0.10 × contact time.103- **Ratio:** hands_on_minutes / contact_minutes ≥ 0.60, computed from the block table.104- **Done-when:** every lab has a binary done-when criterion; a lab without one is not done.105- **Checkpoint density:** no >10-minute span in any lab without a `check:` predicate.106- **Handout self-sufficiency:** each lab completable from the crib-sheet alone.107- **Prerequisite closure:** no lab depends on unstated access; unknown stack → UNKNOWNS.108109## H7 · References index110111| file | when to read |112|---|---|113| `references/lab-grammar.md` | designing any lab; verifying the hands-on ratio |114| `references/agenda-math.md` | timeboxing; virtual conversion; cutting overflow |115| `references/kit-templates.md` | building any artifact; running acceptance checks |116| `../forge/references/evidence-rules.md` | any stat, any unknown |117| `../forge/references/design-rigor.md` | participant-facing QA ladder + tokens |118119## H8 · Core invariants1201211. Every stat in every material is sourced/dated or flagged `EST` — no plausible-sounding122 numbers (evidence-rules).1232. Unknown stack/logistics details go to UNKNOWNS + discovery questions, **never guessed** —124 a lab on an unverified stack is a lab that fails live.1253. Every claimed outcome is measurable; every capability has an observable assessment.1264. Plain language in all participant-facing pieces; internal machinery stays internal.1275. Artifacts ingest only SYNTHESIS-vetted numbers; refined input ⇒ regenerate, never128 hand-patch.129130## H9 · DONE predicate + refusals131132**DONE when:** all contracted files exist · timebox sum verified with ≥10% slack · ratio133≥0.60 computed and recorded · every lab has a done-when and ≤10-min checkpoints · absence134test passes · one lab dry-run completed · follow-up has metrics+owners+dates · every stat135cited · Stage-3b corrections applied · ≥1 atom minted.136137**Refuse (and say why) when:**138- the agenda is overstuffed — the sum overruns or slack < 10% and the cut protocol hasn't139 been run. Return the cut options, not a padded-looking agenda.140- a lab rests on unverified `STACK` assumptions — surface the UNKNOWNS + discovery141 questions instead of guessing tools/versions/access.142- a "capability" is a topic (no observable verb+standard) or has no tell/sponsor trace.143- difficulty jumps to the open rung on an `UNKNOWN` baseline.144145## H10 · Feedback tracing146147After delivery/human feedback: log to `FACTORY/feedback-loop.md`; trace each correction to148the slot, formula, or template line that allowed it (e.g. "lab ran 20 min long" → the ×1.5149constant for that stack/rung → update the atom); apply the fix by regenerating; re-test the150change against 2–3 other module instances so tuning generalizes rather than overfits the151last cohort.152153## Assembly procedure1541551. Fill H1 slots from SYNTHESIS/tells; unknowns → UNKNOWNS + discovery questions.1562. Extract 3–5 capabilities (verb+object+condition+standard), each traced to a tell or157 sponsor goal. Reject topics.1583. Module selection/creation: reuse library modules whose capability matches; else create,159 generalized and stack-parameterized.1604. Design each assessment, then derive labs backward (`lab-grammar.md`).1615. Compute the agenda (`agenda-math.md`): block durations, sum, slack, ratio, energy curve,162 virtual deltas if applicable.1636. Build the kit to `kit-templates.md`; run design-rigor QA on participant-facing pieces.1647. **Rehearse pass (blocking):** re-add every timebox by hand (must equal window − slack);165 re-verify the ratio ≥0.60; **dry-run one lab end to end** on the stated stack, timing it166 against its live budget. If any fails → cut protocol / fix, regenerate.1678. **Participant-absence test (blocking):** hand the handouts to a fresh reader mentally —168 can they complete every lab without the facilitator's voice? Missing context goes into169 the crib-sheet, not left implicit.1709. Capture atoms; mark DONE only when H9 holds.