🧪Lesson 02AI Engineer Loopcraft Workshop 2026
Make bad input fail loudly
Turn VISION.md into one local event file, one check command, tests, and a saved receipt from a real run.
Create one local event file and one check command. The command should read every row, fail loudly on bad input, print ready / approval-required / input-required items, and save enough output that the next pass can trust what happened.
Your next move
You already have
- VISION.md boundaries from Lesson 01.
- No local issue data or check command yet.
Add now
- One local JSONL event file with ready, approval-required, and input-required examples.
- One check command that validates every row, prints classifications and stop reasons, and saves a receipt from real output.
- Tests that prove good rows classify and malformed rows fail with a useful error.
Stop before
- Moving approval-required or input-required work forward.
- Adding auth, external issue APIs, GitHub writes, schedulers, or background workers.
Tiny check output shape
file: data/issue-events.jsonl
command: pnpm run check:issues
read: 3 events
ready: ISSUE-001
approval-required: ISSUE-002 — needs human approval
input-required: ISSUE-003 — missing acceptance criteria
refused: ISSUE-002, ISSUE-003
receipt: receipts/issue-check-001.jsonStarter prompt
Starter prompt
Use VISION.md from Lesson 01. Create issues.jsonl or data/issue-events.jsonl with ready, approval-required, and input-required examples. Add the smallest local check command that validates every row, fails loudly on bad input, prints the file read, event count, classifications, stop reasons, next allowed action, and refused action. Add tests, run the commands from the repo root, and save one receipt from real output. Keep it local; do not add auth, external issue APIs, GitHub writes, schedulers, or background workers yet.Build checklist
0/7 done
Read the rules
Add local events
Add fast checks
Validate and classify
Save command output
Proof to save
Save proof from the event file, the commands, and the failing-input test.
- A local event file exists at issues.jsonl or data/issue-events.jsonl with ready, approval-required, and input-required examples.
- The check command runs from the repo root and prints the file read, event count, classifications, stop reasons, next action, and refused action.
- Tests prove good rows classify correctly and one malformed row fails with a useful error.
- One saved receipt or run log shows real command output, not a hand-written summary.
- file: issues.jsonl or data/issue-events.jsonl
- command: typecheck, tests, and the local issue check
- output: event count and ready / approval-required / input-required groups
- stop condition: bad input fails; approval-required and input-required items do not move
- receipt: saved run log or receipt path
Done when
A fresh reader can run the typecheck, tests, and issue check from the repo root, see clear classifications, watch malformed input fail, and find the saved receipt.
Why it matters
- Risk reduced: bad input fails before an agent can build on it.
- Temptation avoided: wiring UI, GitHub, or scheduling before the local facts are trustworthy.
- Do not automate yet: claiming work, writing to trackers, or running implementation passes.
Try this 🔨
Change one event field to an invalid value, run the check, and confirm the error tells you which row failed.
Exploration prompts
Use these when you want to ask an agent for a narrower pass instead of handing it the whole lesson.
Design event examples
Using VISION.md, propose three local issue-event examples: ready, approval_required, and input_required. Include fields and one sentence explaining each classification. Do not create files until I approve.Review the check command
Inspect package scripts, parsers, tests, and check output. Tell me the exact command that proves the local event file works and what evidence the receipt should save.Break a bad input
Create or describe one malformed issue event that should fail validation. Explain the expected error and which test should cover it. Do not weaken the parser.