fpa-backtest-learn — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited fpa-backtest-learn (Agent Skill) and scored it 100/100 (green). The audit ran 55 deterministic rules across Security, Supply Chain, Maintenance, Transparency, and Community; it found 0 high-severity and 0 lower-severity findings. The full rule-by-rule trace and per-finding evidence are below. Free, methodology-open.
Findings & checks · 0 flagged
Every scanned point with the score it earned and what moved between them.
First recorded scan — no prior version to compare against.
The primary manifest — the file an agent reads to learn what this artifact does.
The model should get measurably better at this business over time. This skill scores past forecasts against the company's actuals, surfaces what keeps missing, and proposes improvements a human ratifies. The objective metric is reconciliation error against the user's own books (pyfpa.score_forecast) - the FP&A analog of a validation loss.
Core principle: self-experimenting, but never self-promoting. The AI may run and discard bounded challengers autonomously; a human approves replacement of the champion. Everything learned lives as plain files in .fpa/.
.fpa/)forecasts/<period>.snapshot.yaml - each forecast's assumptions + predictions, and (after close) its score.scorecard.md - the running track record (rendered, never hand-edited).experiments/<slug>.experiment.yaml - each tested model change, its evidence,changed files, checks, before/after metrics, and decision.
learnings.md - every accepted change: what, the evidence, the backtest delta, the date.snapshot_forecast(cfg, forecast_df, label=<period>, created=<today>) → save_snapshot(..., ".fpa/forecasts/<period>.snapshot.yaml").
load that period's snapshot, score_forecast(snap.predicted, actuals), write the score back into the snapshot, and re-render scorecard.md with render_scorecard.
/ working-capital timing). Run the fpa-cfo-judgment one-time-item screen first - never blame the model for a one-off.
type: parametric correction's target line keeps missing, flag it as possibly stale (applied → superseded) for the human - never auto-revert.hypothesis, CFO question, evidence, fit periods, holdout periods, and files expected to change. Save it with pyfpa.save_experiment.
holdout_backtest on thecompany's history. Surface it only if it lowers holdout fitness (not in-sample), ranked by the delta. Clamp the proposed move with magnitude_cap (±25%/cycle).
only when persistent_miss is true for the line (same-signed across K≥2 closes) and it survived the one-time screen. Hand it to fpa-learn-business to generate the skill on approval - propose, don't auto-write.
A model change that breaks reconciliation or another accounting invariant is failed even if one headline metric improves.
an ExperimentDecision, set status: accepted, save with explicit overwrite=True, update the company model, and append to learnings.md. Rejected and reverted experiments remain in memory.
challenger epochs instead of one manually proposed change.
If the company already has ~12+ months of actuals, you don't have to wait: run holdout_backtest immediately (fit on the earlier months, hold out the recent ones) to report current accuracy and the first round of parametric proposals.
holdout_backtest enforces this).magnitude_cap).Scored + learned → fpa-board-briefing (report the forecast and how it's tracking).
~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.