Skip to content

StatLine v4.0.0rc4

Pre-release
Pre-release

Choose a tag to compare

@amillolive amillolive released this 01 Sep 20:54
· 0 commits to main since this release

Changelog

[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 tools namespace for advanced/internal pipeline utilities:
    • statline tools map ...
    • statline tools calc ...
    • statline tools cache ...
    • statline tools storage ...
    • statline tools weights ...
  • Added the canonical statline system namespace 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 statline itself 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 auto as a first-class StatLine OS mode alongside local and remote.
  • 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.yaml
    • URRL/S20/RB/FINAL.csv
    • an unpacked urrl.players StatPack source under statline/public/statpacks/unpacked/.
  • Added rc4 regression coverage for the reorganized CLI root, connectivity/auth messaging, serve preflight behavior, StatLine OS command passthrough, copied-shell command parsing, OS mode state, and installer StrictMode expectations.

Changed

  • Changed package version from 4.0.0rc3 to 4.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 canonical statline system ... spelling. The rc3 sys spelling remains a hidden compatibility alias.
  • Changed the root map, calc, cache, storage, and weights groups into hidden compatibility aliases; their canonical rc4 location is under statline tools.
  • Changed the legacy root statline run StatPack command into a hidden compatibility alias; the canonical rc4 command is statline statpack run.
  • Changed the legacy root adapters and interactive commands to hidden compatibility commands so they no longer crowd root help.
  • Changed Windows .statpack registration 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 remote to auto.
  • Changed StatLine OS help/status behavior:
    • help renders canonical root CLI help,
    • help <command> renders that command's CLI help,
    • status delegates to statline system status,
    • mode auto|local|remote changes 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 local messaging from an “offline” claim to an explicit execution choice: local core is being used and SLAPI is disabled.
  • Changed statline serve and 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 status output to report backend, slapi, and auth states instead of the older ambiguous reachable / online pair.
  • Changed the base HTTP client dependency from httpx>=0.27,<1.0 to httpx2>=2.0,<3.0, with CLI and StatLine OS imports updated accordingly.
  • Changed type-checker configuration from httpx.* missing-import handling to httpx2.*.
  • Changed the packaged unpacked public StatPack example/source from eba_players to urrl.players. The current eba.players adapter 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 serve startup 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 statline executable prefix or common prompt text.
  • Improved .statpack shell 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 .Count is safe. The uploaded source distribution does not include scripts/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, and e302.players current-schema files are byte-identical between the uploaded rc3 and rc4 distributions.
  • The new urrl.players integration is not a normal discoverable adapter yet. It is packaged under schemas/workspace/; normal adapter discovery still returns e302.players, eba.players, and eba.teams.
  • Root command organization changed, but rc3 command spellings are retained as hidden aliases. Scripts using statline sys, root map/calc/cache/storage/weights, or root statline run should continue to execute, while new documentation uses system, tools, and statpack 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 regular statline prompt.
  • StatLine OS now defaults to auto mode rather than remote.
  • The base network dependency changed from httpx to httpx2. Environments or tooling that directly import/patch StatLine's previous httpx client 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 current eba.players adapter remains present and unchanged.
  • Windows .statpack registration now targets statline statpack run --pause. Existing manual shell integrations that hard-code statline run still 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_collection reads scripts/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.session if httpx2 is not installed; normal package installation declares httpx2>=2.0,<3.0.
  • The detached statline os launcher 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 os launches the Textual REPL/shell/TUI client.
    • statline os --inline runs it in the current terminal.
    • the previous statline launch entry point remains as a hidden compatibility alias.
    • python -m statline.app.tui can 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 os install 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/score request 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 N
    • statline serve --keep-alive SECONDS
    • SLAPI_WORKERS
    • SLAPI_KEEP_ALIVE
  • Added Server-Timing response 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 report 4.0.0rc3 rather than 0+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.0rc2 to 4.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 score execution to request a lean scoring payload when --details is 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.AsyncClient for the lifetime of the session.
  • Changed the SLAPI /v4/score route 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 rich into a base dependency because the base CLI uses Rich presentation directly; Textual is isolated behind the new os extra while remaining included by extras/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.version rather 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+unknown when distribution metadata is absent.
  • Fixed statline --version so it reports CLI UX r1, StatLine v4.0.0rc3 instead of the rc2 CLI UX vr1 formatting error.
  • Replaced the old TUI launcher/home surface with the persistent StatLine OS session/TUI, eliminating the remaining stale StatLine UX presentation 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 profiles is omitted (or all is requested), every adapter-defined score profile is still calculated; pri remains 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/.yml path.
  • 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 serve may now start multiple Uvicorn worker processes by default rather than exactly one. Use --workers 1 / SLAPI_WORKERS=1 when 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 os extra (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+unknown fallback, CLI UX vr1 version text, and stale TUI presentation path are all resolved.
  • The detached statline os launcher 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 Framework when 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.0rc1 to 4.0.0rc2.
  • Renamed the primary release metadata key in statline/RELEASE from GENERATION=4 to VERSION=4.
  • Renamed the private release metadata field ReleaseInfo.generation to ReleaseInfo.version and updated the release loader accordingly.
  • Kept core, gateway, and app component release counters at 1.
  • Renamed the command-line presentation layer from StatLine UX to CLI UX.
  • Changed the CLI UX revision display to rN, currently r1, and separated it from the StatLine package version in the main banner.
  • Changed the interactive launcher title from StatLine UX to CLI 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.1 text to v4.0.0rc2.
  • Corrected stale HOWTO packaged-dataset examples from statline/core/datasets/data/stats/... to statline/core/datasets/....
  • Corrected the HOWTO health example from /v3/health to /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.py by routing float comparisons through a typed _approx() wrapper around pytest.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.generation or parsing GENERATION= from statline/RELEASE must use ReleaseInfo.version / VERSION= in rc2.
  • The CLI presentation name is now CLI UX rather than StatLine 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's metadata.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 --version currently prints CLI UX vr1 because the eager version callback prepends v to the already revision-prefixed r1 CLI version.
  • One TUI return prompt still contains the old StatLine UX presentation 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/RELEASE
    • statline._release.ReleaseInfo
    • statline._release.RELEASE
    • independent core, gateway, and app release counters.
  • Added generation 4 release values:

    • generation: 4
    • core release: 1
    • gateway release: 1
    • app release: 1
  • Added ARCHITECTURE.md documenting the StatLine rebase architecture and module-ownership rules.

  • Added explicit runtime layers:

    • statline.core for adapters, datasets, scoring, StatPacks, types, and shared tools.
    • statline.gateway for HTTP, authentication, adapter discovery, and persistence.
    • statline.app for CLI, server runner, TUI, and developer tooling.
  • Added python -m statline support through statline.__main__.

  • Added a populated statline.sdk as 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 statpack CLI group with:

    • manifest
    • pack
    • render
    • unpack
    • inspect
    • register
    • unregister
  • 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.dataset references a bundled dataset.

  • Added split StatPack schema sections such as:

    • dimensions
    • sniff
    • filters
    • buckets
    • metrics
    • efficiency
    • weights
    • penalties
    • score_profiles
  • Added a bundled unpacked eba_players StatPack source under statline/public/statpacks/.

  • Added .statpack file-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.players
    • eba.teams
    • e302.players
  • Added bundled datasets:

    • EBA_Elevate302/e302.s1.players.csv
    • EBA_Elevate302/eba_players_gp3_plus.csv
    • EBA_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/score request model that can score exactly one of:

    • row
    • rows
    • dataset
  • 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.0 to 4.0.0rc1.

  • Changed statline.__version__ from a hard-coded package constant to importlib.metadata.version("statline"), with 0+unknown as the source-tree fallback when distribution metadata is unavailable.

  • Reworked the package architecture around the new core, gateway, and app layer boundaries.

  • Changed statline/cli.py into a small command-line façade, with the main CLI implementation moved to statline/app/cli/main.py.

  • Changed the slapi console entry point from statline.slapi.__main__:main to statline.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.map
    • statline.core.scoring.normalize
    • statline.core.scoring.score
    • statline.core.scoring.weights
  • Split dataset functionality into:

    • statline.core.datasets.load
    • statline.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 metadata block containing:

    • id
    • title
    • version
    • author
    • optional aliases,
    • optional dataset reference,
    • optional metadata.
  • Changed current adapter IDs to lowercase dotted identifiers such as eba.players and eba.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, and valorant adapters into schemas/deprecated/ while keeping them discoverable.

  • Reworked eba_players into the canonical eba.players v4 adapter.

  • Added a second e302.players identity 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_gp
    • real_gp1
    • no_real
    • rel_gp
    • stat_total
    • stat_active
    • scoreable
    • no_score
    • gp_share
  • Added EBA player scoring_gravity and gp buckets.

  • Changed EBA player relative-GP calculation to use the submitted dataset's maximum GP through dataset_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_teams into canonical eba.teams version 4.0.0.

  • Changed EBA team bucket names from the old offense/defense shorthand to explicit offense and defense buckets.

  • Added an EBA team form bucket.

  • 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/ to statline/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 older map_raw_to_metrics fallback is no longer accepted by statline.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/RELEASE to wheel and source-distribution contents.

  • Added ARCHITECTURE.md and typing stubs to source distributions.

  • Removed the development upper bound on pytest>=8.1.

  • Changed the development twine requirement 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, and games.
  • 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.slapi package namespace.

  • Removed the old flat statline.services namespace.

  • Removed the old flat statline.utils namespace.

  • Removed the old top-level statline.tui namespace; TUI functionality now lives under statline.app.tui.

  • Removed the old statline.data package layout.

  • Removed the old top-level statline.datasets module.

  • Removed the old flat core modules:

    • statline.core.calculator
    • statline.core.normalization
    • statline.core.scoring
    • statline.core.weights
  • Removed the old statline/core/adapters/defs/ adapter location.

  • Removed the old statline/core/adapters/loader.py and types.py layout.

  • 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 new core, gateway, or app paths.
  • 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/score wraps results with adapter/source/count metadata and supports row, rows, or dataset input 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/moderation and the new hyphenated API-key resource names.
  • Canonical adapter IDs changed. eba_players and eba_teams now report canonical IDs eba.players and eba.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, and metadata.author.
  • Dataset package paths changed from statline/data/stats/... to statline/core/datasets/....
  • Custom compiled-adapter-like objects passed to the public API must expose map_raw. map_raw_to_metrics alone 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's metadata.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 is statline/core/datasets/....
  • Generated EBA player adapter header comments still contain stale # Version: 3.0.1 text even though their adapter metadata reports version 4.0.0.

Find it on PyPI: https://pypi.org/project/statline/