Repository navigation
Release v1.0.0
footy-data-kit v1.0.0
Summary
- Marks the Wikipedia overview pipeline as the v1 source-of-truth path for the supported English league-table dataset: 138 season records from 1888 through 2025 and 232 generated club metadata records.
- Turns the release process into a fail-closed workflow with dry-run completeness checks, schema validation, data verification, club-continuity verification, release-note validation, docs generation, and integration coverage reporting.
- Clarifies the v1 data contract for consumers: tier keys represent pyramid levels, row-level administrative outcomes are explicit, club metadata fields are documented by stability/caution area, and known historical ambiguity is called out instead of guessed.
Breaking Changes
None.
Data Changes
- Preserved the canonical
tierNpyramid-level contract, including Third Division North/South undertier3.divisions[]before 1958 and modern National League North/South under the level-six parallel structure. - Added explicit row-level administrative outcomes with
outcomeStatusfor reviewed cases including resignation, folded clubs, expulsion, reprieve, points-deduction relegation, and expelled-and-folded rows. - Corrected 1957-58 restructure semantics so Fourth Division placement rows are no longer treated as ordinary relegation outcomes.
- Kept generated club metadata at 232 records and documented the v1 meaning of generated observations, curated/source-backed history, derived relationships, and caution areas in
docs/v1-metadata-audit.md. - Expanded integration fixtures to 49 of 138 seasons, or 35.5%, with coverage across early Football League seasons, test-match era movement, the first Third Division, Third Division North/South, the 1958 restructure, Premier League and EFL naming eras, COVID/pandemic seasons, administrative club outcomes, tier 5, and modern level 6.
Bug Fixes
- Fixed release verification so directory scans no longer treat non-FootballData JSON sidecars as valid "0 seasons" datasets.
- Fixed release dry-run behavior so incomplete regenerated output fails before minification and schema checks can produce a false green.
- Fixed administrative/restructure verification gaps around 1957-58 placement rows and 2019-20 Bury, Stevenage, and Macclesfield Town semantics.
- Fixed reprieve and canonical tier-label handling inherited from the v0.9.1 prep work.
Validation
- Release dry-run data generation completed with 138 seasons and 232 club metadata records, then passed data verification, club-continuity verification, and JSON Schema validation.
- Integration coverage reports 49 covered seasons, 57 live integration tests, 153 table-row assertions, 218 transition-team assertions, 16 tier-metadata assertions, and 15 season-info assertions.
pnpm -s test:jest,pnpm -s test:integration,pnpm -s verify:data,pnpm -s lint,pnpm -s typecheck,pnpm -s format:check,pnpm -s docs:check, and release-note validation have passed during v1 prep.- Release notes and docs pages are generated from checked-in release metadata, and release-note validation now guards required sections for the active package tag.
Consumer Notes
- The v1 supported scope is the generated English league-table dataset from the maintained
wikipedia/overview pipeline. Legacyrsssf/code remains outside the active ingestion path. - No schema break is included in v1. Consumers should still treat
outcomeStatusand documented metadata fields as the clearer source for administrative outcomes and lifecycle/status interpretation. trackedFromSeasonandtrackedToSeasonin club metadata are observed coverage bounds in the generated dataset, not founded/dissolved dates.status.currentis a current high-level club metadata status, not a per-season table-row outcome. Use row-level fields such asoutcomeStatus,wasRelegated,wasReprieved, and notes for season-specific interpretation.derived.relationshipsis an audit/navigation aid for lineage-like records, not legal proof of club continuity.
Known Limitations
- V1 is source-of-truth ready for the supported generated scope; it is not a claim of exhaustive lower-tier history or complete legal-entity modeling for every club.
- Tier 5 and tier 6 are covered by targeted modern fixtures and generated data where source pages expose usable tables, but they are not yet as deeply vetted as tiers 1-4.
- Club metadata includes source-backed lifecycle and lineage work for reviewed records, but unresolved historical ambiguity is documented or deferred rather than filled with weak assertions.
- TypeScript migration remains partial. The main contracts, output normalization, verification, and release gates are stronger, but parser-heavy modules are still mostly JavaScript.
Published Data
- Season coverage: 1888-2025 (138 season records)
- League table records: 438 tier tables
- Club metadata records: 232
- Club status split: 195 active, 5 historical, 32 unknown
- Clubs with source-backed lifecycle events: 88
- Clubs with tracked absence explanations: 117
Data Change Summary
- Seasons before: 138
- Seasons after: 138
- Added seasons: 0
- Removed seasons: 0
- Changed seasons: 0
No season-table changes were detected after regenerating the release data.
Validation
Release data is regenerated from the Wikipedia overview pipeline and checked before publishing.
- Jest unit tests
- Wikipedia integration tests
- ESLint
- Prettier format check
- FootballData structural validation
- Club continuity and historical-reason validation
- Table points-order validation, with known points-per-game and source-order exceptions explicitly exempted
Assets
all-seasons.jsonall-seasons.min.jsonwiki_overview_tables_by_season.jsonwiki_overview_tables_by_season.min.jsonclub-metadata.jsonrelease-diff.jsonrelease-diff.mdrelease-notes.md
The detailed machine diff is attached as release-diff.json; the compact markdown diff is attached as release-diff.md.