Every commit scored for change-risk against this repo's own history, so 'elevated' means elevated here rather than on some global curve.
Needs review
104 commits sit in this repo's top risk tercile, which is 33% of the 315scored. The cut is drawn against this codebase's own history rather than a global curve, so a quiet repo still fills its top band, and here it starts at 8.8 out of 10. What pushes a commit up is size and spread together: a large change confined to one area scores below a smaller one scattered across a dozen files.
Commit categories over time, read off the subject line. Fixes carry the accent because that is the series this chart exists to show.
Began feature-led, now leaning chore.
Ranked by change-risk, highest first. Priority is a tercile of this repo's own distribution, so a quiet repo still fills its top band.
| # | Commit | Author | When | Lines | Risk | Top driver |
|---|---|---|---|---|---|---|
| 1 | 8dc76d92feat(admin): bulk select + actions for Users, Pending & Blocked tables (#92) | Todd Whittakerclaudeassisted | 1mo ago | +3.1K -83 | 100%Elevated | more lines added than baseline |
| 2 | 8d842ccefeat(admin): reject an access request — block re-request, with a visible and reversible denial (#61) | Todd Whittakerclaudeassisted | 1mo ago | +2.7K -29 | 100%Elevated | more lines added than baseline |
| 3 | d765b57eInitial commit: IPEDS unified DB + natural-language web app | Todd Whittakerclaudeassisted | 1mo ago | +7.3K -0 | 100%Elevated | more lines added than baseline |
| 4 | b3517d71fix(skills): remember a rejected lesson, mute its category, stop re-queueing duplicates (#295) | Todd Whittakerclaudeassisted | 2w ago | +2.1K -24 | 98%Elevated | more lines added than baseline |
| 5 | 8fd41e43chore(frontend): derive design-system prop contracts from JSDoc (#220) | Todd Whittakerclaudeassisted | 4w ago | +1.8K -76 | 98%Elevated | more lines added than baseline |
| 6 | e0b4dbf0chore(design-sync): publish the UI as a claude.ai/design system (#219) | Todd Whittakerclaudeassisted | 4w ago | +2.2K -0 | 98%Elevated | more lines added than baseline |
| 7 | c7dc7e3arefactor(admin): split Admin.jsx into a shell + src/admin/* (#217) | Todd Whittakerclaudeassisted | 4w ago | +2.7K -2.4K | 98%Elevated | more lines added than baseline |
| 8 | 3ef4d742feat(admin): live disk/time estimates, per-file progress, Provisional→Final updates, 5-way parallel NCES ingestion (#40) | Todd Whittakerclaudeassisted | 1mo ago | +2.8K -172 | 98%Elevated | more lines added than baseline |
| 9 | 73c9530dRetrofit: fix security/a11y review findings + add test suites & agent team | Todd Whittakerclaudeassisted | 1mo ago | +2.2K -82 | 98%Elevated | more lines added than baseline |
| 10 | 57594a8fdocs: make CLAUDE.md a 149-line process file, move the rest under docs/ (#345) | Todd Whittakerclaudeassisted | 3d ago | +2.4K -2.2K | 96%Elevated | more lines added than baseline |
| 11 | 29fb14f2chore(deps-dev): upgrade to TypeScript 7, and pin three contracts it widened (#260) | Todd Whittakerclaudeassisted | 3w ago | +977 -657 | 96%Elevated | more lines added than baseline |
| 12 | f17cba9cfeat(chat): keep a running turn visible when you navigate away (#240) | Todd Whittakerclaudeassisted | 3w ago | +1.1K -20 | 96%Elevated | more lines added than baseline |
| 13 | 323e0ff8feat(ux): chat interaction pass — stop, scroll containment, skeleton, focus, retry, rename (#94) | Todd Whittakerclaudeassisted | 4w ago | +1.6K -119 | 96%Elevated | more lines added than baseline |
| 14 | 27355e31feat(web): client-side URL routing so chats and admin tabs are linkable (#62) (#62) | Todd Whittakerclaudeassisted | 1mo ago | +1.3K -56 | 96%Elevated | more lines added than baseline |
| 15 | 53c21af6feat(admin): NCES-sourced year catalog with incremental multi-year ingestion (#39) | Todd Whittakerclaudeassisted | 1mo ago | +2.0K -89 | 96%Elevated | more lines added than baseline |
| 16 | 88a978e9feat: Claude-style chat UX, inline edit/delete, charts, thinking, logs UI (#15) | Todd Whittakerclaudeassisted | 1mo ago | +1.0K -70 | 96%Elevated | more lines added than baseline |
| 17 | ebc0fd28Add ruff + eslint linting (with prettier available), wire lint into CI (#3) | Todd Whittakerclaudeassisted | 1mo ago | +3.5K -193 | 96%Elevated | more lines added than baseline |
| 18 | bb37f7dbfix(import): never tell an admin the database was untouched when it is live (#301) | Todd Whittakerclaudeassisted | 2w ago | +729 -39 | 92%Elevated | more lines added than baseline |
| 19 | 843f30b7fix(import): decide "same file" by identity, and ask the right question at each site (#300) | Todd Whittakerclaudeassisted | 2w ago | +689 -28 | 92%Elevated | more lines added than baseline |
| 20 | cd768d55fix(critic): only some findings may become lessons, and the prompt no longer says which (#293) | Todd Whittakerclaudeassisted | 2w ago | +832 -45 | 92%Elevated | more lines added than baseline |
| 21 | c9c760b8feat(agent): ground every hero figure in the turn's real query results (#163) | Todd Whittakerclaudeassisted | 4w ago | +1.2K -34 | 92%Elevated | more lines added than baseline |
| 22 | 9ed6f301feat(agent): disambiguation clarify-chips + feedback-distilled lessons (#159) | Todd Whittakerclaudeassisted | 4w ago | +1.3K -39 | 92%Elevated | more lines added than baseline |
| 23 | b5b218fachore(deps): upgrade frontend build tooling — vite 8, vitest 4, plugin-react 6 (#134) | Todd Whittakerclaudeassisted | 4w ago | +806 -1.5K | 92%Elevated | more lines added than baseline |
| 24 | 7fbcade1feat(ui): top-bar restructure — wordmark link + user-badge menu, About modal (#106) | Todd Whittakerclaudeassisted | 4w ago | +825 -186 | 92%Elevated | more lines added than baseline |
| 25 | 814acdb3feat(chat): the analyst layer — hero figure, brief, trend intelligence & drill-downs (#100) | Todd Whittakerclaudeassisted | 4w ago | +971 -39 | 92%Elevated | more lines added than baseline |
| 26 | cea43aeafeat(web): reusable app-styled confirmation modal, replacing window.confirm (#85) | Todd Whittakerclaudeassisted | 1mo ago | +799 -211 | 92%Elevated | more lines added than baseline |
| 27 | 096b40fcfeat(admin): CSV bulk user import in the Users tab (#83) | Todd Whittakerclaudeassisted | 1mo ago | +964 -2 | 92%Elevated | more lines added than baseline |
| 28 | e8d561aefeat(admin): search, sort, pagination + icon actions for the users table (#78) | Todd Whittakerclaudeassisted | 1mo ago | +848 -41 | 92%Elevated | more lines added than baseline |
| 29 | 5a8f8c7atest(web): add vitest unit tier for pure JS logic + wire it into the gate (#71) | Todd Whittakerclaudeassisted | 1mo ago | +2.1K -77 | 92%Elevated | more lines added than baseline |
| 30 | 7a3e3916feat(skills): generalized structured lessons; remove thumbs-up (#45) | Todd Whittakerclaudeassisted | 1mo ago | +1.2K -482 | 92%Elevated | more lines added than baseline |
| 31 | 5f68970cfeat(admin): remove an integrated year (trashcan) + rebuild progress bar (#41) | Todd Whittakerclaudeassisted | 1mo ago | +1.2K -47 | 92%Elevated | more lines added than baseline |
| 32 | 9ad8c9b8test: every app/ module ≥80% + enforce a per-module coverage floor (#30) | Todd Whittakerclaudeassisted | 1mo ago | +1.2K -14 | 92%Elevated | more lines added than baseline |
| 33 | 3a3e056afeat(startup): fail with an instruction, not a stack trace, when /data is unwritable (#304) | Todd Whittakerclaudeassisted | 2w ago | +771 -0 | 89%Elevated | more lines added than baseline |
| 34 | 4288c88ffix(grounding): a cut page cannot supply the total the model claimed (#0) (#298) | Todd Whittakerclaudeassisted | 2w ago | +825 -36 | 89%Elevated | more lines added than baseline |
| 35 | eb7f78dcfix(llm): gate S5 exhaustion fabrication + raise tool-call ceiling to 20 (#180) | Todd Whittakerclaudeassisted | 4w ago | +1.2K -135 | 89%Elevated | more lines added than baseline |
| 36 | 19481d07test: retrofit backend coverage to 83% + enforce >=80% gate (#29) | Todd Whittakerclaudeassisted | 1mo ago | +974 -3 | 89%Elevated | more lines added than baseline |
| 37 | 592eccfcfeat: per-table CSV + inline charts, chart image copy, and chat polish (#16) | Todd Whittakerclaudeassisted | 1mo ago | +575 -95 | 89%Elevated | more lines added than baseline |
| 38 | 67f2e4a3Pin Python dependencies via a hashed lockfile for reproducible builds (#4) | Todd Whittakerclaudeassisted | 1mo ago | +1.2K -4 | 89%Elevated | more lines added than baseline |
| 39 | a3b0c884fix(import): record what staging is about to change, before it changes it (#299) | Todd Whittakerclaudeassisted | 2w ago | +507 -25 | 87%Elevated | more lines added than baseline |
| 40 | 4c6027e5fix: derive the done event's fields on BOTH sides, so a live turn can't drift (#296) | Todd Whittakerclaudeassisted | 2w ago | +640 -101 | 87%Elevated | more lines added than baseline |
| 41 | cba27314fix(usage): bill every LLM call a turn causes, not just the agent's (#264) | Todd Whittakerclaudeassisted | 3w ago | +655 -115 | 87%Elevated | more lines added than baseline |
| 42 | 7886a597feat(chat): show whether a table's numbers reproduce from the query (#222) | Todd Whittakerclaudeassisted | 4w ago | +656 -40 | 87%Elevated | more lines added than baseline |
| 43 | e6cafa6efeat(admin): tabbed Users section (Current / Pending / Blocked) (#95) | Todd Whittakerclaudeassisted | 4w ago | +647 -211 | 87%Elevated | more lines added than baseline |
| 44 | 76326132refactor(web): extract a reusable <DataTable> from the Users table (#88) | Todd Whittakerclaudeassisted | 1mo ago | +565 -279 | 87%Elevated | more lines added than baseline |
| 45 | 380812cffix(import): delete the .accdb files a manual import left on disk forever (#297) | Todd Whittakerclaudeassisted | 2w ago | +530 -21 | 84%Elevated | more lines added than baseline |
| 46 | 5b98aefbfix(grounding): anchor each table row to the result row it describes (#223) | Todd Whittakerclaudeassisted | 4w ago | +629 -124 | 84%Elevated | more lines added than baseline |
| 47 | a4b163dbfix(ui): make failures visible instead of silent or raw (#209) | Todd Whittakerclaudeassisted | 4w ago | +460 -27 | 84%Elevated | more lines added than baseline |
| 48 | d417d0ebfix(backend): scope + bound the answer cache, negative-cache the release check, refuse a downgrade (#208) | Todd Whittakerclaudeassisted | 4w ago | +465 -36 | 84%Elevated | more lines added than baseline |
| 49 | 9999af05feat(grounding): observe-only table grounding (cell-level accuracy on Admin → Usage) (#173) | Todd Whittakerclaudeassisted | 4w ago | +559 -29 | 84%Elevated | more lines added than baseline |
| 50 | 3b109dc8feat(chat): Markdown-highlighting composer (source-preserving textarea) (#105) | Todd Whittakerclaudeassisted | 4w ago | +428 -23 | 84%Elevated | more lines added than baseline |
Two views of the same model: where the cuts fall, and what commit shape lands you above them.
Every scored commit, binned on the raw 0 to 10 score rather than the percentile. Percentile ranks are uniform by construction, so that axis has no shape to draw. The dashed lines are the tercile cuts behind each row's priority pill.
The 200 most recent commits, on their own recency sample rather than the feed above: that defaults to risk-sorted, so reusing it would plot only the top tercile and call it the spread. Big and scattered is what the model penalises. Click a dot to open it.
toddawhittaker/ipeds-oracle has 316 commits in its history from 2 contributors, the first of them Jul 14, 2026. In the last 90 days 367 files were touched, 1,493 times in total, most often Admin.jsx. Every commit is scored for change risk from its size, spread and the history of the files it touches.