## What
Release the prepared AgentOps update as **3.7.0**, the minor release
after 3.6.0. Align the CLI and plugin versions, regenerate the Gemini
manifest, and rename/update the curated notes and changelog links.
## Why
The operator selected a minor release. No 4.0.0 tag or release was
published. Migration instructions and the documented removed
commands/skills remain accurate.
## How I tested
- Go lint and focused version/manifest tests passed.
- Full regeneration parity, changelog mirror parity, and release-note
coverage from v3.6.0 passed.
- The exact 3.7.0 release rehearsal passed in 143 seconds; all 73 full
repository gates passed. All 12 security tools ran with zero
missing/error tools, critical findings or security-high findings;
existing advisories remain reported.
- All nine hosted checks passed on
`092e1814b6cba46cd9ac1d797dab2a5c8c7c188c`, including Go race/shuffle
tests and 1,509 executed Bats passes (31 environment-dependent skips,
zero failures). A new CLI wiring regression confirms `ao version --json`
reports the build version.
- Actual fresh native Claude/Codex 3.7.0 installs and upgrades from
3.6.0 passed with exact 34-skill inventories. Existing implementation
validation from PR #1143 remains applicable to unchanged source.
- Fresh author-distinct correction review passed for exact head
`092e1814b6cba46cd9ac1d797dab2a5c8c7c188c`, covering all changed paths
and four acceptance criteria with no unchecked scope. Verdict digest:
`e7b24a297a0b232138de011473df8be6eb3eeaf47afd1f300398eecafab2fbab`.
## Checklist
- [x] Version owners and generated metadata agree on 3.7.0.
- [x] Migration/removal guidance is preserved.
- [x] Exact-candidate release checks pass before tagging.
- [x] Fresh correction review is recorded before tagging.
## What
Prepare AgentOps 4.0.0 across the Claude plugin, Codex plugin, skills
and CLI. Claude writers capture the supplied check status during its
original invocation, and plugin conformance verifies exact skill
membership and link destinations. Full release security now scans the
repository and blocks on Python collection failures that previously
produced a false green result.
## Why
The 3.6.0-to-current interval removes published commands and 20 skill
names, so this is a major release with migration instructions. Release
validation also exposed stale skill assertions and test prerequisites
that need to match the current product contracts without weakening
acceptance.
## How I tested
- Native Claude Opus/Haiku success, failing-check and direct-writer
trials: each check ran once, and the direct child returned plain JSON.
- Actual fresh installs and upgrades from 3.6.0 in isolated Codex and
Claude homes: 34 skills, expected agents, and exact installed package
bytes.
- Exact candidate `b721d02559e1495be6095ad97b820e88ceb4a049`: all 73
full repository gates, regeneration parity, and the complete local
release rehearsal passed. All 12 security tools ran with zero skips,
tool errors, critical findings or high-severity security findings. The
unchanged advisory policy reports 35 quality-high findings on unchanged
files.
- Python: 327 tests and 72 subtests passed. Hosted Bats: 1,509 passed,
31 environment-dependent skips, zero failures. Go
lint/build/vet/race/shuffle checks and CLI smoke/integration passed.
- All 11 hosted checks passed, including Windows correctness,
macOS/Linux installation, security, and the six-target no-publish
GoReleaser snapshot. Local archive checksums and a real macOS CLI
initialization/status/version smoke also passed.
- Fresh author-distinct review passed all four acceptance criteria and
all 35 changed paths with no unchecked acceptance. Canonical subject and
caller-intent verification passed; verdict digest
`68af2c935ed0106cd91b3950f5d168e662f4071f660fcbd113c36b7cd0f0426e` binds
manifest
`7affc77e25eaff69ba36c5ce05582b4f0385c954b76b62c02b97f97041f489b2`.
## Checklist
- [x] Breaking changes documented in the migration guide and complete
release notes.
- [x] No credentials or private runtime proof included.
- [x] Final full release checks pass on the exact candidate.
- [x] Fresh author-distinct final PASS is recorded before merge.
This prepares the release candidate; it does not publish a tag or
release.
Coverage limits remain explicit: native plugin tests used isolated macOS
homes and local marketplaces, guard installation remains opt-in, and
reader instructions do not prove sandbox confinement. Semgrep retains
pre-existing warning-level parser diagnostics. Snapshot metadata follows
the existing 3.6.0 tag; this is a packaging rehearsal, not a published
4.0.0 archive.
Everything-but-tag for **v3.6.0**. Minor, not major: the post-3.5.0
delta retires the knowledge-flywheel product surface and aligns the
estate on the operations-layer identity, matching the 3.4.0 precedent
where the orchestration pack was removed in a minor.
## What this carries
- **Version 3.5.0 -> 3.6.0 across all seven surfaces**: Claude plugin
manifest, marketplace metadata + plugin entry, Codex manifest, Gemini
image manifest, Claude image verify pin, and the `ao` source fallback.
- **CHANGELOG `[3.6.0]`** (root + docs mirror): operations-layer
alignment, anti-ceremony enforcement, the behavioral eval program, the
flywheel retirement, and the honest 0/12 measured probe coverage.
- **Curated `docs/releases/2026-08-17-v3.6.0-notes.md`**: validator
PASS, tier minor, full changed-path area coverage. The Breaking Changes
section lists all six removals and the handoff write-path move rather
than burying them in a minor.
- **New regression test `cli/cmd/ao/version_manifest_parity_test.go`**
binding the `version` fallback to every version-bearing release surface.
- **PRODUCT.md** reviewed against the 3.6 surface and re-stamped;
**`docs/reference/skill-system-evolution.md`** gains its 3.6.0 row and
drops the "current unreleased tree" framing that the tag would falsify.
## Why the new test exists
This cut missed `images/claude/verify.sh`. Its version guard — whose
entire stated purpose is catching plugin.json drift *behind* the release
— then rejected the **correct** version, so a user following the shipped
`images/claude/README.md` on the v3.6.0 tag would have hit a hard FAIL.
`check_manifest_version_consistency` in `ci-local-release.sh` compares
only the two Claude manifests to each other, so it structurally could
not see this.
The test fails on the drift and passes when correct; both directions
were exercised before committing.
## Honesty notes carried into the release
- Measured behavioral probe coverage is stated as **0/12** under the v3
evidence contract. The earlier wave-1 classifications are retained as
`LEGACY-UNVERIFIED` rather than counted, because the probe harness did
not isolate the skill corpus between control and treatment arms.
Skill-efficacy claims in these notes are directional, not proven.
- The estate-ablation aggregate counts are labeled legacy-unverified and
non-promotable.
## Verification
Full `scripts/ci-local-release.sh --release-version 3.6.0
--readiness-mode official --security-mode full`: **PASSED — 72 checks, 0
failures**.
| Dimension | Status |
|---|---|
| SIL (race suite, 75.8% coverage) | pass |
| VIL (gates, regen, digital twin) | pass |
| HIL (real Darwin/arm64 target) | pass |
| Artifacts (CycloneDX + SPDX SBOM) | pass |
| Security (full mode) | pass |
Readiness **9.0** against threshold 8. HIL used a real target with **no
waiver**: `ao` built from this tree reported `ao version 3.6.0`
(`version_verified=true`) and ran a full `ao init` scaffold plus `ao
status` in a scratch repo. Security full mode: 0 critical, 0 high, 3
medium (non-blocking). Notes validator PASS, doc-release gate PASS.
## Post-merge
Readiness lap at the merged SHA, audit record in `docs/audits/`, then
the tag — per the binding process rule that the record exists **before**
the tag.
Executes docs/plans/2026-08-07-agentops-operations-layer-alignment.md:
AgentOps is the operations layer for agentic engineering; the federated
integration graph is the topology, the semantic work-and-proof protocol
is the contract, and RPI is the standard one-experiment traversal.
Retires the ao flywheel command family and all knowledge-flywheel
product state, tombstones the seven-move operating-loop workflow,
narrows ao init and the .agents state writers to declared destinations,
renames the core architecture page to rpi-traversal.md with a
compatibility redirect, aligns AGENTS.md, 25 skills, public and package
copy, regenerates every owned projection, and strengthens the
conformance gates with planted-negative proofs.
Both the alignment subject and the follow-up gate-bookkeeping commit
carry fresh author-distinct validation PASS verdicts with empty
not_checked scope.
Test-Removal-Reason: dead knowledge-flywheel and session-store surfaces were deleted with their tests (operations-layer alignment)
Everything-but-tag for v3.5.0 (Bo's call: the post-3.4.0 delta carries
two feature surfaces — `ao gc` and plan manifest mode — so minor, not
patch).
- Version 3.4.0 → 3.5.0 across all seven surfaces (plugin manifests,
marketplace, image verify pin, `ao` source fallback).
- CHANGELOG `[3.5.0]` section (root + docs mirror): ao gc family,
manifest mode, Mayor-dispatch doctrine, honest-scoped-PASS,
fresh-install fixes, init gitignore policy.
- Curated `docs/releases/2026-07-31-v3.5.0-notes.md`: validator PASS,
tier minor, full area coverage; upgrade notes call out the
gc-maintainer-ops wrapper deprecation and the new init gitignore block.
Verification: notes validator PASS · `regen-all.sh --check` all ✓ ·
skill-lint 0 · `go build/vet/test` 2947 passed / 73 packages.
Post-merge: official-mode readiness lap at the merged SHA with real HIL,
record in docs/audits/ before any tag.
## Summary
Everything-but-the-tag for v3.4.0, in four commits:
- **docs(gc)**: the factory pivot — README and `using-gc` present the
upstream [Gas City build
pack](https://github.com/gastownhall/gascity-packs/tree/main/gascity)
and [Agentic Coding Flywheel](https://agent-flywheel.com/) as the
supported factory choices; the in-repo prototype (`deploy/gc/`) is
retired in place. AgentOps' lane is the skills + evidence discipline
either factory executes.
- **chore(release)**: version 3.3.0 → 3.4.0 across all six surfaces
(claude/codex/gemini plugin manifests, marketplace, image verify pin,
`ao` source fallback).
- **fix(gates)**: `check-orchestration-skill-boundaries.sh` exited 2 on
every run — it probed adapter files deleted by the 3.3 single-pass
refactor and three contract phrases removed by the skill-overhaul waves.
The live ratchets (retired-skill absence, ATM-era naming) are kept.
- **docs(release)**: 3.4.0 CHANGELOG section (root + docs mirror) and
curated release notes; `validate-release-notes.sh` passes (tier minor,
full area coverage).
## Verification
- Full Go gate in a clean worktree: build ✓ vet ✓ test **2902 passed / 0
failed** (71 packages)
- `scripts/regen-all.sh --check`: all 11 projection/doc checks ✓
(including the doc-release freeze gate)
- `scripts/validate-release-notes.sh v3.4.0 --since v3.3.0`: PASS
- `scripts/check-orchestration-skill-boundaries.sh`: exit 0 (was exit 2
on main)
## Notes
- The earlier read that `go.cli-reference` needed unpinning from the
negative-witness grandfather list was a **false positive**: gitignored
session logs under `tests/claude-code/logs/` pollute the witness scan in
a dirty checkout. On a clean tree the pin is correct; a follow-up task
exists to make the scanner read only tracked files.
- Tagging + Release Publisher run happen after merge, separately; an
official-mode readiness artifact gets produced at the merged SHA
**before** any tag (binding rule from the v3.3.0 record).
Ship the Cathedral Cut on the 3.x line with the intentional semver deviation documented for v3.3.0. Includes the complete release rebadge, release-gate artifacts, removed-command tombstones, and a legacy config read fallback that preserves existing settings when saving the new canonical path.\n\nValidated by the full local Go/release suite and all required GitHub checks on head 78027b009c.
Release preparation for the v3.2.0 minor (991 commits / 44 closed epics
since v3.1.0). The tag itself is deliberately NOT cut — operator approval
step per the release skill (tag + push publishes via GoReleaser).
- CHANGELOG.md + docs/CHANGELOG.md: new [3.2.0] stanza (verification-
keystone narrative; absorbs the former [Unreleased] Wave A-F content).
- docs/3.2.md: release narrative page (3.0 -> 3.1 -> 3.2 series).
- docs/releases/2026-07-03-v3.2.0-notes.md: curated notes — PASSES
scripts/validate-release-notes.sh v3.2.0 --since v3.1.0 (tier minor,
coverage green; the publish job's hard gate).
- Version bumps 3.1.0 -> 3.2.0: .claude-plugin/plugin.json,
.claude-plugin/marketplace.json (metadata + plugins[0]),
.agy-plugin/plugin.json, .codex-plugin/plugin.json,
images/gemini/plugin.json, images/claude/verify.sh expected-version
default; installer example refs freshened (install-claude/install-agy).
ao --version stays tag-injected via goreleaser ldflags (no static file).
Known issues recorded honestly in the notes: images/{claude,gemini}
IMAGE-CORE acceptance recipes lag the 105->63 skill consolidation
(age-085q; not in the publish path), env-local full-tier reds
(worktree-disposition age-ym4b, memrl-health), the single 5b064b28b
author residual (age-jhal), the cold >65KB review bound, and strict
quorum honest-UNAVAILABLE.
Verified: validate-release-notes PASS, tests/docs/validate-doc-release.sh
PASS (0 broken links), make regen-check ALL GREEN, three-gap supergate
PASS, heal --strict clean, check-go-lint clean.
Refs: age-hl9q, age-61ci, age-085q
Two release-engineering surfaces the per-PR validate.yml gate never
exercised:
1. **Plugin updatability.** The 3.0.0 version label never moved across
the 15 commits that landed the skill consolidation + doc reconciliation,
so existing installs got "already at latest version" from `claude plugin
update` and stayed stale. Bump 3.0.0 → 3.0.1 (plugin.json,
marketplace.json metadata+plugin, install-ao.sh) + CHANGELOG 3.0.1 entry
(root + docs, byte-identical).
2. **Nightly Static Validation (red on main).** The hooks rip (#511)
deleted `scripts/validate-hooks-doc-parity.sh` but Nightly still ran it;
`tests/docs/validate-skill-count.sh` greps PRODUCT.md for hook-era
phrasing the 3.0 restructure removed → 2 MISSING_PATTERN fails
(warn-tolerated in validate.yml, fail-closed in Nightly). Removed the
dead step; repointed product_total to the four-layers line; retired
product_layer_total.
Verified locally: validate-skill-count.sh + validate-doc-release.sh pass
(total=75); version-consistency = 3.0.1 across all 3 manifest fields.
Follow-ups: ag-728 (PRODUCT.md daemon/hook prose), ag-x0d (3 golangci
quality findings).
Closes-scenario: ag-s3z#v3-0-1-release-readiness
Bounded-context: BC5-Runtime
Evidence: tests/docs/validate-skill-count.sh
* docs: add go cli quality discovery plan
* fix(cli): harden gc bridge version parsing
* docs(go): align complexity policy with gates
* docs(cli): classify command surface
* fix(cli): enforce json output contracts
* feat(cli): expand completion coverage
* refactor(cli): pilot badge options writer
* refactor(cli): inject contradict output writer
* refactor(cli): inject notebook update writer
* fix(cli): enable gc runtime smoke coverage
* fix(cli): align gc bridge with gascity v1
* Release v2.39.0
* fix(tests): align next-work schema test with widened type enum
Commit ed35c47f added `docs` and `chore` to the script's VALID_TYPES,
but tests/scripts/check-next-work-schema-rows.bats:42 still used
`type:"docs"` as its supposed-to-be-rejected example, so the test
now passes through the validator — `bats-tests` has been red on
main since.
Switch the rejected-type example to `finding`, which is still
outside the enum and is also the canonical example cited in the
script's own header comment ("type=finding ... caught at push time").
Local: 11/11 in tests/scripts/check-next-work-schema-rows.bats pass.
* docs: capture finding generator postmortem (#157)
* fix(rpi): sort verdicts deterministically in context and status helpers (#158)
BuildPhaseContext and JoinVerdicts iterated the verdicts map directly,
producing non-deterministic output across runs. Sort keys before
rendering so prompt injection and status logs are reproducible.
Closes council finding W-7 (context-orchestration-leverage batch). The
related buildHandoffContext path was already fixed to delegate to
FormatVerdicts (which sorts); this completes the remaining helpers.
- cli/internal/rpi/status.go: sort keys in JoinVerdicts
- cli/internal/rpi/phased_context.go: sort keys in BuildPhaseContext
- tests: replace "ordering not deterministic" waivers with exact-order
asserts and add a 50-run stability check
https://claude.ai/code/session_01Qw4bZvXUNuLs8Rp1j1homB
Co-authored-by: Claude <noreply@anthropic.com>
* fix(codex): audit noisy hook injections (#159)
* docs: add competitive radar (#160)
* feat(agents): harden operator control plane (#161)
* docs(discovery): plan agents control plane hardening
* feat(agents): harden operator control plane
* Release v2.39.0
* fix(tests): align next-work schema test with widened type enum
Commit ed35c47f added `docs` and `chore` to the script's VALID_TYPES,
but tests/scripts/check-next-work-schema-rows.bats:42 still used
`type:"docs"` as its supposed-to-be-rejected example, so the test
now passes through the validator — `bats-tests` has been red on
main since.
Switch the rejected-type example to `finding`, which is still
outside the enum and is also the canonical example cited in the
script's own header comment ("type=finding ... caught at push time").
Local: 11/11 in tests/scripts/check-next-work-schema-rows.bats pass.
* docs: capture finding generator postmortem (#157)
* fix(rpi): sort verdicts deterministically in context and status helpers (#158)
BuildPhaseContext and JoinVerdicts iterated the verdicts map directly,
producing non-deterministic output across runs. Sort keys before
rendering so prompt injection and status logs are reproducible.
Closes council finding W-7 (context-orchestration-leverage batch). The
related buildHandoffContext path was already fixed to delegate to
FormatVerdicts (which sorts); this completes the remaining helpers.
- cli/internal/rpi/status.go: sort keys in JoinVerdicts
- cli/internal/rpi/phased_context.go: sort keys in BuildPhaseContext
- tests: replace "ordering not deterministic" waivers with exact-order
asserts and add a 50-run stability check
https://claude.ai/code/session_01Qw4bZvXUNuLs8Rp1j1homB
Co-authored-by: Claude <noreply@anthropic.com>
* fix(codex): audit noisy hook injections (#159)
* docs: add competitive radar (#160)
* fix(merge): drop unused AgentsDoctorError ref and prune allowlist entries without production refs
---------
Co-authored-by: Claude <noreply@anthropic.com>
* fix(merge): resolve conflicts by taking PR's refactored contradict/codex_runtime, main's overnight test schema
---------
Co-authored-by: Claude <noreply@anthropic.com>
Add CHANGELOG entries for v2.23.1 and v2.24.0, bump plugin.json to
2.24.0, condense post-mortem SKILL.md to stay under 1050-line lint
limit, sync codex bundle and embedded hooks, add glob patterns to
codex residual allowlist for domain checklist trigger syntax.