Skip to content

v0.4.0

Choose a tag to compare

@github-actions github-actions released this 01 Aug 09:46
· 670 commits to main since this release
bb47432

The beta-readiness release: real-world files work on first contact, a
fifth verb (aion detect) lands with graded anomaly detectors, joint
enrichments are adjudicated honestly, tracked evidence becomes
task-conditioned with an advisory router, and the README/docs describe
the system as it is. Content-addressed IDs are salted with the runtime
version, so all artifact IDs change with this release (inputs and
parameters hash identically otherwise); golden artifacts were refreshed
accordingly.

Evaluated anomaly detection (aion detect / aion_detect_anomalies)

  • New fifth canonical macro: candidate detectors — robust z-score,
    rolling-median residual, and forecast-interval exceedance — compete on a
    deterministic synthetic anomaly-injection grader (spikes, level shifts,
    dropouts at noise-scaled magnitudes, placement seeded from the series
    content) before any of them labels the real series. Supplying labelled
    anomaly timestamps switches selection to label F1.
  • Every candidate's precision/recall/F1 ships in the artifact alongside
    the winner; abstention below 16 observations is inconclusive, and a
    best grader F1 under 0.5 downgrades the run to
    conditionally_supported — if no detector can recover planted
    anomalies in this series' noise, real detections inherit that doubt.
  • Registered as the detect_anomalies operator; surfaced through the
    CLI, agent tools, and MCP from the registry as usual.

Series fingerprints, task-conditioned tracking, and the thin router

  • Every tracked run now records a deterministic, unit-free series
    fingerprint (trend, noise ratio, intermittency, direction-change rate,
    season) and a task dimension. Existing stores migrate in place
    (schema v3); legacy rows read as forecast.
  • aion track leaderboard --task ... and
    TrackingStore.leaderboard(project, task=...) condition realised
    performance on the task, so accumulated evidence transfers by data
    shape instead of restarting cold per project.
  • aion route / aion_route: a disclosed, advisory routing decision —
    verified capability filter, then a fingerprint-weighted realised-MASE
    prior claimed only once ≥10 scored records exist for the task. Every
    exclusion reason and the decision itself are recorded to the store for
    replay. Evaluated runs still backtest every candidate; an explicit
    model choice always wins.

Multi-task adapter seams

  • TSFMCapabilities.tasks declares the tasks an adapter has verifiably
    implemented (default: forecasting only); eligible_tsfms(task=...)
    filters on it. MOMENT declares forecast, detect_anomalies,
    impute, and embed.
  • The adapter protocol gains two optional verbs: reconstruct(history, mask) (masked reconstruction — anomaly signal and imputation) and
    embed(history). Both are implemented for MOMENT in-process and in
    the sandbox worker, whose JSON protocol now carries a mode field;
    stale sandbox worker scripts refresh automatically.
  • Installed multi-task sandboxes join the anomaly-detection candidate
    pool as reconstruction-error detectors and must win the same grader as
    the statistical detectors; a detector that cannot run scores zero with
    its error disclosed instead of failing the run.

Enrichment adjudication

  • Context events and covariates can now be supplied in the same forecast
    run. Each enrichment still passes its own independent, leakage-safe
    ablation gate; a new adjudication stage then runs a championship ladder —
    the base model against every admitted challenger (base + context,
    base + covariates, base + both) on identical selection folds — and picks
    the winner deterministically (best mean fold score, ties to fewest
    enrichments, then fixed candidate order).
  • The combined challenger composes the two admitted mechanisms: the
    covariate linear forecast plus the additive event effect, fitted per fold
    under that fold's cutoff. Its winner reports
    selected_model: "combined_enrichment".
  • The full comparison — candidates, per-fold scores, winner, and why — is
    recorded as an enrichment_adjudication evidence record in the artifact
    and its typed lineage, so the artifact proves the model choice.
  • The COMBINED_ENRICHMENT_UNSUPPORTED error is retired (a pure
    relaxation; see COMPATIBILITY.md). Single-enrichment runs are
    numerically unchanged.

Messy-data repair (disclosed, capped, deterministic)

Real-world CSVs now work on first contact. aion forecast --repair {off,safe,aggressive} (default safe):

  • safe normalises cell text only — mixed date formats (slash dates with
    provable day/month order, month names, epoch stamps), currency symbols,
    thousands/decimal separators, percent signs, accounting negatives,
    sentinel missing values (N/A, null, …), fully blank rows, and
    byte-identical duplicate rows. It never invents a value, moves a
    timestamp, or drops a data point.
  • aggressive opts into structural fixes: interior gaps linearly
    interpolated, jittered timestamps snapped to the inferred grid,
    conflicting duplicates resolved (last row wins), unparseable rows
    dropped, naive timestamps in mixed-timezone files assumed UTC — all
    capped (EXCESSIVE_REPAIR past ~30% of a series) and disclosed.
  • Every fix lands in a data_repair evidence record; assumptive fixes
    become series warnings, so support downgrades honestly.
  • Repairs fire only where strict parsing would fail: clean files remain
    byte-identical with unchanged artifact IDs.
  • aion inspect now diagnoses instead of rejecting: data_quality
    reports what the file needs (clean / repaired_safe /
    repaired_aggressive), lists the repairs, and prints the exact
    follow-up command.
  • New bundled example: examples/filthy_requests.csv.

Input formats

  • New always-on formats: .tsv, .json (array of objects),
    .jsonl/.ndjson, and gzip-compressed text inputs (.csv.gz, …).
  • .xlsx behind a new excel extra (pip install 'aion-forecast[excel]').
  • Semicolon/tab/pipe-delimited "CSV" detected under repair when the header
    provably names the mapped columns (disclosed as delimiter_detected);
    non-UTF-8 files fall back to Windows-1252 under repair (disclosed as an
    encoding_assumed assumption; strict mode raises INVALID_ENCODING).
  • aion capabilities reports the full input matrix.