Skip to content

v3.1.0 — convert to a plugin and add the plan-module skill - #2

Merged
melconcoast merged 6 commits into
masterfrom
feature/plan-module-skill
Aug 23, 2026
Merged

v3.1.0 — convert to a plugin and add the plan-module skill#2
melconcoast merged 6 commits into
masterfrom
feature/plan-module-skill

Conversation

@melconcoast

Copy link
Copy Markdown
Owner

Releases 3.0.0 and 3.1.0 together as a single v3.1.0 tag. 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-ideascaffold and moves to skills/scaffold/, and docs/roadmap.md becomes docs/development-roadmap.md with a module/sub-module structure that is now always generated. CI gains gates on skill metadata and the tag/plugin.json version 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 of docs/development-roadmap.md 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 scenarios per task, and a mandatory Task X.V gate 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 planned until plan-module runs, then see docs/guides/… — Phase <n> — and scaffold Step 5 now guards against a re-run resetting a live pointer and orphaning a plan file.

Verification

CI gates checked locally: name matches directory for both skills, single-line descriptions at 860 and 1006 characters (limit 1024), 61 and 119 lines (ceiling ~150), plugin.json at 3.1.0, zero broken markdown links.

Beyond the mechanical checks, 15 behavioral scenarios from examples/test-scenarios.md were 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:

  • S60 / S56 — the trigger boundary. scaffold's four phrases all still fire scaffold; plan-module's four all fire plan-module. The two descriptions compete for the same requests, so this was the main regression risk. Clean.
  • S57 / S43 / S64 — anti-triggers. Abstract questions get an explanation and no skill; "build task 3" / "execute the plan" against a repo in flight fire nothing.
  • S58 — no roadmap: stops, names scaffold, invents no decomposition of its own.
  • S47 / S52 / S59 / S63 / S50 / S53 / S54 — output integrity on a generated plan file: no code or assertions anywhere, roadmap pointers flipped to exactly the planned sub-modules, [0/N Closed] counters with the gate task counted, correct snake_case filename, phases cut on sub-module boundaries, the product.md business rule asserted in its own words.
  • S48 — the data-loss path. Re-planning a module in flight preserved every closed item with its annotation and appended to the Progress Log rather than rewriting it.

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.md and SKILL.md don'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, since execute-plan will parse these glyphs.

🤖 Generated with Claude Code

melconcoast and others added 6 commits August 21, 2026 22:46
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>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant