B2 Failure Literacy — A Failure Log For The Agent-Assisted Pipeline
Standard: AIHC.2.B2 · Bloom's: Analyze · Structure: PBL.
Notice the Say-See-Do cycles running on Maya R.'s actual work — not a canned exercise — and that every capability claim is cited to the frozen doc-set. The exit ticket climbs Bloom's to Analyze, and the lesson closes by writing to the ledger.
Learning objective
(Bloom's: Analyze) Analyze the characteristic ways your agent-assisted review pipeline can
fail — context loss, permission surprises, and ungrounded references (hallucinated
paths/claims) — by tracing each to the frozen mechanism that permits it, and institute a
running failure log for payments-service in which every entry crystallizes into a rule, a
hook, or a tightened contract — AIHC.2.B2 (Failure literacy).
Work at hand: lesson 5 ended with two live findings nobody has filed anywhere: the
FEE_RATE must-not-change wording ambiguity, and the missing rounding-mode note. Today they
become entries 1 and 2 of payments-service/docs/failure-log.md — and the log becomes the
PFI-style habit your verifier role runs on: every failure documented as a proposed
failure-mode incident (trigger → observed behavior → gap → rule), before the fix, so the
pipeline learns instead of just you.
SSD cycle 1 — context loss: your rules are context, not law, and sometimes not even loaded
- SAY: The standing specification you wrote in lesson 2 (the CLAUDE.md Decimal rule) can fail in two distinct ways, and both are documented mechanisms, not bugs: it can be loaded and not followed, or not loaded at all. Failure literacy means knowing which one you're looking at before you write the fix.
- SEE: The two mechanisms, from the doc-set, applied to your rule:
LOADED BUT SOFT §4 Memory: CLAUDE.md is "context, not enforced config"; it has "no compliance guarantee," and "contradicting rules across files get resolved arbitrarily." Diagnosis tool: /context shows what actually loaded. NOT LOADED AT ALL §8 Subagents: "Explore and Plan are the two exceptions that skip loading CLAUDE.md" — so any research you delegate to those two built-ins runs WITHOUT your Decimal rule in view. Every other built-in and custom subagent loads it.Yourpayments-first-pass-reviewerloads the rule; a quickExploreerrand does not. Same repo, same rule, different truth — and neither is a model deficiency; both are documented scope you hadn't yet mapped (AIHC X11: read the unmet expectation as a scaffolding gap to fill, not a defect to blame). - DO: Create
payments-service/docs/failure-log.mdand file entry 1 — lesson 5's missing rounding-mode note — in four fields: trigger (what was asked), observed (what came back), gap (which mechanism above explains it — was the rule loaded? run/contextin the session and record the answer), rule (leave blank; cycle 3 fills it). Then check your own habits: list which of your delegations from lessons 3–5 ran through built-ins that skip CLAUDE.md, and note whether any conclusion you kept came from a session your rules never reached.
SSD cycle 2 — permission surprises and ungrounded references: the other two entries
- SAY: Two more characteristic failure shapes, one grounded in frozen permission
mechanics, one in reference discipline. Permission surprises: the permission behavior
you set on a subagent is not absolute — §8: a subagent's
permissionModecan be overridden, because "a parent session inbypassPermissions/acceptEditstakes precedence and can't be overridden"; and §9: rules merge across settings scopes withdenyalways winning, and project-levelallowrules need a one-time workspace-trust approval — so a teammate cloningpayments-servicegets prompts you stopped seeing months ago. Ungrounded references: an agent report can name a path or test that does not exist in your repo — the doc-set's grounding tools are the countermeasure:@fileinlines the actual file (§3), and lesson 5's rule already covers the rest: a named check gets run, not believed. The failure-mode label "hallucinated paths" itself is [instructor synthesis] — the doc-set documents the grounding mechanisms, not a failure taxonomy; the taxonomy move comes from AIHC B2/P7. - SEE: Both shapes as they would land in your pipeline, one line each:
PERMISSION SURPRISE Your reviewer runs inside your acceptEdits parent session → its own prompt behavior yields to the parent's (§8). The read-only guarantee you're relying on is its tools: allowlist (Read, Grep, Glob — no edit tools granted), not its permissionMode. UNGROUNDED REFERENCE First-pass report cites tests/payments/test_fees.py as evidence. Your repo's file is test_fee_calculation.py. The citation is load-bearing and false; @-check would have caught it in one line. - DO: File entries 2 and 3 in your log: entry 2 = lesson 5's FEE_RATE wording ambiguity (a contract gap, filed under specification failures — gap field names your own contract, not the agent); entry 3 = a permission-or-grounding failure from your own sessions this week (pick a real one; if genuinely none occurred yet, file the §8 parent-precedence surprise as a proposed failure mode you now know to watch for — that's the PFI habit: proposed incidents count, labeled as proposed).
SSD cycle 3 — crystallize: every entry ends in a rule, and rules have three strengths
- SAY: A failure log that only describes is a diary. The B2 habit closes each entry by choosing the weakest mechanism that actually prevents recurrence, and the doc-set gives you exactly three strengths [instructor synthesis, from §10]: CLAUDE.md (persistent but soft — §4), a tightened contract check (runs when you run it — lesson 5), or a hook (§6: hooks exist to ensure "certain actions always happen rather than relying on the LLM to choose to run them" — the only deterministic one, AIHC X4).
- SEE: The doc-set's own hook example (§6, verbatim) next to the crystallization it
suggests for your entry 1:
json { "hooks": { "PostToolUse": [ { "matcher": "Edit|Write", "hooks": [ { "type": "command", "command": "jq -r '.tool_input.file_path' | xargs npx prettier --write" } ] } ] } }Entry 1 (rounding-mode note keeps going missing) is a candidate for the samePostToolUseshape: after any edit undersrc/payments/, run the contract's test file automatically — the note requirement stops depending on anyone remembering it. Entry 2 (contract wording) is NOT a hook problem: it crystallizes as tightened contract text. Matching the fix's strength to the failure's mechanism is the analysis this lesson is named for. (A band that fell apart in the same break twice doesn't rehearse the whole chart again — the bandleader marks that bar and drills the break itself.) - DO: Fill the rule field for all three entries: name the mechanism chosen (CLAUDE.md
line / contract check / hook), the one-line content of the rule, and why this strength and
not a stronger or weaker one. Draft the actual hook JSON for whichever entry you assigned
one (adapt the §6 example; put it in
.claude/settings.jsonper §6's configuration locations so it's shared with the team).
Independent at-bat
Fully unscaffolded, and it closes your arc: run one real PR through the full pipeline you have now built — contract (L2), scoped delegation (L3), elicitation checkpoint (L4), four-leg verification record (L5) — and when anything fails anywhere in that run, file it in the log and crystallize it before you fix it. If the run comes back clean, file that too, with the evidence line that makes "clean" a checked claim rather than a vibe. This at-bat is your profile's stated learning goal ("run one real PR through an agent-assisted review I actually trust") — the log entry is what "actually trust" now means: trusted because instrumented.
Exit ticket
(Graded against your failure log, your hook draft, and the cited doc-set sections — never against an agent's account of why it failed.)
- (Remember) Name your log's three entries and the four fields each one carries.
- (Understand) Per §8, your reviewer's read-only behavior rests on its
tools:allowlist rather than itspermissionMode. Why does the parent session's mode make that distinction matter? - (Apply) Next week the reviewer cites a checklist item number that doesn't exist in
review-checklist.md. Write the complete four-field log entry, including the crystallized rule and its chosen strength. - (Analyze) Entry 1 got a hook; entry 2 got contract text. Trace each choice back to the mechanism that permitted the failure, and explain why swapping the two fixes would leave both failures able to recur.
- (Evaluate) Judge your pipeline after the at-bat: which single log entry, if its rule were deleted tomorrow, would make you stop trusting the pipeline first — and does that answer change where you spend your next hardening hour?
ledger_write
ledger_write:
learner_id: L1-DEV-MAYA
lesson_id: L1-dev-maya-06-b2-failure-literacy
anchors: [AIHC.2.B2]
bloom_reached: Analyze
exit_ticket_score: ""
auto_score: ""
self_score: ""
calibration_gap: " — computed once Maya's self_score exists"
starting_mastery:
AIHC.2.B2: "not previously evidenced — first measurement this lesson"
journal_prompt: >
Before this arc, a pipeline failure meant "the agent messed up." Reread your three log
entries: how many gap fields actually name the agent, versus your contract, your rule
placement, or a documented mechanism you hadn't mapped? Write what that ratio does to
how you'll talk about the next failure in standup.
structure_used: PBL
referents_used: [salsa-fania-bandleader]
next_lesson_seed: >
Arc complete — learning goal at-bat taken. Next arc candidate per ledger: AIHC.1.D1
(orchestration, still band 1 / 0.30) once the single-reviewer pipeline is stable; or a
B2 follow-up at Evaluate if the at-bat's log entries show mechanism-tracing still shaky.
RUBRIC SELF-AUDIT
| # | Indicator | Verdict | Evidence |
|---|---|---|---|
| R1 | One objective, Bloom's-leveled, named anchor | PASS | States "Bloom's: Analyze," names AIHC.2.B2 only |
| R2 | Every tool claim traces to the doc-set | PASS | §4 (context-not-config, /context, arbitrary conflict resolution), §8 (Explore/Plan skip CLAUDE.md; parent-mode precedence; tools allowlist), §9 (deny wins merge; workspace-trust for project allow), §6 (hooks definition + verbatim JSON example, config locations), §3 (@-references) all cited at point of use; the two non-verbatim framings (the failure-mode taxonomy label, the three-strengths ladder) are explicitly flagged [instructor synthesis] per the doc-set §10 rule |
| R3 | 3–6 cycles, one point each | PASS | 3 cycles: context loss's two distinct mechanisms; the other two failure shapes as log entries; crystallization with strength-matching |
| R4 | SEE verified against ground truth | PASS | Every SEE quotes frozen doc-set mechanisms verbatim or shows her own artifacts; the wrong-filename example uses her real test filename established in lessons 1–5; nothing presented as product fact exceeds the freeze |
| R5 | Every DO on real work-at-hand | PASS | DOs create her real failure-log.md, file her two real lesson-5 findings, audit her own lessons-3–5 sessions, and draft a hook in her repo's settings |
| R6 | Media doctrine honored | PASS | Static text/JSON/tables only; no motion/process content |
| R7 | Exit ticket 3–5 Qs, Bloom's-climbing | PASS | 5 Qs, Remember→Understand→Apply→Analyze→Evaluate, graded against her log/hook/doc-set |
| R8 | Ledger write complete | PASS | auto_score/self_score = ""; journal prompt present; arc-close seed recorded |
| R9 | Scaffolding fades; at-bat genuinely independent | PASS | Deepest fade of the arc: cycle 1 gives the last worked diagnosis, cycle 2 gives one-line shapes only, cycle 3's DO is her own analysis, and the at-bat is the full pipeline with zero scaffolding — completing the 2→6 fade |
| R10 | Referents elected-only, flavor-only | PASS | One Fania bandleader referent (cycle 3), decorative; the strength-matching point stands without it |
| R11 | Info-at-point-of-use honored | PASS | Each doc-set citation appears inside the exact SEE/DO that needs it; no front-loaded reading; even the synthesis flags sit inline where the claim occurs |
| R12 | No replication | PASS | Failure log, entry contents, and hook target are specific to payments-service's lesson-5 findings; the exemplar contains no failure-log, hook, or mechanism-tracing content; DOs/exit Qs distinct from lessons 1–5 |
Escalation: all load-bearing indicators PASS → auto-ships (Playbook §5, AIHC X2/B3).