This PR contains the following updates:
| Package | Type | Update | Change |
|---|---|---|---|
| [go](https://go.dev/)
([source](https://redirect.github.com/golang/go)) | toolchain | patch |
`1.27.0` → `1.27.1` |
---
### Configuration
📅 **Schedule**: (in timezone America/New_York)
- Branch creation
- At any time (no schedule defined)
- Automerge
- At any time (no schedule defined)
🚦 **Automerge**: Enabled.
♻ **Rebasing**: Whenever PR is behind base branch, or you tick the
rebase/retry checkbox.
🔕 **Ignore**: Close this PR and you won't be reminded about this update
again.
---
- [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check
this box
---
This PR was generated by [Mend Renovate](https://mend.io/renovate/).
View the [repository job
log](https://developer.mend.io/github/boshu2/agentops).
<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0NC40OS4wIiwidXBkYXRlZEluVmVyIjoiNDQuNDkuMCIsInRhcmdldEJyYW5jaCI6Im1haW4iLCJsYWJlbHMiOltdfQ==-->
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
This PR contains the following updates:
| Package | Type | Update | Change |
|---|---|---|---|
| [go](https://go.dev/)
([source](https://redirect.github.com/golang/go)) | toolchain | minor |
`1.26.6` → `1.27.0` |
---
> [!WARNING]
> Some dependencies could not be looked up. Check the [Dependency
Dashboard](../issues/955) for more information.
---
### Release Notes
<details>
<summary>golang/go (go)</summary>
###
[`v1.27.0`](https://redirect.github.com/golang/go/compare/go1.26.7...go1.27rc3)
###
[`v1.26.7`](https://redirect.github.com/golang/go/compare/go1.26.6...go1.26.7)
</details>
---
### Configuration
📅 **Schedule**: (in timezone America/New_York)
- Branch creation
- At any time (no schedule defined)
- Automerge
- At any time (no schedule defined)
🚦 **Automerge**: Enabled.
♻ **Rebasing**: Whenever PR is behind base branch, or you tick the
rebase/retry checkbox.
🔕 **Ignore**: Close this PR and you won't be reminded about this update
again.
---
- [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check
this box
---
This PR was generated by [Mend Renovate](https://mend.io/renovate/).
View the [repository job
log](https://developer.mend.io/github/boshu2/agentops).
<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0NC4zMy4yIiwidXBkYXRlZEluVmVyIjoiNDQuMzMuMiIsInRhcmdldEJyYW5jaCI6Im1haW4iLCJsYWJlbHMiOltdfQ==-->
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: Bo <boden.fuller@gmail.com>
This PR contains the following updates:
| Package | Type | Update | Change |
|---|---|---|---|
| [go](https://go.dev/)
([source](https://redirect.github.com/golang/go)) | toolchain | patch |
`1.26.5` → `1.26.6` |
---
### Release Notes
<details>
<summary>golang/go (go)</summary>
###
[`v1.26.6`](https://redirect.github.com/golang/go/compare/go1.26.5...go1.26.6)
</details>
---
### Configuration
📅 **Schedule**: (in timezone America/New_York)
- Branch creation
- At any time (no schedule defined)
- Automerge
- At any time (no schedule defined)
🚦 **Automerge**: Enabled.
♻ **Rebasing**: Whenever PR is behind base branch, or you tick the
rebase/retry checkbox.
🔕 **Ignore**: Close this PR and you won't be reminded about this update
again.
---
- [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check
this box
---
This PR was generated by [Mend Renovate](https://mend.io/renovate/).
View the [repository job
log](https://developer.mend.io/github/boshu2/agentops).
<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0NC4yNC4wIiwidXBkYXRlZEluVmVyIjoiNDQuMjQuMCIsInRhcmdldEJyYW5jaCI6Im1haW4iLCJsYWJlbHMiOltdfQ==-->
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
## Defect
Gas City materializes Codex session homes with project-local hooks. The
first
Codex process in an untrusted home can stop at the interactive
workspace/hook
trust dialog, leaving the agent pane alive but unable to take dispatched
work.
Codex persists two independent decisions in `$CODEX_HOME/config.toml`:
1. workspace trust under `[projects."<dir>"]`
2. one content hash per hook under `[hooks.state."<hook-key>"]`
Trusting a parent directory does not trust a session home, and the hook
digest
input is intentionally owned by Codex rather than reimplemented here.
## Change
`ao gc prepare` now discovers the Gas City directories that exist when
it runs
(city and rig roots, materialized agent homes, and materialized rig
worktrees)
and pre-seeds both trust layers for those exact targets.
- Hook identities and current hashes come from Codex's `hooks/list`
app-server
method.
- Returned hooks are restricted to the discovered targets; user- or
plugin-level hooks are never granted trust by this command.
- Explicit operator decisions are preserved. An untrusted workspace,
modified
hook, disabled hook, unusable hash, malformed response, or malformed
TOML
fails loudly rather than being rewritten or accepted as complete.
- The merged TOML is validated in memory and installed with the CLI's
durable
atomic writer while preserving existing permissions.
- `ao gc check` verifies the same values from local files only. It
starts no
Codex subprocess and writes nothing.
## Deliberate boundary
Discovery is filesystem-based. A home Gas City creates *after* `prepare`
is not
pre-seeded by an earlier invocation. `prepare` compares configured agent
identities with materialized homes and warns about missing homes,
including the
real dotted-name shape (`gastown.mayor` → `.gc/agents/mayor`). The
operational
rule is documented explicitly:
```text
prepare → start the city → prepare again → dispatch
```
This PR does not claim that one pre-start invocation covers future homes
or
that every future pane can never encounter a prompt.
## Evidence
Automated tests cover:
- value-based workspace and hook trust, including `enabled = false`
- malformed/unexpected `hooks/list` responses
- regular local `hooks.json` files that derive zero hook identities
(`{}`,
`{"hooks":null}`, and `{"hooks":{}}`), keeping `prepare` and `check`
aligned
- real TOML spellings, invalid merges, idempotence, and mode
preservation
- target filtering and derived hook-key fidelity
- subprocess-free `check`
- missing-home identity reporting for nested and dotted qualified names
- operation with no Codex binary
- package-wide HOME isolation
An isolated real-Codex smoke on a disposable Gas City home established
the
behavioral differential: with the home's trust entries removed, Codex
rendered
the trust dialog; after seeding the same home, it reached the composer
without
the prompt. This proves the existing-home mechanism, not future-home
timing.
Final recovery checks on commit
`a4b52b2354b9f96e5e10e07b2916339c87190bfc`:
```text
go test -count=1 ./internal/gcmaintainer
ok github.com/boshu2/agentops/cli/internal/gcmaintainer 11.943s
go test -race -shuffle=on -count=2 ./internal/gcmaintainer
PASS
go test -count=1 ./internal/testsupport
PASS
go vet ./internal/gcmaintainer ./internal/testsupport
PASS
scripts/check-test-home-isolation.sh
PASS
scripts/check-test-isolation.sh
PASS (raw os.Setenv remains at the 10/10 baseline)
GOCACHE=/private/tmp/agentops-gocache \
GOLANGCI_LINT_CACHE=/private/tmp/agentops-golangci-cache \
WORKTREE_DISPOSITION_CI_SKIP=1 \
./bin/ao gate check --full --workflow-coverage --require-workflow-parity
PASS (68/68 full/head checks)
GOCACHE=/private/tmp/agentops-gocache bash scripts/regen-all.sh --check
PASS
git diff --check
PASS
```
Recovery fixed the prior CI findings with `storage.AtomicWriteFile`,
package-wide
HOME isolation, and `json.Encoder.Encode`. The first repaired CI replay
exposed
one further ratchet: raw `os.Setenv` calls in the new `_test.go`
TestMain raised
the repository baseline from 10 to 12. The final commit moves that
one-time
setup into the existing shared test-support boundary, keeps environment
changes
outside `m.Run`, and teaches the HOME-isolation gate only the exact safe
helper
shape. CI will rerun on the exact pushed commit.
Completes the Go CLI migration: one composition model, no tombstones, no
dead packages, hermetic tests, and a cross-language verdict contract
corpus. Net −88k lines.
## What
- **Tombstones + prune deleted**: the 21 registered 'Removed in the
Cathedral Cut' stubs, `zzz_default_spine.go`'s runtime prune, and the
~30 registered-but-pruned legacy command families are gone. The
registered tree IS the production tree; retired verbs fail with exit 1 +
a data-driven replacement hint pointing at docs/MIGRATION.md (now
covering nested verbs). Non-runnable parents reject unknown subcommands
instead of printing help with exit 0.
- **~35 unreachable packages deleted** (cliapp, canon, pawl-era verdict
parser, pool, harvest, knowledge, wiki engine, vibecheck, cli/embedded,
…) after import analysis + script/CI consumer verification. Retained
with named consumers: archcheck (arch gate scripts), eval island (rubric
schema drift guards), drwitness/drrebuild (witness-crosscheck).
- **Composition decision recorded**: single cmd/ao root +
internal/commands/<family> modules + clicontract; the never-adopted
cliapp.BuildRoot is removed. New overview: docs/architecture/go-cli.md
(repairs two broken links).
- **Hermetic tests**: flag_matrix_test.go builds the exec'd binary from
package source — the stale cli/bin/ao failure class is closed;
TestHermeticBinaryMatchesSourceSurface pins source↔binary
correspondence.
- **Verdict contract consolidated**: verification extracted from
status.go into cli/internal/verdictcheck; 19-case golden corpus
(tests/fixtures/verdict-contract) runs through Go + Python + JSON schema
via blocking gate `contract.verdict-corpus`. One divergence closed
(empty-string context ids now rejected by all three).
- **Fossil guard chains retired**: embedded-sync (mirror had zero
importers), retired-family compat baselines, dead
go_cli_compatibility.bats, stale gate globs/grandfather entries.
## Evidence
- Full-tier deterministic gate: **66/66 PASS** on the rebased tip (fresh
source-built binary)
- cli suite 2,795 tests green; race suite green on touched packages; vet
+ pinned golangci-lint clean
- Cathedral Cut conformance PASS; CLI reference/surface projections
regenerated and checked
- Independent cross-family validation (fresh Codex context, frozen SHA):
5/6 claims CONFIRMED; 6th NOT_PROVEN only due to sandbox networking (its
cached rerun of the same suite passed)
- Test-count decrease is deliberate and carried by a Test-Removal-Reason
trailer
## What
New `workspace` subsystem for `ao doctor`: six `fm-ws-*` detectors +
three fixers that keep a repo's `.agents/` runtime workspace clean, plus
the retention convention doc (docs/agents-dir-hygiene.md).
- **Auto-fixable**: `fm-ws-stale-queue-dirs` (TTL GC of
`.stale-*`/`-retryN` debris), `fm-ws-empty-dirs`, `fm-ws-naming-drift`
(merges alias spellings into canonical dirs, collision-safe via
Skipped).
- **Report-only**: `fm-ws-dual-store`, `fm-ws-nested-tree`,
`fm-ws-oversize` — human calls by design.
- All mutation flows through one shared dir-rename chokepoint adapter
(`workspaceDirRename`): per-path locks, scope + op preconditions,
journaled receipts, undo. **No delete op exists** — removal = atomic
Rename into the run's quarantine.
- Capabilities: `.agents` added to write scopes; `workspace` subsystem
registered.
## Verification
- 186 package tests (incl. shuffle), golangci clean, bead-per-commit
(`age-agents-hygiene-doctor-fyjdk`).
- **Dogfooded on a 211MB copy of the real tree**: 54 fix actions, 28
dirs quarantined, undo restored 54/54 byte-identical; then run live
(142→114 top-level dirs, fully reversible, receipts kept).
- **Cross-family review (Codex), two adversarial rounds, 15 findings,
all resolved or dispositioned**: R1's 8 (symlink-root escape,
journal-undo blindness, walk-errors-as-empty, P4 off-contract, etc.) all
fixed; R2's new items fixed (symlinked canonical dest,
Lstat-error≠absent, kernel-atomic no-clobber file moves via link+remove,
env-cap overflow, docs overclaim). One pre-existing finding in untouched
code filed as bead `age-knowledge-symlink-root-inbpg`.
## Residual risk (disclosed by design)
- TOCTOU vs **external** writers (in-process advisory locks): windows
exist; bounded — content is moved to quarantine, journaled,
undo-restorable, never destroyed. Full closure needs FS transactions;
out of scope.
- Execute-before-journal ordering matches the existing `Mutate`
chokepoint (house parity); a crash in that window requires manual
recovery from quarantine — documented in the doc page.
- Dir renames carry no byte backup: the renamed tree IS the copy (undo
replays the rename).
Bumps the go-minor-patch group in /cli with 1 update:
[golang.org/x/text](https://github.com/golang/text).
Updates `golang.org/x/text` from 0.38.0 to 0.40.0
<details>
<summary>Commits</summary>
<ul>
<li><a
href="https://github.com/golang/text/commit/724af9c35838492dcaacc1ac51a8a0187c994c54"><code>724af9c</code></a>
go.mod: update golang.org/x dependencies</li>
<li><a
href="https://github.com/golang/text/commit/bf5b9d658a03d36bd3459b3babdb23a9f56038cb"><code>bf5b9d6</code></a>
internal/export/idna: always treat Punycode encoding pure ASCII as an
error</li>
<li><a
href="https://github.com/golang/text/commit/b326f3d3c814ab79b3c516f4ac03c2314d8df65f"><code>b326f3d</code></a>
go.mod: update golang.org/x dependencies</li>
<li><a
href="https://github.com/golang/text/commit/5ae8e578e495731553eddba11b2d0e86c91a00ce"><code>5ae8e57</code></a>
unicode/norm: avoid infinite loop on invalid input</li>
<li><a
href="https://github.com/golang/text/commit/0dc94a239c8bc3b7ef3aa0d059e54af960f459f4"><code>0dc94a2</code></a>
all: fix some comments</li>
<li>See full diff in <a
href="https://github.com/golang/text/compare/v0.38.0...v0.40.0">compare
view</a></li>
</ul>
</details>
<br />
[](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)
Dependabot will resolve any conflicts with this PR as long as you don't
alter it yourself. You can also trigger a rebase manually by commenting
`@dependabot rebase`.
[//]: # (dependabot-automerge-start)
[//]: # (dependabot-automerge-end)
---
<details>
<summary>Dependabot commands and options</summary>
<br />
You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore <dependency name> major version` will close this
group update PR and stop Dependabot creating any more for the specific
dependency's major version (unless you unignore this specific
dependency's major version or upgrade to it yourself)
- `@dependabot ignore <dependency name> minor version` will close this
group update PR and stop Dependabot creating any more for the specific
dependency's minor version (unless you unignore this specific
dependency's minor version or upgrade to it yourself)
- `@dependabot ignore <dependency name>` will close this group update PR
and stop Dependabot creating any more for the specific dependency
(unless you unignore this specific dependency or upgrade to it yourself)
- `@dependabot unignore <dependency name>` will remove all of the ignore
conditions of the specified dependency
- `@dependabot unignore <dependency name> <ignore condition>` will
remove the ignore condition of the specified dependency and ignore
conditions
</details>
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Test <test@test.com>
GO-2026-4970 is an os.Root symlink-escape vuln; os.Root is this repo's
containment primitive. Bump the pinned toolchain to the patched release
and re-verify build + tests green (11971 passed, 109 packages).
Bead: age-toolchain-cve-2026-4970-9z12
Claude-Session: https://claude.ai/code/session_01BkgdP88SiccCSyYdi8GHNa
Packet loading now validates raw packet JSON against the full
codex-task-packet schema (additionalProperties, auth constants
forbid_api_key/required_mode/login_status_must_contain, reject_env
minItems, role/sandbox/stdin/capture-mode/resume enums) before any
unmarshal-based checks, via santhosh-tekuri/jsonschema/v6 against
schemas embedded in the binary (cli/embedded/schemas/, parity-tested
byte-identical with schemas/). A new Go cross-check requires
dispatch.command to equal execution.argv. Receipts are validated
against the run-receipt schema before persisting; violations surface
as failed receipt validation. changed_files now always marshals as an
array (nil slice produced JSON null, violating the receipt schema).
Negative tests cover packets the old partial validation accepted.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Bumps the go-minor-patch group in /cli with 1 update:
[golang.org/x/sys](https://github.com/golang/sys).
Updates `golang.org/x/sys` from 0.44.0 to 0.45.0
<details>
<summary>Commits</summary>
<ul>
<li><a
href="https://github.com/golang/sys/commit/397d5f80920585bc27433d878aba498d062f81e1"><code>397d5f8</code></a>
unix: update to Linux kernel 7.0</li>
<li><a
href="https://github.com/golang/sys/commit/0a387f7a07d7a0e9811f00603c10b4e5a94ab79c"><code>0a387f7</code></a>
cpu: detect zbc extension on riscv64</li>
<li><a
href="https://github.com/golang/sys/commit/758f71cb839d131daf0ba4befa6a2c6ceb21a649"><code>758f71c</code></a>
cpu: add LLACQ_SCREL, SCQ, DBAR_HINTS detection for loong64</li>
<li><a
href="https://github.com/golang/sys/commit/99666ae32e07f6403182a79cb5df0c417cbbf25f"><code>99666ae</code></a>
unix: merge Linux readv/writev implementation with Darwin/OpenBSD</li>
<li><a
href="https://github.com/golang/sys/commit/e4444cbaaaf61cecff8e635874066fcd5c841575"><code>e4444cb</code></a>
windows: add NtSetEaFile, NtQueryEaFile and NtQueryInformationFile</li>
<li><a
href="https://github.com/golang/sys/commit/04396e85d470b7f990a9a1df5c1a44dc8e30c292"><code>04396e8</code></a>
unix: add Readv, Writev, Preadv, Pwritev for OpenBSD</li>
<li>See full diff in <a
href="https://github.com/golang/sys/compare/v0.44.0...v0.45.0">compare
view</a></li>
</ul>
</details>
<br />
[](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)
Dependabot will resolve any conflicts with this PR as long as you don't
alter it yourself. You can also trigger a rebase manually by commenting
`@dependabot rebase`.
[//]: # (dependabot-automerge-start)
[//]: # (dependabot-automerge-end)
---
<details>
<summary>Dependabot commands and options</summary>
<br />
You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore <dependency name> major version` will close this
group update PR and stop Dependabot creating any more for the specific
dependency's major version (unless you unignore this specific
dependency's major version or upgrade to it yourself)
- `@dependabot ignore <dependency name> minor version` will close this
group update PR and stop Dependabot creating any more for the specific
dependency's minor version (unless you unignore this specific
dependency's minor version or upgrade to it yourself)
- `@dependabot ignore <dependency name>` will close this group update PR
and stop Dependabot creating any more for the specific dependency
(unless you unignore this specific dependency or upgrade to it yourself)
- `@dependabot unignore <dependency name>` will remove all of the ignore
conditions of the specified dependency
- `@dependabot unignore <dependency name> <ignore condition>` will
remove the ignore condition of the specified dependency and ignore
conditions
</details>
---------
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: claude[bot] <41898282+claude[bot]@users.noreply.github.com>
Co-authored-by: Bo <boshu2@users.noreply.github.com>
Second atom of soc-7ftl chain. Adds PlansProjectionExecutor implementing the
JobExecutor interface (cli/internal/daemon/supervisor.go:18) for the
plans.projection job-type registered in atom-1. Introduces:
- plans_jobs.go: PlansProjectionJobSpec round-tripper with idempotency-key
collapse per foundation §1
- plans_projection.go: DaemonPlansProjection + Rebuild/Write/Validate triple
mirroring DaemonRPIRegistryProjection (rpi_registry.go:9). Atomic snapshot
via tmp + os.Rename
- plans_executor.go: executor + PlansBdSource interface + dbBdSource impl
using database/sql against the shared bushido Dolt server (100.109.17.108)
- plans_executor_test.go: 2 L0 constructor-validation tests (F-PM-4 mirroring
rpi_executor_test.go:29-40) + 6 BDD subtests covering all 6 pilot §b
scenarios (Empty / Populated / Transient-fail / Cancellation /
Replay-idempotent / Crash-recover) + 3 projection-helper subtests.
Wires plansExec into the fake + gascity supervisor policy slices when
opts.PlansBdSource is provided (test-friendly nil-disable; production callers
pass NewDbBdSource(dsn) loaded from .beads/metadata.json). Cli-fallback policy
intentionally omitted per pilot spec §c (G2 correction). Embeds the new Plans
field on ProjectionSet for atom-3+ HTTP exposure.
11 new tests pass; full daemon suite green; build+vet clean. Adds
github.com/go-sql-driver/mysql v1.10.0 (and filippo.io/edwards25519 v1.2.0
transitive) for the database/sql driver registration.
Plan: .agents/plans/2026-05-01-absorption-6-pilot-implementation.md (atom-2)
Closure proofs: .agents/proofs/atom-2/closure.yaml
Post-mortem council flagged 6 items. All resolved:
1. Clean dead code in measure_test.go — removed longOutput variable,
order variable, fixed byte-vs-rune assertion to use len([]rune())
2. Add goleak for goroutine leak detection — replaces fragile
runtime.NumGoroutine + sleep heuristic with deterministic check
3. Assert AntiStars values in goals_init_test.go — not just count
4. Fix ci-local-release.sh invocation: ./scripts/ not bash scripts/
5. Add MigrateV1ToV2 and killAllChildren package-level tests —
previously at 0% coverage in internal/goals
6. Fix goroutine leak in rpi_status.go — same signal.Stop-without-close
pattern found by audit of all signal.Notify sites (1/3 leaking)
- Add ao rpi parallel for concurrent multi-epic execution in isolated worktrees
- Enhance phased RPI processing with plan-file discovery and context improvements
- Update Go standards to modern idiom references
- Update CHANGELOG and README