About grace-plan
grace-plan is a GRACE workflow skill for turning one approved active GraceChangeSpec into a draft or explicitly approved executable GraceChangePlan. It guides planning without implementing source code or modifying existing approved plans and project state.
Key features
- 01Validate approved change specifications
- 02Run active-baseline lint preflight
- 03Create plans from the XML template
- 04Define scopes, assertions, and tasks
- 05Check task dependencies for cycles
- 06Protect approved plans and project state
Use cases
- 01Plan an approved GRACE change
- 02Specify testable baseline and target conditions
- 03Define task dependencies before implementation
- 04Review stale-state and parallel-safety warnings
MCP support
This skill produces GraceChangePlan artifacts for use in the GRACE workflow. It runs GRACE lint and can recommend checking status after approval.
Install
Copy the command and run it in a terminal.
npx skills add https:/ / github.com/ osovv/ grace-marketplace --skill grace-planAfter installing, type/grace-planin Claude Code to confirm it loaded.
Bundled filesagents/openai.yamlreferences/change-plan-template.xml
Details
From the project README<approved_plan_immutability>
- If
plan.xmlalready exists with statusapproved, stop before writing. - Do not refresh
BaselineAssertions,TargetAssertions,DurableScope,ObservedWriteScope, or tasks in place. - Create a new
C-*bundle and mark the old bundle superseded with an explicit replacement reference. </approved_plan_immutability>
<must_do>
Produce plan.xml from references/change-plan-template.xml as draft unless the user explicitly approves the completed plan. Require a matching C-* wrapper, meaningful intent, non-empty machine-checkable baseline and target assertions, explicit durable and observed scopes, and unique acyclic T-NNN tasks. A scope with no writes must use an explicit <None /> marker; prose such as "none" is invalid. Every task has one Title, one DependsOn element listing zero or more predecessors as canonical comma-separated T-NNN values (for example <DependsOn>T-001, T-002</DependsOn>), non-empty acceptance criteria, and non-empty verification commands. Dependencies form a directed acyclic graph: list only true predecessors and never linearize independent tasks into a chain to express ordering. Surface stale-state and coexistence warnings, and reject unsupported scope glob syntax instead of guessing.
</must_do>
<command_phase_rules>
currentis an active-baseline preflight and is valid only before observed writes begin.baselineis the selected pre-edit gate,targetis selected post-edit evidence, andfinalis the outer apply/archive gate owned bygrace-execute.MustPassCommandcontains leaf project evidence such as tests, typecheck, build, format, or package checks. Never placegrace lint,grace status, or another GRACE lifecycle command inside it.- Never put
--assertions currentinTargetAssertionsor in task verification that runs after writes. Use selected target/final lint externally instead. - A
MustPassCommandmust complete within its declaredbudgetSeconds(absent, the global--command-timeoutapplies) on the reference host; declare the budget you have measured rather than inheriting a default that will kill the command mid-gate. - A whole-suite command whose runtime is dominated by substrate startup — containers, databases, browsers, emulators — belongs in an acceptance tier, not in the gate; never declare both a whole-suite command and the file-level commands it already re-runs. </command_phase_rules>
<hard_rules> Do not implement code, silently approve a plan, overwrite an approved plan, or mutate current graph/verification artifacts while planning. Semantic anchors are canonical XML tags, never attributes. </hard_rules>