Files
esengine fb5cf15cea feat(tools): keep the progress corpus extractor in the tree
The analyzer that reads todo_progress back out of a trajectory was a scratch
script, which made it the one link in the chain with no way to fail. A field
rename in the kernel, the wire, or the renderer would have left it reading
every later session as having no semantic progress at all — and a corpus
collected across that change would mix two definitions in one quantile.

tools/trajectory/progress_corpus.py, standard library only, with the
distinction that matters carried as data rather than as a printed note:
progress_source and progress_fidelity are fields of every sample. The
semantic source is the todo_progress frame; the proxy source counts
complete_step calls, which is what an export predating that frame offers and
which overcounts, because a sign-off on an already complete step advances
nothing. --require-semantic refuses the downgrade, so a corpus meant to
calibrate policy cannot silently absorb a proxy sample.

Removing false advances can only merge adjacent gaps, so the proxy's maximum
gap is a lower bound on the semantic one; its quantiles and event counts are
not, and the README says which is which. On the session behind this work that
bound is 348.81M tokens and 739 minutes between two host-observed advances,
stated in resources rather than rounds.

The tool measures and does not judge: no verdict, no recommended budget, no
score. Reported numbers are descriptive.

A todo line that stops parsing raises rather than reading as absent, and CI
runs the tests, because the failure this guards against is exactly the silent
one that produced three missing-frame defects in a row.
2026-08-30 06:36:30 -07:00
..