183 lines
5.8 KiB
Markdown
183 lines
5.8 KiB
Markdown
---
|
|
phase: 02-integration-layer
|
|
plan: 01
|
|
type: execute
|
|
wave: 1
|
|
depends_on: []
|
|
files_modified:
|
|
- skill/SKILL.md
|
|
- tests/test_skill_md.py
|
|
autonomous: true
|
|
requirements:
|
|
- OCLW-01
|
|
- OCLW-02
|
|
|
|
must_haves:
|
|
truths:
|
|
- "SKILL.md has valid YAML frontmatter with name and description fields"
|
|
- "OpenClaw can load the skill successfully"
|
|
- "Skill triggers on /gsd:* command patterns"
|
|
artifacts:
|
|
- path: "skill/SKILL.md"
|
|
provides: "OpenClaw skill definition and trigger patterns"
|
|
min_lines: 20
|
|
contains: "---"
|
|
- path: "tests/test_skill_md.py"
|
|
provides: "Tests for SKILL.md validation"
|
|
exports: ["TestSkillMd"]
|
|
key_links:
|
|
- from: "skill/SKILL.md"
|
|
to: "OpenClaw Gateway"
|
|
via: "skill loading"
|
|
pattern: "name:.*description:"
|
|
---
|
|
|
|
<objective>
|
|
Create SKILL.md with valid frontmatter that OpenClaw can load and triggers on /gsd:* commands.
|
|
|
|
Purpose: Define the skill entry point for OpenClaw's skill registry. The SKILL.md file is the "face" of the gsd-openclaw skill that OpenClaw loads to understand when to invoke this skill.
|
|
|
|
Output:
|
|
- skill/SKILL.md - OpenClaw skill definition
|
|
- tests/test_skill_md.py - Validation tests
|
|
</objective>
|
|
|
|
<execution_context>
|
|
@/home/starmen1265/.claude/get-shit-done/workflows/execute-plan.md
|
|
@/home/starmen1265/.claude/get-shit-done/templates/summary.md
|
|
</execution_context>
|
|
|
|
<context>
|
|
@.planning/PROJECT.md
|
|
@.planning/ROADMAP.md
|
|
@.planning/STATE.md
|
|
@.planning/phases/02-integration-layer/02-CONTEXT.md
|
|
@.planning/phases/02-integration-layer/02-RESEARCH.md
|
|
|
|
<interfaces>
|
|
<!-- Reference: dev-workflow SKILL.md pattern -->
|
|
<!-- OpenClaw skills require only `name` and `description` fields -->
|
|
<!-- The `description` field serves as the trigger condition -->
|
|
|
|
Example frontmatter format:
|
|
```yaml
|
|
---
|
|
name: gsd-openclaw
|
|
description: GSD project management via /gsd:* commands. Triggers on /gsd:new-project, /gsd:plan, /gsd:status, /gsd:use and other GSD slash commands.
|
|
---
|
|
```
|
|
</interfaces>
|
|
</context>
|
|
|
|
<tasks>
|
|
|
|
<task type="auto" tdd="true">
|
|
<name>Task 1: Create test scaffold for SKILL.md validation</name>
|
|
<files>tests/test_skill_md.py</files>
|
|
<behavior>
|
|
- Test 1: SKILL.md file exists at skill/SKILL.md
|
|
- Test 2: SKILL.md has valid YAML frontmatter between --- delimiters
|
|
- Test 3: SKILL.md frontmatter contains `name` field
|
|
- Test 4: SKILL.md frontmatter contains `description` field
|
|
- Test 5: description field contains /gsd: pattern for triggering
|
|
</behavior>
|
|
<action>
|
|
Create tests/test_skill_md.py with test class TestSkillMd containing:
|
|
|
|
1. test_skill_md_exists():
|
|
- Assert skill/SKILL.md file exists
|
|
- Use Path(__file__).parent.parent / "skill" / "SKILL.md"
|
|
|
|
2. test_skill_md_has_valid_frontmatter():
|
|
- Read file content
|
|
- Assert content starts with "---\n"
|
|
- Assert second "---" delimiter exists
|
|
- Use yaml.safe_load() to parse frontmatter (import yaml)
|
|
|
|
3. test_skill_md_has_name_field():
|
|
- Parse frontmatter
|
|
- Assert "name" key exists
|
|
- Assert name is non-empty string
|
|
|
|
4. test_skill_md_has_description_field():
|
|
- Parse frontmatter
|
|
- Assert "description" key exists
|
|
- Assert description is non-empty string
|
|
|
|
5. test_skill_md_description_contains_gsd_pattern():
|
|
- Parse frontmatter
|
|
- Assert "/gsd:" appears in description (for trigger matching)
|
|
|
|
Follow test pattern from tests/test_state_manager.py (class-based, clear docstrings).
|
|
Add yaml to test dependencies if needed (should be available via pytest).
|
|
</action>
|
|
<verify>
|
|
<automated>pytest tests/test_skill_md.py -v</automated>
|
|
</verify>
|
|
<done>
|
|
- tests/test_skill_md.py exists with 5 passing tests
|
|
- All tests fail initially (no SKILL.md yet)
|
|
</done>
|
|
</task>
|
|
|
|
<task type="auto" tdd="true">
|
|
<name>Task 2: Create SKILL.md with valid frontmatter</name>
|
|
<files>skill/SKILL.md</files>
|
|
<behavior>
|
|
- Test: All tests in test_skill_md.py pass
|
|
</behavior>
|
|
<action>
|
|
Create skill/SKILL.md with:
|
|
|
|
1. YAML frontmatter (between --- delimiters):
|
|
- name: gsd-openclaw
|
|
- description: GSD project management via /gsd:* commands. Triggers on /gsd:new-project, /gsd:plan, /gsd:status, /gsd:use and other GSD slash commands.
|
|
|
|
2. Markdown content body (after frontmatter):
|
|
- Title: # GSD-OpenClaw Skill
|
|
- "## When to Use" section explaining trigger patterns
|
|
- "## Commands" table with supported /gsd:* commands
|
|
- "## Project Context" section explaining /gsd:use command
|
|
|
|
User decision (LOCKED): Only /gsd:* command triggers, no natural language.
|
|
|
|
Commands to document in table:
|
|
| Command | Description |
|
|
| /gsd:new-project <name> | Create a new GSD project |
|
|
| /gsd:use <project> | Switch to a project context |
|
|
| /gsd:status | Show current project status |
|
|
| /gsd:plan | Run planning phase |
|
|
| /gsd:ship | Ship the current phase |
|
|
| /gsd:help | Show available commands |
|
|
|
|
Follow dev-workflow/SKILL.md structure as reference.
|
|
</action>
|
|
<verify>
|
|
<automated>pytest tests/test_skill_md.py -v</automated>
|
|
</verify>
|
|
<done>
|
|
- skill/SKILL.md exists with valid YAML frontmatter
|
|
- All 5 tests in test_skill_md.py pass
|
|
- SKILL.md has name, description fields with /gsd: trigger pattern
|
|
</done>
|
|
</task>
|
|
|
|
</tasks>
|
|
|
|
<verification>
|
|
- Run pytest tests/test_skill_md.py -v (all tests pass)
|
|
- Verify SKILL.md can be parsed as valid YAML
|
|
- Verify description contains /gsd: pattern for OpenClaw trigger matching
|
|
</verification>
|
|
|
|
<success_criteria>
|
|
1. skill/SKILL.md exists with valid YAML frontmatter
|
|
2. Frontmatter contains `name: gsd-openclaw`
|
|
3. Frontmatter contains `description` with /gsd:* pattern
|
|
4. All 5 tests in tests/test_skill_md.py pass
|
|
</success_criteria>
|
|
|
|
<output>
|
|
After completion, create `.planning/phases/02-integration-layer/02-01-SUMMARY.md`
|
|
</output>
|