Skip to content
Open
Show file tree
Hide file tree
Changes from 7 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
18 changes: 11 additions & 7 deletions skills/openspec-ff-change/SKILL.md
Original file line number Diff line number Diff line change
Expand Up @@ -60,14 +60,18 @@ Fast-forward through artifact creation - generate everything needed to start imp
- `resolvedOutputPath`: Resolved path or pattern to write the artifact
- `dependencies`: Completed artifacts to read for context
- Read any completed dependency files for context - always re-read them from disk, even if you saw them earlier in the conversation (the user may have edited them)
- Create the artifact file using `template` as the structure and write it to `resolvedOutputPath`
- Create the artifact file using `template` as the structure and write it to `resolvedOutputPath`. If `resolvedOutputPath` is a glob, follow `instruction` to choose the concrete file path
- Apply `context` and `rules` as constraints - but do NOT copy them into the file
- Show brief progress: "✓ Created <artifact-id>"

b. **Continue until all `applyRequires` artifacts are complete**
b. **Continue until every artifact the apply phase depends on exists**
- After creating each artifact, re-run `openspec status --change "<name>" --json`
- Check if every artifact ID in `applyRequires` has `status: "done"` in the artifacts array
- Stop when all `applyRequires` artifacts are done
- The required set is `applyRequires` plus everything they transitively `requires` (spec-driven: proposal, specs, design, tasks). Leave artifacts outside that set alone
- `status` is file-existence only, so an `applyRequires` artifact reading `done` does NOT mean its dependencies exist - writing `tasks.md` early marks `tasks` done while `specs` was never written
- Create every artifact in the required set that is missing, then re-check - creating one can unblock others
- Skip one only when its own `instruction` says it is conditional (spec-driven's `design.md`); tell the user, and do not reconsider it
- Dependencies are enablers, not gates: if a required artifact is still `blocked` only because you skipped a conditional dependency, write it anyway
- Stop when every artifact in the required set is `done` or was deliberately skipped

c. **If an artifact requires user input** (unclear context):
- Use **AskUserQuestion tool** to clarify
Expand All @@ -82,8 +86,8 @@ Fast-forward through artifact creation - generate everything needed to start imp

After completing all artifacts, summarize:
- Change name and location
- List of artifacts created with brief descriptions
- What's ready: "All artifacts created! Ready for implementation."
- List of artifacts created with brief descriptions, plus any conditional artifact you skipped and why
- What's ready: "All required artifacts created! Ready for implementation."
- Prompt: "Run `/opsx:apply` or ask me to implement to start working on the tasks."

**Artifact Creation Guidelines**
Expand All @@ -97,7 +101,7 @@ After completing all artifacts, summarize:
- These guide what you write, but should never appear in the output

**Guardrails**
- Create ALL artifacts needed for implementation (as defined by schema's `apply.requires`)
- Create every artifact the apply phase transitively depends on, not just the ids listed in `apply.requires`
- Always read dependency artifacts before creating a new one - re-read from disk, not from conversation memory (files may have changed since you last saw them)
- If context is critically unclear, ask the user - but prefer making reasonable decisions to keep momentum
- If a change with that name already exists, suggest continuing that change instead
Expand Down
21 changes: 13 additions & 8 deletions skills/openspec-propose/SKILL.md
Original file line number Diff line number Diff line change
Expand Up @@ -11,8 +11,9 @@ metadata:

Propose a new change - create the change and generate all artifacts in one step.

I'll create a change with artifacts:
I'll create a change with the artifacts your schema defines. With the default spec-driven schema that is:
- proposal.md (what & why)
- `specs/<capability>/spec.md` (what the system must do - a delta, not the main spec)
- design.md (how)
- tasks.md (implementation steps)

Expand Down Expand Up @@ -69,14 +70,18 @@ When ready to implement, run /opsx:apply
- `resolvedOutputPath`: Resolved path or pattern to write the artifact
- `dependencies`: Completed artifacts to read for context
- Read any completed dependency files for context - always re-read them from disk, even if you saw them earlier in the conversation (the user may have edited them)
- Create the artifact file using `template` as the structure and write it to `resolvedOutputPath`
- Create the artifact file using `template` as the structure and write it to `resolvedOutputPath`. If `resolvedOutputPath` is a glob, follow `instruction` to choose the concrete file path
- Apply `context` and `rules` as constraints - but do NOT copy them into the file
- Show brief progress: "Created <artifact-id>"

b. **Continue until all `applyRequires` artifacts are complete**
b. **Continue until every artifact the apply phase depends on exists**
- After creating each artifact, re-run `openspec status --change "<name>" --json`
- Check if every artifact ID in `applyRequires` has `status: "done"` in the artifacts array
- Stop when all `applyRequires` artifacts are done
- The required set is `applyRequires` plus everything they transitively `requires` (spec-driven: proposal, specs, design, tasks). Leave artifacts outside that set alone
- `status` is file-existence only, so an `applyRequires` artifact reading `done` does NOT mean its dependencies exist - writing `tasks.md` early marks `tasks` done while `specs` was never written
- Create every artifact in the required set that is missing, then re-check - creating one can unblock others
- Skip one only when its own `instruction` says it is conditional (spec-driven's `design.md`); tell the user, and do not reconsider it
- Dependencies are enablers, not gates: if a required artifact is still `blocked` only because you skipped a conditional dependency, write it anyway
- Stop when every artifact in the required set is `done` or was deliberately skipped

c. **If an artifact requires user input** (unclear context):
- Use **AskUserQuestion tool** to clarify
Expand All @@ -91,8 +96,8 @@ When ready to implement, run /opsx:apply

After completing all artifacts, summarize:
- Change name and location
- List of artifacts created with brief descriptions
- What's ready: "All artifacts created! Ready for implementation."
- List of artifacts created with brief descriptions, plus any conditional artifact you skipped and why
- What's ready: "All required artifacts created! Ready for implementation."
- Prompt: "Run `/opsx:apply` or ask me to implement to start working on the tasks."

**Artifact Creation Guidelines**
Expand All @@ -106,7 +111,7 @@ After completing all artifacts, summarize:
- These guide what you write, but should never appear in the output

**Guardrails**
- Create ALL artifacts needed for implementation (as defined by schema's `apply.requires`)
- Create every artifact the apply phase transitively depends on, not just the ids listed in `apply.requires`
- Always read dependency artifacts before creating a new one - re-read from disk, not from conversation memory (files may have changed since you last saw them)
- If context is critically unclear, ask the user - but prefer making reasonable decisions to keep momentum
- If a change with that name already exists, ask if user wants to continue it or create a new one
Expand Down
36 changes: 22 additions & 14 deletions src/core/templates/workflows/ff-change.ts
Original file line number Diff line number Diff line change
Expand Up @@ -62,14 +62,18 @@ ${STORE_SELECTION_GUIDANCE}
- \`resolvedOutputPath\`: Resolved path or pattern to write the artifact
- \`dependencies\`: Completed artifacts to read for context
- Read any completed dependency files for context - always re-read them from disk, even if you saw them earlier in the conversation (the user may have edited them)
- Create the artifact file using \`template\` as the structure and write it to \`resolvedOutputPath\`
- Create the artifact file using \`template\` as the structure and write it to \`resolvedOutputPath\`. If \`resolvedOutputPath\` is a glob, follow \`instruction\` to choose the concrete file path
- Apply \`context\` and \`rules\` as constraints - but do NOT copy them into the file
- Show brief progress: "✓ Created <artifact-id>"

b. **Continue until all \`applyRequires\` artifacts are complete**
b. **Continue until every artifact the apply phase depends on exists**
- After creating each artifact, re-run \`openspec status --change "<name>" --json\`
- Check if every artifact ID in \`applyRequires\` has \`status: "done"\` in the artifacts array
- Stop when all \`applyRequires\` artifacts are done
- The required set is \`applyRequires\` plus everything they transitively \`requires\` (spec-driven: proposal, specs, design, tasks). Leave artifacts outside that set alone
- \`status\` is file-existence only, so an \`applyRequires\` artifact reading \`done\` does NOT mean its dependencies exist - writing \`tasks.md\` early marks \`tasks\` done while \`specs\` was never written
- Create every artifact in the required set that is missing, then re-check - creating one can unblock others
- Skip one only when its own \`instruction\` says it is conditional (spec-driven's \`design.md\`); tell the user, and do not reconsider it
- Dependencies are enablers, not gates: if a required artifact is still \`blocked\` only because you skipped a conditional dependency, write it anyway
- Stop when every artifact in the required set is \`done\` or was deliberately skipped

c. **If an artifact requires user input** (unclear context):
- Use **AskUserQuestion tool** to clarify
Expand All @@ -84,8 +88,8 @@ ${STORE_SELECTION_GUIDANCE}

After completing all artifacts, summarize:
- Change name and location
- List of artifacts created with brief descriptions
- What's ready: "All artifacts created! Ready for implementation."
- List of artifacts created with brief descriptions, plus any conditional artifact you skipped and why
- What's ready: "All required artifacts created! Ready for implementation."
- Prompt: "Run \`/opsx:apply\` or ask me to implement to start working on the tasks."

**Artifact Creation Guidelines**
Expand All @@ -99,7 +103,7 @@ After completing all artifacts, summarize:
- These guide what you write, but should never appear in the output

**Guardrails**
- Create ALL artifacts needed for implementation (as defined by schema's \`apply.requires\`)
- Create every artifact the apply phase transitively depends on, not just the ids listed in \`apply.requires\`
- Always read dependency artifacts before creating a new one - re-read from disk, not from conversation memory (files may have changed since you last saw them)
- If context is critically unclear, ask the user - but prefer making reasonable decisions to keep momentum
- If a change with that name already exists, suggest continuing that change instead
Expand Down Expand Up @@ -167,14 +171,18 @@ ${STORE_SELECTION_GUIDANCE}
- \`resolvedOutputPath\`: Resolved path or pattern to write the artifact
- \`dependencies\`: Completed artifacts to read for context
- Read any completed dependency files for context - always re-read them from disk, even if you saw them earlier in the conversation (the user may have edited them)
- Create the artifact file using \`template\` as the structure and write it to \`resolvedOutputPath\`
- Create the artifact file using \`template\` as the structure and write it to \`resolvedOutputPath\`. If \`resolvedOutputPath\` is a glob, follow \`instruction\` to choose the concrete file path
- Apply \`context\` and \`rules\` as constraints - but do NOT copy them into the file
- Show brief progress: "✓ Created <artifact-id>"

b. **Continue until all \`applyRequires\` artifacts are complete**
b. **Continue until every artifact the apply phase depends on exists**
- After creating each artifact, re-run \`openspec status --change "<name>" --json\`
- Check if every artifact ID in \`applyRequires\` has \`status: "done"\` in the artifacts array
- Stop when all \`applyRequires\` artifacts are done
- The required set is \`applyRequires\` plus everything they transitively \`requires\` (spec-driven: proposal, specs, design, tasks). Leave artifacts outside that set alone
- \`status\` is file-existence only, so an \`applyRequires\` artifact reading \`done\` does NOT mean its dependencies exist - writing \`tasks.md\` early marks \`tasks\` done while \`specs\` was never written
- Create every artifact in the required set that is missing, then re-check - creating one can unblock others
- Skip one only when its own \`instruction\` says it is conditional (spec-driven's \`design.md\`); tell the user, and do not reconsider it
- Dependencies are enablers, not gates: if a required artifact is still \`blocked\` only because you skipped a conditional dependency, write it anyway
- Stop when every artifact in the required set is \`done\` or was deliberately skipped

c. **If an artifact requires user input** (unclear context):
- Use **AskUserQuestion tool** to clarify
Expand All @@ -189,8 +197,8 @@ ${STORE_SELECTION_GUIDANCE}

After completing all artifacts, summarize:
- Change name and location
- List of artifacts created with brief descriptions
- What's ready: "All artifacts created! Ready for implementation."
- List of artifacts created with brief descriptions, plus any conditional artifact you skipped and why
- What's ready: "All required artifacts created! Ready for implementation."
- Prompt: "Run \`/opsx:apply\` to start implementing."

**Artifact Creation Guidelines**
Expand All @@ -204,7 +212,7 @@ After completing all artifacts, summarize:
- These guide what you write, but should never appear in the output

**Guardrails**
- Create ALL artifacts needed for implementation (as defined by schema's \`apply.requires\`)
- Create every artifact the apply phase transitively depends on, not just the ids listed in \`apply.requires\`
- Always read dependency artifacts before creating a new one - re-read from disk, not from conversation memory (files may have changed since you last saw them)
- If context is critically unclear, ask the user - but prefer making reasonable decisions to keep momentum
- If a change with that name already exists, ask if user wants to continue it or create a new one
Expand Down
Loading
Loading