Commit Graph

45 Commits

Author SHA1 Message Date
Bo 8458989215 docs(architecture): add integrator (merge-execution) to agentpod function enum (ag-egpu) (#802)
## What
Adds **integrator** to agentpod-spec.v1's function enum {planner,
generator, oracle, scribe}. It is **merge-execution**: takes
Oracle-passed green PRs and integrates them to main
(rebase/update-branch, CI-shepherd, serialize, keep-trunk-green,
revert-on-red) — distinct from the Oracle (*decides* to merge) and the
Orchestrator (*schedules* pods). Maps to RoleWorker; cannot fold into
Oracle (RoleVerifier never-edits) or Orchestrator (control-plane
injection boundary).

## Decided by quorum
2-of-3 cross-model, 2026-06-06 (derivation: msg #160; the gap surfaced
when a human-driven refiner drained ~36 PRs this session and it was
clearly a distinct full-time role):
- **Codex: REVISE→add, mechanics-only** · **agy: APPROVE** · **Claude:
author-recused.**

Two quorum-mandated guardrails encoded in the doc:
1. **Mechanics-only** (Codex): semantic conflict-resolution that changes
code re-enters the Generator/Oracle gate — integrator is never a
privileged post-verdict author path.
2. **Circuit-breaker** (agy): bound merge/revert + rebase loops (max
retries, halt-on-thrash) so a misbehaving integrator can't thrash trunk
/ burn CI.

Docs-only (RBAC stays roles.go; no schemas/ change, consistent with #766
PROPOSAL scope). Spine-role implication (the-agent-factory.md gains an
Integrator role) flagged for the spine owner.

Bounded-context: BC4-Factory
Evidence: docs/architecture/agentpod-swarmjob-schema.proposal.md
2026-06-06 12:53:09 -04:00
Bo b84dcf3ca2 docs(hookless): close cold-start orientation drift (soc-qh2g1 #cold-start-orientation-coherence) (#795)
## Summary

Close the hookless cold-start orientation gap for `soc-qh2g1` by making
the live startup docs and skills point at explicit `ao session
bootstrap` plus pulled context (`ao inject` / `ao lookup`) instead of
hidden SessionStart behavior.

## Changes

- Reframes live docs that still implied automatic startup/handoff
injection to the hookless explicit-command path.
- Updates source and Codex skill mirrors for `quickstart`, `inject`,
`using-agentops`, `recover`, `bug-hunt`, and `session-bootstrap`.
- Expands the cold-start and docs drift gates so `SessionStart hook`,
`startup hooks`, and `auto-inject ... hook` promises fail unless
explicitly hedged as opt-in, removed, or historical.
- Refreshes scoped Codex skill hashes for the touched mirrors.

## Test plan

- [x] `bash scripts/check-hookless-cold-start.sh`
- [x] `bash scripts/check-doc-hooks-drift.sh`
- [x] `bats tests/scripts/check-hookless-cold-start.bats
tests/scripts/check-doc-hooks-drift.bats`
- [x] `shellcheck scripts/check-hookless-cold-start.sh
scripts/check-doc-hooks-drift.sh`
- [x] `bash scripts/regen-codex-hashes.sh --check --only
session-bootstrap,quickstart,inject,using-agentops,recover,bug-hunt`
- [x] `bash scripts/validate-codex-generated-artifacts.sh`
- [x] `bash scripts/validate-codex-lifecycle-guards.sh`
- [x] `bash scripts/validate-agents-split.sh`
- [x] `git diff --check`
- [x] `bash scripts/validate-skill-runtime-parity.sh`
- [x] `bash scripts/lint-codex-native.sh`

Closes-scenario: soc-qh2g1#cold-start-orientation-coherence
Bounded-context: BC1-Corpus
Evidence: scripts/check-hookless-cold-start.sh
2026-06-06 11:23:56 -04:00
Bo cb8161c806 feat(ratchet): enforce R3 'no learning without a constraint' as a script gate (ag-maaa #r3-constraint-gate) (#768)
## What

Makes the Brownian-Ratchet rule **R3 — "no learning without a
constraint"** self-enforcing. Previously it was prose only
(`docs/architecture/operating-loop.md` promotion table: *"Must never
regress → add a validation gate"*): a learning could be promoted to a
durable maturity tier without ever compiling into a gate/test/rule. The
mechanism existed (`cli/internal/ratchet/`) but R3 was a manual operator
decision with no check.

## How

`scripts/check-ratchet-r3-constraint.sh` scans the learnings corpus and
flags any **durable-tier** learning
(`candidate`/`established`/`canonical`/`stable`/`promoted`) that cites
**no constraint** — a `scripts/`/`.github/workflows/` gate, a
`_test.go`/`tests/` reference, a `skills/**/SKILL.md` step, or a
`constraint:`/`enforced_by:` frontmatter field. Provisional learnings
are exempt (still forming).

- **Warn-first → blocking**, mirroring the ratchet's own warn-then-fail
ladder: warn-only by default (exit 0); `--strict` or
`RATCHET_R3_BLOCKING=true` makes the same gaps blocking (exit 1).

## Why a script, not a CI path-filter gate

`.agents/learnings/**` is **gitignored** (0 tracked). A CI path-filter
gate on it would be dead-by-design — the exact reason the
`learning-coherence` CI job was retired (2026-05-19). So R3 runs at
ratchet/flywheel time against the **live local corpus**; the script's
own correctness is gated in CI by the committed bats test
(`tests/scripts/*.bats` runs in `validate.yml`).

## Verification

- `tests/scripts/check-ratchet-r3-constraint.bats` — 11 hermetic tests
on a synthetic fixture (warn-first, --strict, env-var parity,
provisional exemption, empty-field rejection, gate/test/SKILL citation
forms, count accuracy). All pass.
- `shellcheck` clean.
- Dry-run against the real local corpus: 639 scanned, 7 durable-tier, 5
flagged — warn-only, exit 0 (honest; does not break on existing corpus).

Closes-scenario: ag-maaa#r3-constraint-gate
Bounded-context: BC1-Corpus
Evidence: tests/scripts/check-ratchet-r3-constraint.bats
2026-06-06 10:17:12 -04:00
Bo c0dc6cbd52 docs(architecture): AgentPod/SwarmJob/watch-event schema PROPOSAL (ag-egpu.1 #factory-api-schema) (#766)
## What

New doc `docs/architecture/agentpod-swarmjob-schema.proposal.md` — the
**schema-level design** for one-way-door #2 (`ag-egpu.1`). It
operationalizes the two deltas the architecture spine
`docs/architecture/the-agent-factory.md` (`ag-yv25`, cross-model
reviewed 2026-06-05) names for door #2: (a) AgentPod-spec +
SwarmJob-spec on the bead, (b) watch/event surface.

**PROPOSAL only** — no schema in `schemas/` changes, no migration. The
doc is the artifact the council ratifies before `ag-v1xk` / `ag-xanm` /
`ag-7dnb` code against the API.

## Supersedes PR #765

My first attempt (#765) branched ~80 commits behind and added a
competing `the-agent-factory.md`, colliding with the canonical spine
that already landed on main. This PR is re-homed to a non-colliding
path, **defers to the spine** for architecture, and aligns to its
vocabulary (AgentPod / SwarmJob / Oracle / anti-affine / Volume-tier).
Closing #765 in favor of this.

## Design (additive, reuses not forks)

- **agentpod-spec.v1** = `worker-spec.v1` (already a Pod template) **+**
`function` (Planner/Generator/Oracle/Scribe — product layer, not RBAC
churn) + `anti_affinity.model_family` (the membrane as a scheduling
constraint) + `volume_tier`.
- **swarm-job.v1** = typed Pod composition on a bead + a **cost-law
derivation rule** (reversible bead → 1 Generator + 1 Oracle pre-check;
one-way-door bead → ≥2 anti-affine Oracles = real quorum). Makes the ≤12
cap a schema field.
- **`bead.*` events** = additive enum on `watch-event.v1`
(`additionalProperties:true`, non-breaking) so the reconcile controller
watches bead state instead of polling `bd ready`.

## Decisions for council (in-doc)

1. AgentPod/SwarmJob binding: bead **metadata projection** (rec,
reversible) vs. first-class `bead.v1` field.
2. SwarmJob **beside** (rec) vs. merged with
`swarm-evidence`/`orchestration-result` (input vs. output contracts).
3. `bead.*` emitter: **`bd` write-path** (rec, crash-safe) vs. `ao` Dolt
tail.
4. `function` is product-layer only; `roles.go` RBAC unchanged.

## Evidence

- New doc: `docs/architecture/agentpod-swarmjob-schema.proposal.md` (158
lines, PROPOSAL-stamped).
- Reconciles:
`schemas/{worker-spec.v1,watch-event.v1,bead.v1,quest.v1,remote-compute-target}.schema.json`.

Advances ag-egpu.1; does **not** close it (closes on council
ratification — gated). Do not auto-merge.

Bounded-context: BC5-Runtime
Evidence: docs/architecture/agentpod-swarmjob-schema.proposal.md
2026-06-06 10:17:08 -04:00
Bo efc2609682 docs(architecture): formalize the L0-L4 autonomy ladder (ag-wrom #autonomy-ladder) (#787)
## 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`.
2026-06-06 12:18:20 +00:00
Bo c639d2a52e docs(architecture): canonize the agent-factory spine + membrane-first North Stars (ag-yv25 #canonize-spine) (#758)
## What

Canonizes the **agent-factory architecture spine** — the foundational
document that guides the build. AgentOps as a Kubernetes-style control
plane for the first *stochastic, untrusted* workload (AI agents).

- **`docs/architecture/the-agent-factory.md`** — thesis, control/data
plane, the **AgentPod / SwarmJob / Volume** compute model, **Roles ×
Primitives** (RBAC × canon function × primitive — naming the
verification role the **Oracle**), the **one-way / two-way door
register**, the **cost law** (tokens follow reversibility), the honest
boundaries, and the dependency-ordered build sequence.
- **`docs/architecture/the-agent-factory.feature`** — the architecture
fitness functions (`@enforced` vs `@to-build`).
- **`GOALS.md`** — North Stars now lead with the **verification
membrane**; the knowledge flywheel demoted to the compounding layer
beneath it.

## Why this is wave 1 of `ag-yv25`

This is the **canonize** wave. Fitness gates (wave 2) and the keystone
wiring (wave 3) remain open under the epic. The build proceeds
foundation-up: `ag-o2tc` (HA store) → `ag-egpu` (workload-object API) →
`ag-v1xk` (reconcile controller) → scheduler / self-healing.

## Review provenance (dogfood)

Reviewed *through the membrane* across **three cross-model council
passes** (Opus 4.8 + gpt-5.5): the architecture verdict, the Pod-model
debate (converged on AgentPod), and the final whole-spine pass — **both
vendors endorse**. Verified against the kernel (`liveness.Disjoint`,
`quorum.CheckSignificantAction`, the `roleCapabilities` matrix). Per
`liveness.SignificantActionDocCanonization`, canonizing this doc is
itself a membrane-gated action.

Closes-scenario: ag-yv25#canonize-spine
Bounded-context: BC5-Runtime
Evidence: .agents/council/2026-06-05-verdict-the-agent-factory.md,
.agents/council/2026-06-05-debate-pod-model.md,
.agents/council/2026-06-05-verdict-final-spine.md
2026-06-05 17:12:52 -04: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 b6691ddab1 docs: fix docs asserting Gas City is the reference -> NTM+MCP+managed-agents (ag-r6g1 #docs-slice-2) (#689)
## What

Fixes the **post-mortem WARN caveat** from the #684–#687 session: 5 docs
still **asserted "Gas City is the reference"** — a now-FALSE claim
contradicting the north star ([`docs/3.0.md`](docs/3.0.md): substrate =
**NTM + MCP + managed-agents**). Re-narrates all 11 refs (**ag-r6g1**,
docs slice #2).

## Surfaces (5 files, +21 −20)

- `docs/how-it-works.md` (2) — out-of-session delegation +
Dream-unattended para (de-GC'd the mayor/refinery/cron-`exec`-Order
mechanics → NTM swarm / managed-agent driver).
- `docs/software-factory.md` (2) — prose + Surface Map row.
- `docs/first-value-path.md` (4) — step 6, fast-path table row, the
substrate block (mayor/refinery/Orders/`city.toml` → the
NTM+MCP+managed-agents trio), artifacts row.
- `docs/architecture/ports-and-adapters.md` (1) — autonomous-loops
delegation.
- `docs/workflows/session-lifecycle.md` (2) — substrate prose + table
row.

Kept the correct "AgentOps ships no daemon/scheduler; delegates to a
substrate" framing intact.

## Scope

**ag-r6g1 stays OPEN** — operator runbooks (`nightly-evolution`,
`autonomy-runtime-cycle-1`, deeper GC-specific mechanics) + descriptive
comparison/example/explainer mentions remain for a later slice.

## Verification

- markdownlint 0 errors · `regen-all.sh --check` ALL GREEN (docs-only;
no derived-surface drift).

Closes-scenario: ag-r6g1#docs-slice-2
Bounded-context: BC1-Corpus
Evidence: docs/how-it-works.md
2026-06-02 16:06:22 -04: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 f4a91f97a6 docs(fungibility): AgentOps 3.0 Fungibility Charter — 6 commitments (soc-vuu6.29 #fungibility-charter) (#644)
Codifies the AgentOps 3.0 fungibility doctrine — implicit in the
primitives but contradicted by 2.x surfaces — into a single charter at
`docs/architecture/fungibility-charter.md`.

## The six commitments
1. **Default RPI mode is single-model** — the session's model runs every
phase; multi-model is opt-in.
2. **Any agent can claim any bead** — no role gating; `bd
ready`/`--claim` already enforce this.
3. **Stateless agent assumption** — agents are interchangeable consumers
of the `.agents/` corpus; no agent owns a domain or carries
irreplaceable state.
4. **Universal init prompt is standard** — every spawn runs `ao session
bootstrap` (shipped, vuu6.25).
5. **Death is normal; recovery is automatic** — `ao beads stale-claims`
+ `ao beads resume` (shipped) make dead-agent recovery operational.
6. **Specialization is opt-in** —
`--mixed`/`--pool=N`/`--diverse`/`--codex` exist but are never the
default.

Each commitment names the shipped primitive that implements it, so the
doctrine is honest (the risk-gate from the bead: do not land doctrine
ahead of primitives — vuu6.25 closed, the stale-claims primitive lives
in `cli/cmd/ao/beads_stale.go`/`beads_resume.go` on main).

## Cross-references / discoverability
- `docs/architecture/operating-loop.md` — See also (acceptance: charter
referenced from the spine)
- `docs/architecture/index.md` — card
- `docs/documentation-index.md` — catalogue line
- `mkdocs.yml` — added to nav under Architecture

Docs-only, no code, scope-only diff (5 files, +105 / -0).
README/PRODUCT.md positioning rewrite is out of scope here (separate
slice soc-vuu6.30 + the CI citation gate); this PR lands the charter
artifact itself.

Closes-scenario: soc-vuu6.29#fungibility-charter
Bounded-context: BC5-Runtime
Evidence: docs/architecture/fungibility-charter.md
2026-05-31 12:46:48 -04:00
Bo 9e9caccb49 docs(architecture): GC is an adapter behind AgentOps ports (soc-7blko #gc-posture) (#574)
## Summary

Adds the canonical **GC posture / boundary doc** — the page a one-liner
like "Gas City is the reference substrate" points at.

- `docs/architecture/gc-posture.md` (new): states GC is **one opt-in,
swappable adapter behind AgentOps's ports** (not the runtime AgentOps
runs inside); the hexagon points the right way — AgentOps core owns the
ports, GC satisfies the out-of-session Factory-driver role.
- **Guardrail (hard limit):** never register AgentOps state (corpus,
bd/Dolt, ratchet) as a **GC-managed-city resource**; rationale = the
Olympus ~**1,478**-flap incident (attributed as the stated Olympus
rationale, not an AgentOps-measured in-repo metric).
- **Sovereignty:** GC is local/self-hostable; AgentOps-on-GC preserves
**"no cloud required."**
- Registered in `docs/documentation-index.md` and the
`docs/architecture/index.md` grid. Built as a non-nav architecture page
like its siblings `canonical-loop-model.md` / `operating-loop.md`
(mkdocs `--strict` green).

## Scope

Docs-only, single coherent arc (`docs/**` + `tests/**`). No `cli/**`, no
skill changes, no release edits. Single squash-revert rollback.

## Test plan

- [x] `bats tests/scripts/test-gc-posture-doc.bats` — written first
(failed for the right reason: doc absent), now green (6/6). Asserts
adapter-behind-ports, opt-in + swappable, the managed-city guardrail +
`1,478`, the `no cloud required` + self-hostable/local sovereignty line,
and the documentation-index link.
- [x] `mkdocs build --strict` — passed.
- [x] `ao autodev validate --file ../PROGRAM.md --json` — `valid: true`.

Closes-scenario: soc-7blko#gc-posture
Bounded-context: BC2-doctrine
Evidence: tests/scripts/test-gc-posture-doc.bats
2026-05-28 07:42:45 -04:00
Bo b39feb843d docs(corpus): cold-start orientation coherence after hook removal (soc-qh2g1 #hookless-cold-start) (#566)
## Summary

Hookless AgentOps 3.0 ships no SessionStart/Stop hooks, but several
cold-start surfaces still named hook scripts as live context-injectors —
misleading a fresh agent into expecting auto-injection. This is a pure
doc/skill reconciliation pass (BC1 Corpus); **no command logic
changed**.

- **Scenario 1 (orientation reachable without a hook):** `CLAUDE.md` +
`AGENTS.md` Zero-Context startup now name the explicit orientation
command — `ao session bootstrap` → `ao inject` / `ao corpus inject
--query "<topic>"`. `AGENTS.md` drops the stale "when soc-vuu6.25 lands
/ until then" hedge: bootstrap shipped in PR #390 (soc-vuu6.25 is
closed).
- **Scenario 2 (no doc/skill promises hook-provided context):**
`docs/architecture/primitive-chains.md` Chain 6,
`skills/session-bootstrap/SKILL.md` (+ codex twin), and
`docs/newcomer-guide.md` no longer present hook scripts as active
surfaces; remaining hook mentions are reframed opt-in (author via the
`hooks-authoring` skill). New `scripts/check-hookless-cold-start.sh` +
bats lock the regression.
- **Scenario 3 (each removed hook accounted for):** a disposition table
in `primitive-chains.md` maps each removed hook *behavior* (context
injection, end-of-session curation, standards surfacing, validation
reminders) → an explicit replacement or "confirmed noise".

## Design notes

- The new gate rides the existing `bats tests/scripts/*.bats` CI lane
(no new `validate.yml` job, per plan). It scans a **fixed** list of
cold-start surfaces and flags any `hooks/<name>.sh` path presented
without an opt-in/historical hedge — deliberately *not* a broad
`docs/`+`skills/` grep (release notes / `hooks-authoring` / scope guards
legitimately name hook paths).
- `CLAUDE.md` is **hand-maintained**: `build-claude.py` is vestigial
(its `--check` reports STALE on clean `main` and it's absent from CI),
so `CLAUDE.md` was edited directly rather than regenerated — running the
generator would have clobbered it.
- Scenario-3's disposition was folded into the `primitive-chains.md`
Chain 6 reframe rather than a new doc (co-located, no catalogue-gate or
mkdocs-nav churn).
- Scope held tight: broader hook-taxonomy drift in `primitive-chains.md`
(Terminology Ledger / Audit Snapshot "7 hook event sections") and the
out-of-scope `CLAUDE.md:145` `session-pr-counter.sh`
(workflow-discipline, soc-waxr) are left for follow-up beads.

## Test plan

- [x] `bash scripts/check-hookless-cold-start.sh` → PASS (5 surfaces)
- [x] `bats tests/scripts/check-hookless-cold-start.bats` → 5/5
- [x] `shellcheck scripts/check-hookless-cold-start.sh` → clean
- [x] `bash scripts/audit-codex-parity.sh --skill session-bootstrap` →
passed
- [x] `bash skills/heal-skill/scripts/heal.sh --strict` → clean
- [x] `cd cli && make sync-hooks` → no embedded drift
- [x] `bash scripts/validate-agents-split.sh` → PASS (99 lines)
- [x] `markdownlint --config .markdownlint.json` on changed files →
clean
- [x] No Go changes (build/test unaffected)

Closes-scenario: soc-qh2g1#hookless-cold-start
Bounded-context: BC1-Corpus
Evidence: bash scripts/check-hookless-cold-start.sh; bats
tests/scripts/check-hookless-cold-start.bats
2026-05-28 02:39:04 -04:00
Bo 39bad7d2f3 docs(3.0): ag-p7j W2 — reframe core narrative docs to in-session (ag-p7j) (#527)
## What

Worker 2 of the ag-p7j 3-way swarm reconciling stale daemon/scheduler
references for AgentOps 3.0. Reframes stale `ao daemon` / `agentopsd` /
`ao schedule` / `ao overnight` prose across 7 core narrative docs to the
**in-session model**: the loop runs in session (the product +
sovereignty floor); always-on / scheduled / unattended execution is
delegated to an orchestration substrate (Gas City is the reference
City), not an AgentOps surface. Those daemon/scheduler/overnight-runner
surfaces were deleted in the 3.0 rearchitecture (ADR-0009). Mirrors
`docs/3.0.md`.

## Files (7, prose only)

- `docs/software-factory.md` — Runtime Variants daemon-submit lane →
in-session `ao rpi phased`; Surface Map drops `ao daemon submit`, adds
an out-of-session (substrate) row; "both paths" note now in-session +
Gas City delegation.
- `docs/cdlc.md` — SDLC→CDLC table: "Software factory daemon (`ao
daemon`)" → in-session loop run on a substrate (Gas City reference).
- `docs/how-it-works.md` — Dream split intro + "Dream — Private
Overnight Operator Mode" section reframed from `ao overnight` to
in-session `/dream` + CLI primitives; unattended = Gas City substrate.
- `docs/philosophy.md` — `/dream and ao overnight` → `/dream` in
session, out-of-session compounding on Gas City.
- `docs/first-value-path.md` — intro item 6, Time-Budget row, Step 7
"Optional Scheduled Lane" (`ao daemon run` / `ao schedule`) → "Optional
Out-of-Session Lane" (Gas City mayor/refinery); First-Artifacts and
Friction rows updated.
- `docs/workflows/session-lifecycle.md` — Option 3 "Bedtime Dream Run"
(`ao overnight setup/start/report`) → "Dream Compounding Run" (`/dream`
foreground); runtime-modes table row updated.
- `docs/architecture/ports-and-adapters.md` — Autonomous-loops adapter
bullet: `agentopsd daemon scheduler` removed; `/dream`,`/evolve` framed
as in-session driving adapters with out-of-session delegated to the
substrate.

No links to deleted daemon contracts existed in these files (verified).
No edits outside the 7.

## Gates

- `grep -E "ao daemon |agentopsd|ao schedule"` across the 7 files:
**CLEAN** (also clean for `ao overnight`/`ao plans`/`ao
watch`/`schedule.yaml`/`--with-schedule`).
- `markdownlint` on the 7 files: **PASS** (exit 0).
- `mkdocs build --strict`: **PASS** (exit 0; only the generic Material
upgrade banner, no link warnings/errors).
- doc-release gate (`tests/docs/validate-doc-release.sh`): **PASS**.
- learning-references check: **PASS**.

Diff stat: 7 files, +65/-72 — balanced, no collateral data loss.

Closes-scenario: ag-p7j#w2-core-docs
Bounded-context: BC1-Corpus
Evidence: docs/software-factory.md
2026-05-24 21:15:43 -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 211f04cfbe chore(hooks): delete commit-review-gate — hookless S3 (soc-vpmzg #rm-commit-review-gate) (#494)
## Summary

Deletes `commit-review-gate` — a value-negative noise-injector. Despite
its name it never blocked: it always exited 0 and injected the staged
diff + a "SELF-REVIEW" prompt on every `git commit` (A/B showed Δ=0).
Hookless S3 of the go-hookless epic (`soc-e2ju0`).

The "+7 conditional injectors" the original audit grouped with it were
reclassified as kept-gates (they speak only on a real violation) — **out
of scope, not deleted**. S3 removes only `commit-review-gate`.

## Changes

- **Hook scripts:** `git rm` of `hooks/commit-review-gate.sh` +
`cli/embedded/hooks/commit-review-gate.sh`
- **Go runtime:** removed `runCommitReviewHook` managed-backend + its
exclusive helpers (`gitOutput`, `countDiffFiles`, `hookCountLines`,
`firstLines`, `redactSensitiveDiff` + credential regexes) and the
now-dead `TestHooksRunRedactsSensitiveDiff` test
- **Manifests:** pruned from `hooks/hooks.json`,
`hooks/codex-hooks.json`, `registry.json`,
`hook-lease-classification.v1.json` (lease-inventory regenerated)
- **Codex handler count 15 → 14:** assertions in
`test-runtime-codex-smoke.sh` + `test-codex-native-install.sh`, plus
require-handler arrays in `install-codex-plugin.sh` /
`install-codex.ps1` / `test-codex-native-install.sh` /
`audit-codex-hooks.sh`
- **Test blocks:** removed commit-review @test blocks from
`test-hooks.bats`/`.sh`, `hook-output-schema.bats`,
`hook-stdin-contracts.bats`, the eval fixture, and
manifest-runtime-contracts
- **Docs:** `HOOKS.md`, `software-factory.md`, `how-it-works.md`,
`update-principles.md`, `SDK-INVENTORY.md`; `hook-noise-audit.md`
records the S3 deletion (46 hooks remaining)
- **Drive-by:** fixed pre-existing stale `length == 20` assertions in
`test-audit-codex-hooks.sh` (codex bundle is 14 post-delete; this test
is not CI-gated and was already failing on main)

## Verification (all green)

`check-hook-lease-inventory` · `validate-hooks-doc-parity` ·
`check-hook-port-replacements` · `validate-hook-preflight` ·
`generate-registry --check` · `smoke-test` · `test-runtime-codex-smoke`
(33/0) · `bats tests/hooks/*.bats tests/scripts/pre-push-gate.bats`
(297/0) · `test-agentops-contract-canaries` (failures=0, incl
pre-push-gate-governance + runtime-smoke-matrix) ·
`test-codex-native-install` · `test-audit-codex-hooks` (4/4) · `go
build/vet/test ./cmd/ao/`

Diff stat: 30 files, +26 / −569 (deletion-heavy, as expected).

Closes-scenario: soc-vpmzg#rm-commit-review-gate
Bounded-context: BC5-Runtime
Evidence: docs/contracts/hook-lease-inventory.md
2026-05-23 21:43:03 -04:00
Bo 29e0acc26e chore(hooks): delete standards-injector + retire its CI gate — hookless S2 (soc-khev6 #rm-standards-injector) (#488)
## What

Hookless epic S2 (`soc-khev6`): delete the `standards-injector`
PreToolUse hook and **fully retire** its dedicated CI gate.

`standards-injector` is a value-negative noise-injector — it injects
language standards on every Edit/Write regardless of relevance (A/B Δ=0,
per `docs/architecture/hook-noise-audit.md`). The replacement is the
`standards` skill, read on demand: a PRODUCT surface, not hook magic.

## Teardown (all of it)

- **Hook + tests:** `git rm hooks/standards-injector.sh`, its embedded
copy, and `tests/hooks/standards-injector.bats`.
- **Manifests:** pruned the Edit + Write entries from `hooks/hooks.json`
and `hooks/codex-hooks.json`, dropping the now-empty matcher groups.
**Codex native handlers 17 → 15** (two entries removed, not one — Edit
retains `codex-parity-warn.sh`, Write group dropped).
- **CI gate retired:** removed the `standards-injector-completeness` job
from `validate.yml` + both `needs:` lists
(`validate-pr-evidence-claims`, `summary`) + the summary echo; `git rm`
the check script + its bats; removed from `ci-jobs.yaml` manifest and
regenerated `AGENTS-CI.md`; removed from `pre-push-gate.sh` + its bats
stub.
- **Codex test assertions (the S1 bite):** `test-runtime-codex-smoke.sh`
and `test-codex-native-install.sh` length `17 → 15`; removed
`standards-injector.sh` from the require-handlers array.
- **Shared iterators:** pruned the `@test`/section blocks from
`test-hooks.bats`, `hook-output-schema.bats`,
`hook-stdin-contracts.bats`, `test-hook-chain.sh`,
`test-hook-lifecycle.sh`, `test-hooks.sh`, and the eval fixture
`hook-context-value-smoke.sh`.
- **Other surfaces:** `validate-hook-preflight.sh`,
`install-codex-plugin.sh`, `install-codex.ps1` owned-script lists;
`hooks_test.go` (swapped synthetic name to a live hook);
`context_compiler.go` port doc comment.
- **Regen:** hook-lease classification + inventory, registry, embedded
sync.
- **Docs:** `HOOKS.md`, `hook-noise-audit.md` (records S2 deletion),
`ENV-VARS.md` (`AGENTOPS_STANDARDS_*` vars), `LOOP-BUDGET.md`,
`cli-skills-map.md`, `software-factory.md`, `SDK-INVENTORY.md`.

## Verify (all green locally)

`check-hook-lease-inventory`, `validate-hooks-doc-parity`,
`check-hook-port-replacements`, `validate-hook-preflight`,
`generate-registry --check`, `validate-ci-policy-parity`,
`tests/smoke-test.sh` (codex smoke + native install),
`test-runtime-codex-smoke.sh`, the 3 bats hook suites, `go
build/vet/test`. `grep standards-injector validate.yml
ci-local-release.sh` → empty.

Diff stat: 39 files, +32 / -1045 (deletion-heavy, as expected for a
teardown).

Closes-scenario: soc-khev6#rm-standards-injector
Bounded-context: BC5-Runtime
Evidence: docs/contracts/hook-lease-inventory.md
2026-05-23 20:54:24 -04:00
Bo ab1329137d docs(architecture): hexagon port-realness audit (soc-upwor #port-audit) (#485)
## What

Empirical ground-truth inventory of the AgentOps runtime hexagonal seam
(`cli/internal/ports` + adapters), taken 2026-05-23 against `main`.
Read-only analysis bead — adds one doc + one catalog line, NO code
changes.

Grounds the adapter backlog for epic **soc-zvhsl** so the
adapter-building beads (soc-rg5z0 WorkspacePort, soc-ebgjk TrackerPort,
soc-21mrg loop-state, soc-vzyhn corpus) execute against a precise plan.
Every claim cites a real `file:line`.

## Headline counts

- **26** declared port interfaces
- **18** have a real (non-in-memory) adapter
- **8** have no conforming adapter (in-memory-only or
signature-mismatched)
- **git: 35** direct `exec.Command("git", ...)` callsites; **bd: 10** —
reached without a port

## Key corrections to the prior survey

- The epic survey's "21 ports, only `storage_fs` is real" is **stale**:
26 interfaces, 18 real adapters (16 `production*` in `cmd/ao` from
compile-cycles 112/113, plus 3 in `cli/internal/wiki/`, plus
`storage_fs`).
- Required-7 (`check-hook-port-replacements.sh`): **3 real**
(EventBus/GateRunner/Harness), **4 in-memory-only**
(Closeout/ContextCompiler/SafetyPolicy/Workspace).
- `.agentops/loop-state.json` (cited in soc-21mrg) **does not exist** —
the real loop-state gap is the *frozen* RPI supervisor lane
(`rpi_loop_supervisor.go:1007-1139`); the evolve lane is already behind
the port.
- Corpus adapters are real but the **flywheel core**
(compile/mine/grow/defrag) bypasses them.

## Recommended adapter build order

1. WorkspacePort → `workspace_git` (soc-rg5z0, P1) — 35 git callsites,
port not even constructed
2. IssueTracker → bd adapter (soc-ebgjk, P1) — zero impls today; widen
to read paths
3. Corpus reader/writer adoption in flywheel core (soc-vzyhn, P2) —
migration not greenfield
4. Loop-state atomic adapter for the *live* lane (soc-21mrg, P2) —
resolve lane question first

Closes-scenario: soc-upwor#port-audit
Bounded-context: BC5-Runtime
Evidence: docs/architecture/hexagon-port-realness-audit.md
2026-05-23 20:05:18 -04:00
Bo 09b4a95cb0 chore(hooks): delete 5 noise-injector hooks — hookless S1 (soc-s1i3b #rm-noise-hooks) (#483)
**GO HOOKLESS** epic `soc-e2ju0`, slice 1. Delete the 5
lowest-entanglement value-negative noise-injectors (A/B Δ=0). The
workflow is carried by the **product** (skills + `ao` CLI), not these
hooks.

Deleted (**53→48 hooks**): research-loop-detector, context-monitor,
write-time-quality, edit-knowledge-surface, go-vet-post-edit (all
pure-noise, 0 blocks, no dedicated CI gate).

Governed teardown per hook: rm .sh + .bats; prune hooks.json +
codex-hooks.json; remove hook-lease-classification entry (37→32) + regen
hook-lease-inventory.md; remove per-hook @test blocks from shared
iterators (heredoc-aware, bats re-run green); sync-hooks + regen
registry (44→38); update HOOKS.md + hook-noise-audit.md. Replacement =
product surfaces (skills + ao inject/lookup); go vet stays CI's job
(factory, not product).

Gates: check-hook-lease-inventory ✓, check-hook-port-replacements ✓,
validate-hooks-doc-parity ✓, validate-hook-preflight ✓, registry --check
✓, go build ✓, bats 81/15/78 green. Deletion-heavy diff = intentional
removal.

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

Closes-scenario: soc-s1i3b#rm-noise-hooks
Bounded-context: BC5-Runtime
Evidence: docs/contracts/hook-lease-inventory.md
2026-05-23 19:55:07 -04:00
Bo 2a9ee50bae fix(docs): codex-hookless-lifecycle — Codex CLI has native hooks (soc-isewi #codex-cli-has-hooks) (#482)
Docs-match-reality fix (same bug class as the W1 reconciliation). The
doc implied Codex is hookless *because it lacks a hook surface* —
contradicting its own top Note ("Codex supports native hooks"),
docs/HOOKS.md (Codex CLI 0.115.0+ native hooks; 0.128.0 same PreToolUse
schema as Claude), and hooks/codex-hooks.json (wires the same scripts
under `--with-hooks`).

- **Intro:** Codex CLI (0.115.0+) *does* expose native hooks; AgentOps
installs hookless **by default for portability**; the Codex **Desktop**
app has no `~/.codex` hook surface. Lifecycle path works hooks-or-not.
- **Runtime Modes table:** hook-capable row includes Codex CLI 0.115.0+
`--with-hooks`; fallback detection reframed to "no native-hook profile
installed (Desktop, or CLI installed hookless)".

Now consistent with the top Note + HOOKS.md. Surfaced when this doc
caused a wrong answer about Codex hook capability.

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

Closes-scenario: soc-isewi#codex-cli-has-hooks
Bounded-context: BC5-Runtime
Evidence: docs/architecture/codex-hookless-lifecycle.md
2026-05-23 18:51:58 -04:00
Bo 5b4bad166a docs(architecture): hook-noise audit — classify all 53 hooks vs the 3.0 no-noise criterion (soc-6zihw #hook-noise-audit) (#480)
W3 of the 3.0 reconciliation. Classifies every hook against
docs/3.0.md's *'hooks must not inject random noise'* criterion.

**docs/architecture/hook-noise-audit.md (NEW):** 53 hooks → **14 GATE ·
25 BOUNDED-ADAPTER · 14 NOISE-INJECTOR**. 39/53 (74%) already meet the
3.0 criterion.

**Key finding:** the 14 noise-injectors push `additionalContext` into
the prompt on every matching event regardless of relevance
(standards-injector; commit-review-gate — misnamed, never blocks;
edit-knowledge-surface; research/context nudges; …). All already honor
per-hook disable flags but are on-by-default. Top-4 verdicts verified
directly (grep: no deny/exit-2 + unconditional additionalContext), not
just from the audit swarm.

**Scope:** this PR is the **audit** (analysis). The behavior change —
flipping the 14 to opt-in-default so the default experience is quiet —
is **soc-e2ju0** (operator-confirmed audit-only here). W4 marks the
docs/3.0.md acceptance box accordingly.

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

Closes-scenario: soc-6zihw#hook-noise-audit
Bounded-context: BC5-Runtime
Evidence: docs/architecture/hook-noise-audit.md
2026-05-23 18:33:56 -04:00
Bo f3813c7ba6 fix(docs): behavior-science is a lens, not the product spine (soc-e92s1 #headline-not-spine) (#421)
Operator correction (2026-05-22): *"behavior science is not the spine.
fix the headline."* PR #416 over-rotated — it led the README + PRODUCT
headlines with behavior-shaping and the doctrine doc called itself "the
spine." The spine is the SDLC control plane / operating loop;
behavior-shaping is a complementary lens.

- README.md lead: restored to SDLC-control-plane framing;
behavior-shaping removed from the headline
- PRODUCT.md Mission: restored to wiki-for-agents + corpus-moat + CDLC;
behavior-shaping removed from the lead
- docs/architecture/behavior-shaping-environment.md: demoted to "a
behavioral lens — NOT the product's spine; the spine is the operating
loop"; heading "Why this is the spine" → "Why the lens is useful"

Content kept as a lens (doctrine doc, domain vocab, GOALS directive
#14); only the spine/headline positioning is corrected.

How tested: diff 4/4 balanced swaps (no collateral); sync-skill-counts
no drift; doctrine-doc links resolve.

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

Closes-scenario: soc-e92s1#headline-not-spine
Bounded-context: BC1-Corpus
Evidence: README.md
2026-05-22 18:32:15 -04:00
Bo 9a92652d4d docs(architecture): behavior-shaping-environment doctrine — the ABC spine (soc-loqc #behavior-shaping-doctrine) (#414)
Operator product thesis (2026-05-22): AgentOps is the environment that
arranges antecedents + reinforcement so agents reliably perform
agreed-upon behaviors. This names the operant-conditioning model
(Antecedent → Behavior → Consequence) AgentOps already embodies — the
*why* beneath the loop.

- docs/architecture/behavior-shaping-environment.md (NEW): ABC model +
surface→mechanism mapping (antecedent=context arrangement,
behavior=.feature, consequence=gates/ratchet reward + hooks/STOP/reverts
stop), why-it-works, 5 governing principles, propagation map
- catalogued in documentation-index + architecture/index; added to
mkdocs nav

Anchor for epic **soc-tk1d**. The other 3 surfaces (domain vocab,
positioning, GOALS contract) cite this doc.

Sibling pattern: mirrors docs/architecture/operating-loop.md doctrine
shape. Fitness: behavior-science surfaces 0/4 → 1/4.

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

Closes-scenario: soc-loqc#behavior-shaping-doctrine
Bounded-context: BC1-Corpus
Evidence: docs/architecture/behavior-shaping-environment.md
2026-05-22 15:25:35 -04:00
Bo d69f9f0c13 feat(architecture): intent-to-loop hexagon doc + BDD skill scaffolding (soc-4d0r) (#321)
## What

Foundation slice for the **soc-qk4b** epic ('TDD-crank all skills into
intent-to-loop hexagons'). The epic description listed these artifacts
as 'What already exists' — but they were never committed to main.
Without them, the 6 sub-issues (`soc-qk4b.1` through `.6`) cannot start.

## New

`docs/architecture/intent-to-loop-hexagon.md` — process-level hexagon
connecting [Ports and
Adapters](../blob/main/docs/architecture/ports-and-adapters.md)
(structure) to [Operating
Loop](../blob/main/docs/architecture/operating-loop.md) (execution).
Defines the 8-port chain with driving/driven/guard adapters and
done-state rules:

```
Intent
  -> shape_intent      -> AcceptanceExample
  -> persist_intent    -> WorkItem / Bead
  -> plan_slices       -> Slice
  -> execute_slice     -> implementation
  -> execute_wave      -> wave packet
  -> validate_acceptance -> CriterionVerdict
  -> record_evidence   -> Evidence
  -> steer_goal        -> LearningDisposition
```

## Skill changes

Source-of-truth in `skills/`, mirrored to `skills-codex/` (re-hashed via
`scripts/regen-codex-hashes.sh`):

| Skill | Change |
|---|---|
| `plan` | Require Gherkin block or upstream-scenario link for
feature/bug/product-facing behavior issues; `hexagon:` boundary block
for non-trivial plans and beads. |
| `discovery`, `rpi`, `validate`, `validation`, `beads`,
`shared/validation-contract` | Reference the intent-to-loop hexagon as
the boundary contract. |

## Doc plumbing

- `docs/architecture/{index,operating-loop,ports-and-adapters}.md` +
`docs/contracts/skill-ports-and-adapters.md`: cross-link to new hexagon.
- `docs/templates/{intent-issue,slice-validation}.md`: carry hexagon
block into intent issues and slice validation plans.
- `mkdocs.yml`, `docs/documentation-index.md`: register new doc in nav.

## AGENTS.md

- bd integration block regenerated (`v:1 profile:full hash:f65d5d33`).
- Session Completion section added with **conditional** `bd dolt push`
wording — passes `scripts/validate-bd-closeout-contract.sh`.

## Validation

- ✅ `scripts/pre-push-gate.sh --fast`: passed (1 pre-existing warn on
`scenarios/trace` executable-spec link integrity, unrelated)
- ✅ `scripts/validate-bd-closeout-contract.sh`: passes
- ✅ `scripts/regen-codex-hashes.sh`: 7 manifest hashes updated for
parity
- ✅ All 8 codex JSON files: syntactically valid
- ✅ Self-review per pre-commit hook: no removed error handling, no
changed defaults, no silent data loss

## Origin

Discovered during analysis of merged branch
`refactor/council-mode-taxonomy-soc-ml4l` (PR #293) on 2026-05-18 — the
BDD/hexagon scaffolding sat uncommitted in the worktree after #293
merged. Filed as `soc-4d0r` with `discovered-from: soc-qk4b`. This PR
lands the work cleanly off fresh `main`.

## Unblocks

- soc-qk4b (epic)
- soc-qk4b.1 — Control ledger for 77-skill hexagon crank
- soc-qk4b.2 — Loop priority skills (hexagon/TDD crank)
- soc-qk4b.3 — Factory priority skills
- soc-qk4b.4 — Corpus priority skills
- soc-qk4b.5 — Validation priority skills
- soc-qk4b.6 — Runtime priority skills

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-authored-by: Codex <codex@example.invalid>
2026-05-18 16:48:14 -04:00
Bo 3a5ed9a0a3 feat(loop): enforce vertical-slice bead evidence (#287) 2026-05-17 01:06:53 -04:00
Boden Fuller b8c5a3761b feat(agentops): make 3.0 hookless-first
Add DDD skill-domain contracts, hook lease inventory, replacement ports, artifact-first RPI skill boundaries, and release exact-SHA validation. Demote ao inject to a compatibility adapter and remove prompt-only default hooks.
2026-05-16 09:43:08 -04:00
Boden Fuller d68db1893c fix(docs): convert cross-tree doc links to absolute URLs for mkdocs strict
docs.yml runs `mkdocs build --strict`, which aborts on any warning. Seven
links from cdlc.md and operating-loop.md pointed at repo-root, .agents/,
and skills/ files outside the mkdocs docs/ source tree, producing 7 → 0
strict warnings once converted. Uses absolute github.com/boshu2/agentops
blob URLs, the same pattern already used in documentation-index.md.

Clears the Deploy Docs workflow, red on main for the last 2 runs.
2026-05-15 20:25:27 -04:00
Boden Fuller ee763750ba docs: rename PRACTICE.md to PRACTICE-REGISTRY.md + add CDLC narrow-waist doctrine
Rescope PRACTICE.md into PRACTICE-REGISTRY.md: it now owns only the
practice-slug lineage registry, not product positioning or CDLC doctrine.
Update all references (schema, validate-practice-citations.sh, bats test,
architecture-terms.md, documentation-index.md, aggregate.go comment).

Introduce the Context Density Rule as a canonical domain concept: every
high-value context token carries intent, boundary, evidence, decision,
constraint, or next action. New domain entry context-density-rule.md (+
codex mirror). Thread the BDD/Gherkin + DDD + Hexagonal + TDD narrow waist
through cdlc.md, README.md, PRODUCT.md, GOALS.md, and the rpi/domain/
post-mortem skills. Sync codex artifacts.
2026-05-15 20:16:53 -04:00
Boden Fuller d722ed5c01 feat(skills): operating-loop doctrine + billboard refactor for 15 process skills
Introduce the CDLC operating loop as the execution discipline that runs
through the existing DDD/hexagonal seams, refactor 15 process skills to
billboard shape per the agreed tier line caps, and land the DDD frontmatter
v2 backfill (consumes/produces/context_rel) that was in flight on this
branch.

Doctrine + templates:
- docs/architecture/operating-loop.md: operational spine (BDD intent ->
  vertical slices -> conflict-free wave -> bead acceptance -> evidence)
- docs/templates/intent-issue.md: BDD-shaped intent issue template
- docs/templates/slice-validation.md: per-slice validation plan template
- docs/cdlc.md: new section linking the conceptual seven phases to the
  operating loop; operating-loop.md added to companion docs
- docs/templates/README.md + docs/documentation-index.md: catalog updates
- GOALS.md Directive #12: BDD intent + vertical slice decomposition gate
- .agents/research/2026-05-15-cdlc-dojo-doctrine.md (gitignored, local-only):
  compact doctrine source for the maintainer

Process-skill sweep (15 skills):
- "Loop position" section added to: rpi, discovery, plan, implement, crank,
  validation, brainstorm, pre-mortem, council, swarm, autodev, post-mortem,
  forge, retro, vibe.
- Billboard refactor: bulk procedural content extracted from SKILL.md to
  per-skill references/*.md for discovery, validation, implement, crank,
  swarm, post-mortem, vibe (5,632 -> 3,205 SKILL.md lines, -43%, with
  every new references/*.md linked back from its SKILL.md per the repo
  gate).
- Restored ACT.3/ACT.4 sections in post-mortem after the billboard pass to
  keep validate-next-work-contract-parity.sh green.

Validation:
- tests/skills/lint-skills.sh: all 15 PASS within declared tier caps
- scripts/audit-codex-parity.sh: PASS for all 15
- scripts/validate-next-work-contract-parity.sh: PASS
- scripts/pre-push-gate.sh --fast: PASS (0 failures, 50 skipped)
- cli/embedded mirror synced via 'cd cli && make sync-hooks'

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-15 15:42:37 -04:00
Boden Fuller 26d13422b0 docs(arch): ports-and-adapters overview + ADR-0001 + primitive-chains seam
Three architecture documents that complete the encoded DDD+Hexagonal
shape:

- docs/architecture/ports-and-adapters.md — one-page overview with
  the inner-hexagon definition, primary (driving) and secondary
  (driven) adapter inventories, the three ports (PacketRepository,
  IssueTracker, LLMClient), an ASCII hexagon diagram, and a 4-step
  "How to add a new adapter" recipe.
- docs/adr/ADR-0001-ddd-hexagonal-adoption.md — Nygard-style ADR
  recording the decision to encode the architecture (with Cockburn
  2005, Evans 2003, and the four mechanical-enforcement mechanisms
  laid out in this epic).
- docs/architecture/primitive-chains.md — adds a "Hexagonal seams"
  section pointing at the new domain/ports/adapters tree.
- docs/documentation-index.md — links the two new docs (the
  Wave 2 context-map link stays put).

mkdocs build --strict passes.

Issue #9 of the DDD+Hexagonal v1 plan.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-12 10:50:01 -04:00
Boden Fuller 22fbfa2253 fix(codex): repair native hook manifest install 2026-04-23 23:15:27 -04:00
Boden Fuller 1e073d8363 chore: purge archived AO↔Olympus bridge integration + prefer local Go in precommit hook
Olympus (ol) was the power-user daemon predecessor to AgentOps, archived
in strategic-direction.md. The bridge contracts (SPEC_ONLY, never
enforced), MemRL policy surface, OL quarantine constraints collector, and
supporting scripts/tests all referenced a now-dead integration. Purging
them removes ~2400 lines of stale surface area.

## Deleted files
- docs/ol-bridge-contracts.md
- docs/architecture/ao-olympus-ownership-matrix.md
- docs/plans/2026-02-13-ao-olympus-bridge-next-steps.md
- docs/contracts/memrl-policy-integration.md
- docs/contracts/memrl-policy.schema.json
- docs/contracts/memrl-policy.profile.example.json
- cli/cmd/ao/inject_ol_test.go
- skills/vibe/scripts/ol-validate.sh + codex mirror
- skills-codex/swarm/scripts/ol-ratchet.sh, ol-wave-loader.sh
- tests/ol-integration/ (entire directory)

## CLI code stripped
- internal/search/types.go: OLConstraint struct + InjectedKnowledge.OLConstraints field
- internal/search/inject_run.go: CollectOLConstraints, WriteConstraintsSection, quarantineRelPath const, all related trim/render logic
- cmd/ao/inject.go: gatherOLConstraints, collectOLConstraints wrapper, olConstraint type alias, init-time call site
- Package comments in provenance/storage/types/formatter updated "olympus" → "agentops"
- formatter/markdown.go: session tag "olympus" → "agentops" (+ test update)
- Tests: deleted TestCollectOLConstraints + TestInject_collectOLConstraints, stripped OL subtests from TestFormatKnowledgeMarkdown and TestInject_*, renamed "olympus" literal test data to "other-repo"
- rpi_phased_context.go: stripped "matches Olympus DefaultTimeout" and "Modeled on Olympus internal/git/worktree.go" comments

## Docs + skills stripped
- mkdocs.yml nav: 3 entries removed (AO-Olympus Matrix, MemRL Policy, OL-AO Bridge)
- docs/INDEX.md, contracts/index.md, architecture/index.md, index.md: cross-refs removed
- strategic-direction.md: retirement rationale compressed to one paragraph
- docs/context-packet.md, positioning/devops-for-vibe-coding.md, plans/README.md: OL-specific content removed
- skills/vibe/SKILL.md + codex mirror, swarm/SKILL.md: OL script refs removed
- skills/vibe/references/deep-checks.md, plan/references/planning-rules.md (+ codex), pre-mortem/references/council-fail-patterns.md (+ codex): OL rule/pattern entries removed
- skills-codex hashes regenerated (plan, pre-mortem, swarm, vibe)

## Precommit hook fix
- hooks/go-test-precommit.sh: prefer ~/.local/go/bin/go when present. Hooks
  don't inherit interactive-shell PATH, so apt-provided go-1.22 would
  otherwise override a user-local 1.26 install. Mirrors the zshrc pattern.

## Retained (historical / useful)
- strategic-direction.md: 1-paragraph archival note
- Historical release notes (docs/releases/*.md) — immutable past-release record
- cli/testdata/transcripts/real-2.4mb.jsonl — captured test fixture
- docs/brownian-ratchet.md ol-rg3p bead-ID refs — internal bead prefix, not Olympus

## Verification
- go build ./... && go vet ./... clean
- go test ./... clean except pre-existing TestGCBridgeVersion_Live panic
- scripts/docs-build.sh --check (mkdocs strict) clean
- scripts/check-contract-compatibility.sh passes
- scripts/regen-codex-hashes.sh run — 4 skills updated
2026-04-19 14:33:00 -04:00
Boden Fuller cc6750c4e8 feat(docs,skills): rebuild Pages site with MkDocs Material + harden RPI orchestrator delegation contract
## Docs site — boshu2.github.io/agentops

- Replace Jekyll minima with MkDocs Material (slate dark palette default)
- Landing hero scoped to .landing-hero (no gradient bleed on inner pages)
- Section landings (getting-started, architecture, reference, contracts, levels) with narrative ledes
- Generate skill catalog + per-skill pages from skills/*/SKILL.md at build
- Generate CLI reference from cli/docs/ at build (fails build on missing source)
- Fix every internal link via one-shot migration (scripts/migrations/2026-04-19-fix-docs-links.py)
- Wire mkdocs build --strict into pre-push gate (Check 25a)
- Replace .github/workflows/pages.yml with .github/workflows/docs.yml (actions/deploy-pages)
- README + docs/CONTRIBUTING updated with docs-build toolchain on-ramp
- tests/docs/validate-links.sh patched to understand mkdocs-generated paths

## RPI orchestrator strict-delegation contract

- Strict sub-skill delegation is now the default for /rpi, /discovery, /validation. No --full flag — always on.
- Canonical contract in skills/shared/references/strict-delegation-contract.md (plus Codex mirror)
- Forged learning with detection phrases + corrective actions (ao-inject-ready)
- Rename --no-lifecycle -> --no-scaffold in /discovery (Claude + Codex) with deprecation alias through v2.40.0
- Harden inline-work hotspots with orchestrator-owned markers in /crank STEPS 3a.3, 6.5, 8.7 + Inline Work Policy footer
- Flag consistency: --auto and --interactive scopes documented; --complexity syntax formalized
- CHANGELOG [Unreleased] documents + scaffolds; runtime hook enforcement explicitly deferred

## fix(hooks): go-test-precommit skips when no Go files staged

- Previously ran go vet + go build unconditionally, blocking non-Go commits when Go toolchain was missing or at a different version
- Now checks staged diff and exits cleanly if no *.go or go.{mod,sum,work} files are staged
- Applied to both hooks/ (source) and cli/embedded/hooks/ (synced)

Provenance: full RPI lifecycle with strict delegation at every phase boundary (Phase 1 Skill(discovery) -> Phase 2 Skill(crank) -> Phase 3 Skill(validation) -> Skill(vibe), Skill(post-mortem), Skill(retro)).

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-19 10:37:58 -04:00
Boden Fuller 4a179cd94d docs(codex): update hookless references to reflect native hooks in v0.115.0+
Codex CLI v0.115.0+ supports native hooks (SessionStart, Stop,
UserPromptSubmit, PreToolUse, PostToolUse). Update skills, CLI help
text, and docs to reflect this:

- Skills: using-agentops, recover, quickstart, post-mortem, rpi
  now document native hooks as primary, hookless as fallback
- CLI: codex.go help text updated (ao codex start/stop are fallback)
- Docs: architecture, contracts, flywheel, session-lifecycle updated
  with codex-native-hooks runtime mode alongside hookless fallback
2026-04-07 09:44:47 -04:00
Boden Fuller 3eb679c6f6 feat(knowledge): rename athena → compile + add Karpathy-style knowledge compiler
Rename the athena skill to compile — a descriptive name that communicates
what it actually does. Extend with Karpathy's LLM Knowledge Bases architecture:

- New compile phase: LLM reads raw .agents/ artifacts and produces interlinked
  markdown wiki at .agents/compiled/ with index.md, log.md, backlinks
- New lint phase: detects contradictions, orphan pages, stale claims, coverage gaps
- Pluggable compute backend via AGENTOPS_COMPILE_RUNTIME (ollama|claude|openai)
- Hash-based incremental compilation (only recompile changed sources)
- compile.sh engine with security fixes (no shell injection, path traversal guard)
- Full rename across 93 files: skills, docs, CLI, tests, hooks, scripts, codex

Existing Mine → Grow → Defrag cycle preserved as phases within the larger
compile workflow. No vector DB — compiled wiki IS the retrieval layer.
2026-04-05 17:57:40 -04:00
Boden Fuller 2177edb30f fix: wire flywheel automation into skill paths 2026-04-03 10:47:44 -04:00
Boden Fuller 03a97978c5 fix(docs): align ASCII box-drawing diagrams across 23 files
Fix right-side │ border alignment in box diagrams. Three fix types:
- Trailing space adjustment for border alignment
- Box border widening for content that exceeded width
- Bottom border dash count matching top border
2026-03-29 07:55:25 -04:00
Boden Fuller ea5d1148bb feat: harden codex hookless follow-up flows 2026-03-24 10:09:27 -04:00
Boden Fuller 925202dfd2 test: add codex hookless lifecycle smoke 2026-03-23 18:47:19 -04:00
Boden Fuller 9e4ddcf859 feat: add codex hookless lifecycle fallback 2026-03-23 15:24:33 -04:00
Test User b6e16585e2 feat(search): wrap ao search around upstream cass 2026-03-22 15:48:15 -04:00
Boshu2 0c1d4f6308 docs: align lifecycle docs with primitive chain audit 2026-03-11 12:37:24 -04:00
Boden Fuller 9d06279043 chore(na-3re): wave 2 — harden hooks, wire context, clean docs, add CI job (5 issues)
Issues: na-3re.7, na-3re.8, na-3re.9, na-3re.10, na-3re.12

Wave 2 changes (37 files):

- na-3re.7: Add check-test-staleness CI job (warn-only, continue-on-error)
- na-3re.8: Harden 4 hooks with WARN-first defaults:
  - pre-mortem-gate: AGENTOPS_PREMORTEM_FALLBACK=open (advisory by default)
  - task-validation-gate: recursion depth limit (max 3), AGENTOPS_METADATA_GATE=warn
  - ratchet-advance: epic-scoped gating via AGENTOPS_ACTIVE_EPIC
  - go-complexity-precommit: _validate_restricted_cmd helper
- na-3re.9: Extract section name constants, add context section validation tests
- na-3re.10: Clean stale /learn→/retro refs (5 docs), .agents/retros/→.agents/learnings/
  refs (17 files), fix post-mortem SKILL.md step numbering
- na-3re.12: Verify Go code items (6/7 already correct), add ASCII fast-path comment
2026-03-05 10:21:27 -05:00
Boden Fuller 37d4b5b2ae Merge branch 'codex/rpi-supervisor-cli' into main 2026-02-21 19:41:50 -05:00