Skip to content

v1.8.1 — the notes that were one commit past the tag

Choose a tag to compare

@qazbnm456 qazbnm456 released this 30 Aug 14:35
· 23 commits to main since this release

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 in extract, aforward raises, no final is recorded, and the marker looks
    lost when it is not;
  • a True without a submitting control run is not a measurement — a field that is always True
    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