# Plan: Bring 4 sample-artifact pages up to the Papers standard (structured tables)

**Spec/review:** Opus (authored) · **Coder:** Sonnet · **Skills:** ponytail, karpathy, honey
**File:** `scripts/assessment_design_playbook.py`. Replace the `sample_artifact_html` for **Discussions, Quizzes and Exams, Projects, Presentations** with the table-based versions below. **Papers stays exactly as-is** (already the approved prototype). No other change.

## Why
Papers uses two structured tables; the other four used prose block quotes, which are weaker as models because they do not show the artifact format. Each is rebuilt as structured tables matching Papers, same two-model structure, stop-slop clean (no dashes), one page per artifact.

## Constraints
- Swap only the four `sample_artifact_html` strings. Do not touch Papers, category cards, front matter, or CSS (reuse `considerations-table`, `body-text`, `subsection-heading`).
- NO dashes in prose (`--`, em, en). `var(--accent)` in style attributes is fine.
- Full suite green; keep the existing test assertions (each category still has `sample_artifact_html` with "AI-Forward Model" + "AI-Resistant Model" + "Why it earns credit"). Add nothing that weakens tests.
- PDF: every artifact page stays ONE Letter page (12 pages total, unchanged). If any of the four spills, tighten only that page's font/padding; report if it cannot fit.

## Replacement content (verbatim)

### Discussions
```html
<h3 class="category-title">Discussions: Model Artifacts</h3>
<p class="body-text" style="margin-bottom:10px;">Share these with students up front as the models (the Criteria component of TILT). Both come from a weekly discussion that asks students to apply a chapter concept to the assigned case.</p>
<p class="subsection-heading">AI-Forward Model: Critique an AI Post</p>
<p class="body-text" style="margin-bottom:6px;">Use this when AI is permitted and you grade the student's judgment about it.</p>
<table class="considerations-table" style="margin-bottom:8px;">
  <thead><tr><th style="width:44%;">What the AI post claimed</th><th>The student's correction</th></tr></thead>
  <tbody>
    <tr><td>"Groupthink is when a group agrees too much and makes a bad decision."</td><td>Janis defines groupthink as the suppression of dissent for cohesion, which is narrower than simple agreement.</td></tr>
    <tr><td>"The Challenger disaster is an example."</td><td>The post cites no specific pressure. In our case the engineers did raise concerns, so the failure was management overriding dissent, not the absence of disagreement.</td></tr>
    <tr><td>"Teams should talk openly to avoid it."</td><td>Generic. A stronger fix uses Janis's self-censorship symptom and a named devil's advocate, and quotes the meeting notes on page 3.</td></tr>
  </tbody>
</table>
<p class="body-text" style="margin-bottom:0;font-size:12.5px;"><b style="color:var(--accent);">Why it earns credit:</b> the student names each concept error, corrects it from the assigned definition, and grounds the correction in the specific case.</p>
<p class="subsection-heading" style="margin-top:14px;">AI-Resistant Model: A Cohort-Anchored Post</p>
<p class="body-text" style="margin-bottom:6px;">Use this when the securing move is specificity a reusable prompt cannot predict.</p>
<table class="considerations-table" style="margin-bottom:8px;">
  <thead><tr><th style="width:52%;">Passage from the student's post</th><th>The move it makes</th></tr></thead>
  <tbody>
    <tr><td>"In the Week 4 case the product team shows Janis's illusion of unanimity. The meeting notes record no objection, yet two engineers later disagreed (case, p. 3)."</td><td>Cites the specific case and page.</td></tr>
    <tr><td>"Building on Maria's point about the deadline, the launch date created the incentive to self-censor."</td><td>Answers a named peer in the thread.</td></tr>
    <tr><td>"The fix is a named devil's advocate, which our reading ties to lower groupthink."</td><td>Applies a precise concept from the reading.</td></tr>
  </tbody>
</table>
<p class="body-text" style="margin-bottom:0;font-size:12.5px;"><b style="color:var(--accent);">Why it earns credit:</b> the post pins evidence a generic answer could not predict, engages the cohort, and applies the assigned concept.</p>
```

### Quizzes and Exams
```html
<h3 class="category-title">Quizzes and Exams: Model Artifacts</h3>
<p class="body-text" style="margin-bottom:10px;">Share these with students up front as the models (the Criteria component of TILT). Both use a first-year contracts topic.</p>
<p class="subsection-heading">AI-Forward Model: Open-AI Verification</p>
<p class="body-text" style="margin-bottom:6px;">Use this when AI is permitted and you grade the correction, not recall.</p>
<p class="body-text" style="margin-bottom:4px;font-size:12.5px;"><b style="color:var(--accent);">Question:</b> An offer says "open for 10 days." On day 3 the offeror sells the item to someone else and says nothing. On day 5 the offeree accepts. Is there a contract?</p>
<table class="considerations-table" style="margin-bottom:8px;">
  <thead><tr><th style="width:40%;">The AI's answer</th><th>The student's correction</th></tr></thead>
  <tbody>
    <tr><td>"Yes. The offer said 10 days, so it stayed open, and the day-5 acceptance formed a contract."</td><td>A promise to hold an offer open is not binding without consideration, so the 10 days created no option. Selling to a third party is an indirect revocation once the offeree learns of it (Dickinson v. Dodds). If the offeree knew before accepting, no contract formed. The AI applied the wrong rule.</td></tr>
  </tbody>
</table>
<p class="body-text" style="margin-bottom:0;font-size:12.5px;"><b style="color:var(--accent);">Why it earns credit:</b> the student applies the correct doctrine to the facts, names the authority, and states exactly what the AI missed.</p>
<p class="subsection-heading" style="margin-top:14px;">AI-Resistant Model: Recall Item Rebuilt as Application</p>
<p class="body-text" style="margin-bottom:6px;">Use this when the securing move is application items drawn from a randomized pool.</p>
<table class="considerations-table" style="margin-bottom:8px;">
  <thead><tr><th style="width:38%;">Weak recall item (AI-easy)</th><th>Rebuilt application item</th></tr></thead>
  <tbody>
    <tr><td>"Define consideration in contract law."</td><td>"Jordan promises to paint Alex's fence as a favor, for free. Relying on the promise, Alex buys 200 dollars of paint. Jordan backs out. State whether consideration exists and which doctrine, if any, lets Alex recover."</td></tr>
  </tbody>
</table>
<p class="body-text" style="margin-bottom:0;font-size:12.5px;"><b style="color:var(--accent);">Why it earns credit:</b> the student applies the rule to a novel fact pattern and chooses among doctrines, which a lookup does not finish. Draw each student's version from a pool that varies the parties, amounts, and promised act, so no two share an item.</p>
```

### Projects
```html
<h3 class="category-title">Projects: Model Artifacts</h3>
<p class="body-text" style="margin-bottom:10px;">Share these with students up front as the models (the Criteria component of TILT). Both come from a team research project.</p>
<p class="subsection-heading">AI-Forward Model: AI-Use Log</p>
<p class="body-text" style="margin-bottom:6px;">Use this when AI is permitted and you grade the judgment the team applied to it.</p>
<table class="considerations-table" style="margin-bottom:8px;">
  <thead><tr><th style="width:11%;">When</th><th>What AI produced</th><th style="width:15%;">Decision</th><th style="width:27%;">Judgment applied</th></tr></thead>
  <tbody>
    <tr><td>Week 3</td><td>Five draft survey questions, two of them leading ("Do you agree the app is easy to use?").</td><td>Rejected the two, kept two after rewording</td><td>Leading questions bias responses, from our methods reading.</td></tr>
    <tr><td>Week 4</td><td>A suggested chart type for our results.</td><td>Changed</td><td>The AI chose a pie chart for change over time; we used a line chart, which fits time-series data.</td></tr>
  </tbody>
</table>
<p class="body-text" style="margin-bottom:0;font-size:12.5px;"><b style="color:var(--accent);">Why it earns credit:</b> the log names what AI produced, what the team rejected or changed, and the course concept behind each call.</p>
<p class="subsection-heading" style="margin-top:14px;">AI-Resistant Model: Milestone and Contribution Record</p>
<p class="body-text" style="margin-bottom:6px;">Use this when the securing move is a verifiable development trail with individual accountability.</p>
<table class="considerations-table" style="margin-bottom:6px;">
  <thead><tr><th style="width:24%;">Milestone</th><th style="width:12%;">Week</th><th>Evidence submitted</th></tr></thead>
  <tbody>
    <tr><td>Scope proposal</td><td>Week 2</td><td>One-page problem statement and data plan.</td></tr>
    <tr><td>Client check-in</td><td>Week 5</td><td>Midpoint memo with the client's feedback noted.</td></tr>
    <tr><td>Final delivery</td><td>Week 8</td><td>Report plus commit history from October 3 to 20.</td></tr>
  </tbody>
</table>
<p class="body-text" style="margin-bottom:4px;font-size:12.5px;"><b style="color:var(--accent);">Contribution statement:</b> "I built the data pipeline and wrote the limitations section; my teammate ran the interviews and coded the transcripts."</p>
<p class="body-text" style="margin-bottom:0;font-size:12.5px;"><b style="color:var(--accent);">Why it earns credit:</b> dated milestones and per-member contributions tied to commit history create a record one AI submission cannot fake.</p>
```

### Presentations
```html
<h3 class="category-title">Presentations: Model Artifacts</h3>
<p class="body-text" style="margin-bottom:10px;">Share these with students up front as the models (the Criteria component of TILT). Both come from a recorded recommendation talk.</p>
<p class="subsection-heading">AI-Forward Model: Prep-Use Disclosure</p>
<p class="body-text" style="margin-bottom:6px;">Use this when AI is permitted in preparation and disclosed.</p>
<table class="considerations-table" style="margin-bottom:8px;">
  <thead><tr><th style="width:34%;">Where AI helped</th><th>What the student did with it</th></tr></thead>
  <tbody>
    <tr><td>Outlined the talk.</td><td>Kept the structure but rewrote every slide in own words.</td></tr>
    <tr><td>Suggested counterarguments.</td><td>Added the cost counterargument, which the student had not considered, and answered it with the project's data.</td></tr>
    <tr><td>The live question and answer.</td><td>Did not use AI; answered from knowledge of the project.</td></tr>
  </tbody>
</table>
<p class="body-text" style="margin-bottom:0;font-size:12.5px;"><b style="color:var(--accent);">Why it earns credit:</b> the student states what AI contributed, what they changed, and where they did not use it, and the disclosure is graded as part of the talk.</p>
<p class="subsection-heading" style="margin-top:14px;">AI-Resistant Model: Targeted Reflection</p>
<p class="body-text" style="margin-bottom:6px;">Use this when the securing move is a reflection tied to specific feedback.</p>
<table class="considerations-table" style="margin-bottom:8px;">
  <thead><tr><th style="width:30%;">The change</th><th style="width:35%;">The feedback that drove it</th><th>The evidence</th></tr></thead>
  <tbody>
    <tr><td>Moved the central recommendation from adding staff to redesigning the intake form.</td><td>A peer noted on slide 6 that the bottleneck was duplicate data entry, not headcount.</td><td>The project's own intake-time data, re-cited in the cost section.</td></tr>
  </tbody>
</table>
<p class="body-text" style="margin-bottom:0;font-size:12.5px;"><b style="color:var(--accent);">Why it earns credit:</b> the student names a specific change, the exact feedback that drove it, and the evidence, which requires engagement a generic reflection lacks.</p>
```

## Acceptance criteria
1. The 4 categories' `sample_artifact_html` match the blocks above verbatim; Papers unchanged.
2. Each rebuilt artifact uses `considerations-table`(s) for both models, each ending in a "Why it earns credit" line.
3. No prose dashes. Full suite green. PDF still 12 pages, each artifact one page.

## Workflow
Branch `feat/playbook-artifacts-robust` -> implement -> suite green -> PDF page check -> PR against `main`, do NOT merge. Report branch, PR#, pytest line, PDF page map, dash grep, criteria met.
