Fill in college deadlines from the Common App grid - #49
Merged
Merged
Conversation
46 of 6,273 colleges had a real application deadline. Everything else fell back to a typical date for the round and was shown to the student as an estimate, which is the one thing a deadline tool should not do. Common App publishes its members' deadlines as a PDF and keeps it current through the cycle, so this is re-runnable rather than a one-off import. A dry run fills 935 of them and overwrites nothing. The grid repeats its column header on all 55 pages and the columns land in a different place on each: ED sits anywhere from column 36 to 39, and the drift compounds rightward until two pages are 28 characters apart at RD. So each round is read against its own page's header. Fixed offsets are not merely untidy here — they read Yale's restrictive-early date as its regular-decision deadline, because on Yale's page REA sits where other pages keep RD. parse.test.mjs pins that case and the four others that broke. Existing values are never overwritten. Checking the disagreements found the grid right about Stanford (Jan 5, where we held a wrong Jan 2) and wrong about Georgetown (Jan 1, where Jan 10 is real), so neither source wins outright; the 46 curated rows were checked by hand and a bulk import does not get to undo that quietly. The 13 disagreements print for someone to settle. The 30 values that agree exactly are the main evidence the parse is sound. Nor does it guess between campuses: Arizona State, Kent State and Colorado State have six or more campus rows each, so they stay unmatched rather than risk putting a main campus's deadline on a branch. Writing takes --apply. It used to be the no-flag default, which puts one mistyped invocation straight into production.
|
The latest updates on your projects. Learn more about Vercel for GitHub.
|
This branch was successfully deployed
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.
46 of 6,273 colleges had a real application deadline. Everything else fell back to a typical date for the round and was shown to the student as an estimate — which is the one thing a deadline tool should not do.
Common App publishes its members' deadlines as a PDF and keeps it current through the cycle, so this is a re-runnable ingest rather than a one-off import.
Real deadlines go from 46 → ~980 colleges.
The bug worth knowing about
Fixed column offsets read Yale's restrictive-early date as its regular-decision deadline.
The grid repeats its column header on all 55 pages and puts the columns in a different place on each:
EDranges over columns 36–39, and the drift compounds rightward until two pages sit 28 characters apart atRD. On Yale's page, REA is where other pages keep RD.Every round is now read against its own page's header.
parse.test.mjspins that case and the four others that broke during development (wrapped names, theCoordinateschool type,Rolling, rows before the first header).The 30 values that agree exactly with the hand-curated rows are the main evidence the parse is sound.
Two deliberate limits
It never overwrites an existing value. The 13 disagreements have no consistent winner — the grid is right about Stanford (Jan 5, where we held a wrong Jan 2) and wrong about Georgetown (Jan 1, where Jan 10 is real). The 46 curated rows were checked by hand and a bulk import doesn't get to undo that quietly, so disagreements print as
differs:lines for someone to settle.It won't guess between campuses. Arizona State, Kent State and Colorado State have six or more campus rows each, so they stay unmatched rather than risk putting a main campus's deadline on a branch. Most of the other 169 unmatched are foreign universities absent from the Scorecard dataset (Aberystwyth, Dublin City, Esade, IE).
It also skips schools listed more than once (a few appear once per program with different deadlines under one name), and doesn't store EDII/EAII — 185 schools publish them, but
AppDeadlineTypehas no round for them and a column nothing renders is data nobody reads.Failing loudly
PDF parsing is brittle by nature, so the guards matter more than the parser:
--apply; it used to be the no-flag default, which puts one mistyped invocation straight into productionTesting
Not yet applied to the database — this PR is the script only.