v1.8.1 — the notes that were one commit past the tag
Documentation and tests only. No behaviour change, no API change — every 1.8.0 call path is
byte-identical. Upgrade only if you want the notes below in help().
budget_exhausted now documents what establishes it, and what it cannot answer
1.8.0 shipped that field with its evidence resting entirely on ScriptedInterpreter — which proves
dspy writes the forced-final marker and the kit reads it back, and says nothing about whether
the real sandbox path reaches that branch the same way.
A consumer ran all three states against dspy.PythonInterpreter on deno 2.8.2 — scripting only the
LM, since the interpreter is the seam that matters — and the field discriminated. The docstring now
records that, plus the two traps that fake a negative result:
- the forced-final path makes a second LM call for the task's own output field, so a scripted LM
one turn short dies inextract,aforwardraises, nofinalis recorded, and the marker looks
lost when it is not; - a
Truewithout a submitting control run is not a measurement — a field that is alwaysTrue
produces exactly that output.
And the boundary that is a product fact rather than a defect: the trajectory is written after
aforward() returns, so a SIGKILLed job — the case an operator actually asks about — is exactly the
one this reports None for.
These notes were one commit past the v1.8.0 tag. Anyone who installed 1.8.0 and ran help()
on the field saw none of them. That is the code-versus-docs failure this project keeps finding,
inverted: the documentation was correct in the repository and absent from what people install.
Caught by a consumer that checked the installed package before writing "the kit documents this" into
its own README, instead of trusting the sentence it was about to repeat.
The forced-final test had no control run
It asserted only that a run which never submits carries the marker — which a dspy that wrote that
string on every run would also satisfy. It now drives a submitting run and requires the marker
to be absent there. Verified additive by deletion: removing the control leaves the suite green, so
it guards something no other assertion reaches.
Full changelog: v1.8.0...v1.8.1