## What
Gut **context poison** — agent-facing docs that route a working agent at
DEAD mechanisms. This poisoned a live fleet-operating session (the bo
driver building the go-dark supervisor) into proposing `ao rpi` as a
continuity-loop worker. Found via a 5-way parallel poison fan-out.
**Scope: operational-surgical** (Bo's explicit call). Gut the
agent-facing *operational* guidance + *factual* errors; **LEAVE** the
README/`docs/3.0.md` product narrative (Gas-City-as-reference-substrate
is coherent, ADR-backed product design — a different altitude from Bo's
live fleet).
## Changes (10 files, surgical)
**Tier A — operational guidance (the poison that bit me):**
- `CLAUDE.md` Session Constraints: "route multi-phase work through `ao
rpi`" → the live substrate (NTM + MCP Agent Mail + `continuity-loop`);
`gc` reframed as optional-out-of-session, **not** the live substrate.
Kept the accurate "bridge REMOVED" + "load-bearing legacy" lines.
- `AGENTS.md`: dropped the deleted "scheduling daemon" (ADR-0009).
- `AGENTS-RUNTIME.md`: `ao rpi serve --help` → the real `ao` command
surface.
**Tier B — hookless-factual** (3.0 installs no hooks by default):
hookless banners on `ARCHITECTURE.md` + `reference.md` (surgical vs.
rewriting diagram internals); corrected SessionStart-hook prose in
`context-packet.md` + `vs-claude-flow.md`.
**Tier C — retired `/dream` shown as live:** marked retired in
`evolve`/`harvest`/`using-agentops` (compounding moved to Gas City).
`curate` **intentionally left** — its `--mode=dream` is the forward
replacement, not poison.
## Guardrails
- Does **not** claim `ao rpi` was deleted — the command still compiles
(`loop`/`phased`/`serve` exist); only its role as the *live workflow* is
corrected.
- registry.json unaffected (skill **bodies** only; `generate-registry.sh
--check` = OK).
## Evidence
`bash scripts/generate-registry.sh --check` → OK. Diff is 20 insertions
/ 16 deletions across 10 files.
Bounded-context: BC1-Corpus (agent-facing context docs)
Evidence: this PR diff + the parallel fan-out inventory
Closes: ag-sjz8
🤖 Generated with [Claude Code](https://claude.com/claude-code)
## What
Establishes a first-class **`docs/convergence/`** section: the record of
the industry independently arriving at the structure AgentOps already
runs — kept distinct from the competitor map. Three surfaces:
1. **`the-reading.md`** — the *living thesis*. The argument (with
mechanism, firm-vs-forming consensus table, honest moat-risk, and a "how
to read a new signal" rubric) that the industry is converging and
**why**.
2. **`ledger.md`** — the dated *receipts* table (who/when/which
invariant). Seeded with Google SRE 2026.
3. **`google-sre.md`** — the per-party *encoding map*: 11 convergence
points → real AgentOps loci (8 encoded · 2 partial · 1 gap).
4. **`index.md`** — section hub framing the three.
## Why first-class, not under comparisons/
A vindication record is the *inverse* of a competitor grid — wrong to
parent it under "vs the competition." Radar = competitors in our lane;
Convergence = independents arriving from outside it. Promoted to its own
top-level nav section (`git mv`, history preserved; permalinks updated;
cross-links rewired both ways).
## Gaps surfaced (filed as beads)
| Bead | Point | Work |
|---|---|---|
| `ag-fjbu` | #3 | Adopt Bronze/Silver/Gold eval-tiering +
True-vs-Observed-Precision naming |
| `ag-wrom` | #8 | Formalize an L0–L4-style autonomy ladder for AgentOps
dispatch |
| `ag-7278` | #11 | Council: does coherent-arc need a fix-forward escape
hatch? (Google is ahead) |
## Verification
- All relative links across the convergence section + comparisons
pointers resolve.
- mkdocs nav + documentation-index updated; renames preserve history.
Closes-scenario: ag-4hf7#google-sre-convergence
Bounded-context: BC1-Corpus
Evidence: docs/convergence/the-reading.md
* fix(reconcile): backfill README claim anchors (Wave 1A — soc-2ie9k)
Add markers for 5 ledger rows previously orphaned by soc-nybd README rewrite.
Validator scripts/check-factory-claim-ledger.sh now exits 0.
* feat(reconcile): extend claim ledger to Wave-0 comparison docs (Wave 1B — soc-s805h)
Add anchors plus ledger rows for the Wave-0-refreshed comparison docs that
lacked coverage: competitive-radar.md, vs-everything-claude-code.md, and
vs-tons-of-skills.md. Validator scripts/check-factory-claim-ledger.sh stays
at exit 0.
trust-factory.md and wiki-for-agents.md are Wave-0-shipped but live outside
the validator's hardcoded source set. Coverage there is deferred to Wave
1C/1D, where the source-set widening is in scope; details captured in
.agents/crank/SHARED_TASK_NOTES.md.
* feat(reconcile): extend ledger source-set to Wave-0 docs (Wave 1B follow-up — soc-s805h)
Add docs/trust-factory.md and docs/wiki-for-agents.md to the validator's
collect_repo_sources() set so the issue's listed Files: line is fully covered.
Add markers + ledger rows for AOP-CLAIM-TRUST-FACTORY-FIVE-STEP-PRIMITIVE
and AOP-CLAIM-WIKI-FOR-AGENTS-CORPUS-COMPILATION.
The ledger JSON diff is large because jq normalized inline `source` keys
to multi-line — semantics unchanged.
Validator scripts/check-factory-claim-ledger.sh exits 0.
* ci(reconcile): wire factory-claim-ledger validator as advisory job (Wave 1C — soc-lmww1)
Adds `factory-claim-ledger-strict (advisory)` job to .github/workflows/validate.yml:
- runs `bash scripts/check-factory-claim-ledger.sh` via continue-on-error: true
- emits {run_id, pr_number, verdict, surfaces_touched, timestamp} JSON observation
- publishes observation as workflow artifact (not committed to repo)
- merged_anyway / ledger_updated backfill is Wave 1E concern, documented in-job
Also adds `tests/integration/test-factory-claim-ledger-ci-job.sh` to lock in the
job shape (T1-T6 contract assertions) for Wave 1E to invert when promoting to
blocking.
Validator stays at exit 0 on this branch.
* docs(reconcile): document operator workflow for claim ledger (Wave 1D — soc-4ou2q)
Add an Operator Workflow section to the factory-claim-ledger contract doc
covering all five closed enums (validation_level, release_posture,
evidence_status, authority_state, promotion_state), how to add/update/retire
claim rows, what each --strict failure mode means in operator terms, and a
worked example using AOP-CLAIM-TRUST-FACTORY-FIVE-STEP-PRIMITIVE.
Also update the Source Set list to include docs/trust-factory.md and
docs/wiki-for-agents.md (added in Wave 1B follow-up).
Validator: PASS. mkdocs build --strict: exit 0.
* ci(reconcile): wire factory-claim-ledger-strict into summary + AGENTS parity (Wave 1C followup — soc-lmww1)
The Wave 1C commit (82260e97) added the factory-claim-ledger-strict
advisory job to validate.yml but skipped two parity surfaces:
- summary.needs did not list it, so the aggregator never waited for it
and AGENTS↔workflow set-diff parity (validate-ci-policy-parity.sh)
flagged drift.
- AGENTS.md "CI Jobs" + "Advisory Job Triage SLAs" tables had no
matching row, so the validator's blocking/non-blocking set diff
reported the new job as a workflow-only addition.
Fix:
- validate.yml: add factory-claim-ledger-strict to summary.needs and to
the summary echo block. The job stays advisory because of its own
step-level continue-on-error: true.
- AGENTS.md: add it to the prose non-blocking list (line 72) and both
the SLA table and the CI Jobs table — the SLA table sets a 14d
triage SLA and explicitly defers blocking promotion to Wave 1E.
Validated:
- bash scripts/validate-ci-policy-parity.sh -> PASS (46 jobs;
6 non-blocking)
- bash scripts/test-ci-deterministic-gates.sh -> 4/4 pass
- bash tests/integration/test-factory-claim-ledger-ci-job.sh -> 6/6 pass
- bash scripts/check-factory-claim-ledger.sh -> PASS
* fix(eval): bump pre-push-gate-governance bats count 50->51 after ce9d42f8
Commit ce9d42f8 (fix(pre-push): keep fast two-pass advisory scoped) added
a 51st BATS test ("pre-push-gate.sh --fast two-pass keeps pass 2 fast and
skips evals for non-eval changes") but did not update the contract-canary
expectation in evals/agentops-core/pre-push-gate-governance.json, which
still pinned "1..50". Result: agentops-core.pre-push-gate-governance
canary failed locally with:
pre-push-bats-suite: stdout does not contain "1..50"
bats tests/scripts/pre-push-gate.bats reports 1..51 with all tests
passing, so the count is correct; the eval pin just needs to track it.
Validated:
- bats tests/scripts/pre-push-gate.bats -> 51/51 pass, "1..51" first line
- bash scripts/pre-push-gate.sh --fast -> Pass 1 PASSED, Pass 2 PASSED
- contract canaries gate flips from FAIL -> ok
* docs(positioning): wave 1 — README hero rewrite to wiki framing (soc-nybd)
Apply the locked decisions D1–D10 from the positioning doc-sweep packet:
- D1 headline: "A wiki for your agents. Built so you own the moat."
- D2 wiki-framing opener; D3 moat statement + "shovel" anchor
- D4 non-positioning ("AgentOps is not a coding harness")
- D5 receipts block (timestamped 2026-05-04 stable snapshot)
- D6 enterprise-pattern statement (pattern claim, no company names)
- D7 "What if the labs ship this natively?" section before Contributing
- D8 Notion vs AgentOps comparison table (7 rows)
- D9 SE → Context translation table (11 rows) replacing prior SDLC/CDLC table
- D10 line budget: 420 → 295 lines
Drops: intra-page nav bar, Validate/Nightly badges (stars retained),
"Competitive Positioning" section, 12-Factor Doctrine 4-tier table (now
single sentence linking 12factoragentops.com), mermaid diagram, AOP-CLAIM
markers, cross-runtime <details> block.
Forward references to docs/wiki-for-agents.md and docs/trust-factory.md
will resolve when Wave 4 lands those new files.
Source: .agents/discovery/2026-05-07-positioning-doc-sweep.md
Epic: soc-9xn0
* docs(positioning): wave 2 — strategic doc alignment to wiki framing (soc-ylp9, soc-rnbf, soc-x3b6, soc-b1r3)
Align PRODUCT.md, GOALS.md, docs/index.md, docs/agentops-brief.md with
the README's locked positioning thesis.
PRODUCT.md (soc-ylp9):
- Mission opener: wiki framing replaces "keeps the books / compiles the
context / compounds the corpus"
- "What the Product Actually Is" leads with wiki framing before four-layer model
- New "What if the labs ship this natively?" section (D7 verbatim with
"Anthropic's Managed Agents")
- Evidence section timestamped: corpus wipe on 2026-05-07, durability fix
tracked in soc-rv5p
- Cross-links to docs/trust-factory.md (forward to Wave 4)
- last_reviewed: 2026-05-06 → 2026-05-07
GOALS.md (soc-rnbf):
- Lede: "A wiki for your agents — repo-native, version-controlled,
mechanically maintained"
- New North Star: "The wiki maintains itself: every session contributes to
.agents/ by default"
- New directive #11: corpus durability (tag corpus-state, soc-rv5p)
- All 10 prior directives preserved
docs/index.md (soc-x3b6):
- Hero rebuilt: D1 headline + subhead + D2 wiki framing + D3 italicized
moat + "AgentOps is the shovel. Start digging."
- mkdocs hero buttons (Install / See It Work / GitHub) preserved
- Body sections unchanged
docs/agentops-brief.md (soc-b1r3):
- Opener swapped to D2 + D3 (wiki framing + shovel anchor)
- New "What if the labs ship this natively?" paragraph (D7 verbatim)
- See-also forward links to docs/trust-factory.md, docs/wiki-for-agents.md
Source: .agents/discovery/2026-05-07-positioning-doc-sweep.md
Epic: soc-9xn0
* docs(comparisons): wave 3 — comparison surface refresh + 2 new lane docs
Refresh 3 existing comparison docs to current competitive state and add
2 new comparison docs covering volume-marketplace and cross-harness lanes.
Refresh:
- competitive-radar.md (soc-33kk): 7-competitor lane table, 6 differentiators
(persistent corpus, off-API daemon, multi-model council, model-independent
phase routing, context-engineering vocabulary, honest empirical disclosure),
5-lane segmentation, last_reviewed → 2026-05-07
- vs-compound-engineer.md (soc-al8s): CE current state (37 skills/51 agents/
7-phase/10-target), new model-independent phase routing row, last_reviewed
added
- vs-superpowers.md (soc-zhig): Anthropic marketplace fact, 29K+ stars, wiki
framing in cross-session memory section (25-year-old idea), last_reviewed
added
NEW:
- vs-tons-of-skills.md (soc-fmkw): volume-marketplace lane comparison —
Tons-of-Skills (425 plugins, 2,810 skills, 200 agents, CCPI grading) vs
AgentOps as different categories. 90 lines.
- vs-everything-claude-code.md (soc-jhtu): cross-harness-parity lane
comparison — everything-claude-code (48 subagents, 182 skills, 5-runtime
DRY parity) vs AgentOps's per-phase model routing. Includes credibility-
move flag on the unverified 140K+ stars / 21K+ forks claim. 181 lines.
Source: .agents/discovery/2026-05-07-positioning-doc-sweep.md, council
research at .agents/council/2026-05-07-research-readme-positioning.md
Epic: soc-9xn0
* docs(positioning): wave 4 — bridge docs + index update (soc-momx, soc-envj, soc-e031)
Two new bridge documents that complete the positioning surface, plus the
documentation index update to make all 4 new docs reachable.
NEW docs/trust-factory.md (soc-momx, 112 lines, 854 words):
The 5-step trust-factory primitive (Identity → Reproducibility → Evaluation
→ Evidence → Recovery) mapped to AgentOps mechanisms. Bridge document for
engineering leads in regulated environments who think in trust-factory
vocabulary already. Pairs with the wiki framing as the alternative buyer
view.
NEW docs/wiki-for-agents.md (soc-envj, 93 lines, 824 words):
Standalone wiki framing — "wikis aren't new, the novel part is making the
discipline mechanical so it actually happens." Uses the D8 Notion comparison
table verbatim, covers the .agents/ directory layout, and explains why most
wikis fail (write-tax + bitrot) and how AgentOps inverts the pattern.
docs/documentation-index.md (soc-e031):
- Added "Bridge / framing docs" sub-list under Four Product Layers with
trust-factory.md and wiki-for-agents.md (visible above the fold)
- Added vs-tons-of-skills.md and vs-everything-claude-code.md to existing
Comparisons section (alphabetical with other vs-* entries)
- 222 → 226 entries; 309 → 316 lines
Source: .agents/discovery/2026-05-07-positioning-doc-sweep.md
Epic: soc-9xn0
* docs(positioning): wave 5 — body doc cross-links + light framing align (soc-igqq, soc-chkd, soc-cout)
Light touch on three linked body docs to align with the wiki framing
without restructuring their substance.
docs/cdlc.md (soc-igqq):
- Lede leads with "Software engineering took 50 years..." + the 11-row
SE→Context translation table (D9 verbatim)
- "CDLC" acronym deferred to body intro after the table establishes the
concept (acronym kept in 11+ body uses)
- Companion docs section cross-links to wiki-for-agents.md, trust-factory.md
- 248 → 273 lines
docs/the-science.md (soc-chkd):
- Practitioner-facing pointer under TL;DR: "see [Trust Factory]" +
"[A wiki for your agents]"
- Companion docs section
- 671 → 678 lines, science content intact
docs/positioning/devops-for-vibe-coding.md (soc-cout):
- Primary tagline → wiki framing ("A wiki for your agents — built so you
own the moat"); secondary recast as DevOps-lineage tagline
- Category line acknowledges DevOps lineage as historical, not category label
- Date 2026-01-31 → 2026-05-07; version 1.2.0 → 1.3.0
- Cross-link to ../wiki-for-agents.md
- DevOps argument preserved (14 DevOps mentions intact, 6-differentiators
table untouched)
- 343 → 351 lines
Source: .agents/discovery/2026-05-07-positioning-doc-sweep.md
Epic: soc-9xn0
* docs(positioning): wave 6 — fix mkdocs --strict link warnings (soc-uc3w)
The wave 4 bridge docs and wave 3 competitive-radar refresh used relative
links that escape the mkdocs docs/ tree:
- ../README.md and ../PRODUCT.md cross-links → switched to absolute
https://github.com/boshu2/agentops/blob/main/{README,PRODUCT}.md
(matches existing docs/documentation-index.md convention)
- ../../.agents/council/ research link → demoted to plain-text path
reference (the .agents/ tree is gitignored runtime state, not a
publishable doc surface)
Verified: scripts/docs-build.sh --check now exits 0 with "OK: mkdocs
build --strict passed". Five strict-mode warnings cleared.
Wave 6 validation results (12-item checklist):
- mkdocs --strict: PASS
- competitive-freshness: PASS (8/8 docs ≤45 days)
- README ≤ 300: 295 lines
- D1-D10 visible across README, PRODUCT, GOALS, docs/index, docs/agentops-brief, docs/wiki-for-agents
- Cross-links: README→{wiki-for-agents, trust-factory}, PRODUCT→{trust-factory, wiki-for-agents}
- New comparison docs (vs-tons-of-skills, vs-everything-claude-code) exist
and are linked from competitive-radar.md and documentation-index.md
- "operational discipline" residues are historical-only (release notes,
origin-story, devops-for-vibe-coding messaging hierarchy)
Note: ao goals measure shows ambient fails unrelated to this sweep — the
tool is cwd-sensitive and reports "No such file or directory" for scripts
that exist (separate bug, not introduced by this work).
Source: .agents/discovery/2026-05-07-positioning-doc-sweep.md
Epic: soc-9xn0
Closes soc-yjzp.9 (workbench A/B counter-stat) by publishing the empirical
result instead of a placeholder positive number, and lands the Wave 1 doc
honesty pivot from the epic soc-sx99 strategic audit.
# Empirical result (soc-yjzp.9)
ao eval run --baseline-mode=both produced Δ=+0.0000 across 12 workbench
cases (skill-on 12/12, skill-off 12/12). At v1 task difficulty (off-by-one
bugs, simple validators, basic SQLi) the AgentOps hook layer is non-
differentiating — the substrate doesn't surface skill value at this floor.
The honest publishable line is the zero, not a fabricated positive number.
Substrate v2 (realistic agent task difficulty) is roadmap; that's a
multi-week design effort tracked in plan-2026-05-04, not a yjzp.9-sized
bead. Counter-stat artifact tracked at
evals/workbench/results/2026-05-06-yjzp9-counterstat.json.
# Doc honesty pivot (soc-sx99 Wave 1)
Strategic audit at .agents/research/2026-05-07-agentops-strategic-positioning.md
found 5 audit-pivot-re-audit cycles in 6 weeks with byte-identical "remaining
gap" wording across PRODUCT.md versions. Operator-confirmed decisions:
- PRODUCT.md: drop the unsupported "4,940 learnings, 1,195 patterns, 40
planning rules" line (no on-disk corpus reconciles, including the user
vault). Replace with qualitative claim. Cite Δ=+0.0000 with substrate
framing in the Anthropic Managed Agents Outcomes row. Reframe pattern-
to-skill row as deferred (synthesis layer; .agents/skill-drafts/ does
not exist on disk despite earlier "review-only draft generation" claim).
- GOALS.md: three-gap contract proof table reframed. Gap 1 stays
Currently Enforcing (hook-preflight, go-vet-clean, go-complexity-
ceiling, security-gate, contract-compatibility). Gap 2 + 3 split:
scripts that go green in CI/pre-push stay enforcing; flywheel-
compounding (long-cycle, corpus-state by design), flywheel-proof
(cross-session evidence), compile-freshness, goals-validate,
wiring-closure move to a Roadmap column with "declared, not yet
enforced" framing. Honesty rule documented above the table.
- README.md: hero reframed to "context compiler + validation harness
with cross-runtime skill packaging. The daemon is the always-on
dream." Surfaces the schedulable daemon (already shipped via
ao schedule + ao daemon + nightly.yml + the user's headless dream/
evolution sessions) as a co-equal flagship rather than a power-user
feature.
- docs/comparisons/competition-rpi-memory-pipelines.md: Outcomes row
matches the new PRODUCT.md framing.
# Why this lands together
Per the recurrence finding (f-2026-05-07-positioning-audit-cycle-
recurrence): filing more beads to fix the gaps without dropping the
overpromised claims first is what produces the audit cycle. The claim
removal precedes the gap-fill work. soc-sx99 epic Waves 2 (daemon
surfacing recipe pack) and 3 (gap-filler jobs: feedback-loop --drain,
pattern filename repair) follow as separate PRs.
# Verification
bash tests/docs/validate-doc-release.sh: PASS
# Cross-references
- Closes: soc-yjzp.9
- Epic: soc-sx99 (this is Wave 1, doc honesty)
- Research: .agents/research/2026-05-07-agentops-strategic-positioning.md
- Finding: f-2026-05-07-positioning-audit-cycle-recurrence (registered)
- Related: soc-x7hy (MemRL signal strengthening, filed earlier today)
3-judge independent council audit (post-mortem, .agents/council/2026-05-06-post-mortem-soc-yjzp.md)
found AgentOps already has Outcomes capability at three scopes:
1. Project — GOALS.md (rubric) + ao goals measure (each gate runs as
separate subprocess, cli/internal/goals/measure.go:132-164) + /evolve
(iterates worst-failing gate until pass, skills/evolve/SKILL.md:379-388)
2. Plan — /pre-mortem council judges as separate-context graders with
PASS/WARN/FAIL verdict + retry-on-FAIL up to 3 attempts
3. Code — /vibe council judges, same separate-context grading shape
Update PRODUCT.md Market Convergence row and docs/comparisons capability
mapping to reflect "Shipped" rather than "Partial." Original framing
("unifying ao outcomes run verb is in flight") was based on assuming a
missing primary surface; council audit found that surface to be a thin
façade over already-shipped capability, not a primary gap.
The actual remaining work is the proof-point counter-stat (AgentOps
skill-on vs skill-off A/B against eval workbench), not the capability.
Filed as soc-yjzp.9. Closes soc-yjzp.6 wontfix with the same logic.
Refs: post-mortem at .agents/council/2026-05-06-post-mortem-soc-yjzp.md
Closes-issues: soc-yjzp.6 (wontfix)
Refs-epic: soc-yjzp
Anthropic shipped dreaming + outcomes + multiagent orchestration + webhooks in
Managed Agents on 2026-05-06. PRODUCT.md's Strategic Bet frames this as the
validation event for the off-API + cross-vendor wedge, not a competitive
threat. Refresh comparison surfaces while the announcement window is fresh.
- docs/comparisons/competition-rpi-memory-pipelines.md: add Anthropic Managed
Agents (May 2026) section after Karpathy LLM Wiki Pattern; add row to
comparison matrix; close Bottom Line with off-API + cross-vendor wedge
(mechanical acceptance: grep for 'off.API|cross-vendor|off the API' in
the new section returns 3 matches, ≥2 required by pre-mortem fix).
- PRODUCT.md: bump last_reviewed to 2026-05-06; add Managed Agents Dreaming
and Outcomes rows to Market Convergence table; tweak post-table paragraph
to namecheck the launch as the textbook example of harness-layer
commoditization.
- skills/{dream,evolve,forge}/SKILL.md + skills-codex/{dream,evolve}/SKILL.md:
add cross-vendor analog line so readers arriving from the announcement
immediately recognize the equivalent.
- skills-codex/*/.agentops-generated.json: hash regen via
scripts/regen-codex-hashes.sh.
Note: skills-codex/forge/SKILL.md was reverted by a linter (intentional —
likely a template/length constraint upstream); codex-parity-drift and
competitive-freshness gates pass locally.
Closes-issues: soc-yjzp.1, soc-yjzp.2, soc-yjzp.3
Refs-epic: soc-yjzp
Artifacts:
- .agents/design/2026-05-06-design-managed-agents-parity.md (PASS 2.8/3.0)
- .agents/research/2026-05-06-managed-agents-parity.md
- .agents/plans/2026-05-06-managed-agents-parity.md
- .agents/council/2026-05-06-pre-mortem-managed-agents-parity.md (WARN, 6 fixes propagated)
Replace "bookkeeping, validation, primitives, and flows" with the three
product layers (Context Compiler, Validation Gates, Knowledge Flywheel) in
core docs, README skills table, and comparison docs. Adds three-layer
comparison tables to all 5 vs-*.md files and a navigation section to
documentation-index.md.
* docs: add go cli quality discovery plan
* fix(cli): harden gc bridge version parsing
* docs(go): align complexity policy with gates
* docs(cli): classify command surface
* fix(cli): enforce json output contracts
* feat(cli): expand completion coverage
* refactor(cli): pilot badge options writer
* refactor(cli): inject contradict output writer
* refactor(cli): inject notebook update writer
* fix(cli): enable gc runtime smoke coverage
* fix(cli): align gc bridge with gascity v1
* Release v2.39.0
* fix(tests): align next-work schema test with widened type enum
Commit ed35c47f added `docs` and `chore` to the script's VALID_TYPES,
but tests/scripts/check-next-work-schema-rows.bats:42 still used
`type:"docs"` as its supposed-to-be-rejected example, so the test
now passes through the validator — `bats-tests` has been red on
main since.
Switch the rejected-type example to `finding`, which is still
outside the enum and is also the canonical example cited in the
script's own header comment ("type=finding ... caught at push time").
Local: 11/11 in tests/scripts/check-next-work-schema-rows.bats pass.
* docs: capture finding generator postmortem (#157)
* fix(rpi): sort verdicts deterministically in context and status helpers (#158)
BuildPhaseContext and JoinVerdicts iterated the verdicts map directly,
producing non-deterministic output across runs. Sort keys before
rendering so prompt injection and status logs are reproducible.
Closes council finding W-7 (context-orchestration-leverage batch). The
related buildHandoffContext path was already fixed to delegate to
FormatVerdicts (which sorts); this completes the remaining helpers.
- cli/internal/rpi/status.go: sort keys in JoinVerdicts
- cli/internal/rpi/phased_context.go: sort keys in BuildPhaseContext
- tests: replace "ordering not deterministic" waivers with exact-order
asserts and add a 50-run stability check
https://claude.ai/code/session_01Qw4bZvXUNuLs8Rp1j1homB
Co-authored-by: Claude <noreply@anthropic.com>
* fix(codex): audit noisy hook injections (#159)
* docs: add competitive radar (#160)
* feat(agents): harden operator control plane (#161)
* docs(discovery): plan agents control plane hardening
* feat(agents): harden operator control plane
* Release v2.39.0
* fix(tests): align next-work schema test with widened type enum
Commit ed35c47f added `docs` and `chore` to the script's VALID_TYPES,
but tests/scripts/check-next-work-schema-rows.bats:42 still used
`type:"docs"` as its supposed-to-be-rejected example, so the test
now passes through the validator — `bats-tests` has been red on
main since.
Switch the rejected-type example to `finding`, which is still
outside the enum and is also the canonical example cited in the
script's own header comment ("type=finding ... caught at push time").
Local: 11/11 in tests/scripts/check-next-work-schema-rows.bats pass.
* docs: capture finding generator postmortem (#157)
* fix(rpi): sort verdicts deterministically in context and status helpers (#158)
BuildPhaseContext and JoinVerdicts iterated the verdicts map directly,
producing non-deterministic output across runs. Sort keys before
rendering so prompt injection and status logs are reproducible.
Closes council finding W-7 (context-orchestration-leverage batch). The
related buildHandoffContext path was already fixed to delegate to
FormatVerdicts (which sorts); this completes the remaining helpers.
- cli/internal/rpi/status.go: sort keys in JoinVerdicts
- cli/internal/rpi/phased_context.go: sort keys in BuildPhaseContext
- tests: replace "ordering not deterministic" waivers with exact-order
asserts and add a 50-run stability check
https://claude.ai/code/session_01Qw4bZvXUNuLs8Rp1j1homB
Co-authored-by: Claude <noreply@anthropic.com>
* fix(codex): audit noisy hook injections (#159)
* docs: add competitive radar (#160)
* fix(merge): drop unused AgentsDoctorError ref and prune allowlist entries without production refs
---------
Co-authored-by: Claude <noreply@anthropic.com>
* fix(merge): resolve conflicts by taking PR's refactored contradict/codex_runtime, main's overnight test schema
---------
Co-authored-by: Claude <noreply@anthropic.com>
## 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>
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
- Auto-copy references to skills-codex in regen-codex-hashes.sh
- Add line-count check and codex parity step to plan template
- Add --fast-path flag to plan Flags table
- Create reviewer-config-example.md for council
- Major rewrite of vs-gsd.md (GSD v1.27 is no longer lightweight)
- Moderate update of vs-compound-engineer.md (ideation, refresh, 10 runtimes)