mirror of
https://github.com/boshu2/agentops.git
synced 2026-09-14 15:08:13 +08:00
ao-pre-reduction@5b334a13f
45 Commits
| Author | SHA1 | Message | Date | |
|---|---|---|---|---|
|
|
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
|
||
|
|
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 |
||
|
|
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 |
||
|
|
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 |
||
|
|
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`. |
||
|
|
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 |
||
|
|
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 |
||
|
|
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 |
||
|
|
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 |
||
|
|
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 |
||
|
|
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 |
||
|
|
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 |
||
|
|
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 |
||
|
|
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 |
||
|
|
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 |
||
|
|
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 |
||
|
|
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 |
||
|
|
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 |
||
|
|
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
|
||
|
|
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 |
||
|
|
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
|
||
|
|
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 |
||
|
|
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 |
||
|
|
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 |
||
|
|
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>
|
||
|
|
3a5ed9a0a3 | feat(loop): enforce vertical-slice bead evidence (#287) | ||
|
|
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. |
||
|
|
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. |
||
|
|
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. |
||
|
|
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> |
||
|
|
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> |
||
|
|
22fbfa2253 | fix(codex): repair native hook manifest install | ||
|
|
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 |
||
|
|
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>
|
||
|
|
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 |
||
|
|
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. |
||
|
|
2177edb30f | fix: wire flywheel automation into skill paths | ||
|
|
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 |
||
|
|
ea5d1148bb | feat: harden codex hookless follow-up flows | ||
|
|
925202dfd2 | test: add codex hookless lifecycle smoke | ||
|
|
9e4ddcf859 | feat: add codex hookless lifecycle fallback | ||
|
|
b6e16585e2 | feat(search): wrap ao search around upstream cass | ||
|
|
0c1d4f6308 | docs: align lifecycle docs with primitive chain audit | ||
|
|
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 |
||
|
|
37d4b5b2ae | Merge branch 'codex/rpi-supervisor-cli' into main |