Skip to content

v0.6.0

Choose a tag to compare

@fabrodz fabrodz released this 21 Aug 00:32
· 59 commits to main since this release

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, and git push origin <name> then fails with src refspec matches more than one. Existing tags are untouched. Recorded as D-030.

Fixed

  • milestoner init over an existing .milestoner/ no longer silently keeps a protocol that names a
    different run. The protocol is hand-edited, so init still never rewrites or deletes it; what it
    does now is stop with exit 1 before scaffolding anything when .milestoner/protocol.md names
    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 inside infra.deathSeconds (90 s), so an agent that
    worked for fifteen minutes and then died leaving fifteen bytes was graded incomplete and
    charged - it happened to the v0.5 run itself, on a milestone whose work was already done. A
    transcript below infra.crashTranscriptBytes (new, default 100 B) with no result.json is now
    refunded as a crash at any duration; a session that left a real transcript and no result is
    still charged, and the refund shares the existing ceiling of infra.maxRetries consecutive
    infrastructure failures. Recorded as D-029.
  • Two milestoner processes writing state at the same moment could silently lose one of the writes:
    an unblock issued while the runner was grading could vanish as if never typed, and a run could
    be missing from milestoner runs even 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

On npm: https://www.npmjs.com/package/milestoner/v/0.6.0