Skip to content

feat: add Claude Code plugin structure (skills + commands + .claude-plugin)#1122

Open
CYL090315 wants to merge 1 commit into
Fission-AI:mainfrom
CYL090315:main
Open

feat: add Claude Code plugin structure (skills + commands + .claude-plugin)#1122
CYL090315 wants to merge 1 commit into
Fission-AI:mainfrom
CYL090315:main

Conversation

@CYL090315
Copy link
Copy Markdown

@CYL090315 CYL090315 commented May 24, 2026

Summary

Add Claude Code plugin distribution files to enable direct installation via /plugin install openspec@openspec.

Changes

  • 4 skills: openspec-propose, openspec-explore, openspec-apply-change, openspec-archive-change
  • 4 commands: opsx/propose, opsx/apply, opsx/explore, opsx/archive
  • Plugin metadata: .claude-plugin/plugin.json

Why

Currently the repo only has AGENTS.md at root. The installer's verifyPlugin requires at least one of skills/, commands/, agents/, or .claude-plugin/ directories. This PR adds all three, resolving the [FAIL] openspec: ?????????? error during plugin installation.

Summary by CodeRabbit

  • New Features

    • Added four new workflows for managing experimental changes: Apply (implementing tasks), Archive (completing experimental changes), Explore (thinking-focused discovery), and Propose (creating changes with artifacts).
    • Introduced corresponding assistant skills to guide users through each workflow with built-in task tracking and progress management.
  • Chores

    • Updated plugin version to 1.3.1 with enhanced metadata and configuration.

Review Change Stack

@CYL090315 CYL090315 requested a review from TabishB as a code owner May 24, 2026 16:58
@coderabbitai
Copy link
Copy Markdown
Contributor

coderabbitai Bot commented May 24, 2026

📝 Walkthrough

Walkthrough

This PR adds comprehensive workflow documentation and AI skill specifications for four core OpenSpec operations: proposing new changes, exploring problems, applying implementations, and archiving completed work. It includes a plugin manifest update and paired command documentation with skill instructions for each workflow.

Changes

OpenSpec CLI Workflows

Layer / File(s) Summary
Plugin Configuration
.claude-plugin/plugin.json
Plugin manifest identifies the OpenSpec plugin version 1.3.1 with metadata and entry point.
Propose Workflow: Create Changes and Generate Artifacts
commands/opsx/propose.md, skills/openspec-propose/SKILL.md
/opsx:propose command and openspec-propose skill create a new change directory and iteratively generate all required artifacts in dependency order using openspec instructions templates, reading dependency context and treating context/rules as constraints.
Explore Workflow: Thinking and Discovery
commands/opsx/explore.md, skills/openspec-explore/SKILL.md
/opsx:explore command and openspec-explore skill define a thinking-focused stance for problem-space investigation, codebase exploration, option comparison, and visualization, with optional artifact capture via OpenSpec awareness checks and user-deferred decisions.
Apply Workflow: Implement Tasks from Changes
commands/opsx/apply.md, skills/openspec-apply-change/SKILL.md
/opsx:apply command and openspec-apply-change skill execute implementation tasks from an existing change, including change selection, context file reading, task-by-task completion with checkbox updates, progress display, and pause conditions for unclear requirements or errors.
Archive Workflow: Complete and Archive Changes
commands/opsx/archive.md, skills/openspec-archive-change/SKILL.md
/opsx:archive command and openspec-archive-change skill archive completed changes after verifying artifact/task completion, assessing delta-spec sync state via comparison to main specs, optionally invoking openspec-sync-specs through the Skill tool, and moving changes to a date-stamped archive directory with collision detection.

Sequence Diagram(s)

Diagrams are not generated for this change because the PR is primarily documentation and workflow specifications without observable multi-component runtime interactions or control-flow changes. The defined workflows are behavioral contracts for AI skill execution rather than code paths requiring flow visualization.

Estimated code review effort

🎯 2 (Simple) | ⏱️ ~12 minutes

Possibly related issues

  • Fission-AI/OpenSpec#863: Proposes manual spec-sync and move-to-archive steps; this PR implements those steps via the new /opsx:archive skill and command documentation with optional openspec-sync-specs invocation.

Possibly related PRs

  • Fission-AI/OpenSpec#514: Adds archive workflow documentation describing delta-spec sync assessment and consolidated sync-vs-archive prompting, which this PR implements at the command/skill template level.
  • Fission-AI/OpenSpec#455: Introduces archive change workflow; this PR documents that same workflow via new command and skill specifications.
  • Fission-AI/OpenSpec#632: Refactors delta-spec syncing logic to use Skill-tool invocation of openspec-sync-specs; this PR documents that pattern in the archive command/skill templates.

Suggested reviewers

  • TabishB
  • alfred-openspec

Poem

🐰 Four paths through the forest fair,
propose, explore, apply, archive with care.
Each skill a stepping stone to guide,
the weary coder's experimental tide.
Organize, think, implement, complete—
a workflow loop, now tidy and neat!

🚥 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 PR title accurately describes the main change: adding a Claude Code plugin structure with skills, commands, and plugin metadata file.
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ 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 and usage tips.

Copy link
Copy Markdown
Contributor

@coderabbitai coderabbitai Bot left a comment

Choose a reason for hiding this comment

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

Actionable comments posted: 10

🤖 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 @.claude-plugin/plugin.json:
- Line 1: The manifest JSON file contains a leading UTF-8 BOM (U+FEFF) before
the opening “{” which can break strict JSON parsers; open the plugin manifest,
remove the hidden BOM character at the very start (or re-save the file as UTF-8
without BOM), and ensure the file now begins directly with “{” so the JSON
parses cleanly.

In `@commands/opsx/apply.md`:
- Around line 88-98: The unlabeled fenced code blocks under the "Implementing:
<change-name> (schema: <schema-name>)" example (and the other example blocks
later) are causing MD040 warnings; fix by adding a language specifier to each
triple-backtick fence (e.g., ```text or ```output or ```console) for the example
output blocks, updating the fences shown in the example snippet and the similar
examples at the other occurrences so all fenced blocks include an explicit
language.
- Around line 44-45: In commands/opsx/apply.md update the guidance for state:
"blocked" to stop referencing the non-existent `/opsx:continue` command; locate
the "blocked" message branch and replace `/opsx:continue` with an actual
command/flow exposed by this PR (or, if no direct resume command exists, point
users to a valid alternative such as `/opsx help` or the documented resume flow
name used elsewhere in the codebase) and update the message text to reflect that
real command/flow.

In `@commands/opsx/archive.md`:
- Around line 92-101: The fenced code blocks under the "## Archive Complete"
section (and the other similar blocks at the ranges called out) are unlabeled
and trigger MD040; add the language tag "text" to each triple-backtick fence
(e.g., change ``` to ```text) for the blocks containing the Archive Complete
content, the blocks at 105-114, 118-132, and 136-148 so the markdown linter
recognizes them as plain text.

In `@commands/opsx/explore.md`:
- Around line 57-72: The fenced ASCII diagram block is unlabeled and triggers
MD040; update the opening fence from ``` to a language tag such as ```text (or
```ascii) so the block becomes labeled and lint-safe; locate the ASCII diagram
fenced block in the explore.md content and replace the unlabeled triple-backtick
with a tagged fence.

In `@commands/opsx/propose.md`:
- Around line 62-66: The documentation uses `outputPath` but the instruction
JSON contract expects `resolvedOutputPath`; update the markdown to replace
`outputPath` with `resolvedOutputPath` everywhere in this command's docs and
examples so the artifact write-path matches the workflow contract, and verify
any surrounding references to `template`, `context`, `rules`, and `dependencies`
remain consistent with the contract.

In `@skills/openspec-apply-change/SKILL.md`:
- Around line 92-102: The unlabeled fenced code blocks in the SKILL.md example
sections (for example under the header "## Implementing: <change-name> (schema:
<schema-name>)" and the other examples at ranges noted) must be labeled with a
language to satisfy markdownlint MD040; update each triple-backtick block (e.g.,
the example blocks showing task progress "Working on task ...",
"[...implementation happening...]", "✓ Task complete") to use a plain text label
by changing ``` to ```text so they are explicitly marked as text.

In `@skills/openspec-archive-change/SKILL.md`:
- Around line 96-105: The fenced code block under the "## Archive Complete"
section in SKILL.md is missing a language tag (causing markdownlint MD040);
update the opening fence for that block (the triple backticks immediately before
"## Archive Complete") to include a language identifier such as text (e.g.,
change ``` to ```text) so the block becomes a plain-text fenced block and
satisfies MD040.

In `@skills/openspec-explore/SKILL.md`:
- Around line 54-69: The markdown contains unlabeled fenced code blocks (ASCII
diagrams) that trigger MD040; update each block (e.g., the ASCII diagram
starting with "┌─────────────────────────────────────────┐" and similar fenced
sections around lines 149-169, 172-200, 203-217, 220-247, 261-274) to use a
language label of text by changing ``` to ```text so linting no longer flags
them; apply this consistently to every unlabeled fenced example in SKILL.md.

In `@skills/openspec-propose/SKILL.md`:
- Around line 66-70: Update the instruction field name in the skill docs:
replace any occurrence of `outputPath` with `resolvedOutputPath` (e.g., the list
entry that currently reads "`outputPath`: Where to write the artifact") so the
docs match the real instructions payload; keep the explanatory text (e.g.,
"Where to write the artifact") and leave the rest of the items (`dependencies`,
`template`, `context`, `rules`) unchanged.
🪄 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: 39f4e108-4abd-4e1f-a4db-2aff4166571c

📥 Commits

Reviewing files that changed from the base of the PR and between e441287 and 52ae81b.

📒 Files selected for processing (9)
  • .claude-plugin/plugin.json
  • commands/opsx/apply.md
  • commands/opsx/archive.md
  • commands/opsx/explore.md
  • commands/opsx/propose.md
  • skills/openspec-apply-change/SKILL.md
  • skills/openspec-archive-change/SKILL.md
  • skills/openspec-explore/SKILL.md
  • skills/openspec-propose/SKILL.md

@@ -0,0 +1,11 @@
{
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.

⚠️ Potential issue | 🟠 Major | ⚡ Quick win

Remove BOM from manifest to avoid parser failures.

Line 1 includes a UTF-8 BOM character before {, which can cause strict JSON consumers to fail loading the plugin manifest.

Suggested fix
-{
+{
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
{
{
🤖 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 @.claude-plugin/plugin.json at line 1, The manifest JSON file contains a
leading UTF-8 BOM (U+FEFF) before the opening “{” which can break strict JSON
parsers; open the plugin manifest, remove the hidden BOM character at the very
start (or re-save the file as UTF-8 without BOM), and ensure the file now begins
directly with “{” so the JSON parses cleanly.

Comment thread commands/opsx/apply.md
Comment on lines +44 to +45
- If `state: "blocked"` (missing artifacts): show message, suggest using `/opsx:continue`
- If `state: "all_done"`: congratulate, suggest archive
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.

⚠️ Potential issue | 🟠 Major | ⚡ Quick win

Replace /opsx:continue with an available command/flow.

This command isn’t part of the command set introduced in this PR, so the guidance can send users to a dead end.

Suggested fix
-   - If `state: "blocked"` (missing artifacts): show message, suggest using `/opsx:continue`
+   - If `state: "blocked"` (missing artifacts): show message and suggest creating/completing required artifacts via `/opsx:propose` (or direct OpenSpec artifact workflow)
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
- If `state: "blocked"` (missing artifacts): show message, suggest using `/opsx:continue`
- If `state: "all_done"`: congratulate, suggest archive
- If `state: "blocked"` (missing artifacts): show message and suggest creating/completing required artifacts via `/opsx:propose` (or direct OpenSpec artifact workflow)
- If `state: "all_done"`: congratulate, suggest archive
🤖 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 `@commands/opsx/apply.md` around lines 44 - 45, In commands/opsx/apply.md
update the guidance for state: "blocked" to stop referencing the non-existent
`/opsx:continue` command; locate the "blocked" message branch and replace
`/opsx:continue` with an actual command/flow exposed by this PR (or, if no
direct resume command exists, point users to a valid alternative such as `/opsx
help` or the documented resume flow name used elsewhere in the codebase) and
update the message text to reflect that real command/flow.

Comment thread commands/opsx/apply.md
Comment on lines +88 to +98
```
## Implementing: <change-name> (schema: <schema-name>)

Working on task 3/7: <task description>
[...implementation happening...]
✓ Task complete

Working on task 4/7: <task description>
[...implementation happening...]
✓ Task 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.

⚠️ Potential issue | 🟡 Minor | ⚡ Quick win

Add language specifiers to output example fences.

These unlabeled fenced blocks trigger MD040 markdownlint warnings.

Also applies to: 102-115, 119-135

🧰 Tools
🪛 markdownlint-cli2 (0.22.1)

[warning] 88-88: 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 `@commands/opsx/apply.md` around lines 88 - 98, The unlabeled fenced code
blocks under the "Implementing: <change-name> (schema: <schema-name>)" example
(and the other example blocks later) are causing MD040 warnings; fix by adding a
language specifier to each triple-backtick fence (e.g., ```text or ```output or
```console) for the example output blocks, updating the fences shown in the
example snippet and the similar examples at the other occurrences so all fenced
blocks include an explicit language.

Comment thread commands/opsx/archive.md
Comment on lines +92 to +101
```
## Archive Complete

**Change:** <change-name>
**Schema:** <schema-name>
**Archived to:** openspec/changes/archive/YYYY-MM-DD-<name>/
**Specs:** ✓ Synced to main specs

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.

⚠️ Potential issue | 🟡 Minor | ⚡ Quick win

Add language tags to fenced output blocks.

These unlabeled fences trigger MD040 and should be marked as text.

Also applies to: 105-114, 118-132, 136-148

🧰 Tools
🪛 markdownlint-cli2 (0.22.1)

[warning] 92-92: 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 `@commands/opsx/archive.md` around lines 92 - 101, The fenced code blocks under
the "## Archive Complete" section (and the other similar blocks at the ranges
called out) are unlabeled and trigger MD040; add the language tag "text" to each
triple-backtick fence (e.g., change ``` to ```text) for the blocks containing
the Archive Complete content, the blocks at 105-114, 118-132, and 136-148 so the
markdown linter recognizes them as plain text.

Comment thread commands/opsx/explore.md
Comment on lines +57 to +72
```
┌─────────────────────────────────────────┐
│ Use ASCII diagrams liberally │
├─────────────────────────────────────────┤
│ │
│ ┌────────┐ ┌────────┐ │
│ │ State │────────▶│ State │ │
│ │ A │ │ B │ │
│ └────────┘ └────────┘ │
│ │
│ System diagrams, state machines, │
│ data flows, architecture sketches, │
│ dependency graphs, comparison tables │
│ │
└─────────────────────────────────────────┘
```
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.

⚠️ Potential issue | 🟡 Minor | ⚡ Quick win

Add a language tag to fenced code block to satisfy markdown linting.

The unlabeled fence triggers MD040.

Suggested fix
-```
+```text
 ...
-```
+```
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
```
┌─────────────────────────────────────────┐
│ Use ASCII diagrams liberally │
├─────────────────────────────────────────┤
│ │
│ ┌────────┐ ┌────────┐ │
│ │ State │────────▶│ State │ │
│ │ A │ │ B │ │
│ └────────┘ └────────┘ │
│ │
│ System diagrams, state machines, │
│ data flows, architecture sketches, │
│ dependency graphs, comparison tables │
│ │
└─────────────────────────────────────────┘
```
🧰 Tools
🪛 markdownlint-cli2 (0.22.1)

[warning] 57-57: 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 `@commands/opsx/explore.md` around lines 57 - 72, The fenced ASCII diagram
block is unlabeled and triggers MD040; update the opening fence from ``` to a
language tag such as ```text (or ```ascii) so the block becomes labeled and
lint-safe; locate the ASCII diagram fenced block in the explore.md content and
replace the unlabeled triple-backtick with a tagged fence.

Comment thread commands/opsx/propose.md
Comment on lines +62 to +66
- `outputPath`: Where to write the artifact
- `dependencies`: Completed artifacts to read for context
- Read any completed dependency files for context
- Create the artifact file using `template` as the structure
- Apply `context` and `rules` as constraints - but do NOT copy them into the file
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.

⚠️ Potential issue | 🟠 Major | ⚡ Quick win

Use resolvedOutputPath instead of outputPath to match instruction JSON contract.

The documented field name is inconsistent with the workflow contract and can break artifact write-path resolution for this command.

Suggested fix
-        - `outputPath`: Where to write the artifact
+        - `resolvedOutputPath`: Where to write the artifact
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
- `outputPath`: Where to write the artifact
- `dependencies`: Completed artifacts to read for context
- Read any completed dependency files for context
- Create the artifact file using `template` as the structure
- Apply `context` and `rules` as constraints - but do NOT copy them into the file
- `resolvedOutputPath`: Where to write the artifact
- `dependencies`: Completed artifacts to read for context
- Read any completed dependency files for context
- Create the artifact file using `template` as the structure
- Apply `context` and `rules` as constraints - but do NOT copy them into the file
🤖 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 `@commands/opsx/propose.md` around lines 62 - 66, The documentation uses
`outputPath` but the instruction JSON contract expects `resolvedOutputPath`;
update the markdown to replace `outputPath` with `resolvedOutputPath` everywhere
in this command's docs and examples so the artifact write-path matches the
workflow contract, and verify any surrounding references to `template`,
`context`, `rules`, and `dependencies` remain consistent with the contract.

Comment on lines +92 to +102
```
## Implementing: <change-name> (schema: <schema-name>)

Working on task 3/7: <task description>
[...implementation happening...]
✓ Task complete

Working on task 4/7: <task description>
[...implementation happening...]
✓ Task 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.

⚠️ Potential issue | 🟡 Minor | ⚡ Quick win

Label fenced output examples with text for markdownlint compliance.

These blocks are currently unlabeled and will be flagged by MD040.

Also applies to: 106-119, 123-139

🧰 Tools
🪛 markdownlint-cli2 (0.22.1)

[warning] 92-92: 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-apply-change/SKILL.md` around lines 92 - 102, The unlabeled
fenced code blocks in the SKILL.md example sections (for example under the
header "## Implementing: <change-name> (schema: <schema-name>)" and the other
examples at ranges noted) must be labeled with a language to satisfy
markdownlint MD040; update each triple-backtick block (e.g., the example blocks
showing task progress "Working on task ...", "[...implementation happening...]",
"✓ Task complete") to use a plain text label by changing ``` to ```text so they
are explicitly marked as text.

Comment on lines +96 to +105
```
## Archive Complete

**Change:** <change-name>
**Schema:** <schema-name>
**Archived to:** openspec/changes/archive/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.

⚠️ Potential issue | 🟡 Minor | ⚡ Quick win

Add a language tag to the success-output fenced block.

The fenced block starting at Line 96 is missing a language identifier, which triggers markdownlint MD040.
Use something like ```text for this example block.

Suggested diff
-```
+```text
 ## Archive Complete
 ...
 All artifacts complete. All tasks complete.
</details>

<details>
<summary>🧰 Tools</summary>

<details>
<summary>🪛 markdownlint-cli2 (0.22.1)</summary>

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

(MD040, fenced-code-language)

</details>

</details>

<details>
<summary>🤖 Prompt for AI Agents</summary>

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 96 - 105, The fenced
code block under the "## Archive Complete" section in SKILL.md is missing a
language tag (causing markdownlint MD040); update the opening fence for that
block (the triple backticks immediately before "## Archive Complete") to include
a language identifier such as text (e.g., change totext) so the block
becomes a plain-text fenced block and satisfies MD040.


</details>

<!-- fingerprinting:phantom:triton:hawk -->

<!-- This is an auto-generated comment by CodeRabbit -->

Comment on lines +54 to +69
```
┌─────────────────────────────────────────┐
│ Use ASCII diagrams liberally │
├─────────────────────────────────────────┤
│ │
│ ┌────────┐ ┌────────┐ │
│ │ State │────────▶│ State │ │
│ │ A │ │ B │ │
│ └────────┘ └────────┘ │
│ │
│ System diagrams, state machines, │
│ data flows, architecture sketches, │
│ dependency graphs, comparison tables │
│ │
└─────────────────────────────────────────┘
```
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.

⚠️ Potential issue | 🟡 Minor | ⚡ Quick win

Label fenced examples with text to clear MD040 warnings.

These example/ASCII blocks are currently unlabeled and will be flagged by markdown lint.

Suggested fix pattern
-```
+```text
 ...
-```
+```

Also applies to: 149-169, 172-200, 203-217, 220-247, 261-274

🧰 Tools
🪛 markdownlint-cli2 (0.22.1)

[warning] 54-54: 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-explore/SKILL.md` around lines 54 - 69, The markdown contains
unlabeled fenced code blocks (ASCII diagrams) that trigger MD040; update each
block (e.g., the ASCII diagram starting with
"┌─────────────────────────────────────────┐" and similar fenced sections around
lines 149-169, 172-200, 203-217, 220-247, 261-274) to use a language label of
text by changing ``` to ```text so linting no longer flags them; apply this
consistently to every unlabeled fenced example in SKILL.md.

Comment on lines +66 to +70
- `outputPath`: Where to write the artifact
- `dependencies`: Completed artifacts to read for context
- Read any completed dependency files for context
- Create the artifact file using `template` as the structure
- Apply `context` and `rules` as constraints - but do NOT copy them into the file
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.

⚠️ Potential issue | 🟠 Major | ⚡ Quick win

Fix instruction field name to resolvedOutputPath in skill docs.

Using outputPath here conflicts with the actual instructions payload and can misroute generated artifacts.

Suggested fix
-        - `outputPath`: Where to write the artifact
+        - `resolvedOutputPath`: Where to write the artifact
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
- `outputPath`: Where to write the artifact
- `dependencies`: Completed artifacts to read for context
- Read any completed dependency files for context
- Create the artifact file using `template` as the structure
- Apply `context` and `rules` as constraints - but do NOT copy them into the file
- `resolvedOutputPath`: Where to write the artifact
- `dependencies`: Completed artifacts to read for context
- Read any completed dependency files for context
- Create the artifact file using `template` as the structure
- Apply `context` and `rules` as constraints - but do NOT copy them into the file
🤖 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-propose/SKILL.md` around lines 66 - 70, Update the
instruction field name in the skill docs: replace any occurrence of `outputPath`
with `resolvedOutputPath` (e.g., the list entry that currently reads
"`outputPath`: Where to write the artifact") so the docs match the real
instructions payload; keep the explanatory text (e.g., "Where to write the
artifact") and leave the rest of the items (`dependencies`, `template`,
`context`, `rules`) unchanged.

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