# Assurance Report Redesign v2 — ID-recommended layout (SHIPPED v7.50.0)

**Status:** Shipped as a two-axis six-section report (How to Read, The Bottom Line, Course Snapshot, Where It Needs Work, Recommendations by Assessment Type, Method and Caveats). The nine-section wireframe below was consolidated into six during skeleton review: Prioritization + Vulnerability folded into the Where It Needs Work gap columns; Bloom + AI-use nested under Course Snapshot's Design axis. The report renders in the brief's editorial design system over an authored `narrative["report"]` object; Security (green) and Design (maroon) run as parallel axes throughout.


**Surface:** `scripts/assurance_report_html.py` (the full audit report, NOT the one-page brief).
**Audience:** ID-facing diagnostic. Not for direct faculty hand-off.
**Source:** ID review of the current verdict-first report; a 9-section layout recommendation.
**Supersedes the presentation of:** `docs/plan-assurance-report-redesign.md` (the shipped verdict-first 5-section report). This keeps that report's data and house style; it reorganizes and expands the presentation.

## Locked decisions
1. The generic Assessment Design Playbook stays a **backend reference** (`scripts/assessment_design_playbook.py`). The report surfaces only the **course-specific** AI-forward / AI-resistant moves for the assessment types this course actually has, drawn from the playbook and instantiated with the course's real items. The full generic playbook is not rendered inside the report.
2. One HTML document with a **sticky section nav / mini-TOC**; same Playwright print-to-PDF path. Not literal separate pages.
3. AI-forward moves are the **visually emphasized** (preferred) path throughout.

## Flow
Bottom line -> Definitions -> Dashboard -> Prioritization -> Vulnerability -> Bloom / alignment -> AI-use -> Recommendations by type -> Method / caveats

Legend: [reuse] already in the report, [enrich] exists but gains data, [new] net-new.

---

### 0. Global shell  [enrich]
- Reuse the report's ASU editorial CSS + PDF exporter.
- Sticky mini-TOC linking the nine sections; anchor id per section.
- Header band: course name, "ID-facing diagnostic," audit date, model-conservative label.

### 1. Bottom Line / Executive Summary  [reuse + move to front]
- One-line verdict: assurance tier + AI-forward rating, plus a plain sentence of what it means for THIS course.
- "Where to focus first": the single biggest exposed slice (largest grade weight with no secured anchor) and the top move.
- Headline numbers: total graded items, overall secured %, number of assessment types.
- Data: `tier`, `ai_forward_rating`, `assurance_coverage_pct`, inventory group weights, top recommendation.

### 2. Definitions / How to Read  [new]
- Glossary: Secured vs Unsecured (what counts: proctoring / LockDown / peer-review signal); AI-resistant vs AI-forward (the two orthogonal axes); AIAS levels 1-5; the four tier names.
- "ID-facing diagnostic, not a faculty hand-off" note.
- What the tool counts and how to read it (published + graded + non-omitted items; within-course, not cross-course comparable; AI-judged layer bounded + labeled).
- Data: static text + `assumptions` (K, model_capability, modality, prompt_version).

### 3. Course Dashboard  [enrich]
- Top tiles: total graded items, overall secured %, AI-forward rating.
- Assignment-type table: type | count | grade weight % | secured share | vulnerable share.
- Explicit note: "N unpublished and M omit-from-final-grade items were excluded."
- Data: inventory grouped by `group`; per-item `grade_weight_pct` + proctoring/lane -> secured vs vulnerable per type; `lane_balance`; excluded-item counts.
- New piece: the per-type secured/vulnerable split (roll up the per-item lane by type).

### 4. Prioritization by Category  [new]
- Assessment types ranked by exposed grade weight (weight x unsecured share), biggest first.
- "If the team fixes one thing, start here" callout on the top row.
- Data: derived from the Section 3 rollup.

### 5. AI Substitutability / Vulnerability Analysis  [enrich]
- Per assessment type: why it is vulnerable (plain, ID-oriented) + a quick-suggestion / jumping-off column (one AI-forward-leaning move).
- Data: `needs_ai_review` substitutability, `dimension_D` exposed/mismatch items, per-type; the suggestion column pulls the top move for that type from the backend playbook, instantiated.
- New piece: the suggestion column beside each row.

### 6. Learning / Bloom's Analysis  [enrich]
- Cognitive levels measured (deep-pass `cognitive_demand` distribution + per-cluster basis, no Unknown).
- High-weight items whose claimed level is not supported (`bloom_calibration_findings`).
- Module-level navigation: which module each flagged item lives in, so IDs can find it in the shell.
- Framing: opens alignment conversations; pointer to the `alignment` skill + course CLOs/MLOs.
- Data: `cognitive_demand`, `bloom_calibration_findings`, inventory `module` per item, `objective_grounding` (CLOs/MLOs).
- New piece: module-level navigation.

### 7. AI Use Addressed in Instructions  [enrich]
- Whether AI use is mentioned (AIAS presence + level); the actual language found; whether students are told why AI use is or is not appropriate.
- Data: `dimension_D.aias` (found_in, level), `needs_ai_review` aias_level, syllabus/instruction text scan.
- New piece: surface the verbatim policy language + the why/why-not read.

### 8. Recommendations by Assessment Type  [restructure]
- One block per assessment type THIS course has. Each block: vulnerable features -> AI-forward moves (emphasized) -> AI-resistant moves -> relevant technologies.
- Course-specific: names the course's actual items and weights; moves drawn from the backend playbook and instantiated.
- Proctoring / oral / synchronous listed LAST and labeled last-resort. Pair any verify-the-AI move with the rubric + annotated models (TILT).
- Positioned as a quick-start conversation guide for the ID.
- Data: `dimension_D.recommendations` + authored moves per type; backend playbook categories as source; instantiated with inventory items.
- Note: the generic playbook is NOT rendered in full here.

### 9. Method / Caveats  [enrich]
- Sources scanned: assignment groups, quizzes, discussions, syllabus, module overview pages.
- Exclusions: unpublished and omit-from-final-grade items excluded; flag the one edge case (an "optional" assignment not marked omit-from-final-grade is still counted).
- Interpretation notes: within-course only, not cross-course comparable; AI-judged layer bounded + labeled; model-conservative.
- Reminder: verify details in the course shell.
- Data: `assumptions`, inventory assumptions, exclusion counts.

---

## Data-integrity note carried from the ID review
The inventory already excludes unpublished and omit_from_final_grade items (`_is_counted`), so "unpublished items included" is a disclosure gap, not a silent overcount. Sections 3 and 9 surface it. One real edge case: a practically-optional assignment not flagged omit_from_final_grade is still counted; noted as a caveat (a future detector could flag "optional"-titled or 0-in-weighted-group items).

## Build sequencing (after sign-off)
1. Roll-up helpers (per-type secured/vulnerable, prioritization sort, module map) in the report module.
2. The nine section renderers + sticky nav, reusing the report CSS + PDF path.
3. Tests per section (data present -> renders; absent -> skips; escaping; no em-dash) + a full-report golden.
4. Codex co-implementation, independent review, PR, release.
