Development record
abcd Audits Its Own Prompts on Every Self-Disembark
Press Release
abcd audits its own agent prompts whenever you disembark abcd-cli. Pass C automatically runs a SOTA-prompt-audit pass over every
agents/*.mdfile in the repo, comparing each against its research baseline in.abcd/development/research/prompting/agents/<name>.md. Findings ship as part of the lifeboat, ready to inform the next round of prompt iteration. abcd uses its own infrastructure to maintain its own quality."Eat your own dog food," said Kira, open-source maintainer. "Disembarking abcd-cli tells me which of my prompts have drifted from their research basis. The SOTA audit becomes part of the lifeboat itself, not a separate process to remember."
Why This Matters
abcd's prompt-quality layer D (periodic SOTA audit) is a manual once-per-release ceremony. Easy to forget; easy to skip. The whole point of abcd is to automate lessons-extraction; making abcd's own quality assurance manual is hypocritical.
This intent closes the loop. Once abcd is mature enough to reliably self-disembark, the SOTA audit becomes a Pass C step that runs automatically. abcd literally uses its own oracle infrastructure to audit its own agents.
What's In Scope
- Pass C agent:
prompt-sota-self-auditor(only runs on disembarks of abcd-cli itself, detected via repo metadata) - Reads
agents/*.md+.abcd/development/research/prompting/agents/<name>.mdpairs - Generates findings per agent: alignment, drift, recommendations
- Findings included in the disembark report and as a separate lifeboat artefact
- Optional: self-applies low-risk recommendations (typo fixes, footer updates) automatically
What's Out of Scope
- Generic "audit any project's prompts" — this is specifically abcd self-audit
- Auto-applying high-risk prompt rewrites (always requires human review)
- Cross-version comparison of prompt drift — handled by general SOTA audit
Acceptance Criteria
BDD format, per
itd-1-acceptance-gates. These gates are checked byintent-fidelity-reviewerwhen this intent moves toshipped/.
- Given abcd-cli itself runs
/abcd:disembark pack <repo> <path>, when Pass C executes, thenprompt-sota-self-auditoractivates, reads every pair(agents/<name>.md, .abcd/development/research/prompting/agents/<name>.md), and produces per-agent findings inaudit/prompt-sota-<ts>.{json,md}covering alignment, drift, and recommendations. - Given any other repo (not abcd-cli) runs
/abcd:disembark pack <repo> <path>, when Pass C executes, thenprompt-sota-self-auditordoes NOT activate — the agent is gated byconfig.json["meta"].project_name == "abcd"(or equivalent self-detection) and is silent on third-party repos. - Given the audit produces findings, when the lifeboat is written, then the findings are present both in the disembark report ("Self-audit summary") AND as a separate lifeboat artefact (
audit/prompt-sota-<ts>.json) so they survive embark to a downstream copy. - Given the audit's drift exceeds a configured threshold for any agent, when the disembark concludes, then the disembark report flags the lifeboat as "ship-with-audit-warning" but does NOT refuse to ship — auditing is informational, not gating.
- Given an agent's research file is missing (no
.abcd/development/research/prompting/agents/<name>.mdexists), when the auditor runs, then the agent is reported as "no research baseline" and a separate finding is emitted suggesting the user create the file rather than treating absence as drift. - Given the audit's low-risk recommendations include typo fixes and footer updates, when the user runs
/abcd:disembark pack <repo> <path> --apply-self-audit, then those low-risk changes are applied to the working tree as a separate commit BEFORE the lifeboat is packed AND high-risk recommendations remain in the report for human review.
SOTA
Surveyed on 2026-10-23; sources, evidence tiers and the local fit risks are in the models, prompts and measurement SOTA note. Self-detection and recursion depth are internal plumbing and needed no outside practice; the audit's method did.
- Reflective prompt rewriting works when it has a metric and traces to read. GEPA beats GRPO by 6 % on average and up to 20 % with up to 35× fewer rollouts, and MIPROv2 by over 10 %, by reading execution traces and proposing textual edits (Agrawal et al., ICLR 2026). Its precondition is the point: without a metric and a trainset, an audit of prose against prose is an opinion.
- Prompt advice is model-generation-specific. The vendor's current prompting reference is organised as model-specific guidance first, then shared techniques, then migration notes between generations (Claude prompting best practices). "Drift from the baseline" therefore has two sources, the prompt and the model the baseline assumed, and a finding must say which.
- Judges over-flag and detailed rubrics make them harsher (judge-calibration survey), so an auditor that returns findings for every agent carries no information; a clean verdict per agent must be an admissible result.
- "Low-risk" edits are behaviour changes until fixtures say otherwise:
formatting alone moved accuracy by up to 76 points (Sclar et al., ICLR
2024). The
--apply-self-auditpath goes through itd-14's bump-and-golden run, never around it. - The host already ships a prompt audit.
/doctor prompt-auditchecks CLAUDE.md, AGENTS.md and the rules, skills, commands, subagents and output styles under.claude/and~/.claude/for "instructions written for older models", references to files or commands that do not exist and files that contradict each other, returns findings with proposed edits, and changes nothing until asked (Claude Code memory docs). That is the nearest shipped analogue of the model-generation drift named above. It audits a path only when given one (abcd'sagents/*.mdare outside its default scope), keys no finding to a baseline section and gates nothing on fixtures; the auditor here adds the baseline keying, the generation stamp and the clean-verdict rule, and whether it defers to the host's audit for instruction files is a plan-time question.
Path 2: a native, host-delegated auditor whose findings are keyed to a baseline section and carry the model generation the baseline assumed, with a seam: each finding is recorded as a candidate-plus-feedback pair (prompt section, textual feedback, citation, generation) in the shape a GEPA-style optimiser consumes, so a later optimiser reads the audit's record rather than replacing it. No dependency. The independent fit-challenge runs at plan time.
Open Questions
- How does abcd detect "this is a self-disembark" — repo name match?
.abcd/config.json["meta"].project_name? - (SOTA 2026-10-23) Whether the auditor must itself carry an itd-81 corpus (known-good prompts it should leave alone) before its findings count, or whether the first disembark's findings are the corpus-building run.
- Should the audit gate the lifeboat (refuse to ship if drift exceeds threshold) or just report?
- What's the recursion depth — does the prompt-sota-self-auditor itself get audited? Probably not (turtles stop somewhere).
Audit Notes
- 2026-10-02 — Declared mutual pair with itd-14 (the technical facilitator's ruling CY2 of 2026-10-02, verbatim: "SAME, DECLARED PAIRS — each direction names the piece it needs"). This record's builds_on itd-15 needs the self-dogfooded SOTA audit's per-agent findings, which this record's sixth criterion writes into the affected prompts' changelogs as
audit:entries. itd-15's builds_on itd-14 needs the structured per-prompt changelog that replaces the## Last SOTA Audit:footer, which the audit's low-risk self-applied footer updates write into. Both edges stand. The record has no field record-lint's edge_cycle rule reads as a declared pair, so the linter still reports the cycle at warn until it does (iss-2610020836255174). Each piece is read from the two records' own scope, criteria and decisions; the ruling names none. Recorded by lane rd2 of autonomous run A.
Frontmatter
| id | itd-15 |
|---|---|
| type | intent |
| lifecycle | drafts |
| kind | standalone |
| severity | minor |
.abcd/development/intents/drafts/itd-15-self-dogfooded-sota-audit.md
open on GitHub ↗ · commit history ↗
References1
- itd-14Prompts Are Versioned Like Codebuilds on
Referenced by2
- iss-2610262032578385itd-15 has every disembark of abcd-cli run an agent audit pass automatically; disembark's pack dispatches no agents, and synthesis runs only as later sub-verbsrelated
- itd-14Prompts Are Versioned Like Codebuilt on by
mentions11
- dcn-26100200000000122026-10-02 — Ruling CY2 of the technical facilitator (2026-10-02, asked in plain words by abcd-a2 [75597f]; same local-tier file as the H3-0 entry above; recorded by lane rd2), verbatim: "itd-14<->itd-15 and itd-2609081951381895<->itd-2609170822093401: SAME, DECLARED PAIRS — each direction names the piece it needs." Applied as CY1 above: both edges of each pair stand, and each of the four intents carries a dated Audit Notes line naming its pair and the piece each direction needs; edge_cycle still warns on both pairs until the linter can read a declared pair (iss-2610020836255174). This answers the ruling iss-2609300903551032's remedy waited on.
- iss-94The intent corpus still specifies the pre-adr-35 lifeboat model: itd-2, itd-8, itd-9, itd-10, itd-13, itd-15, itd-19, itd-22 and itd-24 variously use the retired 'disembark to home' signature, the in-tree .abcd/lifeboat/ home, or the in-tree .abcd/development/voyage/ path (itd-9's acceptance writes voyage provenance in-tree — the exact path that would fail abcd's own privacy-hygiene audit rule). The brief, glossary and roadmap were reconciled to adr-35; the intents were deliberately NOT rewritten, because an intent is a proposal with its own lifecycle and silently rewriting nine of them inside an unrelated change is worse than tracking the drift. Each reconciles when it is next planned.
- iss-2608230943533581itd-33's revisit triggers have fired and the coordination question owes a SOTA sweep that no record currently asks for. On 2026-08-23 several sessions ran in parallel in this repo and spent real effort coordinating rather than working: three of them landed writes in the wrong checkout when a shell cwd silently reverted from a per-agent worktree to the shared tree, and what stood between that and a bad commit was the AGENTS.md convention that a diff you did not make is a peer's work, not any mechanical property of the setup. That is itd-33's fifth revisit trigger — two consecutive successful multi-agent runs, after which the absence of coordination becomes the next bottleneck — and the intent asks in terms for exactly this texture to be recorded in the ledger so its design proceeds against real evidence rather than guesses. The accumulated evidence is now iss-213 (2026-08-11, a shared worktree and a false-green preflight spanning branch switches), iss-2608220750029992 (two sessions in one checkout, a branch switch unstaging a peer's index), iss-2608220750029993 (the session-presence lease, the armed-detector rung of the AGENTS.md conventions), iss-2608230847432285 (per-agent worktrees do not isolate a session whose cwd reverts), and the parallel-mint collisions iss-2608220150157512 and iss-2608221126066632. The gap this capture exists to close is the research one. .abcd/development/research/notes/ holds sixteen SOTA notes and not one covers multi-agent orchestration or coordination; itd-15 audits agent prompts against their research baselines, which is a different question. itd-33's own narrowing pass dropped LangGraph, CrewAI and AutoGen from its References when it cut file-level claims and substrate selection — right for that scope, but it leaves no record anywhere that a state-of-the-art sweep is owed on the topic at all, so without this entry the ask exists only in one session's transcript. The sweep should run under the protocol in .abcd/development/research/notes/2026-08-22-sota-research-protocol.md and cover at minimum what coordination substrates the field actually uses for same-machine multi-agent work on one repository, whether a claim-and-yield contract of itd-33's shape is state of the art or a local invention, how other systems make a session's tree unambiguous rather than remembered, and what the evidence says about coordination overhead against parallel throughput — the cost today's sessions paid in full. Promoting itd-33 out of drafts/ is a maintainer decision and is deliberately not taken here.
- iss-2609300903551032Two more builds_on cycles sit in the intent store beside the runner and loop one: the drafts itd-14 and itd-15 each declare builds_on the other, and the planned itd-2609081951381895 (the OpenAI-compatible API oracle adapter) and itd-2609170822093401 (the oracle choice is one repo-wide value) each declare builds_on the other; record-lint's edge_cycle rule reports both
- iss-2610020836255174The intent record has no way to declare a mutual builds_on pair that record-lint's edge_cycle rule honours. The technical facilitator ruled on 2026-10-02 that three two-intent cycles stay as declared mutual pairs, each direction naming the piece it needs (CY1: itd-2609201916056194 and itd-2609201916151817; CY2: itd-14 and itd-15, itd-2609081951381895 and itd-2609170822093401), but the frontmatter offers only builds_on and blocked_by, and edge_cycle reports every strongly connected set whatever the records say, so the three pairs are declared only in each intent's Audit Notes and still read as cycles to the linter, and to anything that orders work by these edges. Until a declared pair is something the linter can read, edge_cycle cannot be promoted from warn to blocker without refusing the ruled pairs.
- iss-2610262030391056Meta's truth rule bans aspirational maybes from the brief; the press release's open questions carry one outside the registered question homes
- itd-1Every Intent Has Acceptance Criteria; Every Audit Verifies Them
- itd-5Every Agent Prompt Carries Its Version, Earns Its Lock, And Survives Injection
- itd-30Design Fictions As An Alternative Capture Format For Intents
- itd-33Multiple Agents Coordinate On Intent And Spec Work Without Duplicating Effort Or Producing Competing Artefacts
- itd-81No Judge Ships Unmeasured, And A Clean Diff Is A Result