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.
- package/CLAUDE.md +118 -0
- package/dist/src/cli/commands/init.d.ts.map +1 -1
- package/dist/src/cli/commands/init.js +57 -2
- package/dist/src/cli/commands/init.js.map +1 -1
- package/dist/src/cli/commands/migrate-config.d.ts +22 -0
- package/dist/src/cli/commands/migrate-config.d.ts.map +1 -0
- package/dist/src/cli/commands/migrate-config.js +149 -0
- package/dist/src/cli/commands/migrate-config.js.map +1 -0
- package/dist/src/cli/helpers/issue-tracker/index.d.ts.map +1 -1
- package/dist/src/cli/helpers/issue-tracker/index.js +158 -80
- package/dist/src/cli/helpers/issue-tracker/index.js.map +1 -1
- package/dist/src/cli/helpers/issue-tracker/jira.d.ts +24 -1
- package/dist/src/cli/helpers/issue-tracker/jira.d.ts.map +1 -1
- package/dist/src/cli/helpers/issue-tracker/jira.js +111 -131
- package/dist/src/cli/helpers/issue-tracker/jira.js.map +1 -1
- package/dist/src/cli/helpers/issue-tracker/types.d.ts +5 -0
- package/dist/src/cli/helpers/issue-tracker/types.d.ts.map +1 -1
- package/dist/src/cli/helpers/issue-tracker/types.js.map +1 -1
- package/dist/src/core/config/config-manager.d.ts +135 -0
- package/dist/src/core/config/config-manager.d.ts.map +1 -0
- package/dist/src/core/config/config-manager.js +341 -0
- package/dist/src/core/config/config-manager.js.map +1 -0
- package/dist/src/core/config/config-migrator.d.ts +102 -0
- package/dist/src/core/config/config-migrator.d.ts.map +1 -0
- package/dist/src/core/config/config-migrator.js +367 -0
- package/dist/src/core/config/config-migrator.js.map +1 -0
- package/dist/src/core/config/index.d.ts +10 -0
- package/dist/src/core/config/index.d.ts.map +1 -0
- package/dist/src/core/config/index.js +10 -0
- package/dist/src/core/config/index.js.map +1 -0
- package/dist/src/core/config/types.d.ts +216 -0
- package/dist/src/core/config/types.d.ts.map +1 -0
- package/dist/src/core/config/types.js +32 -0
- package/dist/src/core/config/types.js.map +1 -0
- package/dist/src/integrations/jira/jira-hierarchy-mapper.d.ts +104 -0
- package/dist/src/integrations/jira/jira-hierarchy-mapper.d.ts.map +1 -0
- package/dist/src/integrations/jira/jira-hierarchy-mapper.js +178 -0
- package/dist/src/integrations/jira/jira-hierarchy-mapper.js.map +1 -0
- package/package.json +1 -1
- package/plugins/specweave/commands/migrate-config.md +104 -0
- package/plugins/specweave/hooks/post-task-completion.sh +1 -1
- package/plugins/specweave/hooks/pre-task-completion.sh +1 -1
- package/plugins/specweave-ado/hooks/post-task-completion.sh +1 -1
- package/plugins/specweave-github/hooks/post-task-completion.sh +1 -1
- package/plugins/specweave-jira/hooks/post-task-completion.sh +1 -1
- 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.
|
|
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
|