Skip to content

cp-j0gw.8: systemwide 3-cut context — 'this CIP fails at N CSU campuses' - #3

Open
AJBcoding wants to merge 3 commits into
cp-0on-ext-senate-plain-langfrom
cp-j0gw-8-systemwide-context
Open

cp-j0gw.8: systemwide 3-cut context — 'this CIP fails at N CSU campuses'#3
AJBcoding wants to merge 3 commits into
cp-0on-ext-senate-plain-langfrom
cp-j0gw-8-systemwide-context

Conversation

@AJBcoding

Copy link
Copy Markdown
Owner

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 inside briefs/senate-distribution-2026-05-04/ or briefs/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.jsrenderSystemwideContext() surfaces a per-verdict-card line:

    CSU systemwide context: CIP 5009 (Music) shows 13 exposure cells across 12 of 22 CSU campuses (2 direct-fail · 8 knife-edge · 3 pool-suppressed). Source: analyses/csu-systemwide-exposure/output/3cut-2026-05-04/

  • preloadSystemwideContext() exported; called at page init from persona-a.js + persona-b.js. Lazy-loaded; failures fall back to empty render (never blocks per-program verdict).
  • web/css/main.css.systemwide-context blue-left-border block style.

Tests

  • tests/systemwide-context.test.ts — 9 cases verifying:
    • 22 campuses / 81 CIPs / 196 cells in scope
    • Type totals match senate packet (21A / 86C / 66D / 23E)
    • Music (12 campuses), Drama (9), English MA all surface correctly
    • Per-CIP failure-type counts sum to total_cells
    • Forward-simulation disclaimer + reproducer-script pointer present

Bead

Closes cp-j0gw.8 (lifted from deferred per chair direction this evening).

Test plan

🤖 Generated with Claude Code

AJBcoding and others added 2 commits May 5, 2026 04:29
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
AJBcoding force-pushed the cp-j0gw-8-systemwide-context branch from e4935b6 to 6f8d526 Compare May 5, 2026 11:50
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>
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>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant