From f5e12e2d61941547d4d93ec833e757a50613b513 Mon Sep 17 00:00:00 2001 From: Kyle Sexton <153232337+kyle-sexton@users.noreply.github.com> Date: Sun, 11 Oct 2026 00:53:52 -0400 Subject: [PATCH 1/5] docs(upstream): refresh mattpocock-skills.md against upstream 49dd158 Rewrite the implement-spec row, add a chief-of-staff watch row, record upstream #1123 as a harness finding, point rows at the v1.3 video pass's follow-on items, and correct aihero-course.md's "measured" claim to "asserted, unmeasured". Add software factory and dark factory term rows, with the matching rejected-term glossary row. Co-Authored-By: Claude Opus 5.5 --- docs/glossary.md | 1 + docs/upstream/aihero-course.md | 6 +++-- docs/upstream/mattpocock-skills.md | 40 ++++++++++++++++++++++++------ 3 files changed, 37 insertions(+), 10 deletions(-) diff --git a/docs/glossary.md b/docs/glossary.md index c122019068..d768d22001 100644 --- a/docs/glossary.md +++ b/docs/glossary.md @@ -101,6 +101,7 @@ Each maps to the term or doctrine that owns the concept. | cache *(the doc-restating-environment sense)* | `docs-hygiene:audit-derivability`'s derivable-from-environment doctrine; the word is overloaded here (plugin cache, prompt cache) | | sediment | the `docs-hygiene` audit family's pruning doctrine; collides with the code-sense use in `playbooks:fable-5` | | sycophancy | nothing. It is a generic LLM-behavior term with no distinct project meaning. Free-prose use is unaffected; it is simply not project vocabulary | +| software factory | the loop-lane convention ([`conventions/loop-lane/README.md`](conventions/loop-lane/README.md)) | | map / territory | the source author's metaphor, cited where it appears in [`finding-your-unknowns.md`](finding-your-unknowns.md) "The unknowns taxonomy"; never house vocabulary (metaphor-jargon risk) | ## Provenance diff --git a/docs/upstream/aihero-course.md b/docs/upstream/aihero-course.md index 7b9f40c8f1..0a7b70f5de 100644 --- a/docs/upstream/aihero-course.md +++ b/docs/upstream/aihero-course.md @@ -449,11 +449,13 @@ the glossary carries the vocabulary, this table carries why. | highway / stale highway | **REJECT** (as canonical) | Metaphor duplicating "navigation pointer"; survives only as the quoted mnemonic in #2987's C7 note | | grill-execute-clear (loop name) | **REJECT** (mapping recorded) | Lane 5 Q36: a second name for a loop the house workflow taxonomy already owns | | design tree | **EQUIVALENT** (no action) | Lane 5: equivalent to our "decision tree"; recorded, nothing to adopt | +| software factory | **REJECT** (mapping recorded) | Maps to our loop lane (`docs/conventions/loop-lane/README.md`: `work-items:work-loop`, `source-control:babysit-loop`, CI intake triage). His dictionary defines it as agent sessions "started by triggers ... rather than by a human" ([entry](https://www.aihero.dev/ai-coding-dictionary/software-factory)); a second name for a concept the house already owns violates vocabulary parsimony. As-of 2026-10-10 | +| dark factory | **RECORDED** (definition only) | His [entry](https://www.aihero.dev/ai-coding-dictionary/dark-factory): a software factory that "writes the code and no human reads it", with automated checks and automated review as the only gates. Recorded so the term can be matched when upstream material uses it; no project term adopted. As-of 2026-10-10 | **Cross-skill invocation phrasing (the routed lane 7 candidate):** ADOPT (adapted). Upstream standardized cross-skill dependencies on explicit "Call the Skill tool with \"name\"" phrasing -(`.agents/invocation.md`, PRs #878/#880), on his measured claim — his repo's measurement, named -provenance, bucket ii — that it outperforms bare `/name` prose. This fleet practices the +(`.agents/invocation.md`, PRs #878/#880), on his asserted, unmeasured claim (`.agents/invocation.md` +gives no data; named provenance, bucket ii) that it outperforms bare `/name` prose. This fleet practices the equivalent in part ("invoke `/plugin:skill` via the Skill tool" appears across the verification and implementation families) but the practice was mixed — several operative chains hand off bare — and codified nowhere; the doctrine now lives in diff --git a/docs/upstream/mattpocock-skills.md b/docs/upstream/mattpocock-skills.md index 2612adfde0..3b7307432b 100644 --- a/docs/upstream/mattpocock-skills.md +++ b/docs/upstream/mattpocock-skills.md @@ -17,7 +17,10 @@ and the `ask-matt` main flow were rechecked against v1.3.1, with `main@49dd158` unreleased changesets, and recorded in the map's "Session-start flow and main flow" section. On 2026-10-10 the map was re-audited at `main@49dd158` (version PR #1161 open, so the trigger below has fired); this attribution table was not re-audited then, except the upstream issue states in the -`wayfinder` row. This repo's audit: the +`wayfinder` row. Also at `main@49dd158` (2026-10-10, the v1.3 video pass, issue +[#6947](https://github.com/melodic-software/claude-code-plugins/issues/6947)): the `wizard` and +`implement-spec` rows, the `chief-of-staff` watch row, and the #1123 harness finding; the other +rows only gained pointers to that pass's follow-on items. This repo's audit: the `pocock-upstream-sync` topic. Git history of this file records *when*; this line records only *what was audited*. @@ -38,7 +41,7 @@ adding, removing or renaming an upstream skill. Re-audit every affected row. |---|---|---|---| | `to-questionnaire` (Productivity; graduated from in-progress in v1.2.0 #593) | `planning:questionnaire` | Derived | Interview-the-send invariant kept; output relocated cwd → memory slice (PII); grill→interview vocabulary; tracker-item option added. Re-audited against v1.2.3: no delta — his graduation commit is a 100%-similarity rename, his one body change (template XML-ification) is already reflected in our template, and ours is otherwise a superset (route-away, overwrite guard, role-slug multi-recipient). Qualified 2026-10-04: the XML-ified template is reflected, but upstream's worked `` block (`to-questionnaire/SKILL.md:42-48`) is not; our `templates/questionnaire.md` has placeholders only. Deliberate divergence: upstream is user-invoked (`disable-model-invocation: true`), ours is model-invoked since the re-grade flip ([#2969](https://github.com/melodic-software/claude-code-plugins/issues/2969)). Behavior unchanged upstream at `d81f3a1` | | `wayfinder` | `planning:wayfind` | Partial | Fog-of-war framing + ticket-vs-fog (sharpness) distinction; REJECTED file-based map (native tracker primitives instead) and upstream tracker seam. v1.2 re-audit: ADOPTED parallel research burn-down (work-mode exception + chart-mode offer) and the in-chart no-fog bail-out; "decision ticket" term present as our "decision item" (parity under work-items vocabulary); REJECTED `research/` branch (two-lane branch-naming prohibition; resolution comments + memory tier already home the findings); map-clears handoff already present-stronger (named graduation targets). Course lane W (#2939): **C18 ADOPTED** (human-facing narration names items by title, number as link or suffix; `wayfind` only, not generalized to work-items); **C19 ADOPTED** (Out-of-scope is for scope not sharpness, fog never graduates there, a wrongly scoped item is closed + one linking line); **C20 ALREADY-PRESENT** (map-as-index — a decision lives in its own item; the map gists and links, never restates). Upstream field reports, open as of 2026-10-10: [#828](https://github.com/mattpocock/skills/issues/828) (resolutions do not reach the tickets they invalidate), [#944](https://github.com/mattpocock/skills/issues/944) (the map body outgrows a size-capped field and is truncated silently). Closed: [#576](https://github.com/mattpocock/skills/issues/576) (research tickets open draft PRs), fixed 2026-10-07 by upstream `8295b8e` (research branches are pushed with no PR); [#530](https://github.com/mattpocock/skills/issues/530), the `research` skill's recursive-spawn report behind the parallel burn-down, closed not planned 2026-10-06 by `.out-of-scope/subagent-recursion.md` (the harness, not the skill, bounds subagent recursion). `8295b8e`'s other wayfinder changes are recorded in the map's row 17; this row's verdicts were not re-graded at `49dd158` | -| `batch-grill-me` / `grilling` rounds | `planning:interview` (propagated to `prd`/`design`/`plan`) | Derived (behavior) | Frontier-rounds model, facts-vs-decisions split, confirmation gate; no-grill vocabulary constraint; background fact sub-agents. v1.2 re-audit: ADOPTED ❓/➡️ emoji anchors as opt-in `userConfig` (`use_emoji_question_markers`, default off; decoration of the single verdict marker); answer-by-number dictation and any-order answering confirmed already present; REJECTED one-question-at-a-time opt-out line (his seam is the consumer's own global CLAUDE.md — platform-native, nothing for the plugin to ship) | +| `batch-grill-me` / `grilling` rounds | `planning:interview` (propagated to `prd`/`design`/`plan`) | Derived (behavior) | Frontier-rounds model, facts-vs-decisions split, confirmation gate; no-grill vocabulary constraint; background fact sub-agents. v1.2 re-audit: ADOPTED ❓/➡️ emoji anchors as opt-in `userConfig` (`use_emoji_question_markers`, default off; decoration of the single verdict marker); answer-by-number dictation and any-order answering confirmed already present; REJECTED one-question-at-a-time opt-out line (his seam is the consumer's own global CLAUDE.md — platform-native, nothing for the plugin to ship) Follow-on: [#6946](https://github.com/melodic-software/claude-code-plugins/issues/6946), an eval case for a question whose recommendation is negative (upstream #706); a wording rule follows only if it fails. | | grilling-family rework (upstream PR #532) | `planning:interview`, `architecture:improve` | Partial | decision-tree rename, domain-routing, primitive-vs-variant boundary; ADR 3-gate + glossary purity previously recorded as house additions — **annotated 2026-08-18 (lane 5 audit-answers pass, two independent validators):** current upstream main's `domain-modeling` carries both near-identically; direction/timing unverifiable at annotation time (upstream git history behind a blocked API) — treat as convergent-or-derived, not house-original | | `git-guardrails-claude-code` (misc) | `guardrails` `block-dangerous-git` hook | Derived (capability only) | Capability adopted; substring-matching implementation REJECTED wholesale (false-blocks) — house argv-grammar parser instead | | upstream PR #464 (review checklist) | `review` code-reviewer Fowler baseline | Pointer | Surfaced the idea; content re-derived from Fowler, *Refactoring* 2nd ed. ch. 3 — no upstream phrasing | @@ -49,17 +52,18 @@ adding, removing or renaming an upstream skill. Re-audit every affected row. | `to-tickets` | `work-items:decompose` | Partial | Vertical-slice / tracer-bullet vocabulary overlaps upstream and the seam plumbing is house-built — but "influence (vocabulary)" understated it, and disagreed with map row 15, which already graded this PARTIAL. Lane B (#2935) adopted four **mechanics**, not just phrasing: prefactor-as-blocker (C5, `decompose/SKILL.md:63`), the one-fresh-context-window sizing bar (C6, `:65`), the integration-branch fallback (C7, `:98`), and the PR-variant agent brief (C17, `agent-brief.md:82`). Only C8 — "work the frontier" (`:102`, `:201`) — is vocabulary. Lane B verdicts: **C5, C6, C7, C8, C17 all ADOPTED** | | `tdd` / `tests.md` / `mocking.md` | `planning:plan` Test strategy, `tdd:principles`, `testing:write`, `review` code-reviewer | Partial | Course lane C (#2936): **C9 PARTIAL, relocated** (pre-agreed-boundary discipline lands in `plan`'s existing Test strategy element — deliberately NOT phrased as "seam" (fleet-registered vocabulary) and NOT hosted by `implementation:phase-verifier`; upstream's hard consent gate softened to a `DEVIATIONS.md` record an unattended run can satisfy); **C10 ALREADY-PRESENT (prose)** (tautological-test anti-pattern at `anti-patterns-khorikov.md` + `testing/write`; the prose-only coverage was an overstatement corrected in-lane, and the executable half landed as a `code-reviewer.md` criterion, `review` 0.24.0, ceding the textually-identical core to `cant-fail-scan.sh` when that scan's output is in context); **C11 ALREADY-PRESENT + one clause** (`test-doubles.md` has carried SDK-style-interfaces-over-generic-fetchers since `85aa8066`; added only the missing subordination clause — the shape rule never widens *what* gets mocked). Zero-assembly chain doc REJECTED with reasons (the drafted chain was factually wrong). Map row 13 | | `improve-codebase-architecture` YAGNI scoping filter (v1.2 #533) | `architecture:improve` deepening Phase 1 | Partial | ADOPTED scope-before-scanning: user-named direction scopes the scan, else recent-commit hot spots pull attention first (precomputed context widened to 20 commits). REJECTED his glossary file reference (`CONTEXT.md` at v1.2.3, renamed `GLOSSARY.md` in v1.3; our glossary-discovery ladder instead). Corrected 2026-10-04: the HTML report was ADOPTED (self-contained file in a temp dir, three recommendation badges; `architecture/skills/improve/actions/deepening.md:66-85`, since `30cf0343f`); only the CDN Tailwind and Mermaid loading is rejected. Upstream v1.3 removed the inbound `diagnosing-bugs` post-mortem hand-off to this skill (`1dab982`) | -| `diagnosing-bugs` (v1.2.3 Redact + tagged logs) | `debugging:debug`, `testing:diagnose` | Partial | ADOPTED the redaction guard in both skills (secrets `` before any shown command/output/artifact; env-var credentials; signal-lines-only quoting) and the `[DEBUG-a4f2]` tagged-log convention in `testing:diagnose` (already present in `debugging:debug`). Re-evaluated at `d81f3a1` (2026-10-04): the ranked construction strategies and 3-5 ranked hypotheses are ALREADY-PRESENT (`debugging/skills/debug/SKILL.md:61-72`, `:112-122`). Real gaps, under evaluation: upstream's minimize step (`diagnosing-bugs/SKILL.md:78-86`; our `:152` and `:159` refer to a minimized repro no phase produces) and its Phase 1 completion criterion (one named command, already run, red output shown; `:59`, present since v1.2.3). Phase 6: upstream removed the post-mortem hand-off in `1dab982` (2026-08-15, upstream PR #880, fixing #453) because it was a Skill-tool call to a user-invoked skill from an often-unattended flow; graded KEEP ours (REJECT the removal), since our Phase 6 (`SKILL.md:163-180`) files the finding and calls no skill. Upstream PR #1121 (merged 2026-10-04, released in v1.3.1, closing issue #1117) now sends the "what would have prevented this?" question to `retro` after the fix | +| `diagnosing-bugs` (v1.2.3 Redact + tagged logs) | `debugging:debug`, `testing:diagnose` | Partial | ADOPTED the redaction guard in both skills (secrets `` before any shown command/output/artifact; env-var credentials; signal-lines-only quoting) and the `[DEBUG-a4f2]` tagged-log convention in `testing:diagnose` (already present in `debugging:debug`). Re-evaluated at `d81f3a1` (2026-10-04): the ranked construction strategies and 3-5 ranked hypotheses are ALREADY-PRESENT (`debugging/skills/debug/SKILL.md:61-72`, `:112-122`). Real gaps, under evaluation: upstream's minimize step (`diagnosing-bugs/SKILL.md:78-86`; our `:152` and `:159` refer to a minimized repro no phase produces) and its Phase 1 completion criterion (one named command, already run, red output shown; `:59`, present since v1.2.3). Phase 6: upstream removed the post-mortem hand-off in `1dab982` (2026-08-15, upstream PR #880, fixing #453) because it was a Skill-tool call to a user-invoked skill from an often-unattended flow; graded KEEP ours (REJECT the removal), since our Phase 6 (`SKILL.md:163-180`) files the finding and calls no skill. Upstream PR #1121 (merged 2026-10-04, released in v1.3.1, closing issue #1117) now sends the "what would have prevented this?" question to `retro` after the fix Follow-on: [#6945](https://github.com/melodic-software/claude-code-plugins/issues/6945), Phase 6 routing for check-shaped prevention answers. | | `wait-what` (Productivity, NEW in v1.2 #751) | `discipline:wait-what` | Derived | Ported near-verbatim (one-sentence re-pitch body: back up, add missing context, ASD-STE100 register + inline gloss, ubiquitous language) as a declared non-corrector species in `discipline` beside `tighten-your-output`/`mind-your-maxims` — home chosen on the blame axis (the drift is the model's output, not the user's comprehension). Name KEPT with an explicit PLUGIN-PHILOSOPHY naming-exception entry (utterance-is-mechanism + upstream muscle-memory parity; a 5-generator/3-judge naming tournament's grammar-clean winner `re-pitch` was declined by the user). REJECTED his fixed glossary filenames: `CONTEXT.md` at v1.2.3, renamed `GLOSSARY.md` / `GLOSSARY-MAP.md` in v1.3 (`006a52b`) with no fallback for the old names (open upstream issue [#1153](https://github.com/mattpocock/skills/issues/1153), no migration path). Ours keeps format-externalized discovery: the nearest glossary or context map per the consumer's convention, plain technical English when none exists (`discipline/skills/wait-what/SKILL.md:15-17`). Re-checked 2026-10-04: his v1.3 map-following (`GLOSSARY-MAP.md` to the right `GLOSSARY.md`, upstream PR #904) now matches ours, so the rejection covers only the fixed names. Shape evidence: his X thread (status 2084753070437609606 → 2084941367659168064 → 2085681281795232026) — the same instruction failed as passive global CLAUDE.md AND as an output style; only the on-demand skill works, so the register text lives in the body, invoked at the moment of loss | | `wizard` (Engineering; graduated from in-progress in v1.2) | `wizard:generate` | Derived | PORTED (lane 4) as a new single-capability plugin `wizard` 0.1.0, hardened. Kept: the 4-step scope/map/author/verify process, the fixed never-hand-edited library above the `STAGES` marker, model-invoked posture with the explicit non-trigger fence, gh-absence graceful degradation, ephemeral-by-default doctrine, agent-authors-never-runs doctrine. Hardened beyond upstream (deltas enumerated in `plugins/wizard/CHANGELOG.md` 0.1.0): mandatory human read-and-approve of the full STAGES block before `chmod +x`; https-only `open_url` (also closes a Windows UNC/NTLM leak via explorer.exe); `/dev/tty` fail-closed prompts (retires a verified multi-line-paste confirm bypass and `pause`'s fail-open at EOF); quoted `0600` `.env` writes + gitignore assert + trap-cleaned atomic temp; repo-resolved/confirmed `--repo`-explicit gh writes with stderr surfaced and empty values refused; key-name validation; readline on non-secret asks (fixes upstream #741 where safe); names-only live-`.env` scoping with the secrets-and-context property stated honestly. REJECTED: Codex `agents/openai.yaml` sidecar (no Codex target — standing precedent). Upstream status 2026-10-04: the template dropped "time remaining" (v1.2.3), but the docs page still advertises it (`docs/engineering/wizard.md:44`), so a later sync must not bring it back. Upstream bugs ported as fixes: [#1041](https://github.com/mattpocock/skills/issues/1041) (`write_env` never assigns the shell variable) and [#811](https://github.com/mattpocock/skills/issues/811) (a symlinked `.env` is replaced, not written through) in 0.6.4; [#1142](https://github.com/mattpocock/skills/issues/1142) (editing the script mid-run re-runs or kills it), fixed upstream in `49dd158` by wrapping the stages in `run_wizard`, ported with `exit` moved inside the function so a formatter that splits `run_wizard "$@"; exit` cannot undo it | | `prototype` `LOGIC.md` shareable-HTML demo (Engineering, v1.2) | `prototype:pressure-test` | Partial | ADOPTED (lane 5) the audience-routed HTML demo shell: TUI stays default; when the driver is a non-developer (designer, PM, domain expert) or no terminal fits, the disposable shell over the same portable pure logic module is one self-contained `file://` page — domain-language labels, labeled state panel re-rendered per click, free-play buttons, guided-walkthrough scenarios resetting to a known initial state — under explore-directions' existing HTML-substrate constraint set reused verbatim-in-spirit (restrictive CSP meta tag, ephemeral `mktemp -d` / `%LOCALAPPDATA%\Temp` placement, synthetic data only, discard after the markdown capture). prototype 0.5.0. REJECTED the other half of upstream's step 5: the throwaway-branch "primary source" capture that keeps the prototype re-runnable on a branch — a two-lane branch-naming posture violation that also contradicts the plugin's delete-when-done discipline (`plugins/prototype/context/discipline.md`, "Delete or absorb when done") | | ask-matt `PHASE-BOUNDARIES.md` (v1.2) | `session-flow:workflow` continuation router + `context-guard` zones | Convergent / rejected | Re-read at `84fdeff`. At parity: the ordered first-yes-wins router and compaction last with a focus; ours adds clean-stop, user-gated background, instrumented zones, worker relay. ADOPTED one zone-gated criterion: prefer continue when the next stage consumes this stage's reasoning verbatim. REJECTED the boundary-only trigger (`/session-flow:workflow` routes by task, mid-stage included), the "handoff only for what travels" narrowing (`/session-flow:workflow` hands off in more cases than his travel list), and the ~150k smart-zone figure (self-declared-debated folklore; no official numeric threshold exists; our baseline is instrumented zone readings plus context-guard's declared judgment-default bands with named provenance (corrected 2026-08-18 per audit amendment A1: the bands are declared defaults, not measurements; only zone readings are measured), his dictionary entry noted as one more folklore anchor). Docs topic: [when your context fills up](https://code.claude.com/docs/en/context-window#when-your-context-fills-up). As-of 2026-10-02 | | `teach` (Productivity) | `education:teach` | Derived | Corrected by the `teach-skill-comparison` topic audit (PR #2958) — this row previously sat under "Not adopted", which is provably false: the original port took his workspace vocabulary (MISSION / GLOSSARY / RESOURCES / NOTES + learning records as "teaching ADRs"), near-verbatim FORMAT-spec content, and the K-S-W / ZPD / community-delegation pedagogy with learning-record doctrine. REJECTED: cwd-as-workspace (dedicated per-project workspace roots instead), Codex `agents/openai.yaml` sidecar (standing precedent), HTML references (the durable trio — reference, records, glossary — stays markdown). ADDED house-built: codebase mode, primer action, assess, staleness doctrine, evals, slug-collision guards, workspace-root resolution ladder. RE-ADOPTED in the same audit (education 0.7.0): storage-strength pedagogy (fluency-vs-storage, desirable-difficulty triad, knowledge/skills asymmetry, equal-length quiz answers) and HTML-first interactive lessons with a shared `assets/` library (answer-shuffling quiz component — fixes his #335 class of always-option-C bug); his acknowledged no-review-scheduling gap is out-executed via spaced review surfaced at resume/status from learning-record age × domain velocity | | `codebase-design` (Engineering) | `architecture:improve` deepening vocabulary (`research/deepening/vocabulary.md:9-30`) | Derived | Corrected 2026-10-04 from the map's earlier CONVERGENT / "not ported": the Module, Interface, Depth, Seam, Adapter, Leverage and Locality terms, the deletion test and "one adapter = hypothetical seam, two = real" were ported near word for word when the plugin was added (`30cf0343f`, 2026-07-10). Upstream open issues [#449](https://github.com/mattpocock/skills/issues/449) and [#458](https://github.com/mattpocock/skills/issues/458) report it used as a session driver and ask how to apply it | -| `implement-spec` (Engineering, graduated in v1.3) | `implementation:implement-dispatch` (phase waves inside one item); `work-items:ship` with the integration-branch execution shape (`work-items/reference/execution-shape.md`), which is sequential and operator-driven | Convergent / Partial | Nothing taken yet. Upstream runs a container's whole ready frontier in one run (worktree per ticket, one integration branch, final `code-review`); ours has the task graph and frontier but no executor that fans a container out. Candidates under evaluation, none adopted: dispatched workers return red-run evidence (upstream's #1035 fix, the implementer runs `tdd`), and a worker confirms its worktree base before the first edit. A parallel integration-branch executor is TRACKED, not planned: upstream's own frontier cannot advance mid-run (open issue [#936](https://github.com/mattpocock/skills/issues/936)) | -| `pr` (Engineering, graduated in v1.3) | `source-control:pull-request` (body contract, `reference/create.md`); `visualization:visualize` (`context/code-shapes.md`, the same humanlayer `show-me` menu, recorded in [`humanlayer-skills.md`](humanlayer-skills.md)); the merge lane's door test on the actual diff (`autonomy/reference/guardrails/work-classes.md`) | Partial (convergent) | Same `show-me` source reached us through humanlayer, not through him. REJECTED his body template: it drops the `## Fix`, `## Verification` and `## Related` sections our PR body contract requires. Door-based merge gating is already present on the merge lane. Under evaluation, not adopted: a one-way/two-way door and blast-radius line in the body for the human reviewer, and routing the PR-body path through the smallest-visual menu with an opt-out (his first version said a forced diagram is worse than none) | -| `retro` (Engineering, graduated in v1.3) | `session-flow:retro`, `session-flow:running-retro` | Convergent | Ours predates his (`ebeda7397`, 2026-07-11, against his `8fa1886`, 2026-08-24) and took nothing from it. His seven categories (Navigation, Automated checks, Coding standards, Global AGENTS.md, Tool economy, No-ops, Information access; `retro/SKILL.md:17-23`) were compared on 2026-10-04. Gaps in ours, candidates under evaluation, none adopted: a deterministic-check route (a mechanical finding becomes a hook, lint or test before a written rule; upstream PR #1083), a removal pass for rules the session contradicted or made obsolete, and skill edits routed through the same approval gate. His No-ops category is not a gap (`harness-config:audit-instructions` and `unhobble` cover it). Ideas seen only in upstream reports, such as reading subagent sessions after `implement-spec` (open issue [#1141](https://github.com/mattpocock/skills/issues/1141)), go eval-first before any adoption | -| `resolving-merge-conflicts` (Engineering; removed upstream in v1.3) | `source-control:resolve-conflicts` | Derived | Corrected 2026-10-04 from the map's earlier CONVERGENT / "not ported": ours was added in source-control 0.3.0 by PR #200 (`2ebc55db1`, 2026-07-15, branch `absorb/pocock-mechanisms`, the external-skills census), after his skill (`81ddacb`, 2026-06-02), and his five steps map one to one to ours, including "always resolve; never `--abort`". Upstream removed the skill in `daa01d8aa68ad5c61b68970ec2018d0ce9567be6` ("nothing replaces it"; the agent handles conflicts without a skill); its docs page stays up marked archived (`docs/engineering/resolving-merge-conflicts.md:1`). DECIDED: keep ours pending an eval. `babysit-loop`, `babysit-prs` and `pull-request` route conflicts to it, it carries a repo-specific version-bump step, and no run has measured it with versus without the skill. Next step: add eval assertions for the archived page's "It's working if" items (finish every stop of a multi-commit rebase, add nothing that was on neither branch, quote PR or issue sources), then run a with/without comparison; delete only if the skill measures as a no-op | +| `implement-spec` (Engineering, graduated in v1.3) | `implementation:implement-dispatch` (phase waves inside one item); `work-items:ship` with the integration-branch execution shape (`work-items/reference/execution-shape.md`), which is sequential and operator-driven | Convergent / Partial | Nothing taken yet. Upstream runs a container's whole ready frontier in one run (worktree per ticket, one integration branch, final `code-review`); ours has the task graph and frontier but no executor that fans a container out. That executor is tracked as [#6942](https://github.com/melodic-software/claude-code-plugins/issues/6942) (`/work-items:ship run #N`), after [#6412](https://github.com/melodic-software/claude-code-plugins/issues/6412) (item-list dispatch with dependency order and a base parameter). Rechecked at `main@49dd158` (2026-10-10): upstream's open issue [#936](https://github.com/mattpocock/skills/issues/936) (the frontier cannot advance mid-run because tickets close only when the PR merges) does not apply here, since our integration-branch shape closes each item as a checkpoint when it lands (`work-items/reference/execution-shape.md`, "Closing a checkpoint records durable progress"). The worker's worktree-base check is present for the default branch (`implementation/skills/implement-dispatch/SKILL.md` item 9, `implementation/agents/implementer.md`); a named integration-branch base needs a parameter, carried by #6412, because harness `isolation: worktree` cannot base a worktree on a named branch ([sub-agents docs](https://code.claude.com/docs/en/sub-agents), `isolation` row; upstream #942). Upstream's one full-run report, closed issue [#1010](https://github.com/mattpocock/skills/issues/1010), found: merge inline and dispatch a merger subagent only on conflict, keep the orchestrator from diagnosing failing checks inline, and name branches for discovered work and Spec-axis findings; these are inputs to #6942, none adopted here. Still a candidate, not adopted: dispatched workers return red-run evidence (upstream's #1035 fix, the implementer runs `tdd`) | +| `pr` (Engineering, graduated in v1.3) | `source-control:pull-request` (body contract, `reference/create.md`); `visualization:visualize` (`context/code-shapes.md`, the same humanlayer `show-me` menu, recorded in [`humanlayer-skills.md`](humanlayer-skills.md)); the merge lane's door test on the actual diff (`autonomy/reference/guardrails/work-classes.md`) | Partial (convergent) | Same `show-me` source reached us through humanlayer, not through him. REJECTED his body template: it drops the `## Fix`, `## Verification` and `## Related` sections our PR body contract requires. Door-based merge gating is already present on the merge lane. Under evaluation, not adopted: a one-way/two-way door and blast-radius line in the body for the human reviewer, and routing the PR-body path through the smallest-visual menu with an opt-out (his first version said a forced diagram is worse than none) Follow-on: [#6934](https://github.com/melodic-software/claude-code-plugins/issues/6934) (a `Left out:` line in Verification), [#6943](https://github.com/melodic-software/claude-code-plugins/issues/6943) (risk-only explain-change), [#6997](https://github.com/melodic-software/claude-code-plugins/issues/6997) (pull-request eval fixture). | +| `retro` (Engineering, graduated in v1.3) | `session-flow:retro`, `session-flow:running-retro` | Convergent | Ours predates his (`ebeda7397`, 2026-07-11, against his `8fa1886`, 2026-08-24) and took nothing from it. His seven categories (Navigation, Automated checks, Coding standards, Global AGENTS.md, Tool economy, No-ops, Information access; `retro/SKILL.md:17-23`) were compared on 2026-10-04. Gaps in ours, candidates under evaluation, none adopted: a deterministic-check route (a mechanical finding becomes a hook, lint or test before a written rule; upstream PR #1083), a removal pass for rules the session contradicted or made obsolete, and skill edits routed through the same approval gate. His No-ops category is not a gap (`harness-config:audit-instructions` and `unhobble` cover it). Ideas seen only in upstream reports, such as reading subagent sessions after `implement-spec` (open issue [#1141](https://github.com/mattpocock/skills/issues/1141)), go eval-first before any adoption Follow-on: [#6944](https://github.com/melodic-software/claude-code-plugins/issues/6944), the deterministic-check route. | +| `resolving-merge-conflicts` (Engineering; removed upstream in v1.3) | `source-control:resolve-conflicts` | Derived | Corrected 2026-10-04 from the map's earlier CONVERGENT / "not ported": ours was added in source-control 0.3.0 by PR #200 (`2ebc55db1`, 2026-07-15, branch `absorb/pocock-mechanisms`, the external-skills census), after his skill (`81ddacb`, 2026-06-02), and his five steps map one to one to ours, including "always resolve; never `--abort`". Upstream removed the skill in `daa01d8aa68ad5c61b68970ec2018d0ce9567be6` ("nothing replaces it"; the agent handles conflicts without a skill); its docs page stays up marked archived (`docs/engineering/resolving-merge-conflicts.md:1`). DECIDED: keep ours pending an eval. `babysit-loop`, `babysit-prs` and `pull-request` route conflicts to it, it carries a repo-specific version-bump step, and no run has measured it with versus without the skill. Next step: add eval assertions for the archived page's "It's working if" items (finish every stop of a multi-commit rebase, add nothing that was on neither branch, quote PR or issue sources), then run a with/without comparison; delete only if the skill measures as a no-op The paid with/without run is [#6939](https://github.com/melodic-software/claude-code-plugins/issues/6939). | +| `chief-of-staff` (in-progress, not graduated; `skills/in-progress/chief-of-staff/SKILL.md` at `main@49dd158`) | `session-flow:orchestrate`; the environment-improvement track overlaps `session-flow:retro` follow-on [#6944](https://github.com/melodic-software/claude-code-plugins/issues/6944) | Watch | Nothing taken. A long-running-goal posture on two tracks (tactical, and strategic: change the environment so the next task goes better), all work in background subagents, communication through context pointers, and a no-workarounds rule; convergent with `orchestrate` plus the retro idea. Not adopted while upstream is still editing it (five commits 2026-10-05 to 2026-10-06, "More playing around"). Recheck trigger: the skill moves out of `skills/in-progress/` or is removed | ## Not adopted (decided, with reasons) @@ -83,7 +87,9 @@ Lane-5 infra rejections (v1.2): - **"It's working if" sections** (per-skill success blurbs): they decorate a per-skill docs site this marketplace doesn't build (docs-site build is out of scope per the topic plan). Reopen condition: a docs-site build landing in this repo — recorded here, deliberately not a TRACK - row. + row. Their content is still used: when a row is re-audited, the upstream docs page's + "Common questions" and "It's working if" items for that skill become eval assertions for our + derived skill, as in the `resolving-merge-conflicts` row; there is no dedicated sweep. - **`writing-for-agents` / `SKILL-MECHANICS.md` bulk**: originally rejected at parity or stronger (v1.2 lane 5). **Superseded 2026-08-17** by the steering-section re-evaluation: parity holds only for the pruning/audit half; the authoring half carries three gaps, tracked @@ -216,6 +222,24 @@ triggers stand until the owning lane records the disposition: skill cannot be invoked even when typed ([copilot-cli#4438](https://github.com/github/copilot-cli/issues/4438), open). TRACKED, no consumer runs either client; recheck on a Codex or Copilot install report. +- **Upstream issue [#1123](https://github.com/mattpocock/skills/issues/1123):** "call the Skill + tool" phrasing is not harness-neutral; Codex CLI and pi have no Skill tool (issue comments). + Upstream went the other way since: PR #1189 (merged 2026-10-06) moved `implement` to Skill-tool + phrasing, and `.agents/invocation.md` still argues for it. Our wording is unchanged: this + marketplace targets Claude Code, which has the Skill tool, and no consumer runs Codex or pi. + Open as of `main@49dd158` (2026-10-10). Recheck when #1123 changes state or on a Codex or pi + install report. + +## Follow-on items from the v1.3 video pass + +The 2026-10-10 pass over the v1.3 video and `main@49dd158` filed these items; rows above point at +the ones they touch, and each item holds its own decision and scope: +[#6934](https://github.com/melodic-software/claude-code-plugins/issues/6934), [#6935](https://github.com/melodic-software/claude-code-plugins/issues/6935), [#6936](https://github.com/melodic-software/claude-code-plugins/issues/6936), +[#6937](https://github.com/melodic-software/claude-code-plugins/issues/6937), [#6938](https://github.com/melodic-software/claude-code-plugins/issues/6938), [#6939](https://github.com/melodic-software/claude-code-plugins/issues/6939), +[#6940](https://github.com/melodic-software/claude-code-plugins/issues/6940), [#6941](https://github.com/melodic-software/claude-code-plugins/issues/6941), [#6942](https://github.com/melodic-software/claude-code-plugins/issues/6942), +[#6943](https://github.com/melodic-software/claude-code-plugins/issues/6943), [#6944](https://github.com/melodic-software/claude-code-plugins/issues/6944), [#6945](https://github.com/melodic-software/claude-code-plugins/issues/6945), +[#6946](https://github.com/melodic-software/claude-code-plugins/issues/6946), [#6997](https://github.com/melodic-software/claude-code-plugins/issues/6997), and +[melodic-software/ci-runner#463](https://github.com/melodic-software/ci-runner/issues/463). ## Map From 9095d6db6a22f9f4e89d9aede4519f255f80320e Mon Sep 17 00:00:00 2001 From: Kyle Sexton <153232337+kyle-sexton@users.noreply.github.com> Date: Sun, 11 Oct 2026 00:54:04 -0400 Subject: [PATCH 2/5] docs(upstream): end each row sentence before its follow-on pointer Co-Authored-By: Claude Opus 5.5 --- docs/upstream/mattpocock-skills.md | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/docs/upstream/mattpocock-skills.md b/docs/upstream/mattpocock-skills.md index 3b7307432b..8fce3f203d 100644 --- a/docs/upstream/mattpocock-skills.md +++ b/docs/upstream/mattpocock-skills.md @@ -41,7 +41,7 @@ adding, removing or renaming an upstream skill. Re-audit every affected row. |---|---|---|---| | `to-questionnaire` (Productivity; graduated from in-progress in v1.2.0 #593) | `planning:questionnaire` | Derived | Interview-the-send invariant kept; output relocated cwd → memory slice (PII); grill→interview vocabulary; tracker-item option added. Re-audited against v1.2.3: no delta — his graduation commit is a 100%-similarity rename, his one body change (template XML-ification) is already reflected in our template, and ours is otherwise a superset (route-away, overwrite guard, role-slug multi-recipient). Qualified 2026-10-04: the XML-ified template is reflected, but upstream's worked `` block (`to-questionnaire/SKILL.md:42-48`) is not; our `templates/questionnaire.md` has placeholders only. Deliberate divergence: upstream is user-invoked (`disable-model-invocation: true`), ours is model-invoked since the re-grade flip ([#2969](https://github.com/melodic-software/claude-code-plugins/issues/2969)). Behavior unchanged upstream at `d81f3a1` | | `wayfinder` | `planning:wayfind` | Partial | Fog-of-war framing + ticket-vs-fog (sharpness) distinction; REJECTED file-based map (native tracker primitives instead) and upstream tracker seam. v1.2 re-audit: ADOPTED parallel research burn-down (work-mode exception + chart-mode offer) and the in-chart no-fog bail-out; "decision ticket" term present as our "decision item" (parity under work-items vocabulary); REJECTED `research/` branch (two-lane branch-naming prohibition; resolution comments + memory tier already home the findings); map-clears handoff already present-stronger (named graduation targets). Course lane W (#2939): **C18 ADOPTED** (human-facing narration names items by title, number as link or suffix; `wayfind` only, not generalized to work-items); **C19 ADOPTED** (Out-of-scope is for scope not sharpness, fog never graduates there, a wrongly scoped item is closed + one linking line); **C20 ALREADY-PRESENT** (map-as-index — a decision lives in its own item; the map gists and links, never restates). Upstream field reports, open as of 2026-10-10: [#828](https://github.com/mattpocock/skills/issues/828) (resolutions do not reach the tickets they invalidate), [#944](https://github.com/mattpocock/skills/issues/944) (the map body outgrows a size-capped field and is truncated silently). Closed: [#576](https://github.com/mattpocock/skills/issues/576) (research tickets open draft PRs), fixed 2026-10-07 by upstream `8295b8e` (research branches are pushed with no PR); [#530](https://github.com/mattpocock/skills/issues/530), the `research` skill's recursive-spawn report behind the parallel burn-down, closed not planned 2026-10-06 by `.out-of-scope/subagent-recursion.md` (the harness, not the skill, bounds subagent recursion). `8295b8e`'s other wayfinder changes are recorded in the map's row 17; this row's verdicts were not re-graded at `49dd158` | -| `batch-grill-me` / `grilling` rounds | `planning:interview` (propagated to `prd`/`design`/`plan`) | Derived (behavior) | Frontier-rounds model, facts-vs-decisions split, confirmation gate; no-grill vocabulary constraint; background fact sub-agents. v1.2 re-audit: ADOPTED ❓/➡️ emoji anchors as opt-in `userConfig` (`use_emoji_question_markers`, default off; decoration of the single verdict marker); answer-by-number dictation and any-order answering confirmed already present; REJECTED one-question-at-a-time opt-out line (his seam is the consumer's own global CLAUDE.md — platform-native, nothing for the plugin to ship) Follow-on: [#6946](https://github.com/melodic-software/claude-code-plugins/issues/6946), an eval case for a question whose recommendation is negative (upstream #706); a wording rule follows only if it fails. | +| `batch-grill-me` / `grilling` rounds | `planning:interview` (propagated to `prd`/`design`/`plan`) | Derived (behavior) | Frontier-rounds model, facts-vs-decisions split, confirmation gate; no-grill vocabulary constraint; background fact sub-agents. v1.2 re-audit: ADOPTED ❓/➡️ emoji anchors as opt-in `userConfig` (`use_emoji_question_markers`, default off; decoration of the single verdict marker); answer-by-number dictation and any-order answering confirmed already present; REJECTED one-question-at-a-time opt-out line (his seam is the consumer's own global CLAUDE.md — platform-native, nothing for the plugin to ship). Follow-on: [#6946](https://github.com/melodic-software/claude-code-plugins/issues/6946), an eval case for a question whose recommendation is negative (upstream #706); a wording rule follows only if it fails. | | grilling-family rework (upstream PR #532) | `planning:interview`, `architecture:improve` | Partial | decision-tree rename, domain-routing, primitive-vs-variant boundary; ADR 3-gate + glossary purity previously recorded as house additions — **annotated 2026-08-18 (lane 5 audit-answers pass, two independent validators):** current upstream main's `domain-modeling` carries both near-identically; direction/timing unverifiable at annotation time (upstream git history behind a blocked API) — treat as convergent-or-derived, not house-original | | `git-guardrails-claude-code` (misc) | `guardrails` `block-dangerous-git` hook | Derived (capability only) | Capability adopted; substring-matching implementation REJECTED wholesale (false-blocks) — house argv-grammar parser instead | | upstream PR #464 (review checklist) | `review` code-reviewer Fowler baseline | Pointer | Surfaced the idea; content re-derived from Fowler, *Refactoring* 2nd ed. ch. 3 — no upstream phrasing | @@ -52,7 +52,7 @@ adding, removing or renaming an upstream skill. Re-audit every affected row. | `to-tickets` | `work-items:decompose` | Partial | Vertical-slice / tracer-bullet vocabulary overlaps upstream and the seam plumbing is house-built — but "influence (vocabulary)" understated it, and disagreed with map row 15, which already graded this PARTIAL. Lane B (#2935) adopted four **mechanics**, not just phrasing: prefactor-as-blocker (C5, `decompose/SKILL.md:63`), the one-fresh-context-window sizing bar (C6, `:65`), the integration-branch fallback (C7, `:98`), and the PR-variant agent brief (C17, `agent-brief.md:82`). Only C8 — "work the frontier" (`:102`, `:201`) — is vocabulary. Lane B verdicts: **C5, C6, C7, C8, C17 all ADOPTED** | | `tdd` / `tests.md` / `mocking.md` | `planning:plan` Test strategy, `tdd:principles`, `testing:write`, `review` code-reviewer | Partial | Course lane C (#2936): **C9 PARTIAL, relocated** (pre-agreed-boundary discipline lands in `plan`'s existing Test strategy element — deliberately NOT phrased as "seam" (fleet-registered vocabulary) and NOT hosted by `implementation:phase-verifier`; upstream's hard consent gate softened to a `DEVIATIONS.md` record an unattended run can satisfy); **C10 ALREADY-PRESENT (prose)** (tautological-test anti-pattern at `anti-patterns-khorikov.md` + `testing/write`; the prose-only coverage was an overstatement corrected in-lane, and the executable half landed as a `code-reviewer.md` criterion, `review` 0.24.0, ceding the textually-identical core to `cant-fail-scan.sh` when that scan's output is in context); **C11 ALREADY-PRESENT + one clause** (`test-doubles.md` has carried SDK-style-interfaces-over-generic-fetchers since `85aa8066`; added only the missing subordination clause — the shape rule never widens *what* gets mocked). Zero-assembly chain doc REJECTED with reasons (the drafted chain was factually wrong). Map row 13 | | `improve-codebase-architecture` YAGNI scoping filter (v1.2 #533) | `architecture:improve` deepening Phase 1 | Partial | ADOPTED scope-before-scanning: user-named direction scopes the scan, else recent-commit hot spots pull attention first (precomputed context widened to 20 commits). REJECTED his glossary file reference (`CONTEXT.md` at v1.2.3, renamed `GLOSSARY.md` in v1.3; our glossary-discovery ladder instead). Corrected 2026-10-04: the HTML report was ADOPTED (self-contained file in a temp dir, three recommendation badges; `architecture/skills/improve/actions/deepening.md:66-85`, since `30cf0343f`); only the CDN Tailwind and Mermaid loading is rejected. Upstream v1.3 removed the inbound `diagnosing-bugs` post-mortem hand-off to this skill (`1dab982`) | -| `diagnosing-bugs` (v1.2.3 Redact + tagged logs) | `debugging:debug`, `testing:diagnose` | Partial | ADOPTED the redaction guard in both skills (secrets `` before any shown command/output/artifact; env-var credentials; signal-lines-only quoting) and the `[DEBUG-a4f2]` tagged-log convention in `testing:diagnose` (already present in `debugging:debug`). Re-evaluated at `d81f3a1` (2026-10-04): the ranked construction strategies and 3-5 ranked hypotheses are ALREADY-PRESENT (`debugging/skills/debug/SKILL.md:61-72`, `:112-122`). Real gaps, under evaluation: upstream's minimize step (`diagnosing-bugs/SKILL.md:78-86`; our `:152` and `:159` refer to a minimized repro no phase produces) and its Phase 1 completion criterion (one named command, already run, red output shown; `:59`, present since v1.2.3). Phase 6: upstream removed the post-mortem hand-off in `1dab982` (2026-08-15, upstream PR #880, fixing #453) because it was a Skill-tool call to a user-invoked skill from an often-unattended flow; graded KEEP ours (REJECT the removal), since our Phase 6 (`SKILL.md:163-180`) files the finding and calls no skill. Upstream PR #1121 (merged 2026-10-04, released in v1.3.1, closing issue #1117) now sends the "what would have prevented this?" question to `retro` after the fix Follow-on: [#6945](https://github.com/melodic-software/claude-code-plugins/issues/6945), Phase 6 routing for check-shaped prevention answers. | +| `diagnosing-bugs` (v1.2.3 Redact + tagged logs) | `debugging:debug`, `testing:diagnose` | Partial | ADOPTED the redaction guard in both skills (secrets `` before any shown command/output/artifact; env-var credentials; signal-lines-only quoting) and the `[DEBUG-a4f2]` tagged-log convention in `testing:diagnose` (already present in `debugging:debug`). Re-evaluated at `d81f3a1` (2026-10-04): the ranked construction strategies and 3-5 ranked hypotheses are ALREADY-PRESENT (`debugging/skills/debug/SKILL.md:61-72`, `:112-122`). Real gaps, under evaluation: upstream's minimize step (`diagnosing-bugs/SKILL.md:78-86`; our `:152` and `:159` refer to a minimized repro no phase produces) and its Phase 1 completion criterion (one named command, already run, red output shown; `:59`, present since v1.2.3). Phase 6: upstream removed the post-mortem hand-off in `1dab982` (2026-08-15, upstream PR #880, fixing #453) because it was a Skill-tool call to a user-invoked skill from an often-unattended flow; graded KEEP ours (REJECT the removal), since our Phase 6 (`SKILL.md:163-180`) files the finding and calls no skill. Upstream PR #1121 (merged 2026-10-04, released in v1.3.1, closing issue #1117) now sends the "what would have prevented this?" question to `retro` after the fix. Follow-on: [#6945](https://github.com/melodic-software/claude-code-plugins/issues/6945), Phase 6 routing for check-shaped prevention answers. | | `wait-what` (Productivity, NEW in v1.2 #751) | `discipline:wait-what` | Derived | Ported near-verbatim (one-sentence re-pitch body: back up, add missing context, ASD-STE100 register + inline gloss, ubiquitous language) as a declared non-corrector species in `discipline` beside `tighten-your-output`/`mind-your-maxims` — home chosen on the blame axis (the drift is the model's output, not the user's comprehension). Name KEPT with an explicit PLUGIN-PHILOSOPHY naming-exception entry (utterance-is-mechanism + upstream muscle-memory parity; a 5-generator/3-judge naming tournament's grammar-clean winner `re-pitch` was declined by the user). REJECTED his fixed glossary filenames: `CONTEXT.md` at v1.2.3, renamed `GLOSSARY.md` / `GLOSSARY-MAP.md` in v1.3 (`006a52b`) with no fallback for the old names (open upstream issue [#1153](https://github.com/mattpocock/skills/issues/1153), no migration path). Ours keeps format-externalized discovery: the nearest glossary or context map per the consumer's convention, plain technical English when none exists (`discipline/skills/wait-what/SKILL.md:15-17`). Re-checked 2026-10-04: his v1.3 map-following (`GLOSSARY-MAP.md` to the right `GLOSSARY.md`, upstream PR #904) now matches ours, so the rejection covers only the fixed names. Shape evidence: his X thread (status 2084753070437609606 → 2084941367659168064 → 2085681281795232026) — the same instruction failed as passive global CLAUDE.md AND as an output style; only the on-demand skill works, so the register text lives in the body, invoked at the moment of loss | | `wizard` (Engineering; graduated from in-progress in v1.2) | `wizard:generate` | Derived | PORTED (lane 4) as a new single-capability plugin `wizard` 0.1.0, hardened. Kept: the 4-step scope/map/author/verify process, the fixed never-hand-edited library above the `STAGES` marker, model-invoked posture with the explicit non-trigger fence, gh-absence graceful degradation, ephemeral-by-default doctrine, agent-authors-never-runs doctrine. Hardened beyond upstream (deltas enumerated in `plugins/wizard/CHANGELOG.md` 0.1.0): mandatory human read-and-approve of the full STAGES block before `chmod +x`; https-only `open_url` (also closes a Windows UNC/NTLM leak via explorer.exe); `/dev/tty` fail-closed prompts (retires a verified multi-line-paste confirm bypass and `pause`'s fail-open at EOF); quoted `0600` `.env` writes + gitignore assert + trap-cleaned atomic temp; repo-resolved/confirmed `--repo`-explicit gh writes with stderr surfaced and empty values refused; key-name validation; readline on non-secret asks (fixes upstream #741 where safe); names-only live-`.env` scoping with the secrets-and-context property stated honestly. REJECTED: Codex `agents/openai.yaml` sidecar (no Codex target — standing precedent). Upstream status 2026-10-04: the template dropped "time remaining" (v1.2.3), but the docs page still advertises it (`docs/engineering/wizard.md:44`), so a later sync must not bring it back. Upstream bugs ported as fixes: [#1041](https://github.com/mattpocock/skills/issues/1041) (`write_env` never assigns the shell variable) and [#811](https://github.com/mattpocock/skills/issues/811) (a symlinked `.env` is replaced, not written through) in 0.6.4; [#1142](https://github.com/mattpocock/skills/issues/1142) (editing the script mid-run re-runs or kills it), fixed upstream in `49dd158` by wrapping the stages in `run_wizard`, ported with `exit` moved inside the function so a formatter that splits `run_wizard "$@"; exit` cannot undo it | | `prototype` `LOGIC.md` shareable-HTML demo (Engineering, v1.2) | `prototype:pressure-test` | Partial | ADOPTED (lane 5) the audience-routed HTML demo shell: TUI stays default; when the driver is a non-developer (designer, PM, domain expert) or no terminal fits, the disposable shell over the same portable pure logic module is one self-contained `file://` page — domain-language labels, labeled state panel re-rendered per click, free-play buttons, guided-walkthrough scenarios resetting to a known initial state — under explore-directions' existing HTML-substrate constraint set reused verbatim-in-spirit (restrictive CSP meta tag, ephemeral `mktemp -d` / `%LOCALAPPDATA%\Temp` placement, synthetic data only, discard after the markdown capture). prototype 0.5.0. REJECTED the other half of upstream's step 5: the throwaway-branch "primary source" capture that keeps the prototype re-runnable on a branch — a two-lane branch-naming posture violation that also contradicts the plugin's delete-when-done discipline (`plugins/prototype/context/discipline.md`, "Delete or absorb when done") | @@ -60,9 +60,9 @@ adding, removing or renaming an upstream skill. Re-audit every affected row. | `teach` (Productivity) | `education:teach` | Derived | Corrected by the `teach-skill-comparison` topic audit (PR #2958) — this row previously sat under "Not adopted", which is provably false: the original port took his workspace vocabulary (MISSION / GLOSSARY / RESOURCES / NOTES + learning records as "teaching ADRs"), near-verbatim FORMAT-spec content, and the K-S-W / ZPD / community-delegation pedagogy with learning-record doctrine. REJECTED: cwd-as-workspace (dedicated per-project workspace roots instead), Codex `agents/openai.yaml` sidecar (standing precedent), HTML references (the durable trio — reference, records, glossary — stays markdown). ADDED house-built: codebase mode, primer action, assess, staleness doctrine, evals, slug-collision guards, workspace-root resolution ladder. RE-ADOPTED in the same audit (education 0.7.0): storage-strength pedagogy (fluency-vs-storage, desirable-difficulty triad, knowledge/skills asymmetry, equal-length quiz answers) and HTML-first interactive lessons with a shared `assets/` library (answer-shuffling quiz component — fixes his #335 class of always-option-C bug); his acknowledged no-review-scheduling gap is out-executed via spaced review surfaced at resume/status from learning-record age × domain velocity | | `codebase-design` (Engineering) | `architecture:improve` deepening vocabulary (`research/deepening/vocabulary.md:9-30`) | Derived | Corrected 2026-10-04 from the map's earlier CONVERGENT / "not ported": the Module, Interface, Depth, Seam, Adapter, Leverage and Locality terms, the deletion test and "one adapter = hypothetical seam, two = real" were ported near word for word when the plugin was added (`30cf0343f`, 2026-07-10). Upstream open issues [#449](https://github.com/mattpocock/skills/issues/449) and [#458](https://github.com/mattpocock/skills/issues/458) report it used as a session driver and ask how to apply it | | `implement-spec` (Engineering, graduated in v1.3) | `implementation:implement-dispatch` (phase waves inside one item); `work-items:ship` with the integration-branch execution shape (`work-items/reference/execution-shape.md`), which is sequential and operator-driven | Convergent / Partial | Nothing taken yet. Upstream runs a container's whole ready frontier in one run (worktree per ticket, one integration branch, final `code-review`); ours has the task graph and frontier but no executor that fans a container out. That executor is tracked as [#6942](https://github.com/melodic-software/claude-code-plugins/issues/6942) (`/work-items:ship run #N`), after [#6412](https://github.com/melodic-software/claude-code-plugins/issues/6412) (item-list dispatch with dependency order and a base parameter). Rechecked at `main@49dd158` (2026-10-10): upstream's open issue [#936](https://github.com/mattpocock/skills/issues/936) (the frontier cannot advance mid-run because tickets close only when the PR merges) does not apply here, since our integration-branch shape closes each item as a checkpoint when it lands (`work-items/reference/execution-shape.md`, "Closing a checkpoint records durable progress"). The worker's worktree-base check is present for the default branch (`implementation/skills/implement-dispatch/SKILL.md` item 9, `implementation/agents/implementer.md`); a named integration-branch base needs a parameter, carried by #6412, because harness `isolation: worktree` cannot base a worktree on a named branch ([sub-agents docs](https://code.claude.com/docs/en/sub-agents), `isolation` row; upstream #942). Upstream's one full-run report, closed issue [#1010](https://github.com/mattpocock/skills/issues/1010), found: merge inline and dispatch a merger subagent only on conflict, keep the orchestrator from diagnosing failing checks inline, and name branches for discovered work and Spec-axis findings; these are inputs to #6942, none adopted here. Still a candidate, not adopted: dispatched workers return red-run evidence (upstream's #1035 fix, the implementer runs `tdd`) | -| `pr` (Engineering, graduated in v1.3) | `source-control:pull-request` (body contract, `reference/create.md`); `visualization:visualize` (`context/code-shapes.md`, the same humanlayer `show-me` menu, recorded in [`humanlayer-skills.md`](humanlayer-skills.md)); the merge lane's door test on the actual diff (`autonomy/reference/guardrails/work-classes.md`) | Partial (convergent) | Same `show-me` source reached us through humanlayer, not through him. REJECTED his body template: it drops the `## Fix`, `## Verification` and `## Related` sections our PR body contract requires. Door-based merge gating is already present on the merge lane. Under evaluation, not adopted: a one-way/two-way door and blast-radius line in the body for the human reviewer, and routing the PR-body path through the smallest-visual menu with an opt-out (his first version said a forced diagram is worse than none) Follow-on: [#6934](https://github.com/melodic-software/claude-code-plugins/issues/6934) (a `Left out:` line in Verification), [#6943](https://github.com/melodic-software/claude-code-plugins/issues/6943) (risk-only explain-change), [#6997](https://github.com/melodic-software/claude-code-plugins/issues/6997) (pull-request eval fixture). | -| `retro` (Engineering, graduated in v1.3) | `session-flow:retro`, `session-flow:running-retro` | Convergent | Ours predates his (`ebeda7397`, 2026-07-11, against his `8fa1886`, 2026-08-24) and took nothing from it. His seven categories (Navigation, Automated checks, Coding standards, Global AGENTS.md, Tool economy, No-ops, Information access; `retro/SKILL.md:17-23`) were compared on 2026-10-04. Gaps in ours, candidates under evaluation, none adopted: a deterministic-check route (a mechanical finding becomes a hook, lint or test before a written rule; upstream PR #1083), a removal pass for rules the session contradicted or made obsolete, and skill edits routed through the same approval gate. His No-ops category is not a gap (`harness-config:audit-instructions` and `unhobble` cover it). Ideas seen only in upstream reports, such as reading subagent sessions after `implement-spec` (open issue [#1141](https://github.com/mattpocock/skills/issues/1141)), go eval-first before any adoption Follow-on: [#6944](https://github.com/melodic-software/claude-code-plugins/issues/6944), the deterministic-check route. | -| `resolving-merge-conflicts` (Engineering; removed upstream in v1.3) | `source-control:resolve-conflicts` | Derived | Corrected 2026-10-04 from the map's earlier CONVERGENT / "not ported": ours was added in source-control 0.3.0 by PR #200 (`2ebc55db1`, 2026-07-15, branch `absorb/pocock-mechanisms`, the external-skills census), after his skill (`81ddacb`, 2026-06-02), and his five steps map one to one to ours, including "always resolve; never `--abort`". Upstream removed the skill in `daa01d8aa68ad5c61b68970ec2018d0ce9567be6` ("nothing replaces it"; the agent handles conflicts without a skill); its docs page stays up marked archived (`docs/engineering/resolving-merge-conflicts.md:1`). DECIDED: keep ours pending an eval. `babysit-loop`, `babysit-prs` and `pull-request` route conflicts to it, it carries a repo-specific version-bump step, and no run has measured it with versus without the skill. Next step: add eval assertions for the archived page's "It's working if" items (finish every stop of a multi-commit rebase, add nothing that was on neither branch, quote PR or issue sources), then run a with/without comparison; delete only if the skill measures as a no-op The paid with/without run is [#6939](https://github.com/melodic-software/claude-code-plugins/issues/6939). | +| `pr` (Engineering, graduated in v1.3) | `source-control:pull-request` (body contract, `reference/create.md`); `visualization:visualize` (`context/code-shapes.md`, the same humanlayer `show-me` menu, recorded in [`humanlayer-skills.md`](humanlayer-skills.md)); the merge lane's door test on the actual diff (`autonomy/reference/guardrails/work-classes.md`) | Partial (convergent) | Same `show-me` source reached us through humanlayer, not through him. REJECTED his body template: it drops the `## Fix`, `## Verification` and `## Related` sections our PR body contract requires. Door-based merge gating is already present on the merge lane. Under evaluation, not adopted: a one-way/two-way door and blast-radius line in the body for the human reviewer, and routing the PR-body path through the smallest-visual menu with an opt-out (his first version said a forced diagram is worse than none). Follow-on: [#6934](https://github.com/melodic-software/claude-code-plugins/issues/6934) (a `Left out:` line in Verification), [#6943](https://github.com/melodic-software/claude-code-plugins/issues/6943) (risk-only explain-change), [#6997](https://github.com/melodic-software/claude-code-plugins/issues/6997) (pull-request eval fixture). | +| `retro` (Engineering, graduated in v1.3) | `session-flow:retro`, `session-flow:running-retro` | Convergent | Ours predates his (`ebeda7397`, 2026-07-11, against his `8fa1886`, 2026-08-24) and took nothing from it. His seven categories (Navigation, Automated checks, Coding standards, Global AGENTS.md, Tool economy, No-ops, Information access; `retro/SKILL.md:17-23`) were compared on 2026-10-04. Gaps in ours, candidates under evaluation, none adopted: a deterministic-check route (a mechanical finding becomes a hook, lint or test before a written rule; upstream PR #1083), a removal pass for rules the session contradicted or made obsolete, and skill edits routed through the same approval gate. His No-ops category is not a gap (`harness-config:audit-instructions` and `unhobble` cover it). Ideas seen only in upstream reports, such as reading subagent sessions after `implement-spec` (open issue [#1141](https://github.com/mattpocock/skills/issues/1141)), go eval-first before any adoption. Follow-on: [#6944](https://github.com/melodic-software/claude-code-plugins/issues/6944), the deterministic-check route. | +| `resolving-merge-conflicts` (Engineering; removed upstream in v1.3) | `source-control:resolve-conflicts` | Derived | Corrected 2026-10-04 from the map's earlier CONVERGENT / "not ported": ours was added in source-control 0.3.0 by PR #200 (`2ebc55db1`, 2026-07-15, branch `absorb/pocock-mechanisms`, the external-skills census), after his skill (`81ddacb`, 2026-06-02), and his five steps map one to one to ours, including "always resolve; never `--abort`". Upstream removed the skill in `daa01d8aa68ad5c61b68970ec2018d0ce9567be6` ("nothing replaces it"; the agent handles conflicts without a skill); its docs page stays up marked archived (`docs/engineering/resolving-merge-conflicts.md:1`). DECIDED: keep ours pending an eval. `babysit-loop`, `babysit-prs` and `pull-request` route conflicts to it, it carries a repo-specific version-bump step, and no run has measured it with versus without the skill. Next step: add eval assertions for the archived page's "It's working if" items (finish every stop of a multi-commit rebase, add nothing that was on neither branch, quote PR or issue sources), then run a with/without comparison; delete only if the skill measures as a no-op. The paid with/without run is [#6939](https://github.com/melodic-software/claude-code-plugins/issues/6939). | | `chief-of-staff` (in-progress, not graduated; `skills/in-progress/chief-of-staff/SKILL.md` at `main@49dd158`) | `session-flow:orchestrate`; the environment-improvement track overlaps `session-flow:retro` follow-on [#6944](https://github.com/melodic-software/claude-code-plugins/issues/6944) | Watch | Nothing taken. A long-running-goal posture on two tracks (tactical, and strategic: change the environment so the next task goes better), all work in background subagents, communication through context pointers, and a no-workarounds rule; convergent with `orchestrate` plus the retro idea. Not adopted while upstream is still editing it (five commits 2026-10-05 to 2026-10-06, "More playing around"). Recheck trigger: the skill moves out of `skills/in-progress/` or is removed | ## Not adopted (decided, with reasons) From a4fcccf645578c303932c50775875d56c832f1ce Mon Sep 17 00:00:00 2001 From: "melodic-automation-lanes[bot]" <337595936+melodic-automation-lanes[bot]@users.noreply.github.com> Date: Sun, 11 Oct 2026 04:56:08 +0000 Subject: [PATCH 3/5] docs: replace "load-bearing" metaphor in aihero-course provenance record Co-Authored-By: Claude Sonnet 5.5 --- docs/upstream/aihero-course.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/upstream/aihero-course.md b/docs/upstream/aihero-course.md index 0a7b70f5de..dab866ea18 100644 --- a/docs/upstream/aihero-course.md +++ b/docs/upstream/aihero-course.md @@ -206,7 +206,7 @@ paragraph. Eval cases `lock-halts-on-planted-open-decision` (id 15) and `plugins/planning/skills/interview/evals/evals.json`, each with planted fixtures under `plugins/planning/skills/interview/evals/fixtures/`; because the marketplace has no model-graded eval runner yet, the mechanical gate behind them is -`plugins/planning/tests/interview-defenses.test.sh`, which pins both cases and the load-bearing +`plugins/planning/tests/interview-defenses.test.sh`, which pins both cases and the exact rule text in the skill body they grade against. | Lesson claim | Ours | Verdict | Reasoning, basis, as-of | @@ -267,7 +267,7 @@ the chain record's "course side UNVERIFIED" caveat on the clear step. | Walkthrough machinery (npm run reset, `.agents/skills`, the `/` picker) and the lesson-comments example questions | Course-platform machinery and illustration | **NOT RELEVANT** | No repo counterpart owed. As-of 2026-08-17 | | The loop's "clear" leg (clear your mind between features) | Recommend-clear (never auto-clear) sits post-Brief, licensed by Brief/ledger persistence — which dissolves upstream's own recorded no-ledger complaint | **DELIBERATELY DIFFERENT** (course side resolved) | The chain record carried "course side UNVERIFIED (lesson unreachable)" with a reopen-on-text condition; the condition fired at harvest — the committed lesson paste teaches no clear-step mechanics beyond one sentence plus a dictionary link, so the deliberate difference is confirmed against the actual text and the UNVERIFIED caveat retires. Upstream's own repo docs teach the opposite of a mandatory clear ("Hand the same conversation straight to to-spec"); loop-position nuance recorded. As-of 2026-08-18 | | Ungrillable question → prototype detour (upstream fires it mid-grilling: "stop grilling… build the throwaway version… come back and answer in one line") | Absent from the interview (grep-confirmed by both audit validators); our route exists only downstream (wayfind / plan / brainstorm) | **ADOPT** (delivered) | Chain audit finding, upstream-repo-grounded. Filed: [#2998](https://github.com/melodic-software/claude-code-plugins/issues/2998); delivered by [#3045](https://github.com/melodic-software/claude-code-plugins/pull/3045) — `interview` now carries the detour in "Mid-interview composition" (routing look-and-feel to `/prototype:explore-directions`, logic/state/data-shape to `/prototype:pressure-test`) plus a **Needs-an-artifact** arm in the `context/loop.md` categorization taxonomy; planning 0.32.0. As-of 2026-08-19 | -| Plan-mode-off while grilling | Beyond upstream's taste point, a mechanical edge the audit surfaced: the ask-time register write is load-bearing and plan mode's read-only enforcement blocks it | **ADOPT** (delivered) | Includes reconciling `planning:plan`'s clarifying-rounds-in-plan-mode sentence with the lane 4 asset-rush doctrine. Filed: [#2998](https://github.com/melodic-software/claude-code-plugins/issues/2998); delivered by [#3045](https://github.com/melodic-software/claude-code-plugins/pull/3045) — the gotcha lands in `interview/context/gotchas.md`, and `plan`'s plan-mode round is now scoped to a scoping confirm with substantive rounds routed to `/planning:interview` outside plan mode; planning 0.32.0. As-of 2026-08-19 | +| Plan-mode-off while grilling | Beyond upstream's taste point, a mechanical edge the audit surfaced: the ask-time register write must happen, and plan mode's read-only enforcement blocks it | **ADOPT** (delivered) | Includes reconciling `planning:plan`'s clarifying-rounds-in-plan-mode sentence with the lane 4 asset-rush doctrine. Filed: [#2998](https://github.com/melodic-software/claude-code-plugins/issues/2998); delivered by [#3045](https://github.com/melodic-software/claude-code-plugins/pull/3045) — the gotcha lands in `interview/context/gotchas.md`, and `plan`'s plan-mode round is now scoped to a scoping confirm with substantive rounds routed to `/planning:interview` outside plan mode; planning 0.32.0. As-of 2026-08-19 | | Provenance correction (adjacent, from the chain audit) | SSOT PR-#532 row | **CORRECTED in SSOT** | The row's "ADR 3-gate + glossary purity are house additions" claim is contradicted on current upstream main (`domain-modeling` carries both near-identically); annotated as convergent-or-derived, direction unverifiable. As-of 2026-08-18 | | Round template separates consecutive questions with a horizontal rule `---` (upstream commit `85f83d3f`) | `interview` round shape is the per-question block in SKILL.md "Relentless mode" (`Q:` lead, recommendation, `Basis:`, alternatives); no rule between blocks | **REJECT** (cosmetic, not adopted) | The only change to `grilling/SKILL.md` between `068b6e0` and `3cca18b3`; it alters no behavior. Each of our blocks opens with its own `Q:` lead and ends in an Alternatives list, so the marker adds nothing the blocks do not already carry. Corrected 2026-10-04: an earlier reason here said the rule renders as a heading; upstream puts a blank line before it, so it renders as a thematic break, and the REJECT stands on the cosmetic ground only. Reopen if a user reports rounds running together. As-of 2026-10-04 | From f2fcc40197ab74b5c73e953e9cc9aeee3c4b84d3 Mon Sep 17 00:00:00 2001 From: Kyle Sexton <153232337+kyle-sexton@users.noreply.github.com> Date: Sun, 11 Oct 2026 00:59:43 -0400 Subject: [PATCH 4/5] docs(upstream): date the factory term rows apart from the lane 6 record Co-Authored-By: Claude Opus 5.5 --- docs/upstream/aihero-course.md | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/docs/upstream/aihero-course.md b/docs/upstream/aihero-course.md index dab866ea18..96dc6123b3 100644 --- a/docs/upstream/aihero-course.md +++ b/docs/upstream/aihero-course.md @@ -449,8 +449,6 @@ the glossary carries the vocabulary, this table carries why. | highway / stale highway | **REJECT** (as canonical) | Metaphor duplicating "navigation pointer"; survives only as the quoted mnemonic in #2987's C7 note | | grill-execute-clear (loop name) | **REJECT** (mapping recorded) | Lane 5 Q36: a second name for a loop the house workflow taxonomy already owns | | design tree | **EQUIVALENT** (no action) | Lane 5: equivalent to our "decision tree"; recorded, nothing to adopt | -| software factory | **REJECT** (mapping recorded) | Maps to our loop lane (`docs/conventions/loop-lane/README.md`: `work-items:work-loop`, `source-control:babysit-loop`, CI intake triage). His dictionary defines it as agent sessions "started by triggers ... rather than by a human" ([entry](https://www.aihero.dev/ai-coding-dictionary/software-factory)); a second name for a concept the house already owns violates vocabulary parsimony. As-of 2026-10-10 | -| dark factory | **RECORDED** (definition only) | His [entry](https://www.aihero.dev/ai-coding-dictionary/dark-factory): a software factory that "writes the code and no human reads it", with automated checks and automated review as the only gates. Recorded so the term can be matched when upstream material uses it; no project term adopted. As-of 2026-10-10 | **Cross-skill invocation phrasing (the routed lane 7 candidate):** ADOPT (adapted). Upstream standardized cross-skill dependencies on explicit "Call the Skill tool with \"name\"" phrasing @@ -464,6 +462,17 @@ lane and scoped to new/edited text, with the fleet normalization sweep filed as [#3002](https://github.com/melodic-software/claude-code-plugins/issues/3002). The sweep landed 2026-08-21; the scoping note is retired and the rule is now unconditional. +### Terms from the v1.3 video pass (decided 2026-10-10) + +Graded outside lane 6, in the interview on Matt Pocock's "New Skills! v1.3" video +([#6947](https://github.com/melodic-software/claude-code-plugins/issues/6947)), under the same +admission rule. The glossary mirrors the REJECT row. + +| Term | Verdict | Basis | +|---|---|---| +| software factory | **REJECT** (mapping recorded) | Maps to our loop lane (`docs/conventions/loop-lane/README.md`: `work-items:work-loop`, `source-control:babysit-loop`, CI intake triage). His dictionary defines it as agent sessions "started by triggers ... rather than by a human" ([entry](https://www.aihero.dev/ai-coding-dictionary/software-factory)); a second name for a concept the house already owns violates vocabulary parsimony. As-of 2026-10-10 | +| dark factory | **RECORDED** (definition only) | His [entry](https://www.aihero.dev/ai-coding-dictionary/dark-factory): a software factory that "writes the code and no human reads it", with automated checks and automated review as the only gates. Recorded so the term can be matched when upstream material uses it; no project term adopted. As-of 2026-10-10 | + ## Coverage index (the journey's completion gate) One row per course lesson vetted by this effort; every opinionated claim in each lesson maps to From 7bfd950e88b3351988e2c5a0bc86ac55d515e2c2 Mon Sep 17 00:00:00 2001 From: "melodic-automation-lanes[bot]" <337595936+melodic-automation-lanes[bot]@users.noreply.github.com> Date: Sun, 11 Oct 2026 05:02:07 +0000 Subject: [PATCH 5/5] docs(upstream): replace load-bearing with the dependency it names Co-Authored-By: Claude Sonnet 5.5 --- docs/upstream/aihero-course.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/upstream/aihero-course.md b/docs/upstream/aihero-course.md index 96dc6123b3..23af9be6ab 100644 --- a/docs/upstream/aihero-course.md +++ b/docs/upstream/aihero-course.md @@ -91,8 +91,8 @@ the same day: `plugins/session-flow/skills/handoff/SKILL.md`, |---|---|---|---| | Handoff serves crossing boundaries: another agent, another repo, a colleague, a forked side task | `session-flow:handoff` "When to invoke" list; "sharing state with another session or machine" bullet | **ADOPT** (as a union) | User decision (#2899 comment 1): our dominant session-chain use (dumb-zone escape, session-ID chain, retrospective reconstruction) is named first-class ALONGSIDE his taxonomy, not instead of it; the deliverable is explicit routing signals for which form to use when. Filed: [#2956](https://github.com/melodic-software/claude-code-plugins/issues/2956). As-of 2026-08-17 | | A single purpose argument ("What will the next session be used for?") tailors the doc to the next session's focus | No purpose argument; surface is `[file\|prompt] [topic]`; intent lives in the verbatim Original goal section | **ADOPT** | Shape decided in-lane: optional trailing free text `[file\|prompt] [topic] [purpose...]`; tailors emphasis only (Resumption brief lead, Suggested skills selection, Remaining-actions order); never drops sections; never alters the resume-prompt shape (find-handoff detection contract); Original-goal immutability wins on conflict. Filed: [#2955](https://github.com/melodic-software/claude-code-plugins/issues/2955). As-of 2026-08-17 | -| Save the handoff to the OS temp directory, not the current workspace | `/handoffs/` (default `.work/handoffs/`), memory tier, self-gitignored | **REJECT** | Placement is load-bearing for us: retro's `previous_handoff` chain-walk, find-handoff recovery, and the cross-machine origin line all depend on workspace placement; OS-temp volatility is the failure class upstream's own corpus hit (temp-sweep in mattpocock/skills#306 context, durability ask in #482). His self-cleaning benefit is replaced by user-controlled removal. Confirms the #1477 finding-4 verdict (PR #1560). As-of 2026-08-17 | -| Lifecycle: temp placement self-cleans, so files never accumulate | Accumulation by design ("Multiple handoffs accumulate in the directory, fine", structure.md); nothing expires files | **REJECT** (silent expiry) | User decision (#2899 comment 1): handoffs stay primarily ephemeral in a location we control; cleanup is user-controlled removal, never silent expiry or OS cleanup. Retention is load-bearing (chain-walk, recovery, carry-forward), which is the recorded #1477 finding-4 rationale (issue comment 5084364831); this lane confirms rather than reverses it. Promote-content-never-file rule and worktree caveat filed: [#2956](https://github.com/melodic-software/claude-code-plugins/issues/2956). As-of 2026-08-17 | +| Save the handoff to the OS temp directory, not the current workspace | `/handoffs/` (default `.work/handoffs/`), memory tier, self-gitignored | **REJECT** | Placement is a hard dependency for us: retro's `previous_handoff` chain-walk, find-handoff recovery, and the cross-machine origin line all depend on workspace placement; OS-temp volatility is the failure class upstream's own corpus hit (temp-sweep in mattpocock/skills#306 context, durability ask in #482). His self-cleaning benefit is replaced by user-controlled removal. Confirms the #1477 finding-4 verdict (PR #1560). As-of 2026-08-17 | +| Lifecycle: temp placement self-cleans, so files never accumulate | Accumulation by design ("Multiple handoffs accumulate in the directory, fine", structure.md); nothing expires files | **REJECT** (silent expiry) | User decision (#2899 comment 1): handoffs stay primarily ephemeral in a location we control; cleanup is user-controlled removal, never silent expiry or OS cleanup. Chain-walk, recovery, and carry-forward all require retention, which is the recorded #1477 finding-4 rationale (issue comment 5084364831); this lane confirms rather than reverses it. Promote-content-never-file rule and worktree caveat filed: [#2956](https://github.com/melodic-software/claude-code-plugins/issues/2956). As-of 2026-08-17 | | Do not duplicate content captured in other artifacts (specs, plans, ADRs, issues, commits, diffs); reference by path or URL | Partial: "Summarize; never transcribe" (File roles), "reference it rather than restating" (Decisions); no general rule | **ADOPT** | User decision (#2899 comment 1): state the general rule explicitly in the skill body, mirroring upstream's wording; explicit over implicit. Filed: [#2956](https://github.com/melodic-software/claude-code-plugins/issues/2956). As-of 2026-08-17 | | Include a suggested-skills section naming what the next agent should invoke | Suggested skills is a mandatory section of the handoff structure | **COVERED** | Present at parity or stronger (presence-gated per-skill suggestions, structure.md mandatory section set). As-of 2026-08-17 | | Redact sensitive information (API keys, passwords, PII) | Mandatory redaction step with the git-remote-userinfo strip exception | **COVERED** | Ours is the more specified form of the same rule. As-of 2026-08-17 |