Skip to content

v0.8.0

Choose a tag to compare

@github-actions github-actions released this 22 Sep 18:48
· 47 commits to main since this release
2907a91

v0.8.0 — 2026-09-22

The release where a probability model watches the agent, and Jev's word reaches
the price of a lane.

Until now Jev was asked one kind of question, whether a contested shape is
deliberate, and only the ask queue read the answer. This release gives the
answer two more readers. Triage prices a finding with it, and a new verb,
bb foreman, asks Jev about the agent's run itself: is it stuck, off track,
finished, verified. Every Jev call now survives a slow reply.

Added

bb foreman — a responsibility policy over the coding agent (#64).
The design is thruwire/foreman's, ported
into the Python expert (expert/bundlebox_expert/foreman.py, stdlib only).
Six responsibilities own twelve yes/no checks: human escalation, repository
instructions, documentation (routed, asked only when the job calls for docs),
worker health, completion and verification. Jev answers every check in one
call. A deterministic policy turns the probabilities into one of continue,
steer, stop, verify, resume, finish or escalate. Thresholds and priorities are
thruwire's.

bb foreman [--job "..."] [--since <rev>] [--active]   score the run, pick one action
bb foreman verify [--cmd "npm test"]                   run verification against the current tree
bb foreman replay [--set <check>=<bar>]                re-decide the timeline under other bars
bb foreman label <#> right|wrong                       mark a recorded action for replay
bb foreman log | checks
  • Without a key the checks come from what the box already records:
    grapple's drift window for stuck and off track, git's changes for work done,
    and the last bb foreman verify run. Evidence cannot tell whether a job's
    requirements are met, so on evidence alone finish needs a passing
    verification.
  • A run's commits are its work (#65). A run is measured from a base
    commit: --since, else the base its first assessment recorded, else HEAD at
    the session's first tool call. Before this, a run that committed as it went
    looked like a run that had done nothing.
  • A verification is tied to the tree's content hash, built with
    git write-tree in a throwaway index. Committing a verified tree keeps it
    verified. Editing it makes the verification stale.
  • Every assessment is a row of .bundlebox/var/foreman-timeline.jsonl,
    with the scores and state it was decided on. replay re-runs any threshold
    change and counts candidate fixes and regressions against the labels.
    thruwire lists this calibration tooling as missing.
  • The PostToolUse hook steers a live session. Every foreman.hook_every
    tool calls (10) it assesses the session with the agent marked active, so
    only steer and stop can fire. It ships as foreman.hook: "observe": the row
    is recorded and nothing is injected. "steer" puts the steer or stop into
    the agent's window. Jev stays out of the hook unless foreman.hook_jev is
    set, and then gets one attempt, because the hook is killed at 15s.

Measured on this repository with Jev, one session's work, --since 2c5c471:
with the job stated as row 0's loose text the policy said resume
(implementation_complete 0.49). With a --job naming what shipped, the same
commits, tree and verification gave finish (0.92). Jev scores the run
against the job you state.

Changed

Jev's probability reaches the price of a lane (#63). Triage priced every
heuristic finding off one method constant, PRECISION.heuristic = 0.6. Jev's
p now enters expectedValue as a prior on that constant, weighted by the
code windows Jev read (at most 3, shrunk at n/(n+4)). p=1.0 moves a heuristic
from 0.60 to 0.34, not to 0. On a medium finding at 150k tokens, ev goes 0.8
to 0.51, under the 0.6 floor, so the lane does not open. A person's answer
retires the opinion for its shape.

The Jev call retries a timeout, a 429 and a 5xx (#67), up to twice after
the first attempt: 500ms then 1s, or the server's Retry-After up to 5s. A
refused connection or a 4xx returns at once. One bb foreman request timed
out at 8s and the same request answered in 2.1s moments later; before this,
that one slow reply dropped Jev for the whole assessment.

Fixed

  • The read guard denies only lines its quote can hand back (#68). A
    region's quote is capped at 6000 characters when recorded and 2600 when
    served. A region spanning src/wire/hooks.js:292-825 arrived as ~30 lines,
    and reads of lines 414-443 were denied with a quote that did not contain
    them. A ranged read is now denied only when the quote carries every line, a
    whole read only when every region arrives whole.
  • The foreman hook records a base for a session entry that has none (#66).
    Entries written before bases existed never got one, and the run fell back to
    HEAD: 0 commits, and a clean tree read as no work.
  • The MCP registry job waits ten minutes for npm, not one (054d5e5).
    v0.7.1's record went red on a 404 while npm was still processing the
    tarball.