Release notes
HOL Guard v3.60.0a26
PreviewHOL Guard v3.60.0a26, released November 7, 2026, is a preview release with 3 additions, 9 fixes and 3 other changes across 14 merged pull requests. Highlights: Seal a direct Codex receipt in the resident drain; Pick up a newly published Guard Cloud policy within seconds.
3 added · 9 fixed · 3 other
Key facts
- Version
- v3.60.0a26
- Channel
- Preview
- Published
- Previous release
- alpha/v3.60.0a19
- Merged pull requests
- 14
Documented changes
15 typed entries
Verified contributors
3 verified contributors · 85 credits
Attribution coverage
attribution complete; history inventory partial.
Install
Scope
Guard v3.60.0a26 is a preview release published 2026-11-07. Upstream documents: Guard 3.60.0a26 is an opt-in prerelease cut from a77a51f. Stable installations remain on the stable channel. 14 commits • 14 merged pull requests • 1 contributor since Guard 3.60.0a25. Its comparison base is alpha/v3.60.0a19. It includes 85 verified contribution deliveries with public evidence links.
Changes
Added
3- runtimeSeal a direct Codex receipt in the resident drain (#7371) Evidence for this change
- The capture runs only while its private marker exists, only for a checked Codex receipt, and only on Unix (Python never captures on Windows).
- Payload and receipt text over 64 KiB are left uncaptured, matching the Python writer's limit.
- A sealed record is marked
capture_recorded, so a page sent again does not capture it twice, and the Python drain skips the capture for a record that carries the mark.
- cloud-syncPick up a newly published Guard Cloud policy within seconds (#7357) Evidence for this change
runtime/cloud_policy_revision.pyrecords the last revision per Guard home. The first value seen is only a baseline. Any later change, including a rollback to an older version or the policy being withdrawn, wakes the…lease_next_jobhands both the exact Cloud Review lease response and the generic queue response to an observer, and the command queue passes them to the recorder.- The daemon's headless cloud sync loop sleeps on a wake event instead of the shutdown event, registers for its Guard home, and runs a sync as soon as the revision moves. Shutdown sets the wake so the loop still exits…
- runtimeRecord a direct hook's fence wait in the resident drain (#7367) Evidence for this change
- The hook evidence writer takes a new timeline-event record. It accepts only the events it names (today
policy_source_fence_window), a UTC-aware timestamp and a payload of at most 4 KiB, and the journal recovers it… - The native evidence store saves it through the store's existing
add_eventop, with the payload encoded asjson.dumpswrites it. - The drain builds the same window
PolicySourceFenceWindow.absorb_directwrites for a wait no daemon window holds: it ends now, starts the clamped wait earlier, and admitted one hook. Once the writer takes it, the…
- The hook evidence writer takes a new timeline-event record. It accepts only the events it names (today
Fixed
9- supply-chainKeep a script-free install's approval across checkouts of a hooked project (#7380) Evidence for this change
- commandKeep an environment prefix on a package directory flag (#7364) Evidence for this change
- approvalsGive agents a short signed approval link they relay whole (#7350) Evidence for this change
- guardKeep the worktree chain proof past an empty Windows search path entry (#7370) Evidence for this change
- reviewSend a hook's pending request to Cloud Review as soon as the hook asks about it (#7373) Evidence for this change
- One wake per request id. Later polls of the same request do not wake it again. The remembered set is bounded at 256 ids, oldest dropped first.
- Dashboard reads (no
wait_ms) and reads of already-decided requests never wake the worker. - The wake happens before the held-read semaphore, so it still fires when every held-read slot is taken.
- commandRun a list of commands below a sibling checkout's root (#7365) Evidence for this change
- commandList a package manager's state directories beside node_modules/.bin (#7368) Evidence for this change
- cloud-reviewSend a risk level with each Cloud review request (#7358) Evidence for this change
- commandKeep a sed filter reviewable-free after a directory change (#7361) Evidence for this change
Other changes
3- Guard 3.60.0a26 is an opt-in prerelease cut from
a77a51f. Stable installations remain on the stable channel. 14 commits • 14 merged pull requests • 1 contributor since Guard 3.60.0a25. Evidence for this change - guardAuthorize Review jobs during the ack and skip repeat drain checks (#7376) Evidence for this change
- guardSettle a bulk Cloud Review approval on parallel leases (#7375) Evidence for this change
- Merged pull request #7365: fix(command): run a list of commands below a sibling checkout's root (#7365)
- Merged pull request #7336: docs(gauntlet): document the harness-only approval round-trip lanes (#7336)
- Merged pull request #7335: fix(command): say why a login or zsh shell is blocked and how to run it reviewed (#7335)
- Merged pull request #7334: fix(runtime): let an approved Codex retry in a later turn reuse Allow once (#7334)
- Merged pull request #7332: fix(command): let an allowed Git read run when its configuration cannot be read (#7332)
- Merged pull request #7341: fix(cigar): show changes in partial clones, with Git's fetches off (#7341)
- Merged pull request #7325: refactor(extensions): keep the Python pack activation write in test fixtures only (#7325)
- Merged pull request #7321: fix(runtime): report early native resident exits (#7321)
- Merged pull request #7344: feat(authority): resident signs and writes the command-control marker (#7344)
- Merged pull request #7326: feat(runtime): write Cloud Review policy memory in the resident (#7326)
- Merged pull request #7345: fix(guard): keep package approvals across checkouts while the lockfile holds (#7345)
- Merged pull request #7353: perf(review): apply each Cloud approval about a second faster (#7353)
- Merged pull request #7343: fix(command): read a
$HOMEdirectory word as the home~already names (#7343) - Merged pull request #7349: fix(releases): show large releases in the archive instead of failing (#7349)
- Merged pull request #7351: fix(command): let an allowed extension cover a list that changes directory first (#7351)
- Merged pull request #7356: docs(bench): add prompt context results to the long-task benchmark (#7356)
- Merged pull request #7355: fix(approvals): let a waiting package install use the Cloud allow for its own request (#7355)
- Merged pull request #7366: docs(bench): add the eight-run Codex round and Oh My Pi to the prompt context results (#7366)
- Merged pull request #7358: fix(cloud-review): send a risk level with each Cloud review request (#7358)
- Merged pull request #7361: fix(command): keep a sed filter reviewable-free after a directory change (#7361)
- Merged pull request #7357: feat(cloud-sync): pick up a newly published Guard Cloud policy within seconds (#7357)
- Merged pull request #7375: perf(guard): settle a bulk Cloud Review approval on parallel leases (#7375)
- Merged pull request #7376: perf(guard): authorize Review jobs during the ack and skip repeat drain checks (#7376)
- Merged pull request #7350: fix(approvals): give agents a short signed approval link they relay whole (#7350)
- Merged pull request #7370: fix(guard): keep the worktree chain proof past an empty Windows search path entry (#7370)
- Direct commit a35a46ed48fa: fix(approvals): keep a sandbox requirement saved for the artifact over a waited Cloud allow
- Merged pull request #7367: feat(runtime): record a direct hook's fence wait in the resident drain (#7367)
- Merged pull request #7296: feat(cigar): map a prompt to the definitions and sections that hold it (#7296)
- Merged pull request #7327: fix(scanner): keep a comparison against a short label out of the credential finding (#7327)
- Merged pull request #7333: fix(guard): honor Guard Cloud exact-command allow rules at the hook edge (#7333)
- Merged pull request #7324: feat(extensions): activate policy bundles in the resident (#7324)
- Merged pull request #7340: feat(authority): resident writers own the extension-control schema (#7340)
- Merged pull request #7346: fix(command): keep a read allowed when inline config only switches the pager or colour off (#7346)
- Merged pull request #7347: fix(guard): drop command results Guard Cloud refuses instead of stalling the queue (#7347)
- Merged pull request #7348: fix(sync): say a background sync is running when hol-guard sync finds the lock busy (#7348)
- Merged pull request #7354: feat(runtime): write business-source and active-security state files in the resident (#7354)
- Merged pull request #7362: feat(runtime): record direct-answer receipts and activity in the resident drain (#7362)
- Merged pull request #7359: fix(command): read a git config pattern as a key pattern, not a glob over the working tree (#7359)
- Merged pull request #7363: fix(supply-chain): keep package approvals reusable under agent NODE_OPTIONS (#7363)
- Merged pull request #7368: fix(command): list a package manager's state directories beside node_modules/.bin (#7368)
- Merged pull request #7373: fix(review): send a hook's pending request to Cloud Review as soon as the hook asks about it (#7373)
- Merged pull request #7371: feat(runtime): seal a direct Codex receipt in the resident drain (#7371)
- Merged pull request #7364: fix(command): keep an environment prefix on a package directory flag (#7364)
- Merged pull request #7380: fix(supply-chain): keep a script-free install's approval across checkouts of a hooked project (#7380)
- Direct commit d2c13721cff5: feat(cigar): map a prompt to the definitions and sections that hold it (#7296)
- Direct commit 0dc888e9c3e0: fix(scanner): keep a comparison against a short label out of the credential finding (#7327)
- Direct commit 475946bc7a90: fix(guard): honor Guard Cloud exact-command allow rules at the hook edge (#7333)
- Direct commit 3ebb5b7099cc: docs(gauntlet): document the harness-only approval round-trip lanes (#7336)
- Direct commit d2020a3293dd: feat(extensions): activate policy bundles in the resident (#7324)
- Direct commit ea335f58d095: fix(runtime): let an approved Codex retry in a later turn reuse Allow once (#7334)
- Direct commit 58b58174bfe8: fix(command): say why a login or zsh shell is blocked and how to run it reviewed (#7335)
- Direct commit 5835e769f3ab: refactor(extensions): keep the Python pack activation write in test fixtures only (#7325)
- Direct commit e4f172390d8c: fix(command): let an allowed Git read run when its configuration cannot be read (#7332)
- Direct commit 6e5d33ae5f1f: feat(runtime): write Cloud Review policy memory in the resident (#7326)
- Direct commit ea41f1816892: fix(cigar): show changes in partial clones, with Git's fetches off (#7341)
- Direct commit b8e80a65b236: feat(authority): resident writers own the extension-control schema (#7340)
- Direct commit 44c6ca4e623c: fix(command): keep a read allowed when inline config only switches the pager or colour off (#7346)
- Direct commit faa19f1de2a5: fix(command): read a
$HOMEdirectory word as the home~already names (#7343) - Direct commit 752c95f73c55: fix(guard): drop command results Guard Cloud refuses instead of stalling the queue (#7347)
- Direct commit 0746352c80d1: feat(authority): resident signs and writes the command-control marker (#7344)
- Direct commit 48d012fd7e84: fix(releases): show large releases in the archive instead of failing (#7349)
- Direct commit b94746e3c29b: perf(review): apply each Cloud approval about a second faster (#7353)
- Direct commit 0dae02c1a208: fix(guard): keep package approvals across checkouts while the lockfile holds (#7345)
- Direct commit aa712830a57b: fix(sync): say a background sync is running when hol-guard sync finds the lock busy (#7348)
- Direct commit 811a97ea19e0: docs(bench): add prompt context results to the long-task benchmark (#7356)
- Direct commit a2971a88cdb0: feat(runtime): write business-source and active-security state files in the resident (#7354)
- Direct commit a63981429e12: fix(command): let an allowed extension cover a list that changes directory first (#7351)
- Direct commit b22599f18ed9: feat(runtime): record direct-answer receipts and activity in the resident drain (#7362)
- Direct commit 161bcb28bd88: fix(command): read a git config pattern as a key pattern, not a glob over the working tree (#7359)
- Direct commit 657fedf733d8: docs(bench): add the eight-run Codex round and Oh My Pi to the prompt context results (#7366)
- Direct commit a33cf738ca70: fix(supply-chain): keep package approvals reusable under agent NODE_OPTIONS (#7363)
- Direct commit 4208f6713131: feat(runtime): record a direct hook's fence wait in the resident drain (#7367)
- Direct commit 2b811b610f0b: fix(command): keep a sed filter reviewable-free after a directory change (#7361)
- Direct commit 4a9d1c8f68fd: feat(cloud-sync): pick up a newly published Guard Cloud policy within seconds (#7357)
- Direct commit 6d9daa303492: fix(cloud-review): send a risk level with each Cloud review request (#7358)
- Direct commit 2744f2d1b598: fix(command): list a package manager's state directories beside node_modules/.bin (#7368)
- Direct commit 51306d856f9f: fix(command): run a list of commands below a sibling checkout's root (#7365)
- Direct commit 634eafea1bb6: fix(review): send a hook's pending request to Cloud Review as soon as the hook asks about it (#7373)
- Direct commit 6f6deea21ee3: perf(guard): settle a bulk Cloud Review approval on parallel leases (#7375)
- Direct commit e3aee7857c36: perf(guard): authorize Review jobs during the ack and skip repeat drain checks (#7376)
- Direct commit 45616c63b1be: fix(guard): keep the worktree chain proof past an empty Windows search path entry (#7370)
- Direct commit 98f1d4cf1cf3: feat(runtime): seal a direct Codex receipt in the resident drain (#7371)
- Direct commit 4fc30a6d3ee9: fix(approvals): give agents a short signed approval link they relay whole (#7350)
- Direct commit a736208bca62: fix(command): keep an environment prefix on a package directory flag (#7364)
- Direct commit a77a51f7e722: fix(supply-chain): keep a script-free install's approval across checkouts of a hooked project (#7380)
Upgrade and compatibility
None documented.
Compare with the previous release
Predecessor on the same channel: alpha/v3.60.0a19
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.