Repository navigation
StatLine v4.0.0rc4
Pre-releaseChangelog
[4.0.0rc4] - 2026-09-01
Release Summary
StatLine 4.0.0rc4 is a CLI, StatLine OS, connectivity, and release-surface polish release candidate over rc3. It does not change the core scoring engine or the existing current EBA/Elevate302 adapter formulas. The rc3 hot-path, selective-profile, lean-output, pooled-client, and SLAPI concurrency improvements remain intact. Instead, rc4 makes the command surface substantially more coherent, makes StatLine OS execute that same command surface in-process, separates SLAPI reachability from authentication state, moves advanced pipeline utilities out of root help, updates StatPack execution/Windows association behavior, migrates the client dependency from httpx to httpx2, and adds an unreleased URRL workspace adapter/dataset/StatPack source.
The normal discoverable adapter set remains e302.players, eba.players, and eba.teams. The new urrl.players schema lives under schemas/workspace/, so it is packaged as development/integration material rather than promoted into normal adapter discovery.
Added
- Added the canonical
statline toolsnamespace for advanced/internal pipeline utilities:statline tools map ...statline tools calc ...statline tools cache ...statline tools storage ...statline tools weights ...
- Added the canonical
statline systemnamespace for runtime/backend/auth/path status. - Added
statline statpack run <pack.statpack>as the canonical StatPack execution command. - Added root-help organization into clearer command groups:
- Core workflows
- Service & access
- Administration
- Advanced
- Added direct regular-CLI execution inside StatLine OS. The OS now accepts the same command tree and validation as
statlineitself instead of maintaining a separate scoring command language. - Added copy/paste normalization in StatLine OS for commands copied from:
statline ...statline.exe ...statline.cmd ...python -m statline ...- the
statline>OS prompt - PowerShell prompts such as
PS C:\repo> statline ...
- Added
autoas a first-class StatLine OS mode alongsidelocalandremote. - Added explicit StatLine OS state tracking for:
- SLAPI disabled,
- SLAPI unavailable,
- SLAPI reachable,
- authenticated,
- unauthenticated,
- last request latency.
- Added a packaged URRL / United Rogue Rocket League integration workspace:
schemas/workspace/urrl.players.yamlURRL/S20/RB/FINAL.csv- an unpacked
urrl.playersStatPack source understatline/public/statpacks/unpacked/.
- Added rc4 regression coverage for the reorganized CLI root, connectivity/auth messaging,
servepreflight behavior, StatLine OS command passthrough, copied-shell command parsing, OS mode state, and installer StrictMode expectations.
Changed
- Changed package version from
4.0.0rc3to4.0.0rc4. - Changed root CLI presentation so normal help emphasizes the primary workflows instead of exposing every pipeline stage at the top level.
- Changed
statline sys ...to the canonicalstatline system ...spelling. The rc3sysspelling remains a hidden compatibility alias. - Changed the root
map,calc,cache,storage, andweightsgroups into hidden compatibility aliases; their canonical rc4 location is understatline tools. - Changed the legacy root
statline runStatPack command into a hidden compatibility alias; the canonical rc4 command isstatline statpack run. - Changed the legacy root
adaptersandinteractivecommands to hidden compatibility commands so they no longer crowd root help. - Changed Windows
.statpackregistration to launch:statline statpack run --pause "%1"
instead of:statline run --pause "%1".
- Changed StatLine OS from a parallel session-specific scoring interface into an in-process frontend over the canonical Typer CLI application.
- Changed StatLine OS startup mode default from
remotetoauto. - Changed StatLine OS help/status behavior:
helprenders canonical root CLI help,help <command>renders that command's CLI help,statusdelegates tostatline system status,mode auto|local|remotechanges the inherited CLI mode and rechecks startup state.
- Changed StatLine OS presentation to plain terminal text rather than Rich markup inside the output log, improving normal terminal-style selection/copy behavior.
- Changed CLI banner behavior inside StatLine OS so delegated in-process commands do not redraw the main StatLine banner for every command.
- Changed SLAPI startup detection so a successful TCP connection is only a preliminary gate; a successful StatLine health request is required before the endpoint is considered reachable SLAPI.
- Changed connectivity state reporting to treat reachability and authentication as separate facts.
- Changed
--mode localmessaging from an “offline” claim to an explicit execution choice: local core is being used and SLAPI is disabled. - Changed
statline serveand StatLine OS startup handling so they do not emit an unrelated client-side SLAPI connectivity preflight verdict before launching their own service/session behavior. - Changed remote-mode validation so it distinguishes:
- SLAPI unavailable,
- SLAPI reachable but client unauthenticated.
- Changed fallback/error wording throughout CLI remote operations to distinguish authentication rejection, service unavailability, and unexpected request failure.
- Changed
statline system statusoutput to reportbackend,slapi, andauthstates instead of the older ambiguousreachable/onlinepair. - Changed the base HTTP client dependency from
httpx>=0.27,<1.0tohttpx2>=2.0,<3.0, with CLI and StatLine OS imports updated accordingly. - Changed type-checker configuration from
httpx.*missing-import handling tohttpx2.*. - Changed the packaged unpacked public StatPack example/source from
eba_playerstourrl.players. The currenteba.playersadapter YAML itself is unchanged. - Updated README, HOWTO, architecture documentation, version fallbacks, command examples, and release checklist for rc4 terminology and the reorganized CLI/OS surface.
Fixed / Improved
- Fixed misleading connectivity language that previously treated “SLAPI not being used” as equivalent to the machine being offline.
- Fixed the CLI distinction between an unreachable SLAPI endpoint and a reachable endpoint for which the client has no valid authentication.
- Fixed
servestartup presentation so launching a local SLAPI server does not first report the state of a separate client connection. - Improved root CLI discoverability by keeping the common workflow small: score, adapters, StatPacks, StatLine OS, service/auth/system functions, with lower-level stages grouped under
tools. - Improved StatLine OS consistency by eliminating command drift between the OS and normal CLI; both now use the same Typer command tree, help text, parsing, and validation.
- Improved StatLine OS copy/paste usability by accepting commands copied directly from normal shells without requiring users to remove the
statlineexecutable prefix or common prompt text. - Improved
.statpackshell integration so the registered Windows command points at the canonical rc4 StatPack command path. - Improved source-tree version reporting to use the rc4 fallback
4.0.0rc4. - The rc4 release documentation and regression test describe a fix for the Windows installer builder's PowerShell StrictMode Inno Setup candidate handling so a single discovered candidate remains a collection and
.Countis safe. The uploaded source distribution does not includescripts/build-statline-installer.ps1, so that implementation cannot be independently verified from this tarball alone.
Compatibility / Breaking Changes
- No core scoring-engine change was introduced relative to rc3. Files under the scoring hot path are unchanged in the uploaded rc3 and rc4 source distributions.
- Existing current EBA/Elevate302 adapter formulas are unchanged.
eba.players,eba.teams, ande302.playerscurrent-schema files are byte-identical between the uploaded rc3 and rc4 distributions. - The new
urrl.playersintegration is not a normal discoverable adapter yet. It is packaged underschemas/workspace/; normal adapter discovery still returnse302.players,eba.players, andeba.teams. - Root command organization changed, but rc3 command spellings are retained as hidden aliases. Scripts using
statline sys, rootmap/calc/cache/storage/weights, or rootstatline runshould continue to execute, while new documentation usessystem,tools, andstatpack run. - StatLine OS command semantics changed materially. The rc3 session-native command language (
use,load,profile,profiles,dataset, and related session-specific scoring flow) has been replaced by the canonical StatLine CLI command tree. OS users should issue the same commands they would use at a regularstatlineprompt. - StatLine OS now defaults to
automode rather thanremote. - The base network dependency changed from
httpxtohttpx2. Environments or tooling that directly import/patch StatLine's previoushttpxclient boundary may need to update. - The packaged
statline/public/statpacks/unpacked/eba_players/source tree was removed. Consumers depending on that package-internal path must migrate; the actual currenteba.playersadapter remains present and unchanged. - Windows
.statpackregistration now targetsstatline statpack run --pause. Existing manual shell integrations that hard-codestatline runstill work through the hidden compatibility alias in rc4.
Known RC4 Issues
- The uploaded rc4 source distribution contains 116 collected tests, but it is not fully self-contained for its included test suite:
tests/test_architecture.py::test_installer_strict_mode_keeps_inno_candidates_as_a_collectionreadsscripts/build-statline-installer.ps1, while that installer script is not included in the uploaded sdist. With the rc4 HTTP-client dependency boundary satisfied, this produces 115 passing tests and 1 failure from the extracted source archive. - Running the extracted source tree without installing rc4's declared dependencies will fail test collection at
statline.app.sessionifhttpx2is not installed; normal package installation declareshttpx2>=2.0,<3.0. - The detached
statline oslauncher remains Windows-specific; on other platforms StatLine falls back to running the OS client inline.
[4.0.0rc3] - 2026-08-31
Release Summary
StatLine 4.0.0rc3 is a performance, concurrency, and application-surface release candidate over rc2. It does not change the bundled EBA/Elevate302 adapter YAML, packaged datasets, or their scoring formulas. Instead, rc3 reduces work inside the adapter/scoring hot paths, adds selective score-profile execution and lean output construction, introduces the persistent StatLine OS client, improves HTTP connection reuse and SLAPI concurrency, tightens current-vs-deprecated adapter discovery, and closes the remaining rc2 StatPack/versioning issues.
The default scoring API remains compatible for callers that do not opt into the new profile/output controls: when no profile selection is supplied, StatLine still calculates every adapter-defined score profile and preserves the primary pri result.
Added
- Added the persistent StatLine OS application surface:
statline oslaunches the Textual REPL/shell/TUI client.statline os --inlineruns it in the current terminal.- the previous
statline launchentry point remains as a hidden compatibility alias. python -m statline.app.tuican launch the TUI directly.
- Added
statline.app.session.StatLineSession, providing reusable in-process state for:- local/remote mode switching,
- pooled SLAPI connectivity,
- adapter selection,
- score-profile selection,
- dataset loading,
- repeated scoring without restarting the application,
- session status, health, clear, and exit commands.
- Added the
osinstall extra:pip install "statline[os]"installs the persistent Textual application surface without requiring the full remote/extras stack. - Added selective score-profile execution through
profiles=[...]across the public Python scoring API and the SLAPI v4/v4/scorerequest model. - Added compile-time dataset aggregate requirements to
CompiledAdapter, allowing adapters to declare exactly which aggregate operations and headers their expressions need. - Added configurable SLAPI worker and keep-alive controls:
statline serve --workers Nstatline serve --keep-alive SECONDSSLAPI_WORKERSSLAPI_KEEP_ALIVE
- Added
Server-Timingresponse headers exposing end-to-end application processing time for gateway requests. - Added a source-tree package-version fallback in
statline._version, so extracted/uninstalled source trees report4.0.0rc3rather than0+unknown. - Added dedicated tests for authentication helpers, CLI helpers, the persistent session, SLAPI v4 scoring, CSV/cache storage, and expanded public/core behavior.
Changed
- Changed package version from
4.0.0rc2to4.0.0rc3. - Changed adapter expression execution to use a trusted numeric context prepared once per row instead of repeatedly coercing values inside compiled expression hot paths.
- Changed constant expression lowering so numeric constants are resolved during compilation rather than wrapped in runtime coercion calls.
- Changed batch dataset aggregate preparation so compiled adapters request only the headers and operations actually referenced by their metric, transform, and efficiency expressions.
- Changed batch mapping to resolve the adapter mapper and optional sanity hook once for the batch instead of re-resolving them for every row.
- Changed scoring so callers may request only the score profiles they need; the primary profile is still included automatically for compatibility.
- Changed score-profile processing so percentile calculations are performed only for window profiles that require them.
- Changed output construction to honor output toggles before allocating bucket, component, weight, and context payloads rather than constructing those structures and removing them afterward.
- Changed normal CLI
scoreexecution to request a lean scoring payload when--detailsis not used, while preserving the existing table/export fields. - Changed the one-shot CLI HTTP layer to reuse a process-wide pooled HTTP client/session instead of opening a fresh client for each request.
- Changed StatLine OS remote operation to use one pooled
httpx.AsyncClientfor the lifetime of the session. - Changed the SLAPI
/v4/scoreroute to run synchronous dataset I/O and CPU scoring through Starlette's thread pool rather than on the async event loop. - Changed the local SLAPI runner from a fixed single worker to a configurable worker count, defaulting to available CPUs capped at 4, with a 60-second keep-alive default.
- Changed adapter discovery so
schemas/deprecated/is excluded from normal registry discovery, CLI/API adapter lists, and sniffing. - Changed deprecated adapter compatibility so deprecated YAML remains packaged but must be addressed by an explicit local filesystem path.
- Changed gateway adapter resolution so API scoring/resources expose only currently supported discoverable adapters.
- Changed CLI local fallback behavior to use current adapter discovery rather than falling back to deprecated/demo adapter names.
- Changed
richinto a base dependency because the base CLI uses Rich presentation directly; Textual is isolated behind the newosextra while remaining included byextras/devpack. - Updated README, HOWTO, and architecture documentation for rc3 installation variants, StatLine OS, selected profiles, server workers/keep-alive, explicit deprecated-adapter paths, and the new concurrency model.
Fixed / Improved
- Fixed the remaining rc2 StatPack round-trip failure by rendering generated adapter headers from the adapter's own
metadata.versionrather than the StatLine package version. - Fixed extracted-source version reporting so package banners and generated source-tree behavior no longer fall back to
StatLine v0+unknownwhen distribution metadata is absent. - Fixed
statline --versionso it reportsCLI UX r1, StatLine v4.0.0rc3instead of the rc2CLI UX vr1formatting error. - Replaced the old TUI launcher/home surface with the persistent StatLine OS session/TUI, eliminating the remaining stale
StatLine UXpresentation path. - Improved scoring throughput by avoiding unnecessary profile calculations, percentile passes, output dictionaries, repeated mapper/sanity lookup, and unused dataset aggregate work.
- Improved CLI/OS remote latency for repeated operations through HTTP connection pooling and keep-alive reuse.
- Improved SLAPI responsiveness under concurrent traffic by keeping synchronous scoring off the event loop and allowing multiple worker processes.
- Improved adapter exposure boundaries so deprecated compatibility schemas cannot be selected accidentally by aliases or normal API discovery.
- Improved test coverage from the rc2 suite of 21 tests to 113 passing tests in the uploaded rc3 source tree.
Compatibility / Breaking Changes
- No bundled scoring-formula or packaged-dataset change was introduced relative to rc2. The current adapter YAML and dataset files are unchanged between the uploaded rc2 and rc3 source distributions.
- Default score-profile behavior remains compatible. If
profilesis omitted (orallis requested), every adapter-defined score profile is still calculated;priremains the primary compatibility field. - Deprecated adapter discovery intentionally changed. Names such as deprecated/demo adapters are no longer discoverable or resolvable through normal registry/API lookup. Local compatibility use must pass the explicit
.yaml/.ymlpath. - Remote/API use of deprecated adapters is no longer supported through normal adapter identifiers. The gateway exposes only current supported adapters.
- Server process behavior changed.
statline servemay now start multiple Uvicorn worker processes by default rather than exactly one. Use--workers 1/SLAPI_WORKERS=1when single-process behavior is required; reload mode requires one worker. - Install dependency layout changed. Rich is now part of the base install, while Textual is available through the dedicated
osextra (and remains in larger extras/dev installs).
Known RC3 Issues
- The uploaded 4.0.0rc3 source tree completes its included test suite with 113 passing tests and 0 failures.
- No remaining rc2 known issue reproduced in the uploaded rc3 tree: the StatPack metadata-version assertion, source-tree
0+unknownfallback,CLI UX vr1version text, and stale TUI presentation path are all resolved. - The detached
statline oslauncher is Windows-specific; on other platforms StatLine falls back to running the OS client inline.
[4.0.0rc2] - 2026-08-30
Release Summary
StatLine 4.0.0rc2 is a focused release-candidate polish update over rc1. It does not change the scoring engine, bundled adapter formulas, dataset aggregate behavior, StatPack implementation, or the SLAPI v4 scoring surface. Instead, rc2 aligns release metadata terminology, separates the CLI UX revision from the StatLine package version in the command banner, resolves strict-Pyright typing noise in the aggregate tests, and performs a substantial README/HOWTO cleanup for the v4 release candidate.
Added
- Added explicit dual-version CLI banner output separating the application UX revision from the StatLine package version:
CLI UX r1, StatLine v4.0.0rc2 — Adapter-Driven Scoring Frameworkwhen installed package metadata is available.
- Added Windows PowerShell-specific virtual-environment, environment-variable, and multiline-command guidance to the HOWTO/README documentation.
- Added a clearer v4 README structure covering install variants, local/Python quick starts, CLI commands, scoring concepts, dataset-relative expressions, input formats, remote/API mode, development, and release checks.
Changed
- Changed package version from
4.0.0rc1to4.0.0rc2. - Renamed the primary release metadata key in
statline/RELEASEfromGENERATION=4toVERSION=4. - Renamed the private release metadata field
ReleaseInfo.generationtoReleaseInfo.versionand updated the release loader accordingly. - Kept core, gateway, and app component release counters at
1. - Renamed the command-line presentation layer from
StatLine UXtoCLI UX. - Changed the CLI UX revision display to
rN, currentlyr1, and separated it from the StatLine package version in the main banner. - Changed the interactive launcher title from
StatLine UXtoCLI UX. - Reworked the README from the escaped/flattened rc1 rendering into normal Markdown with dedicated sections, tables, examples, and current v4 terminology.
- Updated HOWTO release references from stale
v3.0.1text tov4.0.0rc2. - Corrected stale HOWTO packaged-dataset examples from
statline/core/datasets/data/stats/...tostatline/core/datasets/.... - Corrected the HOWTO health example from
/v3/healthto/v4/health. - Replaced the old v3.0.1 release checklist with an rc2 checklist covering package metadata, release metadata, bundled resources, tests, lint/type checks, build/Twine validation, clean-wheel smoke testing, and artifact hygiene.
Fixed / Improved
- Improved strict-Pyright compatibility in
tests/test_dataset_aggregates.pyby routing float comparisons through a typed_approx()wrapper aroundpytest.approx. - Reformatted dataset aggregate tests for stricter type-checking/linting compatibility without changing aggregate semantics.
- Fixed the rc1 README's escaped Markdown presentation so headings, code fences, tables, links, and emphasis render normally.
- Improved Windows documentation by distinguishing POSIX shell activation/continuation syntax from PowerShell syntax.
- Improved v4 documentation consistency around install extras, dataset paths, API health routing, scoring terminology, and release validation.
Compatibility / Breaking Changes
- No new scoring, adapter, dataset, StatPack, or SLAPI v4 request/response break was introduced relative to rc1. The runtime files implementing those systems are unchanged between the rc1 and rc2 source distributions.
- Private release-metadata consumers may need an update. Code reading
statline._release.ReleaseInfo.generationor parsingGENERATION=fromstatline/RELEASEmust useReleaseInfo.version/VERSION=in rc2. - The CLI presentation name is now
CLI UXrather thanStatLine UX; scripts asserting literal banner text may need to update.
Known RC2 Issues
- The extracted 4.0.0rc2 source tree still runs 20 passing tests and 1 failing test out of 21.
- The remaining failure is still
test_manifest_render_unpack_and_run_round_trip: StatPack-rendered adapter headers use the StatLine package version/fallback while the test expects the adapter'smetadata.version. - In a bare extracted source tree without installed package metadata, the main banner reports
StatLine v0+unknown; an installed distribution is expected to resolve the package version from distribution metadata. statline --versioncurrently printsCLI UX vr1because the eager version callback prependsvto the already revision-prefixedr1CLI version.- One TUI return prompt still contains the old
StatLine UXpresentation name.
[4.0.0rc1] - 2026-08-30
Release Summary
StatLine 4.0.0rc1 is a major architectural rebase of StatLine 3.0.0. It reorganizes the runtime into explicit core, gateway, and app layers, introduces portable StatPacks, replaces the SLAPI v3 HTTP surface with a consolidated v4 API, adds dataset-aware adapter expressions, and formalizes independent release metadata for the core, gateway, and application layers.
The high-level local Python API and most CLI workflows remain recognizable, but this release intentionally removes compatibility shims for the old package/module layout and direct SLAPI v3 endpoints. Applications importing internal v3 modules or calling v3 HTTP routes will require migration.
Added
-
Added package version
4.0.0rc1. -
Added generation/layer release metadata through:
statline/RELEASEstatline._release.ReleaseInfostatline._release.RELEASE- independent
core,gateway, andapprelease counters.
-
Added generation 4 release values:
- generation:
4 - core release:
1 - gateway release:
1 - app release:
1
- generation:
-
Added
ARCHITECTURE.mddocumenting the StatLine rebase architecture and module-ownership rules. -
Added explicit runtime layers:
statline.corefor adapters, datasets, scoring, StatPacks, types, and shared tools.statline.gatewayfor HTTP, authentication, adapter discovery, and persistence.statline.appfor CLI, server runner, TUI, and developer tooling.
-
Added
python -m statlinesupport throughstatline.__main__. -
Added a populated
statline.sdkas a stable SDK surface exposing:- adapter discovery/loading,
- dataset discovery/loading,
- row/batch mapping,
- row/batch scoring,
score(),run_statpack().
-
Added the StatPack package format for portable scoring packages.
-
Added StatPack lifecycle APIs for:
- manifesting an adapter YAML or source directory,
- packaging edited sources,
- rendering runtime adapter YAML,
- safe unpacking,
- inspection without executing the runner,
- execution,
- report generation.
-
Added the
statline statpackCLI group with:manifestpackrenderunpackinspectregisterunregister
-
Added top-level
statline run <pack.statpack>support for running trusted StatPacks. -
Added StatPack runner output support for:
- terminal tables,
- JSON,
- JSONL,
- CSV,
- Rich HTML/SVG/ANSI report output.
-
Added StatPack dataset embedding when
metadata.datasetreferences a bundled dataset. -
Added split StatPack schema sections such as:
dimensionssnifffiltersbucketsmetricsefficiencyweightspenaltiesscore_profiles
-
Added a bundled unpacked
eba_playersStatPack source understatline/public/statpacks/. -
Added
.statpackfile-type metadata with:- Windows current-user registration/unregistration support,
- Linux MIME/desktop-entry generation,
- macOS document/UTI manifest generation.
-
Added safe StatPack extraction checks that reject:
- path traversal,
- non-canonical archive paths,
- symlink entries,
- packages missing required metadata/runner/schema content.
-
Added secret isolation for StatPack subprocesses. API keys and secret-like environment variables are removed by default unless explicitly allowed with
--inherit-secrets. -
Added dataset aggregate functions to the adapter expression language:
dataset_max("HEADER")dataset_min("HEADER")dataset_mean("HEADER")dataset_median("HEADER")dataset_sum("HEADER")dataset_count("HEADER")
-
Added case-insensitive dataset aggregate lookup across arbitrary raw input headers.
-
Added shared batch-level dataset context so aggregate values are computed once and reused while mapping every row.
-
Added one-row aggregate behavior so single-row scoring treats the submitted row as a one-row dataset.
-
Added adapter/dataset matching helpers for:
- resolving dataset paths,
- resolving an adapter's declared dataset,
- finding an adapter for a dataset,
- resolving combined scoring targets.
-
Added a process-wide adapter registry with:
- compiled adapter caching,
- parsed-spec caching,
- source-path caching,
- atomic refresh,
- cache diagnostics,
- normalized alias/stem/ID resolution,
- collision detection.
-
Added canonical dotted adapter identifiers and separator normalization.
-
Added separate adapter schema directories:
schemas/current/schemas/deprecated/
-
Added current v4 adapters:
eba.playerseba.teamse302.players
-
Added bundled datasets:
EBA_Elevate302/e302.s1.players.csvEBA_Elevate302/eba_players_gp3_plus.csvEBA_Elevate302/statline-players(1).csv
-
Added SLAPI/Gateway v4 endpoints for:
- API index and health,
- consolidated adapter discovery and metadata,
- adapter sniffing,
- paginated packaged dataset access,
- unified row/batch/dataset scoring,
- raw and already-mapped input,
- optional mapped-row output.
-
Added a single
/v4/scorerequest model that can score exactly one of:rowrowsdataset
-
Added
input_kind=raw|mapped,caps_mode=batch|row,include_mapped, and dataset scoring limits to the v4 score API. -
Added v4 authentication, moderation, and administration routes under:
/v4/auth/v4/moderation/v4/admin
-
Added structural architecture tests enforcing the new package layout and module-ownership conventions.
-
Added dataset aggregate tests.
-
Added end-to-end StatPack lifecycle tests.
-
Expanded public API tests for current/deprecated adapter registration and v4 scoring behavior.
Changed
-
Changed package metadata from
3.0.0to4.0.0rc1. -
Changed
statline.__version__from a hard-coded package constant toimportlib.metadata.version("statline"), with0+unknownas the source-tree fallback when distribution metadata is unavailable. -
Reworked the package architecture around the new
core,gateway, andapplayer boundaries. -
Changed
statline/cli.pyinto a small command-line façade, with the main CLI implementation moved tostatline/app/cli/main.py. -
Changed the
slapiconsole entry point fromstatline.slapi.__main__:maintostatline.app.runner.main:main. -
Moved the FastAPI application into
statline.gateway.http. -
Moved the server runner into
statline.app.runner. -
Moved the TUI into
statline.app.tui. -
Moved logging/path helpers into
statline.core.tools. -
Moved timing types into
statline.core.types. -
Split flat scoring modules into:
statline.core.scoring.mapstatline.core.scoring.normalizestatline.core.scoring.scorestatline.core.scoring.weights
-
Split dataset functionality into:
statline.core.datasets.loadstatline.core.datasets.resolve
-
Reworked adapter types into
statline.core.types.adapters. -
Reworked adapter loading into dedicated load, path, validation, matching, compilation, and registry modules.
-
Changed current adapter identity metadata toward the required
metadatablock containing:idtitleversionauthor- optional aliases,
- optional dataset reference,
- optional metadata.
-
Changed current adapter IDs to lowercase dotted identifiers such as
eba.playersandeba.teams. -
Changed adapter name lookup so dots, underscores, hyphens, whitespace, and slashes normalize to a common lookup representation.
-
Kept legacy top-level adapter metadata readable for deprecated adapters by converting it into the new metadata structure during loading.
-
Moved
demo,example, andvalorantadapters intoschemas/deprecated/while keeping them discoverable. -
Reworked
eba_playersinto the canonicaleba.playersv4 adapter. -
Added a second
e302.playersidentity targeting the EBA/Elevate302 player data. -
Expanded the EBA player adapter from 15 direct metrics and 18 efficiency metrics to 23 direct metrics and 20 efficiency metrics.
-
Added EBA player scoreability/reliability metrics including:
real_gpreal_gp1no_realrel_gpstat_totalstat_activescoreableno_scoregp_share
-
Added EBA player
scoring_gravityandgpbuckets. -
Changed EBA player relative-GP calculation to use the submitted dataset's maximum
GPthroughdataset_max("GP"). -
Added schema-driven EBA player filters for:
- league,
- team,
- conference,
- position,
- minimum GP.
-
Revised EBA player clamps, scoreability behavior, efficiency calculations, bucket weights, and scoring signals.
-
Reworked
eba_teamsinto canonicaleba.teamsversion4.0.0. -
Changed EBA team bucket names from the old offense/defense shorthand to explicit
offenseanddefensebuckets. -
Added an EBA team
formbucket. -
Changed team streak scoring to participate directly in recent-form weighting.
-
Revised EBA team PRI, standings, and predictive weight distributions to account for the form bucket.
-
Changed packaged dataset storage from
statline/data/stats/tostatline/core/datasets/. -
Expanded the packaged dataset registry from six CSV files in 3.0.0 to nine CSV files in 4.0.0rc1.
-
Changed dataset discovery to use a canonical packaged root with safe path resolution and ambiguity detection.
-
Changed
map_batch()so all rows share one precomputed dataset aggregate context. -
Changed batch raw scoring so raw filters execute before aggregate context/mapping and mapped metric filters execute after mapping but before score-context calculation.
-
Changed public custom-adapter resolution to require
map_raw; the oldermap_raw_to_metricsfallback is no longer accepted bystatline.public. -
Reworked the SLAPI HTTP API from many specialized v3 scoring routes into the consolidated v4 resource model.
-
Replaced separate v3 adapter metadata endpoints with one
/v4/adapters/{adapter}document containing inputs, metrics, buckets, filters, dimensions, weights, penalties, and score profiles. -
Replaced the separate v3 map/calc/PRI/score HTTP operations with
/v4/score. -
Changed moderation routes from
/v3/mod/...to/v4/moderation/.... -
Changed API-key HTTP naming toward
api-key/api-keys/api-key-requests. -
Added an internal CLI request-translation layer so existing CLI workflows can target the consolidated v4 remote API without retaining v3 server routes.
-
Changed dataset API responses to include structured dataset summaries and paginated row responses.
-
Changed health output to include the active adapter count.
-
Changed build configuration to package datasets from
statline/core/datasets/**/*.csv. -
Added
statline/RELEASEto wheel and source-distribution contents. -
Added
ARCHITECTURE.mdand typing stubs to source distributions. -
Removed the development upper bound on
pytest>=8.1. -
Changed the development
twinerequirement to>=7.0,<8.0.
Fixed / Improved
- Improved batch mapping so adapter expressions can reliably reference statistics from the entire submitted dataset.
- Improved filtering order so adapter-declared metric filters are evaluated on mapped metric values before scoring context is derived.
- Improved dimension and legacy filter lookup with case-insensitive raw-field matching.
- Improved games-played fallback lookup across case variants of
games_played,gp, andgames. - Improved EBA handling of empty/unscoreable player rows.
- Rows marked unscoreable now receive zero raw scoring contribution rather than participating normally in profile scoring.
- Unscoreable rows are assigned zero percentile values.
- Improved numeric coercion and error handling to catch explicit numeric conversion failures rather than broad exceptions in scoring paths.
- Improved adapter expression compilation through a restricted AST-based expression evaluator with caching.
- Improved adapter registry refresh so the new registry is installed atomically only after every discovered adapter has parsed and compiled successfully.
- Improved unknown-adapter errors with a list of available canonical adapters.
- Improved adapter alias/path resolution and collision detection.
- Improved dataset resolution with explicit ambiguity errors rather than silently selecting one of multiple matches.
- Improved packaged-dataset confinement for gateway dataset access.
- Improved StatPack extraction security with canonical-path, traversal, and symlink validation.
- Improved StatPack execution isolation by removing secret-like environment variables from child runner processes by default.
- Improved StatPack portability by embedding referenced datasets and using portable relative dataset paths.
- Improved machine-readable StatPack output with JSON, JSONL, and CSV modes.
- Improved score display/export with split-profile and wide-table layouts plus Rich report export.
- Expanded the test suite from the six tests shipped in 3.0.0 to 21 tests covering architecture, public APIs, dataset aggregates, and StatPacks.
Removed
-
Removed the
statline.slapipackage namespace. -
Removed the old flat
statline.servicesnamespace. -
Removed the old flat
statline.utilsnamespace. -
Removed the old top-level
statline.tuinamespace; TUI functionality now lives understatline.app.tui. -
Removed the old
statline.datapackage layout. -
Removed the old top-level
statline.datasetsmodule. -
Removed the old flat core modules:
statline.core.calculatorstatline.core.normalizationstatline.core.scoringstatline.core.weights
-
Removed the old
statline/core/adapters/defs/adapter location. -
Removed the old
statline/core/adapters/loader.pyandtypes.pylayout. -
Removed direct server exposure of the SLAPI v3 scoring and adapter-metadata API.
-
Removed separate server endpoints for:
/v3/map/row/v3/map/batch/v3/calc/pri/v3/calc/pri/batch/v3/pri/row/v3/pri/batch/v3/score/row/v3/score/batch- the individual
/v3/adapter/{adapter}/...metadata resources.
-
Removed compatibility shims for the old package namespaces as part of the rebase.
-
Removed the public-API fallback for custom adapters exposing only
map_raw_to_metrics. -
Removed the build expectation for
statline/slapi/storage/migrations/*.sql.
Breaking Changes
- Internal imports changed substantially. Code importing
statline.slapi,statline.services,statline.utils,statline.tui,statline.datasets, or the old flat core scoring modules must migrate to the newcore,gateway, orapppaths. - There are intentionally no package-level compatibility shims for the removed v3 namespaces.
- SLAPI clients must migrate from
/v3/...to/v4/.... The v4 server does not retain the old scoring/metadata route surface. - Remote scoring request and response shapes changed.
/v4/scorewraps results with adapter/source/count metadata and supportsrow,rows, ordatasetinput rather than exposing separate score/map/calc routes. - Adapter metadata endpoints changed. Clients should use
/v4/adapters/{adapter}rather than the old individual weights, metrics, inputs, dimensions, filters, traits, and spec endpoints. - Moderation/auth URL paths changed, including
/v4/moderationand the new hyphenated API-key resource names. - Canonical adapter IDs changed.
eba_playersandeba_teamsnow report canonical IDseba.playersandeba.teams. Legacy stems/aliases remain resolvable by the adapter registry, but code comparing returned adapter names literally may need updates. - Current adapter schemas require the v4 metadata model. New adapters should use
metadata.id,metadata.title,metadata.version, andmetadata.author. - Dataset package paths changed from
statline/data/stats/...tostatline/core/datasets/.... - Custom compiled-adapter-like objects passed to the public API must expose
map_raw.map_raw_to_metricsalone is no longer sufficient. - Batch mapping semantics changed for adapters using dataset aggregate functions because mapped values can now depend on the complete filtered batch.
- EBA player scores may differ materially from 3.0.0 because of new scoreability rules, dataset-relative GP scaling, scoring-gravity weighting, revised clamps, and revised adapter formulas.
- EBA team scores may differ because of revised weights and the new recent-form bucket.
- Direct version handling changed.
statline.__version__now comes from installed distribution metadata rather than a hard-coded source constant.
Known RC1 Issues
- The uploaded 4.0.0rc1 source tree currently runs 20 passing tests and 1 failing test out of 21.
- The failing test is
test_manifest_render_unpack_and_run_round_trip, where StatPack-rendered adapter headers use the StatLine package version while the test expects the adapter'smetadata.version. - In a bare extracted source tree without installed package metadata, that rendered version currently falls back to
0+unknown. - Some documentation in the rc1 source distribution still refers to v3.0.1 despite the package metadata being
4.0.0rc1. - Some README/HOWTO dataset examples still contain stale
statline/core/datasets/data/stats/...paths; the actual packaged dataset root isstatline/core/datasets/.... - Generated EBA player adapter header comments still contain stale
# Version: 3.0.1text even though their adapter metadata reports version4.0.0.
Find it on PyPI: https://pypi.org/project/statline/