specweave 1.0.30 → 1.0.32
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 +140 -1235
- package/bin/specweave.js +23 -0
- package/dist/plugins/specweave-github/lib/github-client-v2.d.ts +3 -0
- package/dist/plugins/specweave-github/lib/github-client-v2.d.ts.map +1 -1
- package/dist/plugins/specweave-github/lib/github-client-v2.js +39 -0
- package/dist/plugins/specweave-github/lib/github-client-v2.js.map +1 -1
- package/dist/src/cli/commands/set-sync-target.d.ts +41 -0
- package/dist/src/cli/commands/set-sync-target.d.ts.map +1 -0
- package/dist/src/cli/commands/set-sync-target.js +126 -0
- package/dist/src/cli/commands/set-sync-target.js.map +1 -0
- package/dist/src/cli/helpers/issue-tracker/github-multi-repo.d.ts.map +1 -1
- package/dist/src/cli/helpers/issue-tracker/github-multi-repo.js +5 -8
- package/dist/src/cli/helpers/issue-tracker/github-multi-repo.js.map +1 -1
- package/dist/src/core/hooks/HookScanner.d.ts +32 -0
- package/dist/src/core/hooks/HookScanner.d.ts.map +1 -1
- package/dist/src/core/hooks/HookScanner.js +125 -1
- package/dist/src/core/hooks/HookScanner.js.map +1 -1
- package/dist/src/core/hooks/types.d.ts +10 -1
- package/dist/src/core/hooks/types.d.ts.map +1 -1
- package/dist/src/core/increment/metadata-manager.d.ts +67 -1
- package/dist/src/core/increment/metadata-manager.d.ts.map +1 -1
- package/dist/src/core/increment/metadata-manager.js +93 -0
- package/dist/src/core/increment/metadata-manager.js.map +1 -1
- package/dist/src/core/project/index.d.ts +21 -0
- package/dist/src/core/project/index.d.ts.map +1 -0
- package/dist/src/core/project/index.js +22 -0
- package/dist/src/core/project/index.js.map +1 -0
- package/dist/src/core/project/project-service.d.ts +122 -0
- package/dist/src/core/project/project-service.d.ts.map +1 -0
- package/dist/src/core/project/project-service.js +334 -0
- package/dist/src/core/project/project-service.js.map +1 -0
- package/dist/src/core/sync/external-tool-resolver.d.ts +171 -0
- package/dist/src/core/sync/external-tool-resolver.d.ts.map +1 -0
- package/dist/src/core/sync/external-tool-resolver.js +569 -0
- package/dist/src/core/sync/external-tool-resolver.js.map +1 -0
- package/dist/src/core/types/increment-metadata.d.ts +92 -0
- package/dist/src/core/types/increment-metadata.d.ts.map +1 -1
- package/dist/src/hooks/processor.d.ts +7 -3
- package/dist/src/hooks/processor.d.ts.map +1 -1
- package/dist/src/hooks/processor.js +11 -5
- package/dist/src/hooks/processor.js.map +1 -1
- package/package.json +1 -1
- package/plugins/specweave/hooks/hooks.json +0 -69
- package/plugins/specweave/hooks/v2/handlers/project-bridge-handler.sh +96 -0
- package/plugins/specweave/hooks/v2/queue/processor.sh +13 -5
- package/plugins/specweave/lib/hooks/project-bridge.js +76 -0
- package/plugins/specweave/lib/hooks/update-tasks-md.js +0 -0
- package/plugins/specweave/lib/hooks/us-completion-orchestrator.js +0 -0
- package/plugins/specweave/lib/vendor/core/increment/metadata-manager.d.ts +67 -1
- package/plugins/specweave/lib/vendor/core/increment/metadata-manager.js +93 -0
- package/plugins/specweave/lib/vendor/core/increment/metadata-manager.js.map +1 -1
- package/plugins/specweave/lib/vendor/core/types/increment-metadata.d.ts +92 -0
- package/plugins/specweave-github/lib/github-client-v2.js +39 -0
- package/plugins/specweave-github/lib/github-client-v2.ts +44 -0
- package/plugins/specweave/hooks/docs-changed.sh +0 -87
- package/plugins/specweave/hooks/human-input-required.sh +0 -83
- package/plugins/specweave/hooks/post-edit-write-consolidated.sh +0 -428
- package/plugins/specweave/hooks/post-first-increment.sh +0 -61
- package/plugins/specweave/hooks/post-increment-change.sh +0 -103
- package/plugins/specweave/hooks/post-increment-completion.sh +0 -513
- package/plugins/specweave/hooks/post-increment-planning.sh +0 -1204
- package/plugins/specweave/hooks/post-increment-status-change.sh +0 -243
- package/plugins/specweave/hooks/post-metadata-change.sh +0 -246
- package/plugins/specweave/hooks/post-spec-update.sh +0 -158
- package/plugins/specweave/hooks/post-task-completion.sh +0 -557
- package/plugins/specweave/hooks/post-task-edit.sh +0 -47
- package/plugins/specweave/hooks/post-user-story-complete.sh +0 -230
- package/plugins/specweave/hooks/pre-command-deduplication.sh +0 -68
- package/plugins/specweave/hooks/pre-edit-write-consolidated.sh +0 -225
- package/plugins/specweave/hooks/pre-implementation.sh +0 -75
- package/plugins/specweave/hooks/pre-increment-start.sh +0 -173
- package/plugins/specweave/hooks/pre-task-completion-edit.sh +0 -355
- package/plugins/specweave/hooks/pre-task-completion.sh +0 -269
- package/plugins/specweave/hooks/pre-tool-use.sh +0 -137
- package/plugins/specweave/hooks/session-start-reconcile.sh +0 -139
- package/plugins/specweave/hooks/shared/bulk-operation-detector.sh +0 -167
- package/plugins/specweave/hooks/test-pretooluse-env.sh +0 -72
- package/plugins/specweave/hooks/validate-increment-completion.sh +0 -113
- package/plugins/specweave/lib/hooks/consolidated-sync.js +0 -288
|
@@ -273,6 +273,74 @@ export interface USExternalRefsMap {
|
|
|
273
273
|
ado?: USExternalRef;
|
|
274
274
|
};
|
|
275
275
|
}
|
|
276
|
+
/**
|
|
277
|
+
* How the sync target was determined
|
|
278
|
+
* Used for debugging and audit trails
|
|
279
|
+
*/
|
|
280
|
+
export type SyncTargetDerivation = 'user-selection' | 'project-mapping' | 'default-profile' | 'auto-detected';
|
|
281
|
+
/**
|
|
282
|
+
* External tool sync target for an increment
|
|
283
|
+
*
|
|
284
|
+
* Explicitly specifies which external tool profile this increment syncs with.
|
|
285
|
+
* Stored in metadata.json to provide audit trail and deterministic sync behavior.
|
|
286
|
+
*
|
|
287
|
+
* @since v1.0.31 (ADR-0211)
|
|
288
|
+
*
|
|
289
|
+
* @example
|
|
290
|
+
* ```json
|
|
291
|
+
* {
|
|
292
|
+
* "syncTarget": {
|
|
293
|
+
* "profileId": "github-frontend",
|
|
294
|
+
* "provider": "github",
|
|
295
|
+
* "derivedFrom": "project-mapping",
|
|
296
|
+
* "setAt": "2025-12-18T10:30:00Z"
|
|
297
|
+
* }
|
|
298
|
+
* }
|
|
299
|
+
* ```
|
|
300
|
+
*/
|
|
301
|
+
export interface SyncTarget {
|
|
302
|
+
/**
|
|
303
|
+
* Profile ID from config.sync.profiles
|
|
304
|
+
* This is the key that links to the full profile configuration
|
|
305
|
+
*
|
|
306
|
+
* @example "github-frontend", "jira-backend", "ado-main"
|
|
307
|
+
*/
|
|
308
|
+
profileId: string;
|
|
309
|
+
/**
|
|
310
|
+
* Provider type for quick filtering without loading full config
|
|
311
|
+
*/
|
|
312
|
+
provider: 'github' | 'jira' | 'ado';
|
|
313
|
+
/**
|
|
314
|
+
* How this target was determined (for debugging/audit)
|
|
315
|
+
*/
|
|
316
|
+
derivedFrom: SyncTargetDerivation;
|
|
317
|
+
/**
|
|
318
|
+
* Timestamp when target was set (ISO 8601)
|
|
319
|
+
*/
|
|
320
|
+
setAt: string;
|
|
321
|
+
/**
|
|
322
|
+
* Optional: Source project ID that led to this target
|
|
323
|
+
* Useful when derivedFrom is 'project-mapping'
|
|
324
|
+
*/
|
|
325
|
+
sourceProjectId?: string;
|
|
326
|
+
}
|
|
327
|
+
/**
|
|
328
|
+
* Validation result for external tool configuration
|
|
329
|
+
*
|
|
330
|
+
* @since v1.0.31
|
|
331
|
+
*/
|
|
332
|
+
export interface ExternalToolValidationResult {
|
|
333
|
+
/** Whether the configuration is valid */
|
|
334
|
+
valid: boolean;
|
|
335
|
+
/** Resolved sync target (if valid) */
|
|
336
|
+
syncTarget?: SyncTarget;
|
|
337
|
+
/** List of validation errors */
|
|
338
|
+
errors: string[];
|
|
339
|
+
/** List of validation warnings (non-blocking) */
|
|
340
|
+
warnings: string[];
|
|
341
|
+
/** Suggested fixes for errors */
|
|
342
|
+
suggestions?: string[];
|
|
343
|
+
}
|
|
276
344
|
/**
|
|
277
345
|
* Extended increment metadata with multi-project support (v0.29.0+)
|
|
278
346
|
*
|
|
@@ -296,5 +364,29 @@ export interface IncrementMetadataV2 extends IncrementMetadata {
|
|
|
296
364
|
* Maps: US-001 → { github: {...}, jira: {...} }
|
|
297
365
|
*/
|
|
298
366
|
externalRefs?: USExternalRefsMap;
|
|
367
|
+
/**
|
|
368
|
+
* External tool sync target (v1.0.31+ - ADR-0211)
|
|
369
|
+
*
|
|
370
|
+
* Explicitly specifies which external tool profile this increment syncs with.
|
|
371
|
+
* Provides deterministic sync behavior and audit trail.
|
|
372
|
+
*
|
|
373
|
+
* Resolution priority:
|
|
374
|
+
* 1. This field (explicit)
|
|
375
|
+
* 2. **Project**: field in spec.md → config.projectMappings
|
|
376
|
+
* 3. config.sync.defaultProfile (fallback)
|
|
377
|
+
*
|
|
378
|
+
* @example
|
|
379
|
+
* ```json
|
|
380
|
+
* {
|
|
381
|
+
* "syncTarget": {
|
|
382
|
+
* "profileId": "github-frontend",
|
|
383
|
+
* "provider": "github",
|
|
384
|
+
* "derivedFrom": "project-mapping",
|
|
385
|
+
* "setAt": "2025-12-18T10:30:00Z"
|
|
386
|
+
* }
|
|
387
|
+
* }
|
|
388
|
+
* ```
|
|
389
|
+
*/
|
|
390
|
+
syncTarget?: SyncTarget;
|
|
299
391
|
}
|
|
300
392
|
//# sourceMappingURL=increment-metadata.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"increment-metadata.d.ts","sourceRoot":"","sources":["../../../../src/core/types/increment-metadata.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"increment-metadata.d.ts","sourceRoot":"","sources":["../../../../src/core/types/increment-metadata.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH;;;GAGG;AACH,oBAAY,eAAe;IACzB,yFAAyF;IACzF,QAAQ,aAAa;IAErB,gCAAgC;IAChC,MAAM,WAAW;IAEjB,6EAA6E;IAC7E,OAAO,YAAY;IAEnB,0EAA0E;IAC1E,MAAM,WAAW;IAEjB;;;;;;;;;;;OAWG;IACH,gBAAgB,qBAAqB;IAErC,gEAAgE;IAChE,SAAS,cAAc;IAEvB,4DAA4D;IAC5D,SAAS,cAAc;CACxB;AAED;;;GAGG;AACH,oBAAY,aAAa;IACvB,oDAAoD;IACpD,MAAM,WAAW;IAEjB,qDAAqD;IACrD,OAAO,YAAY;IAEnB,oEAAoE;IACpE,GAAG,QAAQ;IAEX,yDAAyD;IACzD,cAAc,mBAAmB;IAEjC,yCAAyC;IACzC,QAAQ,aAAa;IAErB,6DAA6D;IAC7D,UAAU,eAAe;CAC1B;AAED;;;GAGG;AACH,MAAM,WAAW,iBAAiB;IAChC,6DAA6D;IAC7D,EAAE,EAAE,MAAM,CAAC;IAEX,qBAAqB;IACrB,MAAM,EAAE,eAAe,CAAC;IAExB,qBAAqB;IACrB,IAAI,EAAE,aAAa,CAAC;IAEpB,oCAAoC;IACpC,OAAO,EAAE,MAAM,CAAC;IAEhB,yCAAyC;IACzC,YAAY,EAAE,MAAM,CAAC;IAErB,kEAAkE;IAClE,QAAQ,CAAC,EAAE,KAAK,GAAG,YAAY,GAAG,QAAQ,GAAG,MAAM,CAAC;IAEpD,qFAAqF;IACrF,cAAc,CAAC,EAAE,MAAM,CAAC;IAExB,8DAA8D;IAC9D,aAAa,CAAC,EAAE,MAAM,CAAC;IAEvB,iDAAiD;IACjD,SAAS,CAAC,EAAE,MAAM,CAAC;IAEnB,mDAAmD;IACnD,YAAY,CAAC,EAAE,MAAM,CAAC;IAEtB,uCAAuC;IACvC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAElB,yDAAyD;IACzD,eAAe,CAAC,EAAE,MAAM,CAAC;IAEzB,0CAA0C;IAC1C,WAAW,CAAC,EAAE,MAAM,CAAC;IAErB;;;;OAIG;IACH,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAE1B;;;;OAIG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED;;;GAGG;AACH,MAAM,WAAW,yBAA0B,SAAQ,iBAAiB;IAClE,kCAAkC;IAClC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAElB,gCAAgC;IAChC,cAAc,CAAC,EAAE,MAAM,CAAC;IAExB,4BAA4B;IAC5B,UAAU,CAAC,EAAE,MAAM,CAAC;IAEpB,iCAAiC;IACjC,SAAS,CAAC,EAAE,MAAM,CAAC;IAEnB,oCAAoC;IACpC,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED;;;;;;;;GAQG;AACH,eAAO,MAAM,iBAAiB,EAAE,MAAM,CAAC,eAAe,EAAE,eAAe,EAAE,CAoCxE,CAAC;AAEF;;;;;;GAMG;AACH,eAAO,MAAM,WAAW,EAAE,MAAM,CAAC,aAAa,EAAE,MAAM,GAAG,IAAI,CAO5D,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,oBAAoB;IAC/B,kDAAkD;;IAGlD,kDAAkD;;IAGlD,oDAAoD;;CAErD,CAAC;AAEF;;;;;GAKG;AACH,wBAAgB,qBAAqB,CAAC,EAAE,EAAE,MAAM,EAAE,IAAI,GAAE,aAAqC,GAAG,iBAAiB,CAUhH;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,eAAe,EAAE,EAAE,EAAE,eAAe,GAAG,OAAO,CAGrF;AAED;;GAEG;AACH,wBAAgB,OAAO,CAAC,QAAQ,EAAE,iBAAiB,GAAG,OAAO,CAgB5D;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,iBAAiB,GAAG,OAAO,CAUtE;AAED;;;;;;;;;;;;GAYG;AACH,eAAO,MAAM,oBAAoB,EAAE,eAAe,EAIjD,CAAC;AAEF;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,eAAe,GAAG,OAAO,CAErE;AAED;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,eAAe,EAAE,EAAE,EAAE,eAAe,GAAG,IAAI,CAQnF;AAMD;;;GAGG;AACH,MAAM,WAAW,iBAAiB;IAChC,wDAAwD;IACxD,EAAE,EAAE,MAAM,CAAC;IAEX,iDAAiD;IACjD,KAAK,EAAE,MAAM,CAAC;IAEd,oEAAoE;IACpE,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;IAEpB,0CAA0C;IAC1C,gBAAgB,CAAC,EAAE,MAAM,CAAC;CAC3B;AAED;;;GAGG;AACH,MAAM,WAAW,sBAAsB;IACrC,sCAAsC;IACtC,IAAI,EAAE,MAAM,CAAC;IAEb,kCAAkC;IAClC,EAAE,EAAE,MAAM,CAAC;IAEX,oCAAoC;IACpC,MAAM,EAAE,MAAM,CAAC;IAEf,yBAAyB;IACzB,IAAI,CAAC,EAAE,UAAU,GAAG,MAAM,GAAG,WAAW,CAAC;CAC1C;AAED;;;GAGG;AACH,MAAM,WAAW,qBAAqB;IACpC,+CAA+C;IAC/C,QAAQ,EAAE,iBAAiB,EAAE,CAAC;IAE9B,+CAA+C;IAC/C,YAAY,CAAC,EAAE,sBAAsB,EAAE,CAAC;IAExC,yEAAyE;IACzE,cAAc,CAAC,EAAE,MAAM,CAAC;IAExB,gFAAgF;IAChF,YAAY,CAAC,EAAE,QAAQ,GAAG,cAAc,GAAG,KAAK,CAAC;CAClD;AAED;;;GAGG;AACH,MAAM,WAAW,wBAAwB;IACvC,2DAA2D;IAC3D,IAAI,EAAE,cAAc,GAAG,aAAa,GAAG,YAAY,CAAC;IAEpD,yEAAyE;IACzE,WAAW,EAAE,MAAM,CAAC;IAEpB,mBAAmB;IACnB,aAAa,EAAE,MAAM,CAAC;IAEtB,2BAA2B;IAC3B,OAAO,CAAC,EAAE,MAAM,CAAC;IAEjB,6BAA6B;IAC7B,SAAS,CAAC,EAAE,MAAM,CAAC;IAEnB,2BAA2B;IAC3B,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED;;;GAGG;AACH,MAAM,WAAW,aAAa;IAC5B,yBAAyB;IACzB,QAAQ,EAAE,QAAQ,GAAG,MAAM,GAAG,KAAK,CAAC;IAEpC,6BAA6B;IAC7B,WAAW,EAAE,MAAM,GAAG,MAAM,CAAC;IAE7B,gBAAgB;IAChB,GAAG,EAAE,MAAM,CAAC;IAEZ,6DAA6D;IAC7D,aAAa,EAAE,MAAM,CAAC;IAEtB,0BAA0B;IAC1B,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED;;;;GAIG;AACH,MAAM,WAAW,iBAAiB;IAChC,CAAC,IAAI,EAAE,MAAM,GAAG;QACd,MAAM,CAAC,EAAE,aAAa,CAAC;QACvB,IAAI,CAAC,EAAE,aAAa,CAAC;QACrB,GAAG,CAAC,EAAE,aAAa,CAAC;KACrB,CAAC;CACH;AAMD;;;GAGG;AACH,MAAM,MAAM,oBAAoB,GAC5B,gBAAgB,GAChB,iBAAiB,GACjB,iBAAiB,GACjB,eAAe,CAAC;AAEpB;;;;;;;;;;;;;;;;;;;GAmBG;AACH,MAAM,WAAW,UAAU;IACzB;;;;;OAKG;IACH,SAAS,EAAE,MAAM,CAAC;IAElB;;OAEG;IACH,QAAQ,EAAE,QAAQ,GAAG,MAAM,GAAG,KAAK,CAAC;IAEpC;;OAEG;IACH,WAAW,EAAE,oBAAoB,CAAC;IAElC;;OAEG;IACH,KAAK,EAAE,MAAM,CAAC;IAEd;;;OAGG;IACH,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED;;;;GAIG;AACH,MAAM,WAAW,4BAA4B;IAC3C,yCAAyC;IACzC,KAAK,EAAE,OAAO,CAAC;IAEf,sCAAsC;IACtC,UAAU,CAAC,EAAE,UAAU,CAAC;IAExB,gCAAgC;IAChC,MAAM,EAAE,MAAM,EAAE,CAAC;IAEjB,iDAAiD;IACjD,QAAQ,EAAE,MAAM,EAAE,CAAC;IAEnB,iCAAiC;IACjC,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;CACxB;AAED;;;;;;;GAOG;AACH,MAAM,WAAW,mBAAoB,SAAQ,iBAAiB;IAC5D,8CAA8C;IAC9C,SAAS,CAAC,EAAE,MAAM,CAAC;IAEnB,yEAAyE;IACzE,YAAY,CAAC,EAAE,qBAAqB,CAAC;IAErC,iEAAiE;IACjE,iBAAiB,CAAC,EAAE,wBAAwB,CAAC;IAE7C,iCAAiC;IACjC,MAAM,CAAC,EAAE,MAAM,CAAC;IAEhB;;;;OAIG;IACH,YAAY,CAAC,EAAE,iBAAiB,CAAC;IAEjC;;;;;;;;;;;;;;;;;;;;;;OAsBG;IACH,UAAU,CAAC,EAAE,UAAU,CAAC;CACzB"}
|
|
@@ -7,10 +7,14 @@
|
|
|
7
7
|
*
|
|
8
8
|
* Usage: node processor.js [--daemon]
|
|
9
9
|
*
|
|
10
|
-
* Event routing:
|
|
11
|
-
* - increment.created/done/archived/reopened -> living-specs-handler
|
|
12
|
-
* - user-story.completed/reopened -> status-line-handler
|
|
10
|
+
* Event routing (EDA v2):
|
|
11
|
+
* - increment.created/done/archived/reopened -> living-specs-handler + status-line-handler + project-bridge-handler
|
|
12
|
+
* - user-story.completed/reopened -> status-line-handler + project-bridge-handler
|
|
13
13
|
* - task.updated/spec.updated -> living-docs-handler (legacy)
|
|
14
|
+
* - metadata.changed -> github-sync-handler
|
|
15
|
+
*
|
|
16
|
+
* The project-bridge-handler connects increment events to project-level EDA,
|
|
17
|
+
* enabling automatic sync to GitHub, ADO, and JIRA via ProjectService.
|
|
14
18
|
*
|
|
15
19
|
* Self-terminates after 60s of idle
|
|
16
20
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"processor.d.ts","sourceRoot":"","sources":["../../../src/hooks/processor.ts"],"names":[],"mappings":";AACA
|
|
1
|
+
{"version":3,"file":"processor.d.ts","sourceRoot":"","sources":["../../../src/hooks/processor.ts"],"names":[],"mappings":";AACA;;;;;;;;;;;;;;;;;;;;GAoBG"}
|
|
@@ -7,10 +7,14 @@
|
|
|
7
7
|
*
|
|
8
8
|
* Usage: node processor.js [--daemon]
|
|
9
9
|
*
|
|
10
|
-
* Event routing:
|
|
11
|
-
* - increment.created/done/archived/reopened -> living-specs-handler
|
|
12
|
-
* - user-story.completed/reopened -> status-line-handler
|
|
10
|
+
* Event routing (EDA v2):
|
|
11
|
+
* - increment.created/done/archived/reopened -> living-specs-handler + status-line-handler + project-bridge-handler
|
|
12
|
+
* - user-story.completed/reopened -> status-line-handler + project-bridge-handler
|
|
13
13
|
* - task.updated/spec.updated -> living-docs-handler (legacy)
|
|
14
|
+
* - metadata.changed -> github-sync-handler
|
|
15
|
+
*
|
|
16
|
+
* The project-bridge-handler connects increment events to project-level EDA,
|
|
17
|
+
* enabling automatic sync to GitHub, ADO, and JIRA via ProjectService.
|
|
14
18
|
*
|
|
15
19
|
* Self-terminates after 60s of idle
|
|
16
20
|
*
|
|
@@ -188,13 +192,15 @@ async function processEvent(event, state) {
|
|
|
188
192
|
appendLog(state.logFile, `Processing: ${type} (${data})`);
|
|
189
193
|
const handlers = [
|
|
190
194
|
// EDA Event Routing (new architecture)
|
|
195
|
+
// Lifecycle events -> living-specs + status-line + project-bridge
|
|
191
196
|
{
|
|
192
197
|
pattern: /^increment\.(created|done|archived|reopened)$/,
|
|
193
|
-
handlers: ['living-specs-handler.sh', 'status-line-handler.sh'],
|
|
198
|
+
handlers: ['living-specs-handler.sh', 'status-line-handler.sh', 'project-bridge-handler.sh'],
|
|
194
199
|
},
|
|
200
|
+
// User story events -> status-line + project-bridge
|
|
195
201
|
{
|
|
196
202
|
pattern: /^user-story\.(completed|reopened)$/,
|
|
197
|
-
handlers: ['status-line-handler.sh'],
|
|
203
|
+
handlers: ['status-line-handler.sh', 'project-bridge-handler.sh'],
|
|
198
204
|
},
|
|
199
205
|
// Legacy event routing (backward compat)
|
|
200
206
|
{
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"processor.js","sourceRoot":"","sources":["../../../src/hooks/processor.ts"],"names":[],"mappings":";AACA
|
|
1
|
+
{"version":3,"file":"processor.js","sourceRoot":"","sources":["../../../src/hooks/processor.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "specweave",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.32",
|
|
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",
|
|
@@ -21,25 +21,6 @@
|
|
|
21
21
|
}
|
|
22
22
|
],
|
|
23
23
|
"PreToolUse": [
|
|
24
|
-
{
|
|
25
|
-
"matcher": "Bash",
|
|
26
|
-
"hooks": [
|
|
27
|
-
{
|
|
28
|
-
"type": "command",
|
|
29
|
-
"command": "bash -c 'W=\"${CLAUDE_PLUGIN_ROOT}/hooks/universal/fail-fast-wrapper.sh\"; S=\"${CLAUDE_PLUGIN_ROOT}/hooks/v2/guards/bash-file-guard.sh\"; [[ -x \"$W\" ]] && exec \"$W\" \"$S\" || (cat >/dev/null && printf \"{\\\"decision\\\":\\\"allow\\\"}\")'"
|
|
30
|
-
}
|
|
31
|
-
]
|
|
32
|
-
},
|
|
33
|
-
{
|
|
34
|
-
"matcher": "Edit|Write",
|
|
35
|
-
"matcher_content": "metadata\\.json.*completed",
|
|
36
|
-
"hooks": [
|
|
37
|
-
{
|
|
38
|
-
"type": "command",
|
|
39
|
-
"command": "bash -c 'W=\"${CLAUDE_PLUGIN_ROOT}/hooks/universal/fail-fast-wrapper.sh\"; S=\"${CLAUDE_PLUGIN_ROOT}/hooks/v2/guards/completion-guard.sh\"; [[ -x \"$W\" ]] && exec \"$W\" \"$S\" || (cat >/dev/null && printf \"{\\\"decision\\\":\\\"allow\\\"}\")'"
|
|
40
|
-
}
|
|
41
|
-
]
|
|
42
|
-
},
|
|
43
24
|
{
|
|
44
25
|
"matcher": "Write",
|
|
45
26
|
"matcher_content": "\\.specweave/increments/\\d{3,4}E?-[^/]+/spec\\.md",
|
|
@@ -50,26 +31,6 @@
|
|
|
50
31
|
}
|
|
51
32
|
]
|
|
52
33
|
},
|
|
53
|
-
{
|
|
54
|
-
"matcher": "Write",
|
|
55
|
-
"matcher_content": "\\.specweave/increments/\\d{3,4}E?-[^/]+/spec\\.md",
|
|
56
|
-
"hooks": [
|
|
57
|
-
{
|
|
58
|
-
"type": "command",
|
|
59
|
-
"command": "bash -c 'W=\"${CLAUDE_PLUGIN_ROOT}/hooks/universal/fail-fast-wrapper.sh\"; S=\"${CLAUDE_PLUGIN_ROOT}/hooks/v2/guards/per-us-project-validator.sh\"; [[ -x \"$W\" ]] && exec \"$W\" \"$S\" || (cat >/dev/null && printf \"{\\\"decision\\\":\\\"allow\\\"}\")'"
|
|
60
|
-
}
|
|
61
|
-
]
|
|
62
|
-
},
|
|
63
|
-
{
|
|
64
|
-
"matcher": "Write",
|
|
65
|
-
"matcher_content": "\\.specweave/increments/\\d{3,4}E?-[^/]+/spec\\.md",
|
|
66
|
-
"hooks": [
|
|
67
|
-
{
|
|
68
|
-
"type": "command",
|
|
69
|
-
"command": "bash -c 'W=\"${CLAUDE_PLUGIN_ROOT}/hooks/universal/fail-fast-wrapper.sh\"; S=\"${CLAUDE_PLUGIN_ROOT}/hooks/spec-project-validator.sh\"; [[ -x \"$W\" ]] && exec \"$W\" \"$S\" || (cat >/dev/null && printf \"{\\\"decision\\\":\\\"allow\\\"}\")'"
|
|
70
|
-
}
|
|
71
|
-
]
|
|
72
|
-
},
|
|
73
34
|
{
|
|
74
35
|
"matcher": "Write|Edit",
|
|
75
36
|
"matcher_content": "\\.specweave/docs/internal/specs/_features/",
|
|
@@ -90,26 +51,6 @@
|
|
|
90
51
|
}
|
|
91
52
|
]
|
|
92
53
|
},
|
|
93
|
-
{
|
|
94
|
-
"matcher": "Write",
|
|
95
|
-
"matcher_content": "\\.specweave/increments/\\d{3,4}E?-[^/]+/[^/]+$",
|
|
96
|
-
"hooks": [
|
|
97
|
-
{
|
|
98
|
-
"type": "command",
|
|
99
|
-
"command": "bash -c 'W=\"${CLAUDE_PLUGIN_ROOT}/hooks/universal/fail-fast-wrapper.sh\"; S=\"${CLAUDE_PLUGIN_ROOT}/hooks/v2/guards/increment-root-guard.sh\"; [[ -x \"$W\" ]] && exec \"$W\" \"$S\" || (cat >/dev/null && printf \"{\\\"decision\\\":\\\"allow\\\"}\")'"
|
|
100
|
-
}
|
|
101
|
-
]
|
|
102
|
-
},
|
|
103
|
-
{
|
|
104
|
-
"matcher": "Write",
|
|
105
|
-
"matcher_content": "\\.specweave/docs/internal/specs/[^/]+/",
|
|
106
|
-
"hooks": [
|
|
107
|
-
{
|
|
108
|
-
"type": "command",
|
|
109
|
-
"command": "bash -c 'W=\"${CLAUDE_PLUGIN_ROOT}/hooks/universal/fail-fast-wrapper.sh\"; S=\"${CLAUDE_PLUGIN_ROOT}/hooks/project-folder-guard.sh\"; [[ -x \"$W\" ]] && exec \"$W\" \"$S\" || (cat >/dev/null && printf \"{\\\"decision\\\":\\\"allow\\\"}\")'"
|
|
110
|
-
}
|
|
111
|
-
]
|
|
112
|
-
},
|
|
113
54
|
{
|
|
114
55
|
"matcher": "Edit|Write",
|
|
115
56
|
"matcher_content": "/src/.*\\.ts$",
|
|
@@ -119,16 +60,6 @@
|
|
|
119
60
|
"command": "bash -c 'W=\"${CLAUDE_PLUGIN_ROOT}/hooks/universal/fail-fast-wrapper.sh\"; S=\"${CLAUDE_PLUGIN_ROOT}/hooks/config-env-separator.sh\"; [[ -x \"$W\" ]] && exec \"$W\" \"$S\" || (cat >/dev/null && printf \"{\\\"decision\\\":\\\"allow\\\"}\")'"
|
|
120
61
|
}
|
|
121
62
|
]
|
|
122
|
-
},
|
|
123
|
-
{
|
|
124
|
-
"matcher": "Edit|Write",
|
|
125
|
-
"matcher_content": "plugins/specweave-github/lib/.*issue.*builder\\.ts$",
|
|
126
|
-
"hooks": [
|
|
127
|
-
{
|
|
128
|
-
"type": "command",
|
|
129
|
-
"command": "bash -c 'W=\"${CLAUDE_PLUGIN_ROOT}/hooks/universal/fail-fast-wrapper.sh\"; S=\"${CLAUDE_PLUGIN_ROOT}/hooks/github-metadata-guard.sh\"; [[ -x \"$W\" ]] && exec \"$W\" \"$S\" || (cat >/dev/null && printf \"{\\\"decision\\\":\\\"allow\\\"}\")'"
|
|
130
|
-
}
|
|
131
|
-
]
|
|
132
63
|
}
|
|
133
64
|
],
|
|
134
65
|
"PostToolUse": [
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
#!/bin/bash
|
|
2
|
+
# project-bridge-handler.sh - Bridge increment events to project-level EDA
|
|
3
|
+
#
|
|
4
|
+
# This handler connects the increment-level EDA (hooks v2) to the
|
|
5
|
+
# project-level EDA (ProjectRegistry + Adapters).
|
|
6
|
+
#
|
|
7
|
+
# Events bridged:
|
|
8
|
+
# - increment.created -> May create project labels in GitHub
|
|
9
|
+
# - increment.done -> Triggers project sync to all external tools
|
|
10
|
+
# - increment.archived -> Updates project sync status
|
|
11
|
+
# - increment.reopened -> Triggers project sync
|
|
12
|
+
#
|
|
13
|
+
# Architecture:
|
|
14
|
+
# [Increment Event] -> [This Handler] -> [project-bridge.js] -> [ProjectService]
|
|
15
|
+
# |
|
|
16
|
+
# v
|
|
17
|
+
# [ProjectEventBus]
|
|
18
|
+
# |
|
|
19
|
+
# +----------------+----------------+
|
|
20
|
+
# v v v
|
|
21
|
+
# [GitHub] [ADO] [JIRA]
|
|
22
|
+
# Adapter Adapter Adapter
|
|
23
|
+
#
|
|
24
|
+
# IMPORTANT: Never crash Claude, always exit 0
|
|
25
|
+
set +e
|
|
26
|
+
|
|
27
|
+
[[ "${SPECWEAVE_DISABLE_HOOKS:-0}" == "1" ]] && exit 0
|
|
28
|
+
|
|
29
|
+
EVENT_TYPE="${1:-}"
|
|
30
|
+
EVENT_DATA="${2:-}"
|
|
31
|
+
|
|
32
|
+
[[ -z "$EVENT_TYPE" ]] && exit 0
|
|
33
|
+
[[ -z "$EVENT_DATA" ]] && exit 0
|
|
34
|
+
|
|
35
|
+
# Find project root
|
|
36
|
+
PROJECT_ROOT="$PWD"
|
|
37
|
+
while [[ "$PROJECT_ROOT" != "/" ]] && [[ ! -d "$PROJECT_ROOT/.specweave" ]]; do
|
|
38
|
+
PROJECT_ROOT=$(dirname "$PROJECT_ROOT")
|
|
39
|
+
done
|
|
40
|
+
[[ ! -d "$PROJECT_ROOT/.specweave" ]] && exit 0
|
|
41
|
+
|
|
42
|
+
# Throttle: max once per 2 minutes per increment for project sync
|
|
43
|
+
# (More aggressive throttle since this triggers external API calls)
|
|
44
|
+
INC_ID="${EVENT_DATA%%:*}" # Extract increment ID from INC_ID:US_ID format
|
|
45
|
+
STATE_DIR="$PROJECT_ROOT/.specweave/state"
|
|
46
|
+
THROTTLE_FILE="$STATE_DIR/.project-bridge-$INC_ID"
|
|
47
|
+
THROTTLE_WINDOW=120 # 2 minutes
|
|
48
|
+
mkdir -p "$STATE_DIR" 2>/dev/null
|
|
49
|
+
|
|
50
|
+
if [[ -f "$THROTTLE_FILE" ]]; then
|
|
51
|
+
if [[ "$(uname)" == "Darwin" ]]; then
|
|
52
|
+
AGE=$(($(date +%s) - $(stat -f %m "$THROTTLE_FILE" 2>/dev/null || echo 0)))
|
|
53
|
+
else
|
|
54
|
+
AGE=$(($(date +%s) - $(stat -c %Y "$THROTTLE_FILE" 2>/dev/null || echo 0)))
|
|
55
|
+
fi
|
|
56
|
+
[[ $AGE -lt $THROTTLE_WINDOW ]] && exit 0
|
|
57
|
+
fi
|
|
58
|
+
touch "$THROTTLE_FILE"
|
|
59
|
+
|
|
60
|
+
# Log event
|
|
61
|
+
LOG_FILE="$PROJECT_ROOT/.specweave/logs/hooks.log"
|
|
62
|
+
mkdir -p "$(dirname "$LOG_FILE")" 2>/dev/null
|
|
63
|
+
echo "[$(date '+%Y-%m-%d %H:%M:%S')] project-bridge-handler: $EVENT_TYPE $EVENT_DATA" >> "$LOG_FILE" 2>/dev/null
|
|
64
|
+
|
|
65
|
+
# Find the bridge script
|
|
66
|
+
BRIDGE_SCRIPT=""
|
|
67
|
+
for path in \
|
|
68
|
+
"$PROJECT_ROOT/dist/plugins/specweave/lib/hooks/project-bridge.js" \
|
|
69
|
+
"$PROJECT_ROOT/plugins/specweave/lib/hooks/project-bridge.js" \
|
|
70
|
+
"${CLAUDE_PLUGIN_ROOT:-}/lib/hooks/project-bridge.js"; do
|
|
71
|
+
[[ -f "$path" ]] && { BRIDGE_SCRIPT="$path"; break; }
|
|
72
|
+
done
|
|
73
|
+
|
|
74
|
+
# Cross-platform timeout wrapper
|
|
75
|
+
run_with_timeout() {
|
|
76
|
+
local timeout_secs="$1"
|
|
77
|
+
shift
|
|
78
|
+
if command -v timeout >/dev/null 2>&1; then
|
|
79
|
+
timeout "$timeout_secs" "$@" 2>/dev/null || true
|
|
80
|
+
elif command -v gtimeout >/dev/null 2>&1; then
|
|
81
|
+
gtimeout "$timeout_secs" "$@" 2>/dev/null || true
|
|
82
|
+
else
|
|
83
|
+
"$@" 2>/dev/null || true
|
|
84
|
+
fi
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
# Run bridge script if available
|
|
88
|
+
if [[ -n "$BRIDGE_SCRIPT" ]]; then
|
|
89
|
+
cd "$PROJECT_ROOT" || exit 0
|
|
90
|
+
# Run with 60s timeout (external API calls can be slow)
|
|
91
|
+
run_with_timeout 60 node "$BRIDGE_SCRIPT" "$EVENT_TYPE" "$EVENT_DATA" >> "$LOG_FILE" 2>&1 &
|
|
92
|
+
else
|
|
93
|
+
echo "[$(date '+%Y-%m-%d %H:%M:%S')] project-bridge-handler: No bridge script found, skipping" >> "$LOG_FILE" 2>/dev/null
|
|
94
|
+
fi
|
|
95
|
+
|
|
96
|
+
exit 0
|
|
@@ -4,10 +4,14 @@
|
|
|
4
4
|
#
|
|
5
5
|
# Usage: processor.sh [--daemon]
|
|
6
6
|
#
|
|
7
|
-
# Event routing:
|
|
8
|
-
# - increment.created/done/archived/reopened -> living-specs-handler
|
|
9
|
-
# - user-story.completed/reopened -> status-line-handler
|
|
7
|
+
# Event routing (EDA v2):
|
|
8
|
+
# - increment.created/done/archived/reopened -> living-specs-handler + status-line-handler + project-bridge-handler
|
|
9
|
+
# - user-story.completed/reopened -> status-line-handler + project-bridge-handler
|
|
10
10
|
# - task.updated/spec.updated -> living-docs-handler (legacy)
|
|
11
|
+
# - metadata.changed -> github-sync-handler
|
|
12
|
+
#
|
|
13
|
+
# The project-bridge-handler connects increment events to project-level EDA,
|
|
14
|
+
# enabling automatic sync to GitHub, ADO, and JIRA via ProjectService.
|
|
11
15
|
#
|
|
12
16
|
# Self-terminates after 60s of idle
|
|
13
17
|
#
|
|
@@ -148,16 +152,20 @@ process_event() {
|
|
|
148
152
|
# EDA Event Routing (new architecture)
|
|
149
153
|
# ========================================
|
|
150
154
|
|
|
151
|
-
# Lifecycle events -> living-specs-handler
|
|
155
|
+
# Lifecycle events -> living-specs-handler + status-line-handler + project-bridge-handler
|
|
152
156
|
increment.created|increment.done|increment.archived|increment.reopened)
|
|
153
157
|
run_handler "$HANDLER_DIR/living-specs-handler.sh" "$EVENT_TYPE" "$EVENT_DATA"
|
|
154
158
|
# Also update status line on lifecycle changes
|
|
155
159
|
run_handler "$HANDLER_DIR/status-line-handler.sh" "$EVENT_TYPE" "$EVENT_DATA"
|
|
160
|
+
# Bridge to project-level EDA (triggers sync to GitHub/ADO/JIRA)
|
|
161
|
+
run_handler "$HANDLER_DIR/project-bridge-handler.sh" "$EVENT_TYPE" "$EVENT_DATA"
|
|
156
162
|
;;
|
|
157
163
|
|
|
158
|
-
# User story events -> status-line-handler
|
|
164
|
+
# User story events -> status-line-handler + project-bridge-handler
|
|
159
165
|
user-story.completed|user-story.reopened)
|
|
160
166
|
run_handler "$HANDLER_DIR/status-line-handler.sh" "$EVENT_TYPE" "$EVENT_DATA"
|
|
167
|
+
# Bridge to project-level EDA (may trigger issue updates)
|
|
168
|
+
run_handler "$HANDLER_DIR/project-bridge-handler.sh" "$EVENT_TYPE" "$EVENT_DATA"
|
|
161
169
|
;;
|
|
162
170
|
|
|
163
171
|
# ========================================
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
/**
|
|
3
|
+
* project-bridge.js - Bridge increment events to project-level EDA
|
|
4
|
+
*
|
|
5
|
+
* Called by project-bridge-handler.sh to connect increment-level
|
|
6
|
+
* events to the ProjectService and trigger project sync.
|
|
7
|
+
*
|
|
8
|
+
* Usage: node project-bridge.js <event-type> <event-data>
|
|
9
|
+
*
|
|
10
|
+
* Event types:
|
|
11
|
+
* - increment.created - New increment created
|
|
12
|
+
* - increment.done - Increment completed
|
|
13
|
+
* - increment.archived - Increment archived
|
|
14
|
+
* - increment.reopened - Increment reopened
|
|
15
|
+
* - user-story.completed - User story completed
|
|
16
|
+
* - user-story.reopened - User story reopened
|
|
17
|
+
*/
|
|
18
|
+
|
|
19
|
+
import { ProjectService } from '../../../../dist/src/core/project/project-service.js';
|
|
20
|
+
import { consoleLogger } from '../vendor/utils/logger.js';
|
|
21
|
+
|
|
22
|
+
/**
|
|
23
|
+
* Bridge increment event to project-level EDA
|
|
24
|
+
*/
|
|
25
|
+
async function bridgeIncrementEvent(eventType, eventData) {
|
|
26
|
+
try {
|
|
27
|
+
console.log(`[project-bridge] Processing: ${eventType} ${eventData}`);
|
|
28
|
+
|
|
29
|
+
const projectRoot = process.cwd();
|
|
30
|
+
const service = ProjectService.getInstance(projectRoot, consoleLogger);
|
|
31
|
+
|
|
32
|
+
// Initialize adapters (no-op if already initialized)
|
|
33
|
+
await service.initialize();
|
|
34
|
+
|
|
35
|
+
// Emit the increment event to project-level EDA
|
|
36
|
+
await service.emitIncrementEvent(eventType, eventData);
|
|
37
|
+
|
|
38
|
+
console.log(`[project-bridge] Successfully bridged: ${eventType}`);
|
|
39
|
+
return { success: true };
|
|
40
|
+
} catch (error) {
|
|
41
|
+
console.error(`[project-bridge] Error: ${error.message}`);
|
|
42
|
+
return { success: false, error: error.message };
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
// Main entry point
|
|
47
|
+
const isMainModule = import.meta.url === `file://${process.argv[1]}`;
|
|
48
|
+
|
|
49
|
+
if (isMainModule) {
|
|
50
|
+
const eventType = process.argv[2];
|
|
51
|
+
const eventData = process.argv[3];
|
|
52
|
+
|
|
53
|
+
if (!eventType || !eventData) {
|
|
54
|
+
console.error('Usage: node project-bridge.js <event-type> <event-data>');
|
|
55
|
+
console.error('Example: node project-bridge.js increment.done 0145-project-registry');
|
|
56
|
+
process.exit(1);
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
bridgeIncrementEvent(eventType, eventData)
|
|
60
|
+
.then((result) => {
|
|
61
|
+
if (result.success) {
|
|
62
|
+
process.exit(0);
|
|
63
|
+
} else {
|
|
64
|
+
// Non-blocking error - don't fail the hook
|
|
65
|
+
console.error(`[project-bridge] Bridge failed: ${result.error}`);
|
|
66
|
+
process.exit(0);
|
|
67
|
+
}
|
|
68
|
+
})
|
|
69
|
+
.catch((error) => {
|
|
70
|
+
console.error('[project-bridge] Fatal error:', error);
|
|
71
|
+
// Non-blocking - don't fail the hook
|
|
72
|
+
process.exit(0);
|
|
73
|
+
});
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
export { bridgeIncrementEvent };
|
|
File without changes
|
|
File without changes
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
* Handles CRUD operations for increment metadata (status, type, timestamps).
|
|
5
5
|
* Part of increment 0007: Smart Status Management
|
|
6
6
|
*/
|
|
7
|
-
import { IncrementMetadata, IncrementMetadataExtended, IncrementStatus, IncrementType } from '../types/increment-metadata.js';
|
|
7
|
+
import { IncrementMetadata, IncrementMetadataExtended, IncrementMetadataV2, IncrementStatus, IncrementType, SyncTarget } from '../types/increment-metadata.js';
|
|
8
8
|
import { Logger } from '../../utils/logger.js';
|
|
9
9
|
/**
|
|
10
10
|
* Error thrown when metadata operations fail
|
|
@@ -163,5 +163,71 @@ export declare class MetadataManager {
|
|
|
163
163
|
* Get human-readable status transition error message
|
|
164
164
|
*/
|
|
165
165
|
static getTransitionError(from: IncrementStatus, to: IncrementStatus): string;
|
|
166
|
+
/**
|
|
167
|
+
* Set the external tool sync target for an increment
|
|
168
|
+
*
|
|
169
|
+
* This explicitly specifies which sync profile the increment uses.
|
|
170
|
+
* The sync target provides audit trail and deterministic sync behavior.
|
|
171
|
+
*
|
|
172
|
+
* @param incrementId - Increment ID
|
|
173
|
+
* @param syncTarget - Sync target configuration
|
|
174
|
+
* @param rootDir - Optional root directory
|
|
175
|
+
* @returns Updated metadata
|
|
176
|
+
*
|
|
177
|
+
* @example
|
|
178
|
+
* ```typescript
|
|
179
|
+
* MetadataManager.setSyncTarget('0142-feature', {
|
|
180
|
+
* profileId: 'github-frontend',
|
|
181
|
+
* provider: 'github',
|
|
182
|
+
* derivedFrom: 'project-mapping',
|
|
183
|
+
* setAt: new Date().toISOString(),
|
|
184
|
+
* sourceProjectId: 'frontend-app'
|
|
185
|
+
* });
|
|
186
|
+
* ```
|
|
187
|
+
*/
|
|
188
|
+
static setSyncTarget(incrementId: string, syncTarget: SyncTarget, rootDir?: string): IncrementMetadataV2;
|
|
189
|
+
/**
|
|
190
|
+
* Get the sync target for an increment
|
|
191
|
+
*
|
|
192
|
+
* @param incrementId - Increment ID
|
|
193
|
+
* @param rootDir - Optional root directory
|
|
194
|
+
* @returns Sync target or undefined if not set
|
|
195
|
+
*/
|
|
196
|
+
static getSyncTarget(incrementId: string, rootDir?: string): SyncTarget | undefined;
|
|
197
|
+
/**
|
|
198
|
+
* Clear the sync target for an increment
|
|
199
|
+
*
|
|
200
|
+
* Use this when the external tool configuration changes and
|
|
201
|
+
* the increment needs to be re-resolved.
|
|
202
|
+
*
|
|
203
|
+
* @param incrementId - Increment ID
|
|
204
|
+
* @param rootDir - Optional root directory
|
|
205
|
+
* @returns Updated metadata
|
|
206
|
+
*/
|
|
207
|
+
static clearSyncTarget(incrementId: string, rootDir?: string): IncrementMetadataV2;
|
|
208
|
+
/**
|
|
209
|
+
* Check if increment has a sync target configured
|
|
210
|
+
*
|
|
211
|
+
* @param incrementId - Increment ID
|
|
212
|
+
* @param rootDir - Optional root directory
|
|
213
|
+
* @returns true if sync target is set
|
|
214
|
+
*/
|
|
215
|
+
static hasSyncTarget(incrementId: string, rootDir?: string): boolean;
|
|
216
|
+
/**
|
|
217
|
+
* Get all increments with a specific sync provider
|
|
218
|
+
*
|
|
219
|
+
* Useful for bulk operations on all GitHub/JIRA/ADO synced increments.
|
|
220
|
+
*
|
|
221
|
+
* @param provider - Provider type ('github', 'jira', 'ado')
|
|
222
|
+
* @returns Array of increments with that provider configured
|
|
223
|
+
*/
|
|
224
|
+
static getByProvider(provider: 'github' | 'jira' | 'ado'): IncrementMetadataV2[];
|
|
225
|
+
/**
|
|
226
|
+
* Get all increments with a specific sync profile
|
|
227
|
+
*
|
|
228
|
+
* @param profileId - Profile ID from config.sync.profiles
|
|
229
|
+
* @returns Array of increments using that profile
|
|
230
|
+
*/
|
|
231
|
+
static getByProfile(profileId: string): IncrementMetadataV2[];
|
|
166
232
|
}
|
|
167
233
|
//# sourceMappingURL=metadata-manager.d.ts.map
|