feat(skills): make every agent-written artifact read as plain technical English - #80
Conversation
…face Copies the simple-english (ASD-STE100) skill into the repo as skills/writing-simply, trimmed to the pragmatic subset and the artifact shapes triagent produces. The body is appended to the investigation and editor system prompts, the draft_pr and propose_wiki_draft sub-agent prompts, and extracted next to the operator skills. Body shapes, the wiki and playbook schema READMEs, the summarize input schema, and the capture playbooks point at it. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Descriptions now state triggers only. Bodies follow the writing-simply rules: short sentences, imperative procedures, condition before command, no "should". Adds the bug capture route, which the skills never covered, replaces the "state machine" wording with the walker vocabulary, and keeps the playbook-versus-codefix rule and the capture example in one place each instead of three. 6205 words down to 4100. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…y shape pr_proposal and bug_report_proposal prescribed a Summary / Detected via / Evidence / Proposed change body while the tool description enforces Description / Acceptance Criteria / Evidence / Out of scope. The nodes now map the investigation's material onto the tool's sections: the detection link and verified sibling facts go in Evidence, the resolved contingency becomes an acceptance criterion, sibling repos go in Out of scope, and the solution paragraph is gone. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…lish The default profile prompts (system, architecture, strategies, editor, wiki editor) and the prose that prompts.Build and BuildEditor emit now obey the writing-simply rules the same prompts hand to the agent: short sentences, condition before command, no "should", no contractions. Build's inline linked-repos paragraph is replaced by the shared writeLinkedReposSection so the two sessions read the same text. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
There was a problem hiding this comment.
🟡 Changes recommended
Several writing-rule references are incorrect, and a rewritten default prompt still violates the declared sentence limit.
Once you've addressed the issues Copilot identified, you can request another Copilot review.
Pull request overview
Embeds shared plain-English guidance across investigation, editor, operator, wiki, issue, and PR-writing workflows.
Changes:
- Adds and embeds the
writing-simplyskill. - Applies writing guidance to prompts, schemas, and playbooks.
- Rewrites operator skills and default profile prompts.
File summaries
| File | Description |
|---|---|
system/wiki_proposal.yaml |
Adds wiki prose guidance. |
system/wiki_backfill_ingestion.yaml |
Adds backfill writing rules. |
system/pr_proposal.yaml |
Aligns issues with the standard body shape. |
system/playbook_proposal.yaml |
Defines playbook prose style. |
system/capture_offer.yaml |
Adds capture-proposal writing rules. |
system/bug_report_proposal.yaml |
Aligns bug reports with issue structure. |
skills/writing-simply/SKILL.md |
Adds the shared working rules. |
skills/writing-simply/references/use-cases.md |
Documents writing use cases. |
skills/writing-simply/references/simple-english.md |
Adds the complete rule catalog. |
skills/writing-simply/references/checklist.md |
Adds a verification checklist. |
skills/embed.go |
Embeds and extracts shared skills. |
skills/embed_test.go |
Tests embedding and extraction. |
prompts/prompts.go |
Injects writing rules into session prompts. |
prompts/prompts_test.go |
Tests prompt injection. |
pkg/mcp/wiki/tools_schema.go |
Documents wiki prose requirements. |
pkg/mcp/wiki/tools_schema_test.go |
Tests wiki schema guidance. |
pkg/mcp/wiki/prompts.go |
Adds rules to wiki sub-agent prompts. |
pkg/mcp/wiki/prompts_test.go |
Tests wiki prompt guidance. |
pkg/mcp/strategies/tools_proposal.go |
Documents playbook prose rules. |
pkg/mcp/strategies/server.go |
Tightens summary field guidance. |
pkg/mcp/strategies/schema_prose_test.go |
Tests playbook prose documentation. |
pkg/mcp/git/draft_pr_prompt.go |
Adds rules to PR-drafting prompts. |
pkg/mcp/git/draft_pr_prompt_test.go |
Tests PR prompt guidance. |
pkg/mcp/git/body_shapes.go |
Adds body-shape writing requirements. |
pkg/mcp/git/body_shapes_test.go |
Tests body-shape references. |
operator-skills/steering-investigations/SKILL.md |
Simplifies steering guidance. |
operator-skills/resuming-after-takeover/SKILL.md |
Simplifies takeover recovery. |
operator-skills/operator-role/SKILL.md |
Condenses core operator instructions. |
operator-skills/knowing-when-to-yield/SKILL.md |
Simplifies takeover criteria. |
operator-skills/finishing-a-session/SKILL.md |
Simplifies completion guidance. |
operator-skills/evaluating-codefixes/SKILL.md |
Adds bug routing and concise criteria. |
operator-skills/capture-decisions/SKILL.md |
Adds bug capture and revised routing. |
operator-skills/approving-drafts/SKILL.md |
Simplifies proposal approval guidance. |
operator-skills/answering-the-agent/SKILL.md |
Simplifies response classification. |
internal/server/manager.go |
Extracts shared operator skills. |
internal/profile/profiles/default/prompts/wiki_editor.md |
Rewrites wiki editor instructions. |
internal/profile/profiles/default/prompts/system.md |
Rewrites investigation instructions. |
internal/profile/profiles/default/prompts/strategies.md |
Rewrites walker guidance. |
internal/profile/profiles/default/prompts/editor.md |
Rewrites playbook editor instructions. |
internal/profile/profiles/default/prompts/architecture.md |
Rewrites architecture guidance. |
AGENTS.md |
Documents the shared skills directory. |
Review details
- Files reviewed: 41/41 changed files
- Comments generated: 4
- Review effort level: Balanced
💡 Add a code-review agent skill or configure MCP servers for context-aware, tailored reviews. Learn more in the docs.
The checklist cited SKILL.md for rule numbers that live in simple-english.md after the copy. The wiki editor opening sentence was 34 words against the prompt's own 20-word limit. The PR body shape said the writing rules were below it when the draft-PR prompt places them above. A grammar slip in the copied use-cases file is corrected. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
There was a problem hiding this comment.
🟡 Changes recommended
Auto-trigger detection is broken, and several new examples and prompts contradict the writing constraints they introduce.
Once you've addressed the issues Copilot identified, you can request another Copilot review.
Review details
Suppressed comments (1)
Previously missed (1) — in code that hasn't changed since the last review.
operator-skills/capture-decisions/SKILL.md:75
- This condition never matches the operator briefing.
autoBriefingalways starts with “You are the operator agent…” and places the watch-generated marker inside itsNotes:section (internal/server/handlers_auto.go:73,93-95). Auto-triggered noops can therefore take the normalnoroute instead of producing thewontfixwiki entry needed for signal dismissal. Detect the marker in the notes section rather than requiring it at the start.
If the briefing starts with "Auto-triggered by signal-watch ingestion", a noop or false-positive outcome must become a wiki entry, not `no`. Reply `wiki` and ask for `status: wontfix` plus enough symptom keywords (services, error strings, timing) for `wiki_correlate` to find it. That entry is what lets the ingestion agent dismiss the same signal next time.
- Files reviewed: 41/41 changed files
- Comments generated: 2
- Review effort level: Balanced
…rules The summarize schema examples carried a semicolon and a 36-word sentence. The wiki editor's Lessons rule was one 40-word instruction. The capture-decisions auto-trigger check looked for the signal-watch marker at the start of the briefing, but autoBriefing puts it inside the Notes: line, so the check never matched. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
|
Round 2 suppressed finding, |
There was a problem hiding this comment.
🟡 Changes recommended
Several prompt examples and shared rules contradict the new writing contract and existing walker or summary-field behavior.
Once you've addressed the issues Copilot identified, you can request another Copilot review.
Review details
Suppressed comments (3)
Previously missed (2) — in code that hasn't changed since the last review.
operator-skills/capture-decisions/SKILL.md:16
- There is no substring matcher in the walker. The agent reads each branch condition and explicitly passes a
goto; the walker does not evaluate the reply (pkg/mcp/strategies/playbook.go:193-195). This claim is especially misleading because the required category labels put several route keywords into every reply. Describe the semantic branch selection instead.
The matcher scans for the keyword as a substring. The keyword on its own line keeps the matcher reliable and the prose readable.
internal/profile/profiles/default/prompts/architecture.md:9
- The second rewritten sentence is well over the skill's 25-word descriptive limit, so this default profile still does not follow the writing rules that the PR says it adopts. Split the profile action from the list of platform-specific content.
**This is a generic starting point, not a substitute for site knowledge.** Operators who run this in a real environment fork the default profile and replace this file with their platform's specifics: top-level CRDs, namespace conventions, the dependency direction between components, version-pivot gotchas, and common failure modes worth pre-loading. The README explains how to do that with `base: default` in a sibling `profile.yaml`.
skills/writing-simply/SKILL.md:59
- The mandatory self-check does not search for several forms that the preceding rules ban, including
've,'m,'d, past perfect, and progressive passive. A draft containing “we've”, “I'm”, “had been”, or “was being” can therefore pass this check unchanged. Include these mechanical patterns so the self-check enforces the stated contraction and tense rules.
- Files reviewed: 41/41 changed files
- Comments generated: 3
- Review effort level: Balanced
…amples The writing skill gave symptom and root_cause one shared sentence budget; the tool allows two for symptom and three for root_cause. The self-check now searches for every contraction and tense form the rules ban. The draft-PR example body and the issue acceptance-criteria guidance no longer use "should" or a semicolon. capture-decisions describes branch selection as the agent reading the reply, which is how the walker works, instead of a substring matcher. The architecture prompt's long sentence is split. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
|
Round 3 suppressed findings, all applied in 7fe9a7e:
|
There was a problem hiding this comment.
🟡 Changes recommended
Issue guidance conflicts with its body contract, and several rewritten prompts still violate the newly mandated writing rules.
Once you've addressed the issues Copilot identified, you can request another Copilot review.
Review details
- Files reviewed: 41/41 changed files
- Comments generated: 4
- Review effort level: Balanced
There was a problem hiding this comment.
🔵 Needs a closer look
Embedded prompts contain dangling reference paths, and backfill guidance conflicts with the shared imperative style for operator lessons.
Review details
Suppressed comments (3)
Previously missed (2) — in code that hasn't changed since the last review.
skills/writing-simply/SKILL.md:10
WritingSimply()embeds this text into investigation and editor prompts whose working directory has noreferences/tree (prompts/prompts.go:428-434). This unconditional relative path therefore points to a file the agent cannot read. Qualify it as available only when the skill is loaded from disk.
This issue also appears on line 69 of the same file.
system/wiki_backfill_ingestion.yaml:147
- This assigns simple past to all backfill prose, but the next paragraph requires operator-facing
## Lessonstakeaways, which the shared skill classifies as procedural imperatives. The conflicting instructions can turn actionable lessons into historical statements. Limit simple past to descriptive prose and preserve imperative takeaways.
skills/writing-simply/SKILL.md:69
- These relative paths are also embedded into fresh sub-agent prompts without their reference files, so an agent that follows the audit pointer gets a failed read instead of the promised checklist. Mark the references as disk-only, as with the catalog pointer above.
- Files reviewed: 51/51 changed files
- Comments generated: 0 new
- Review effort level: Balanced
The embedded skill body pointed at references/ files that exist only when the skill is loaded from disk; the pointers now say so and state that the body stands alone in a prompt. The backfill draft node assigned simple past to all prose, which contradicted the imperative operator takeaways in Lessons; it now names the voice per section. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
|
Round 12 suppressed findings (no posted comments), all applied in aa8d26d:
|
There was a problem hiding this comment.
🔵 Needs a closer look
Several concrete prompt examples still violate the writing rules they instruct agents to follow.
Review details
Suppressed comments (4)
Previously missed (3) — in code that hasn't changed since the last review.
operator-skills/evaluating-codefixes/SKILL.md:44
- This recommended follow-up uses the banned modal
would, directly contradicting thewriting-simplyinstruction that operator messages must follow. Use the approvedcanform so the example reinforces the rule.
> Would the alert have fired early enough to shorten triage? If the OOM follows the scrape spike within 30 seconds, a 1-minute window does not help.
operator-skills/finishing-a-session/SKILL.md:28
- This
finishexample uses the banned modalcould, so the operator is given a concrete output that violates the writing skill it must follow. State the observed reason directly instead.
> `finish("Closed without findings. The symptom resolved before we could capture it.")`
internal/profile/profiles/default/prompts/strategies.md:15
- This output guidance still violates the embedded rules in two places:
TL;DRscontains the banned semicolon, and the concrete postscript uses the contractionyou'd. Agents tend to copy examples, so make the surrounding contract compliant too.
4. **Conclusion.** When you reach a `terminal_advice` node in the final domain playbook of the chain, call `summarize`. The frontend renders the verdict (symptom, root cause, next steps, confidence) and the evidence as two separate cards. `symptom` and `root_cause` are Slack-shareable TL;DRs: no bullets, no log citations. `symptom` is at most two sentences. `root_cause` is two or three. All bullets, log lines, timestamps, and citations belong in `evidence`. Do not restate every tool call. The activity panel is the audit trail. You can add a one-line postscript in chat ("Anything else you'd like me to dig into?") and stop.
prompts/prompts.go:418
- The final sentence combines two sequential tool calls, while the newly embedded rules require one instruction per procedural sentence. Split the calls so this generated editor prompt follows the contract it gives the agent.
- Files reviewed: 51/51 changed files
- Comments generated: 0 new
- Review effort level: Balanced
Two operator-skill examples used banned modals, the strategies prompt carried a semicolon abbreviation and a contraction in its postscript example, and the backfill instruction chained two tool calls in one sentence. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
|
Round 13 suppressed findings (no posted comments), all applied in 30c0ef3:
|
There was a problem hiding this comment.
🟡 Changes recommended
Conflicting issue-shape rules and incomplete bug-route lifecycle guidance can produce incorrect agent behavior.
Once you've addressed the issues Copilot identified, you can request another Copilot review.
Review details
Suppressed comments (2)
Previously missed (2) — in code that hasn't changed since the last review.
operator-skills/capture-decisions/SKILL.md:62
- This contradicts the required reply shape above, which mandates one bullet per category. An operator cannot both emit all four category bullets and use only “Agreed.” plus the keyword. Make the abbreviated case explicit without dropping the category review, or relax the earlier requirement.
This reply splits the wiki, replaces the playbook, adds a codefix the agent declined, gives one reason per move, and ends with the keyword. Match this shape when the investigation has that much texture. When the agent's proposals are already right, "Agreed." plus the keyword is enough.
operator-skills/finishing-a-session/SKILL.md:12
- The new issue-only
bugroute does not satisfy this completion checklist:bug_report_proposalfiles an issue directly and stages no draft, proposal, or PR. The operator can therefore treat a completed bug capture as unfinished instead of callingfinish. Include filed issues among the completed artifacts.
1. The capture flow ran to completion. You routed the capture. The flows staged their drafts, proposals, or PRs. You approved what needed approval. The agent emitted a final `end` with no pending question.
- Files reviewed: 51/51 changed files
- Comments generated: 2
- Review effort level: Balanced
…s as capture completion The pr_proposal and bug_report_proposal nodes limited Out of scope to multi-repo work while the tool's body shape allows it for any change a reviewer would assume is included; the nodes now state the general rule with sibling repos as one case. capture-decisions no longer offers a bullet-free short reply that contradicts its own shape, and finishing-a-session counts a filed issue (the bug route) as a completed capture artifact. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
|
Round 14 suppressed findings, both applied in 01deb5a:
|
There was a problem hiding this comment.
🔵 Needs a closer look
Operator guidance contains impossible wait actions and can misroute valid issue-only bugs to the wiki.
Review details
Suppressed comments (3)
Previously missed (3) — in code that hasn't changed since the last review.
operator-skills/steering-investigations/SKILL.md:17
waitis not an available operator action. Every wake-up prompt requires exactly one ofsend_message,request_takeover, orfinish(internal/auto/operator.go:148), andoperator-rolesays a turn without one dead-ends the session. In this state the safe available action is a minimal acknowledgement, so do not offer an impossible zero-action branch.
If none apply, send a one-word acknowledgement or wait for the agent's next question. You do not have to contribute every turn.
operator-skills/evaluating-codefixes/SKILL.md:23
- This sends issue-worthy findings to the wiki whenever the investigation identifies a concrete problem but has not designed a named fix. That contradicts the
bugroute, whose warrant only requires a concrete, bounded, issue-shaped problem and explicitly lets the maintainer decide the fix (system/bug_report_proposal.yaml:34-49). Route such findings tobug; reserve wiki fallback for problems that are not concrete, do not close this incident class, or have no linked-repo owner.
If tests 1, 3, and 4 hold but test 2 fails, route `bug`: file the issue and let the maintainer decide on the fix. If test 1, test 3, or test 4 fails, it is wiki material. A change that no linked repo owns still helps the next operator as a note. If the change is playbook YAML, it is a `playbook` proposal. See `capture-decisions`.
operator-skills/resuming-after-takeover/SKILL.md:28
- The catch-up prompt ends with “Respond with exactly one action: send_message, request_takeover, or finish” (
internal/auto/operator.go:154-158), so the operator cannot follow thisWaitinstruction. Sending a message during tool use is also not equivalent to waiting. Either defer the resume wake until the nextend, or add a real terminal wait action and include it in the operator contract.
| Agent mid-tool-use, no question | Wait. The next `end` wakes you |
- Files reviewed: 51/51 changed files
- Comments generated: 0 new
- Review effort level: Balanced
…amed fixes to bug Every wake-up ends with one terminal action, so "wait" was never an option; steering-investigations and resuming-after-takeover now say to send a one-word acknowledgement. evaluating-codefixes sent a concrete, owned problem with no named fix to the wiki, which contradicted the bug route's warrant; it now routes that case to bug. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
|
Round 15 suppressed findings, all applied in 4c193db:
|
There was a problem hiding this comment.
🔵 Needs a closer look
Several writing checks and issue-routing prompts contain contradictory guidance that can produce incorrect artifacts.
Review details
Suppressed comments (8)
Previously missed (6) — in code that hasn't changed since the last review.
skills/writing-simply/SKILL.md:64
- This “complete audit” misses the plural progressive forms
are beingandwere being, so text such as “pods are being restarted” passes the prescribed search despite violating the rule above. Include both forms in the search list.
This issue also appears on line 65 of the same file.
skills/writing-simply/references/checklist.md:15
- The full audit also omits
were being, so a common progressive passive is not caught even though this row claims to cover that violation. Add it alongside the other singular and plural forms.
This issue also appears on line 20 of the same file.
skills/writing-simply/references/simple-english.md:309
- The catalog defines Rule 5.4 only for required conditions before commands, but this self-check expands it to every occurrence of
ifandwhen. That incorrectly rejects indirect questions and complements such as “record when the alert fired”; restrict the check to conditional clauses.
operator-skills/capture-decisions/SKILL.md:13 - The
capture_offermessage proposes only Wiki, Playbook, and Codefix categories; Bug appears only as a possible recommendation inside Codefix. Requiring aBug:bullet for every reply therefore makes the operator invent an unproposed category, contradicts the no-padding rule, and even conflicts with the example below, which omits it. Require bullets only for proposed categories and add Bug conditionally.
2. One bullet per category (`Wiki:`, `Playbook:`, `Codefix:`, `Bug:`): accept, refine, or drop, with the reason, in one or two sentences.
system/pr_proposal.yaml:179
- This guidance is internally contradictory: “why split, not raise the threshold” is explicitly a design choice, while the BODY SHAPE forbids design (
pkg/mcp/git/body_shapes.go:26,40) and these lines delegate design to the codefix sub-agent. Remove the design-rationale exception and keep only problem constraints that inform acceptance criteria.
system/bug_report_proposal.yaml:161 - These instructions both invite a non-obvious design choice (“split, not raise”) and say that the maintainer decides the fix. They also conflict with the BODY SHAPE's explicit “No solution, no design” rule (
pkg/mcp/git/body_shapes.go:26,40). Keep the Description focused on the problem and its constraints.
skills/writing-simply/SKILL.md:65
- This check treats every
ifandwhenas a condition, but Rule 5.4 only applies to a required condition before a command. Legitimate complements such as “Record when the pod restarted” cannot start the sentence, so this instruction forces incorrect rewrites. Limit the check to conditional clauses.
skills/writing-simply/references/checklist.md:20 - This mechanical pattern marks valid indirect uses such as “record when the pod restarted” as violations. Rule 5.4 only moves required conditions before commands, so narrow the row to conditional clauses instead of every mid-sentence
iforwhen.
- Files reviewed: 51/51 changed files
- Comments generated: 0 new
- Review effort level: Balanced
…nd drop design rationale from issues The self-check and checklist now list every progressive passive form and apply the condition-first rule only to clauses that state a condition, not to a "when" that names a time. capture-decisions asks for a Bug bullet only when a change is routed to bug, since the agent never proposes that category. The issue Description guidance in pr_proposal and bug_report_proposal states constraints as facts about the problem instead of inviting a design choice. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
|
Round 16 suppressed findings, all applied in 183e61e:
|
There was a problem hiding this comment.
🟡 Changes recommended
The shared untouchable-text rule can preserve credentials in durable artifacts, and post-mortem tense guidance misrepresents unresolved state.
Once you've addressed the issues Copilot identified, you can request another Copilot review.
Review details
- Files reviewed: 51/51 changed files
- Comments generated: 2
- Review effort level: Balanced
…t tense for open state A quoted log line stays exact except for a token, password, or key, which becomes <redacted>. The post-mortem prompt uses the simple past for what happened and the simple present for what is still open, so an unresolved condition is not written as if it ended. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Description
Investigation summaries, wiki entries, issues, PR bodies, playbook prose, and the prompts themselves came out with 40-word sentences,
shouldand passive voice, present perfect, contractions, and padding that reviewers had to read past. This PR copies the simple-english (ASD-STE100) skill into the repo asskills/writing-simply, loads it on every surface where a session or sub-agent writes a durable artifact, and rewrites the nine operator skills and the default profile prompts to the same rules. The rules add roughly 800 words to each investigation and editor system prompt. One behavior change outside prose:EnableAutonow prepares the operator's cwd before it publishes the started state, so a failed skill extraction no longer leaves the UI in active auto mode with no operator behind it.Changes
skills/writing-simply(SKILL.md plus the plugin's full rule catalog, checklist, and use-cases underreferences/) and askillspackage withWritingSimply()for prompt embedding (frontmatter and H1 stripped, headings nested under the caller's) andExtract()for CLI discovery.## Writing stylesection. The same body rides in every fresh sub-agent prompt that writes a durable artifact: dispatched proposal playbooks (BuildDispatchPrompt),draft_pr,propose_wiki_draft, the session post-mortem drafter, and the repo architecture summary generator. The operator agent gets it extracted next to its own skills. Transient sub-agents (Slack analysis, change analysis, codebase research) do not carry it.wiki_schema,playbook_schema, thesummarizeinput schema, and the capture, wiki, PR, bug-report, and playbook proposal playbooks point at the rules, with per-field voice (imperative operator takeaways, simple-past retrospectives, present tense for open state).should, thebugcapture route added (it was missing from every skill), walker vocabulary instead of "state machine", and the playbook-versus-codefix rule stated once. Review also removed two impossible "wait" actions and an auto-trigger check that looked for the signal-watch marker in the wrong place.system,architecture,strategies,editor,wiki_editor) and the proseprompts.Build/BuildEditoremit follow the same rules;BuildshareswriteLinkedReposSectionwith the editor instead of carrying its own copy.pr_proposalandbug_report_proposalmap their issue material onto thecreate_github_issuebody shape (Description / Acceptance Criteria / Evidence / Out of scope) instead of prescribing a conflicting section list.EnableAutoextracts operator and shared skills before it setsPhaseStartedand publishes the started envelope.Related
mainat fix(subagent): return only the final answer in sub-agent tool results #81 (research_codebase), folded into the rewritten repo and editor prompts.Testing
make test-goandmake lintpass; no frontend changes. Unit tests pin the writing-style section intoBuild, bothBuildEditorpaths, the dispatch, draft-PR, wiki, post-mortem, and architecture-summary prompts, both body shapes, and both schema READMEs; theskillspackage tests cover frontmatter stripping, heading nesting, and extraction.TestManager_EnableAuto_ExtractFailureDoesNotPublishStartedblocks the shared-skill slug and checks that no started state or envelope is published and the in-flight sentinel clears.The skill was developed TDD-style with subagents: baseline wiki-entry and issue-body runs without the skill showed the failures above; the same runs with the skill came back clean, and two loopholes those runs exposed (one-sentence-paragraph fragmentation, self-check narration leaking into the deliverable) were closed. The operator rewrite was checked against the old skills on a capture scenario with three traps (a merged wiki shape, a playbook YAML edit labelled as codefix, an oversized change that belongs in
bug) and on an approve-then-close turn. The PR then went through 18 rounds of balanced Copilot review until a round returned nothing; every thread has a reply and each round's suppressed findings have a disposition comment.🤖 Generated with Claude Code