Repository navigation
Releases: dills122/footy-data-kit
Release list
Release v1.1.0
footy-data-kit v1.1.0
Summary
- Expands generated lower-tier data while preserving the top-four-tier contract: tier 5 and level 6 now cover the modern 1979-2025 lower-tier slice where source pages expose usable tables.
- Grows generated club metadata from 232 to 375 records, reflecting the broader maintained dataset scope.
- Adds club crest asset metadata with candidate provenance, license classification, generated placeholders, and review flags so consumers can choose an asset policy that matches their rights model.
Breaking Changes
None.
Data Changes
- Keeps
tier1throughtier4season coverage unchanged fromv1.0.0. - Expands generated
tier5coverage from 14 to 47 seasons. - Expands generated level-six coverage from 5 to 47 seasons, using
tier6.divisions[]for parallel divisions. - Adds
assets.crestbundles todata/club-metadata.json. The package stores URLs and provenance only; it does not download or redistribute image binaries. - Classifies crest records as
usable,restricted,placeholder, orneeds-more-research, with review issues captured indata/club-assets-review.json. - Leaves
Hounslowas the only trueneeds-more-researchcrest/color case, withBridgend Town,Bromsgrove Rovers, andSolihull Boroughstill marked for quality review.
Validation
- Full local release-readiness checks passed before the pre-release branch:
pnpm test,pnpm test:integration,pnpm typecheck,pnpm -s verify:data,pnpm -s schema:verify,pnpm format:check,pnpm -s docs:check,pnpm -s lint, andpnpm -s release:dry-run-data. - The release dry-run rebuilt the full 1888-2025 generated range into a temporary directory, produced 138 season records and 375 club metadata records, and passed data verification, club-continuity verification, and JSON Schema verification.
data/club-metadata-review.jsonis clean withissueCount: 0.- Known club asset review issues are limited to expected restricted-license club marks, one missing research case, and three quality-review candidates.
Consumer Notes
trackedFromSeasonandtrackedToSeasonremain observed generated-data bounds, not founded or dissolved dates.status.currentremains a current high-level metadata status, not a season-row outcome.- Consumers should use
usablecrest assets by default, includeplaceholderonly when generated fallback shields are acceptable, and includerestrictedonly when their product can handle club mark licensing and trademark restrictions. - Treat
needs-review,needs-more-research, andfailedcrest states as non-display states unless the consuming app has its own review workflow.
Known Limitations
- The lower-tier expansion substantially broadens generated coverage, but it is still constrained by Wikipedia source page availability and structure.
- Most discovered club marks are license or trademark restricted, so the new crest metadata is a provenance and filtering layer rather than a blanket permission grant.
- The remaining non-license asset review items are intentionally carried forward rather than filled with weak assertions.
Published Data
- Season coverage: 1888-2025 (138 season records)
- League table records: 513 tier tables
- Club metadata records: 375
- Club status split: 290 active, 6 historical, 79 unknown
- Clubs with source-backed lifecycle events: 164
- Clubs with tracked absence explanations: 125
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.
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.
Release v0.9.1
footy-data-kit v0.9.1
Summary
- Tightened existing generated data labels ahead of v1 by fixing reprieved-row flags and replacing generic overview tier titles with canonical league names.
- Added verifier coverage so future releases fail when a row note says a club was reprieved but
wasReprievedis not set. - Updated roadmap and next-work docs to reflect the post-v0.9.0 baseline and the v0.9.1 correctness scope.
Breaking Changes
None.
Data Changes
- Rows with notes such as
Reprieved from re-electionorReprieved from relegationnow setwasReprieved: true. - Generic overview metadata titles such as
League tablesare replaced with canonical season/level labels includingPremier League,Championship,League One,League Two, andConference Premier. - Source
leagueIdvalues remain unchanged so consumers can still inspect the original Wikipedia heading identity. - The legacy promotion aggregate was regenerated from source and now drops several stale top-flight relegation flags/lists where the current source no longer marks those clubs as relegated:
1892:tier1,1893:tier1,1894:tier1,1895:tier1,1896:tier1, and1987:tier1.
Bug Fixes
- Fixed reprieve detection in the shared table parser and typed output normalizer.
- Fixed generated tier metadata labels for overview pages whose source heading is generic but whose season/level position is unambiguous.
Validation
- Added focused Jest coverage for reprieved row parsing, typed entry normalization, overview metadata title canonicalization, and verifier note/flag consistency.
- Added a data verifier check for rows with reprieve notes and missing
wasReprievedflags.
Consumer Notes
- No schema shape change is included in this release.
wasRelegatedsemantics are unchanged for reprieved-from-relegation rows; this release adds the missingwasReprievedflag so consumers can distinguish those rows.- This is not a tier 5 or level 6 backfill release.
Known Limitations
- The 1957-58 Third Division North/South restructure still needs a v1 decision on whether bottom-half placement into the new Fourth Division should remain represented as ordinary relegation or gain more explicit restructure-placement metadata.
- Lower-tier historical coverage beyond the currently generated dataset remains deferred until after v1 readiness work.
Published Data
- Season coverage: 1888-2025 (138 season records)
- League table records: 438 tier tables
- Club metadata records: 232
- Club status split: 196 active, 5 historical, 31 unknown
- Clubs with source-backed lifecycle events: 87
- 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.
Release v0.9.0
footy-data-kit v0.9.0
Summary
- Added the release-notes workflow needed for safer pre-releases, including checked-in curated notes, generated docs-site release pages, and validation that required release-note sections are present.
- Expanded source-of-truth readiness work with stronger schema verification, generated schema documentation, release dry-run checks, and an explicit integration coverage report.
- Continued the TypeScript migration by adding TypeScript checking infrastructure and converting the output generation path into typed modules.
Breaking Changes
None.
Data Changes
- No intentional generated season-table data change is included in this release.
- Added integration fixtures for 10 high-value seasons:
1921,1923,1930,1951,1991,1994,2004,2019,2021, and2024. - Expanded direct integration coverage to 43 of 138 season records, or 31.2% of the checked-in dataset.
- Added direct fixture coverage through
tier7, including split Third Division seasons, failed re-election and demotion cases, folded-club rows, the EFL rebrand, COVID/points-per-game handling, tier 5, and modern National League North/South rows.
Bug Fixes
- Fixed release schema verification ordering so generated schemas can be checked reliably during release validation.
- Added schema coverage for
seasonInfo.leagueStructureSpecialCasesso the published football-data schema matches the generated dataset contract.
Validation
- Added
release-notes:check,release-notes:check:all,release:check, andrelease:dry-run-dataso release candidates can validate notes, docs output, and rebuilt data before publishing. - Added
integration:coverageto report unique-season fixture coverage, source modes, asserted tiers, assertion counts, and tagged scenario coverage without fetching live pages. - Added a pre-release CI workflow that checks release notes, docs generation, type checking, linting, formatting, schema verification, and data verification.
- Tracked the current
2025:tier3points-order exception explicitly so the release verifier can distinguish that source-order anomaly from ordinary table-order regressions. - Added docs-site deployment gating for changes to release notes, docs-site generation, schemas, and package metadata after merge to
main.
Consumer Notes
- No intentional schema break is included in this release.
- The new release-note pages make release details easier to inspect on the docs site; the GitHub release body should stay shorter and link to the full docs page.
- Integration coverage percentage means unique seasons with at least one live integration fixture. It does not mean every row or every club in those seasons has exhaustive assertions.
Known Limitations
- Lower-tier historical coverage still needs deeper vetting before every tier can be treated as equally mature.
- TypeScript migration is in progress; the codebase is not fully typed yet.
- Current
tier6andtier7lower-tier metadata still needs follow-up review as part of the tier 5/6 hardening work. - The live
2025-26League One source currently ordersRotherham UnitedabovePort Valewhile exposing fewer points for Rotherham; this is treated as a narrow source-order exception, not as a general relaxation of table-order validation.
Published Data
- Season coverage: 1888-2025 (138 season records)
- League table records: 473 tier tables
- Club metadata records: 232
- Club status split: 196 active, 5 historical, 31 unknown
- Clubs with source-backed lifecycle events: 87
- Clubs with tracked absence explanations: 117
Data Change Summary
- Seasons before: 138
- Seasons after: 138
- Added seasons: 0
- Removed seasons: 0
- Changed seasons: 15
Changed seasons:
- 1921: season metadata
- 1957: season metadata
- 1958: season metadata
- 1987: season metadata
- 1991: season metadata
- 1992: season metadata
- 1993: season metadata
- 1994: season metadata
- 2004: season metadata
- 2019: 1 changed tier(s); season metadata
- 2021: 2 changed tier(s)
- 2022: 1 changed tier(s)
- ...and 3 more changed season(s).
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.
Release v0.8.2
Release Diff Summary
Metadata
- Previous generator: wikipedia-combined
- Previous generatedAt: 2026-06-13T01:20:30.973Z
- Previous gitSha: f62ed8b
- Current generator: wikipedia-combined
- Current generatedAt: 2026-06-18T01:33:19.668Z
- Current gitSha: 07cf694
Summary
- Seasons before: 138
- Seasons after: 138
- Added seasons: 0
- Removed seasons: 0
- Changed seasons: 1
Changed Seasons
- 2025: changed tiers: 1
Release v0.8.1
Release Diff Summary
Metadata
- Previous generator: wikipedia-combined
- Previous generatedAt: 2026-06-13T01:20:30.973Z
- Previous gitSha: f62ed8b
- Current generator: wikipedia-combined
- Current generatedAt: 2026-06-13T01:33:52.419Z
- Current gitSha: b76157a
Summary
- Seasons before: 138
- Seasons after: 138
- Added seasons: 0
- Removed seasons: 0
- Changed seasons: 0
Changed Seasons
- No season-level differences detected.
Release v0.8.0
Release Diff Summary
Metadata
- Previous generator: wikipedia-combined
- Previous generatedAt: 2026-06-13T00:10:01.248Z
- Previous gitSha: 69bf804
- Current generator: wikipedia-combined
- Current generatedAt: 2026-06-13T01:07:56.792Z
- Current gitSha: f62ed8b
Summary
- Seasons before: 138
- Seasons after: 137
- Added seasons: 0
- Removed seasons: 1
- Changed seasons: 13
- Removed season keys: 1984
Changed Seasons
- 1915: season info: season metadata
- 1916: season info: season metadata
- 1917: season info: season metadata
- 1918: season info: season metadata
- 1939: season info: season metadata
- 1940: season info: season metadata
- 1941: season info: season metadata
- 1942: season info: season metadata
- 1943: season info: season metadata
- 1944: season info: season metadata
- ...and 3 more changed seasons
Release v0.7.0
Release Diff Summary
Metadata
- Previous generator: wikipedia-combined
- Previous generatedAt: 2026-03-14T01:21:15.674Z
- Previous gitSha: f377012
- Current generator: wikipedia-combined
- Current generatedAt: 2026-03-14T02:26:32.968Z
- Current gitSha: 8c37130
Summary
- Seasons before: 137
- Seasons after: 137
- Added seasons: 0
- Removed seasons: 0
- Changed seasons: 11
Changed Seasons
- 1915: season info: season metadata
- 1916: season info: season metadata
- 1917: season info: season metadata
- 1918: season info: season metadata
- 1939: season info: season metadata
- 1940: season info: season metadata
- 1941: season info: season metadata
- 1942: season info: season metadata
- 1943: season info: season metadata
- 1944: season info: season metadata
- ...and 1 more changed seasons
Release v0.6.1
Release v0.6.0
Added more Verifiers, Cleaned Data: v0.6.0 (#16) * Clarify Wikipedia export schema contract * Normalize Wikipedia tier metadata schema * update season data * add & enhance verification scripts, found bad data gaps so filled those * regenerated the data files * Prepare 0.6.0 release workflow