Repository navigation
feat(propose): /ccmagic:propose, turn an idea, a ticket, or a document into OpenSpec changes or Linear tickets (RV-99) - #105
Merged
Conversation
…ccm-lib.sh (RV-99) ccm-openspec-scope's port of Reeve's parseTasks and archiveFolderMatches, and ccm-baseline-check's diff base and email patterns, move to ccm-lib.sh unchanged so the propose check can use them.
Checks the change folders /ccmagic:propose writes against Reeve's planner rules (change name, tasks.md, new-capability-purpose), the strict .openspec.yaml keys, exact MODIFIED, REMOVED, and RENAMED names, the section limit, dashes and written addresses, and that nothing outside the new folders changed.
Turns an idea, a ticket, or a document into OpenSpec changes (one PR per change) or Linear tickets, with a stop after the split and before anything is opened or created. Writes only under openspec/changes/.
# Conflicts: # .claude-plugin/marketplace.json # .claude-plugin/plugin.json # CHANGELOG.md
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.
Adds
/ccmagic:propose <input>(RV-99), a standalone interactive skill built likespec-baseline. The input is a sentence, a ticket identifier, or a path to a document such as a BRD.What the skill does
openspec/specs/oropenspec/changes/): writes each change folder underopenspec/changes/<name>/(its only Write and Edit grant), runsopenspec validate <name> --strict --no-interactive,ccm-propose-check, andreeve openspec render --dir . --change <name> --as <repo>with--gradewhen the Reeve CLI (reeveon PATH, or aREEVE_CLIcommand) and its config and keys are present. A missing CLI or config skips the render or the grading with a note saying how to run it, so ccmagic does not require Reeve. It fixes and repeats until all pass, stops again (Stop 2), then opens one PR per change. It never merges.linear_teamandlinear_projectconfig keys, or the skill asks. GitHub Issues and JIRA are best effort.proposal.mdgets a## Coveragetable (tickets get aCoverssection), and the final report lists what nothing covers.The steps are numbered so RV-98 (unattended proposal sessions) can follow the same procedure later; nothing unattended is built here.
ccm-propose-check
A deterministic check run before each commit. JSON output; exit 0 clean, 1 findings, 3 unreadable, 4 usage. Rules:
outside-change,no-change-folder,change-name(kebab-case, and Reeve's refused words),name-collision(archive, an active change at the base, or an archive folder of that name),missing-file,meta(schema: spec-driven, only keys OpenSpec knows, boolean flags), Reeve'sparseTasksrules (same names),task-checked,section-count(more than 3),capability-name,new-capability-purpose,requirement-not-found(MODIFIED, REMOVED, and RENAMED FROM names must be in the current spec at the base),skip-specs-deltas,dash, andpersonal-identifier(spec-baseline's patterns).--probe-reevereports whether the Reeve CLI, its config, and the API keys are present without printing a value.Files
skills/propose/SKILL.md,change-format.md,ticket-format.md: the skill and its format rules.bin/ccm-propose-check: the checker.bin/ccm-lib.sh: now holdsccm-openspec-scope's Reeve task parser and archive-name rule, andccm-baseline-check's diff base and email patterns, moved unchanged so the new check shares them; both scripts call them from there. Also thelinear_teamandlinear_projectdefaults.bin/ccm-openspec-scope,bin/ccm-baseline-check: use the moved helpers; no behavior change (their existing tests pass, including the byte-for-byte comparison with v3.16.0's scope output).tests/run.sh,tests/fixtures/propose/: 16 tests for the checker and the skill, plusproposeregistered as a standalone skill. The standalone check now looks for a skill asccmagic:<name>orskills/<name>, since "propose" is an ordinary word in work-ticket's prose.tests/every-ticket-since-baseline.diff: regenerated for the help entry.README.md,skills/help/SKILL.md,CHANGELOG.md,docs/ccmagic.local.md.example,.claude-plugin/*.json: docs and version 3.21.0.Tests
bash tests/run.sh: 405 passed, 0 failed (macOS, Docker available; one validate test skips for lack of/proc, as before).shellcheck -x bin/ccm-* hooks/*.sh tests/run.sh tests/relay-smoke.sh tests/stubs/gh evals/run.sh: clean.openspec validate --stricton 1.14.1, and Reeve'sopenspec render --dirrenders it (run by hand from a local Reeve checkout, without--grade).Open: live acceptance runs (Devon, after merge)
--grade, and the PR.