Files
gh-levnikolaevich-claude-co…/skills/ln-223-story-replanner/SKILL.md
2025-11-30 08:37:27 +08:00

274 lines
8.9 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
---
name: ln-223-story-replanner
description: Replans Stories when Epic requirements change. Compares IDEAL vs existing, categorizes operations (KEEP/UPDATE/OBSOLETE/CREATE), executes in Linear.
---
# Story Replanner
Universal replanner worker for updating Stories in Epic when requirements change. Invoked by ln-220-story-coordinator (count ≥ 1).
## When Invoked
**ln-220-story-coordinator REPLAN MODE (Phase 5b):**
- Epic has existing Stories (Linear query count ≥ 1)
- IDEAL plan generated (Phase 3)
- Standards Research completed by ln-221 (Phase 2, may be updated)
- Epic requirements changed (AC modified, features added/removed, standards updated)
- Parameters: `epicData`, `idealPlan`, `standardsResearch`, `existingStoryIds`, `teamId`, `autoApprove`
## Input Parameters
**From ln-220-story-coordinator:**
```javascript
{
epicData: {id, title, description},
idealPlan: [{number, title, statement, ac, technicalNotes, estimatedHours, testCounts}],
standardsResearch: "OAuth 2.0 (RFC 6749)...", // May differ from existing
existingStoryIds: ["STORY-123", "STORY-124"], // Metadata only
teamId: "team-id",
autoApprove: true
}
```
## Workflow
### Phase 1: Load Existing Stories
**Progressive Loading for token efficiency:**
**Step 1:** Orchestrator provides Story metadata (ID, title, status)
**Step 2:** Load FULL descriptions ONE BY ONE
```javascript
for each story_id:
get_issue(id=story_id) // ~5,000 tokens per Story
```
**Token Rationale:** 10 Stories × 5,000 = 50,000 tokens. Load sequentially to manage context.
**Step 3:** Parse 8 sections for each Story
- Story Statement (persona, capability, value)
- Context
- Acceptance Criteria (3-5 GWT)
- Test Strategy
- Technical Notes (**Standards Research** in Library Research subsection)
- Definition of Done
- Dependencies
**Step 4:** Extract metadata
- ID, number, title, status
- Persona, capability, value
- AC scenarios
- Standards Research (from Technical Notes)
**Output:** Array of N existing Story structures ready for comparison.
### Phase 2: Compare IDEAL vs Existing
**Algorithm:** See [replan_algorithm_stories.md](references/replan_algorithm_stories.md)
**Match by goal, persona, capability:**
For EACH Story in IDEAL:
- Extract: Title, Persona, Capability
- Search existing: Fuzzy match title, check persona/capability overlap
- Result: Match → KEEP/UPDATE | No match → CREATE
For EACH existing Story:
- Extract: Title, Persona, Capability (from Story Statement)
- Search IDEAL: Fuzzy match
- Result: Match → KEEP/UPDATE | No match → OBSOLETE
**Categorize operations:**
| Operation | Criteria | Status Constraint | Action |
|-----------|----------|-------------------|--------|
| **KEEP** | Goal + Persona + Capability + AC + Standards Research same | Any | None |
| **UPDATE** | Match + (AC OR Standards Research OR Technical Notes changed) | Backlog/Todo ✅<br>In Progress/Review ⚠️<br>Done ❌ | `update_issue` |
| **OBSOLETE** | No match + Feature removed | Backlog/Todo ✅<br>In Progress/Review ⚠️<br>Done ❌ | `update_issue(state="Canceled")` |
| **CREATE** | In IDEAL + No match + New requirement | N/A | Generate doc + `create_issue` |
**Edge Cases:**
| Case | Action |
|------|--------|
| **In Progress OBSOLETE** | ⚠️ NO auto-cancel, show warning |
| **Done conflicts** | Preserve Done, CREATE follow-up |
| **Story Split** (1 → 2+) | ⚠️ UPDATE first + CREATE new |
| **Story Merge** (2+ → 1) | ⚠️ UPDATE first + OBSOLETE rest |
| **Ambiguous match** (>70% similarity) | Show all, select highest |
**Details:** [replan_algorithm_stories.md](references/replan_algorithm_stories.md)
### Phase 3: Show Operations Summary
```
REPLAN SUMMARY for Epic 7: OAuth Authentication
IDEAL PLAN:
1. US004: Register OAuth client (Persona: Third-party developer)
2. US005: Request access token ← AC5 ADDED! ← RFC 7636 PKCE ADDED!
3. US006: Validate access token
4. US009: Token scope management (NEW!)
EXISTING STORIES:
✓ US004 - Status: Done - KEEP
⚠ US005 - Status: Todo - UPDATE
Changes: Add AC5, Add RFC 7636 to Technical Notes, Add 2 Integration tests
Diff (AC): + AC5 "Given public client, When request with PKCE..."
Diff (Technical Notes): + RFC 7636 (PKCE)
✗ US008 - Status: Todo - OBSOLETE (feature removed)
+ US009 - NEW (14h, 20 tests, OAuth 2.0 Scope standard)
OPERATIONS: 2 keep, 1 update, 1 cancel, 1 create
WARNINGS:
- ⚠️ US005 (Todo): AC changed, Standards Research updated
- ⚠️ US008 (Todo): Feature removed - check dependencies
Type "confirm" to execute.
```
**Diffs show:**
- AC changes (line-by-line)
- Standards Research changes (added/removed RFCs)
- Test Strategy changes (test counts)
**Warnings for:**
- Status conflicts (In Progress/Review affected)
- Story Split/Merge detected
- Ambiguous matches
### Phase 4: User Confirmation
**If autoApprove=true:** Skip → Phase 5
**Otherwise:** Wait for "confirm"
**Adjustment:** User can request changes → Recategorize → Show updated summary → Loop until "confirm"
### Phase 5: Execute Operations
**Sequence:** UPDATE → OBSOLETE → CREATE → Update kanban
**UPDATE operations:**
1. Generate new Story document (story_template_universal.md from ln-222/references/)
2. Validate INVEST (same as ln-222-story-creator Phase 2)
3. `update_issue(id, description=new_description)`
4. Add comment: "Story updated: AC changed (AC5 added), Standards Research updated (RFC 7636)"
**OBSOLETE operations:**
1. `update_issue(id, state="Canceled")`
2. Add comment: "Story canceled: Feature removed from Epic Scope In. Reason: [details]"
**CREATE operations:**
1. Generate Story document (same as ln-222-story-creator Phase 1)
2. Validate INVEST
3. `create_issue({title, description, project=Epic, team, labels=["user-story"], state="Backlog"})`
**Update kanban_board.md:**
**DELETE (OBSOLETE):** Remove canceled Story lines, remove task lines if any, remove Epic header if empty
**CREATE (NEW):** Find `### Backlog` → Search Epic group → Add Stories (2-space indent)
**UPDATE Epic Story Counters:** Last Story, Next Story
**Return:**
```
REPLAN EXECUTED for Epic 7
OPERATIONS SUMMARY:
✓ Kept: 2 Stories
✓ Updated: 1 Story (AC/Standards Research changed)
✓ Canceled: 1 Story (feature removed)
✓ Created: 1 Story (new requirement)
UPDATED: [ID: US005](url) - AC5 added, RFC 7636 PKCE added
CANCELED: US008 Custom token formats
NEW: [ID: US009](url) - Token scope management
WARNINGS: US005 (Todo) AC changed
✓ kanban_board.md updated
✓ Standards Research updates: RFC 7636 PKCE added to US005
NEXT STEPS:
1. Review warnings
2. Run ln-320-story-validator on updated/created Stories
3. Use ln-310-story-decomposer to create/replan tasks
```
## Critical Rules
| Rule | Description |
|------|-------------|
| **Status Constraints** | UPDATE/OBSOLETE: Backlog/Todo ✅, In Progress/Review ⚠️, Done ❌ |
| **Preserve Done** | Never update/cancel Done Stories (CREATE follow-up if conflicts) |
| **Story Split/Merge** | Detect 1→2+ OR 2+→1, show warnings (complex, impacts Tasks) |
| **Clear Diffs** | Show before/after for UPDATE (AC, Standards Research, Technical Notes) |
| **Meaningful Comments** | Explain why updated/canceled (reference removed capabilities) |
| **Conservative Updates** | Prefer CREATE over UPDATE when in doubt |
| **Progressive Loading** | Load Stories ONE BY ONE (not all at once, token efficiency) |
## Definition of Done
**✅ Phase 1:**
- [ ] Existing Story IDs queried
- [ ] FULL descriptions fetched ONE BY ONE
- [ ] 8 sections parsed
- [ ] Metadata extracted (persona, capability, AC, Standards Research)
**✅ Phase 2:**
- [ ] Stories matched by goal/persona/capability
- [ ] Operations categorized (KEEP/UPDATE/OBSOLETE/CREATE)
- [ ] Edge cases detected (Split/Merge, Ambiguous)
**✅ Phase 3:**
- [ ] Operations summary shown
- [ ] Diffs shown for UPDATE (AC, Standards Research, Technical Notes)
- [ ] Warnings shown
**✅ Phase 4:**
- [ ] autoApprove=true OR user confirmed
**✅ Phase 5:**
- [ ] All operations executed (UPDATE/OBSOLETE/CREATE)
- [ ] kanban_board.md updated
- [ ] Summary returned (URLs + warnings)
## Reference Files
### replan_algorithm_stories.md
**Location:** `references/` (owned by this skill)
**Purpose:** Detailed comparison logic for REPLAN mode (Story level)
**Contents:** KEEP/UPDATE/OBSOLETE/CREATE rules, Match criteria, Status constraints, Edge cases, Examples
**Usage:** Applied in Phase 2
### story_template_universal.md
**Location:** `ln-222-story-creator/references/` (ln-222 ownership)
**Purpose:** Universal Story template (8 sections)
**Usage:** Read when generating updated Story documents for UPDATE/CREATE operations
## Integration
**Called by:** ln-220-story-coordinator (Phase 5b, count ≥ 1)
**Returns:**
- Success: Operations summary + URLs + warnings
- Error: "Story USXXX violates INVEST: [details]"
**Worker does NOT:**
- Query Linear for Epic (already in context)
- Analyze Epic complexity (orchestrator Phase 3)
- Research standards (orchestrator Phase 2)
- Build IDEAL plan (receives from orchestrator)
---
**Version:** 1.0.0
**Last Updated:** 2025-11-20