v0.6.0
The first version published to npm, and the first three milestones the engine set for itself. M01 to
M04 of the v05-debt run were debt planned in advance; M05, M06 and M07 were bugs that run exposed
by executing, in the engine that was executing it. Two of the three cost the run real attempts before
anyone knew they existed.
A minor rather than a patch, despite reading as a list of fixes: init now refuses where it
previously proceeded, the tag scheme the templates write has changed, and there is a new
infra.crashTranscriptBytes option.
Added
infra.crashTranscriptBytes(default 100 B), the threshold below which a transcript is read as a
crash regardless of how long the session ran. See the refund entry under Fixed.
Changed
- The protocol and milestone templates tag green milestones
<run>-<milestoneId>instead of
<run>/<milestoneId>. A tag with a slash collides with the branch name a session naturally picks
for the same milestone, andgit push origin <name>then fails withsrc refspec matches more than one. Existing tags are untouched. Recorded as D-030.
Fixed
milestoner initover an existing.milestoner/no longer silently keeps a protocol that names a
different run. The protocol is hand-edited, soinitstill never rewrites or deletes it; what it
does now is stop with exit 1 before scaffolding anything when.milestoner/protocol.mdnames
another run in its header, and say what to bring in line. Previously every session of the new run
was handed the finished run's rules, tag instruction included, and nothing said so - it happened
to this repository's own v0.5 run. Recorded as D-030.- A session that crashed mid-run no longer costs the milestone an attempt. The infra classifier
read a tiny transcript as a crash only insideinfra.deathSeconds(90 s), so an agent that
worked for fifteen minutes and then died leaving fifteen bytes was gradedincompleteand
charged - it happened to the v0.5 run itself, on a milestone whose work was already done. A
transcript belowinfra.crashTranscriptBytes(new, default 100 B) with noresult.jsonis now
refunded as acrashat any duration; a session that left a real transcript and no result is
still charged, and the refund shares the existing ceiling ofinfra.maxRetriesconsecutive
infrastructure failures. Recorded as D-029. - Two milestoner processes writing state at the same moment could silently lose one of the writes:
anunblockissued while the runner was grading could vanish as if never typed, and a run could
be missing frommilestoner runseven though its runner was alive (seen once in CI, where one of
six simultaneous runners was absent from the listing). The state lock that should have prevented
this could be broken by a contender in the first instant after it was taken; the lock now names
its holder from the moment it exists, a lock that cannot be read yet is waited out instead of
discarded, and the lock is no longer stolen after a 5-second wait. The worst case for a contender
facing a crashed or wedged holder is a bounded wait (3 or 30 seconds), never a lost update.
Recorded as D-028.
npm install -g milestoner