What we learned
Training, testing and release are connected steps. FootPrint follows the workflow.TrainTestReleaseFootPrint

FootPrint remembers each step and what changed.

Why it matters

We tested whether that history could help teams manage machine learning.

1 / 20
What we learned
FootPrint coordinates the work. The ML trainer does the learning.FootPrintTrainerasks

ML tools learn. FootPrint keeps the steps connected.

Why it matters

Teams can follow the work without rebuilding the learning engine.

2 / 20
What we learned
A retry replaces model A with model B. The old test still belongs to A.Model ARetryModel BTest for A

A retry changed the model but kept its old approval.

Why it matters

An old passing result can approve the wrong model.

3 / 20
What we learned
The test result stays connected to the exact model it measured.Model ATest for AKept together

Model, data and test result stay linked.

Why it matters

A release check can then spot a mismatched model.

4 / 20
What we learned
Existing JAX training connects to the same reusable release checks.JAXExisting trainerSame checks

The same checks worked with the JAX examples.

Why it matters

Teams can connect a trainer and keep the history around it.

5 / 20
What we learned
A saved run opens into the model change, test and release decision without training again.Saved runChangedTestedDecided

We reopened saved model changes, tests and decisions.

Why it matters

Lens and foottrace explain the recorded run without training again.

6 / 20
What we learned
Training examples may prepare the model. Test examples must stay separate; using them in preparation blocks approval.TrainTestPreparationKeep separate

The data check spotted test examples used during preparation.

Why it matters

The test examples need to stay separate from model preparation.

7 / 20
What we learned
The example recovers from a crash using a completed save, then resumes and tests again.CrashSavedResumeTest againLast complete save

The example resumed training, then tested the changed model again.

Why it matters

A saved approval must follow the model it tested.

8 / 20
What we learned
Three candidates pass their tests. The declared comparison rule determines which one is chosen.All three passedABCChosenBy the agreed rule

The selection check stopped the wrong winner.

Why it matters

Teams need the winner picked by the rule they agreed in advance.

9 / 20
What we learned
The separate Python proof promotes pre-existing registered A to champion in a real local MLflow registry. Actual B bytes are refused before an alias change.Approved AOther BMLflowVersion 1

Python made the approved MLflow version the champion.

Why it matters

The receiver checks the registered version’s bytes before changing its alias.

10 / 20
What we learned
A lost reply after confirmed journal commit is acknowledged without another promotion. An uncertain registry update remains pending and unknown; its effect is not repeated automatically.After a lost replyReceiptAcknowledgeSame publicationPendingUnknownKeep uncertainty visible

Confirmed releases can be acknowledged; uncertain attempts stay visibly unresolved.

Why it matters

A retry needs evidence of the earlier effect before it can acknowledge success.

11 / 20
What we learned
Backtracking follows a saved result to its writer and recorded inputs. A closure input leaves a missing edge. Reading the actual input through scope records that connection. Existing Foottrace supplies the history.Hidden inputResultWriterInputRead through scopeResultWriterInputExisting Foottrace history

Tracked inputs connected the saved selection to its scores.

Why it matters

An unexpected choice can be inspected after training has stopped.

12 / 20
What we learned
Python keeps workflow control. A Node helper records chosen references using foottrace. Accuracy was 98 percent with the original scaler, 34 percent after the wrong scaler retry and 98 percent after restoration. Weights and raw validation data stayed unchanged.PythonfoottraceNode helperTrainer accuracy98%34%98%OriginalWrong prepRestoredSame weights and raw data

Wrong preparation lowered accuracy. Restoring it recovered the score.

Why it matters

Teams can keep Python and inspect what changed after a retry.

13 / 20
What we learned
Install the Python package, prepare the required Node helper, keep the Python workflow and save its reference history. The same evaluator returned the same results with capture.pipsetupPythonHistoryNode helperSame evaluator and results

The installed package added saved history around the same evaluation.

Why it matters

Teams can keep numerical code and inspect the references it consumed.

14 / 20
What we learned
Two independent retained experiments. In the JAX comparison a wrong candidate passes its own score but fails selection; the declared winner passes. In the digits lineage case equal scores do not excuse validation rows used to fit preprocessing: clean data use passes, contaminated fit fails, missing evidence stays unknown. Python calls the existing TypeScript guards without numerical training or scoring.Two separate saved experimentsModel choiceData useScore passesSame scoreWrong choiceWinnerValidation usedTrain data onlyMissing evidence stays unknown

A passing score still needs a valid winner and valid data use.

Why it matters

Python calls the existing checks; saved inputs explain each refusal.

15 / 20
What we learned
Approved model A does not establish that the worker used A. The stale worker actually used cached B, so its output was blocked. After cache repair the worker used A and its output was allowed. The guard also refuses unchanged array dimensions with reordered named fields. Models and arrays remain in the numerical backend.Observe the model actually usedApproved AWorker BCache repairedApproved AWorker AField order must also match

Python recorded cached B; the inference guard blocked its output.

Why it matters

Python chose the steps. Native foottrace kept their reference history.

16 / 20
What we learned
The real FootPrint executor controls the workflow. A decision branch chooses repair after refusal, and its native retry repeats a function stage after one controlled failure before numerical computation. The same inference evidence checks remain; the numerical worker still computes predictions.FootPrint chooses and retriesBranchRetryCheckUseRepairPredictFailedRetriedPrediction stays in the worker

FootPrint chose the repair path and retried one failed stage.

Why it matters

Recorded stages, branches and retries explain how the accepted output was reached.

17 / 20
What we learned
Lower error is better. The challenger improves the overall error but worsens a predefined rare group. The required group rule blocks publication.Lower error is betterOverallA 2.25B 0.81Rare groupA 2.25B 7.29Release blocked

The new model improved overall, but the group rule stopped its release.

Why it matters

An important group can lose even when the average result improves.

18 / 20
What we learned
The same model processes two batches. The first is healthy. The later batch stays unknown until outcomes arrive, then measured error prompts review. No service pause occurs.Same modelEarlierHealthyLater?ReviewOutcomes arrive later

The same model needed review when later outcomes revealed higher error.

Why it matters

Matching model versions cannot establish that today’s predictions remain useful.

19 / 20
What we learned
Local proofs are complete. The next step is to test the tools with unfamiliar developers.Local proofNextReal teams

Eleven reusable pieces help check and explain model use and release.

Why it matters

Later outcomes now join the evidence; unfamiliar teams and larger systems still need testing.

20 / 20
FootPrint / MLBeta 12 ↗
20 chapters · one idea at a time

How the library grows