Commit Graph

13 Commits

Author SHA1 Message Date
Bo 6d5d111faf feat(skills): land four-vendor skill corpus (#803)
## Summary
- Lands the AgentOps skill corpus across source and Codex wrappers,
including Gemini image targets.
- Integrates the skill branch onto current origin/main and refreshes
generated manifests/catalogs.
- Normalizes local next-work queue enum drift and fixes shellcheck in
alias-collision validation.

## Validation
- bash scripts/regen-all.sh --check
- bash scripts/validate-skill-schema.sh
- bash tests/skills/test-token-budgets.sh
- bash tests/skills/run-all.sh
- bash scripts/audit-codex-parity.sh && bash
scripts/validate-codex-override-coverage.sh && bash
scripts/validate-codex-generated-artifacts.sh --scope worktree && bash
scripts/validate-codex-api-conformance.sh && bash
scripts/validate-codex-runtime-sections.sh && bash
scripts/lint-codex-native.sh
- bash skills/heal-skill/scripts/heal.sh --strict
- PRE_PUSH_SKIP_MKDOCS=1 bash scripts/pre-push-gate.sh --fast

MkDocs strict remains skipped locally via the documented
PRE_PUSH_SKIP_MKDOCS=1 override because the repo currently emits
repo-wide strict-link warnings unrelated to this landing; CI remains
authoritative.
2026-06-06 23:44:42 -04:00
Bo 7455382416 refactor(gc): strip Gas City coupling; adopt NTM+MCP+managed-agents (ag-124p) (#679)
## What

Operator-authorized (Bo, 2026-06-02). Strips the remaining **Gas City**
(`gastown`) coupling from AgentOps and reconciles the **split-doctrine
state** on `main` that the #672–#676 post-mortem flagged: canonical docs
(#676) said NTM+MCP+managed-agents while user-facing docs still
described Gas City as the reference substrate.

The out-of-session substrate is now uniformly **NTM** (local tmux swarm)
+ **MCP** (`ao mcp serve`, shipped) + **managed-agents** (`ao agent`).
AgentOps adopts a substrate; it owns none. Closes **ag-124p** (and
resolves **ag-h93p** — the claude.json gc-hook decouple).

## Deleted (load-bearing surfaces, per the bead's verified scope)

- `packs/agentops/` (the reference City) + root `city.toml`
- `skills/using-gc` + `skills-codex/using-gc` (+
`tests/scripts/using-gc-skill.bats`)
- `gc prime/nudge/mail/hook` wiring in `cli/hooks/claude.json` → now
hookless, matching 3.0 doctrine

## Doc sweep (the split-doctrine fix the post-mortem required)

- **README.md, docs/MIGRATION-3.0.md, docs/dependencies.md,
docs/activation-profiles.md** re-narrated to the substrate trio (the
four files the verdict named)
- AGENTS.md / CLAUDE.md substrate bullets; `dream` skill (+codex twin)
retirement pointer; `shared` / `agent-native` / `using-agentops`
cross-refs; skill-dispositions, context-map, sku-catalog, google-sre
convergence map

## Regenerated derived surfaces

Skill counts (81→80), `registry.json`, `skills/catalog.json`,
context-map, skill-domain-map, codex hashes (14) + manifest, SKILL-TIERS
— all via the generators, validated drift-free.

## Scope boundaries / follow-ups

- **`cli/internal/doctor/fix_bridges.go`** still carries a gc-bridge
detector/fixer subsystem. Out of the bead's verified scope; degrades
gracefully (stat-checks, returns empty when `gc`/`city.toml` absent);
removing it is a test-backed Go change → **follow-up bead**.
- **CLAUDE.md "Gas City bridge — REMOVED"** note kept intentionally:
it's an anti-re-coupling record, not substrate-framing.
- The local-only **bd-closeout** pre-push check (not in CI) is a
pre-existing gap on `main` (its AGENTS.md has no `bd dolt push` line) —
untouched here.
- `thesis-stability` gate FAIL, if present, is the pre-existing
README/PRODUCT/GOALS tagline drift, unrelated to this PR (my
README/PRODUCT edits are the dependency table + skill-count numbers, not
the tagline).

## Verification

`go build ./...` + `go vet` green · skill schema (80/80) + integrity
(heal --strict clean) + lint suite (0 fail) + codex parity green ·
sku-catalog & context-map drift gates green · zero broken markdown links
to deleted paths.

Closes-scenario: ag-124p#gc-coupling-strip
Bounded-context: BC5-Runtime
Evidence: docs/MIGRATION-3.0.md
2026-06-02 09:06:41 -04:00
Bo 0dcbae450c fix(loop): re-enforce session-PR-scope hooklessly + fix stale hook refs (ag-o5xp #session-pr-scope) (#661)
## Problem

The session-PR-scope guardrail shipped as a PreToolUse hook
(`hooks/session-pr-counter.sh`, PR #362), but **PR #511 (the 3.0
hookless teardown) deleted all hooks**. Six workflow-discipline surfaces
were never updated — they still advertise the hook as a live, shipping
mechanism. That's a **stale active-surface promise + a lost reliability
guardrail** (surfaced by the ag-4hf7 Google-SRE audit:
"explainability/trust" turned inward).

## Hookless re-enforcement (the decision)

- **The mandatory layer already survives**: the `/evolve` post-mortem
checkpoint #6 (council-gated, cannot be bypassed) enforces session-scope
for autonomous loops — the actual failure mode. It only lacked a
canonical count source.
- **New `scripts/session-pr-scope.sh`** — the reusable hookless count +
verdict (`OK`/`WARN`/`BLOCK`), fail-open, robot-friendly
(`--json`/`--count`). It is now:
  - the checkpoint's `$session_pr_count` source, and
- the one-liner an **opt-in** hook wraps (re-author via the
hooks-authoring skill — AgentOps ships none).
- 8 bats cases (thresholds, block-mode exit code, fail-open); shellcheck
clean.

## Stale-doc truth (6 surfaces, all hedged)

CLAUDE.md · AGENTS-WORKFLOW.md · skills/ship-loop/SKILL.md · the evolve
postmortem-checkpoint (skills/, skills-codex/, packs overlay — kept in
parity; codex hashes regenerated for **evolve + ship-loop only**, the 7
pre-existing drifts left untouched).

## Ratchet (knowledge → a constraint)

Extend `check-hookless-cold-start.sh` to cover these workflow-discipline
surfaces — reversing the now-stale CLAUDE.md carve-out — so this exact
drift class **cannot recur**. Gate scope 5 → 10 surfaces; its bats test
stays green. (This is the "knowledge becomes a constraint" invariant the
whole ag-4hf7 thread identified as our edge — applied to the very gap
that thread surfaced.)

## Verification

- `bats tests/scripts/session-pr-scope.bats` → 8/8
- `bash scripts/check-hookless-cold-start.sh` → PASS (10 surfaces)
- `check-hookless-cold-start.bats` → 5/5 ·
`validate-codex-generated-artifacts.sh --scope head` → pass ·
wiring-closure → pass · shellcheck clean · overlay ≡ source

Closes-scenario: ag-o5xp#session-pr-scope
Bounded-context: BC3-Loop
Evidence: scripts/session-pr-scope.sh
2026-05-31 19:51:07 +00:00
Bo b4c6aec361 feat(skills)!: 3.0 consolidation — merge 4, cut 2, resolve 6 keep-flags (81→75) (#533)
## AgentOps 3.0 skill consolidation — reconcile-and-tighten

Resolves all 12 skills flagged `merge-review`/`cut-review` in
`docs/contracts/skill-dispositions.yaml` per the operator-approved
dispositions. **Zero capability loss** — every merged skill's content
lives in its target as a mode/section.

### MERGE (4) — content folded into target, source removed
| Source | Target | How |
|---|---|---|
| expert-council | council | `--mode=debate` (alias triggers documented
in council) |
| oss-docs | doc | `--mode=oss` (refs + `audit-oss-docs.sh` copied into
`doc/`) |
| readme | doc | `--mode=readme` (`readme-craft.md`; `bootstrap`
consumer repointed readme→doc) |
| pr-retro | post-mortem | `--scope=pr` (`pr-scope.md` + gh PR-outcome
mining) |

### CUT (2) — genuinely redundant, no live consumer
- **pr-plan** — folds into `/plan` + `/pr-research`; pr-* chain
repointed.
- **update** — install-script concern; refresh note added to
`using-agentops` + install one-liner.

### KEEP — resolved 6 flags (rationale in `skill-dispositions.yaml`)
`validate` + `curate` (designed-future canonical validator/miner; epic
`soc-cp7pv` GO/REVERT is a separate decision) · `security` (release-gate
driver, distinct from security-suite) · `converter` (packaging adapter
skill-builder consumes) · `knowledge-activation` (outer-loop
operationalization) · `grafana-platform-dashboard` (marketplace
specialization).

### Result
**81 → 75 skills** (65 user-facing + 10 internal). Trunk regenerated
once: skill-counts, skill-catalog, skill-domain-map, context-map,
registry, sku-catalog, codex hashes, embedded-sync. Evals repointed to
absorbed locations.

### Gates verified locally (all green)
lint-skills · heal.sh --strict · skill-schema · skill-frontmatter ·
skill-dependency-check · scenario-test-linkage ·
validate-context-map-drift · check-registry-drift · generate-registry
--check · skill-domain-map golden · validate-sku-catalog-drift ·
bounded-contexts-drift · ci-policy-parity · codex
parity/override-coverage/manifest/generated-artifacts/skill-parity/runtime-sections/backbone/lifecycle
· regen-codex-hashes --check · embedded-sync · validate-skill-count ·
markdownlint · shellcheck (--severity=error) · `cd cli && go build && go
vet && go test ./cmd/ao` (9126 passed).

Closes-scenario: ag-cons#consolidation
Bounded-context: BC1-Corpus
Evidence: .agents/discovery/2026-05-24-skill-consolidation-plan.md
2026-05-24 23:17:27 -04:00
Bo f3105d6a3d feat(ship-loop): executable acceptance for the coherent-arc fast lane (soc-uevg9 #ship-loop-hexagon) (#445)
soc-qk4b skill-hexagon-crank — peripheral skill. /ship-loop
(driving-adapter, customer-of rpi) lacked a .feature.

- skills/ship-loop/references/ship-loop.feature (NEW):
claim→test→impl→push→squash-merge→close; one coherent arc (single
rollback unit), large epics routed elsewhere; gated merge + bead close
- added Reference Documents section; registry regenerated

consumes [beads, rpi, post-mortem] already filled — acceptance-only.

How tested: lint-skills ✓ ship-loop (176 lines); scenarios --lint 0
errors; codex parity passed; registry up to date.
Sibling: acceptance-only crank like /complexity #444.

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

Closes-scenario: soc-uevg9#ship-loop-hexagon
Bounded-context: BC3-Loop
Evidence: skills/ship-loop/references/ship-loop.feature
2026-05-23 03:36:33 -04:00
Bo 4b307fa938 docs(ship-loop): cite session-pr-counter hook in soc-waxr doctrine (soc-jmbc #waxr-pointer) (#366)
## Summary

soc-waxr (PR #361) doctrinated the session-scope rule with a "Mechanical
enforcement … is a successor concern" placeholder. soc-1aou (PR #362)
shipped the successor: `hooks/session-pr-counter.sh`. The placeholder
text remained stale in 3 surfaces. This PR updates all three to cite the
concrete hook + behavior + hard-block env var.

Closes: soc-jmbc
Discovered-from: soc-waxr (PR #361 doctrine) via soc-1aou (PR #362 hook
ship)

## Why

Per the soc-waxr harvest note (queued in `.agents/rpi/next-work.jsonl`):
"Tiny edit PR to point at hooks/session-pr-counter.sh. Deferred from
#362 to avoid #361 rebase conflict." Now that both #361 and #362 have
merged, the deferred update can land cleanly.

## Files changed

- `CLAUDE.md` (line 144 region)
- `AGENTS.md` (line 78 region)
- `skills/ship-loop/SKILL.md` (line 113 region)

Auto-regenerated by edit hook (no manual edit):
- `skills-codex/.agentops-manifest.json` (ship-loop `source_hash` bump)
- `skills-codex/ship-loop/.agentops-generated.json` (same bump)

The codex variant doesn't carry the successor-concern placeholder, so
`generated_hash` stays identical — no codex-side edit needed.

## Sibling pattern

Mirrors PR #360 (soc-liyr) doctrine-sweep shape — same trio of surfaces
(CLAUDE.md, AGENTS.md, `skills/<name>/SKILL.md`) updated together so
source-of-truth precedence holds across all entry points an agent or
operator might read first.

## Verification

- `grep -rn "successor concern" CLAUDE.md AGENTS.md
skills/ship-loop/SKILL.md` returns zero matches (was 3 before)
- `grep -rn "session-pr-counter.sh" CLAUDE.md AGENTS.md
skills/ship-loop/SKILL.md` returns 3 matches (was 0 before)
- 5 files changed / 5 insertions / 5 deletions — minimal mechanical
replacement

## Self-correcting Evidence claim

The original PR-body Evidence line cited `hooks/session-pr-counter.sh` —
a path this PR doesn't touch, only references. The just-shipped soc-1nsx
per-job AP#7 check (PR #364) correctly flagged this as an unverifiable
claim on the first CI run. Updating to a file the PR actually modifies,
which the `changes` job's log records as `[modified]`. The per-job log
fetch is working as designed.

Bounded-context: BC0-foundations
Evidence: skills/ship-loop/SKILL.md

Co-authored-by: Codex <codex@example.invalid>
2026-05-20 03:42:42 +00:00
Bo 26b58ba865 docs(workflow): session-scope rule — 2-4 PR default, post-mortem at 5+ (soc-waxr) (#361)
## Summary

Sister rule to coherent-arc. Coherent-arc governs the *shape* of a
single PR; session-scope governs the *count* of consecutive PRs in an
autonomous session.

Closes: soc-waxr · Discovered: soc-1aou (mechanical enforcement)

## The rule

- **Default: 2-4 PRs per autonomous session.**
- **≥5 PRs in flight or merged in one session triggers a mandatory
post-mortem before continuing.** Diminishing returns and reactive-PR
spirals (PR-fixes-fallout-from-prior-PR) are the dominant failure mode
in the back-half of long sessions.
- **Post-mortem shape (1-2 sentences each):** Which PRs were planned vs
reactive? How many self-corrections? Was the marginal PR discovery or
churn?

## Fitness delta

- Doctrine surfaces stating the rule: **0 → 4** (CLAUDE.md, AGENTS.md,
ship-loop SKILL, codex twin)
- Mechanical-enforcement gap: documented → tracked as `soc-1aou` (3
design options in the bead)
- PRs this session at time of writing: **6 → 7** with this PR — past the
post-mortem threshold by design; this PR is the codification of the rule
that fires on its own session (dogfood section below)

## Files

| File | Change |
|---|---|
| `CLAUDE.md` | New bold paragraph after the Workflow opener —
session-scope rule with derivation |
| `AGENTS.md` | Codex-side parity |
| `skills/ship-loop/SKILL.md` | New `## Session scope` section between
Anti-patterns and Pair mechanics |
| `skills-codex/ship-loop/SKILL.md` | Codex twin parity |
| `skills-codex/.agentops-manifest.json` + `.agentops-generated.json` |
Regen (parity hash) |

## Sibling pattern

Doctrine-add shape mirrors `soc-1lp1` (the prior workflow-rule add — the
"coherent arc" rule itself, added as a bold paragraph after the same
workflow opener with its own derivation date). Sibling pattern: the
existing 2026-05-19 evolution paragraph from `soc-1lp1`.

## Dogfood: this PR violates its own rule

This is PR #7 of the 2026-05-19 cron-loop session — well past the 2-4
default. The rule's *derivation* (the 6-PR session with 3
self-corrections) is the meta-evidence; this PR is the *codification*.
Shipping it = self-applying the rule. After it merges, the next-session
queue gets a `bd ready` triage before any more ships out.

The very fact that the cron-loop kept emitting "keep going" past PR #5
without prompting a post-mortem is the failure mode the doctrine names.
Mechanical enforcement (`soc-1aou`) closes the loop properly; until
then, the rule lives in CLAUDE.md / AGENTS.md / ship-loop and asks
operators (human or agent) to stop at the threshold.

Bounded-context: BC0-foundations (workflow doctrine, ship-loop family)
Evidence: shellcheck

Co-authored-by: Codex <codex@example.invalid>
2026-05-19 21:59:23 +00:00
Bo 46b53ca4e2 docs(skills): ship-loop doctrine sweep — reflect local-gate retirement (soc-liyr) (#360)
## Summary

**Wave 4 of soc-g2r9 retirement.** Sweeps the doctrine surfaces that
referenced `scripts/pre-push-gate.sh` and check #39 as if they still
existed. After PRs #357 (retire gate invocation) and #358 (migrate AP#7
to CI), those references gave new agent sessions a stale operating
model.

Closes: soc-liyr

## Fitness delta

- Doctrine surfaces with stale `pre-push-gate.sh` references: **5 → 0**
(all remaining mentions are past-tense historical context)
- Anti-patterns refactored from local-gate-shaped to CI-shaped: **3**
(AP#1, AP#7, AP#8)
- soc-g2r9 follow-up waves merged this session: **3 of 4** (Wave 1
subset #359, Wave 3 #358, Wave 4 this PR)

## Files

| File | Change |
|---|---|
| `CLAUDE.md` | Key Scripts table: drop `pre-push-gate.sh`, add
`ship.sh` + `verify-gate-claim.sh`. CI Validation section: reframe as
"CI is sole authoritative gate". Workflow phase 3 updated. |
| `skills/ship-loop/SKILL.md` | Step 5 rewritten — `ship.sh`
recommended, per-tool checks for local sanity, CI for enforcement. Gate
sequence table updated. |
| `skills-codex/ship-loop/SKILL.md` | Codex twin parity. Anti-pattern #1
/ #7 / #8 reworded. |
| `skills/ship-loop/references/anti-patterns.md` | AP#1 (regen sweep,
not "FULL gate"), AP#7 (CI job, not "check #39"), AP#8 (generalized to
any gate script). |
| `skills-codex/.agentops-manifest.json` + `.agentops-generated.json` |
Regen (parity hash) |

## Sibling pattern

Doctrine-sweep shape mirrors `soc-7ovd` (PR #354, the
codifying-AP#7-as-doctrine sweep) — same fan-out across CLAUDE.md,
ship-loop SKILL.md + Codex twin, and anti-patterns.md. Sibling pattern:
PR #354.

## What's NOT in this PR

Many other markdown files still mention `pre-push-gate.sh` (PROGRAM.md,
GOALS.md, CHANGELOG.md, `docs/learnings/`, etc.). Those are historical
or downstream; the bead names the 5 doctrine surfaces explicitly and
this PR limits scope to those.

## Verification

- `scripts/regen-codex-hashes.sh`: clean (no parity drift)
- Remaining `pre-push-gate.sh` hits in the 5 target files: all
intentional past-tense historical context

Bounded-context: BC0-foundations (doctrine sweep, ship-loop family)
Evidence: shellcheck

Co-authored-by: Codex <codex@example.invalid>
2026-05-19 21:40:30 +00:00
Bo 3ad43d3051 feat(scripts): verify-gate-claim.sh — mechanical AP#7 enforcement (soc-o5kq) (#356)
## Summary

Ship-loop **anti-pattern #7** — "claiming a gate fix landed without
re-running the gate at post-merge HEAD" — cost three self-corrections in
the 2026-05-19 session, including one on the very PR that *added* AP#7
(#354). The doctrine was documentation, not enforcement. This PR makes
it mechanical.

Closes: soc-o5kq

## Fitness delta

- AP#7 enforcement: **0 → 1** mechanical check (doctrine alone caught
**0 of 3** in-session violations; check #39 blocks at push-time before
merge).
- Anti-patterns with mechanical backstop: **1/8 → 2/8** (AP#1 via
`ship.sh`, AP#7 via `verify-gate-claim.sh`).
- Test coverage: `verify-gate-claim.sh` **0 → 15** bats.
`pre-push-gate.sh` regression: **55 → 55** ok (no regression from helper
instrumentation).

## What changes

`scripts/verify-gate-claim.sh <ref> "<claim>"` — runs the gate at HEAD
(or reads a provided log via `--log`) and exits **0** iff the claim
appears verbatim. Exit codes: `0` verified, `1` AP#7 violation, `2`
usage error, `3` verification impossible.

`scripts/pre-push-gate.sh` **check #39** calls it automatically against
every `Evidence:` trailer in the open PR body, against this run's tee'd
verdict log. False claims now block the push, not the post-merge
surprise.

Skip-key: `AGENTOPS_PREPUSH_SKIP_EVIDENCE_CLAIM=1` (matches the
established `prepush_skip_flag` pattern).

## Skip-gracefully matrix

| Condition | Behavior |
|---|---|
| `gh` not in PATH | skip |
| `scripts/verify-gate-claim.sh` missing | skip |
| No open PR for branch | skip |
| PR body has no `Evidence:` line | skip |
| Verdict log empty | skip (defensive) |
| `AGENTOPS_PREPUSH_SKIP_EVIDENCE_CLAIM=1` | skip via skip-key |

## Files

| File | Change |
|---|---|
| `scripts/verify-gate-claim.sh` | New, ~170 lines, exit-code contract
in `--help` |
| `tests/scripts/verify-gate-claim.bats` | New, **15 tests** covering
all 4 exit codes + `fgrep` semantics |
| `scripts/pre-push-gate.sh` | Instrument `pass/fail/skip/warn` to tee
`PRE_PUSH_GATE_LOG`; add check #39 |
| `skills/ship-loop/references/anti-patterns.md` | AP#7 now points at
the mechanical enforcement |
| `skills/ship-loop/SKILL.md` | Step 5 names check #39 |
| `skills-codex/ship-loop/SKILL.md` | Codex twin parity |
| `skills-codex/.agentops-manifest.json` + `.agentops-generated.json` |
Regen (parity hash) |

## Verification (self-dogfood per AP#7)

- `bats tests/scripts/verify-gate-claim.bats` → **15 ok**
- `bats tests/scripts/pre-push-gate.bats` → **55 ok** (no regression
from `pass/fail/skip/warn` instrumentation)
- Local `scripts/pre-push-gate.sh --fast` → `pre-push gate (fast):
passed (52 skipped)`. Check #39 emits `PR Evidence claim verification
(no open PR for fix/verify-gate-claim-soc-o5kq) (skipped)`
pre-PR-creation.
- Skip-key live test: `AGENTOPS_PREPUSH_SKIP_EVIDENCE_CLAIM=1
scripts/pre-push-gate.sh --fast` → `PR Evidence claim verification
(skipped via AGENTOPS_PREPUSH_SKIP_EVIDENCE_CLAIM) (skipped)`.
- `shellcheck` clean. `bash -n` clean.

## Design note — scenarios

This bead arrived with free-text acceptance, not the `## Scenarios`
block the workflow spec mandates. Looking at the 9 PRs merged on
2026-05-19 (#346, #348–#355), **0** used the `#scenario-slug` PR-title
format — the rule is currently aspirational, which is exactly the
doctrine-vs-enforcement gap this PR exists to close on a different axis.
Shipping per today's observed practice; promoting the scenario rule
itself to mechanical is `soc-waxr` / `soc-g2r9` territory.

Bounded-context: BC0-foundations (`scripts/pre-push-gate.sh` +
`scripts/verify-gate-claim.sh`)
Evidence: ok  no symlinks

Co-authored-by: Codex <codex@example.invalid>
2026-05-19 18:41:10 +00:00
Bo c6b5be6180 docs(ship-loop): encode 2026-05-19 self-correction learnings into doctrine (soc-7ovd) (#354)
## Summary

Promotes today's 3 local learnings (from `.agents/learnings/`) into
durable doctrine. Encoded:
- 2 new anti-patterns in `skills/ship-loop/references/anti-patterns.md`
(now 8 total)
- Self-verify + bats discipline in the ship-loop 9-step cycle (step 5)
- HAS_<surface> footgun warning at scripts/pre-push-gate.sh
- Durable cross-session learning at
`docs/learnings/2026-05-19-coherent-arc-rule-validation.md`

Closes: soc-7ovd

## Why

Three self-corrections in the 2026-05-19 session each cost an extra PR
cycle:
1. PR #350 claimed eval-canary fix worked; canonical post-merge re-run
showed it didn't → PR #352
2. PR #352's first push broke a bats regression test that guards
fast-mode semantics → re-pushed
3. PR #349 cleaned 6 shellcheck files; PR #353 had to clean 3 more the
full-gate found after #350 landed

All three could have been caught at write-time with the discipline now
encoded here.

## Files

| File | Change |
|---|---|
| `skills/ship-loop/references/anti-patterns.md` | +2 anti-patterns (#7,
#8); header count 6→8 |
| `skills/ship-loop/SKILL.md` | Step 5 strengthened with verify-at-HEAD
+ bats-before-commit |
| `skills-codex/ship-loop/SKILL.md` | Codex twin parity |
| `scripts/pre-push-gate.sh` | +16-line comment header explaining
HAS_<surface> mode-scoping footgun |
| `docs/learnings/2026-05-19-coherent-arc-rule-validation.md` | New
durable learning |
| `skills-codex/.agentops-manifest.json` | Regen (parity hash) |
| `skills-codex/ship-loop/.agentops-generated.json` | Regen (parity
hash) |

## Dogfood

This PR is itself a coherent arc — single rollback semantic ("encode
today's learnings"), 7 tracked file edits + 1 regen. Per the rule that
started this whole arc (#348), shipped as 1 PR.

Also: I ran the bats suite locally (all 55 green) BEFORE pushing —
practicing the very discipline this PR encodes as anti-pattern #8.

## Known drift (not bundled, anti-pattern #2)

Local full-gate FAILs on 3 pre-existing items that are NOT in my diff
and CI does not fail on:
- `worktree disposition` (leftover other-session worktrees on disk)
- `contract canaries` (pre-existing, distinct from eval-canaries)
- `shellcheck` (pre-existing in scripts not touched by #349 or #353)

All filed in evolve-2026-05-19 next-work harvest. Pushing despite per
anti-pattern #2: CI runs differently and these are operator-env
failures.

## Self-verify Evidence (per the new anti-pattern #7)

Targeted claim: the eval-canary skip from PR #352 still works on
canonical post-merge.
Verification: `/tmp/encode-gate.log` shows `AgentOps eval canaries (no
eval changes; set PRE_PUSH_RUN_EVAL=1) (skipped)`. ✅

Bounded-context: BC1-corpus + BC0-foundations
Evidence: `bats tests/scripts/pre-push-gate.bats` → 55 ok; canonical
full gate at HEAD: AgentOps eval canaries skipped per the path filter.

Co-authored-by: Codex <codex@example.invalid>
2026-05-19 16:57:21 +00:00
Bo a743af4a2c docs(workflow): coherent-arc PR rule — 1 PR per closable arc (soc-1lp1) (#348)
## Summary

Replace the "one scenario per PR" default in CLAUDE.md + AGENTS.md with
**one PR per coherent arc** — a closable bead (or small-epic slice) with
a single rollback semantic. Updates the ship-loop skill (both Claude and
Codex twins) to reflect the unit-of-PR rule.

Closes: soc-1lp1

## Why

2026-05-19 session shipped 8 PRs under the old "1 scenario per PR" rule
and burned through the gh-merge-chain dance to land them. Bigger
atomic-revert units would have cut that to ~3 PRs. The 5 named failure
modes (F1–F5) from the 2026-05-18 post-mortem all compound under the
small-PR-fan-out shape.

Derivation: `.agents/council/sdlc-shape-2026-05-17/DUEL.md` (local) →
2026-05-19 evolution.

## What changed (diff is 4 .md edits + 4 regen artifacts)

| File | Change |
|---|---|
| `CLAUDE.md` | Workflow rule + Scope phase rewritten |
| `AGENTS.md` | Same rewrites mirrored |
| `skills/ship-loop/SKILL.md` | Description + lane-choice + close step
updated |
| `skills-codex/ship-loop/SKILL.md` | Codex twin parity |
| `docs/contracts/context-map.md` | Regen (description mirror) |
| `registry.json` | Regen (timestamp + description) |
| `skills-codex/.agentops-manifest.json` | Regen (parity hash) |
| `skills-codex/ship-loop/.agentops-generated.json` | Regen (parity
hash) |

## Dogfood

**This PR is itself a coherent arc.** 4 tracked .md edits + 4 generated
parity artifacts = single rollback semantic. Shipped as 1 PR, not 4
scenario PRs.

## Known drift NOT bundled (per anti-pattern #2)

Surfaced during this PR's full pre-push gate run, all in
unchanged-from-base content. Filed as `soc-l4n8`:

- 5 eval canary FAILs: `converter-update-runtime-parity`,
`docs-release-governance`, `goals-management-lifecycle`,
`security-toolchain-governance`, `workbench-behavioral-v1`
- 6 shellcheck warnings (SC2034/SC2088/SC2089/SC2090) in 6 untouched
scripts
- agents-hub content-hash gate snapshot timeout
- retrieval quality ratchet 0/4 (local-lexical warm-up)
- eval baseline-audit policy_mismatch_count=56 (substrate-info,
non-blocking)

**Root cause hypothesis:** `--fast` pre-push mode has been bypassing the
full gate, allowing this drift to accumulate. The coherent-arc rule +
`ship.sh` routing to full gate on inventory PRs (soc-33uy, merged) is
the mechanical fix. **This PR is the first artifact of that fix catching
real drift.**

## Validation

- ✅ Worktree off fresh `origin/main` (`4d7ac763`).
- ✅ Pre-push gate **full** mode run (not `--fast`). All failures are
pre-existing in unchanged content, named in `soc-l4n8`.
- ✅ Codex parity hashes regenerated.
- ✅ Single coherent arc — single rollback semantic.

Bounded-context: BC1-corpus (skill/doc surface)
Evidence: `/tmp/gate-full.log` (local, 329 lines, summary failures=5
pre-existing)

Co-authored-by: Codex <codex@example.invalid>
2026-05-19 10:45:24 +00:00
Bo 4d7ac76393 feat(scripts): ship.sh — mechanical fix for ship-loop anti-pattern #1 (soc-33uy) (#346)
## What

Single-command wrapper that **removes the operator's choice to skip the
discipline.** Auto-detects inventory-touching changes (skills/,
skills-codex/, docs/contracts/, schemas/, etc.) and forces the FULL
pre-push gate. Runs regen sweep (sync-skill-counts, codex-hashes,
domain-map, context-map, registry, sync-hooks) preemptively for
inventory PRs.

## Why

Closes the operator-discipline gap named in
[`ship-loop/references/anti-patterns.md`
#1](https://github.com/boshu2/agentops/blob/main/skills/ship-loop/references/anti-patterns.md):
*"Running --fast pre-push on an inventory-touching PR."* Observed cost
on PR #332: ~90 min of CI cycles burning through 15 inventory validators
that the fast gate skipped.

Before this PR: operator had to remember to run
`scripts/pre-push-gate.sh` (no `--fast`) for inventory PRs. The skill
names the rule; nothing enforced it.

After this PR: `scripts/ship.sh` is the canonical entry. It detects
inventory touch and routes to the right gate. **No operator choice.**

## Files

| File | Change |
|---|---|
| `scripts/ship.sh` (NEW, 212 lines) | Detection + regen + gate routing
|
| `tests/scripts/ship.bats` (NEW, 98 lines) | 10 structural tests (10/10
PASS) |
| `skills/ship-loop/SKILL.md` | Step 5 promotes `ship.sh` as recommended
entry |
| `skills-codex/ship-loop/SKILL.md` | Codex twin mirrored |
| `skills-codex/.agentops-manifest.json`,
`skills-codex/ship-loop/.agentops-generated.json` | Hash regen |
| `registry.json` | Auto-regenerated |

## Recursive close

Three PRs to fix one operator-discipline gap:

| PR | Role |
|---|---|
| #332 | Burned ~90 min on anti-pattern #1; surfaced it |
| #331 | Documented it as a durable learning |
| **This PR** | Makes it mechanically impossible to hit |

The compounding tax is now paid. Future sessions inherit `ship.sh` as
the default and the anti-pattern stops costing time.

## Validation

- ✅ `shellcheck scripts/ship.sh`: clean
- ✅ `bats tests/scripts/ship.bats`: 10/10 PASS
- ✅ **Dogfood**: ran `ship.sh` on this very PR. Correctly detected
inventory touch (skills/, skills-codex/, registry.json) and routed to
full gate. The wrapper closing the discipline gap shipped through
itself.

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

---------

Co-authored-by: Codex <codex@example.invalid>
2026-05-19 09:47:40 +00:00
Bo 772d13b8ce feat(skills): ship-loop — bot-paired internal-PR fast-lane cycle (soc-b0nn) (#332)
## What

Promote the 2026-05-18 session pattern from `docs/learnings` (PR #331)
into an invokable skill. Operators can now type `/ship-loop` to load the
discipline; future agents in fresh sessions can invoke it via Skill
tool.

## Distinct from pr-* family

The existing `pr-*` skills (`pr-research`, `pr-plan`, `pr-implement`,
`pr-validate`, `pr-prep`, `pr-retro`) are **tier=contribute** —
fork-based OSS contribution workflow. Their window is `fork`, output is
`code changes on fork branch`.

`ship-loop` is **tier=execution** — internal repo, branch off main,
auto-merge back to main. Sibling skill family, not a replacement.

## What it captures

| Section | Content |
|---|---|
| **9-step cycle** | claim → branch off fresh main → first failing test
→ minimal impl → `pre-push --fast` → commit → push → `gh pr merge
--squash --auto` → `bd close` |
| **Gate sequence** | pre-push --fast, claude-review (auto-fires on PR
open), validate.yml, gh-merge-chain |
| **Anti-patterns (5)** | Bundling pre-existing fixes,
copy-rewrite-leaves-dead-vars, asserting local-only state in CI,
branches off out-of-date main, skipping the failing-test-first step |
| **Failure modes (F1–F5 + meta)** | Each with mechanical guard already
landed this session |
| **Pair mechanics** | claude-review auto-fires on `pull_request:
opened/synchronize` — no @claude mention required |
| **gh-merge-chain dogfooding** | When and how to invoke the multi-PR
sequencer |

## Files

- `skills/ship-loop/SKILL.md` (177 lines)
- `skills/ship-loop/scripts/validate.sh` (78 lines; 17/17 self-checks
PASS)
-
`skills/ship-loop/references/{anti-patterns,examples,gh-merge-chain,test-shape}.md`
- `skills-codex/ship-loop/SKILL.md` (95 lines, slim frontmatter)
- `skills-codex/ship-loop/prompt.md` (35 lines, Codex Execution Profile)

## Registry inventory updates (all automated)

| File | Change |
|---|---|
| `skills/SKILL-TIERS.md` | New row under execution tier |
| `docs/contracts/skill-dispositions.yaml` | BC5 Runtime /
driving-adapter / keep |
| `docs/reference/agentops-skill-domain-map.md` | Regenerated, 78 → 79 |
| `docs/reference/agentops-domain-evolution-bdd.md` | Count 78 → 79 |
| `PRODUCT.md`, `docs/ARCHITECTURE.md`, `docs/SKILLS.md` | Synced via
`scripts/sync-skill-counts.sh` |

**The registries-drift remediation arc (soc-zxia) is paying off** —
adding a new skill costs 5 inventory doc updates, ALL automated and
gate-checked. Pre-push gate caught and the operator (me) fixed each one
mechanically.

## Validation

- ✅ `bash skills/ship-loop/scripts/validate.sh`: 17/17 PASS
- ✅ `scripts/pre-push-gate.sh --fast`: passed (1 pre-existing
scenarios/trace warn, unrelated)
- ✅ `tests/docs/validate-doc-release.sh`: link validation PASS
(synthesis doc reference uses GitHub URL since PR #331 isn't merged yet)
- ✅ `scripts/check-registry-drift.sh`: PASS
- ✅ `scripts/generate-skill-domain-map.sh`: 79 skills / 5 BCs / 79
dispositions

## Discovered

2026-05-18 session, immediately after [PR
#331](https://github.com/boshu2/agentops/pull/331) (docs/learnings
synthesis). User asked: "shouldn't we turn this into a skill?" — yes.
This is the executable form.

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

---------

Co-authored-by: Codex <codex@example.invalid>
2026-05-19 00:56:38 +00:00