Dual-support increment 3 (the user-facing completion). AgentOps ships to users
who mostly track with bd; operating-loop skills hardcoded `br`, breaking them.
Repoint bead CRUD (ready/update/close/create/dep/show/list, non-jq) and the
children-extraction pattern to the tracker-agnostic `ao beads exec` (bd-or-br)
across skills/**/SKILL.md + references. In THIS repo (br) there is no behavior
change; the win is bd users.
- children pattern `br show <epic> --json | jq '…parent-child….id'` →
`ao beads exec children <epic>` (post-mortem closure-integrity-audit + the
latent invalid `br children` in rpi phase-data-contracts).
- probe blocks re-gated `command -v br` → `command -v ao` (bd users have ao).
- parity_only codex twins refreshed via codex-sync + hashes; bespoke twins are
hand-maintained (codex-sync skips them by design) and left for a deliberate
follow-up.
- jq-shape `br … --json | jq '<shape>'` sites left on br (increment 4 will
normalize the --json shape across trackers).
- rpi/SKILL.md trimmed 280→249 lines (meta-tier ≤250): receipt JSON folded into
the existing phase-data-contracts.md, rpi_state block compacted, redundant
Reference-Documents entries dropped.
- snippet validators (ao_snippet_resolve.py lib + validate-skill-body-refs.sh)
taught that `ao beads exec` is a flag-forwarding passthrough, so tracker flags
after it are not validated against ao's help.
'ao help <anything>' always exits 0, so the help-mode predicate detected
ZERO removed commands — the skills snippet gate was decorative. Default
is now AO_RESOLVE_MODE=strict (env override kept), resolving against a
source-built binary carrying the archived-command tags.
Strict measurement over skills/ + skills-codex/ found exactly one
offender: a fabricated 'ao daemon status' citation in the release skill's
worked-example notes (ao daemon removed, ADR-0009) — fixed at source and
hand-mirrored into the bespoke twin (hashes regenerated). No baseline
needed. Teeth proven: a probe skill citing 'ao rpi status' passes
help-mode, FAILS strict.
Verified: strict validator green over both trees; fixture bats 5/5
(fake-ao made mode-agnostic); codex manifest OK (60 skills); docs
validator (shared lib) unaffected; shellcheck clean.
Escape fix for the ADR-0012 command archival (age-focus-membrane-bookkeeper-m1wg.13/.14):
archiving a command behind //go:build flywheel|legacy removed it from the
default `ao` binary, but skills legitimately document those commands (e.g.
skills/curate/SKILL.md + skills/flywheel/SKILL.md reference `ao harvest`).
validate-skill-cli-snippets.sh built a spine-only binary, so those snippets
false-failed the blocking skill.cli-snippets gate — a LATENT main breakage that
only surfaced when a later skills/** change routed the gate.
Build the validation binary with -tags "flywheel legacy" so snippets validate
against the full (spine + archived) command surface. A skill may reference any
command; the archive is a packaging concern, not a validation boundary.