Commit Graph

11 Commits

Author SHA1 Message Date
Bo 5995beb417 docs(doctrine): reconcile 3.0.md tooling-floor wording with the bd/git floor (ag-60jd #tooling-floor-reconcile) (#790)
## What

`docs/3.0.md:168` (Non-goals) read **"No new required tooling; `bd`, the
ratchet, and the `ao` CLI carry the load,"** which sounded like
*nothing* was required and contradicted two settled statements:

- `AGENTS-WORKFLOW.md` / CLAUDE.md doctrine: **"No bead, no PR"** (bd is
load-bearing for the canonical workflow).
- `docs/dependencies.md:14`: **`bd` → "Required for tracked work."**

This restates the floor in one consistent form across the doctrine
surfaces:

> `git` + an agent runtime stay **hard-required**, `bd` is **required
for the bead-tracked workflow** ("No bead, no PR"), and the ratchet +
`ao` CLI carry the rest.

## Why this is the only change needed

The README rewrite already removed the old "bd = Optional" requirements
table the bead cited (README:128). The current surfaces are already
aligned:

- `README.md:86` — "The only hard requirement is an agent runtime and
`git`."
- `docs/dependencies.md:14` — `bd` = "Required for tracked work";
`ao`/`bd` recommended (line 32).
- `AGENTS.md` — no contradicting "bd optional" statement.

So `docs/3.0.md:168` was the last outlying statement. One line changed.

## Verification

- `markdownlint-cli2 docs/3.0.md` → 0 errors.
- `scripts/pre-push-gate.sh --fast` → passed (2 pre-existing warn-only
F1.6 items, unrelated).

Closes-scenario: ag-60jd#tooling-floor-reconcile
Bounded-context: BC5-Runtime
Evidence: docs/3.0.md
2026-06-06 14:07:38 +00:00
Bo 6072dceac5 docs(substrate): reconcile doctrine — skill-dispatch + drop Gas City reference (ag-88y5 #docs-skills-dispatch-reframe) (#696)
## What
Two bounded doctrine-reconciliation slices (one coherent arc):

**ag-88y5** — the out-of-session dispatch unit is the `/rpi`·`/evolve`
**skill**, not the `ao rpi`/`ao evolve` CLI. Per the 3.0
skills-are-the-runtime thesis (using-ntm #693 already frames it this
way), re-narrate the **live** doctrine surfaces so the substrate spawns
an agent that *runs the /rpi skill* over a bead:
- docs/3.0.md, docs/architecture/canonical-loop-model.md,
docs/runbooks/nightly-evolution.md
- skills/using-agentops, skills/agent-native,
skills/domain/references/factory.md

Historical surfaces (MIGRATION-3.0, ADR-0009, release notes) +
CLI-reference left as-is; the actual `ao rpi`/`ao evolve` CLI removal is
the **ag-iowf** epic (live automation callers — overnight-evolve,
release-smoke — must migrate first).

**ag-ogp5** — drop the 4 docs still asserting Gas City as THE reference
substrate → NTM+MCP+managed-agents:
- docs/ARCHITECTURE.md, docs/SCHEMAS.md,
docs/contracts/agents-write-surfaces.md,
docs/patterns/completion-notifications.md (Pattern C)

The ~37 historical/illustrative GC refs are intentionally retained (per
ag-ogp5 scope).

## Verification
regen-all --check, embedded-sync, heal --strict, registry-drift,
codex-rpi-contract, codex-artifacts --scope head — all green.

Closes-scenario: ag-88y5#docs-skills-dispatch-reframe
Bounded-context: BC4-Factory
Evidence: docs/3.0.md
2026-06-03 12:11:23 +00:00
Bo 37c86dc282 docs(doctrine): re-narrate out-of-session substrate Gas City → NTM+MCP+managed-agents (ag-vg40 #substrate-renarration) (#676)
## What

The **doctrine slice** of the ACFS-prune (operator-authorized
2026-06-02). Re-narrates AgentOps's out-of-session story.

**Kept (the sovereignty floor — unchanged):** AgentOps = the in-session
loop + compounding context; ships no daemon/scheduler/overnight-runner;
delegates out-of-session execution to a *swappable substrate*. The
in-session/out-of-session boundary and the "substrate owns
when/where/who-supervises/coordination" split stay.

**Changed (the reference substrate):** Gas City → the adopted ACFS trio
— **NTM** (local tmux swarm) + **MCP** (`ao mcp serve`, shipped) +
**managed-agents** (`ao agent`). "AgentOps IS a Gas City reference
config" → "AgentOps adopts NTM+MCP+managed-agents; it still owns no
core, it just doesn't own or reference Gas City." This is the
deep-dive's "adopt the substrate, don't own it."

## Changes (7 files, +25 / −120)
- `docs/3.0.md` — substrate table row; replaced the "Gas City reference
City" section with "Running the loop out of session" (the three
substrate options); Olympus comparison rows; sovereignty-floor line
- `docs/architecture/canonical-loop-model.md` — Factory-driver framing,
ASCII diagram, boundary table, dispatch paragraph
- `docs/cdlc.md`, `docs/architecture/fungibility-charter.md` — substrate
one-liners
- **deleted** `docs/architecture/gc-posture.md` + reconciled its 4
inbound links (both index files, documentation-index,
fungibility-charter)

## Scope boundaries
- **ADR-0009 left historical** — decision records are immutable; it
records the *then*-rationale.
- **`thesis-stability` not tripped** — that gate guards the product
thesis (README/PRODUCT/GOALS), not the substrate detail. (Its current
FAIL is pre-existing README/PRODUCT/GOALS tagline drift, unrelated to
this PR.)
- **Follow-up `ag-124p`** (separate PR): the code/config strip —
`packs/agentops` + `city.toml` + `skills/using-gc` +
`cli/hooks/claude.json` gc-wiring.

## Note
This is outward-facing doctrine — opened for your review rather than
auto-merged. PR #5 this session; you authorized continuing past the
scope ceiling for the prune.

Closes-scenario: ag-vg40#substrate-renarration
Bounded-context: BC1-Corpus
Evidence: docs/3.0.md
2026-06-02 07:51:25 -04:00
Bo dde214825b docs(3.0): ag-p7j W1 — delete daemon contracts, regen generated docs, reframe skills (ag-p7j) (#529)
W1 (structural) of the 3-way ag-p7j doc-sweep. Owns
shared/generated/structural artifacts + skills + contracts. Disjoint
from W2 (#527, core narrative) and W3 (#528, peripheral docs), both
already merged; this branch is rebased on top of them.

## Deleted (deleted-surface docs)
-
`docs/contracts/{agentops-daemon,ao-watch,daemon-idempotency,dream-run-contract,agent-worker,ao-outcomes,openclaw-consumer-api,gascity-integration}.md`
- `docs/code-map/agentopsd-codebase-map.md`
- `gascity-integration.md` deleted because it described the OLD
daemon↔GasCity adapter (`ao daemon run --executor-policy=gascity`,
daemon ledger, OpenClaw consumer endpoints). The current GC story is the
using-gc skill + the reference City.
- Removed every deleted doc's row from `docs/documentation-index.md`,
`docs/contracts/index.md`, and `mkdocs.yml` nav.

## Regenerated (generators, not hand-edited)
- `docs/cli-surface.{md,json}` via `check-cmdao-surface-parity.sh
--write-surface` — daemon/schedule/overnight/plans/watch/factory rows
gone (live `ao` binary no longer registers them; the docs were stale).
- `registry.json`, `skills/catalog.json`, SKU catalog, codex
`.agentops-generated.json` hashes + manifest.
- Skill counts verified in sync (81 skills).

## Reframed to in-session / GC / hookless
- Skills: `dream` (+codex twin, neutralized literal `agentopsd`/`ao
schedule`/`ao overnight`/`ao watch`/`ao plans` while keeping the
retirement message), `compile` (+codex), `scaffold/recommended-reading`
(+codex), `discovery/best-practices`, `validation/best-practices`.
- Generated narrative: `docs/SKILLS.md` /dream block,
`docs/ARCHITECTURE.md` dream paragraph, `skills/SKILL-TIERS.md` dream
row.
- Contracts prose: `docs/contracts/ubiquitous-language.md`,
`docs/contracts/agents-write-surfaces.md` (kept catalog rows for
surviving load-bearing-lane subdirs; dropped deleted-command references
in descriptions).

## 3.0.md:150
Restored the strong claim: "...gone from the CLI **and from live doc
prose** (only historical surfaces — ADRs, the CHANGELOG, release notes,
and the 3.0 migration record — still name them, by design)"; kept the
`validate-sku-catalog-drift` linkage-gate mention.

## Collateral (minimal dead-link repairs to my deleted targets)
- `docs/daemon-migration.md` (gascity-integration link →
dependencies.md), `cli/README.md` (dropped dream-run-contract link). The
comparisons-file dead link was resolved by W3's merge.

## Gates (all green locally)
doc-release (2765 links, 0 broken) · contract-compatibility (0 failures)
· structural-floor · agents-write-surfaces · registry --check ·
validate-sku-catalog-drift · validate-ci-policy-parity ·
validate-skill-cli-snippets · validate-codex-runtime-sections · codex
parity (5 skills) + regen-codex-hashes --check · skill-catalog drift ·
cli-skills-map · markdownlint (changed files) · mkdocs --strict · `cd
cli && go build ./...`

Closes-scenario: ag-p7j#w1-structural
Bounded-context: BC1-Corpus
Evidence: docs/3.0.md
2026-05-24 21:55:17 -04:00
Bo fcc036fb8b docs(3.0): honest 'docs match reality' claim — north-star truthful about the doc-prose tail (1 stale claim → 1 accurate claim) (#526)
docs/3.0.md:150 claimed daemon prose was gone from ALL live docs; ~10
narrative docs still reference it (tracked ag-p7j). Reworded to claim
what is true (CLI + skill snippets + core docs clean) + point at the
tracked tail and the validate-sku-catalog-drift linkage gate. Surfaced
by the cc/cod release-readiness duel.

Closes-scenario: ag-p7j#north-star-honesty
Bounded-context: BC1-Corpus
Evidence: docs/3.0.md
2026-05-24 20:56:08 -04:00
Bo 3c6fd05dd0 fix(docs): unbreak mkdocs --strict — drop deleted HOOKS.md emit (ag-u46) (#521)
docs.yml (mkdocs build --strict) has failed 3x on main since #511.

- gen_cli_reference.py emitted cli/docs/HOOKS.md (deleted with hooks) ->
mkdocs FATAL. Removed the emit, the index Hooks card, and stale hook
prose.
- docs/3.0.md linked ../PRODUCT.md / ../GOALS.md (outside docs tree) ->
strict warnings. Repointed to GitHub blob URLs.

Verified: mkdocs build --strict builds clean locally (0 warnings).

Closes-scenario: ag-u46#mkdocs-fix
Bounded-context: BC1-Corpus
Evidence: docs/_hooks/gen_cli_reference.py
2026-05-24 18:29:31 -04:00
Bo 52930e05ff docs(3.0): honest doctrine — AgentOps is in-session, GC/Olympus own out-of-session (#3.0-honest-doctrine) (#518)
Lands the honest AgentOps 3.0 doctrine so the repo's narrative matches
the shipped code: the daemon is **deleted**, AgentOps is the
**in-session** agent operating loop + context compiler, and
out-of-session orchestration is delegated to a substrate (the reference
**Gas City City** or **Olympus**).

## What landed

- **`docs/3.0.md`** (north star, rewritten): in-session-only identity;
honest GC reference-City section — dispatch is **mayor-driven** today,
order-auto-dispatch is a labeled **GC-upstream maturity gap**
(`soc-5jwah`), not turnkey; two reference implementations table
(AgentOps-on-GC has **no** daemon; Olympus **kept** its daemon because
it is a sovereign product); e2e-proof evidence cited.
- **`docs/architecture/canonical-loop-model.md`** (new): one loop body,
two drivers, one inner tick, one config. Evolve (in-session,
AgentOps-shipped) vs Factory (out-of-session, substrate-owned);
crank/swarm placed as in-session steps.
- **`docs/adr/ADR-0009-daemon-deletion-in-session-only.md`** (new,
Accepted): the daemon-deletion decision — DELETE-not-deprecate rationale
(AgentOps has no core to protect; Olympus kept its daemon because it's
sovereign), the rejected *deprecate-keep-standalone* alternative, the
sovereignty tradeoff (always-on requires GC), the e2e GC dispatch gap.
References `soc-j7a5q`.
- **`skills/domain/references/`**: loop-family vocabulary (loop, evolve,
factory, rpi, autodev, context-compiler) as 6 entries + INDEX rows +
SKILL.md links.
- **README**: "Two ways to use it" reframed to **in-session vs
out-of-session**; deleted-command prose (`ao daemon` / `ao schedule` /
`ao overnight`) reframed to in-session + GC reference.
- **`packs/agentops`**: dispatch relabeled mayor-driven;
order-auto-dispatch GC-upstream gap (`soc-5jwah`) called out in
`bead-dispatch.toml`, `rpi-dispatch.toml`, and `FINALIZE-NOTES.md`. `gc
config show --validate` still exits 0.
- Reconciled stale `agentopsd` prose in `skills/scope` +
`skills/session-bootstrap`.

## Gates

- `heal.sh --strict`: clean
- doc-release gate: succeeded (link validation PASS, 0 broken)
- `gc config show --validate --city .`: exit 0
- markdownlint: 0 errors
- `generate-registry.sh --check`: up to date
- codex parity (domain): passed
- `go build ./...`: success

**Do not merge** — the operator reviews `docs/3.0.md` before tagging.

Closes-scenario: soc-j7a5q#3.0-honest-doctrine
Bounded-context: BC1-Corpus
Evidence: .agents/discovery/2026-05-24-gvkj6-e2e-proof.md
2026-05-24 17:31:06 -04:00
Bo e431339c40 feat(hookless)!: remove all hooks — skills + CLI only (soc-57b7f #remove-all-hooks) (#511)
## What

AgentOps 3.0 goes **fully hookless**. This removes the entire hook
product surface — the product is now skills + the `ao` CLI with **zero
hooks**. CI is the authoritative gate.

## Deleted

- `hooks/` — 46 hook scripts + `hooks.json` + examples (whole directory)
- `cli/embedded/hooks/` + embedded `hooks.json` +
`embedded/lib/hook-helpers.sh`
- `lib/hook-helpers.sh`
- `ao hooks` CLI command: `cli/cmd/ao/hooks.go`, `hooks_run.go` + 5 hook
test files; `cli/internal/bridge/hooks.go`;
`cli/internal/doctor/fix_hooks.go` + test
- Codex hook manifest (`hooks/codex-hooks.json`) + handler/audit scripts
(`scripts/audit-codex-hooks.sh`, `install-dev-hooks.sh`,
`test-hooks-output.sh`, `test-codex-hookless-lifecycle.sh`,
`test-hookless-rpi-phased.sh`)
- Hook lease surface: `docs/contracts/hook-lease-*`,
`schemas/hook-lease.v1.schema.json`,
`scripts/check-hook-lease-inventory.sh`,
`check-hook-port-replacements.sh`, `generate-hook-lease-inventory.py`
- Hook docs: `docs/HOOKS.md`, `cli/docs/HOOKS.md`,
`docs/architecture/hook-noise-audit.md`,
`docs/contracts/hook-runtime-contract.md`
- `tests/hooks/` (whole dir) + hook test scripts; 5 hook eval suites +
fixtures

## CI gates removed

`hook-preflight`, `validate-hooks-doc-parity`, `hook-output-schema-lint`
(+ scripts/bats), the hook eval suites, the `test-runtime-codex-smoke` /
`test-codex-native-install` / `test-codex-plugin-install` hook-handler
assertions, the cli-integration hook-lifecycle steps, the bats
`tests/hooks/*` glob + orphan-hooks audit, and the `--with-hooks`
install path. `embedded-sync` now validates only lib/skills. Both
summary `needs:` lists + the summary echo +
`docs/contracts/ci-jobs.yaml` updated; `validate-ci-policy-parity`
passes (66 rows). `.codex-plugin/plugin.json` drops the "Hooks"
capability.

## Load-bearing PRESERVED (reported, not forced)

- **`cli/cmd/ao/codex_runtime.go`** — the codex runtime *lifecycle
profile* (`HookCapable`/`HookConfigured` detection) is a
runtime-capability abstraction used by 6 `validate-codex-*` CI gates,
distinct from the hook product. Deleting it is a separate refactor.
- **`hooks-authoring` skill** + `schemas/hooks-manifest.v1.schema.json`
— reframed as an opt-in "author your own hooks" guide. Deleting the
skill cascades into catalog/domain-map/dispositions/context-map golden
files (skill-count sync), out of scope for the hook-product removal.
- **`scripts/pre-push-gate.sh`** — retired local gate (not in CI);
self-skips deleted hook scripts via `[[ -x ]]` guards; its 55 bats tests
still pass.
- Domain-enforcement audit keeps the `enforced`-mode schema for
backward-compatible JSON readers, but the hookless resolver only returns
`audited`/`unavailable`.

## Verification

`go build` / `go vet` clean; `go test ./...` = **11849 passed, 0
failed** (68 pkgs). gofmt clean on all touched files. Green: registry
`--check` (0 hooks), `regen-codex-hashes --check`,
`validate-ci-policy-parity`, `check-wiring-closure`,
`validate-embedded-sync`, `validate-manifests`, `validate-agents-split`,
`doc-release` (0 broken links), `generate-cli-reference --check`,
`heal.sh --strict`, codex/claude/plugin smoke tests, baseline-audit (0
stale). Diff: 231 files, +354 / −39803.

Closes-scenario: soc-57b7f#remove-all-hooks
Bounded-context: BC5-Runtime
Evidence: .github/workflows/validate.yml
2026-05-24 11:19:37 -04:00
Bo 3ac00e5337 docs(3.0): mark none-a-noise-injector met — 7 noise hooks deleted (soc-cul67 #hookless-docs) (#496)
## What

Flips the docs/3.0.md **"Hooks audited for noise"** acceptance box from
`[ ]` to `[x]`. The 7 noise-injector hooks were **deleted outright**
across `soc-e2ju0` S1–S3 (they were value-negative: A/B Δ=0) — not
flipped to opt-in. 46 hooks remain, all gates or bounded adapters, none
a noise-injector.

## Changes

- **docs/3.0.md** — acceptance box `[ ]` → `[x]`; note now states the 7
noise-injectors were deleted (S1–S3), 46 hooks remain. The "Every
AgentOps bead worked or closed" box intentionally left `[ ]`. The
doctrine "default install works with zero hooks" line and the S2–S5
follow-on note are untouched (S4 default-install is not done yet).
- **docs/architecture/hook-noise-audit.md** — summary reframed: original
53-hook audit (14 gate / 25 bounded-adapter / 14 noise) → current
46-hook reality (20 gate / 26 bounded-adapter / **0 noise**). The 14
"noise" entries split into 7 true noise-injectors (deleted) + 7
conditional injectors (reclassified as gates). Noise-injector table →
all 7 deleted with their stage; gates list 14→20 (`go-vet-post-edit`
removed — it was deleted, not a surviving gate); bounded-adapters 25→26;
resolution note replaces the pending follow-on.
- **docs/3.0-readiness.md** — hooks box `[ ]` → `[x]`; net 4/6 → 5/6
boxes met; W3 row and remaining-work refreshed.
- **docs/documentation-index.md** — audit one-liner refreshed (no longer
implies noise-injectors exist).
- **skills/hooks-authoring/SKILL.md** — added a hookless-first
guardrail: hooks are gates/bounded-adapters, never noise-injectors.
Codex artifact + manifest source_hash regenerated for this skill only.

## Gates (all green)

- `validate-hooks-doc-parity.sh` — PASS
- `validate-codex-generated-artifacts.sh` — PASS (was failing on the
SKILL.md edit; fixed via scoped hash regen)
- `check-codex-parity-drift.sh` — PASS; `audit-codex-parity.sh --skill
hooks-authoring` — PASS
- `markdownlint` on all 6 touched md — PASS
- `heal.sh --strict skills/hooks-authoring` — clean
- Deleted-hook grep on docs/3.0.md + docs/HOOKS.md — empty (only
historical mentions remain in the audit doc)

Closes-scenario: soc-cul67#hookless-docs
Bounded-context: BC1-Corpus
Evidence: docs/3.0.md
2026-05-23 21:58:39 -04:00
Bo eacf6415d3 docs(3.0): 3.0-readiness level-set + update acceptance boxes (soc-hplds #w4-levelset) (#481)
W4 (final wave) of the 3.0 reconciliation. Honest level-set against
docs/3.0.md after W0-W3.

- **docs/3.0-readiness.md (NEW)** — wave-by-wave outcomes, box-by-box
status, `ao goals measure` snapshot (**85.7%, 26/31**; both fails
non-blocking: 1 infra-flake, 1 warn-only), named remaining work.
- **docs/3.0.md** — acceptance boxes updated to true status: **4 of 6
met** (north-star-single-source, docs-match-reality, hexagon-complete,
loop-executable); 2 open with tracking beads (hooks-none-noise →
`soc-e2ju0`; every-bead → coherence/ledger beads remain).
- documentation-index.md cataloged.

The reconciliation met its mandate: **docs match reality, hexagon
complete, hooks audited.** The 2 open boxes have named beads, not
unknowns.

NOTE: claude-review infra-red (weekly limit, resets May 25) —
operator-authorized bypass when sole red.

Closes-scenario: soc-hplds#w4-levelset
Bounded-context: BC1-Corpus
Evidence: docs/3.0-readiness.md
2026-05-23 18:41:07 -04:00
Bo 4dd53dffa3 docs(3.0): canonical 3.0 north star + weave into sources of truth (soc-25sgs #3.0-north-star) (#468)
W0 of the 3.0 reconciliation (operator-ratified). Grounds the repo
before reconciliation work.

- **docs/3.0.md (NEW)** — single source of truth: the SDLC↔CDLC loop
(BDD/Gherkin planning → tests → bounded build through ports → both-ends
behavior+contract validation → feedback → ratchet), the
BDD/DDD/Hexagonal/TDD waist, context density, and a precise
hookless-first explanation (hooks = quiet adapters, not
noise-injectors). + 3.0-ready acceptance + non-goals.
- Woven into README, PRODUCT.md, GOALS.md, CLAUDE.md,
docs/documentation-index.md, mkdocs.yml nav.

Pure grounding: no code, no bead closes, no features. Links verified;
additions-only.

NOTE: claude-review infra-red (weekly limit, resets May 25) —
operator-authorized bypass when sole red.

Closes-scenario: soc-25sgs#3.0-north-star
Bounded-context: BC1-Corpus
Evidence: docs/3.0.md
2026-05-23 09:27:56 -04:00