Release notes
HOL Guard v3.60.0a31
PreviewHOL Guard v3.60.0a31, released November 8, 2026, is a preview release with 6 additions, 4 fixes and 5 other changes across 14 merged pull requests. Highlights: Write a relayed package call's forward and block receipts natively; Serve the cloud action evaluator as hol-guard-runtime cloud-action.
6 added · 4 fixed · 5 other
Key facts
- Version
- v3.60.0a31
- Channel
- Preview
- Published
- Previous release
- alpha/v3.60.0a30
- Merged pull requests
- 14
Documented changes
15 typed entries
Verified contributors
1 verified contributor · 14 credits
Attribution coverage
attribution complete; history inventory partial.
Install
Scope
Guard v3.60.0a31 is a preview release published 2026-11-08. Upstream documents: Guard 3.60.0a31 is an opt-in prerelease cut from 84ba6e4. Stable installations remain on the stable channel. 14 commits • 14 merged pull requests • 1 contributor since Guard 3.60.0a30. Its comparison base is alpha/v3.60.0a30. It includes 14 verified contribution deliveries with public evidence links.
Changes
Added
6- guard-runtimeWrite a relayed package call's forward and block receipts natively (#7420) Evidence for this change
is_plainstays structural, since it runs under the direct-evidence queue lock: exact record andpackagekeys, a forward'spolicy-source, a block'spolicy-blocksource, and the package facts' types.- The detached writer rebuilds the package request's artifact through the same parse the gate ran (
parse_package_intent: tool, arguments, workspace,PATH). If the rebuilt artifact id differs from the one the record… - Against that artifact it composes the
allow_tool_call/block_tool_callstore arguments. The scanner evidence is the firewall entry, then the decision's evidence, then the package evidence. The approval-context…
- runtimeServe the cloud action evaluator as hol-guard-runtime cloud-action (#7418) Evidence for this change
- Moves the
guard-cloud-actionJSON-lines loop (startup flags/env, 4 MiB line cap, oversize-line recovery) intoguard_command::cloud_action_serve::serve. guard-cloud-actionnow calls it; its behaviour and exit codes are unchanged.hol-guard-runtime cloud-action [--binding-set PATH] [--activation-public-key HEX]runs the same loop. The native wheel already shipshol-guard-runtime, so a host that installs the wheel gets the evaluator without…
- Moves the
- guard-runtimeWrite a safe-alternative block's receipt and silent inbox row natively (#7417) Evidence for this change
- Receipt. A
policy-safe-alternativeblock record carrying itsreviewredaction level is now plain. Its receipt uses the risk categories of the call projected with its artifact, as the proxy's… - Silent inbox row. After the receipt, a
revieworrequire-reapprovalblock also gets thequeue_blocked_approvalsrow thatrecord_unprompted_reviewwrites: - no prompt is shown;
- Receipt. A
- guard-runtimeWrite an ask-blocked MCP call's receipt from the resident (#7416) Evidence for this change
- An ask record is plain when its
approvalrequest has the exact shape_queued_approvalaccepts and carries no notice left to raise. A record that still carries one, anapprovalon a forward, or anapprovalon a… - Cline's approval flow opens the approval center in the browser (
approval-centertier withauto_open_browser), and only the daemon's_open_approval_centercan do that. Its ask records stay with the daemon. The… - Like the proxy, the receipt's risk categories come from projecting the call with its artifact:
risk_input(artifact, params["arguments"])uses the host-ordered arguments. Only a mapping's entries preserve that order…
- An ask record is plain when its
- guard-runtimeRaise a relayed MCP call's approval notice from the resident (#7414) Evidence for this change
- runtimeRaise a connector-setup notice in the resident drain (#7395) Evidence for this change
- It honours
HOL_GUARD_DESKTOP_NOTIFICATIONSand the effectivedesktop_notificationsconfig. A config that can't be read leaves notifications on, as the daemon does. - It notifies once per connector. The store answers with the first notified sibling's marker, and an in-process claim stops two records from showing the same request twice.
- It signs the approval link the way the review link is signed, and marks the row notified once the notice is shown.
- It honours
Fixed
4- guardKeep optional direct requests on eligible warm clients (#7412) Evidence for this change
- Atomically lease an existing live idle native client for short evidence polls. A competing caller taking the last warm stream now causes a miss instead of a cold client spawn; a client dying after lease cannot respawn…
- Skip optional PI/OMP direct-hook RPCs when the publisher cannot bind the daemon home. Keep evidence draining, ordinary daemon enforcement, native binding checks, and request deadlines unchanged.
- cloud-reviewDeliver review events from a Guard home restored from an older copy (#7415) Evidence for this change
cloud_review_ack.rs: areview_event_sequence_conflictresult now carries the event id, the same as a snapshot collision.guard_store_review_settle.rs: conflicts are passed to the rebase step together with snapshot collisions. It now shares the collision codes with the ack module.guard_store_outbox_recover.rs: a non-snapshot event can be rebased only when its sequence is at or below Cloud's mark. Others are filtered out before the group is validated.
- guard-commandLet a repository that keeps its hooks inside itself start a checkout (#7413) Evidence for this change
- guard-reviewRetry a command queue request a second after a gateway drops it (#7411) Evidence for this change
- no
Retry-After: wait one second, then retry (still at most two gateway retries before the error surfaces to the drain loop's own backoff) Retry-Afterpresent: honor it exactly as before- every other sync caller: unchanged, keeps the 60-second default
- no
Other changes
5- Guard 3.60.0a31 is an opt-in prerelease cut from
84ba6e4. Stable installations remain on the stable channel. 14 commits • 14 merged pull requests • 1 contributor since Guard 3.60.0a30. Evidence for this change - guard-runtimeLeave a fully recorded hook record off the daemon's evidence page (#7422) Evidence for this change
- contextMap prompts to line ranges instead of pasting code (#7372) Evidence for this change
- guard-runtimeSkip the path walk when the runtime candidate is already its resolved path (#7410) Evidence for this change
- guard-reviewStop rereading drain lane state and runtime status per store call (#7409) Evidence for this change
- Merged pull request #7420: feat(guard-runtime): write a relayed package call's forward and block receipts natively
- Merged pull request #7409: perf(guard-review): stop rereading drain lane state and runtime status per store call (#7409)
- Merged pull request #7412: fix(guard): keep optional direct requests on eligible warm clients
- Merged pull request #7372: perf(context): map prompts to line ranges instead of pasting code
- Merged pull request #7411: fix(guard-review): retry a command queue request a second after a gateway drops it (#7411)
- Merged pull request #7414: feat(guard-runtime): raise a relayed MCP call's approval notice from the resident (#7414)
- Merged pull request #7410: perf(guard-runtime): skip the path walk when the runtime candidate is already its resolved path (#7410)
- Merged pull request #7413: fix(guard-command): let a repository that keeps its hooks inside itself start a checkout
- Merged pull request #7417: feat(guard-runtime): write a safe-alternative block's receipt and silent inbox row natively
- Merged pull request #7395: feat(runtime): raise a connector-setup notice in the resident drain (#7395)
- Merged pull request #7418: feat(runtime): serve the cloud action evaluator as hol-guard-runtime cloud-action
- Merged pull request #7416: feat(guard-runtime): write an ask-blocked MCP call's receipt from the resident
- Merged pull request #7422: perf(guard-runtime): leave a fully recorded hook record off the daemon's evidence page
- Merged pull request #7415: fix(cloud-review): deliver review events from a Guard home restored from an older copy
Upgrade and compatibility
None documented.
Compare with the previous release
Predecessor on the same channel: alpha/v3.60.0a30
Verified contributors
Credits derive from public pull-request authorship, verified commit authorship, or verified co-authorship — never from thanks text or release metadata. Each distinct contributor is listed once; the evidence ledger paginates every published credit record.