specweave 0.23.7 → 0.23.10

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 (46) hide show
  1. package/CLAUDE.md +118 -0
  2. package/dist/src/cli/commands/init.d.ts.map +1 -1
  3. package/dist/src/cli/commands/init.js +57 -2
  4. package/dist/src/cli/commands/init.js.map +1 -1
  5. package/dist/src/cli/commands/migrate-config.d.ts +22 -0
  6. package/dist/src/cli/commands/migrate-config.d.ts.map +1 -0
  7. package/dist/src/cli/commands/migrate-config.js +149 -0
  8. package/dist/src/cli/commands/migrate-config.js.map +1 -0
  9. package/dist/src/cli/helpers/issue-tracker/index.d.ts.map +1 -1
  10. package/dist/src/cli/helpers/issue-tracker/index.js +158 -80
  11. package/dist/src/cli/helpers/issue-tracker/index.js.map +1 -1
  12. package/dist/src/cli/helpers/issue-tracker/jira.d.ts +24 -1
  13. package/dist/src/cli/helpers/issue-tracker/jira.d.ts.map +1 -1
  14. package/dist/src/cli/helpers/issue-tracker/jira.js +111 -131
  15. package/dist/src/cli/helpers/issue-tracker/jira.js.map +1 -1
  16. package/dist/src/cli/helpers/issue-tracker/types.d.ts +5 -0
  17. package/dist/src/cli/helpers/issue-tracker/types.d.ts.map +1 -1
  18. package/dist/src/cli/helpers/issue-tracker/types.js.map +1 -1
  19. package/dist/src/core/config/config-manager.d.ts +135 -0
  20. package/dist/src/core/config/config-manager.d.ts.map +1 -0
  21. package/dist/src/core/config/config-manager.js +341 -0
  22. package/dist/src/core/config/config-manager.js.map +1 -0
  23. package/dist/src/core/config/config-migrator.d.ts +102 -0
  24. package/dist/src/core/config/config-migrator.d.ts.map +1 -0
  25. package/dist/src/core/config/config-migrator.js +367 -0
  26. package/dist/src/core/config/config-migrator.js.map +1 -0
  27. package/dist/src/core/config/index.d.ts +10 -0
  28. package/dist/src/core/config/index.d.ts.map +1 -0
  29. package/dist/src/core/config/index.js +10 -0
  30. package/dist/src/core/config/index.js.map +1 -0
  31. package/dist/src/core/config/types.d.ts +216 -0
  32. package/dist/src/core/config/types.d.ts.map +1 -0
  33. package/dist/src/core/config/types.js +32 -0
  34. package/dist/src/core/config/types.js.map +1 -0
  35. package/dist/src/integrations/jira/jira-hierarchy-mapper.d.ts +104 -0
  36. package/dist/src/integrations/jira/jira-hierarchy-mapper.d.ts.map +1 -0
  37. package/dist/src/integrations/jira/jira-hierarchy-mapper.js +178 -0
  38. package/dist/src/integrations/jira/jira-hierarchy-mapper.js.map +1 -0
  39. package/package.json +1 -1
  40. package/plugins/specweave/commands/migrate-config.md +104 -0
  41. package/plugins/specweave/hooks/post-task-completion.sh +1 -1
  42. package/plugins/specweave/hooks/pre-task-completion.sh +1 -1
  43. package/plugins/specweave-ado/hooks/post-task-completion.sh +1 -1
  44. package/plugins/specweave-github/hooks/post-task-completion.sh +1 -1
  45. package/plugins/specweave-jira/hooks/post-task-completion.sh +1 -1
  46. package/plugins/specweave-release/hooks/.specweave/logs/dora-tracking.log +132 -0
@@ -0,0 +1,104 @@
1
+ /**
2
+ * Jira Hierarchy Mapper
3
+ *
4
+ * Maps SpecWeave universal hierarchy to Jira issue types
5
+ *
6
+ * Supports:
7
+ * - Jira Agile: Initiative → Epic → Story → Sub-task
8
+ * - Jira CMMI: Epic → Feature → Requirement → Task
9
+ * - Jira SAFe: Strategic Theme → Capability → User Story → Task
10
+ *
11
+ * @module integrations/jira/jira-hierarchy-mapper
12
+ */
13
+ import { JiraClient } from './jira-client.js';
14
+ /**
15
+ * Jira hierarchy mapping for different project types
16
+ */
17
+ export interface JiraHierarchyMapping {
18
+ epic: string;
19
+ feature: string;
20
+ userStory: string;
21
+ task: string;
22
+ }
23
+ /**
24
+ * SpecWeave Epic metadata
25
+ */
26
+ export interface SpecWeaveEpic {
27
+ id: string;
28
+ title: string;
29
+ description: string;
30
+ status: string;
31
+ priority: string;
32
+ }
33
+ /**
34
+ * SpecWeave Feature metadata
35
+ */
36
+ export interface SpecWeaveFeature {
37
+ id: string;
38
+ title: string;
39
+ description: string;
40
+ status: string;
41
+ priority: string;
42
+ epic?: string;
43
+ }
44
+ /**
45
+ * SpecWeave User Story metadata
46
+ */
47
+ export interface SpecWeaveUserStory {
48
+ id: string;
49
+ title: string;
50
+ description: string;
51
+ acceptanceCriteria: string[];
52
+ status: string;
53
+ priority: string;
54
+ feature?: string;
55
+ }
56
+ /**
57
+ * Maps SpecWeave universal hierarchy to Jira issue types
58
+ */
59
+ export declare class JiraHierarchyMapper {
60
+ private jiraClient;
61
+ constructor(jiraClient: JiraClient);
62
+ /**
63
+ * Detect Jira project type based on available issue types
64
+ *
65
+ * @param projectKey - Jira project key
66
+ * @returns Detected hierarchy mapping
67
+ */
68
+ detectProjectType(projectKey: string): Promise<JiraHierarchyMapping>;
69
+ /**
70
+ * Map SpecWeave work item to Jira issue type
71
+ *
72
+ * @param level - SpecWeave hierarchy level
73
+ * @param mapping - Jira hierarchy mapping
74
+ * @returns Jira issue type name
75
+ */
76
+ mapToJiraIssueType(level: 'epic' | 'feature' | 'userStory' | 'task', mapping: JiraHierarchyMapping): string;
77
+ /**
78
+ * Create SpecWeave Epic in Jira
79
+ *
80
+ * @param epic - SpecWeave epic metadata
81
+ * @param projectKey - Jira project key
82
+ * @returns Created Jira issue key
83
+ */
84
+ syncEpicToJira(epic: SpecWeaveEpic, projectKey: string): Promise<string>;
85
+ /**
86
+ * Create SpecWeave Feature in Jira
87
+ *
88
+ * @param feature - SpecWeave feature metadata
89
+ * @param projectKey - Jira project key
90
+ * @param epicKey - Parent epic key (optional)
91
+ * @returns Created Jira issue key
92
+ */
93
+ syncFeatureToJira(feature: SpecWeaveFeature, projectKey: string, epicKey?: string): Promise<string>;
94
+ /**
95
+ * Create SpecWeave User Story in Jira
96
+ *
97
+ * @param userStory - SpecWeave user story metadata
98
+ * @param projectKey - Jira project key
99
+ * @param featureKey - Parent feature key (optional)
100
+ * @returns Created Jira issue key
101
+ */
102
+ syncUserStoryToJira(userStory: SpecWeaveUserStory, projectKey: string, featureKey?: string): Promise<string>;
103
+ }
104
+ //# sourceMappingURL=jira-hierarchy-mapper.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"jira-hierarchy-mapper.d.ts","sourceRoot":"","sources":["../../../../src/integrations/jira/jira-hierarchy-mapper.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAGH,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAE9C;;GAEG;AACH,MAAM,WAAW,oBAAoB;IACnC,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,MAAM,CAAC;CACd;AAED;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,kBAAkB,EAAE,MAAM,EAAE,CAAC;IAC7B,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED;;GAEG;AACH,qBAAa,mBAAmB;IAC9B,OAAO,CAAC,UAAU,CAAa;gBAEnB,UAAU,EAAE,UAAU;IAIlC;;;;;OAKG;IACG,iBAAiB,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,oBAAoB,CAAC;IAiE1E;;;;;;OAMG;IACH,kBAAkB,CAChB,KAAK,EAAE,MAAM,GAAG,SAAS,GAAG,WAAW,GAAG,MAAM,EAChD,OAAO,EAAE,oBAAoB,GAC5B,MAAM;IAIT;;;;;;OAMG;IACG,cAAc,CAAC,IAAI,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAmB9E;;;;;;;OAOG;IACG,iBAAiB,CACrB,OAAO,EAAE,gBAAgB,EACzB,UAAU,EAAE,MAAM,EAClB,OAAO,CAAC,EAAE,MAAM,GACf,OAAO,CAAC,MAAM,CAAC;IAoBlB;;;;;;;OAOG;IACG,mBAAmB,CACvB,SAAS,EAAE,kBAAkB,EAC7B,UAAU,EAAE,MAAM,EAClB,UAAU,CAAC,EAAE,MAAM,GAClB,OAAO,CAAC,MAAM,CAAC;CA4BnB"}
@@ -0,0 +1,178 @@
1
+ /**
2
+ * Jira Hierarchy Mapper
3
+ *
4
+ * Maps SpecWeave universal hierarchy to Jira issue types
5
+ *
6
+ * Supports:
7
+ * - Jira Agile: Initiative → Epic → Story → Sub-task
8
+ * - Jira CMMI: Epic → Feature → Requirement → Task
9
+ * - Jira SAFe: Strategic Theme → Capability → User Story → Task
10
+ *
11
+ * @module integrations/jira/jira-hierarchy-mapper
12
+ */
13
+ import chalk from 'chalk';
14
+ /**
15
+ * Maps SpecWeave universal hierarchy to Jira issue types
16
+ */
17
+ export class JiraHierarchyMapper {
18
+ constructor(jiraClient) {
19
+ this.jiraClient = jiraClient;
20
+ }
21
+ /**
22
+ * Detect Jira project type based on available issue types
23
+ *
24
+ * @param projectKey - Jira project key
25
+ * @returns Detected hierarchy mapping
26
+ */
27
+ async detectProjectType(projectKey) {
28
+ try {
29
+ // Fetch issue types for project
30
+ // Note: This requires implementing getIssueTypes in JiraClient
31
+ // For now, we'll use a default Agile mapping
32
+ // TODO: Implement getIssueTypes in JiraClient
33
+ // Default: Agile (has "Story" and "Sub-task")
34
+ console.log(chalk.cyan(`📊 Using Jira Agile hierarchy for project: ${projectKey}`));
35
+ return {
36
+ epic: 'Initiative',
37
+ feature: 'Epic',
38
+ userStory: 'Story',
39
+ task: 'Sub-task'
40
+ };
41
+ /* Future implementation:
42
+ const issueTypes = await this.jiraClient.getIssueTypes(projectKey);
43
+ const typeNames = issueTypes.map(t => t.name.toLowerCase());
44
+
45
+ // Detect SAFe (has "Capability" or "Strategic Theme")
46
+ if (typeNames.includes('capability') || typeNames.includes('strategic theme')) {
47
+ console.log(chalk.cyan(`📊 Detected Jira SAFe project: ${projectKey}`));
48
+ return {
49
+ epic: 'Strategic Theme',
50
+ feature: 'Capability',
51
+ userStory: 'User Story',
52
+ task: 'Task'
53
+ };
54
+ }
55
+
56
+ // Detect CMMI (has "Requirement")
57
+ if (typeNames.includes('requirement')) {
58
+ console.log(chalk.cyan(`📊 Detected Jira CMMI project: ${projectKey}`));
59
+ return {
60
+ epic: 'Epic',
61
+ feature: 'Feature',
62
+ userStory: 'Requirement',
63
+ task: 'Task'
64
+ };
65
+ }
66
+
67
+ // Default: Agile
68
+ console.log(chalk.cyan(`📊 Detected Jira Agile project: ${projectKey}`));
69
+ return {
70
+ epic: 'Initiative',
71
+ feature: 'Epic',
72
+ userStory: 'Story',
73
+ task: 'Sub-task'
74
+ };
75
+ */
76
+ }
77
+ catch (error) {
78
+ console.error(chalk.red(`⚠️ Failed to detect Jira project type: ${error.message}`));
79
+ console.log(chalk.gray(' Using default Agile hierarchy\n'));
80
+ // Fallback to Agile
81
+ return {
82
+ epic: 'Initiative',
83
+ feature: 'Epic',
84
+ userStory: 'Story',
85
+ task: 'Sub-task'
86
+ };
87
+ }
88
+ }
89
+ /**
90
+ * Map SpecWeave work item to Jira issue type
91
+ *
92
+ * @param level - SpecWeave hierarchy level
93
+ * @param mapping - Jira hierarchy mapping
94
+ * @returns Jira issue type name
95
+ */
96
+ mapToJiraIssueType(level, mapping) {
97
+ return mapping[level];
98
+ }
99
+ /**
100
+ * Create SpecWeave Epic in Jira
101
+ *
102
+ * @param epic - SpecWeave epic metadata
103
+ * @param projectKey - Jira project key
104
+ * @returns Created Jira issue key
105
+ */
106
+ async syncEpicToJira(epic, projectKey) {
107
+ const mapping = await this.detectProjectType(projectKey);
108
+ const jiraIssueType = this.mapToJiraIssueType('epic', mapping);
109
+ console.log(chalk.cyan(`📝 Creating ${jiraIssueType} in Jira: ${epic.title}`));
110
+ // Create Initiative/Theme/Epic in Jira
111
+ const issue = await this.jiraClient.createIssue({
112
+ issueType: jiraIssueType,
113
+ summary: epic.title,
114
+ description: epic.description,
115
+ priority: epic.priority,
116
+ labels: [`specweave-epic-${epic.id}`]
117
+ }, projectKey);
118
+ console.log(chalk.green(`✅ Created ${jiraIssueType}: ${issue.key}\n`));
119
+ return issue.key;
120
+ }
121
+ /**
122
+ * Create SpecWeave Feature in Jira
123
+ *
124
+ * @param feature - SpecWeave feature metadata
125
+ * @param projectKey - Jira project key
126
+ * @param epicKey - Parent epic key (optional)
127
+ * @returns Created Jira issue key
128
+ */
129
+ async syncFeatureToJira(feature, projectKey, epicKey) {
130
+ const mapping = await this.detectProjectType(projectKey);
131
+ const jiraIssueType = this.mapToJiraIssueType('feature', mapping);
132
+ console.log(chalk.cyan(`📝 Creating ${jiraIssueType} in Jira: ${feature.title}`));
133
+ // Create Epic/Capability/Feature in Jira
134
+ const issue = await this.jiraClient.createIssue({
135
+ issueType: jiraIssueType,
136
+ summary: feature.title,
137
+ description: feature.description,
138
+ priority: feature.priority,
139
+ labels: [`specweave-feature-${feature.id}`],
140
+ epicKey // Link to parent epic (if exists)
141
+ }, projectKey);
142
+ console.log(chalk.green(`✅ Created ${jiraIssueType}: ${issue.key}\n`));
143
+ return issue.key;
144
+ }
145
+ /**
146
+ * Create SpecWeave User Story in Jira
147
+ *
148
+ * @param userStory - SpecWeave user story metadata
149
+ * @param projectKey - Jira project key
150
+ * @param featureKey - Parent feature key (optional)
151
+ * @returns Created Jira issue key
152
+ */
153
+ async syncUserStoryToJira(userStory, projectKey, featureKey) {
154
+ const mapping = await this.detectProjectType(projectKey);
155
+ const jiraIssueType = this.mapToJiraIssueType('userStory', mapping);
156
+ console.log(chalk.cyan(`📝 Creating ${jiraIssueType} in Jira: ${userStory.title}`));
157
+ // Build description with acceptance criteria
158
+ let description = userStory.description;
159
+ if (userStory.acceptanceCriteria && userStory.acceptanceCriteria.length > 0) {
160
+ description += '\n\n**Acceptance Criteria:**\n';
161
+ userStory.acceptanceCriteria.forEach((ac, index) => {
162
+ description += `\n${index + 1}. ${ac}`;
163
+ });
164
+ }
165
+ // Create Story/User Story/Requirement in Jira
166
+ const issue = await this.jiraClient.createIssue({
167
+ issueType: jiraIssueType,
168
+ summary: userStory.title,
169
+ description,
170
+ priority: userStory.priority,
171
+ labels: [`specweave-us-${userStory.id}`],
172
+ epicKey: featureKey // Link to parent feature
173
+ }, projectKey);
174
+ console.log(chalk.green(`✅ Created ${jiraIssueType}: ${issue.key}\n`));
175
+ return issue.key;
176
+ }
177
+ }
178
+ //# sourceMappingURL=jira-hierarchy-mapper.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"jira-hierarchy-mapper.js","sourceRoot":"","sources":["../../../../src/integrations/jira/jira-hierarchy-mapper.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "specweave",
3
- "version": "0.23.7",
3
+ "version": "0.23.10",
4
4
  "description": "Spec-driven development framework for Claude Code. AI-native workflow with living documentation, intelligent agents, and multilingual support (9 languages). Enterprise-grade traceability with permanent specs and temporary increments.",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
@@ -0,0 +1,104 @@
1
+ ---
2
+ name: specweave:migrate-config
3
+ description: Migrate .env-only configuration to split secrets/config format (v0.24.0+)
4
+ ---
5
+
6
+ Migrate your project from the old .env-only format to the new split format where secrets stay in `.env` (gitignored) and configuration moves to `.specweave/config.json` (committed to git).
7
+
8
+ **What this command does:**
9
+
10
+ 1. ✅ Analyzes your `.env` file
11
+ 2. ✅ Classifies variables as "secrets" or "config"
12
+ 3. ✅ Backs up original `.env` file
13
+ 4. ✅ Updates `.env` (keeps only secrets)
14
+ 5. ✅ Creates/updates `.specweave/config.json` (adds config)
15
+ 6. ✅ Generates `.env.example` for team onboarding
16
+
17
+ **When to use:**
18
+
19
+ - You're upgrading from SpecWeave v0.23.x or earlier
20
+ - Your `.env` contains both secrets AND configuration (domain, strategy, etc.)
21
+ - You want to share configuration with your team via git
22
+
23
+ **Command:**
24
+
25
+ ```bash
26
+ node -e "require('./dist/src/cli/commands/migrate-config.js').migrateConfig()"
27
+ ```
28
+
29
+ **Options:**
30
+
31
+ - `--dry-run`: Preview migration without making changes
32
+ - `--yes`: Skip confirmation prompt
33
+ - `--force`: Force migration even if not needed
34
+
35
+ **Example output:**
36
+
37
+ ```
38
+ 🔄 SpecWeave Configuration Migration
39
+
40
+ 📋 Migration Preview
41
+
42
+ Classification Results:
43
+ Secrets: 3 variables
44
+ Config: 5 variables
45
+
46
+ 📊 Detailed Breakdown:
47
+
48
+ Secrets (will stay in .env):
49
+ JIRA_API_TOKEN=xyzabc***456
50
+ └─ Contains keyword: token
51
+
52
+ JIRA_EMAIL=user@example.com
53
+ └─ Email address (used for authentication)
54
+
55
+ Configuration (will move to config.json):
56
+ JIRA_DOMAIN=company.atlassian.net
57
+ └─ Non-sensitive configuration data
58
+
59
+ JIRA_STRATEGY=project-per-team
60
+ └─ Non-sensitive configuration data
61
+
62
+ ✅ Migration Successful!
63
+
64
+ Summary:
65
+ ✓ 3 secrets kept in .env
66
+ ✓ 5 config items moved to config.json
67
+ ✓ Backup created: .env.backup.1234567890
68
+ ✓ .env.example generated
69
+
70
+ 📝 Next Steps:
71
+
72
+ 1. Review .specweave/config.json (commit to git)
73
+ 2. Share .env.example with team (commit to git)
74
+ 3. Team members: cp .env.example .env (fill in tokens)
75
+ ```
76
+
77
+ **Benefits:**
78
+
79
+ - ✅ Team shares configuration via git
80
+ - ✅ Secrets stay local (never committed)
81
+ - ✅ Type-safe configuration with validation
82
+ - ✅ Easy onboarding for new team members
83
+
84
+ **Classification logic:**
85
+
86
+ Variables classified as **secrets** (stay in .env):
87
+ - Contains keywords: `token`, `api_token`, `pat`, `secret`, `key`, `password`, `credential`, `auth`
88
+ - Email addresses (used for authentication)
89
+
90
+ Variables classified as **config** (move to config.json):
91
+ - Everything else: domains, strategies, project keys, organizations, etc.
92
+
93
+ **Safety:**
94
+
95
+ - 🔒 Always creates backup before modifying `.env`
96
+ - 🔒 Atomic operation (either completes fully or rolls back)
97
+ - 🔒 Idempotent (can run multiple times safely)
98
+ - 🔒 Dry-run mode available for preview
99
+
100
+ **See also:**
101
+
102
+ - ADR-0050: Secrets vs Configuration Separation
103
+ - `/specweave:validate` - Validate configuration after migration
104
+ - Documentation: `CLAUDE.md` → Configuration Management section
@@ -178,7 +178,7 @@ fi
178
178
 
179
179
  if command -v node &> /dev/null; then
180
180
  # Detect current increment (latest non-backlog increment)
181
- CURRENT_INCREMENT=$(ls -t .specweave/increments/ 2>/dev/null | grep -v "_backlog" | head -1)
181
+ CURRENT_INCREMENT=$(ls -t .specweave/increments/ 2>/dev/null | grep -v "_backlog" | grep -v "_archive" | grep -v "_working" | head -1)
182
182
 
183
183
  if [ -n "$CURRENT_INCREMENT" ] && [ -f ".specweave/increments/$CURRENT_INCREMENT/tasks.md" ]; then
184
184
  echo "[$(date)] 📝 Updating tasks.md for $CURRENT_INCREMENT" >> "$DEBUG_LOG" 2>/dev/null || true
@@ -92,7 +92,7 @@ fi
92
92
  # DETECT CURRENT INCREMENT
93
93
  # ============================================================================
94
94
 
95
- CURRENT_INCREMENT=$(ls -t .specweave/increments/ 2>/dev/null | grep -v "_backlog" | grep -v "_archive" | head -1)
95
+ CURRENT_INCREMENT=$(ls -t .specweave/increments/ 2>/dev/null | grep -v "_backlog" | grep -v "_archive" | grep -v "_working" | head -1)
96
96
 
97
97
  if [ -z "$CURRENT_INCREMENT" ]; then
98
98
  echo "[$(date)] ⚠️ No active increment found, skipping validation" >> "$DEBUG_LOG" 2>/dev/null || true
@@ -56,7 +56,7 @@ mkdir -p "$LOGS_DIR" 2>/dev/null || true
56
56
  echo "[$(date)] [ADO] 🔗 Azure DevOps sync hook fired" >> "$DEBUG_LOG" 2>/dev/null || true
57
57
 
58
58
  # Detect current increment
59
- CURRENT_INCREMENT=$(ls -t .specweave/increments/ 2>/dev/null | grep -v "_backlog" | head -1)
59
+ CURRENT_INCREMENT=$(ls -t .specweave/increments/ 2>/dev/null | grep -v "_backlog" | grep -v "_archive" | grep -v "_working" | head -1)
60
60
 
61
61
  if [ -z "$CURRENT_INCREMENT" ]; then
62
62
  echo "[$(date)] [ADO] ℹ️ No active increment, skipping ADO sync" >> "$DEBUG_LOG" 2>/dev/null || true
@@ -102,7 +102,7 @@ fi
102
102
  # Strategy: Use multi-spec detector to find ALL specs referenced in current increment
103
103
 
104
104
  # 1. Detect current increment (temporary context)
105
- CURRENT_INCREMENT=$(ls -t .specweave/increments/ 2>/dev/null | grep -v "_backlog" | head -1)
105
+ CURRENT_INCREMENT=$(ls -t .specweave/increments/ 2>/dev/null | grep -v "_backlog" | grep -v "_archive" | grep -v "_working" | head -1)
106
106
 
107
107
  if [ -z "$CURRENT_INCREMENT" ]; then
108
108
  echo "[$(date)] [GitHub] ℹ️ No active increment, checking for spec changes..." >> "$DEBUG_LOG" 2>/dev/null || true
@@ -56,7 +56,7 @@ mkdir -p "$LOGS_DIR" 2>/dev/null || true
56
56
  echo "[$(date)] [JIRA] 🔗 JIRA sync hook fired" >> "$DEBUG_LOG" 2>/dev/null || true
57
57
 
58
58
  # Detect current increment
59
- CURRENT_INCREMENT=$(ls -t .specweave/increments/ 2>/dev/null | grep -v "_backlog" | head -1)
59
+ CURRENT_INCREMENT=$(ls -t .specweave/increments/ 2>/dev/null | grep -v "_backlog" | grep -v "_archive" | grep -v "_working" | head -1)
60
60
 
61
61
  if [ -z "$CURRENT_INCREMENT" ]; then
62
62
  echo "[$(date)] [JIRA] ℹ️ No active increment, skipping JIRA sync" >> "$DEBUG_LOG" 2>/dev/null || true
@@ -6331,3 +6331,135 @@
6331
6331
  [2025-11-20 19:32:53] 🎯 Post-Increment-Completion Hook Triggered
6332
6332
  [2025-11-20 19:32:53] ⚠️ DORA calculator not found at /Users/antonabyzov/Projects/github/specweave/plugins/specweave-release/hooks/dist/src/metrics/dora-calculator.js
6333
6333
  [2025-11-20 19:32:53] Run: npm run build
6334
+ [2025-11-21 01:14:49] 🎯 Post-Increment-Completion Hook Triggered
6335
+ [2025-11-21 01:14:49] ⚠️ DORA calculator not found at /Users/antonabyzov/Projects/github/specweave/plugins/specweave-release/hooks/dist/src/metrics/dora-calculator.js
6336
+ [2025-11-21 01:14:49] Run: npm run build
6337
+ [2025-11-21 01:14:54] 🎯 Post-Increment-Completion Hook Triggered
6338
+ [2025-11-21 01:14:54] ⚠️ DORA calculator not found at /Users/antonabyzov/Projects/github/specweave/plugins/specweave-release/hooks/dist/src/metrics/dora-calculator.js
6339
+ [2025-11-21 01:14:54] Run: npm run build
6340
+ [2025-11-21 01:15:00] 🎯 Post-Increment-Completion Hook Triggered
6341
+ [2025-11-21 01:15:00] ⚠️ DORA calculator not found at /Users/antonabyzov/Projects/github/specweave/plugins/specweave-release/hooks/dist/src/metrics/dora-calculator.js
6342
+ [2025-11-21 01:15:00] Run: npm run build
6343
+ [2025-11-21 01:15:05] 🎯 Post-Increment-Completion Hook Triggered
6344
+ [2025-11-21 01:15:05] ⚠️ DORA calculator not found at /Users/antonabyzov/Projects/github/specweave/plugins/specweave-release/hooks/dist/src/metrics/dora-calculator.js
6345
+ [2025-11-21 01:15:05] Run: npm run build
6346
+ [2025-11-21 01:15:29] 🎯 Post-Increment-Completion Hook Triggered
6347
+ [2025-11-21 01:15:29] ⚠️ DORA calculator not found at /Users/antonabyzov/Projects/github/specweave/plugins/specweave-release/hooks/dist/src/metrics/dora-calculator.js
6348
+ [2025-11-21 01:15:29] Run: npm run build
6349
+ [2025-11-21 01:15:35] 🎯 Post-Increment-Completion Hook Triggered
6350
+ [2025-11-21 01:15:35] ⚠️ DORA calculator not found at /Users/antonabyzov/Projects/github/specweave/plugins/specweave-release/hooks/dist/src/metrics/dora-calculator.js
6351
+ [2025-11-21 01:15:35] Run: npm run build
6352
+ [2025-11-21 01:15:40] 🎯 Post-Increment-Completion Hook Triggered
6353
+ [2025-11-21 01:15:40] ⚠️ DORA calculator not found at /Users/antonabyzov/Projects/github/specweave/plugins/specweave-release/hooks/dist/src/metrics/dora-calculator.js
6354
+ [2025-11-21 01:15:40] Run: npm run build
6355
+ [2025-11-21 01:15:45] 🎯 Post-Increment-Completion Hook Triggered
6356
+ [2025-11-21 01:15:45] ⚠️ DORA calculator not found at /Users/antonabyzov/Projects/github/specweave/plugins/specweave-release/hooks/dist/src/metrics/dora-calculator.js
6357
+ [2025-11-21 01:15:45] Run: npm run build
6358
+ [2025-11-21 01:16:09] 🎯 Post-Increment-Completion Hook Triggered
6359
+ [2025-11-21 01:16:09] ⚠️ DORA calculator not found at /Users/antonabyzov/Projects/github/specweave/plugins/specweave-release/hooks/dist/src/metrics/dora-calculator.js
6360
+ [2025-11-21 01:16:09] Run: npm run build
6361
+ [2025-11-21 01:16:14] 🎯 Post-Increment-Completion Hook Triggered
6362
+ [2025-11-21 01:16:14] ⚠️ DORA calculator not found at /Users/antonabyzov/Projects/github/specweave/plugins/specweave-release/hooks/dist/src/metrics/dora-calculator.js
6363
+ [2025-11-21 01:16:14] Run: npm run build
6364
+ [2025-11-21 01:16:19] 🎯 Post-Increment-Completion Hook Triggered
6365
+ [2025-11-21 01:16:19] ⚠️ DORA calculator not found at /Users/antonabyzov/Projects/github/specweave/plugins/specweave-release/hooks/dist/src/metrics/dora-calculator.js
6366
+ [2025-11-21 01:16:19] Run: npm run build
6367
+ [2025-11-21 01:16:24] 🎯 Post-Increment-Completion Hook Triggered
6368
+ [2025-11-21 01:16:24] ⚠️ DORA calculator not found at /Users/antonabyzov/Projects/github/specweave/plugins/specweave-release/hooks/dist/src/metrics/dora-calculator.js
6369
+ [2025-11-21 01:16:24] Run: npm run build
6370
+ [2025-11-21 01:16:39] 🎯 Post-Increment-Completion Hook Triggered
6371
+ [2025-11-21 01:16:39] ⚠️ DORA calculator not found at /Users/antonabyzov/Projects/github/specweave/plugins/specweave-release/hooks/dist/src/metrics/dora-calculator.js
6372
+ [2025-11-21 01:16:39] Run: npm run build
6373
+ [2025-11-21 01:16:44] 🎯 Post-Increment-Completion Hook Triggered
6374
+ [2025-11-21 01:16:44] ⚠️ DORA calculator not found at /Users/antonabyzov/Projects/github/specweave/plugins/specweave-release/hooks/dist/src/metrics/dora-calculator.js
6375
+ [2025-11-21 01:16:44] Run: npm run build
6376
+ [2025-11-21 01:16:49] 🎯 Post-Increment-Completion Hook Triggered
6377
+ [2025-11-21 01:16:49] ⚠️ DORA calculator not found at /Users/antonabyzov/Projects/github/specweave/plugins/specweave-release/hooks/dist/src/metrics/dora-calculator.js
6378
+ [2025-11-21 01:16:49] Run: npm run build
6379
+ [2025-11-21 01:16:54] 🎯 Post-Increment-Completion Hook Triggered
6380
+ [2025-11-21 01:16:54] ⚠️ DORA calculator not found at /Users/antonabyzov/Projects/github/specweave/plugins/specweave-release/hooks/dist/src/metrics/dora-calculator.js
6381
+ [2025-11-21 01:16:54] Run: npm run build
6382
+ [2025-11-21 01:25:42] 🎯 Post-Increment-Completion Hook Triggered
6383
+ [2025-11-21 01:25:42] ⚠️ DORA calculator not found at /Users/antonabyzov/Projects/github/specweave/plugins/specweave-release/hooks/dist/src/metrics/dora-calculator.js
6384
+ [2025-11-21 01:25:42] Run: npm run build
6385
+ [2025-11-21 01:25:47] 🎯 Post-Increment-Completion Hook Triggered
6386
+ [2025-11-21 01:25:47] ⚠️ DORA calculator not found at /Users/antonabyzov/Projects/github/specweave/plugins/specweave-release/hooks/dist/src/metrics/dora-calculator.js
6387
+ [2025-11-21 01:25:47] Run: npm run build
6388
+ [2025-11-21 01:25:53] 🎯 Post-Increment-Completion Hook Triggered
6389
+ [2025-11-21 01:25:53] ⚠️ DORA calculator not found at /Users/antonabyzov/Projects/github/specweave/plugins/specweave-release/hooks/dist/src/metrics/dora-calculator.js
6390
+ [2025-11-21 01:25:53] Run: npm run build
6391
+ [2025-11-21 01:25:58] 🎯 Post-Increment-Completion Hook Triggered
6392
+ [2025-11-21 01:25:58] ⚠️ DORA calculator not found at /Users/antonabyzov/Projects/github/specweave/plugins/specweave-release/hooks/dist/src/metrics/dora-calculator.js
6393
+ [2025-11-21 01:25:58] Run: npm run build
6394
+ [2025-11-21 01:29:50] 🎯 Post-Increment-Completion Hook Triggered
6395
+ [2025-11-21 01:29:50] ⚠️ DORA calculator not found at /Users/antonabyzov/Projects/github/specweave/plugins/specweave-release/hooks/dist/src/metrics/dora-calculator.js
6396
+ [2025-11-21 01:29:50] Run: npm run build
6397
+ [2025-11-21 01:29:55] 🎯 Post-Increment-Completion Hook Triggered
6398
+ [2025-11-21 01:29:55] ⚠️ DORA calculator not found at /Users/antonabyzov/Projects/github/specweave/plugins/specweave-release/hooks/dist/src/metrics/dora-calculator.js
6399
+ [2025-11-21 01:29:55] Run: npm run build
6400
+ [2025-11-21 01:30:00] 🎯 Post-Increment-Completion Hook Triggered
6401
+ [2025-11-21 01:30:00] ⚠️ DORA calculator not found at /Users/antonabyzov/Projects/github/specweave/plugins/specweave-release/hooks/dist/src/metrics/dora-calculator.js
6402
+ [2025-11-21 01:30:00] Run: npm run build
6403
+ [2025-11-21 01:30:05] 🎯 Post-Increment-Completion Hook Triggered
6404
+ [2025-11-21 01:30:05] ⚠️ DORA calculator not found at /Users/antonabyzov/Projects/github/specweave/plugins/specweave-release/hooks/dist/src/metrics/dora-calculator.js
6405
+ [2025-11-21 01:30:05] Run: npm run build
6406
+ [2025-11-21 01:31:11] 🎯 Post-Increment-Completion Hook Triggered
6407
+ [2025-11-21 01:31:11] ⚠️ DORA calculator not found at /Users/antonabyzov/Projects/github/specweave/plugins/specweave-release/hooks/dist/src/metrics/dora-calculator.js
6408
+ [2025-11-21 01:31:11] Run: npm run build
6409
+ [2025-11-21 01:31:16] 🎯 Post-Increment-Completion Hook Triggered
6410
+ [2025-11-21 01:31:16] ⚠️ DORA calculator not found at /Users/antonabyzov/Projects/github/specweave/plugins/specweave-release/hooks/dist/src/metrics/dora-calculator.js
6411
+ [2025-11-21 01:31:16] Run: npm run build
6412
+ [2025-11-21 01:31:21] 🎯 Post-Increment-Completion Hook Triggered
6413
+ [2025-11-21 01:31:21] ⚠️ DORA calculator not found at /Users/antonabyzov/Projects/github/specweave/plugins/specweave-release/hooks/dist/src/metrics/dora-calculator.js
6414
+ [2025-11-21 01:31:21] Run: npm run build
6415
+ [2025-11-21 01:31:26] 🎯 Post-Increment-Completion Hook Triggered
6416
+ [2025-11-21 01:31:26] ⚠️ DORA calculator not found at /Users/antonabyzov/Projects/github/specweave/plugins/specweave-release/hooks/dist/src/metrics/dora-calculator.js
6417
+ [2025-11-21 01:31:26] Run: npm run build
6418
+ [2025-11-21 01:31:43] 🎯 Post-Increment-Completion Hook Triggered
6419
+ [2025-11-21 01:31:43] ⚠️ DORA calculator not found at /Users/antonabyzov/Projects/github/specweave/plugins/specweave-release/hooks/dist/src/metrics/dora-calculator.js
6420
+ [2025-11-21 01:31:43] Run: npm run build
6421
+ [2025-11-21 01:31:48] 🎯 Post-Increment-Completion Hook Triggered
6422
+ [2025-11-21 01:31:48] ⚠️ DORA calculator not found at /Users/antonabyzov/Projects/github/specweave/plugins/specweave-release/hooks/dist/src/metrics/dora-calculator.js
6423
+ [2025-11-21 01:31:48] Run: npm run build
6424
+ [2025-11-21 01:31:53] 🎯 Post-Increment-Completion Hook Triggered
6425
+ [2025-11-21 01:31:53] ⚠️ DORA calculator not found at /Users/antonabyzov/Projects/github/specweave/plugins/specweave-release/hooks/dist/src/metrics/dora-calculator.js
6426
+ [2025-11-21 01:31:53] Run: npm run build
6427
+ [2025-11-21 01:31:59] 🎯 Post-Increment-Completion Hook Triggered
6428
+ [2025-11-21 01:31:59] ⚠️ DORA calculator not found at /Users/antonabyzov/Projects/github/specweave/plugins/specweave-release/hooks/dist/src/metrics/dora-calculator.js
6429
+ [2025-11-21 01:31:59] Run: npm run build
6430
+ [2025-11-21 01:32:37] 🎯 Post-Increment-Completion Hook Triggered
6431
+ [2025-11-21 01:32:37] ⚠️ DORA calculator not found at /Users/antonabyzov/Projects/github/specweave/plugins/specweave-release/hooks/dist/src/metrics/dora-calculator.js
6432
+ [2025-11-21 01:32:37] Run: npm run build
6433
+ [2025-11-21 01:32:42] 🎯 Post-Increment-Completion Hook Triggered
6434
+ [2025-11-21 01:32:42] ⚠️ DORA calculator not found at /Users/antonabyzov/Projects/github/specweave/plugins/specweave-release/hooks/dist/src/metrics/dora-calculator.js
6435
+ [2025-11-21 01:32:42] Run: npm run build
6436
+ [2025-11-21 01:32:47] 🎯 Post-Increment-Completion Hook Triggered
6437
+ [2025-11-21 01:32:47] ⚠️ DORA calculator not found at /Users/antonabyzov/Projects/github/specweave/plugins/specweave-release/hooks/dist/src/metrics/dora-calculator.js
6438
+ [2025-11-21 01:32:47] Run: npm run build
6439
+ [2025-11-21 01:32:52] 🎯 Post-Increment-Completion Hook Triggered
6440
+ [2025-11-21 01:32:52] ⚠️ DORA calculator not found at /Users/antonabyzov/Projects/github/specweave/plugins/specweave-release/hooks/dist/src/metrics/dora-calculator.js
6441
+ [2025-11-21 01:32:52] Run: npm run build
6442
+ [2025-11-21 01:33:36] 🎯 Post-Increment-Completion Hook Triggered
6443
+ [2025-11-21 01:33:36] ⚠️ DORA calculator not found at /Users/antonabyzov/Projects/github/specweave/plugins/specweave-release/hooks/dist/src/metrics/dora-calculator.js
6444
+ [2025-11-21 01:33:36] Run: npm run build
6445
+ [2025-11-21 01:33:41] 🎯 Post-Increment-Completion Hook Triggered
6446
+ [2025-11-21 01:33:41] ⚠️ DORA calculator not found at /Users/antonabyzov/Projects/github/specweave/plugins/specweave-release/hooks/dist/src/metrics/dora-calculator.js
6447
+ [2025-11-21 01:33:41] Run: npm run build
6448
+ [2025-11-21 01:33:46] 🎯 Post-Increment-Completion Hook Triggered
6449
+ [2025-11-21 01:33:46] ⚠️ DORA calculator not found at /Users/antonabyzov/Projects/github/specweave/plugins/specweave-release/hooks/dist/src/metrics/dora-calculator.js
6450
+ [2025-11-21 01:33:46] Run: npm run build
6451
+ [2025-11-21 01:33:51] 🎯 Post-Increment-Completion Hook Triggered
6452
+ [2025-11-21 01:33:51] ⚠️ DORA calculator not found at /Users/antonabyzov/Projects/github/specweave/plugins/specweave-release/hooks/dist/src/metrics/dora-calculator.js
6453
+ [2025-11-21 01:33:51] Run: npm run build
6454
+ [2025-11-21 01:35:06] 🎯 Post-Increment-Completion Hook Triggered
6455
+ [2025-11-21 01:35:06] ⚠️ DORA calculator not found at /Users/antonabyzov/Projects/github/specweave/plugins/specweave-release/hooks/dist/src/metrics/dora-calculator.js
6456
+ [2025-11-21 01:35:06] Run: npm run build
6457
+ [2025-11-21 01:35:11] 🎯 Post-Increment-Completion Hook Triggered
6458
+ [2025-11-21 01:35:11] ⚠️ DORA calculator not found at /Users/antonabyzov/Projects/github/specweave/plugins/specweave-release/hooks/dist/src/metrics/dora-calculator.js
6459
+ [2025-11-21 01:35:11] Run: npm run build
6460
+ [2025-11-21 01:35:16] 🎯 Post-Increment-Completion Hook Triggered
6461
+ [2025-11-21 01:35:16] ⚠️ DORA calculator not found at /Users/antonabyzov/Projects/github/specweave/plugins/specweave-release/hooks/dist/src/metrics/dora-calculator.js
6462
+ [2025-11-21 01:35:16] Run: npm run build
6463
+ [2025-11-21 01:35:21] 🎯 Post-Increment-Completion Hook Triggered
6464
+ [2025-11-21 01:35:21] ⚠️ DORA calculator not found at /Users/antonabyzov/Projects/github/specweave/plugins/specweave-release/hooks/dist/src/metrics/dora-calculator.js
6465
+ [2025-11-21 01:35:21] Run: npm run build