specweave 1.0.17 → 1.0.19
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 +48 -0
- package/dist/src/cli/helpers/init/external-import.d.ts.map +1 -1
- package/dist/src/cli/helpers/init/external-import.js +24 -0
- package/dist/src/cli/helpers/init/external-import.js.map +1 -1
- package/dist/src/core/config/types.d.ts +15 -0
- package/dist/src/core/config/types.d.ts.map +1 -1
- package/dist/src/core/config/types.js.map +1 -1
- package/dist/src/core/increment/increment-utils.d.ts +40 -0
- package/dist/src/core/increment/increment-utils.d.ts.map +1 -1
- package/dist/src/core/increment/increment-utils.js +56 -2
- package/dist/src/core/increment/increment-utils.js.map +1 -1
- package/dist/src/core/increment/status-change-sync-trigger.d.ts +26 -2
- package/dist/src/core/increment/status-change-sync-trigger.d.ts.map +1 -1
- package/dist/src/core/increment/status-change-sync-trigger.js +70 -6
- package/dist/src/core/increment/status-change-sync-trigger.js.map +1 -1
- package/dist/src/hooks/auto-create-external-issue.d.ts +19 -0
- package/dist/src/hooks/auto-create-external-issue.d.ts.map +1 -0
- package/dist/src/hooks/auto-create-external-issue.js +54 -0
- package/dist/src/hooks/auto-create-external-issue.js.map +1 -0
- package/dist/src/importers/github-importer.d.ts.map +1 -1
- package/dist/src/importers/github-importer.js +17 -3
- package/dist/src/importers/github-importer.js.map +1 -1
- package/dist/src/integrations/jira/jira-incremental-mapper.d.ts +3 -1
- package/dist/src/integrations/jira/jira-incremental-mapper.d.ts.map +1 -1
- package/dist/src/integrations/jira/jira-incremental-mapper.js +7 -1
- package/dist/src/integrations/jira/jira-incremental-mapper.js.map +1 -1
- package/dist/src/integrations/jira/jira-mapper.d.ts +3 -1
- package/dist/src/integrations/jira/jira-mapper.d.ts.map +1 -1
- package/dist/src/integrations/jira/jira-mapper.js +7 -1
- package/dist/src/integrations/jira/jira-mapper.js.map +1 -1
- package/dist/src/sync/external-issue-auto-creator.d.ts +156 -0
- package/dist/src/sync/external-issue-auto-creator.d.ts.map +1 -0
- package/dist/src/sync/external-issue-auto-creator.js +694 -0
- package/dist/src/sync/external-issue-auto-creator.js.map +1 -0
- package/dist/src/utils/auth-helpers.d.ts +25 -0
- package/dist/src/utils/auth-helpers.d.ts.map +1 -1
- package/dist/src/utils/auth-helpers.js +46 -7
- package/dist/src/utils/auth-helpers.js.map +1 -1
- package/dist/src/utils/feature-id-collision.d.ts +51 -0
- package/dist/src/utils/feature-id-collision.d.ts.map +1 -1
- package/dist/src/utils/feature-id-collision.js +149 -0
- package/dist/src/utils/feature-id-collision.js.map +1 -1
- package/package.json +1 -1
- package/plugins/specweave/commands/sync-progress.md +92 -0
|
@@ -0,0 +1,156 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* External Issue Auto-Creator (v1.0.19)
|
|
3
|
+
*
|
|
4
|
+
* Automatically creates external issues (GitHub/JIRA/ADO) for increments
|
|
5
|
+
* when they don't have linked issues.
|
|
6
|
+
*
|
|
7
|
+
* TRIGGER POINTS:
|
|
8
|
+
* 1. After increment creation (post-increment-planning hook)
|
|
9
|
+
* 2. During sync-progress if issue is missing
|
|
10
|
+
* 3. On status change (active → completed)
|
|
11
|
+
*
|
|
12
|
+
* SAFETY FEATURES:
|
|
13
|
+
* - 3-layer idempotency (frontmatter → metadata → API)
|
|
14
|
+
* - Duplicate detection before creation
|
|
15
|
+
* - Rate limiting (circuit breaker)
|
|
16
|
+
* - Non-blocking (failures don't crash the workflow)
|
|
17
|
+
*
|
|
18
|
+
* @see ADR-0139 (Unified Post-Increment GitHub Sync)
|
|
19
|
+
*/
|
|
20
|
+
import { Logger } from '../utils/logger.js';
|
|
21
|
+
export interface ExternalIssueAutoCreatorOptions {
|
|
22
|
+
projectRoot: string;
|
|
23
|
+
logger?: Logger;
|
|
24
|
+
}
|
|
25
|
+
export interface AutoCreateResult {
|
|
26
|
+
success: boolean;
|
|
27
|
+
provider: 'github' | 'jira' | 'ado' | 'none';
|
|
28
|
+
issueNumber?: number | string;
|
|
29
|
+
issueUrl?: string;
|
|
30
|
+
error?: string;
|
|
31
|
+
skipped?: boolean;
|
|
32
|
+
skipReason?: string;
|
|
33
|
+
}
|
|
34
|
+
export interface IncrementInfo {
|
|
35
|
+
id: string;
|
|
36
|
+
featureId: string;
|
|
37
|
+
title: string;
|
|
38
|
+
status: string;
|
|
39
|
+
userStories: Array<{
|
|
40
|
+
id: string;
|
|
41
|
+
title: string;
|
|
42
|
+
project?: string;
|
|
43
|
+
}>;
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* Auto-creates external issues for increments
|
|
47
|
+
*
|
|
48
|
+
* Usage:
|
|
49
|
+
* ```typescript
|
|
50
|
+
* const creator = new ExternalIssueAutoCreator({ projectRoot: process.cwd() });
|
|
51
|
+
* const result = await creator.createForIncrement('0001-feature');
|
|
52
|
+
* ```
|
|
53
|
+
*/
|
|
54
|
+
export declare class ExternalIssueAutoCreator {
|
|
55
|
+
private projectRoot;
|
|
56
|
+
private logger;
|
|
57
|
+
private configManager;
|
|
58
|
+
constructor(options: ExternalIssueAutoCreatorOptions);
|
|
59
|
+
/**
|
|
60
|
+
* Create external issues for an increment (if configured and not already created)
|
|
61
|
+
*
|
|
62
|
+
* This method:
|
|
63
|
+
* 1. Checks if auto-create is enabled in config
|
|
64
|
+
* 2. Detects which provider to use (GitHub/JIRA/ADO)
|
|
65
|
+
* 3. Checks if issues already exist (3-layer idempotency)
|
|
66
|
+
* 4. Creates issues if missing
|
|
67
|
+
* 5. Updates metadata with issue links
|
|
68
|
+
*/
|
|
69
|
+
createForIncrement(incrementId: string): Promise<AutoCreateResult>;
|
|
70
|
+
/**
|
|
71
|
+
* Check if auto-create is enabled in config
|
|
72
|
+
*
|
|
73
|
+
* Checks (in order):
|
|
74
|
+
* 1. sync.autoCreateOnIncrement (new, explicit)
|
|
75
|
+
* 2. sync.autoSync (legacy)
|
|
76
|
+
* 3. sync.settings.canUpsertInternalItems (legacy)
|
|
77
|
+
*/
|
|
78
|
+
private isAutoCreateEnabled;
|
|
79
|
+
/**
|
|
80
|
+
* Detect which provider to use for external sync
|
|
81
|
+
*
|
|
82
|
+
* Priority:
|
|
83
|
+
* 1. GitHub (if sync.github.enabled = true)
|
|
84
|
+
* 2. JIRA (if sync.jira.enabled = true)
|
|
85
|
+
* 3. ADO (if sync.ado.enabled = true)
|
|
86
|
+
* 4. GitHub (if issueTracker.provider = 'github')
|
|
87
|
+
* 5. JIRA (if issueTracker.provider = 'jira')
|
|
88
|
+
* 6. ADO (if issueTracker.provider = 'ado')
|
|
89
|
+
*/
|
|
90
|
+
private detectProvider;
|
|
91
|
+
/**
|
|
92
|
+
* Load increment information from spec.md and metadata.json
|
|
93
|
+
*/
|
|
94
|
+
private loadIncrementInfo;
|
|
95
|
+
/**
|
|
96
|
+
* Parse user stories from spec.md body
|
|
97
|
+
*/
|
|
98
|
+
private parseUserStories;
|
|
99
|
+
/**
|
|
100
|
+
* Check if increment already has external issue linked
|
|
101
|
+
*
|
|
102
|
+
* Checks:
|
|
103
|
+
* 1. metadata.json github/jira/ado fields
|
|
104
|
+
* 2. spec.md frontmatter external links
|
|
105
|
+
*/
|
|
106
|
+
private checkExistingIssue;
|
|
107
|
+
/**
|
|
108
|
+
* Create GitHub issues for the increment
|
|
109
|
+
*/
|
|
110
|
+
private createGitHubIssues;
|
|
111
|
+
/**
|
|
112
|
+
* Create JIRA issues for the increment
|
|
113
|
+
*/
|
|
114
|
+
private createJiraIssues;
|
|
115
|
+
/**
|
|
116
|
+
* Create Azure DevOps work items for the increment
|
|
117
|
+
*/
|
|
118
|
+
private createAdoIssues;
|
|
119
|
+
/**
|
|
120
|
+
* Detect GitHub repo from config
|
|
121
|
+
*/
|
|
122
|
+
private detectGitHubRepo;
|
|
123
|
+
/**
|
|
124
|
+
* Build GitHub issue body for a user story
|
|
125
|
+
*/
|
|
126
|
+
private buildGitHubIssueBody;
|
|
127
|
+
/**
|
|
128
|
+
* Build GitHub issue body for feature-level issue
|
|
129
|
+
*/
|
|
130
|
+
private buildFeatureLevelIssueBody;
|
|
131
|
+
/**
|
|
132
|
+
* Build JIRA Epic description
|
|
133
|
+
*/
|
|
134
|
+
private buildJiraEpicDescription;
|
|
135
|
+
/**
|
|
136
|
+
* Build ADO work item description
|
|
137
|
+
*/
|
|
138
|
+
private buildAdoDescription;
|
|
139
|
+
/**
|
|
140
|
+
* Update metadata.json with GitHub issue
|
|
141
|
+
*/
|
|
142
|
+
private updateMetadataWithGitHubIssue;
|
|
143
|
+
/**
|
|
144
|
+
* Update metadata.json with JIRA issue
|
|
145
|
+
*/
|
|
146
|
+
private updateMetadataWithJiraIssue;
|
|
147
|
+
/**
|
|
148
|
+
* Update metadata.json with ADO work item
|
|
149
|
+
*/
|
|
150
|
+
private updateMetadataWithAdoWorkItem;
|
|
151
|
+
}
|
|
152
|
+
/**
|
|
153
|
+
* Convenience function to auto-create issues for an increment
|
|
154
|
+
*/
|
|
155
|
+
export declare function autoCreateExternalIssue(projectRoot: string, incrementId: string, logger?: Logger): Promise<AutoCreateResult>;
|
|
156
|
+
//# sourceMappingURL=external-issue-auto-creator.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"external-issue-auto-creator.d.ts","sourceRoot":"","sources":["../../../src/sync/external-issue-auto-creator.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAKH,OAAO,EAAE,MAAM,EAAiB,MAAM,oBAAoB,CAAC;AAK3D,MAAM,WAAW,+BAA+B;IAC9C,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE,OAAO,CAAC;IACjB,QAAQ,EAAE,QAAQ,GAAG,MAAM,GAAG,KAAK,GAAG,MAAM,CAAC;IAC7C,WAAW,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IAC9B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,aAAa;IAC5B,EAAE,EAAE,MAAM,CAAC;IACX,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,KAAK,CAAC;QACjB,EAAE,EAAE,MAAM,CAAC;QACX,KAAK,EAAE,MAAM,CAAC;QACd,OAAO,CAAC,EAAE,MAAM,CAAC;KAClB,CAAC,CAAC;CACJ;AAED;;;;;;;;GAQG;AACH,qBAAa,wBAAwB;IACnC,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,aAAa,CAAgB;gBAEzB,OAAO,EAAE,+BAA+B;IAMpD;;;;;;;;;OASG;IACG,kBAAkB,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,CAAC;IA2ExE;;;;;;;OAOG;IACH,OAAO,CAAC,mBAAmB;IAoB3B;;;;;;;;;;OAUG;IACH,OAAO,CAAC,cAAc;IAyCtB;;OAEG;YACW,iBAAiB;IAyD/B;;OAEG;IACH,OAAO,CAAC,gBAAgB;IA4BxB;;;;;;OAMG;YACW,kBAAkB;IAmDhC;;OAEG;YACW,kBAAkB;IAqGhC;;OAEG;YACW,gBAAgB;IA0D9B;;OAEG;YACW,eAAe;IAoE7B;;OAEG;YACW,gBAAgB;IAqD9B;;OAEG;IACH,OAAO,CAAC,oBAAoB;IAsB5B;;OAEG;IACH,OAAO,CAAC,0BAA0B;IA4BlC;;OAEG;IACH,OAAO,CAAC,wBAAwB;IAuBhC;;OAEG;IACH,OAAO,CAAC,mBAAmB;IAuB3B;;OAEG;YACW,6BAA6B;IA0B3C;;OAEG;YACW,2BAA2B;IA0BzC;;OAEG;YACW,6BAA6B;CAyB5C;AAED;;GAEG;AACH,wBAAsB,uBAAuB,CAC3C,WAAW,EAAE,MAAM,EACnB,WAAW,EAAE,MAAM,EACnB,MAAM,CAAC,EAAE,MAAM,GACd,OAAO,CAAC,gBAAgB,CAAC,CAM3B"}
|