Skip to content

feat(skills): publish workflow skills to skills.sh#1357

Open
clay-good wants to merge 2 commits into
Fission-AI:mainfrom
clay-good:feat/skills-sh-distribution
Open

feat(skills): publish workflow skills to skills.sh#1357
clay-good wants to merge 2 commits into
Fission-AI:mainfrom
clay-good:feat/skills-sh-distribution

Conversation

@clay-good

@clay-good clay-good commented Jul 14, 2026

Copy link
Copy Markdown
Collaborator

What was missing: Multiple requests (#1258) to install OpenSpec skills via skills.sh, which reads static SKILL.md files from a repo — but OpenSpec generates its skills at openspec init time, so none existed in the tree.

What it does: Commits the 12 workflow skills under skills/ so npx skills add Fission-AI/OpenSpec works. The files are generated from the existing skill templates (pnpm generate:skills), not hand-copied, and a parity test keeps them in sync. The volatile generatedBy frontmatter line is stripped so the committed copies stay byte-stable across releases (no per-release regen churn).

Proof it works:

  • New skillssh-parity.test.ts + existing golden-hash tests (skill-templates-parity, skill-generation) pass — 34 tests.
  • Negative check: appending junk to a committed skill makes the parity test fail with … is stale — run pnpm generate:skills.
  • Full suite: only the 17 known environment-only zsh-installer (oh-my-zsh) failures; 1859 others pass.

Notes / scope:

  • Skills drive the openspec CLI and assume an openspec/ project, so openspec init remains the fuller setup — skills/README.md states this.
  • skills/ is not in the npm files list, so it doesn't bloat the published package (skills.sh reads from GitHub, not npm).

Closes #1258

🤖 Generated with Claude Code

Summary by CodeRabbit

  • New Features

    • Added a comprehensive set of OpenSpec workflow skills for exploring, creating, proposing, continuing, applying, updating, verifying, syncing, and archiving changes.
    • Added guided onboarding documentation and bulk archive support.
    • Added skills.sh-compatible distribution files and installation guidance.
  • Documentation

    • Documented skill installation, generation, maintenance, and OpenSpec setup commands.
  • Chores

    • Added tooling to regenerate distributed skills consistently.
    • Added validation to detect differences between generated and committed skill files.

@clay-good clay-good requested a review from TabishB as a code owner July 14, 2026 16:45
@coderabbitai

coderabbitai Bot commented Jul 14, 2026

Copy link
Copy Markdown
Contributor

Review Change Stack

📝 Walkthrough

Walkthrough

Adds skills.sh-compatible OpenSpec skill documents, a generator command, shared normalization logic, line-ending rules, onboarding documentation, and a parity test that compares committed skills with generated templates.

Changes

Skills.sh generation and parity

Layer / File(s) Summary
Generation and parity validation
.gitattributes, package.json, scripts/*, skills/README.md, test/core/templates/*
Adds generate:skills, regenerates normalized skill files, preserves stable frontmatter, enforces LF endings, documents the workflow, and validates committed output against templates.

Change implementation workflows

Layer / File(s) Summary
Change implementation workflows
skills/openspec-{new,propose,continue,ff,apply}-change/*
Adds skills for creating, proposing, continuing, fast-forwarding, and applying OpenSpec changes with schema-driven artifact handling and task updates.

Archive and specification synchronization

Layer / File(s) Summary
Archive and specification synchronization
skills/openspec-{archive,bulk-archive,sync-specs}-change/*, skills/openspec-sync-specs/*
Adds single and bulk archive procedures, conflict handling, archive reporting, and delta-spec synchronization instructions.

Exploration and onboarding guidance

Layer / File(s) Summary
Exploration and onboarding guidance
skills/openspec-{explore,onboard}/*
Adds explore-mode guidance and a guided onboarding workflow spanning OpenSpec change creation, implementation, and archival.

Change update and verification workflows

Layer / File(s) Summary
Change update and verification workflows
skills/openspec-{update,verify}-change/*
Adds planning-artifact revision rules and verification procedures for completeness, correctness, and coherence.

Estimated code review effort: 3 (Moderate) | ~25 minutes

Possibly related issues

Possibly related PRs

Suggested reviewers: tabishb, alfred-openspec

🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title clearly summarizes the main change: publishing workflow skills to skills.sh.
Linked Issues check ✅ Passed The PR fulfills #1258 by adding OpenSpec skills for distribution via skills.sh and GitHub install.
Out of Scope Changes check ✅ Passed The changes all support skill publication and parity, with no unrelated scope visible in the diff.
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

Commit the 12 OpenSpec workflow skills as static skills/<name>/SKILL.md so
`npx skills add Fission-AI/OpenSpec` can install them (skills.sh reads static
files from the repo; OpenSpec otherwise only generates skills at init time).

Files are generated from the existing templates via `pnpm generate:skills`,
not hand-copied, and skillssh-parity.test.ts fails CI if a template changes
without regenerating. The volatile generatedBy frontmatter line is stripped so
the committed copies stay byte-stable across releases.

Closes Fission-AI#1258

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@clay-good clay-good force-pushed the feat/skills-sh-distribution branch from 2c0ebb7 to 5115467 Compare July 14, 2026 16:46
The skills.sh distribution files are generated LF-only and compared
byte-for-byte by skillssh-parity.test.ts. Windows autocrlf checked them
out as CRLF, failing the parity assertion. A scoped .gitattributes pins
them to LF on checkout.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 8

🧹 Nitpick comments (2)
skills/openspec-explore/SKILL.md (1)

56-56: 📐 Maintainability & Code Quality | 🔵 Trivial | ⚡ Quick win

Add language identifiers to fenced blocks.

markdownlint reports MD040 for these fences. Use identifiers such as text, bash, or markdown consistently for the displayed examples.

Also applies to: 150-150, 173-173, 204-204, 221-221, 262-262

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@skills/openspec-explore/SKILL.md` at line 56, Add explicit language
identifiers to every fenced code block in SKILL.md, including the blocks around
the referenced examples. Use appropriate identifiers such as text, bash, or
markdown consistently so all fences satisfy markdownlint MD040.

Source: Linters/SAST tools

skills/openspec-onboard/SKILL.md (1)

40-40: 📐 Maintainability & Code Quality | 🔵 Trivial | ⚡ Quick win

Add language identifiers to fenced blocks.

markdownlint reports MD040 for these fences. Add identifiers such as text, bash, powershell, or markdown to the examples.

Also applies to: 85-85, 118-118, 139-139, 148-148, 169-169, 183-183, 193-193, 203-203, 213-213, 252-252, 263-263, 279-279, 308-308, 318-318, 353-353, 363-363, 391-391, 409-409, 425-425, 439-439, 449-449, 502-502, 518-518

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@skills/openspec-onboard/SKILL.md` at line 40, Add language identifiers to
every fenced code block in SKILL.md, including the listed locations, choosing
appropriate tags such as text, bash, powershell, or markdown based on each
block’s contents. Preserve all example content while ensuring no unlabeled
fences remain.

Source: Linters/SAST tools

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@skills/openspec-apply-change/SKILL.md`:
- Line 14: Executable command examples omit the selected store flag, allowing
operations to target the wrong repository. Update the command examples in
skills/openspec-apply-change/SKILL.md:14,
skills/openspec-continue-change/SKILL.md:14,
skills/openspec-ff-change/SKILL.md:14, skills/openspec-new-change/SKILL.md:14,
and skills/openspec-propose/SKILL.md:23 to include --store <id> on every listed
command that reads or writes specs or changes, while leaving commands that do
not support the flag unchanged.

In `@skills/openspec-archive-change/SKILL.md`:
- Line 107: Update the final success summary in the archive workflow so it
reflects the actual completion status tracked by the logic in Lines 38–52.
Report incomplete artifacts or tasks when archiving unfinished work, while
preserving the existing “All artifacts complete. All tasks complete.” message
only when both are actually complete.
- Around line 65-69: Update the archive decision flow in the prompt options so
selecting “Cancel” immediately aborts the operation and does not archive the
change. Only proceed to archive after the user selects a sync or archive action,
while preserving the existing sync behavior for sync choices.
- Line 61: Make main-spec resolution store-aware in both instruction sites: in
skills/openspec-archive-change/SKILL.md:61, compare each delta spec with the
selected store’s resolved main-spec path instead of hardcoding openspec/specs;
in skills/openspec-sync-specs/SKILL.md:55, read and write the main spec using
the status/store context and its resolved path rather than the current
repository path.
- Line 99: Replace each remaining unlabeled Markdown code fence with an
appropriate language-identified fence: update
skills/openspec-archive-change/SKILL.md at 99-99;
skills/openspec-bulk-archive-change/SKILL.md at 57-57, 88-88, 98-98, 104-104,
145-145, 162-162, 170-170, 185-185, 202-202, 216-216, and 231-231; and
skills/openspec-sync-specs/SKILL.md at 90-90. Preserve the existing fenced
content and choose the identifier matching each block’s syntax.

In `@skills/openspec-explore/SKILL.md`:
- Around line 84-110: Propagate the selected store through every OpenSpec
workflow command by adding --store <selected store> to list and status in
skills/openspec-explore/SKILL.md lines 84-110, and to new change (177-180),
proposal instructions (246-250), specs instructions (271-275), design
instructions (344-347), task instructions (382-385), and archive (433-436) in
skills/openspec-onboard/SKILL.md; preserve each command’s existing arguments and
workflow.

In `@skills/openspec-update-change/SKILL.md`:
- Around line 20-22: Propagate the selected store ID through every documented
command sequence: update `skills/openspec-update-change/SKILL.md` ranges 20-22,
34-46, and 59-65 to include the store flag in `openspec list`, `openspec
status`, and `openspec instructions`; update
`skills/openspec-verify-change/SKILL.md` ranges 20-22, 30-37, and 39-45
similarly for `openspec list`, `openspec status`, and `openspec instructions
apply`. Preserve the existing command flow while ensuring each command targets
the selected OpenSpec store.

In `@skills/openspec-verify-change/SKILL.md`:
- Around line 116-125: Update the fenced code block in the Verification Report
template to declare the markdown language using a markdown-labeled fence, while
preserving the report example content unchanged.

---

Nitpick comments:
In `@skills/openspec-explore/SKILL.md`:
- Line 56: Add explicit language identifiers to every fenced code block in
SKILL.md, including the blocks around the referenced examples. Use appropriate
identifiers such as text, bash, or markdown consistently so all fences satisfy
markdownlint MD040.

In `@skills/openspec-onboard/SKILL.md`:
- Line 40: Add language identifiers to every fenced code block in SKILL.md,
including the listed locations, choosing appropriate tags such as text, bash,
powershell, or markdown based on each block’s contents. Preserve all example
content while ensuring no unlabeled fences remain.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro

Run ID: a7a2c8ea-0cb7-40c2-9029-77392cccece6

📥 Commits

Reviewing files that changed from the base of the PR and between 0a99f41 and d1a67a4.

📒 Files selected for processing (18)
  • .gitattributes
  • package.json
  • scripts/generate-skillssh.mjs
  • scripts/skillssh-shared.mjs
  • skills/README.md
  • skills/openspec-apply-change/SKILL.md
  • skills/openspec-archive-change/SKILL.md
  • skills/openspec-bulk-archive-change/SKILL.md
  • skills/openspec-continue-change/SKILL.md
  • skills/openspec-explore/SKILL.md
  • skills/openspec-ff-change/SKILL.md
  • skills/openspec-new-change/SKILL.md
  • skills/openspec-onboard/SKILL.md
  • skills/openspec-propose/SKILL.md
  • skills/openspec-sync-specs/SKILL.md
  • skills/openspec-update-change/SKILL.md
  • skills/openspec-verify-change/SKILL.md
  • test/core/templates/skillssh-parity.test.ts


Implement tasks from an OpenSpec change.

**Store selection:** If the user names a store (a store is a standalone OpenSpec repo registered on this machine) or the work lives in one, run `openspec store list --json` to discover registered store ids, then pass `--store <id>` on the commands that read or write specs and changes (`new change`, `status`, `instructions`, `list`, `show`, `validate`, `archive`, `doctor`, `context`). Other commands do not take the flag. Hints printed by commands already carry the flag; keep it on follow-ups. Without a store, commands act on the nearest local `openspec/` root.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🗄️ Data Integrity & Integration | 🟠 Major | ⚡ Quick win

🧩 Analysis chain

🏁 Script executed:

#!/bin/bash
set -euo pipefail

# Map the relevant docs first
for f in \
  skills/openspec-apply-change/SKILL.md \
  skills/openspec-continue-change/SKILL.md \
  skills/openspec-ff-change/SKILL.md \
  skills/openspec-new-change/SKILL.md \
  skills/openspec-propose/SKILL.md
do
  echo "===== $f ====="
  wc -l "$f"
  sed -n '1,120p' "$f"
  echo
done

# Search for store-selection guidance and actual command examples
rg -n --no-heading --context 2 --fixed-strings \
  'openspec store list --json' \
  skills/openspec-apply-change/SKILL.md \
  skills/openspec-continue-change/SKILL.md \
  skills/openspec-ff-change/SKILL.md \
  skills/openspec-new-change/SKILL.md \
  skills/openspec-propose/SKILL.md

rg -n --no-heading --context 2 --fixed-strings \
  '--store <id>' \
  skills/openspec-apply-change/SKILL.md \
  skills/openspec-continue-change/SKILL.md \
  skills/openspec-ff-change/SKILL.md \
  skills/openspec-new-change/SKILL.md \
  skills/openspec-propose/SKILL.md

# Look for the referenced command names in these docs
rg -n --no-heading --context 2 \
  '(^|[^-])(new change|status|instructions|list|show|validate|archive|doctor|context)\b' \
  skills/openspec-apply-change/SKILL.md \
  skills/openspec-continue-change/SKILL.md \
  skills/openspec-ff-change/SKILL.md \
  skills/openspec-new-change/SKILL.md \
  skills/openspec-propose/SKILL.md

Repository: Fission-AI/OpenSpec

Length of output: 30015


🏁 Script executed:

#!/bin/bash
set -euo pipefail

for f in \
  skills/openspec-apply-change/SKILL.md \
  skills/openspec-continue-change/SKILL.md \
  skills/openspec-ff-change/SKILL.md \
  skills/openspec-new-change/SKILL.md \
  skills/openspec-propose/SKILL.md
do
  echo "===== $f ====="
  rg -n --no-heading --context 1 --fixed-strings -- '--store' "$f" || true
  echo
  echo "----- openspec commands -----"
  rg -n --no-heading --context 1 'openspec ' "$f" || true
  echo
done

Repository: Fission-AI/OpenSpec

Length of output: 9342


Add --store to the command examples

The store-selection note is correct, but the executable snippets still omit --store <id>, so these commands can run against the wrong repo/store instead of the selected one.

  • skills/openspec-apply-change/SKILL.md#L14-L14
  • skills/openspec-continue-change/SKILL.md#L14-L14
  • skills/openspec-ff-change/SKILL.md#L14-L14
  • skills/openspec-new-change/SKILL.md#L14-L14
  • skills/openspec-propose/SKILL.md#L23-L23
🧰 Tools
🪛 LanguageTool

[style] ~14-~14: It’s more common nowadays to write this noun as one word.
Context: ...ec change. Store selection: If the user names a store (a store is a standalone OpenSp...

(RECOMMENDED_COMPOUNDS)

📍 Affects 5 files
  • skills/openspec-apply-change/SKILL.md#L14-L14 (this comment)
  • skills/openspec-continue-change/SKILL.md#L14-L14
  • skills/openspec-ff-change/SKILL.md#L14-L14
  • skills/openspec-new-change/SKILL.md#L14-L14
  • skills/openspec-propose/SKILL.md#L23-L23
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@skills/openspec-apply-change/SKILL.md` at line 14, Executable command
examples omit the selected store flag, allowing operations to target the wrong
repository. Update the command examples in
skills/openspec-apply-change/SKILL.md:14,
skills/openspec-continue-change/SKILL.md:14,
skills/openspec-ff-change/SKILL.md:14, skills/openspec-new-change/SKILL.md:14,
and skills/openspec-propose/SKILL.md:23 to include --store <id> on every listed
command that reads or writes specs or changes, while leaving commands that do
not support the flag unchanged.

Use `artifactPaths.specs.existingOutputPaths` from status JSON to check for delta specs. If none exist, proceed without sync prompt.

**If delta specs exist:**
- Compare each delta spec with its corresponding main spec at `openspec/specs/<capability>/spec.md`

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🗄️ Data Integrity & Integration | 🟠 Major | 🏗️ Heavy lift

Make main-spec resolution store-aware.

Both instructions hardcode the local openspec/specs path despite supporting named stores.

  • skills/openspec-archive-change/SKILL.md#L61-L61: compare against the selected store’s resolved main-spec path.
  • skills/openspec-sync-specs/SKILL.md#L55-L55: read and write the main spec using status/store context rather than the current repository path.
📍 Affects 2 files
  • skills/openspec-archive-change/SKILL.md#L61-L61 (this comment)
  • skills/openspec-sync-specs/SKILL.md#L55-L55
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@skills/openspec-archive-change/SKILL.md` at line 61, Make main-spec
resolution store-aware in both instruction sites: in
skills/openspec-archive-change/SKILL.md:61, compare each delta spec with the
selected store’s resolved main-spec path instead of hardcoding openspec/specs;
in skills/openspec-sync-specs/SKILL.md:55, read and write the main spec using
the status/store context and its resolved path rather than the current
repository path.

Comment on lines +65 to +69
**Prompt options:**
- If changes needed: "Sync now (recommended)", "Archive without syncing"
- If already synced: "Archive now", "Sync anyway", "Cancel"

If user chooses sync, use Task tool (subagent_type: "general-purpose", prompt: "Use Skill tool to invoke openspec-sync-specs for change '<name>'. Delta spec analysis: <include the analyzed delta spec summary>"). Proceed to archive regardless of choice.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🎯 Functional Correctness | 🟠 Major | ⚡ Quick win

Do not archive after Cancel.

The prompt offers Cancel, but “Proceed to archive regardless of choice” would still move the change after the user cancels. Explicitly abort on Cancel and only continue after a sync/archive choice.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@skills/openspec-archive-change/SKILL.md` around lines 65 - 69, Update the
archive decision flow in the prompt options so selecting “Cancel” immediately
aborts the operation and does not archive the change. Only proceed to archive
after the user selects a sync or archive action, while preserving the existing
sync behavior for sync choices.


**Output On Success**

```

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

📐 Maintainability & Code Quality | 🟡 Minor | ⚡ Quick win

🧩 Analysis chain

🏁 Script executed:

#!/bin/bash
set -euo pipefail

printf '\n== File list ==\n'
git ls-files 'skills/*/SKILL.md'

printf '\n== Context around cited lines ==\n'
for spec in \
  'skills/openspec-archive-change/SKILL.md:90,110' \
  'skills/openspec-bulk-archive-change/SKILL.md:45,70' \
  'skills/openspec-bulk-archive-change/SKILL.md:80,110' \
  'skills/openspec-bulk-archive-change/SKILL.md:135,170' \
  'skills/openspec-bulk-archive-change/SKILL.md:178,235' \
  'skills/openspec-sync-specs/SKILL.md:80,100'
do
  file=${spec%%:*}
  range=${spec#*:}
  echo
  echo "---- $file ($range) ----"
  sed -n "${range}p" "$file" | cat -n
done

printf '\n== Search for likely source/templates ==\n'
rg -n --hidden --glob '!**/.git/**' --glob '!**/node_modules/**' --glob '!**/dist/**' --glob '!**/build/**' \
  'openspec-(archive-change|bulk-archive-change|sync-specs)|MD040|```markdown|```$|```[[:space:]]*$' \
  skills . || true

Repository: Fission-AI/OpenSpec

Length of output: 50378


🏁 Script executed:

#!/bin/bash
set -euo pipefail
pwd
git ls-files 'skills/*/SKILL.md' | sed -n '1,20p'

Repository: Fission-AI/OpenSpec

Length of output: 624


Add language identifiers to the remaining plain fences

  • skills/openspec-archive-change/SKILL.md#L99
  • skills/openspec-bulk-archive-change/SKILL.md#L57,88,98,104,145,162,170,185,202,216,231
🧰 Tools
🪛 markdownlint-cli2 (0.23.0)

[warning] 99-99: Fenced code blocks should have a language specified

(MD040, fenced-code-language)

📍 Affects 3 files
  • skills/openspec-archive-change/SKILL.md#L99-L99 (this comment)
  • skills/openspec-bulk-archive-change/SKILL.md#L57-L57
  • skills/openspec-bulk-archive-change/SKILL.md#L88-L88
  • skills/openspec-bulk-archive-change/SKILL.md#L98-L98
  • skills/openspec-bulk-archive-change/SKILL.md#L104-L104
  • skills/openspec-bulk-archive-change/SKILL.md#L145-L145
  • skills/openspec-bulk-archive-change/SKILL.md#L162-L162
  • skills/openspec-bulk-archive-change/SKILL.md#L170-L170
  • skills/openspec-bulk-archive-change/SKILL.md#L185-L185
  • skills/openspec-bulk-archive-change/SKILL.md#L202-L202
  • skills/openspec-bulk-archive-change/SKILL.md#L216-L216
  • skills/openspec-bulk-archive-change/SKILL.md#L231-L231
  • skills/openspec-sync-specs/SKILL.md#L90-L90
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@skills/openspec-archive-change/SKILL.md` at line 99, Replace each remaining
unlabeled Markdown code fence with an appropriate language-identified fence:
update skills/openspec-archive-change/SKILL.md at 99-99;
skills/openspec-bulk-archive-change/SKILL.md at 57-57, 88-88, 98-98, 104-104,
145-145, 162-162, 170-170, 185-185, 202-202, 216-216, and 231-231; and
skills/openspec-sync-specs/SKILL.md at 90-90. Preserve the existing fenced
content and choose the identifier matching each block’s syntax.

Source: Linters/SAST tools

**Archived to:** the archive path derived from `planningHome.changesDir`/YYYY-MM-DD-<name>/
**Specs:** ✓ Synced to main specs (or "No delta specs" or "Sync skipped")

All artifacts complete. All tasks complete.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🎯 Functional Correctness | 🟡 Minor | ⚡ Quick win

Report incomplete warnings accurately.

This success output always says “All artifacts complete. All tasks complete.” even when Lines 38–52 allow archiving incomplete work. Make the summary conditional on the actual status.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@skills/openspec-archive-change/SKILL.md` at line 107, Update the final
success summary in the archive workflow so it reflects the actual completion
status tracked by the logic in Lines 38–52. Report incomplete artifacts or tasks
when archiving unfinished work, while preserving the existing “All artifacts
complete. All tasks complete.” message only when both are actually complete.

Comment on lines +84 to +110
### Check for context

At the start, quickly check what exists:
```bash
openspec list --json
```

This tells you:
- If there are active changes
- Their names, schemas, and status
- What the user might be working on

### When no change exists

Think freely. When insights crystallize, you might offer:

- "This feels solid enough to start a change. Want me to create a proposal?"
- Or keep exploring - no pressure to formalize

### When a change exists

If the user mentions a change or you detect one is relevant:

1. **Resolve and read existing artifacts for context**
- Run `openspec status --change "<name>" --json`.
- Use `changeRoot`, `artifactPaths`, and `actionContext` from the status JSON.
- Read existing files from `artifactPaths.<artifact>.existingOutputPaths`.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🗄️ Data Integrity & Integration | 🟠 Major | ⚡ Quick win

Propagate store selection through every workflow example.

The store-selection contract requires --store <id>, but the examples omit it for discovery, status, change creation, instructions, and archive operations. This can cause a multi-store workflow to read or modify the wrong OpenSpec root.

  • skills/openspec-explore/SKILL.md#L84-L110: add the selected store to list and status.
  • skills/openspec-onboard/SKILL.md#L177-L180: add it to new change.
  • skills/openspec-onboard/SKILL.md#L246-L250: add it to proposal instructions.
  • skills/openspec-onboard/SKILL.md#L271-L275: add it to specs instructions.
  • skills/openspec-onboard/SKILL.md#L344-L347: add it to design instructions.
  • skills/openspec-onboard/SKILL.md#L382-L385: add it to task instructions.
  • skills/openspec-onboard/SKILL.md#L433-L436: add it to archive.
📍 Affects 2 files
  • skills/openspec-explore/SKILL.md#L84-L110 (this comment)
  • skills/openspec-onboard/SKILL.md#L177-L180
  • skills/openspec-onboard/SKILL.md#L246-L250
  • skills/openspec-onboard/SKILL.md#L271-L275
  • skills/openspec-onboard/SKILL.md#L344-L347
  • skills/openspec-onboard/SKILL.md#L382-L385
  • skills/openspec-onboard/SKILL.md#L433-L436
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@skills/openspec-explore/SKILL.md` around lines 84 - 110, Propagate the
selected store through every OpenSpec workflow command by adding --store
<selected store> to list and status in skills/openspec-explore/SKILL.md lines
84-110, and to new change (177-180), proposal instructions (246-250), specs
instructions (271-275), design instructions (344-347), task instructions
(382-385), and archive (433-436) in skills/openspec-onboard/SKILL.md; preserve
each command’s existing arguments and workflow.

Comment on lines +20 to +22
1. **If no change name provided, prompt for selection**

Run `openspec list --json` to get available changes sorted by most recently modified. Then use the **AskUserQuestion tool** to let the user select which change to update.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🗄️ Data Integrity & Integration | 🟠 Major | ⚡ Quick win

Propagate the selected store ID through every command sequence.

The shared store-selection contract requires --store <id>, but the examples omit it. This can cause the workflow to list, inspect, or edit artifacts from the wrong OpenSpec root.

  • skills/openspec-update-change/SKILL.md#L20-L22: add the store flag to openspec list --json.
  • skills/openspec-update-change/SKILL.md#L34-L46: add it to openspec status.
  • skills/openspec-update-change/SKILL.md#L59-L65: add it to openspec instructions.
  • skills/openspec-verify-change/SKILL.md#L20-L22: add the store flag to openspec list --json.
  • skills/openspec-verify-change/SKILL.md#L30-L37: add it to openspec status.
  • skills/openspec-verify-change/SKILL.md#L39-L45: add it to openspec instructions apply.
📍 Affects 2 files
  • skills/openspec-update-change/SKILL.md#L20-L22 (this comment)
  • skills/openspec-update-change/SKILL.md#L34-L46
  • skills/openspec-update-change/SKILL.md#L59-L65
  • skills/openspec-verify-change/SKILL.md#L20-L22
  • skills/openspec-verify-change/SKILL.md#L30-L37
  • skills/openspec-verify-change/SKILL.md#L39-L45
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@skills/openspec-update-change/SKILL.md` around lines 20 - 22, Propagate the
selected store ID through every documented command sequence: update
`skills/openspec-update-change/SKILL.md` ranges 20-22, 34-46, and 59-65 to
include the store flag in `openspec list`, `openspec status`, and `openspec
instructions`; update `skills/openspec-verify-change/SKILL.md` ranges 20-22,
30-37, and 39-45 similarly for `openspec list`, `openspec status`, and `openspec
instructions apply`. Preserve the existing command flow while ensuring each
command targets the selected OpenSpec store.

Comment on lines +116 to +125
```
## Verification Report: <change-name>

### Summary
| Dimension | Status |
|--------------|------------------|
| Completeness | X/Y tasks, N reqs|
| Correctness | M/N reqs covered |
| Coherence | Followed/Issues |
```

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

📐 Maintainability & Code Quality | 🟡 Minor | ⚡ Quick win

Specify the fenced block language.

The report template uses an unlabeled code fence, triggering Markdown lint. Use ```markdown for this sample.

🧰 Tools
🪛 markdownlint-cli2 (0.23.0)

[warning] 116-116: Fenced code blocks should have a language specified

(MD040, fenced-code-language)

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@skills/openspec-verify-change/SKILL.md` around lines 116 - 125, Update the
fenced code block in the Verification Report template to declare the markdown
language using a markdown-labeled fence, while preserving the report example
content unchanged.

Source: Linters/SAST tools

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.

Publish skills to skills.sh

1 participant