Skip to content

agent harness v0.5.0

Choose a tag to compare

@github-actions github-actions released this 20 Oct 13:42
· 78 commits to main since this release
61b1331

v0.5.0

The fifth release of @judgment-pack/harness, as an attested package asset and a Go module tagged by the release workflow. It holds one decision the Desk's swap (judgment-pack-desk#537) needs before it binds approvals: an act tool's approval no longer waits inside the tool call; the run pauses and continues on the person's decision. Each change was reviewed in a clean-room round recorded on its pull request, and the whole release diff in one clean-room review recorded on #83 and re-read at the release head. There is no registry package.

What v0.5.0 holds

  • ADR-0008, the approval pause (#74, pull request #79; amends ADR-0006 §2): the host's approval policy answers allow, refuse or ask where each engine hands an act call to the host; on ask the adapter emits approval_requested with the call, the checkpoint carries it under approval with status paused, the checkpoint is saved durably and the run ends, holding no promise, invocation or provider account open; the host continues the restored checkpoint with the decision (approvalDecision: the call id, approved or refused, the person's note); approved runs the call once, with approved acknowledged before the execution and executed with the result after it, and a restored approval whose result was never written is answered as an unknown outcome, never run again; refused carries the refused result and the note, framed as data; the continuation is the shape ADR-0007 gives a delegation (one line, one data block, the context index) on every engine and both Go adapters, counted as a model request or an invocation with nothing invented; one pending approval per checkpoint, a second act refused with a guardrail; children, Plan mode, the critic and the reformat run never reach the pause; the in-call reader is gone; certification scenario 8 on every engine and both Go adapters, with restarts played from the checkpoint's JSON text at the pause and after the executed write (a restored approved call is answered unknown in unit tests in both languages); five mutants caught in both languages.
  • The pre-release batch (#81; closes #71 and #80): modelRequests is optional on the delegation figures (provenance.json) and required only where the checkpoint's unit is model-requests, so an agent-capability figure carries no invented 0 and a sum over both capabilities counts model requests only (the Go types hold it as a pointer; a v0.4.0 checkpoint still reads); a refused approval continuation emits one guardrail with reason approval refused after the written refusal, in both languages, carried by the vector; approvalPolicy and the guardrail reasons carried by vectors, with the members probe taking each enum value out and requiring a vector to fail; scenario 8 asserts the stable prefix across the pause on the vercel, deepagents and Go model legs (the per-run framing marker normalised; its cost is #82); ADR-0007 §3 and ADR-0008 §3/§5 say so.
  • The release rows (#84; closes #83): on the Go eino adapter an act call that needs approval gets its own call id even on a non-interactive run, and Go's decision keeps the call's arguments and refuses a call whose arguments differ, so a decision can never be taken by a later call of the same tool (driven end to end on eino, with the same order in both languages and a host whose authorisation fails first); the reversed-order case on deepagents too; the approval vectors pause.json, wrong-call-id.json, policy.json and the new stale-decision.json compared by scenario 8 in both languages; the gate's own refusals at execute time carry the reason approval stale, and approval refused means only the policy's or the person's refusal; ADR-0008 §4 and the wire contract record that the TypeScript coordinator counts the continuation's invocation within the continued response only and that Go requires Input.Checkpoint on an approved continuation; nine mutants caught across both languages.## What the Desk must do to adopt it

judgment-pack-desk#537 (the swap's binding) and its approval seam, held until this release: the event set gains approval_requested; the task view shows the pending call (name, source, arguments, a note field) with approve and refuse; the continue call carries the decision as the budget grant does; the checkpoint reader reads approval; the approval reader of judgment-pack-desk#529 becomes the policy (allow | refuse | ask: Auto within limits answers allow for the tools the person has set, ask otherwise). Then judgment-pack-desk#548 (tool sources) and #546 (the prompt parts) as filed.

What it does not hold

#82 (the framing marker carried across a pause so the tools prefix is byte-identical; a cache cost, not a boundary); the Desk's adoption (judgment-pack-desk#537's approval seam, #548, #546).

Installing and verifying

Install the tarball from this release and pin it by the digest in checksums.txt; the Go module by go get github.com/Judgment-Pack/judgment-pack-agent/go@v0.5.0 with go.sum committed. Verify the attestation as docs/releasing.md describes before pinning.