Files
Bo 10f0277bdb Legible membrane, Train 2: what a stranger meets (#1100)
## Legible membrane, Train 2: what a stranger meets

Provenance: the 2026-09-02 field audit of this repo against
mattpocock/skills, compound-engineering, and the jsm corpus, findings F5
through F9. This train is sized by a consumer inventory built with `rg`
on the tip before any lane was written; the promoted-set directory move
the audit proposed is deferred because that inventory shows
skill-builder backing two blocking gates, swarm pinned by the cathedral
gate and a routing golden, using-gc required by Go code, and `ao skills
link` unable to install a second root. That inventory is the plan for a
later train.

**What changes.**
- **Archival sweep by consumer disposition.** 172 audit snapshots, 29
pawl receipts, the `evals/workbench` and `evals/membrane` trees with
their two bats consumers, four stray scratch docs, four retired eval
contracts, and nine caller-less `scripts/check-*.sh` are deleted; git
history is the archive. Every machine list that referenced them is
pruned (evidence-grounding baseline, preamble grandfather, broken-links
allowlist, `.gitattributes`, `.gitignore`, two eval fixtures, the
workflow-coverage deferred list). `docs/audits/manifests/` and
`.agents/ao/config.yaml` survive because they have live readers. About
48,000 lines.
- **Three skills retired.** `goals` (alias of fitness), `shared`
(tombstone), and `scope` (folded into plan step 3 as five write-scope
checks). Consumers edited; the probe denominator exclusion for goals
pruned; Codex package and golden count pins updated.
- **Negative routing** on research, codebase-recon, reverse-engineer,
premortem, one-way-door, and council, all within the 180-char budget,
with a teardown golden (`rq-08`). One wording was changed after the
router's prefix stemming showed "repository teardown" leaking into the
wrong skill.
- **Every promoted skill answers "It's working if"** with observable
tells in backticks, and carries a paste-ready `## Prompt` with a
concrete subject. Two fictional `ao` subcommands a draft prompt named
were caught by the body-ref validator and replaced with real commands.
- **Doctrine diet on the core five.** rpi, plan, implement, validate,
and anti-ceremony drop from about 5,100 words to 3,600 (bodies from
4,700 to 3,150) by moving the shared ownership boundary, dated
incidents, and mechanics tables into step-loaded references
(`skills/rpi/references/boundaries.md`,
`skills/validate/references/mechanics.md`,
`skills/plan/references/ground-truth-routing.md`). Every cathedral
canary and every skill validator grep survives unchanged.

- **ADR-0018** records the goals, shared, and scope retirement; the
cathedral gate tombstone and the routing goldens cite it instead of
ADR-0017.
- **Router and twins.** `ao skills find` holds a description's "Not for
X; that is <sibling>." sentence out of its haystack, so premortem no
longer ranks first for "is this live decision reversible" (golden
`rq-10` pins the reciprocal of `rq-02`); a penalty variant was tried and
reverted because it suppressed skills the caller named outright. A
declared trigger phrase of two or more words quoted whole in the query
now earns the name weight once, so "check this change" lands on validate
rather than on reality-check's name token; a live-catalog test pins
seven such queries. Single-quoted YAML descriptions unescape `''`. The
Codex catalog keeps the exclusion sentence, and a closing `>` no longer
turns `<run-id>/codebase-recon.json` into an invocation.
- **Residue the judges found.** handoff, learn, and status open a `##
Contract` heading after their tells; validate's prompt names its helper
at `skills/validate/scripts/validate.py`; the explicit-skill prompt
catalog names only live skills (five stale prompts replaced by nine,
floor 20 restored, TESTING.md names the suite); the corpus-delta receipt
binds the runner's path and SHA-256 and labels a `live_agent` claim as
an unverified caller declaration; the probe README and ledger describe
the 12-skill denominator; SKILL-API counts 30 of 54.

**Evidence on the tip.** Regen check clean; full gate green with a
HEAD-built binary; CI's bats command green; Go build/vet/test green;
lint clean; security gate quick PASS; docs-build warnings did not rise.
Fresh validation by Fable 5.1 (caller-elected) and a cross-family read
by Codex, both recorded in the PR thread.

---------

Co-authored-by: Bo <bofuller55@gmail.com>
2026-09-03 19:52:55 +00:00
..

Learnings Index

Durable observations and rules-derived-from-mistakes extracted from live sessions. Each file is a single learning; the date prefix is the day it was captured.

For canonical contracts (what the system SHOULD do), see ../contracts/. For research deep-dives, see ../brainstorms/ or ../research/. Learnings are the "what we learned by running" layer in between.

Catalog (chronological, newest first)

Date File One-line takeaway
2026-06-12 epic-close-needs-target-disposition-not-children-closed.md Epic close requires per-target disposition (LANDED/SCHEDULED/DROPPED); children-all-closed misses never-created children.
2026-06-12 go-exec-waitdelay-grandchild-pipes.md exec.CommandContext + buffer pipes needs WaitDelay — deadline kills the child, grandchildren holding pipes block Run().
2026-06-12 codex-runtime-review-auth-and-scope.md Codex runtime receipts need executable auth/schema/evidence guardrails before planning ceremony.
2026-05-30 claim-green-verify-first.md Claim a PR is green only AFTER running the gates — self-report-over-verification is the repeat failure mode.
2026-05-13 cli-wiring-cycle-shape.md CLI-wiring is a repeatable ~10-min cycle-shape: parent noun + verb subcommand + injectable func; 3 production adapters exposed in 3 cycles.
2026-05-13 loop-context-drift-87-cycle-observation.md /loop context accumulates but disk-state ledger protects correctness — soc-wx55q.1 P1 may be P3.
2026-05-13 substring-sed-rename-overreach.md Before any bulk sed rename, enumerate ALL substring-containing identifiers and classify by concept.
2026-05-13 bc-ports-wire-up-arc.md 12 production adapters in 11 cycles via repeatable file-triplet pattern; 8 distinct adapter shapes proven.
2026-05-12 parity-surface-inventory-grew-from-4-to-7-across-cycles-64-70.md The parity surface count between Claude and Codex grew incrementally; tracking the count caught drift.
2026-05-11 evolve-skill-friction-from-13-cycle-session.md 6 concrete skills/evolve/SKILL.md patches identified from direct cycle-by-cycle observation.
— orchestrator-compression-anti-pattern.md Don't collapse /research → /plan → /pre-mortem into a single inlined call; strict delegation matters.

When to add a learning here

Add a file when one of these is true:

  1. A long arc landed and the lessons are non-obvious. Example: the cycle-122 BC-ports wire-up arc (12 cycles, 8 adapter shapes proven) — future operators reading just the commit messages would miss the meta-pattern. The arc summary captures it.
  2. A mistake produced a rule. Example: the cycle-127 substring- sed overreach learning. The mistake was caught, the corrective commit landed, and the rule that prevents repeating it is now durable.
  3. Empirical observation refines a prior theoretical concern. Example: cycle-132 documented 87 fires of /loop showing the feared context-drop didn't materialize because disk state protects correctness — refining soc-wx55q.1.

Do NOT add a file for:

  • One-off bug fixes (the commit message is enough)
  • Already-canonical-contract material (put it in ../contracts/)
  • Status updates on in-progress work (use bd comment or .agents/evolve/cycle-history.jsonl)

File shape

---
title: <single-sentence statement of the learning>
date: YYYY-MM-DD
tags: [topic1, topic2, ...]
source: <where the observation came from — cycle range, incident, PR>
companion: <optional sibling file>
---

# <repeat title>

<short paragraph: what happened>

## What went wrong / What we learned

<concrete details>

## The rule

<numbered or bulleted, actionable for future cycles>

## See also

<other learnings, contracts, beads>

Frontmatter is required so ao lookup and future indexers can rank. The body shape is a guideline, not a contract — match what the observation demands.