specweave 0.24.11 → 0.24.13

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 (55) hide show
  1. package/CLAUDE.md +158 -10
  2. package/dist/plugins/specweave-github/lib/github-client-v2.d.ts +28 -0
  3. package/dist/plugins/specweave-github/lib/github-client-v2.d.ts.map +1 -1
  4. package/dist/plugins/specweave-github/lib/github-client-v2.js +47 -0
  5. package/dist/plugins/specweave-github/lib/github-client-v2.js.map +1 -1
  6. package/dist/src/cli/commands/init.d.ts.map +1 -1
  7. package/dist/src/cli/commands/init.js +15 -7
  8. package/dist/src/cli/commands/init.js.map +1 -1
  9. package/dist/src/cli/helpers/issue-tracker/github-multi-repo.d.ts.map +1 -1
  10. package/dist/src/cli/helpers/issue-tracker/github-multi-repo.js +13 -1
  11. package/dist/src/cli/helpers/issue-tracker/github-multi-repo.js.map +1 -1
  12. package/dist/src/cli/helpers/issue-tracker/types.d.ts +1 -1
  13. package/dist/src/cli/helpers/issue-tracker/types.d.ts.map +1 -1
  14. package/dist/src/core/config/types.d.ts +46 -12
  15. package/dist/src/core/config/types.d.ts.map +1 -1
  16. package/dist/src/core/config/types.js +0 -5
  17. package/dist/src/core/config/types.js.map +1 -1
  18. package/dist/src/core/repo-structure/repo-bulk-discovery.d.ts.map +1 -1
  19. package/dist/src/core/repo-structure/repo-bulk-discovery.js +20 -5
  20. package/dist/src/core/repo-structure/repo-bulk-discovery.js.map +1 -1
  21. package/dist/src/core/repo-structure/repo-structure-manager.d.ts.map +1 -1
  22. package/dist/src/core/repo-structure/repo-structure-manager.js +29 -14
  23. package/dist/src/core/repo-structure/repo-structure-manager.js.map +1 -1
  24. package/dist/src/sync/format-preservation-sync.d.ts.map +1 -1
  25. package/dist/src/sync/format-preservation-sync.js +23 -5
  26. package/dist/src/sync/format-preservation-sync.js.map +1 -1
  27. package/dist/src/sync/frontmatter-updater.d.ts +57 -0
  28. package/dist/src/sync/frontmatter-updater.d.ts.map +1 -0
  29. package/dist/src/sync/frontmatter-updater.js +147 -0
  30. package/dist/src/sync/frontmatter-updater.js.map +1 -0
  31. package/dist/src/sync/sync-coordinator.d.ts +22 -1
  32. package/dist/src/sync/sync-coordinator.d.ts.map +1 -1
  33. package/dist/src/sync/sync-coordinator.js +268 -21
  34. package/dist/src/sync/sync-coordinator.js.map +1 -1
  35. package/dist/src/types/living-docs-us-file.d.ts +18 -0
  36. package/dist/src/types/living-docs-us-file.d.ts.map +1 -1
  37. package/dist/src/types/living-docs-us-file.js.map +1 -1
  38. package/package.json +1 -1
  39. package/plugins/specweave/.claude-plugin/plugin.json +17 -11
  40. package/plugins/specweave/agents/architect/AGENT.md +115 -45
  41. package/plugins/specweave/agents/test-aware-planner/AGENT.md +76 -6
  42. package/plugins/specweave/hooks/lib/update-status-line.sh +19 -0
  43. package/plugins/specweave/hooks/post-edit-write-consolidated.sh +335 -0
  44. package/plugins/specweave/hooks/post-metadata-change.sh +40 -6
  45. package/plugins/specweave/hooks/post-task-completion.sh +93 -9
  46. package/plugins/specweave/hooks/pre-edit-spec.sh +0 -11
  47. package/plugins/specweave/hooks/pre-edit-write-consolidated.sh +188 -0
  48. package/plugins/specweave/hooks/pre-task-completion.sh +11 -0
  49. package/plugins/specweave/hooks/pre-write-spec.sh +0 -11
  50. package/plugins/specweave/lib/hooks/consolidated-sync.js +61 -3
  51. package/plugins/specweave-github/hooks/.specweave/logs/hooks-debug.log +294 -0
  52. package/plugins/specweave-github/lib/github-client-v2.js +46 -0
  53. package/plugins/specweave-github/lib/github-client-v2.ts +65 -0
  54. package/plugins/specweave-release/commands/specweave-release-npm.md +130 -2
  55. package/plugins/specweave-release/hooks/.specweave/logs/dora-tracking.log +60 -0
@@ -0,0 +1,147 @@
1
+ /**
2
+ * Frontmatter Updater (Layer 1 Idempotency Backfill)
3
+ *
4
+ * Updates user story frontmatter with GitHub issue information
5
+ * after issues are created. This provides the fastest idempotency
6
+ * check (<1ms) for future syncs.
7
+ *
8
+ * Part of 3-layer idempotency strategy:
9
+ * - Layer 1: User story frontmatter (fastest, <1ms)
10
+ * - Layer 2: Increment metadata.json (fast, <5ms)
11
+ * - Layer 3: GitHub API query (slow, 500-2000ms)
12
+ */
13
+ import { readFile, writeFile, readdir } from 'fs/promises';
14
+ import { existsSync } from 'fs';
15
+ import path from 'path';
16
+ import yaml from 'yaml';
17
+ import { consoleLogger } from '../utils/logger.js';
18
+ export class FrontmatterUpdater {
19
+ constructor(options = {}) {
20
+ this.logger = options.logger ?? consoleLogger;
21
+ }
22
+ /**
23
+ * Update user story frontmatter with GitHub issue information
24
+ *
25
+ * CRITICAL: This is Layer 1 backfill for 3-layer idempotency
26
+ * Must be called after GitHub issue creation to cache issue number
27
+ */
28
+ async updateUserStoryFrontmatter(options) {
29
+ try {
30
+ const { projectRoot, featureId, userStoryId, githubIssue } = options;
31
+ // Construct user story file path
32
+ const userStoryPath = await this.getUserStoryPath(projectRoot, featureId, userStoryId);
33
+ if (!existsSync(userStoryPath)) {
34
+ this.logger.log(`⚠️ User story file not found: ${userStoryPath}`);
35
+ return false;
36
+ }
37
+ // Read current content
38
+ const content = await readFile(userStoryPath, 'utf-8');
39
+ // Parse frontmatter
40
+ const frontmatterMatch = content.match(/^---\n([\s\S]*?)\n---/);
41
+ if (!frontmatterMatch) {
42
+ this.logger.log(`⚠️ No frontmatter found in ${userStoryPath}`);
43
+ return false;
44
+ }
45
+ const frontmatterText = frontmatterMatch[1];
46
+ const frontmatter = yaml.parse(frontmatterText);
47
+ // Check if already has GitHub info (avoid overwriting)
48
+ if (frontmatter.external_tools?.github?.number) {
49
+ this.logger.log(` ℹ️ ${userStoryId} frontmatter already has GitHub issue #${frontmatter.external_tools.github.number}`);
50
+ return true; // Already backfilled
51
+ }
52
+ // Add external_tools.github section
53
+ if (!frontmatter.external_tools) {
54
+ frontmatter.external_tools = {};
55
+ }
56
+ frontmatter.external_tools.github = {
57
+ number: githubIssue.number,
58
+ url: githubIssue.url,
59
+ created_at: githubIssue.createdAt,
60
+ };
61
+ // Serialize updated frontmatter
62
+ const newFrontmatter = yaml.stringify(frontmatter);
63
+ // Replace frontmatter in content
64
+ const newContent = content.replace(/^---\n[\s\S]*?\n---/, `---\n${newFrontmatter.trim()}\n---`);
65
+ // Write back to file
66
+ await writeFile(userStoryPath, newContent, 'utf-8');
67
+ this.logger.log(` ✅ Updated ${userStoryId} frontmatter with issue #${githubIssue.number}`);
68
+ return true;
69
+ }
70
+ catch (error) {
71
+ this.logger.error(`❌ Failed to update frontmatter for ${options.userStoryId}:`, error);
72
+ return false;
73
+ }
74
+ }
75
+ /**
76
+ * Batch update multiple user story frontmatters
77
+ */
78
+ async batchUpdateFrontmatters(projectRoot, featureId, updates) {
79
+ let success = 0;
80
+ let failed = 0;
81
+ for (const update of updates) {
82
+ const result = await this.updateUserStoryFrontmatter({
83
+ projectRoot,
84
+ featureId,
85
+ userStoryId: update.userStoryId,
86
+ githubIssue: update.githubIssue,
87
+ });
88
+ if (result) {
89
+ success++;
90
+ }
91
+ else {
92
+ failed++;
93
+ }
94
+ }
95
+ return { success, failed };
96
+ }
97
+ /**
98
+ * Get user story file path from project root, feature ID, and user story ID
99
+ */
100
+ async getUserStoryPath(projectRoot, featureId, userStoryId) {
101
+ // Convert user story ID to file name (US-001 → us-001-*.md)
102
+ const usPrefix = userStoryId.toLowerCase();
103
+ // Search in .specweave/docs/internal/specs/specweave/{featureId}/
104
+ const featurePath = path.join(projectRoot, '.specweave/docs/internal/specs/specweave', featureId);
105
+ if (!existsSync(featurePath)) {
106
+ throw new Error(`Feature directory not found: ${featurePath}`);
107
+ }
108
+ // Find file matching us-* pattern (use async readdir)
109
+ const files = await readdir(featurePath);
110
+ const matchingFile = files.find((file) => file.startsWith(usPrefix) && file.endsWith('.md'));
111
+ if (!matchingFile) {
112
+ throw new Error(`User story file not found for ${userStoryId} in ${featurePath}`);
113
+ }
114
+ return path.join(featurePath, matchingFile);
115
+ }
116
+ /**
117
+ * Read GitHub issue info from user story frontmatter (Layer 1 check)
118
+ */
119
+ async getGitHubIssueFromFrontmatter(projectRoot, featureId, userStoryId) {
120
+ try {
121
+ const userStoryPath = await this.getUserStoryPath(projectRoot, featureId, userStoryId);
122
+ if (!existsSync(userStoryPath)) {
123
+ return null;
124
+ }
125
+ const content = await readFile(userStoryPath, 'utf-8');
126
+ const frontmatterMatch = content.match(/^---\n([\s\S]*?)\n---/);
127
+ if (!frontmatterMatch) {
128
+ return null;
129
+ }
130
+ const frontmatter = yaml.parse(frontmatterMatch[1]);
131
+ const githubInfo = frontmatter.external_tools?.github;
132
+ if (!githubInfo || !githubInfo.number) {
133
+ return null;
134
+ }
135
+ return {
136
+ number: githubInfo.number,
137
+ url: githubInfo.url,
138
+ createdAt: githubInfo.created_at || new Date().toISOString(),
139
+ };
140
+ }
141
+ catch (error) {
142
+ this.logger.error(`Failed to read GitHub info from ${userStoryId} frontmatter:`, error);
143
+ return null;
144
+ }
145
+ }
146
+ }
147
+ //# sourceMappingURL=frontmatter-updater.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"frontmatter-updater.js","sourceRoot":"","sources":["../../../src/sync/frontmatter-updater.ts"],"names":[],"mappings":"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"}
@@ -4,6 +4,7 @@
4
4
  * High-level coordinator that integrates FormatPreservationSyncService
5
5
  * with living docs sync workflow. Called by post-task-completion hook.
6
6
  */
7
+ import { GitHubIssue } from '../../plugins/specweave-github/lib/types.js';
7
8
  import { Logger } from '../utils/logger.js';
8
9
  export interface SyncCoordinatorOptions {
9
10
  projectRoot: string;
@@ -13,14 +14,34 @@ export interface SyncCoordinatorOptions {
13
14
  export interface SyncResult {
14
15
  success: boolean;
15
16
  userStoriesSynced: number;
16
- syncMode: 'comment-only' | 'full-sync' | 'read-only' | 'manual-only';
17
+ syncMode: 'comment-only' | 'full-sync' | 'read-only' | 'manual-only' | 'living-docs-only' | 'external-disabled';
17
18
  errors: string[];
18
19
  }
19
20
  export declare class SyncCoordinator {
20
21
  private projectRoot;
21
22
  private incrementId;
22
23
  private logger;
24
+ private frontmatterUpdater;
23
25
  constructor(options: SyncCoordinatorOptions);
26
+ /**
27
+ * Create GitHub issues for all User Stories in the feature (NEW in v0.25.0)
28
+ *
29
+ * This is the AUTOMATIC GitHub sync that runs when increment completes.
30
+ * Creates issues for User Stories that don't have GitHub issues yet.
31
+ *
32
+ * Uses 3-layer idempotency:
33
+ * - Layer 1: Check user story frontmatter (fastest, <1ms)
34
+ * - Layer 2: Check increment metadata.json (fast, <5ms)
35
+ * - Layer 3: Query GitHub API (slow but authoritative, 500-2000ms)
36
+ *
37
+ * @param config - Project configuration
38
+ * @returns Array of created issues
39
+ */
40
+ createGitHubIssuesForUserStories(config: any): Promise<GitHubIssue[]>;
41
+ /**
42
+ * Format user story content for GitHub issue body
43
+ */
44
+ private formatUserStoryBody;
24
45
  /**
25
46
  * Sync increment completion to external tools using format preservation
26
47
  */
@@ -1 +1 @@
1
- {"version":3,"file":"sync-coordinator.d.ts","sourceRoot":"","sources":["../../../src/sync/sync-coordinator.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAQH,OAAO,EAAE,MAAM,EAAiB,MAAM,oBAAoB,CAAC;AAE3D,MAAM,WAAW,sBAAsB;IACrC,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,UAAU;IACzB,OAAO,EAAE,OAAO,CAAC;IACjB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,QAAQ,EAAE,cAAc,GAAG,WAAW,GAAG,WAAW,GAAG,aAAa,CAAC;IACrE,MAAM,EAAE,MAAM,EAAE,CAAC;CAClB;AAED,qBAAa,eAAe;IAC1B,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,MAAM,CAAS;gBAEX,OAAO,EAAE,sBAAsB;IAM3C;;OAEG;IACG,uBAAuB,IAAI,OAAO,CAAC,UAAU,CAAC;IA0FpD;;OAEG;YACW,aAAa;IAyD3B;;OAEG;YACW,kBAAkB;IAmEhC;;OAEG;YACW,2BAA2B;IAqEzC;;OAEG;YACW,UAAU;IAWxB;;OAEG;YACW,gBAAgB;CAyB/B"}
1
+ {"version":3,"file":"sync-coordinator.d.ts","sourceRoot":"","sources":["../../../src/sync/sync-coordinator.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAQH,OAAO,EAAE,WAAW,EAAE,MAAM,6CAA6C,CAAC;AAC1E,OAAO,EAAE,MAAM,EAAiB,MAAM,oBAAoB,CAAC;AAG3D,MAAM,WAAW,sBAAsB;IACrC,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,UAAU;IACzB,OAAO,EAAE,OAAO,CAAC;IACjB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,QAAQ,EAAE,cAAc,GAAG,WAAW,GAAG,WAAW,GAAG,aAAa,GAAG,kBAAkB,GAAG,mBAAmB,CAAC;IAChH,MAAM,EAAE,MAAM,EAAE,CAAC;CAClB;AAED,qBAAa,eAAe;IAC1B,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,kBAAkB,CAAqB;gBAEnC,OAAO,EAAE,sBAAsB;IAO3C;;;;;;;;;;;;;OAaG;IACG,gCAAgC,CAAC,MAAM,EAAE,GAAG,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC;IAwN3E;;OAEG;IACH,OAAO,CAAC,mBAAmB;IAuB3B;;OAEG;IACG,uBAAuB,IAAI,OAAO,CAAC,UAAU,CAAC;IA6HpD;;OAEG;YACW,aAAa;IAyD3B;;OAEG;YACW,kBAAkB;IAmEhC;;OAEG;YACW,2BAA2B;IAsEzC;;OAEG;YACW,UAAU;IAWxB;;OAEG;YACW,gBAAgB;CAyB/B"}
@@ -4,18 +4,226 @@
4
4
  * High-level coordinator that integrates FormatPreservationSyncService
5
5
  * with living docs sync workflow. Called by post-task-completion hook.
6
6
  */
7
- import fs from 'fs-extra';
7
+ import { promises as fs, existsSync } from 'fs';
8
8
  import path from 'path';
9
9
  import yaml from 'yaml';
10
10
  import { getOrigin } from '../types/living-docs-us-file.js';
11
11
  import { FormatPreservationSyncService } from './format-preservation-sync.js';
12
12
  import { GitHubClientV2 } from '../../plugins/specweave-github/lib/github-client-v2.js';
13
13
  import { consoleLogger } from '../utils/logger.js';
14
+ import { FrontmatterUpdater } from './frontmatter-updater.js';
14
15
  export class SyncCoordinator {
15
16
  constructor(options) {
16
17
  this.projectRoot = options.projectRoot;
17
18
  this.incrementId = options.incrementId;
18
19
  this.logger = options.logger ?? consoleLogger;
20
+ this.frontmatterUpdater = new FrontmatterUpdater({ logger: this.logger });
21
+ }
22
+ /**
23
+ * Create GitHub issues for all User Stories in the feature (NEW in v0.25.0)
24
+ *
25
+ * This is the AUTOMATIC GitHub sync that runs when increment completes.
26
+ * Creates issues for User Stories that don't have GitHub issues yet.
27
+ *
28
+ * Uses 3-layer idempotency:
29
+ * - Layer 1: Check user story frontmatter (fastest, <1ms)
30
+ * - Layer 2: Check increment metadata.json (fast, <5ms)
31
+ * - Layer 3: Query GitHub API (slow but authoritative, 500-2000ms)
32
+ *
33
+ * @param config - Project configuration
34
+ * @returns Array of created issues
35
+ */
36
+ async createGitHubIssuesForUserStories(config) {
37
+ const createdIssues = [];
38
+ try {
39
+ // Load user stories for this increment
40
+ const userStories = await this.loadUserStoriesForIncrement();
41
+ if (userStories.length === 0) {
42
+ this.logger.log('📚 No user stories found for this increment');
43
+ return createdIssues;
44
+ }
45
+ this.logger.log(`📚 Found ${userStories.length} user story/stories for GitHub sync`);
46
+ // Get GitHub config
47
+ const githubConfig = config.sync?.github || {};
48
+ const repoInfo = await this.detectGitHubRepo(githubConfig);
49
+ if (!repoInfo) {
50
+ throw new Error('GitHub repository not configured');
51
+ }
52
+ const client = GitHubClientV2.fromRepo(repoInfo.owner, repoInfo.repo);
53
+ // Get feature ID from increment spec
54
+ const specFile = path.join(this.projectRoot, '.specweave/increments', this.incrementId, 'spec.md');
55
+ let featureId = '';
56
+ if (existsSync(specFile)) {
57
+ const content = await fs.readFile(specFile, 'utf-8');
58
+ const frontmatterMatch = content.match(/^---\n([\s\S]*?)\n---/);
59
+ if (frontmatterMatch) {
60
+ const frontmatter = yaml.parse(frontmatterMatch[1]);
61
+ featureId = frontmatter.feature_id || frontmatter.epic || frontmatter.feature || '';
62
+ }
63
+ }
64
+ if (!featureId) {
65
+ this.logger.log('⚠️ No feature ID found in increment spec - skipping GitHub sync');
66
+ return createdIssues;
67
+ }
68
+ // Try to find or create milestone for the feature
69
+ let milestoneNumber = null;
70
+ try {
71
+ const milestone = await client.createOrGetMilestone(`${featureId}: Automatic GitHub Sync`, `Feature milestone for ${featureId}`, 30 // 30 days from now
72
+ );
73
+ milestoneNumber = milestone.number;
74
+ this.logger.log(`🎯 Using milestone: ${milestone.title} (#${milestone.number})`);
75
+ }
76
+ catch (error) {
77
+ this.logger.log('⚠️ Could not create/get milestone, continuing without it');
78
+ }
79
+ // Create issue for each user story (with idempotency)
80
+ for (const usFile of userStories) {
81
+ try {
82
+ // LAYER 1: Check user story frontmatter for existing GitHub issue
83
+ const cachedIssue = await this.frontmatterUpdater.getGitHubIssueFromFrontmatter(this.projectRoot, featureId, usFile.id);
84
+ if (cachedIssue) {
85
+ this.logger.log(` ⏭️ ${usFile.id} - Issue #${cachedIssue.number} already exists (cached in frontmatter)`);
86
+ continue;
87
+ }
88
+ // LAYER 2: Check increment metadata.json
89
+ const metadataFile = path.join(this.projectRoot, '.specweave/increments', this.incrementId, 'metadata.json');
90
+ let existingIssue = null;
91
+ if (existsSync(metadataFile)) {
92
+ const metadata = JSON.parse(await fs.readFile(metadataFile, 'utf-8'));
93
+ const githubIssues = metadata.github?.issues || [];
94
+ const found = githubIssues.find((i) => i.userStory === usFile.id);
95
+ if (found) {
96
+ this.logger.log(` ⏭️ ${usFile.id} - Issue #${found.number} already exists (cached in metadata)`);
97
+ existingIssue = found.number;
98
+ // TODO: Backfill Layer 1 (update user story frontmatter)
99
+ continue;
100
+ }
101
+ }
102
+ // LAYER 3: Query GitHub API to check for existing issue
103
+ const searchTitle = `[${featureId}][${usFile.id}]`;
104
+ const existingOnGitHub = await client.searchIssueByTitle(searchTitle);
105
+ if (existingOnGitHub) {
106
+ this.logger.log(` ⏭️ ${usFile.id} - Issue #${existingOnGitHub.number} already exists on GitHub`);
107
+ // Backfill Layer 1 (frontmatter) and Layer 2 (metadata)
108
+ await this.frontmatterUpdater.updateUserStoryFrontmatter({
109
+ projectRoot: this.projectRoot,
110
+ featureId,
111
+ userStoryId: usFile.id,
112
+ githubIssue: {
113
+ number: existingOnGitHub.number,
114
+ url: existingOnGitHub.html_url,
115
+ createdAt: new Date().toISOString(),
116
+ },
117
+ });
118
+ // Backfill Layer 2 (metadata.json)
119
+ if (existsSync(metadataFile)) {
120
+ const metadata = JSON.parse(await fs.readFile(metadataFile, 'utf-8'));
121
+ if (!metadata.github) {
122
+ metadata.github = {};
123
+ }
124
+ if (!metadata.github.issues) {
125
+ metadata.github.issues = [];
126
+ }
127
+ // Check if not already in metadata
128
+ const existsInMetadata = metadata.github.issues.find((i) => i.userStory === usFile.id);
129
+ if (!existsInMetadata) {
130
+ metadata.github.issues.push({
131
+ userStory: usFile.id,
132
+ number: existingOnGitHub.number,
133
+ url: existingOnGitHub.html_url,
134
+ createdAt: new Date().toISOString(),
135
+ });
136
+ metadata.github.lastSync = new Date().toISOString();
137
+ await fs.writeFile(metadataFile, JSON.stringify(metadata, null, 2), 'utf-8');
138
+ }
139
+ }
140
+ continue;
141
+ }
142
+ // All 3 layers miss - create new issue
143
+ this.logger.log(` 📝 Creating GitHub issue for ${usFile.id}...`);
144
+ // Format issue body
145
+ const issueBody = this.formatUserStoryBody(usFile);
146
+ // Create issue
147
+ const issue = await client.createUserStoryIssue({
148
+ featureId,
149
+ userStoryId: usFile.id,
150
+ title: usFile.title,
151
+ body: issueBody,
152
+ labels: [],
153
+ milestone: milestoneNumber,
154
+ });
155
+ this.logger.log(` ✅ Created issue #${issue.number}: ${issue.html_url}`);
156
+ createdIssues.push(issue);
157
+ // Update increment metadata.json (Layer 2)
158
+ if (existsSync(metadataFile)) {
159
+ const metadata = JSON.parse(await fs.readFile(metadataFile, 'utf-8'));
160
+ if (!metadata.github) {
161
+ metadata.github = {};
162
+ }
163
+ if (!metadata.github.issues) {
164
+ metadata.github.issues = [];
165
+ }
166
+ metadata.github.issues.push({
167
+ userStory: usFile.id,
168
+ number: issue.number,
169
+ url: issue.html_url,
170
+ createdAt: new Date().toISOString(),
171
+ });
172
+ metadata.github.lastSync = new Date().toISOString();
173
+ await fs.writeFile(metadataFile, JSON.stringify(metadata, null, 2), 'utf-8');
174
+ }
175
+ // Update user story frontmatter (Layer 1 backfill)
176
+ await this.frontmatterUpdater.updateUserStoryFrontmatter({
177
+ projectRoot: this.projectRoot,
178
+ featureId,
179
+ userStoryId: usFile.id,
180
+ githubIssue: {
181
+ number: issue.number,
182
+ url: issue.html_url,
183
+ createdAt: new Date().toISOString(),
184
+ },
185
+ });
186
+ }
187
+ catch (error) {
188
+ this.logger.error(` ❌ Failed to create issue for ${usFile.id}:`, error);
189
+ }
190
+ }
191
+ if (createdIssues.length > 0) {
192
+ this.logger.log(`\n✅ Created ${createdIssues.length} GitHub issue(s) for ${featureId}`);
193
+ createdIssues.forEach(issue => {
194
+ this.logger.log(` - Issue #${issue.number}: ${issue.html_url}`);
195
+ });
196
+ }
197
+ else {
198
+ this.logger.log('\n✅ All GitHub issues already exist (0 new issues created)');
199
+ }
200
+ return createdIssues;
201
+ }
202
+ catch (error) {
203
+ this.logger.error('❌ Failed to create GitHub issues:', error);
204
+ throw error;
205
+ }
206
+ }
207
+ /**
208
+ * Format user story content for GitHub issue body
209
+ */
210
+ formatUserStoryBody(usFile) {
211
+ // Simple body for now - can be enhanced later
212
+ const parts = [];
213
+ parts.push(`## User Story: ${usFile.id}`);
214
+ parts.push('');
215
+ if (usFile.external_title) {
216
+ parts.push(`**Original Title**: ${usFile.external_title}`);
217
+ parts.push('');
218
+ }
219
+ parts.push('This issue was auto-created by SpecWeave.');
220
+ parts.push('');
221
+ parts.push('---');
222
+ parts.push('');
223
+ parts.push('🤖 **Auto-synced from SpecWeave**');
224
+ parts.push('');
225
+ parts.push('For detailed acceptance criteria, tasks, and technical specifications, see the living docs in the repository.');
226
+ return parts.join('\n');
19
227
  }
20
228
  /**
21
229
  * Sync increment completion to external tools using format preservation
@@ -31,25 +239,63 @@ export class SyncCoordinator {
31
239
  this.logger.log(`\n🔄 Syncing increment ${this.incrementId} with format preservation...`);
32
240
  // 1. Load config
33
241
  const config = await this.loadConfig();
34
- // 2. Check if sync is enabled (GATE 2: canUpdateExternalItems)
35
- if (!config.sync?.settings?.canUpdateExternalItems) {
36
- this.logger.log('ℹ️ External sync disabled (canUpdateExternalItems=false)');
242
+ // GATE 1: Check if living docs sync is enabled (canUpsertInternalItems)
243
+ const canUpsertInternal = config.sync?.settings?.canUpsertInternalItems ?? true;
244
+ if (!canUpsertInternal) {
245
+ this.logger.log('ℹ️ Living docs sync disabled (canUpsertInternalItems=false)');
246
+ this.logger.log(' Running in read-only mode - no changes will be made to living docs or external tools');
37
247
  result.syncMode = 'read-only';
38
248
  result.success = true;
39
249
  return result;
40
250
  }
41
- // GATE 3: Check if automatic sync is enabled
251
+ // GATE 2: Check if external sync is enabled (canUpdateExternalItems)
252
+ const canUpdateExternal = config.sync?.settings?.canUpdateExternalItems ?? false;
253
+ if (!canUpdateExternal) {
254
+ this.logger.log('✅ Living docs sync enabled (canUpsertInternalItems=true)');
255
+ this.logger.log('ℹ️ External tool sync disabled (canUpdateExternalItems=false)');
256
+ this.logger.log(' Living docs will be updated, but external tools (GitHub, JIRA, ADO) will not be synced');
257
+ result.syncMode = 'living-docs-only';
258
+ // Continue to sync living docs (without external tools)
259
+ // Note: GitHub issue creation will be skipped due to this gate
260
+ }
261
+ else {
262
+ this.logger.log('✅ Living docs sync enabled (canUpsertInternalItems=true)');
263
+ this.logger.log('✅ External tool sync enabled (canUpdateExternalItems=true)');
264
+ }
265
+ // GATE 3: Check if automatic sync is enabled (only relevant if GATE 2 is true)
42
266
  // DEFAULT: true (automatic sync enabled for better UX)
43
- const autoSync = config.sync?.settings?.autoSyncOnCompletion ?? true;
44
- if (!autoSync) {
45
- this.logger.log('⚠️ Automatic sync disabled (autoSyncOnCompletion=false)');
46
- this.logger.log(' Living docs updated locally, but external tools require manual sync');
47
- this.logger.log(' Run /specweave-github:sync or /specweave-jira:sync to sync manually');
48
- result.syncMode = 'manual-only';
49
- result.success = true;
50
- return result;
267
+ if (canUpdateExternal) {
268
+ const autoSync = config.sync?.settings?.autoSyncOnCompletion ?? true;
269
+ if (!autoSync) {
270
+ this.logger.log('⚠️ Automatic external sync disabled (autoSyncOnCompletion=false)');
271
+ this.logger.log(' Living docs will be updated, but external tools require manual sync');
272
+ this.logger.log(' Run /specweave-github:sync or /specweave-jira:sync to sync manually');
273
+ result.syncMode = 'manual-only';
274
+ // Continue to sync living docs only (skip GitHub sync)
275
+ }
276
+ else {
277
+ this.logger.log('✅ Automatic external sync enabled (autoSyncOnCompletion=true)');
278
+ // GATE 4: Check if GitHub sync is enabled (tool-specific gate)
279
+ const githubEnabled = config.sync?.github?.enabled ?? false;
280
+ if (githubEnabled) {
281
+ this.logger.log('✅ GitHub sync enabled (sync.github.enabled=true)');
282
+ this.logger.log('\n🔹 Creating GitHub issues for user stories...');
283
+ try {
284
+ await this.createGitHubIssuesForUserStories(config);
285
+ }
286
+ catch (error) {
287
+ this.logger.error('⚠️ GitHub issue creation failed (non-blocking):', error);
288
+ result.errors.push(`GitHub sync error: ${error}`);
289
+ // Continue with rest of sync even if GitHub fails
290
+ }
291
+ }
292
+ else {
293
+ this.logger.log('ℹ️ GitHub sync disabled (sync.github.enabled=false)');
294
+ this.logger.log(' Set sync.github.enabled=true to enable automatic GitHub issue creation');
295
+ result.syncMode = 'external-disabled';
296
+ }
297
+ }
51
298
  }
52
- this.logger.log('✅ Automatic sync enabled (autoSyncOnCompletion=true)');
53
299
  // 3. Load living docs User Stories for this increment
54
300
  const userStories = await this.loadUserStoriesForIncrement();
55
301
  if (userStories.length === 0) {
@@ -153,7 +399,7 @@ export class SyncCoordinator {
153
399
  const tasksFile = path.join(this.projectRoot, '.specweave/increments', this.incrementId, 'tasks.md');
154
400
  const tasks = [];
155
401
  const acs = [];
156
- if (await fs.pathExists(tasksFile)) {
402
+ if (existsSync(tasksFile)) {
157
403
  const content = await fs.readFile(tasksFile, 'utf-8');
158
404
  // Parse tasks (simplified - just count completed for now)
159
405
  const taskMatches = content.match(/### T-\d+:/g) || [];
@@ -169,7 +415,7 @@ export class SyncCoordinator {
169
415
  }
170
416
  // Parse ACs from spec.md
171
417
  const specFile = path.join(this.projectRoot, '.specweave/increments', this.incrementId, 'spec.md');
172
- if (await fs.pathExists(specFile)) {
418
+ if (existsSync(specFile)) {
173
419
  const content = await fs.readFile(specFile, 'utf-8');
174
420
  // Parse ACs
175
421
  const acMatches = content.match(/- \[x\] \*\*AC-[^:]+\*\*:/g) || [];
@@ -199,7 +445,7 @@ export class SyncCoordinator {
199
445
  */
200
446
  async loadUserStoriesForIncrement() {
201
447
  const specFile = path.join(this.projectRoot, '.specweave/increments', this.incrementId, 'spec.md');
202
- if (!await fs.pathExists(specFile)) {
448
+ if (!existsSync(specFile)) {
203
449
  return [];
204
450
  }
205
451
  const content = await fs.readFile(specFile, 'utf-8');
@@ -209,13 +455,13 @@ export class SyncCoordinator {
209
455
  return [];
210
456
  }
211
457
  const frontmatter = yaml.parse(frontmatterMatch[1]);
212
- const featureId = frontmatter.epic || frontmatter.feature;
458
+ const featureId = frontmatter.feature_id || frontmatter.epic || frontmatter.feature;
213
459
  if (!featureId) {
214
460
  return [];
215
461
  }
216
462
  // Find living docs for this feature
217
463
  const featurePath = path.join(this.projectRoot, '.specweave/docs/internal/specs/specweave', featureId);
218
- if (!await fs.pathExists(featurePath)) {
464
+ if (!existsSync(featurePath)) {
219
465
  return [];
220
466
  }
221
467
  // Load all US files
@@ -238,7 +484,8 @@ export class SyncCoordinator {
238
484
  external_id: fm.external_id,
239
485
  external_url: fm.external_url,
240
486
  imported_at: fm.imported_at,
241
- origin: fm.origin
487
+ origin: fm.origin,
488
+ external_tools: fm.external_tools // FIX: Include external_tools (Layer 1 cache)
242
489
  });
243
490
  }
244
491
  }
@@ -250,7 +497,7 @@ export class SyncCoordinator {
250
497
  */
251
498
  async loadConfig() {
252
499
  const configPath = path.join(this.projectRoot, '.specweave/config.json');
253
- if (!await fs.pathExists(configPath)) {
500
+ if (!existsSync(configPath)) {
254
501
  return {};
255
502
  }
256
503
  const content = await fs.readFile(configPath, 'utf-8');
@@ -1 +1 @@
1
- {"version":3,"file":"sync-coordinator.js","sourceRoot":"","sources":["../../../src/sync/sync-coordinator.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"sync-coordinator.js","sourceRoot":"","sources":["../../../src/sync/sync-coordinator.ts"],"names":[],"mappings":"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"}