Skip to content

agent harness v0.10.0

Choose a tag to compare

@github-actions github-actions released this 25 Oct 02:18
· 41 commits to main since this release
Immutable release. Only release title and notes can be modified.
e00d2b1

v0.10.0

This release adds durable storage ports, evidence-backed task plans, canonical run
reports, descriptor snapshot pinning and cross-language differential checks.
The Go module is github.com/Judgment-Pack/judgment-pack-agent/go, released under
go/v0.10.0 on the same commit as the package tag.

Host migration and records (#165)

Writers use checkpoint version 2 and event/policy version 1. TypeScript and Go
readers also accept checkpoint 1 and historical events and policy layers without a
version. Readers refuse newer versions and unknown structural members before
interpretation; declared arbitrary payloads remain intact. Historical reads and
exports preserve their supplied version and lifecycle metadata. The next write of
a resumed checkpoint uses version 2 without extending retention. Upgrade readers
before supplying newer records; a host downgrade does not make newer retained
records readable.

Storage and durable handoff (#159, #179, #158)

Hosts may supply a RunStore in TypeScript or Go with atomic checkpoint/event commits,
opaque revisions and run-scoped cursors. One root writer serializes parent and child
transactions. Dispatch waits for the claim acknowledgement; dependent work waits
for the result acknowledgement. Conflicts and uncertain outcomes stop dispatch.
This is conservative recovery, with no exactly-once external-effect guarantee.
Memory stores are ephemeral test implementations; hosts must validate their own
persistent backend against the conformance contract.

Explicit RunStore model calls buffer at most 4 MiB until source-family completion
and storage acknowledgement are established, delaying response progress. Durable
provider-managed child handoff additionally requires the host bridge's live
provider-release acknowledgement. Local socket close is insufficient. Hosts must
review this capability before enabling durable handoff.

Existing checkpoint callbacks retain their limited, ordered, acknowledged delivery
profile. Their durable:true event does not promise physical crash persistence,
provider completion or exact journal recovery. They cannot import a full RunStore
journal. Strict checkpoint version 2 can carry validated valueJSON companions to
preserve retained JSON order and its existing digest through canonical storage.
Duplicated text counts toward the unchanged 4 MiB checkpoint bound. Already-corrupt
historical evidence remains refused.

TypeScript ChatStore uses asynchronous operations and revision comparisons for
plan updates. New plan references use opaque artifact/dialect ids with content
digests. Legacy file locators require an explicit host migration resolver; Agent
infers no filesystem or URL access. Go supplies the corresponding plan/reference
helpers and has no ChatStore. Authorization, leases, secrets and backend selection
remain host responsibilities; no Desk backend is installed by this release.

Plans and reports (#180, #181, #182, #157)

Task steps have stable execution-scoped ids, content revisions and bounded change
history. Callers retain a step by carrying its returned id; omitting the id creates
a new identity. update_plan cannot introduce completion or rewrite a terminal
step. The separate complete_plan_step action requires the active step and exact
revision, then either acknowledged scoped evidence for completion or a reason for
marking it not needed. Evidence records provenance rather than independently
judging whether the task was fulfilled. Callback-only hosts lack the observation
owner needed for evidence-backed completion; historical completed rows remain
visibly unverified.

Accepted plans retain their original snapshot and verified references through
history rollover. Pins are checked before initial work and resume. Departures from
accepted work are recorded; the default policy pauses removal for human approval.
A pending plan decision grants no tool execution authority and keeps the active
plan unchanged until the exact decision is admitted.

Hosts must distinguish approval_requested with purpose: plan-drift from tool-call
approval. The plan decision carries no tool/source/argument authority. Generated Go
Name, Tool and Source fields are optional; consumers must check purpose and
field presence before using tool-specific fields.

TypeScript and Go expose a version 1 canonical run report over terminal checkpoint
facts, including whole plan state, prompts, sources, skills, critic decisions,
delegation, usage, failover and completions. It excludes internal request/context
and journal payloads. Optional supplied event pages can corroborate the final
checkpoint and cursor within bounded limits; they do not independently prove a
complete or authentic event prefix. No missing usage or totals are inferred.

Proposal numbers and native tool migration (#198)

Proposal admission compares each source number's mathematical decimal value with
its canonical serialization. A value such as 9007199254740993 is refused when
serialization would change it; decimal/exponent spelling and negative zero may
normalize. This does not add arbitrary-precision numeric acceptance. Native
propose_pack requires the complete document in the documentJson string and
refuses the legacy document member. Hosts must update native tool offers to the
exported schema; fenced proposals retain their envelope.

Draft edits, undo and resumed proposal text use the same admission predicate.
Numeric-loss and source-work-bound refusals stop automatic reformat; ordinary
malformed JSON retains its reformat request. Historical already-rounded text
cannot establish the original source precision.

Gateway descriptor pins (#168)

MCP registrations can use Gateway's complete canonical descriptor-snapshot bytes
as their pin. Both Agent languages validate the original bytes and schema text,
and refuse changed, malformed or failed current observations before execution,
including approved continuation. Failure stays latched across source tools,
delegated gates and overlapping observations. Host validation, effects, approvals,
identity and authorization remain in force.

Hosts supply current observations under the approved metadata; a new capture
timestamp requires a newly approved registration. Digest-only registrations remain
an explicit legacy mode. Migrate through a person-approved snapshot declaration
without rewriting historical records. Agent does not independently establish that
the host observer reported the current remote descriptor.

Cross-language regression coverage (#167)

Deterministic offline property checks compare the production TypeScript and Go
prompt assemblers and provider wire codecs. Bounded cases cover three provider
families, Unicode, JSON ordering, tools, images, whole and streamed replies, and
carried reasoning. Failures identify a reproducible seed and case with the first
differing byte. This coverage is separate from the deferred live answer comparison.

Go minimum and dependencies (#193)

Consumers of github.com/Judgment-Pack/judgment-pack-agent/go now require
Go 1.26.0 or newer, up from Go 1.25.0.
Repository builds and CI remain pinned separately to Go 1.26.10. No runtime API or
wire-contract behavior changes in this dependency update.

The resolved graph selects x/net 0.60.0 and x/crypto 0.57.0, clearing the five HTTP/2
records GO-2026-6603, GO-2026-6610, GO-2026-6611, GO-2026-6612 and GO-2026-6617 and
the two SSH records GO-2026-6354 and GO-2026-6355. Their requirements select x/sys
0.48.0, x/term 0.46.0, x/text 0.42.0 and x/mod 0.41.0. The imported-package allow-list
pins x/sys 0.48.0; graph-only modules remain outside that allow-list.
See the Go assessment for evidence scope and limitations.

Scoped dependency disposition

OpenPGP GO-2026-5932 and PDF GO-2026-5781 remain unresolved under
#192.
The maintainer approved a fresh v0.10.0 exception
on 2026-10-24, expiring 2026-11-07 00:00 UTC. It covers only v0.10.0 / go/v0.10.0
on native Linux/amd64, CGO enabled, default tags, built with Go 1.26.10. Neither
affected package appears in that build's package/test closure. Both remain in the
resolved module graph; this is a bounded reachability decision, not remediation.
Dependency-path replacement is deferred to #192. Other configurations are unverified
and require their own assessment. See the Go assessment
for the audited source identity, refusal controls and reassessment requirements.

Live answer-quality comparison

Live answer quality was not evaluated for this release. On 2026-10-24 the maintainer
deferred the baseline/candidate live comparison to the Desk lane; #169
remains open for handoff and outstanding evidence. Desk acceptance and scheduling
are pending. No completed replay token total or attributable monetary cost is available.
Offline replay tests and CLI feasibility diagnostics are not live quality evidence.
All other release checks and review requirements remain in force.

Reference and audit records (#205)

The event reference maps schema kinds to production
emission and consumer sites in both languages. Reference generation fails when a
kind lacks an emitter or the checked-in reference is stale. The
postmortem practice starts with the
v0.9.0 reasoning-omission audit record.

Host upgrade guide

See the host upgrade guide before changing the host pin.