cp-j0gw.8: systemwide 3-cut context — 'this CIP fails at N CSU campuses' - #3
Open
AJBcoding wants to merge 3 commits into
Open
cp-j0gw.8: systemwide 3-cut context — 'this CIP fails at N CSU campuses'#3AJBcoding wants to merge 3 commits into
AJBcoding wants to merge 3 commits into
Conversation
Closes the last analytical gap from the senate-distribution packet: the per-CIP "this fails at N CSU campuses" headline framing. CONTENT/DATA - data/build/build_systemwide_context.py — converts the CSU systemwide-exposure 3-cut CSVs (cut1_by_campus, cut2_by_cip, cut3_by_failure_type, unified_exposure) into a single static bundle. Source path: CIPcodes:analyses/csu-systemwide-exposure/ output/3cut-2026-05-04/. Reproducer: CIPcodes:analyses/csu-systemwide-exposure/scripts/03_build_systemwide.py. - content/systemwide-cip-context.json — built bundle. 22 campuses, 81 unique CIP-4 codes, 196 exposure cells, 4 failure types (A direct-fail / C invisible / D knife-edge / E pool-suppressed). Forward-simulation disclaimer included. UI INTEGRATION - web/js/render.js: new renderSystemwideContext() surfaces a per- verdict-card line "CSU systemwide context: CIP <X> shows N exposure cells across K of 22 campuses (breakdown)" with reproducer-path citation. Lazy-loaded via fetch on page init; failures fall back to empty render (never blocks per-program verdict). - web/js/persona-a.js, persona-b.js: preloadSystemwideContext() at page init. - web/css/main.css: .systemwide-context blue-left-border block style, .systemwide-source small attribution line. TESTS - tests/systemwide-context.test.ts (9 cases): verifies bundle is well-formed (22 campuses / 81 CIPs / 196 cells), totals match senate packet, Music/Drama/English-MA all surface correctly, per-CIP failure-type counts sum to total_cells, forward-simulation disclaimer present. CONSTRAINT HONORED - Per chair instruction this evening: NO changes to any senate- distribution packet file, NO changes to briefs/2026-05-04-*. Only the tool repo's content/ + web/ + data/build/ surfaces touched. - Build script reads from CIPcodes (path configurable via --source); output JSON is committed in tool repo for build-time independence. 212/212 tests pass (was 203 + 9 new). Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Updates the Status section from "pre-implementation" to: - v1 (cp-0on epic) shipped 2026-04-30 with 197/197 tests - v1.1 (cp-j0gw extension) in PR review as of 2026-05-05 with pointer to docs/cp-j0gw-ext-changelog.md and the 3 stacked PRs (#1 main, #2 widget, #3 systemwide) Adds new Routes table covering: /, /persona-a, /persona-b, /learn/, /sources, /comment-draft, /widgets/cohort-floor-demo, /api/v1/... Each route tagged with its primary audience so a reader can find the right entry point without spelunking the codebase. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
AJBcoding
added a commit
that referenced
this pull request
May 5, 2026
Two bugs + a re-bucket: BUGS - M07 was listed in two groups (1 + 2). Removed from group 1. - M07's label in group 1 said "Who's in the test" — wrong; M07 is about disclosures. Fixed by removing it from group 1. - M02 (earnings numerator) was stranded in "Reading and learning more" but is a foundational mechanic. Moved to group 1. REBUCKET (still 4 groups for visual scannability) 1. How the rule works: M01, M02, M03, M04 2. What happens when a program fails: M05, M06, M07, M08, M18 3. Edge cases, timing, and who's hit hardest: M12, M13, M14 4. Process, appeals, and authority: M09, M10, M11, M15, M17 Group 3 was renamed (was "Data quality and verdict edges") to better describe its actual contents — M13 (calendar dates) is timing not data-quality, and M14 (named populations) is impact not data-quality. M12 (NOT MEASURED) is the data-quality core; M13 + M14 are the adjacent edge cases that complete the bucket. Group 4 was renamed (was "Reading and learning more" — a grab bag) to "Process, appeals, and authority" — three sub-themes that share a post-verdict / institutional-procedure orientation. M02 and M08 were extracted (M02 to group 1, M08 to group 2 with the other graduate- loan consequence material). No M-doc HTML changes; no engine changes. Pure web/learn.html edit. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
…hair review #2) Four refinements to the cp-j0gw.8 systemwide-context one-liner per chair recommendation: BUGS (build script) - data/build/build_systemwide_context.py: collapse runs of whitespace in cip4_title (source CSVs arrive with double spaces inside titles like "English Language and Literature General"). Renders cleanly now: "English Language and Literature General". - Empty title now stored as "" (not literal "(unknown)"); the UI omits the parenthetical entirely when missing rather than rendering "CIP 5006 ()". - Side effect: CIP 5006 now correctly resolves to "Film/Video and Photographic Arts" — earlier "(empty)" appearance was an artifact of the unified-exposure CSV ordering, not a true gap. UI REFINEMENTS (web/js/render.js) - Gate on n_unique_campuses >= 2: when only one CSU campus surfaces this CIP, the line "across 1 of 22 campuses" reads as false comfort. Suppress the systemwide-context line entirely in that case (no "systemwide context" if only the one institution shows it). - Source line now hyperlinks to /sources.html ("public data sources") instead of monospaced corpus path. Drives readers to the central provenance page; better UX. - Title fragment guarded: omit the parenthetical when title is empty/whitespace. Wording approved as-is in chair review: - "shows N exposure cells" — neutral, ties to senate-packet terminology - "of 22 CSU campuses" — correct denominator (1 campus has zero exposure cells; "of 23" would falsely imply otherwise) - A/C/D/E breakdown order — matches senate packet exactly content/systemwide-cip-context.json regenerated from the patched build script. 212/212 tests pass. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
AJBcoding
force-pushed
the
cp-j0gw-8-systemwide-context
branch
from
May 5, 2026 11:50
e4935b6 to
6f8d526
Compare
AJBcoding
added a commit
that referenced
this pull request
May 5, 2026
Adds three new sections to the changelog reflecting the 2026-05-05 evening polecat-return wave and chair-review track: 1. "Stacked PR record" — table of all 5 PRs (#1-#5) with branches, beads, authors, and post-merge test counts. Suggested chair merge order: #1 -> #3 -> #2 -> #4 -> #5. 2. Sub-bead ledger refreshed: cp-j0gw.8, .11, .13, .14, .15 all marked done with PR pointers; cp-j0gw.16 deferred until preview URL is live. 3. "Chair-review track applied" — the 4 reviews iterated inline this evening (#1 disclaimers approved, #2 systemwide refined, #3 groupings applied, #4 prose skipped + bug fix shipped). #5 comment-outline review not yet run. 4. "Smoke-stack record" — verifies all 5 PRs merge cleanly in order with one trivial conflict (web/index.html persona-card stack). Final stacked test count: 249/249. Production lint scan caught 3 dean-facing literal violations (OPEID6 + cascade) in PR #1's surfaces; fixed in commit 0993045. PR #2 (obsidian widget) has one analogous "cascade" literal in link text — surfaced as follow-up note. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
14 tasks
AJBcoding
added a commit
that referenced
this pull request
May 5, 2026
Stacked PR record updated: - 6 PRs now open (added PR #6, quartz batch-2 explainers M04/M07/M14) - PR #2 carries obsidian's cp-j0gw.17 lint fix (commit 38e236c) - Final stacked test count: 270/270 - Suggested chair merge order: #1 -> #3 -> #2 -> #4 -> #5 -> #6 - Broader lint scan: 0 OPEID6/cascade violations remaining; only formal cite names (STATS NPRM, RIA Table 3.19) kept per M-doc convention. Sub-bead ledger: cp-j0gw.17 + cp-j0gw.18 marked done with PR pointers. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Adds the senate-distribution packet's headline framing — "this CIP fails at N of 22 CSU campuses, broken down by failure type" — to every verdict card.
Stacked on PR #1 (
cp-0on-ext-senate-plain-lang). Merge cp-j0gw-ext PR first, then this.Tests: 203 → 212 passing.
No senate packet alteration. Per chair instruction this evening, the build script reads from CIPcodes side (
analyses/csu-systemwide-exposure/output/3cut-2026-05-04/) but no file insidebriefs/senate-distribution-2026-05-04/orbriefs/2026-05-04-*was touched.What changed
Data
data/build/build_systemwide_context.py— Python build script that reads the 4 CSU systemwide-exposure 3-cut CSVs and emits a single JSON bundle. Reproducer-script + source-CSV path captured in the JSON for chain-of-custody.content/systemwide-cip-context.json— committed bundle. 22 campuses, 81 CIP-4 codes, 196 exposure cells, 4 failure types (A direct-fail / C invisible / D knife-edge / E pool-suppressed).Engine / UI
web/js/render.js—renderSystemwideContext()surfaces a per-verdict-card line:preloadSystemwideContext()exported; called at page init frompersona-a.js+persona-b.js. Lazy-loaded; failures fall back to empty render (never blocks per-program verdict).web/css/main.css—.systemwide-contextblue-left-border block style.Tests
tests/systemwide-context.test.ts— 9 cases verifying:Bead
Closes
cp-j0gw.8(lifted from deferred per chair direction this evening).Test plan
npm test— 212/212 passing in worktree🤖 Generated with Claude Code