v3.1.0 — convert to a plugin and add the plan-module skill - #2
Merged
Conversation
Repo becomes a Claude Code plugin so it can host the planned plan-module and execute-plan skills alongside the existing one. The scaffolding skill is renamed code-idea -> scaffold, since skills namespace as <plugin>:<skill> and code-idea:code-idea stutters. docs/roadmap.md becomes docs/development-roadmap.md: Module -> Sub-Module blocks with Status, Depends on, and scope boundaries, generated unconditionally because downstream module planning reads it as an input contract. It stops at sub-modules -- task tables are plan-module's output, and inventing them before any code exists would be guessing. Step 2 gains a decomposition question and a one-decision-at-a-time confirmation rule, paid for by merging two questions and dropping a duplicate example, so SKILL.md stays at 119 lines. The description gains sibling anti-triggers at 1006/1024 chars with every trigger phrase intact. CI now validates description length, frontmatter name, and manifest version on every tag -- S33 was a manual check guarding a failure that already shipped once. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
…s rule /plugin install takes <plugin>@<marketplace>, so a marketplace named code-idea produced the stutter code-idea@code-idea. Renamed to melconcoast, matching the owner-named convention used by thedotmack and claude-plugins-official. Also corrects AGENTS.md, which claimed three version sources. marketplace.json carries no version field, so there are two: the git tag and plugin.json. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
`scaffold` has always written a `docs/development-roadmap.md` whose every `**Tasks:**` field read `not yet planned`. Nothing filled it in. `plan-module` is what does: it reads one `## Module <n>` block and writes `docs/guides/feature_<module>_plan.md` — 2-4 phases in dependency order, at most 3-4 development tasks each, 1-3 plain-English test scenarios under every task, and a mandatory `Task X.V` verification gate closing each phase. The module's sub-modules are the phase boundaries, so the cut comes from the roadmap rather than from a fresh guess. That contradicted an existing line in `scaffold`'s templates.md calling sub-modules "the addressable unit — the planning step operates on one sub-module at a time," which is now corrected in both templates.md and best-practices.md. `**Tasks:**` is documented as a pointer rather than a placeholder, and scaffold's Step 5 gained a guard against a re-run resetting a live pointer back to `not yet planned` and orphaning a plan file. Plan files are living documents: a `## Progress Log` and `## Files Modified` fill in during execution, and a re-plan preserves every `[x]`, `[~]`, and `[-]` rather than resetting it. The four-state checkbox vocabulary and the closed-items counting rules are specified in references/plan-template.md, which `execute-plan` will parse. Verified: both skills pass every release.yml gate locally (name == dirname, single-line description, `wc -m` under 1024 — plan-module at 860, scaffold unchanged at 1006); both under the 150-line ceiling at 61 and 119; packaging produces two well-formed .skill assets; zero broken markdown links repo-wide; the sample roadmap's deps all resolve and its statuses are all in vocabulary; the sample plan file's phase counts, glyph set, and no-code rule all check out. Behavioral scenarios S45-S64 are added but not yet run, as are v3.0.0's S35-S44. S60 is the one to watch — the two descriptions now compete for the same requests, so a scaffold trigger could be captured by plan-module. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
3.0.0 was prepared but never tagged; both branches release together as v3.1.0. Keep its entry — that's where the breaking changes and the 2.x upgrade steps are written — but say plainly it was never released on its own, and point 2.x upgraders at it from the 3.1.0 intro. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This was referenced Aug 23, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Releases 3.0.0 and 3.1.0 together as a single
v3.1.0tag. Master is still at 2.0.1, so this carries the plugin conversion and the new skill.What's in it
The plugin conversion (3.0.0, never tagged on its own) — the repo becomes a Claude Code plugin, the skill is renamed
code-idea→scaffoldand moves toskills/scaffold/, anddocs/roadmap.mdbecomesdocs/development-roadmap.mdwith a module/sub-module structure that is now always generated. CI gains gates on skill metadata and the tag/plugin.jsonversion match. This is the breaking half — see the 3.0.0 CHANGELOG entry.plan-module(3.1.0) — the plugin's second skill, and the roadmap's downstream consumer. It reads one## Module <n>block out ofdocs/development-roadmap.mdand writesdocs/guides/feature_<module>_plan.md: 2–4 phases in dependency order, at most 3–4 development tasks each, 1–3 plain-English scenarios per task, and a mandatoryTask X.Vgate closing every phase. Four-state checkboxes ([ ] [x] [~] [-]), progress counted in closed items and never as a percentage.The roadmap is the contract between the two skills.
**Tasks:**became a pointer rather than a placeholder —not yet planneduntilplan-moduleruns, thensee docs/guides/… — Phase <n>— andscaffoldStep 5 now guards against a re-run resetting a live pointer and orphaning a plan file.Verification
CI gates checked locally:
namematches directory for both skills, single-line descriptions at 860 and 1006 characters (limit 1024), 61 and 119 lines (ceiling ~150),plugin.jsonat 3.1.0, zero broken markdown links.Beyond the mechanical checks, 15 behavioral scenarios from
examples/test-scenarios.mdwere run against the installed 3.1.0 plugin in fresh headless sessions — the first time any of them have actually been executed rather than reasoned about:scaffold's four phrases all still firescaffold;plan-module's four all fireplan-module. The two descriptions compete for the same requests, so this was the main regression risk. Clean.scaffold, invents no decomposition of its own.[0/N Closed]counters with the gate task counted, correct snake_case filename, phases cut on sub-module boundaries, theproduct.mdbusiness rule asserted in its own words.Known gap (not blocking)
S48 surfaced a spec ambiguity worth a follow-up: when a
[-]skipped task's capability is reinstated elsewhere in a re-cut,plan-template.mdandSKILL.mddon't say whether the original becomes[~](reframed) or keeps[-]as the historical record. The run chose the latter, which honors the never-un-do-finished-work rule either way — but the spec should pick one, sinceexecute-planwill parse these glyphs.🤖 Generated with Claude Code