specweave 0.26.11 → 0.26.14

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (83) hide show
  1. package/dist/plugins/specweave-github/lib/completion-calculator.d.ts +4 -1
  2. package/dist/plugins/specweave-github/lib/completion-calculator.d.ts.map +1 -1
  3. package/dist/plugins/specweave-github/lib/completion-calculator.js +49 -29
  4. package/dist/plugins/specweave-github/lib/completion-calculator.js.map +1 -1
  5. package/dist/plugins/specweave-jira/lib/setup-wizard.js +1 -1
  6. package/dist/plugins/specweave-jira/lib/setup-wizard.js.map +1 -1
  7. package/dist/src/cli/commands/import-docs.js +2 -2
  8. package/dist/src/cli/commands/import-docs.js.map +1 -1
  9. package/dist/src/cli/commands/init.js +8 -8
  10. package/dist/src/cli/commands/init.js.map +1 -1
  11. package/dist/src/cli/commands/install.js +2 -2
  12. package/dist/src/cli/commands/install.js.map +1 -1
  13. package/dist/src/cli/helpers/ado-area-path-mapper.js +3 -3
  14. package/dist/src/cli/helpers/ado-area-path-mapper.js.map +1 -1
  15. package/dist/src/cli/helpers/github/profile-manager.js +1 -1
  16. package/dist/src/cli/helpers/github/profile-manager.js.map +1 -1
  17. package/dist/src/cli/helpers/github-repo-selector.js +3 -3
  18. package/dist/src/cli/helpers/github-repo-selector.js.map +1 -1
  19. package/dist/src/cli/helpers/import-strategy-prompter.js +1 -1
  20. package/dist/src/cli/helpers/import-strategy-prompter.js.map +1 -1
  21. package/dist/src/cli/helpers/issue-tracker/github-multi-repo.js +1 -1
  22. package/dist/src/cli/helpers/issue-tracker/github-multi-repo.js.map +1 -1
  23. package/dist/src/cli/helpers/issue-tracker/github.js +3 -3
  24. package/dist/src/cli/helpers/issue-tracker/github.js.map +1 -1
  25. package/dist/src/cli/helpers/issue-tracker/index.js +1 -1
  26. package/dist/src/cli/helpers/issue-tracker/index.js.map +1 -1
  27. package/dist/src/cli/helpers/issue-tracker/jira.js +1 -1
  28. package/dist/src/cli/helpers/issue-tracker/jira.js.map +1 -1
  29. package/dist/src/cli/helpers/smart-filter.js +1 -1
  30. package/dist/src/cli/helpers/smart-filter.js.map +1 -1
  31. package/dist/src/core/increment/increment-archiver.d.ts +3 -0
  32. package/dist/src/core/increment/increment-archiver.d.ts.map +1 -1
  33. package/dist/src/core/increment/increment-archiver.js +35 -4
  34. package/dist/src/core/increment/increment-archiver.js.map +1 -1
  35. package/dist/src/core/living-docs/feature-archiver.d.ts +5 -0
  36. package/dist/src/core/living-docs/feature-archiver.d.ts.map +1 -1
  37. package/dist/src/core/living-docs/feature-archiver.js +66 -18
  38. package/dist/src/core/living-docs/feature-archiver.js.map +1 -1
  39. package/dist/src/core/repo-structure/repo-bulk-discovery.js +2 -2
  40. package/dist/src/core/repo-structure/repo-bulk-discovery.js.map +1 -1
  41. package/dist/src/core/repo-structure/repo-structure-manager.js +10 -10
  42. package/dist/src/core/repo-structure/repo-structure-manager.js.map +1 -1
  43. package/dist/src/core/sync/bidirectional-engine.js +1 -1
  44. package/dist/src/core/sync/bidirectional-engine.js.map +1 -1
  45. package/dist/src/init/InitFlow.js +1 -1
  46. package/dist/src/init/InitFlow.js.map +1 -1
  47. package/dist/src/integrations/ado/area-path-mapper.js +1 -1
  48. package/dist/src/integrations/ado/area-path-mapper.js.map +1 -1
  49. package/dist/src/utils/external-resource-validator.js +4 -4
  50. package/dist/src/utils/external-resource-validator.js.map +1 -1
  51. package/package.json +1 -1
  52. package/plugins/PLUGINS-INDEX.md +120 -0
  53. package/plugins/specweave/commands/specweave-archive.md +10 -1
  54. package/plugins/specweave/commands/specweave-increment.md +1 -1
  55. package/plugins/specweave/commands/specweave-update-scope.md +2 -2
  56. package/plugins/specweave/hooks/hooks.json +10 -0
  57. package/plugins/specweave/hooks/lib/update-active-increment.sh +96 -0
  58. package/plugins/specweave/hooks/lib/update-status-line.sh +153 -189
  59. package/plugins/specweave/hooks/post-edit-write-consolidated.sh +6 -0
  60. package/plugins/specweave/hooks/post-metadata-change.sh +9 -0
  61. package/plugins/specweave/hooks/post-task-completion.sh +8 -0
  62. package/plugins/specweave/hooks/post-task-edit.sh +37 -0
  63. package/plugins/specweave/hooks/post-user-story-complete.sh +86 -35
  64. package/plugins/specweave/hooks/pre-command-deduplication.sh +43 -53
  65. package/plugins/specweave/hooks/pre-tool-use.sh +5 -0
  66. package/plugins/specweave/hooks/user-prompt-submit.sh +143 -289
  67. package/plugins/specweave/lib/hooks/us-completion-orchestrator.js +62 -1
  68. package/plugins/specweave/lib/hooks/us-completion-orchestrator.ts +106 -3
  69. package/plugins/specweave/skills/SKILLS-INDEX.md +69 -225
  70. package/plugins/specweave-ado/commands/specweave-ado-import-projects.md +1 -1
  71. package/plugins/specweave-ado/lib/project-selector.js +1 -1
  72. package/plugins/specweave-ado/lib/project-selector.ts +1 -1
  73. package/plugins/specweave-ado/skills/ado-resource-validator/SKILL.md +1 -1
  74. package/plugins/specweave-github/lib/completion-calculator.js +34 -16
  75. package/plugins/specweave-github/lib/completion-calculator.ts +54 -32
  76. package/plugins/specweave-github/lib/repo-selector.js +1 -1
  77. package/plugins/specweave-github/lib/repo-selector.ts +1 -1
  78. package/plugins/specweave-jira/lib/project-selector.js +1 -1
  79. package/plugins/specweave-jira/lib/project-selector.ts +1 -1
  80. package/plugins/specweave-jira/lib/setup-wizard.js +1 -1
  81. package/plugins/specweave-jira/lib/setup-wizard.ts +1 -1
  82. package/src/templates/AGENTS.md.template +301 -2452
  83. package/src/templates/CLAUDE.md.template +99 -667
@@ -3,6 +3,59 @@ import { USCompletionDetector } from "../../../../dist/src/core/us-completion-de
3
3
  import { LivingDocsSync } from "../../../../dist/src/core/living-docs/living-docs-sync.js";
4
4
  import { USSyncThrottle } from "../../../../dist/src/core/us-sync-throttle.js";
5
5
  import { consoleLogger } from "../vendor/utils/logger.js";
6
+ import { spawn } from "child_process";
7
+ import { existsSync } from "fs";
8
+ import * as path from "path";
9
+ async function triggerUserStoryCompleteHook(incrementId, usId, projectRoot) {
10
+ const hookPaths = [
11
+ path.join(projectRoot, "plugins/specweave/hooks/post-user-story-complete.sh"),
12
+ path.join(projectRoot, ".claude/hooks/post-user-story-complete.sh")
13
+ ];
14
+ let hookPath = null;
15
+ for (const p of hookPaths) {
16
+ if (existsSync(p)) {
17
+ hookPath = p;
18
+ break;
19
+ }
20
+ }
21
+ if (!hookPath) {
22
+ console.log(` \u2139\uFE0F post-user-story-complete.sh hook not found (skipping external sync)`);
23
+ return;
24
+ }
25
+ return new Promise((resolve, reject) => {
26
+ const hookProcess = spawn("bash", [hookPath, incrementId, usId], {
27
+ cwd: projectRoot,
28
+ env: {
29
+ ...process.env,
30
+ SPECWEAVE_INCREMENT_ID: incrementId,
31
+ SPECWEAVE_USER_STORY_ID: usId
32
+ },
33
+ stdio: ["ignore", "pipe", "pipe"]
34
+ });
35
+ let stdout = "";
36
+ let stderr = "";
37
+ hookProcess.stdout.on("data", (data) => {
38
+ stdout += data.toString();
39
+ });
40
+ hookProcess.stderr.on("data", (data) => {
41
+ stderr += data.toString();
42
+ });
43
+ hookProcess.on("close", (code) => {
44
+ if (code === 0) {
45
+ resolve();
46
+ } else {
47
+ reject(new Error(`Hook exited with code ${code}: ${stderr || stdout}`));
48
+ }
49
+ });
50
+ hookProcess.on("error", (error) => {
51
+ reject(new Error(`Hook spawn failed: ${error.message}`));
52
+ });
53
+ setTimeout(() => {
54
+ hookProcess.kill("SIGTERM");
55
+ reject(new Error("Hook timed out after 30s"));
56
+ }, 3e4);
57
+ });
58
+ }
6
59
  async function syncCompletedUserStories(incrementId) {
7
60
  try {
8
61
  console.log(`
@@ -52,7 +105,15 @@ async function syncCompletedUserStories(incrementId) {
52
105
  console.log(` Feature: ${syncResult.featureId}`);
53
106
  console.log(` Files updated: ${syncResult.filesCreated.length + syncResult.filesUpdated.length}`);
54
107
  console.log(`
55
- \u{1F4E1} External tool sync completed (GitHub/JIRA/ADO updated if configured)`);
108
+ \u{1F4E1} Triggering external tool updates for ${newlyCompleted.length} completed user stories...`);
109
+ for (const us of newlyCompleted) {
110
+ try {
111
+ await triggerUserStoryCompleteHook(incrementId, us.usId, projectRoot);
112
+ console.log(` \u2705 ${us.usId}: External tool updated`);
113
+ } catch (hookError) {
114
+ console.warn(` \u26A0\uFE0F ${us.usId}: Hook failed (${hookError.message})`);
115
+ }
116
+ }
56
117
  throttle.recordSync(incrementId);
57
118
  console.log(` \u23F1\uFE0F Throttle recorded (next sync allowed in 60s)`);
58
119
  } else {
@@ -39,6 +39,88 @@ import { USCompletionDetector } from '../../../../dist/src/core/us-completion-de
39
39
  import { LivingDocsSync } from '../../../../dist/src/core/living-docs/living-docs-sync.js';
40
40
  import { USSyncThrottle } from '../../../../dist/src/core/us-sync-throttle.js';
41
41
  import { consoleLogger } from '../vendor/utils/logger.js';
42
+ import { spawn } from 'child_process';
43
+ import { existsSync } from 'fs';
44
+ import * as path from 'path';
45
+
46
+ /**
47
+ * Trigger post-user-story-complete hook for external tool updates
48
+ *
49
+ * This bridges the orchestrator to the shell hook that handles:
50
+ * - GitHub issue closure with completion comment
51
+ * - JIRA story transition (if implemented)
52
+ * - ADO work item completion (if implemented)
53
+ *
54
+ * @param incrementId - Increment ID (e.g., "0059-context-optimization")
55
+ * @param usId - User story ID (e.g., "US-003")
56
+ * @param projectRoot - Project root path
57
+ */
58
+ async function triggerUserStoryCompleteHook(
59
+ incrementId: string,
60
+ usId: string,
61
+ projectRoot: string
62
+ ): Promise<void> {
63
+ // Find the hook in multiple possible locations
64
+ const hookPaths = [
65
+ path.join(projectRoot, 'plugins/specweave/hooks/post-user-story-complete.sh'),
66
+ path.join(projectRoot, '.claude/hooks/post-user-story-complete.sh'),
67
+ ];
68
+
69
+ let hookPath: string | null = null;
70
+ for (const p of hookPaths) {
71
+ if (existsSync(p)) {
72
+ hookPath = p;
73
+ break;
74
+ }
75
+ }
76
+
77
+ if (!hookPath) {
78
+ console.log(` ℹ️ post-user-story-complete.sh hook not found (skipping external sync)`);
79
+ return;
80
+ }
81
+
82
+ return new Promise((resolve, reject) => {
83
+ // Call hook with spec-id and user-story-id as arguments
84
+ const hookProcess = spawn('bash', [hookPath, incrementId, usId], {
85
+ cwd: projectRoot,
86
+ env: {
87
+ ...process.env,
88
+ SPECWEAVE_INCREMENT_ID: incrementId,
89
+ SPECWEAVE_USER_STORY_ID: usId,
90
+ },
91
+ stdio: ['ignore', 'pipe', 'pipe'],
92
+ });
93
+
94
+ let stdout = '';
95
+ let stderr = '';
96
+
97
+ hookProcess.stdout.on('data', (data) => {
98
+ stdout += data.toString();
99
+ });
100
+
101
+ hookProcess.stderr.on('data', (data) => {
102
+ stderr += data.toString();
103
+ });
104
+
105
+ hookProcess.on('close', (code) => {
106
+ if (code === 0) {
107
+ resolve();
108
+ } else {
109
+ reject(new Error(`Hook exited with code ${code}: ${stderr || stdout}`));
110
+ }
111
+ });
112
+
113
+ hookProcess.on('error', (error) => {
114
+ reject(new Error(`Hook spawn failed: ${error.message}`));
115
+ });
116
+
117
+ // Timeout after 30 seconds
118
+ setTimeout(() => {
119
+ hookProcess.kill('SIGTERM');
120
+ reject(new Error('Hook timed out after 30s'));
121
+ }, 30000);
122
+ });
123
+ }
42
124
 
43
125
  export interface USSyncResult {
44
126
  success: boolean;
@@ -146,9 +228,30 @@ export async function syncCompletedUserStories(incrementId: string): Promise<USS
146
228
  console.log(` Feature: ${syncResult.featureId}`);
147
229
  console.log(` Files updated: ${syncResult.filesCreated.length + syncResult.filesUpdated.length}`);
148
230
 
149
- // External tool sync happens automatically inside livingDocsSync.syncIncrement()
150
- // It calls syncToExternalTools() which handles GitHub/JIRA/ADO
151
- console.log(`\n📡 External tool sync completed (GitHub/JIRA/ADO updated if configured)`);
231
+ // ========================================================================
232
+ // EXTERNAL TOOL SYNC: Close issues for completed user stories (v0.26.15)
233
+ // ========================================================================
234
+ // livingDocsSync.syncIncrement() updates CONTENT but doesn't CLOSE issues.
235
+ // We need to explicitly trigger post-user-story-complete hook for each US.
236
+ //
237
+ // Flow:
238
+ // 1. For each newly completed US
239
+ // 2. Call post-user-story-complete.sh with spec-id and us-id
240
+ // 3. Hook handles: find issue, add completion comment, close issue
241
+ //
242
+ // Gate checks happen inside the hook based on config flags.
243
+
244
+ console.log(`\n📡 Triggering external tool updates for ${newlyCompleted.length} completed user stories...`);
245
+
246
+ for (const us of newlyCompleted) {
247
+ try {
248
+ await triggerUserStoryCompleteHook(incrementId, us.usId, projectRoot);
249
+ console.log(` ✅ ${us.usId}: External tool updated`);
250
+ } catch (hookError: any) {
251
+ // Non-blocking: Log but continue with next US
252
+ console.warn(` ⚠️ ${us.usId}: Hook failed (${hookError.message})`);
253
+ }
254
+ }
152
255
 
153
256
  // Record successful sync for throttling
154
257
  throttle.recordSync(incrementId);
@@ -1,256 +1,100 @@
1
1
  # SpecWeave Skills Index
2
2
 
3
- **Purpose**: Quick reference for all available skills. Read this file BEFORE starting any task.
3
+ **Purpose**: Lightweight skill manifest for lazy loading. Load SKILL.md only when triggers match.
4
4
 
5
- **Last Updated**: 2025-11-20 (added increment-quality-judge-v2 as dual skill/agent)
6
-
7
- **Total Skills**: 19
8
-
9
- ---
10
-
11
- ## 🚀 Quick Start (Progressive Disclosure)
12
-
13
- **MANDATORY**: Skills are your expert manuals. Always check for relevant skills BEFORE starting implementation.
14
-
15
- ### Progressive Disclosure Pattern
16
-
17
- 1. **Scan this index** to find skills matching your task
18
- 2. **Match activation keywords** to your current request
19
- 3. **Load full SKILL.md** for matching skills
20
- 4. **Follow the workflow** in SKILL.md precisely
21
-
22
- ### Example Workflow
23
-
24
- ```
25
- User asks: "Plan a new feature for user authentication"
26
-
27
- Step 1: Scan this index → Find "increment-planner" skill
28
- Step 2: Check keywords → Matches "feature planning", "create increment"
29
- Step 3: Load skill → cat .claude/skills/increment-planner/SKILL.md
30
- Step 4: Execute → Follow the increment planning workflow
31
- ```
32
-
33
- ---
34
-
35
- ## 📚 All Available Skills
36
-
37
-
38
- ### Framework Core
39
-
40
- #### plugin-expert
41
-
42
- **Description**: Expert knowledge of Claude Code's plugin system, marketplace management, and installation commands. Activates for plugin installation, marketplace setup, plugin troubleshooting, plugin commands. Keywords plugin install, plugin marketplace, claude code plugins, plugin management, plugin errors, marketplace add, plugin list.
43
-
44
- **Activates for**: plugin installation, marketplace setup, plugin troubleshooting, plugin commands, plugin install, plugin marketplace
45
-
46
- **Location**: `.claude/skills/plugin-expert/SKILL.md`
47
-
48
- ---
49
-
50
- #### context-loader
51
-
52
- **Description**: Explains how SpecWeave achieves context efficiency through Claude's native progressive disclosure mechanism and sub-agent parallelization. Skills load only when relevant, sub-agents isolate context. Activates when users ask about context loading, token usage, or how SpecWeave scales. Keywords: context loading, progressive disclosure, token efficiency, sub-agents, context management.
53
-
54
- **Location**: `.claude/skills/context-loader/SKILL.md`
55
-
56
- ---
57
-
58
- #### context-optimizer
59
-
60
- **Description**: Second-pass context optimization that analyzes user prompts and removes irrelevant specs, agents, and skills from loaded context. Achieves 80%+ token reduction through smart cleanup. Activates for optimize context, reduce tokens, clean context, smart context, precision loading.
61
-
62
- **Location**: `.claude/skills/context-optimizer/SKILL.md`
63
-
64
- **Allowed tools**: Read, Grep, Glob
65
-
66
- ---
67
-
68
- #### increment-planner
69
-
70
- **Description**: Creates comprehensive implementation plans for SpecWeave increments (aka features - both terms are interchangeable). This skill should be used when planning new increments/features, creating specifications, or organizing implementation work. Activates for: increment planning, feature planning, implementation plan, create increment, create feature, plan increment, plan feature, organize work, break down increment, break down feature, new product, build project, MVP, SaaS, app development, product description, tech stack planning, feature list.
71
-
72
- **Activates for**: increment planning, feature planning, implementation plan, create increment, create feature, plan increment, plan feature, organize work, break down increment, break down feature, new product, build project, MVP, SaaS, app development, product description, tech stack planning, feature list
73
-
74
- **Location**: `.claude/skills/increment-planner/SKILL.md`
75
-
76
- ---
77
-
78
- #### specweave-detector
79
-
80
- **Description**: Detects SpecWeave context (.specweave/ directory exists) and provides workflow documentation. Explains available slash commands and workflow. Keywords slash commands, /specweave:increment, /increment, /specweave:do, /specweave:progress, /specweave:validate, /specweave:done, specweave commands, workflow help, specweave folder.
81
-
82
- **Note**: Auto-detection of product descriptions is handled by the `project-kickstarter` skill.
83
-
84
- **Location**: `.claude/skills/specweave-detector/SKILL.md`
85
-
86
- ---
87
-
88
- #### specweave-framework
89
-
90
- **Description**: Expert knowledge of SpecWeave framework structure, rules, conventions, and increment lifecycle. Deep understanding of source-of-truth discipline, increment naming, hook system, and plugin architecture. Activates for: specweave rules, how does specweave work, framework structure, increment lifecycle, what is specweave, specweave conventions, specweave discipline, specweave architecture, where do files go, source of truth, increment naming, tasks.md format, spec.md structure, living docs sync, hook system, plugin architecture, how to use specweave, specweave best practices.
91
-
92
- **Activates for**: specweave rules, how does specweave work, framework structure, increment lifecycle, what is specweave, specweave conventions, specweave discipline, specweave architecture, where do files go, source of truth, increment naming, tasks
93
-
94
- **Location**: `.claude/skills/specweave-framework/SKILL.md`
95
-
96
- **Allowed tools**: Read, Grep, Glob
97
-
98
- ---
99
-
100
-
101
- ### Orchestration & Planning
102
-
103
- #### role-orchestrator
104
-
105
- **Description**: Multi-agent orchestration system that coordinates specialized agents (PM, Architect, DevOps, QA, Tech Lead, Security) to work together on complex tasks. Implements hierarchical orchestrator-worker pattern. Activates for complex multi-step requests requiring multiple roles/skills. Keywords: build product, create SaaS, full implementation, end-to-end, multi-agent, orchestrate, coordinate roles, complex project.
106
-
107
- **Location**: `.claude/skills/role-orchestrator/SKILL.md`
108
-
109
- ---
110
-
111
-
112
- ### Quality & Testing
113
-
114
- #### increment-quality-judge-v2
115
-
116
- **Description**: Enhanced AI-powered quality assessment with RISK SCORING (Probability × Impact method) and quality gate decisions. Evaluates specifications, plans, and tests for clarity, testability, completeness, feasibility, maintainability, edge cases, and RISKS. Provides PASS/CONCERNS/FAIL decisions. Activates for validate quality, quality check, assess spec, evaluate increment, spec review, quality score, risk assessment, qa check, quality gate, /specweave:qa command.
117
-
118
- **Activates for**: validate quality, quality check, assess spec, evaluate increment, spec review, quality score, risk assessment, qa check, quality gate
119
-
120
- **Location**: `.claude/skills/increment-quality-judge-v2/SKILL.md`
121
-
122
- **Allowed tools**: Read, Grep, Glob
123
-
124
- **Special Note**: This exists as BOTH a skill and an agent:
125
- - **Skill** (this file) → Provides documentation and reference material
126
- - **Agent** (`plugins/specweave/agents/increment-quality-judge-v2/AGENT.md`) → Provides execution via Task tool
127
-
128
- Use **Skill tool** or **/specweave:qa** slash command for quality assessments.
129
- Use **Task tool** only when programmatically invoking from code (rare).
130
-
131
- **Related**: `/specweave:qa` command, `qa-lead` agent
132
-
133
- ---
134
-
135
-
136
- ### Documentation
137
-
138
- #### brownfield-analyzer
139
-
140
- **Description**: Analyzes existing brownfield projects to map documentation structure to SpecWeave's PRD/HLD/Spec/Runbook pattern. Scans folders, classifies documents, detects external tools (Jira, ADO, GitHub), and generates migration plan. Activates for brownfield, existing project, migrate, analyze structure, legacy documentation.
141
-
142
- **Location**: `.claude/skills/brownfield-analyzer/SKILL.md`
143
-
144
- ---
145
-
146
- #### translator
147
-
148
- **Description**: LLM-native translation skill for SpecWeave content. Activates when translation is needed for CLI messages, templates, documentation, or living docs. Uses the current LLM session for zero-cost translation. Keywords: translate, translation, language, multilingual, i18n, internationalization, Russian, Spanish, Chinese, German, French, localization, translate to.
149
-
150
- **Location**: `.claude/skills/translator/SKILL.md`
151
-
152
- **Allowed tools**: Read, Write, Edit, Grep, Glob
5
+ **Total Skills**: 27 | **Last Updated**: 2025-11-24
153
6
 
154
7
  ---
155
8
 
9
+ ## Lazy Loading Pattern
156
10
 
157
- ### Other
158
-
159
- #### brownfield-onboarder
160
-
161
- **Description**: Intelligently onboards brownfield projects by merging existing CLAUDE.md backups into SpecWeave structure. Extracts project-specific knowledge, domain context, team conventions, and technical details from backup CLAUDE.md files, then distributes content to appropriate SpecWeave folders without bloating CLAUDE.md. Activates for: merge docs, merge claude, onboard brownfield, import existing docs, claude backup, specweave merge-docs.
162
-
163
- **Activates for**: merge docs, merge claude, onboard brownfield, import existing docs, claude backup, specweave merge-docs
164
-
165
- **Location**: `.claude/skills/brownfield-onboarder/SKILL.md`
11
+ 1. **Match triggers** below to user intent
12
+ 2. **Load SKILL.md** only for matched skill
13
+ 3. **Follow workflow** in loaded skill
166
14
 
167
15
  ---
168
16
 
169
- #### project-kickstarter
170
-
171
- **Description**: Proactively detects product/project descriptions and guides users through SpecWeave increment planning. Activates when user provides product name, features, tech stack, timeline, or problem description. Keywords: project, product, SaaS, app, MVP, build, new project, features, tech stack, core functionality, monetization, timeline, I want to build, let's build, quick build, core features.
172
-
173
- **Location**: `.claude/skills/project-kickstarter/SKILL.md`
17
+ ## Skills by Category
174
18
 
175
- ---
176
-
177
- #### tdd-workflow
19
+ ### Planning & Workflow
178
20
 
179
- **Description**: Test-Driven Development workflow coordinator. Detects TDD intent and offers guided red-green-refactor cycle. Activates for TDD, test-driven, red-green-refactor, write tests first, test-first development, Kent Beck, TDD cycle.
21
+ | Skill | Triggers | Location |
22
+ |-------|----------|----------|
23
+ | **increment-planner** | increment, feature, plan, create increment, new feature, organize work, MVP, SaaS, product, build project, tech stack | `skills/increment-planner/SKILL.md` |
24
+ | **increment-work-router** | implement, complete, build, develop, work on, continue, resume, finish, fix, resolve, let's implement, start working | `skills/increment-work-router/SKILL.md` |
25
+ | **spec-generator** | specification, spec.md, plan.md, tasks.md, generate spec, create tasks, requirements, acceptance criteria | `skills/spec-generator/SKILL.md` |
26
+ | **project-kickstarter** | project, product, SaaS, app, MVP, build, new project, features, I want to build, let's build, quick build | `skills/project-kickstarter/SKILL.md` |
27
+ | **roadmap-planner** | roadmap, prioritization, RICE, MoSCoW, Kano, product planning, feature ranking, KPIs, Q1 Q2 Q3 Q4, release planning | `skills/roadmap-planner/SKILL.md` |
28
+ | **role-orchestrator** | multi-agent, orchestrate, coordinate roles, complex project, end-to-end, full implementation, build product | `skills/role-orchestrator/SKILL.md` |
180
29
 
181
- **Location**: `.claude/skills/tdd-workflow/SKILL.md`
30
+ ### Quality & Validation
182
31
 
183
- ---
32
+ | Skill | Triggers | Location |
33
+ |-------|----------|----------|
34
+ | **increment-quality-judge-v2** | quality check, assess spec, risk assessment, qa check, quality gate, /specweave:qa, validate quality, evaluate increment | `skills/increment-quality-judge-v2/SKILL.md` |
35
+ | **pm-closure-validation** | /done, close increment, validate increment, completion check, quality gate, PM approval, ready to close, scope creep | `skills/pm-closure-validation/SKILL.md` |
36
+ | **code-reviewer** | code review, security vulnerabilities, performance optimization, static analysis, code quality, pull request review | `skills/code-reviewer/SKILL.md` |
37
+ | **code-standards-analyzer** | coding standards, conventions, code style, naming conventions, linting rules, best practices, standards audit, anti-patterns | `skills/code-standards-analyzer/SKILL.md` |
38
+ | **tdd-workflow** | TDD, test-driven, red-green-refactor, write tests first, test-first, Kent Beck, TDD cycle | `skills/tdd-workflow/SKILL.md` |
184
39
 
40
+ ### Synchronization
185
41
 
186
- ## 💡 How Skills Work
42
+ | Skill | Triggers | Location |
43
+ |-------|----------|----------|
44
+ | **external-sync-wizard** | GitHub sync, Jira integration, Azure DevOps, ADO, issue tracking sync, bidirectional sync, import issues, export increments | `skills/external-sync-wizard/SKILL.md` |
45
+ | **progress-sync** | sync progress, update progress, sync everything, sync all systems, sync to GitHub, sync to JIRA, /specweave:sync-progress | `skills/progress-sync/SKILL.md` |
46
+ | **multi-project-spec-mapper** | multi-project, project mapping, spec splitting, JIRA projects, multiple projects, microservices, FE/BE/MOBILE split | `skills/multi-project-spec-mapper/SKILL.md` |
187
47
 
188
- **Level 1 - Discovery (this file)**:
189
- - Scan activation keywords
190
- - Match to your current task
191
- - Identify 1-3 relevant skills
48
+ ### Framework & Context
192
49
 
193
- **Level 2 - Deep Dive (SKILL.md)**:
194
- - Load full skill documentation
195
- - Read required prerequisites
196
- - Follow step-by-step workflow
50
+ | Skill | Triggers | Location |
51
+ |-------|----------|----------|
52
+ | **specweave-detector** | slash commands, /specweave:increment, /specweave:do, /specweave:progress, /specweave:done, specweave commands, workflow help | `skills/specweave-detector/SKILL.md` |
53
+ | **specweave-framework** | specweave rules, how does specweave work, framework structure, increment lifecycle, source of truth, tasks.md format | `skills/specweave-framework/SKILL.md` |
54
+ | **context-loader** | context loading, progressive disclosure, token efficiency, sub-agents, context management, how SpecWeave scales | `skills/context-loader/SKILL.md` |
55
+ | **context-optimizer** | optimize context, reduce tokens, clean context, smart context, precision loading, 80% reduction | `skills/context-optimizer/SKILL.md` |
56
+ | **plugin-validator** | plugin validation, validate plugins, check plugins, specweave init, fresh setup, marketplace registration | `skills/plugin-validator/SKILL.md` |
197
57
 
198
- **Level 3 - Execution**:
199
- - Apply skill's instructions
200
- - Use recommended tools
201
- - Follow SpecWeave best practices
58
+ ### Maintenance & Migration
202
59
 
203
- ---
60
+ | Skill | Triggers | Location |
61
+ |-------|----------|----------|
62
+ | **archive-increments** | archive, clean workspace, too many increments, archive old, archive completed, _archive folder, preserve history | `skills/archive-increments/SKILL.md` |
63
+ | **smart-reopen-detector** | not working, broken, bug, issue, problem, failing, error, crash, regression, still broken, incorrect, missing | `skills/smart-reopen-detector/SKILL.md` |
64
+ | **brownfield-analyzer** | brownfield, existing project, migrate, analyze structure, legacy documentation, PRD/HLD mapping | `skills/brownfield-analyzer/SKILL.md` |
65
+ | **brownfield-onboarder** | merge docs, merge claude, onboard brownfield, import existing docs, claude backup, CLAUDE.md merge | `skills/brownfield-onboarder/SKILL.md` |
66
+ | **translator** | translate, translation, language, multilingual, i18n, internationalization, Russian, Spanish, Chinese, localization | `skills/translator/SKILL.md` |
204
67
 
205
- ## 🎯 Task → Skill Matching Guide
68
+ ### Infrastructure & Compliance
206
69
 
207
- | Your Task | Relevant Skill | Keywords |
208
- |-----------|---------------|----------|
209
- | "Plan a new feature" | `increment-planner` | "feature planning", "create increment" |
210
- | "Implement feature" | `increment-work-router` | "implement", "complete", "build", "work on" |
211
- | "Sync to JIRA" | `jira-sync` | "JIRA sync", "create JIRA issue" |
212
- | "Create diagram" | `diagrams-architect` | "architecture diagram", "C4 diagram" |
213
- | "Build React UI" | `frontend` | "React", "components", "UI" |
214
- | "Deploy to cloud" | `hetzner-provisioner` | "deploy", "infrastructure" |
215
- | "Quality check" | `increment-quality-judge-v2` | "quality check", "assess spec", "risk assessment" |
216
- | "E2E testing" | `e2e-playwright` | "E2E test", "browser test" |
217
- | "Generate docs site" | `docusaurus` | "documentation site", "docs" |
70
+ | Skill | Triggers | Location |
71
+ |-------|----------|----------|
72
+ | **serverless-recommender** | serverless, AWS Lambda, Azure Functions, GCP Cloud Functions, Firebase, Supabase, which platform, serverless cost | `skills/serverless-recommender/SKILL.md` |
73
+ | **compliance-architecture** | compliance, HIPAA, SOC2, SOC 2, GDPR, PCI-DSS, regulatory, healthcare data, payment card, audit, security standards | `skills/compliance-architecture/SKILL.md` |
218
74
 
219
75
  ---
220
76
 
221
- ## Why Skills Matter
222
-
223
- **Without skills**:
224
- - ❌ Reinvent workflows every session
225
- - ❌ Inconsistent increment structure
226
- - ❌ Miss SpecWeave conventions
227
- - ❌ Waste tokens on irrelevant docs
77
+ ## Quick Lookup Table
228
78
 
229
- **With skills**:
230
- - ✅ Proven workflows ready to use
231
- - Consistent high-quality output
232
- - SpecWeave best practices enforced
233
- - Efficient token usage (load only what's needed)
79
+ | User Intent | Best Skill |
80
+ |-------------|-----------|
81
+ | "Plan a new feature" | `increment-planner` |
82
+ | "Implement X" / "Build Y" | `increment-work-router` |
83
+ | "Quality check" / "Review spec" | `increment-quality-judge-v2` |
84
+ | "Close increment" / "/done" | `pm-closure-validation` |
85
+ | "Sync to GitHub/JIRA" | `external-sync-wizard` |
86
+ | "Archive old increments" | `archive-increments` |
87
+ | "Bug/issue/broken" | `smart-reopen-detector` |
88
+ | "AWS vs Azure vs GCP" | `serverless-recommender` |
89
+ | "SOC2/HIPAA compliance" | `compliance-architecture` |
90
+ | "Review my code" | `code-reviewer` |
234
91
 
235
92
  ---
236
93
 
237
- ## 🔧 For AI Tool Developers
238
-
239
- This index simulates Claude Code's native progressive disclosure:
240
- - Claude pre-loads skill metadata at startup (name + description)
241
- - Other tools read this index file for same benefit
242
- - Single file read replaces 12 individual file scans
243
- - Token savings: ~97% (1 file vs 12 files)
244
-
245
- **How to use in your AI tool**:
246
- 1. Load this file at session start
247
- 2. Parse activation keywords
248
- 3. Match user requests to keywords
249
- 4. Load full SKILL.md when matched
250
- 5. Execute skill workflow
251
-
252
- ---
94
+ ## Token Efficiency
253
95
 
254
- **Generated by**: `src/utils/generate-skills-index.ts`
96
+ - **This index**: ~200 lines (~4KB)
97
+ - **All skills loaded**: ~2,500 lines (~50KB)
98
+ - **Savings**: ~92% by loading skills on-demand
255
99
 
256
- **Regenerate with**: `npm run generate-skills-index`
100
+ **Pattern**: Load this index → Match triggers → Load only matched SKILL.md
@@ -100,7 +100,7 @@ const allProjects = result.projects;
100
100
  import { AreaPathMapper } from '../../../src/integrations/ado/area-path-mapper.js';
101
101
 
102
102
  const { selectedProject } = await inquirer.prompt([{
103
- type: 'list',
103
+ type: 'select',
104
104
  name: 'selectedProject',
105
105
  message: 'Select ADO project to import area paths from:',
106
106
  choices: allProjects.map(p => ({ name: p.name, value: p.name }))
@@ -33,7 +33,7 @@ async function selectAdoProjects(client, options = {}) {
33
33
  `);
34
34
  const { selectionMethod } = await inquirer.prompt([
35
35
  {
36
- type: "list",
36
+ type: "select",
37
37
  name: "selectionMethod",
38
38
  message: "How would you like to select projects?",
39
39
  choices: [
@@ -103,7 +103,7 @@ export async function selectAdoProjects(
103
103
  // Decide selection method
104
104
  const { selectionMethod } = await inquirer.prompt([
105
105
  {
106
- type: 'list',
106
+ type: 'select',
107
107
  name: 'selectionMethod',
108
108
  message: 'How would you like to select projects?',
109
109
  choices: [
@@ -428,7 +428,7 @@ export async function validateAzureDevOpsResources(
428
428
  ```typescript
429
429
  const { action } = await inquirer.prompt([
430
430
  {
431
- type: 'list',
431
+ type: 'select',
432
432
  name: 'action',
433
433
  message: `Project "${projectName}" not found. What would you like to do?`,
434
434
  choices: [
@@ -99,8 +99,11 @@ class CompletionCalculator {
99
99
  * Process:
100
100
  * 1. Find increment link in user story's "Implementation" section
101
101
  * 2. Read increment's tasks.md
102
- * 3. Filter tasks that reference this user story's ACs
102
+ * 3. Filter tasks that reference this user story (via **User Story** field OR AC-IDs)
103
103
  * 4. Extract completion status from **Status**: [x] or [ ]
104
+ *
105
+ * IMPORTANT: Checks **User Story** field FIRST (handles multi-story tasks like "US-001, US-002"),
106
+ * then falls back to AC-based filtering. Also handles "Satisfies ACs: All" correctly.
104
107
  */
105
108
  async extractTasks(userStoryContent, userStoryId) {
106
109
  const tasks = [];
@@ -125,33 +128,48 @@ class CompletionCalculator {
125
128
  return tasks;
126
129
  }
127
130
  const tasksContent = await readFile(tasksPath, "utf-8");
131
+ const normalizeUsId = (id) => {
132
+ const num = id.replace(/^US-?0*/, "");
133
+ return `US-${num.padStart(3, "0")}`;
134
+ };
135
+ const normalizedCurrentUs = normalizeUsId(userStoryId);
128
136
  const taskPattern = /###?\s+(T-\d+):\s*([^\n]+)\n([\s\S]*?)(?=\n###?\s+T-\d+:|$)/g;
129
137
  let match;
130
138
  while ((match = taskPattern.exec(tasksContent)) !== null) {
131
139
  const taskId = match[1];
132
140
  const taskTitle = match[2].trim();
133
141
  const taskBody = match[3];
134
- const acMatch = taskBody.match(/\*\*(?:Satisfies ACs?|AC)\*\*:\s*([^\n]+)/);
135
- if (!acMatch) {
136
- continue;
142
+ const userStoryFieldMatch = taskBody.match(/\*\*User Story\*\*:\s*([^\n]+)/);
143
+ let belongsToThisUS = false;
144
+ if (userStoryFieldMatch) {
145
+ const userStoryList = userStoryFieldMatch[1].trim();
146
+ const userStoryIds = userStoryList.split(",").map((us) => us.trim());
147
+ belongsToThisUS = userStoryIds.some((usId) => {
148
+ return normalizeUsId(usId) === normalizedCurrentUs;
149
+ });
150
+ }
151
+ if (!belongsToThisUS) {
152
+ const acMatch2 = taskBody.match(/\*\*(?:Satisfies ACs?|AC)\*\*:\s*([^\n]+)/);
153
+ if (acMatch2) {
154
+ const acList = acMatch2[1].trim();
155
+ if (acList.toLowerCase() !== "all") {
156
+ const acIds2 = acList.split(",").map((ac) => ac.trim());
157
+ belongsToThisUS = acIds2.some((acId) => {
158
+ const usMatch = acId.match(/AC-([A-Z]+\d+)-/);
159
+ if (!usMatch) return false;
160
+ const extractedUsId = usMatch[1];
161
+ return normalizeUsId(extractedUsId) === normalizedCurrentUs;
162
+ });
163
+ }
164
+ }
137
165
  }
138
- const acList = acMatch[1].trim();
139
- const acIds = acList.split(",").map((ac) => ac.trim());
140
- const belongsToThisUS = acIds.some((acId) => {
141
- const usMatch = acId.match(/AC-([A-Z]+\d+)-/);
142
- if (!usMatch) return false;
143
- const extractedUsId = usMatch[1];
144
- const extractedNum = extractedUsId.replace(/^US/, "");
145
- const normalizedExtracted = `US-${extractedNum.padStart(3, "0")}`;
146
- const currentNum = userStoryId.replace(/^US-?/, "");
147
- const normalizedCurrent = `US-${currentNum.padStart(3, "0")}`;
148
- return normalizedExtracted === normalizedCurrent;
149
- });
150
166
  if (!belongsToThisUS) {
151
167
  continue;
152
168
  }
153
169
  const statusMatch = taskBody.match(/\*\*Status\*\*:\s*\[([x ])\]/);
154
170
  const completed = statusMatch ? statusMatch[1] === "x" : false;
171
+ const acMatch = taskBody.match(/\*\*(?:Satisfies ACs?|AC)\*\*:\s*([^\n]+)/);
172
+ const acIds = acMatch ? acMatch[1].trim().split(",").map((ac) => ac.trim()) : [];
155
173
  tasks.push({
156
174
  id: taskId,
157
175
  title: taskTitle,