Unit 3 course build — evidence report (2026-08-06; addenda 2026-08-10, 2026-09-07)
Addendum: exam integration (2026-09-07)
Per your directive and approved defaults, Unit 3 now carries the full exam apparatus, and the standalone exam-skills module exists:
- Three FRQ-practice pages (chips after S06, S14, S19): the three-move justification taught on the real 2021 Q2(b); particulate-drawing scoring on the real 2023 Q5(b); a full timed 4-point short (real 2024 Q7(a–c)). Every rubric line is the scoring guideline's actual point condition; students write on paper, reveal the model response, and self-score point by point.
- The end-of-unit test (chip after S19): 18 authored AP-style MCQs covering all content strands with fresh species, plus the real 2021 Q7 (4-pt) and 2021 Q3 (10-pt) FRQs. The registry proves no fully unit-3-pure long FRQ exists in 2021–2026; Q3 is the closest (7/10 points Unit 3) — its one Unit-4 point (a net ionic equation) is parked for your call in review_notes.md. S05/S14 carry no test MCQ (drawing is production-assessed; their capstone sits in gate G5 as model-selection).
- The exam-skills module (
exam_skills_build/course/exam_skills_course.html, 4 lessons, sits between Units 1 and 2): exam anatomy, task verbs as contracts, the point-earning grammar taught on real scored 2023 samples — including the real student who computed the correct mass and earned zero for showing no work — and calculation habits, ending with the student's first real FRQ (2023 Q4(a)) under its true rubric. - Verification: all 36 new items blind-reviewed (30/30 MCQ key matches; all six FRQ rubrics independently attempted and judged earnable; one reviewer challenge to the no-work-zero rubric clause was arbitrated against the reviewer from the 2023 scoring commentary itself); accepted quality fixes applied same-day; both courses rebuilt, validator 0/0, figure sweeps clean (301 figures), click-throughs clean (479 + 12 checks incl. every FRQ's reveal-tick-score flow).
- Still queued: the light Units 1–2 exam-practice retrofits (now this session's to build).
Addendum: response to the external Safari student-review (sol5.6, reviewed 2026-08-07)
All 23 findings are dispositioned (full detail: review_notes.md §2026-08-10; process rules:
master log §2026-08-10). The three that mattered most:
- The Broken finding was real and is fixed with a guard: the page had no document shell or
charset declaration — Chromium (my verification browser) sniffs UTF-8, Safari doesn't, so
chemistry notation rendered as mojibake there. The build now emits a full valid shell
(
<!doctype html>,lang="en",<meta charset>,<main>) and asserts it on every build. - The numeric engine now enforces what the stems ask: scientific-notation entry
(
4.00e2,4.00 × 10², superscripts) parses, and a right-value/wrong-precision answer gets the Unit 1-style "Right value — now give it to N significant figures" retry (no penalty), driven by the key's own format. The reviewer's three demonstrated failures are all in the engine test battery. Two stems that enforced precision without announcing it now announce it. - Fourteen chemistry-wording refinements landed at the spec layer with zero key changes (verified programmatically): amorphous = no long-range order; the drawing task scoped to crystalline; one elastic-collision teaching line in KMT; 273 vs 273.15 stated honestly; ionic vapor described as neutral (no free-ion picture); the covalent-network rule scoped as the AP classification; class-first ranking hedged as a tendency; filtration scoped to ordinary filter paper; ion-dipole framed necessary-not-sufficient for ionic dissolving; the microwave-oven analogy corrected to a liquid-vs-gas-phase contrast; photon absorption scoped to the specified transition; Beer-Lambert given its working-range qualification with the no-extrapolation idea brought forward; and the two residual length-cue patterns rebalanced (including PSM-140's options, now parallel full sentences).
Accessibility findings (live-region results, focus movement, landmarks, ≥4.5:1 contrast on
faint text, checkpoint entry labeling, dock clearance) are implemented. Two calls are parked
for James in review_notes.md: the stem-given precision convention, and whether elastic
collisions should become a register atom rather than one taught line. Post-fix verification:
validator 0/0, figure sweep 0 problems, full click-through 455 checks with 0 failures.
Key takeaways
The whole of Unit 3 is built and verified: 140 lessons, 6 checkpoints, 455 checks, 293
figures, in the line-by-line format. Open unit3_course.html in a browser (append ?v=N if
the preview pane serves a stale copy) — everything below describes that exact file.
Pedagogical:
- Every one of the 140 register behaviours has its own lesson, in register order, with your rulings applied throughout: one lesson per atom; what-then-why pairing with Unit 2's mechanism atoms consumed as one-line "you've already seen" recaps (never re-taught, representations shown when recapped); example/non-example sequences for boundary concepts (the H-bond N/O/F rule is built on the register's own CH₃OH/CH₃F bracketing pair); headache-before-aspirin openings with concrete deterministic images for every new quantity; canonical mechanism sentences byte-identical to the register lexicon wherever their mechanisms recur; per-variable qualitative lessons before every equation synthesis (KE, gas laws, c = λν, E = hν, A = εbc); and force-form Coulomb reasoning per your 2026-08-06 ruling.
- Every item passed blind review with a perfect key match: five independent reviewers with no answer keys answered all 446 scoreable items (390 lesson + 56 gate) and agreed with the key 446 times. A sixth reviewer then re-reviewed the 38 items changed by repairs: 38/38. No unanswerable stems, no undecidable items, no factual chemistry errors — reviewers verified dozens of the real literature values independently.
- The reviewers' quality findings are all fixed or reasoned in
blind/adjudication.md. The one real defect CLASS they caught (independently, twice): the Maxwell-Boltzmann "wrong-direction" sketch items were accidental full label swaps because the renderer's equal-area scaling followed the swapped positions — fixed in the renderer (heights now always follow the labels, so exactly one feature is wrong by construction) plus three item repairs. Beyond that: one genuinely defensible option (Cl⁻/water hydrogen bonding — IUPAC allows it; option replaced), a boundary item whose figure invited the extrapolation its key forbids (figure reworked), ~12 throwaway distractors replaced with named error paths, length-cue rebalances, and a handful of stem tightenings. - The two verified pilot lessons (PSM-070 Maxwell-Boltzmann, PSM-084 ideal gas law) ship as locked seeds converted from the twice-blind-reviewed pilot specs — numbers, misconception maps, and figure data preserved verbatim and re-verified programmatically. Three of their six verified gate items were likewise converted into the checkpoints.
- The six checkpoints test all 17 required capstones and all 40 cold-sample atoms on fresh species the lessons never used (the sequence authors reserved headroom deliberately), with drawing capstones assessed by model-selection as you ruled, and exactly three verdict+reason items — all in gates, the sanctioned AP-mimicry home, all flagged per your sparing-use ruling.
Typographical and formatting:
- All figures are deterministic — no generated images anywhere. Unit 3 added 25 new figure families (Maxwell-Boltzmann curves, gas graphs, pistons, particulate states/solutions, IMF pairs, chromatograms, distillation, EM spectrum, energy ladders, Beer-Lambert plots, and small follow-ups built during the waves), all with unit tests. A programmatic browser pass over every figure found and fixed 20 layout defects across the build (annotated-equation label collisions were the big family); the shipped build has zero overlapping labels and zero clipped text.
- A scripted browser click-through drove every one of the 140 lesson pages and 6 gate pages, answered all 455 checks, and exercised a wrong-answer retry per numeric item: zero grading failures, zero console errors.
- Answer keys are evenly spread (86/85/84/78 across the four positions) with no run longer than two; duplicate-stem sweep clean; longest-key cues repaired where reviewers flagged them.
- Student-visible notation matches the AP equation sheet (R = 0.08206 L·atm·mol⁻¹·K⁻¹ — the sheet's superscript form, verified against the CED appendix; ε in L·mol⁻¹·cm⁻¹); unicode sub/superscripts throughout; zero internal jargon, atom IDs, or forward references in any student-visible field (the validator enforces the register's glossary ordering mechanically).
- One deliberate engine extension: numeric entry now accepts decimals with per-item tolerance (Unit 2's engine was integer-only; the verified pilot keys are decimals like 49.2 L, and the unit's arithmetic is decimal-native — Unit 1's engine already worked this way). Scientific- notation answers fold the exponent into the unit label; the engine semantics are test-covered.
What still needs you (nothing blocks review):
- ~35 parked judgment calls from the sequence and gate authors, collected in
review_notes.mdwith my operator takes — headline ones: whether the flaw-sketch MCQ option style reads cleanly against the rendered figures (your S08 early look); the two same-format verdict+reason PSM-053 items (one in G2, one in G6 — convert one to pure verdict?); whether a pair satisfies PSM-033's "several molecules" drawing scope; the PSM-096 invented-but- realistic homogeneity dataset; and PSM-015's Li⁺-in-chloroform thought experiment. - Your three 2026-08-06 rulings (force-form Coulomb, sparing verdict+reason, neutral flaw alt) are logged in the master log with full protocol and enforced by validator sweeps.
- Platform question, unchanged: whether Incept delivers this format natively or we ship this renderer — the specs degrade gracefully either way.
Verification evidence (per the kickoff checklist)
| Check | Result |
|---|---|
| Atom and prerequisite validation | 140/140 atoms have lessons in register sequence order; 0 placeholders |
| Student-visible field enumeration | Validator walks every text, stem, option, feedback, wrong-value map, checklist, title, outcome, and alt field across 19 sequence files + gates + seeds |
| Metadata/leak sweeps | 0 hits: coinage battery, atom IDs, authoring vocabulary, mastery-claim phrasing, "know" in titles, excluded content (M₁V₁, Rf, van der Waals equation, effusion…), "equilibrium" (register D7), forward terms before their defining atoms (glossary-ordered, machine-checked) |
| New-ruling sweeps | 0 hits: energy-form Coulomb; evaluative language in flaw-figure alt; non-AP R notation |
| Chemistry / notation / figure-value coherence | Authors re-computed every arithmetic path (keys AND wrong-map values); real literature data throughout, hedged where sources vary; blind reviewers independently re-verified values and found zero factual errors |
| Feedback completeness & misconception specificity | Enforced by validator: 4 options + 4 feedbacks per MCQ; per-wrong-value maps + scaffold-format reveals where a formula is substituted; draw items carry model answers + feature checklists |
| Cue audits | Key positions 86/85/84/78; longest same-key run = 2; duplicate-stem sweep clean; reviewer-flagged length cues repaired |
| Counts, no false "complete" | 140/140 lessons (0 placeholders), 293 figures (0 TODO), 6/6 gates (56 items; 17/17 capstones, 40/40 cold atoms), 455 total checks (399 lesson incl. 9 pen-and-paper productions + 56 gate) |
| Rendering integrity | Browser console clean; 0 text overlaps; 0 clipped labels; light + dark themes; every page type click-driven including gates |
| Blind review, recorded separately | blind/: 5 bundles + repair re-review bundle, 446/446 + 38/38 key matches; reviewer reports + sequestered keys + adjudication.md with every accepted fix and every rejected flag reasoned |
| Live browser pass of the exact build | Performed on unit3_course.html as shipped (preview pane caches file:// pages — append ?v=N) |
Status ledger
- Verified and complete: all 140 lessons; all 6 gates; the 25 new figure families + tests; validation, browser, and blind-review chains; both pilot-seed conversions.
- Present through reviewed fallback: none.
- Queued / pending: none in the build itself.
- Known, unresolved (non-blocking): the parked judgment calls in
review_notes.md; the register's lexicon note mapping MECH-IMF-ESCAPE to PSM-037 should gain one revisionLog line (the sentence's "intermolecular" wording is wrong for ions — the build argues from full ionic charges instead, as your what/why exception intended). - Requiring James's decision: items 1–3 in the takeaways.
Build system (for the record)
specs/U3-S*.json (19 sequence files) + specs/gates.json + schema_seeds.json (the locked
pilot conversions) → build_course.py + figlib*.py (41 deterministic families) →
unit3_course.html. validate_course_specs.py sweeps everything including gates;
browser_sweep_figs.py and browser_clickthrough.py are the programmatic browser passes;
make_blind_review.py + cross_check_blind.py + blind/ hold the review chain.
SPEC_CONTRACT.md + SEQUENCE_BRIEFS.md + FIGLIB_U3.md are the binding authoring documents
all nineteen sequence authors and three gate authors wrote against. All of this machinery
copies forward to Unit 4.