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.
Files changed (44) hide show
  1. package/CLAUDE.md +48 -0
  2. package/dist/src/cli/helpers/init/external-import.d.ts.map +1 -1
  3. package/dist/src/cli/helpers/init/external-import.js +24 -0
  4. package/dist/src/cli/helpers/init/external-import.js.map +1 -1
  5. package/dist/src/core/config/types.d.ts +15 -0
  6. package/dist/src/core/config/types.d.ts.map +1 -1
  7. package/dist/src/core/config/types.js.map +1 -1
  8. package/dist/src/core/increment/increment-utils.d.ts +40 -0
  9. package/dist/src/core/increment/increment-utils.d.ts.map +1 -1
  10. package/dist/src/core/increment/increment-utils.js +56 -2
  11. package/dist/src/core/increment/increment-utils.js.map +1 -1
  12. package/dist/src/core/increment/status-change-sync-trigger.d.ts +26 -2
  13. package/dist/src/core/increment/status-change-sync-trigger.d.ts.map +1 -1
  14. package/dist/src/core/increment/status-change-sync-trigger.js +70 -6
  15. package/dist/src/core/increment/status-change-sync-trigger.js.map +1 -1
  16. package/dist/src/hooks/auto-create-external-issue.d.ts +19 -0
  17. package/dist/src/hooks/auto-create-external-issue.d.ts.map +1 -0
  18. package/dist/src/hooks/auto-create-external-issue.js +54 -0
  19. package/dist/src/hooks/auto-create-external-issue.js.map +1 -0
  20. package/dist/src/importers/github-importer.d.ts.map +1 -1
  21. package/dist/src/importers/github-importer.js +17 -3
  22. package/dist/src/importers/github-importer.js.map +1 -1
  23. package/dist/src/integrations/jira/jira-incremental-mapper.d.ts +3 -1
  24. package/dist/src/integrations/jira/jira-incremental-mapper.d.ts.map +1 -1
  25. package/dist/src/integrations/jira/jira-incremental-mapper.js +7 -1
  26. package/dist/src/integrations/jira/jira-incremental-mapper.js.map +1 -1
  27. package/dist/src/integrations/jira/jira-mapper.d.ts +3 -1
  28. package/dist/src/integrations/jira/jira-mapper.d.ts.map +1 -1
  29. package/dist/src/integrations/jira/jira-mapper.js +7 -1
  30. package/dist/src/integrations/jira/jira-mapper.js.map +1 -1
  31. package/dist/src/sync/external-issue-auto-creator.d.ts +156 -0
  32. package/dist/src/sync/external-issue-auto-creator.d.ts.map +1 -0
  33. package/dist/src/sync/external-issue-auto-creator.js +694 -0
  34. package/dist/src/sync/external-issue-auto-creator.js.map +1 -0
  35. package/dist/src/utils/auth-helpers.d.ts +25 -0
  36. package/dist/src/utils/auth-helpers.d.ts.map +1 -1
  37. package/dist/src/utils/auth-helpers.js +46 -7
  38. package/dist/src/utils/auth-helpers.js.map +1 -1
  39. package/dist/src/utils/feature-id-collision.d.ts +51 -0
  40. package/dist/src/utils/feature-id-collision.d.ts.map +1 -1
  41. package/dist/src/utils/feature-id-collision.js +149 -0
  42. package/dist/src/utils/feature-id-collision.js.map +1 -1
  43. package/package.json +1 -1
  44. 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"}