# Historical teams and players

The **History → Teams & players** archive keeps separate records for each competition, season, team and player. Returning players and transfers can have more than one record. Historical membership is never inferred from today's roster.

## Sources and import

- Men's historical roster reports: College Hockey News, discovered through each season's own roster/team selector, covering the NCAA championship era from 1947–48 through 2025–26. This includes programs that have since closed or changed divisions.
- Women's historical roster reports: College Hockey News's published women's roster selector, which currently exposes 2017–18 through 2025–26 for the imported archive.
- Previously imported 2025–26 College Hockey Inc. roster records supplement the latest completed season, including players without games or qualifying statistics.
- Official Oswego State men's rosters fill the twelve otherwise empty Division III seasons from 1983–84 through 1994–95 (350 entries). Those early season files contain only Oswego's roster, not every Division III program.
- NCAA digital statistical reports and annual statistical champions supplement player records for men's and women's Division I / National Collegiate and Division III. Each statistical source retains its original season and category. These are qualifying statistical lists, not complete rosters.
- College Hockey News's **overall team statistics** reports supplement historical roster entries with all published skater and goalie rows, without national-leaderboard qualification thresholds. The importer follows the selected roster's season-specific Stats link and validates the year, school and overall scope before merging. It matches career identity within the same team-season, then exact normalized names when no career match exists; ambiguous matches stop the build. These reports take precedence for overlapping statistics, with the report linked on the player profile.

Published fields include games played, goals, assists, points, shots, shooting percentage, penalty minutes, game-winning goals, power-play and shorthanded goals, plus/minus, goalie wins/losses/ties, goals against, minutes, goals-against average, saves, save percentage and shutouts. Coverage varies by era and report. No missing statistic is filled with an invented zero, and players with no report remain in the roster. Source-reported zeroes are preserved. The Goalies filter displays goalie columns; individual profiles show the remaining published fields.

Every season file includes team-level coverage and source links. Each player's profile links to the roster or statistical record supporting that season. Career links are additional references and may describe a later team. Jersey numbers, classes, hometowns, previous teams and draft text appear only where supplied. Missing statistics are not zero. NHL draft text records a historical selection, not present-day rights, roster assignment or a signed contract.

The importer validates school and season before accepting a roster and preserves all accepted published player rows. Team discovery uses season-specific links instead of applying today's program list to the past. Parsed roster data is cached locally so rebuilding the site does not repeat every network request. Static season files load only when selected; the entire archive is not downloaded when opening the home page.

## Completeness limits

This is **not an exhaustive record of every player who ever appeared on every college roster**. A publisher's historical roster may itself be incomplete. Some teams have no published roster table. Statistical reports can omit players below qualifying thresholds and players who did not play. The interface distinguishes roster entries from stats-only records and reports teams with missing roster data. Teams absent from every imported source cannot be counted as represented.

The season selectors cover the same NCAA eras as the championship archive. Earlier women's seasons and Division III rely on available NCAA statistical entries unless a roster report is supplied. All 173 listed competition-season selections have at least some sourced player entries; this is not a statement of complete roster coverage. Historical Division II and club player rosters are not connected. Completing those gaps requires additional verified school archives or a sufficiently comprehensive data agreement; no paid service has been activated.

## Maintenance

Run `node scripts/import-school-history.mjs` to refresh the official school supplement. Run `node scripts/import-player-history.mjs` from the repository root to fetch missing source pages and rebuild the archive. Run `node scripts/import-historical-stats.mjs` to collect the season-specific team statistics into `data/player-history-stats/`, then rerun the player importer with `--build-only` to merge them. The build-only option uses `work/player-history/rosters.json` without network requests. Cached raw pages are kept under ignored `work/player-history/`; published facts and source references are in `player-history/`. Test with `node tests/player-history.mjs` and `node tests/historical-stats.mjs`, then build and deploy through the existing Cloudflare setup.

Names and numerical facts are used for factual reference. School and league artwork remains subject to its existing rights notes. This archive does not grant a license to reproduce publisher articles or photographs.
