## What
Closes the partial in Google-SRE convergence **point #8** (`ag-wrom`):
AgentOps already ran work at several autonomy levels (human-in-loop
in-session → substrate dispatch → bounded `autodev`) but the progression
was *implicit* — nothing named the rungs, stated what each may mutate,
or defined the evidence that earns a promotion. Implicit autonomy is how
a probabilistic agent quietly acquires more authority than its track
record justifies.
Adds `docs/architecture/autonomy-ladder.md`:
- **The invariant every rung obeys** — non-deterministic reasoning core
wrapped by a deterministic enforcement boundary (CI gates +
ports-and-adapters + ratchet) the agent can't bypass. The ladder moves
the *leash*, never relaxes the *boundary*. L4 code passes the same CI as
L0 code.
- **L0–L4 rungs** mapped to AgentOps' real dispatch vocabulary, with
human posture / acts-before-review / may-merge per rung.
- **Promotion gates** — per-lane, revocable, gated on
statistically-significant success vs Golden data at the
Bronze/Silver/Gold tier.
- **Demotion** — auto-downgrade on risk (the L3→L2 analog of Google's
de-escalation) + the unconditional Red Button.
- **Hard ceilings** — no rung confers authority over
external/secrets/schema/deletion/strategic-fork/merge-beyond-contract;
those stay draft-and-queue at every level.
- Honest divergence stated: AgentOps autonomy is **build-time** (code +
`.agents/` corpus), not run-time production ops — which is why L4 is
delegated to a substrate, not shipped (ADR-0009).
Wires it into the architecture index card grid + `mkdocs.yml` nav, and
flips convergence point #8 from ⚠️ partial to ✅ encoded (tally 9/1/1).
## Evidence
Closes-scenario: ag-wrom#autonomy-ladder
Bounded-context: BC1-Corpus
Evidence: markdownlint-cli2 PASS on all 3 changed docs; all cross-links
verified to resolve (operating-loop, canonical-loop-model,
fungibility-charter, google-sre, ADR-0009 in-docs relative; CLAUDE.md +
skills/autodev as GitHub URLs per repo convention for out-of-docs
targets); new page registered in mkdocs nav for `mkdocs build --strict`.
## Problem
The **Deploy Docs (MkDocs Material)** workflow (`docs.yml` → `mkdocs
build --strict`) has failed on the last 3 `main` commits (`78fc0e64`,
`72219bed`, `e74d8899`) — a persistent main-red docs-site deploy,
**pre-existing** (predates the most recent merge).
Root cause: 14 links in 5 docs files use `../../` to reach source files
**above** the `docs/` tree (`skills/`, `schemas/`, `scripts/`, `tests/`,
`CLAUDE.md`). MkDocs can't resolve targets outside the site → strict
mode aborts. On the published site those links 404 anyway.
## Fix
Convert each to `https://github.com/boshu2/agentops/blob/main/<path>` —
the repo's established source-link convention (already used in
`SCHEMAS.md`, `sovereignty-proof/`). All 11 unique targets verified to
exist; single-`../` docs-internal links untouched (pure `](../../` →
blob substitution).
Files:
`docs/contracts/{agent-native-mechanism,orchestration-backend,orchestration-result,outcomes-rubric-projection}.md`,
`docs/convergence/google-sre.md`.
## Verification
- `mkdocs build --strict` (`scripts/docs-build.sh --check`) → **exit
0**, 0 unresolved-link warnings (was aborting on these 14)
- `markdownlint` → 0 errors (5 files)
- Diff is pure URL substitution (13/13), scope-checked against
`origin/main`
Closes-scenario: ag-xhf6#mkdocs-blob-links
Bounded-context: BC1-Corpus
Evidence: docs/convergence/google-sre.md
## What
Operator-authorized (Bo, 2026-06-02). Strips the remaining **Gas City**
(`gastown`) coupling from AgentOps and reconciles the **split-doctrine
state** on `main` that the #672–#676 post-mortem flagged: canonical docs
(#676) said NTM+MCP+managed-agents while user-facing docs still
described Gas City as the reference substrate.
The out-of-session substrate is now uniformly **NTM** (local tmux swarm)
+ **MCP** (`ao mcp serve`, shipped) + **managed-agents** (`ao agent`).
AgentOps adopts a substrate; it owns none. Closes **ag-124p** (and
resolves **ag-h93p** — the claude.json gc-hook decouple).
## Deleted (load-bearing surfaces, per the bead's verified scope)
- `packs/agentops/` (the reference City) + root `city.toml`
- `skills/using-gc` + `skills-codex/using-gc` (+
`tests/scripts/using-gc-skill.bats`)
- `gc prime/nudge/mail/hook` wiring in `cli/hooks/claude.json` → now
hookless, matching 3.0 doctrine
## Doc sweep (the split-doctrine fix the post-mortem required)
- **README.md, docs/MIGRATION-3.0.md, docs/dependencies.md,
docs/activation-profiles.md** re-narrated to the substrate trio (the
four files the verdict named)
- AGENTS.md / CLAUDE.md substrate bullets; `dream` skill (+codex twin)
retirement pointer; `shared` / `agent-native` / `using-agentops`
cross-refs; skill-dispositions, context-map, sku-catalog, google-sre
convergence map
## Regenerated derived surfaces
Skill counts (81→80), `registry.json`, `skills/catalog.json`,
context-map, skill-domain-map, codex hashes (14) + manifest, SKILL-TIERS
— all via the generators, validated drift-free.
## Scope boundaries / follow-ups
- **`cli/internal/doctor/fix_bridges.go`** still carries a gc-bridge
detector/fixer subsystem. Out of the bead's verified scope; degrades
gracefully (stat-checks, returns empty when `gc`/`city.toml` absent);
removing it is a test-backed Go change → **follow-up bead**.
- **CLAUDE.md "Gas City bridge — REMOVED"** note kept intentionally:
it's an anti-re-coupling record, not substrate-framing.
- The local-only **bd-closeout** pre-push check (not in CI) is a
pre-existing gap on `main` (its AGENTS.md has no `bd dolt push` line) —
untouched here.
- `thesis-stability` gate FAIL, if present, is the pre-existing
README/PRODUCT/GOALS tagline drift, unrelated to this PR (my
README/PRODUCT edits are the dependency table + skill-count numbers, not
the tagline).
## Verification
`go build ./...` + `go vet` green · skill schema (80/80) + integrity
(heal --strict clean) + lint suite (0 fail) + codex parity green ·
sku-catalog & context-map drift gates green · zero broken markdown links
to deleted paths.
Closes-scenario: ag-124p#gc-coupling-strip
Bounded-context: BC5-Runtime
Evidence: docs/MIGRATION-3.0.md
## What
Establishes a first-class **`docs/convergence/`** section: the record of
the industry independently arriving at the structure AgentOps already
runs — kept distinct from the competitor map. Three surfaces:
1. **`the-reading.md`** — the *living thesis*. The argument (with
mechanism, firm-vs-forming consensus table, honest moat-risk, and a "how
to read a new signal" rubric) that the industry is converging and
**why**.
2. **`ledger.md`** — the dated *receipts* table (who/when/which
invariant). Seeded with Google SRE 2026.
3. **`google-sre.md`** — the per-party *encoding map*: 11 convergence
points → real AgentOps loci (8 encoded · 2 partial · 1 gap).
4. **`index.md`** — section hub framing the three.
## Why first-class, not under comparisons/
A vindication record is the *inverse* of a competitor grid — wrong to
parent it under "vs the competition." Radar = competitors in our lane;
Convergence = independents arriving from outside it. Promoted to its own
top-level nav section (`git mv`, history preserved; permalinks updated;
cross-links rewired both ways).
## Gaps surfaced (filed as beads)
| Bead | Point | Work |
|---|---|---|
| `ag-fjbu` | #3 | Adopt Bronze/Silver/Gold eval-tiering +
True-vs-Observed-Precision naming |
| `ag-wrom` | #8 | Formalize an L0–L4-style autonomy ladder for AgentOps
dispatch |
| `ag-7278` | #11 | Council: does coherent-arc need a fix-forward escape
hatch? (Google is ahead) |
## Verification
- All relative links across the convergence section + comparisons
pointers resolve.
- mkdocs nav + documentation-index updated; renames preserve history.
Closes-scenario: ag-4hf7#google-sre-convergence
Bounded-context: BC1-Corpus
Evidence: docs/convergence/the-reading.md