{
  "module": "10 — Observability & Debugging",
  "course": "Master Course — Harness Engineering",
  "version": "1.0.0", "duration_minutes": 30, "total_questions": 10,
  "bloom_distribution": { "target": "20/40/40", "actual": { "recall": 2, "application": 4, "analysis": 4 } },
  "passing_score_percent": 70,
  "questions": [
    { "id": "Q01", "bloom": "recall", "type": "multiple_choice", "prompt": "Which observability layer is the foundation?", "options": ["Metrics", "Structured logs = Module 1.4's 8-field per-turn payload", "Traces", "Session diffing"], "answer_index": 1, "rationale": "The 8-field payload (trace_id, turn, tool, hashes, latency, tokens, stop_reason). Everything else builds on it." },
    { "id": "Q02", "bloom": "recall", "type": "multiple_choice", "prompt": "Name the 5 post-mortem questions.", "options": ["Who/what/when/where/why", "Saw / Decided / Returned / Harness-did / Context-was", "Input/process/output/outcome/impact", "Detect/locate/identify/fix/verify"], "answer_index": 1, "rationale": "In order. Most debugging stops at 'Decided' (Q2); real causes in Saw (Q1), Returned (Q3), Context (Q5)." },
    { "id": "Q03", "bloom": "application", "type": "multiple_choice", "prompt": "An agent fails on turn 35 of a long session but worked in testing (10 turns). What's the likely cause?", "options": ["The model is broken", "Invisible state — context rot (Module 3). Accumulated history degrades the model's grip. Only visible with per-turn observability across long sessions.", "A tool bug", "Network failure"], "answer_index": 1, "rationale": "The invisible-state problem. Long-session bugs are context rot, invisible without the per-turn payload across the full session." },
    { "id": "Q04", "bloom": "application", "type": "multiple_choice", "prompt": "You changed your system prompt and want to know if behavior regressed across a 40-turn task.", "options": ["Re-run and eyeball", "Session diffing — compare the checkpointed/logged sessions before and after the change. Find the divergence point.", "Use a stronger model", "Add more tests"], "answer_index": 1, "rationale": "Session diffing compares two runs to find where behavior diverged — the divergence point is where the prompt change took effect (or caused a regression)." },
    { "id": "Q05", "bloom": "application", "type": "multiple_choice", "prompt": "A bug appears intermittently. How do you reproduce it deterministically?", "options": ["Keep trying until it happens", "Replay-driven debugging — replay the logged session step-by-step from structured logs. Input/output hashes reconstruct exact context.", "Use a different model", "Add logging after the fact"], "answer_index": 1, "rationale": "Replay uses the structured logs (with hashes) to reconstruct the exact context at each turn. Deterministic reproduction, not random retry." },
    { "id": "Q06", "bloom": "application", "type": "multiple_choice", "prompt": "You need production monitoring dashboards for your agent fleet. What do you use?", "options": ["Console.log", "Metrics export via OpenTelemetry/Prometheus. CNCF standard; vendor-neutral. Adopted by major clouds.", "Email alerts", "Manual checking"], "answer_index": 1, "rationale": "OTel/Prometheus for production. The per-turn payload feeds metrics counters; dashboards aggregate. CNCF standard avoids lock-in." },
    { "id": "Q07", "bloom": "analysis", "type": "multiple_choice", "prompt": "Why do 'most debugging stops at Q2' and why is that wrong?", "options": ["Q2 is the answer", "Q2 ('bad model decision') is the symptom. The real cause is usually Q1 (wrong context seen), Q3 (misleading tool return), or Q5 (context rot). The model decided badly BECAUSE it saw/received bad inputs.", "Q2 is unanswerable", "Q2 is too expensive"], "answer_index": 1, "rationale": "Symptom vs cause. The model's decision is downstream of what it saw and what the tool returned. Debugging the decision without debugging its inputs is treating the symptom." },
    { "id": "Q08", "bloom": "analysis", "type": "multiple_choice", "prompt": "Why is observability 'one payload, many consumers'?", "options": ["It's efficient", "The 8-field per-turn payload feeds logs (debugging), metrics (dashboards), AND stuck-loop detection (Module 7). Single instrumentation; multiple consumers. No redundant logging.", "It's required by OTel", "It saves tokens"], "answer_index": 1, "rationale": "The same payload that debugs also monitors and detects. Designing one payload well serves all consumers. This is why Module 1.4's payload is the foundation of the whole course's observability story." },
    { "id": "Q09", "bloom": "analysis", "type": "multiple_choice", "prompt": "Why use OpenTelemetry rather than a proprietary observability tool?", "options": ["It's free", "CNCF-backed standard schema. Avoids vendor lock-in — switch backends (Datadog/Honeycomb/Jaeger) without changing instrumentation. Adopted by all major clouds.", "It's faster", "It's required"], "answer_index": 1, "rationale": "Vendor neutrality. Proprietary instrumentation locks you to one backend. OTel means you instrument once, switch backends freely. The agent-workflow layer is maturing but model/tool layers are stable." },
    { "id": "Q10", "bloom": "analysis", "type": "multiple_choice", "prompt": "A harness emits no per-turn data. What can't you do?", "options": ["Run it", "Debug deterministically (no replay; can't answer the 5 questions); no stuck-loop detection; no cost attribution. An un-observable harness can't be improved.", "Use a model", "Deploy"], "answer_index": 1, "rationale": "Observability is the improvement substrate. Without it: no replay, no post-mortem, no detection, no attribution. The harness is a black box; failures are mysteries." }
  ]
}
