Skip to content

agent harness v0.12.0

Latest

Choose a tag to compare

@github-actions github-actions released this 30 Oct 03:11
· 7 commits to main since this release
Immutable release. Only release title and notes can be modified.
28e2099

v0.12.0

Release notes for v0.12.0. This document describes the release contents and the gates that
must be satisfied before publication. The package is @judgment-pack/harness. A completed
release publishes its attested npm tarball and checksums and creates the matching Go module tag
go/v0.12.0 on the release commit for module github.com/Judgment-Pack/judgment-pack-agent/go.
The package version and lockfile identify v0.12.0. Publish only after the release procedure
verifies the package, checksums, attestations and matching Go module tag.

The host migration details are in the host upgrade guide.

Release scope

v0.12.0 holds five changes merged since v0.11.0, two API delegation fixes the Desk found while adopting it, a CI timeout and a lockfile advisory fix.

  • The rehearse check sub-kind (#241, PR #244; ADR-0027 amendment). A seventh check
    sub-kind for a non-binding dry evaluation of a declared artifact. check/rehearse accepts
    the effects pure or read only. Host admission refuses a rehearse declaration unless its
    own description begins with the words "Rehearsal, non-binding".
  • Receipt quarantine (#242, PR #247; ADR-0027 amendment). A source result is never
    reusable context, never Plan step evidence and never reachable by any reader until its
    receipt verifies. A Gateway receipt whose unsigned salts carry a member other than args
    and statement is refused.
  • The dialect inventory by digest (#243, PR #250; #252, PR #256; ADR-0028 and its
    amendment). The complete original declaration inventory no longer travels inline. It is a
    two-level index: a bounded top index, plus per-revision field indexes and declarations read
    in pages through the read port, each checked against its digest. The bound proof rests on
    the host's collection limits.
  • Run leases and effect-host fencing (#223, PR #251; #253, PR #257; ADR-0025
    amendment). A lease has an owner, an authoritative expiry and an epoch written as a
    canonical decimal string. The fence {resource, owner, epoch} is checked at every
    checkpoint commit, at every history and context snapshot commit, and at every effect
    admission. Certified effect hosts (certifyEffectHost / CertifyEffectHost) are bound to
    the exact instance the kit checked. admitUnattended / AdmitUnattended accept only the
    reference host or a certified host. Every non-read act under a fenced run goes through the
    effect host. New schema contract/schemas/run-lease.json, version 1.
  • API delegation keeps the retained Chat scope (#248, PR #261). After the parent
    invocation returns, the API coordinator hands ownership back to the last acknowledged
    root checkpoint, as the native coordinator already did. Its final End, including after a
    failed parent, keeps the retained Chat's scope instead of a released session's fresh one.
    TypeScript's delegation coordinator had the same gap on both its model and agent paths,
    and is fixed the same way.
  • API child accounting keeps the root request count monotone (#249, PR #262). A
    delegated child's accounting saves the live parent's request count, not an older copy, and
    a wrapped charge advances and checkpoints the count under the lock that a root save holds
    until the host acknowledges. Overlapping sibling scopes can no longer save a lower count, so
    a host that refuses a decreasing count (as the Desk does) no longer fails the run. Children
    still run concurrently. TypeScript was not affected.
  • CI. The go-race step's per-package timeout is 40 minutes (#254, PR #255). The
    packages, assertions and the step's 3,000-second limit are unchanged.
  • Lockfile advisory fix (PR #245). @hono/node-server, which arrives through
    @modelcontextprotocol/sdk, moves from 2.1.1 to 2.1.5 in the lockfile for
    GHSA-rmxm-3fg6-px4f (moderate). No
    package manifest changes.

ADR-0025's other build items (#224–#230: durable waits, deadlines, re-authorization,
revalidation, attention, run-owned jobs, durable goals) are not in this release; they are
assigned to v0.13.0.

Host review before pinning (upgrading from v0.11.0)

The Desk adopts this release. Read the host upgrade guide for each
migration; the points a host must review are:

  1. Dialect authoring break. A Go DialectSnapshot no longer has ResearchDeclarations.
    Hosts supply ResearchIndex (the top index) and implement the paged read-port members
    ReadFieldIndex and ReadDeclarations (TypeScript readFieldIndex and
    readDeclarations). TypeScript refuses a snapshot that still carries
    researchDeclarations, by name. A Go host decoding a JSON snapshot that still has
    researchDeclarations silently drops it, so migrate explicitly. Version-2 draft
    checkpoints and proposals carry researchIndex; version-1 records written by v0.11.0
    still read. Only the schema refuses mixed version-1/version-2 shapes. Re-encoding a
    version-1 record through Go adds researchIndex: null.
  2. The bound and the host's obligation. The top index fits every collection of at most
    1,000 records with at most 30 fields and field names of at most 64 bytes. The host's
    inventory must be built from each record's original revision, not from the whole recipe
    history; otherwise more than 1,000 revisions are refused. read_dialect gains an optional
    cursor.
  3. Receipt quarantine. An unverified, missing or expired receipt leaves the operation
    inspectable (its tool_result event, its durable dispatch row in state unknown and, in
    the API adapters, the operation listed as failed) but its bytes unreadable by every reader. TypeScript keeps a verified custom-source receipt in the
    retained value and Go does not; this is a declared parity difference.
  4. Leases. Unattended admission needs a store that declares lease support and a certified
    or reference effect host. The in-memory store kinds keep leases per process
    (leaseLifetime: 'process') and are refused for unattended admission. Metadata writes
    (feedback, capture) are not fenced. A host's store kind must prove its epoch durability
    across restarts; the conformance kit certifies the port, not durability. Certification
    assumes non-adversarial host code; #258 tracks further hardening.
  5. The rehearsal sub-kind, for hosts that declare rehearsal tools: declare
    check/rehearse with effect pure or read, and begin the tool's own description with
    "Rehearsal, non-binding".

Checkpoint and run event formats are unchanged. A fenced run's stored records have the same
shape and versions as an unfenced run's.

Review statement

Every change in this release was built and reviewed by Claude Opus, with a clean-room review
and, for the security-boundary changes, a security clean-room review per pull request. This is
same-vendor review, not a cross-vendor claim. The review records are on each pull request.

Release prerequisites

The maintainer decided the three release-specific gates on 2026-10-30
(decision).

  • Go dependency disclosure. GO-2026-5781
    (PDF) and GO-2026-5932 (OpenPGP)
    remain unresolved in the Go module graph. No Go module dependency changed since
    v0.11.0 (go/go.mod and go/go.sum are unchanged), so the v0.11.0 assessment of the
    native Linux/amd64, CGO-enabled, default-build-tags configuration still describes this
    source. These findings remain; this is not a code fix, withdrawal or safety claim. The
    maintainer exception is extended to Agent v0.12.0 and go/v0.12.0 and still expires
    2026-11-07 00:00 UTC (decision; the v0.11.0
    approval).
    Other configurations and later releases are not covered. Reassess if source,
    dependencies, configuration or advisory evidence changes, and when the exception
    expires. Separately record the exact release commit, npm audit coverage/result, Python
    dependency assessment and current primary evidence.
  • Runner image exception. Not extended. The v0.11.0 runner image exception
    applied to v0.11.0 only and is removed from .github/ci-evidence.json; this release's
    exact-source CI evidence must satisfy the evidence gate with exact
    runner and tool matching.
  • Release validation. Before publication, record the exact release commit, the full
    required check summary, exact-head CI, full mutation coverage on the merge commit, the
    dependency audit for the candidate, and final artifact and attestation verification. A
    version edit alone does not satisfy these gates.

Live answer comparison

No live answer comparison has passed for this release, and no live answer-quality,
token-saving or monetary-cost result is claimed. For Agent v0.12.0 only, the maintainer
deferred the live comparison on 2026-10-30
(scope decision,
issue comment): this release changes boundaries and contracts, not prompts,
routing or model selection. #169 remains open without a milestone. The Desk's
application-level comparison (Desk #599)
remains the route. Routing stays off by default. Every other release gate remains in
force, and the deferral does not waive the comparison for later releases.

References