@applica-software-guru/sdd-core 1.5.1 → 1.5.2
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.
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sync-engine.d.ts","sourceRoot":"","sources":["../../src/remote/sync-engine.ts"],"names":[],"mappings":"AAYA,OAAO,KAAK,EACV,UAAU,EACV,UAAU,EAEV,kBAAkB,EAClB,kBAAkB,EAEnB,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"sync-engine.d.ts","sourceRoot":"","sources":["../../src/remote/sync-engine.ts"],"names":[],"mappings":"AAYA,OAAO,KAAK,EACV,UAAU,EACV,UAAU,EAEV,kBAAkB,EAClB,kBAAkB,EAEnB,MAAM,YAAY,CAAC;AA4EpB,MAAM,WAAW,WAAW;IAC1B,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;IACjB,GAAG,CAAC,EAAE,OAAO,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,wBAAsB,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,UAAU,CAAC,CAmJ3F;AAID,wBAAsB,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC,CAiExF;AAkBD,wBAAsB,iBAAiB,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,kBAAkB,CAAC,CAsEnG;AAID,wBAAsB,kBAAkB,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,kBAAkB,CAAC,CAsEpG;AAID,wBAAsB,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,kBAAkB,CAAC,CA6BjG"}
|
|
@@ -27,7 +27,8 @@ function normalizePath(p) {
|
|
|
27
27
|
return p.split('\\').join('/');
|
|
28
28
|
}
|
|
29
29
|
/**
|
|
30
|
-
* Build a markdown file with frontmatter for
|
|
30
|
+
* Build a new markdown file with frontmatter — used ONLY for brand-new files
|
|
31
|
+
* that don't exist locally yet.
|
|
31
32
|
*/
|
|
32
33
|
function buildStoryMarkdown(title, body, version, status = 'synced') {
|
|
33
34
|
const fm = {
|
|
@@ -40,7 +41,7 @@ function buildStoryMarkdown(title, body, version, status = 'synced') {
|
|
|
40
41
|
return gray_matter_1.default.stringify(body, fm);
|
|
41
42
|
}
|
|
42
43
|
/**
|
|
43
|
-
* Build a markdown
|
|
44
|
+
* Build a new CR markdown — used ONLY for brand-new CRs that don't exist locally.
|
|
44
45
|
*/
|
|
45
46
|
function buildCRMarkdown(title, body, createdAt, status = 'draft') {
|
|
46
47
|
const fm = {
|
|
@@ -52,7 +53,7 @@ function buildCRMarkdown(title, body, createdAt, status = 'draft') {
|
|
|
52
53
|
return gray_matter_1.default.stringify(body, fm);
|
|
53
54
|
}
|
|
54
55
|
/**
|
|
55
|
-
* Build a markdown
|
|
56
|
+
* Build a new bug markdown — used ONLY for brand-new bugs that don't exist locally.
|
|
56
57
|
*/
|
|
57
58
|
function buildBugMarkdown(title, body, createdAt, status = 'open') {
|
|
58
59
|
const fm = {
|
|
@@ -63,6 +64,29 @@ function buildBugMarkdown(title, body, createdAt, status = 'open') {
|
|
|
63
64
|
};
|
|
64
65
|
return gray_matter_1.default.stringify(body, fm);
|
|
65
66
|
}
|
|
67
|
+
/**
|
|
68
|
+
* Replace only the body (after frontmatter) in a raw markdown string,
|
|
69
|
+
* preserving the exact original frontmatter formatting (quotes, order, etc.).
|
|
70
|
+
*/
|
|
71
|
+
function replaceBody(rawMarkdown, newBody) {
|
|
72
|
+
const firstFence = rawMarkdown.indexOf('---');
|
|
73
|
+
if (firstFence === -1)
|
|
74
|
+
return rawMarkdown;
|
|
75
|
+
const secondFence = rawMarkdown.indexOf('---', firstFence + 3);
|
|
76
|
+
if (secondFence === -1)
|
|
77
|
+
return rawMarkdown;
|
|
78
|
+
const endOfFrontmatter = rawMarkdown.indexOf('\n', secondFence);
|
|
79
|
+
if (endOfFrontmatter === -1)
|
|
80
|
+
return rawMarkdown;
|
|
81
|
+
return rawMarkdown.substring(0, endOfFrontmatter + 1) + '\n' + newBody + '\n';
|
|
82
|
+
}
|
|
83
|
+
/**
|
|
84
|
+
* Extract the body content from a raw markdown string (after frontmatter).
|
|
85
|
+
*/
|
|
86
|
+
function extractBody(rawMarkdown) {
|
|
87
|
+
const parsed = (0, gray_matter_1.default)(rawMarkdown);
|
|
88
|
+
return parsed.content.trim();
|
|
89
|
+
}
|
|
66
90
|
async function pushToRemote(root, options) {
|
|
67
91
|
const config = await (0, config_manager_js_1.readConfig)(root);
|
|
68
92
|
const api = (0, api_client_js_1.buildApiConfig)(config, options?.timeout);
|
|
@@ -211,7 +235,7 @@ async function pullFromRemote(root, timeout) {
|
|
|
211
235
|
const absPath = (0, node_path_1.resolve)(root, localPath);
|
|
212
236
|
const tracked = state.documents[localPath];
|
|
213
237
|
if (!(0, node_fs_1.existsSync)(absPath)) {
|
|
214
|
-
//
|
|
238
|
+
// Brand-new file — create locally
|
|
215
239
|
const dir = (0, node_path_1.dirname)(absPath);
|
|
216
240
|
if (!(0, node_fs_1.existsSync)(dir)) {
|
|
217
241
|
await (0, promises_1.mkdir)(dir, { recursive: true });
|
|
@@ -222,12 +246,20 @@ async function pullFromRemote(root, timeout) {
|
|
|
222
246
|
created.push(localPath);
|
|
223
247
|
updateDocState(state, doc, localPath, markdown);
|
|
224
248
|
}
|
|
225
|
-
else
|
|
226
|
-
//
|
|
227
|
-
const
|
|
228
|
-
const
|
|
249
|
+
else {
|
|
250
|
+
// File exists locally — compare body content, not version numbers
|
|
251
|
+
const localRaw = await (0, promises_1.readFile)(absPath, 'utf-8');
|
|
252
|
+
const localBody = extractBody(localRaw);
|
|
253
|
+
const remoteBody = doc.content.trim();
|
|
254
|
+
if (localBody === remoteBody) {
|
|
255
|
+
// Body identical — don't touch the file, just update tracking state
|
|
256
|
+
updateDocState(state, doc, localPath, localRaw);
|
|
257
|
+
continue;
|
|
258
|
+
}
|
|
259
|
+
// Body differs — check for conflict
|
|
260
|
+
const localHash = sha256(localRaw);
|
|
229
261
|
if (tracked && localHash !== tracked.localHash) {
|
|
230
|
-
//
|
|
262
|
+
// Both local and remote changed → conflict
|
|
231
263
|
conflicts.push({
|
|
232
264
|
path: localPath,
|
|
233
265
|
localVersion: tracked.remoteVersion.toString(),
|
|
@@ -236,15 +268,15 @@ async function pullFromRemote(root, timeout) {
|
|
|
236
268
|
});
|
|
237
269
|
}
|
|
238
270
|
else {
|
|
239
|
-
//
|
|
240
|
-
const
|
|
241
|
-
|
|
242
|
-
|
|
271
|
+
// Only remote body changed — surgically replace body, preserve frontmatter
|
|
272
|
+
const newStatus = doc.status === 'draft' ? 'draft' : 'synced';
|
|
273
|
+
let updatedContent = replaceBody(localRaw, doc.content);
|
|
274
|
+
updatedContent = updatedContent.replace(/^status:\s*.+/m, `status: ${newStatus}`);
|
|
275
|
+
await (0, promises_1.writeFile)(absPath, updatedContent, 'utf-8');
|
|
243
276
|
updated.push(localPath);
|
|
244
|
-
updateDocState(state, doc, localPath,
|
|
277
|
+
updateDocState(state, doc, localPath, updatedContent);
|
|
245
278
|
}
|
|
246
279
|
}
|
|
247
|
-
// If versions match, skip
|
|
248
280
|
}
|
|
249
281
|
state.lastPull = new Date().toISOString();
|
|
250
282
|
await (0, state_js_1.writeRemoteState)(root, state);
|
|
@@ -271,35 +303,53 @@ async function pullCRsFromRemote(root, timeout) {
|
|
|
271
303
|
for (const [localPath, entry] of Object.entries(state.changeRequests)) {
|
|
272
304
|
idToPath.set(entry.remoteId, localPath);
|
|
273
305
|
}
|
|
274
|
-
const crDir = (0, node_path_1.resolve)(root, 'change-requests');
|
|
275
|
-
if (!(0, node_fs_1.existsSync)(crDir)) {
|
|
276
|
-
await (0, promises_1.mkdir)(crDir, { recursive: true });
|
|
277
|
-
}
|
|
278
306
|
let created = 0;
|
|
279
307
|
let updated = 0;
|
|
280
308
|
for (const cr of remoteCRs) {
|
|
281
|
-
// Use the original local path if we pushed this CR before, otherwise generate a fallback
|
|
282
309
|
const localPath = idToPath.get(cr.id) ?? `change-requests/CR-${cr.id.substring(0, 8)}.md`;
|
|
283
310
|
const absPath = (0, node_path_1.resolve)(root, localPath);
|
|
284
311
|
const dir = (0, node_path_1.dirname)(absPath);
|
|
285
312
|
if (!(0, node_fs_1.existsSync)(dir)) {
|
|
286
313
|
await (0, promises_1.mkdir)(dir, { recursive: true });
|
|
287
314
|
}
|
|
288
|
-
const crStatus = cr.status === 'draft' ? 'draft' : 'pending';
|
|
289
|
-
const markdown = buildCRMarkdown(cr.title, cr.body, cr.created_at, crStatus);
|
|
290
315
|
if ((0, node_fs_1.existsSync)(absPath)) {
|
|
316
|
+
// File exists — compare body, only update if changed
|
|
317
|
+
const localRaw = await (0, promises_1.readFile)(absPath, 'utf-8');
|
|
318
|
+
const localBody = extractBody(localRaw);
|
|
319
|
+
const remoteBody = cr.body.trim();
|
|
320
|
+
if (localBody === remoteBody) {
|
|
321
|
+
// Identical — don't touch the file
|
|
322
|
+
state.changeRequests[normalizePath(localPath)] = {
|
|
323
|
+
remoteId: cr.id,
|
|
324
|
+
localHash: sha256(localRaw),
|
|
325
|
+
lastSynced: new Date().toISOString(),
|
|
326
|
+
};
|
|
327
|
+
continue;
|
|
328
|
+
}
|
|
329
|
+
// Body changed — update body, preserve frontmatter
|
|
330
|
+
const newStatus = cr.status === 'draft' ? 'draft' : 'pending';
|
|
331
|
+
let updatedContent = replaceBody(localRaw, cr.body);
|
|
332
|
+
updatedContent = updatedContent.replace(/^status:\s*.+/m, `status: ${newStatus}`);
|
|
333
|
+
await (0, promises_1.writeFile)(absPath, updatedContent, 'utf-8');
|
|
291
334
|
updated++;
|
|
335
|
+
state.changeRequests[normalizePath(localPath)] = {
|
|
336
|
+
remoteId: cr.id,
|
|
337
|
+
localHash: sha256(updatedContent),
|
|
338
|
+
lastSynced: new Date().toISOString(),
|
|
339
|
+
};
|
|
292
340
|
}
|
|
293
341
|
else {
|
|
342
|
+
// Brand-new CR — create file
|
|
343
|
+
const crStatus = cr.status === 'draft' ? 'draft' : 'pending';
|
|
344
|
+
const markdown = buildCRMarkdown(cr.title, cr.body, cr.created_at, crStatus);
|
|
345
|
+
await (0, promises_1.writeFile)(absPath, markdown, 'utf-8');
|
|
294
346
|
created++;
|
|
347
|
+
state.changeRequests[normalizePath(localPath)] = {
|
|
348
|
+
remoteId: cr.id,
|
|
349
|
+
localHash: sha256(markdown),
|
|
350
|
+
lastSynced: new Date().toISOString(),
|
|
351
|
+
};
|
|
295
352
|
}
|
|
296
|
-
await (0, promises_1.writeFile)(absPath, markdown, 'utf-8');
|
|
297
|
-
// Update state so future pulls keep using the same path
|
|
298
|
-
state.changeRequests[normalizePath(localPath)] = {
|
|
299
|
-
remoteId: cr.id,
|
|
300
|
-
localHash: sha256(markdown),
|
|
301
|
-
lastSynced: new Date().toISOString(),
|
|
302
|
-
};
|
|
303
353
|
}
|
|
304
354
|
await (0, state_js_1.writeRemoteState)(root, state);
|
|
305
355
|
return { created, updated };
|
|
@@ -317,35 +367,53 @@ async function pullBugsFromRemote(root, timeout) {
|
|
|
317
367
|
for (const [localPath, entry] of Object.entries(state.bugs)) {
|
|
318
368
|
idToPath.set(entry.remoteId, localPath);
|
|
319
369
|
}
|
|
320
|
-
const bugsDir = (0, node_path_1.resolve)(root, 'bugs');
|
|
321
|
-
if (!(0, node_fs_1.existsSync)(bugsDir)) {
|
|
322
|
-
await (0, promises_1.mkdir)(bugsDir, { recursive: true });
|
|
323
|
-
}
|
|
324
370
|
let created = 0;
|
|
325
371
|
let updated = 0;
|
|
326
372
|
for (const bug of remoteBugs) {
|
|
327
|
-
// Use the original local path if we pushed this bug before, otherwise generate a fallback
|
|
328
373
|
const localPath = idToPath.get(bug.id) ?? `bugs/BUG-${bug.id.substring(0, 8)}.md`;
|
|
329
374
|
const absPath = (0, node_path_1.resolve)(root, localPath);
|
|
330
375
|
const dir = (0, node_path_1.dirname)(absPath);
|
|
331
376
|
if (!(0, node_fs_1.existsSync)(dir)) {
|
|
332
377
|
await (0, promises_1.mkdir)(dir, { recursive: true });
|
|
333
378
|
}
|
|
334
|
-
const bugStatus = bug.status === 'draft' ? 'draft' : 'open';
|
|
335
|
-
const markdown = buildBugMarkdown(bug.title, bug.body, bug.created_at, bugStatus);
|
|
336
379
|
if ((0, node_fs_1.existsSync)(absPath)) {
|
|
380
|
+
// File exists — compare body, only update if changed
|
|
381
|
+
const localRaw = await (0, promises_1.readFile)(absPath, 'utf-8');
|
|
382
|
+
const localBody = extractBody(localRaw);
|
|
383
|
+
const remoteBody = bug.body.trim();
|
|
384
|
+
if (localBody === remoteBody) {
|
|
385
|
+
// Identical — don't touch the file
|
|
386
|
+
state.bugs[normalizePath(localPath)] = {
|
|
387
|
+
remoteId: bug.id,
|
|
388
|
+
localHash: sha256(localRaw),
|
|
389
|
+
lastSynced: new Date().toISOString(),
|
|
390
|
+
};
|
|
391
|
+
continue;
|
|
392
|
+
}
|
|
393
|
+
// Body changed — update body, preserve frontmatter
|
|
394
|
+
const newStatus = bug.status === 'draft' ? 'draft' : 'open';
|
|
395
|
+
let updatedContent = replaceBody(localRaw, bug.body);
|
|
396
|
+
updatedContent = updatedContent.replace(/^status:\s*.+/m, `status: ${newStatus}`);
|
|
397
|
+
await (0, promises_1.writeFile)(absPath, updatedContent, 'utf-8');
|
|
337
398
|
updated++;
|
|
399
|
+
state.bugs[normalizePath(localPath)] = {
|
|
400
|
+
remoteId: bug.id,
|
|
401
|
+
localHash: sha256(updatedContent),
|
|
402
|
+
lastSynced: new Date().toISOString(),
|
|
403
|
+
};
|
|
338
404
|
}
|
|
339
405
|
else {
|
|
406
|
+
// Brand-new bug — create file
|
|
407
|
+
const bugStatus = bug.status === 'draft' ? 'draft' : 'open';
|
|
408
|
+
const markdown = buildBugMarkdown(bug.title, bug.body, bug.created_at, bugStatus);
|
|
409
|
+
await (0, promises_1.writeFile)(absPath, markdown, 'utf-8');
|
|
340
410
|
created++;
|
|
411
|
+
state.bugs[normalizePath(localPath)] = {
|
|
412
|
+
remoteId: bug.id,
|
|
413
|
+
localHash: sha256(markdown),
|
|
414
|
+
lastSynced: new Date().toISOString(),
|
|
415
|
+
};
|
|
341
416
|
}
|
|
342
|
-
await (0, promises_1.writeFile)(absPath, markdown, 'utf-8');
|
|
343
|
-
// Update state so future pulls keep using the same path
|
|
344
|
-
state.bugs[normalizePath(localPath)] = {
|
|
345
|
-
remoteId: bug.id,
|
|
346
|
-
localHash: sha256(markdown),
|
|
347
|
-
lastSynced: new Date().toISOString(),
|
|
348
|
-
};
|
|
349
417
|
}
|
|
350
418
|
await (0, state_js_1.writeRemoteState)(root, state);
|
|
351
419
|
return { created, updated };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sync-engine.js","sourceRoot":"","sources":["../../src/remote/sync-engine.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"sync-engine.js","sourceRoot":"","sources":["../../src/remote/sync-engine.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -29,7 +29,8 @@ function normalizePath(p: string): string {
|
|
|
29
29
|
}
|
|
30
30
|
|
|
31
31
|
/**
|
|
32
|
-
* Build a markdown file with frontmatter for
|
|
32
|
+
* Build a new markdown file with frontmatter — used ONLY for brand-new files
|
|
33
|
+
* that don't exist locally yet.
|
|
33
34
|
*/
|
|
34
35
|
function buildStoryMarkdown(title: string, body: string, version: number, status: string = 'synced'): string {
|
|
35
36
|
const fm = {
|
|
@@ -43,7 +44,7 @@ function buildStoryMarkdown(title: string, body: string, version: number, status
|
|
|
43
44
|
}
|
|
44
45
|
|
|
45
46
|
/**
|
|
46
|
-
* Build a markdown
|
|
47
|
+
* Build a new CR markdown — used ONLY for brand-new CRs that don't exist locally.
|
|
47
48
|
*/
|
|
48
49
|
function buildCRMarkdown(title: string, body: string, createdAt: string, status: string = 'draft'): string {
|
|
49
50
|
const fm = {
|
|
@@ -56,7 +57,7 @@ function buildCRMarkdown(title: string, body: string, createdAt: string, status:
|
|
|
56
57
|
}
|
|
57
58
|
|
|
58
59
|
/**
|
|
59
|
-
* Build a markdown
|
|
60
|
+
* Build a new bug markdown — used ONLY for brand-new bugs that don't exist locally.
|
|
60
61
|
*/
|
|
61
62
|
function buildBugMarkdown(title: string, body: string, createdAt: string, status: string = 'open'): string {
|
|
62
63
|
const fm = {
|
|
@@ -68,6 +69,28 @@ function buildBugMarkdown(title: string, body: string, createdAt: string, status
|
|
|
68
69
|
return matter.stringify(body, fm);
|
|
69
70
|
}
|
|
70
71
|
|
|
72
|
+
/**
|
|
73
|
+
* Replace only the body (after frontmatter) in a raw markdown string,
|
|
74
|
+
* preserving the exact original frontmatter formatting (quotes, order, etc.).
|
|
75
|
+
*/
|
|
76
|
+
function replaceBody(rawMarkdown: string, newBody: string): string {
|
|
77
|
+
const firstFence = rawMarkdown.indexOf('---');
|
|
78
|
+
if (firstFence === -1) return rawMarkdown;
|
|
79
|
+
const secondFence = rawMarkdown.indexOf('---', firstFence + 3);
|
|
80
|
+
if (secondFence === -1) return rawMarkdown;
|
|
81
|
+
const endOfFrontmatter = rawMarkdown.indexOf('\n', secondFence);
|
|
82
|
+
if (endOfFrontmatter === -1) return rawMarkdown;
|
|
83
|
+
return rawMarkdown.substring(0, endOfFrontmatter + 1) + '\n' + newBody + '\n';
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
/**
|
|
87
|
+
* Extract the body content from a raw markdown string (after frontmatter).
|
|
88
|
+
*/
|
|
89
|
+
function extractBody(rawMarkdown: string): string {
|
|
90
|
+
const parsed = matter(rawMarkdown);
|
|
91
|
+
return parsed.content.trim();
|
|
92
|
+
}
|
|
93
|
+
|
|
71
94
|
// ─── Push ────────────────────────────────────────────────────────────────
|
|
72
95
|
|
|
73
96
|
export interface PushOptions {
|
|
@@ -244,7 +267,7 @@ export async function pullFromRemote(root: string, timeout?: number): Promise<Pu
|
|
|
244
267
|
const tracked = state.documents[localPath];
|
|
245
268
|
|
|
246
269
|
if (!existsSync(absPath)) {
|
|
247
|
-
//
|
|
270
|
+
// Brand-new file — create locally
|
|
248
271
|
const dir = dirname(absPath);
|
|
249
272
|
if (!existsSync(dir)) {
|
|
250
273
|
await mkdir(dir, { recursive: true });
|
|
@@ -254,13 +277,22 @@ export async function pullFromRemote(root: string, timeout?: number): Promise<Pu
|
|
|
254
277
|
await writeFile(absPath, markdown, 'utf-8');
|
|
255
278
|
created.push(localPath);
|
|
256
279
|
updateDocState(state, doc, localPath, markdown);
|
|
257
|
-
} else
|
|
258
|
-
//
|
|
259
|
-
const
|
|
260
|
-
const
|
|
280
|
+
} else {
|
|
281
|
+
// File exists locally — compare body content, not version numbers
|
|
282
|
+
const localRaw = await readFile(absPath, 'utf-8');
|
|
283
|
+
const localBody = extractBody(localRaw);
|
|
284
|
+
const remoteBody = doc.content.trim();
|
|
285
|
+
|
|
286
|
+
if (localBody === remoteBody) {
|
|
287
|
+
// Body identical — don't touch the file, just update tracking state
|
|
288
|
+
updateDocState(state, doc, localPath, localRaw);
|
|
289
|
+
continue;
|
|
290
|
+
}
|
|
261
291
|
|
|
292
|
+
// Body differs — check for conflict
|
|
293
|
+
const localHash = sha256(localRaw);
|
|
262
294
|
if (tracked && localHash !== tracked.localHash) {
|
|
263
|
-
//
|
|
295
|
+
// Both local and remote changed → conflict
|
|
264
296
|
conflicts.push({
|
|
265
297
|
path: localPath,
|
|
266
298
|
localVersion: tracked.remoteVersion.toString(),
|
|
@@ -268,15 +300,15 @@ export async function pullFromRemote(root: string, timeout?: number): Promise<Pu
|
|
|
268
300
|
reason: 'Both local and remote have changes since last sync',
|
|
269
301
|
});
|
|
270
302
|
} else {
|
|
271
|
-
//
|
|
272
|
-
const
|
|
273
|
-
|
|
274
|
-
|
|
303
|
+
// Only remote body changed — surgically replace body, preserve frontmatter
|
|
304
|
+
const newStatus = doc.status === 'draft' ? 'draft' : 'synced';
|
|
305
|
+
let updatedContent = replaceBody(localRaw, doc.content);
|
|
306
|
+
updatedContent = updatedContent.replace(/^status:\s*.+/m, `status: ${newStatus}`);
|
|
307
|
+
await writeFile(absPath, updatedContent, 'utf-8');
|
|
275
308
|
updated.push(localPath);
|
|
276
|
-
updateDocState(state, doc, localPath,
|
|
309
|
+
updateDocState(state, doc, localPath, updatedContent);
|
|
277
310
|
}
|
|
278
311
|
}
|
|
279
|
-
// If versions match, skip
|
|
280
312
|
}
|
|
281
313
|
|
|
282
314
|
state.lastPull = new Date().toISOString();
|
|
@@ -315,16 +347,10 @@ export async function pullCRsFromRemote(root: string, timeout?: number): Promise
|
|
|
315
347
|
idToPath.set(entry.remoteId, localPath);
|
|
316
348
|
}
|
|
317
349
|
|
|
318
|
-
const crDir = resolve(root, 'change-requests');
|
|
319
|
-
if (!existsSync(crDir)) {
|
|
320
|
-
await mkdir(crDir, { recursive: true });
|
|
321
|
-
}
|
|
322
|
-
|
|
323
350
|
let created = 0;
|
|
324
351
|
let updated = 0;
|
|
325
352
|
|
|
326
353
|
for (const cr of remoteCRs) {
|
|
327
|
-
// Use the original local path if we pushed this CR before, otherwise generate a fallback
|
|
328
354
|
const localPath = idToPath.get(cr.id) ?? `change-requests/CR-${cr.id.substring(0, 8)}.md`;
|
|
329
355
|
const absPath = resolve(root, localPath);
|
|
330
356
|
const dir = dirname(absPath);
|
|
@@ -332,22 +358,47 @@ export async function pullCRsFromRemote(root: string, timeout?: number): Promise
|
|
|
332
358
|
await mkdir(dir, { recursive: true });
|
|
333
359
|
}
|
|
334
360
|
|
|
335
|
-
const crStatus = cr.status === 'draft' ? 'draft' : 'pending';
|
|
336
|
-
const markdown = buildCRMarkdown(cr.title, cr.body, cr.created_at, crStatus);
|
|
337
|
-
|
|
338
361
|
if (existsSync(absPath)) {
|
|
362
|
+
// File exists — compare body, only update if changed
|
|
363
|
+
const localRaw = await readFile(absPath, 'utf-8');
|
|
364
|
+
const localBody = extractBody(localRaw);
|
|
365
|
+
const remoteBody = cr.body.trim();
|
|
366
|
+
|
|
367
|
+
if (localBody === remoteBody) {
|
|
368
|
+
// Identical — don't touch the file
|
|
369
|
+
state.changeRequests![normalizePath(localPath)] = {
|
|
370
|
+
remoteId: cr.id,
|
|
371
|
+
localHash: sha256(localRaw),
|
|
372
|
+
lastSynced: new Date().toISOString(),
|
|
373
|
+
};
|
|
374
|
+
continue;
|
|
375
|
+
}
|
|
376
|
+
|
|
377
|
+
// Body changed — update body, preserve frontmatter
|
|
378
|
+
const newStatus = cr.status === 'draft' ? 'draft' : 'pending';
|
|
379
|
+
let updatedContent = replaceBody(localRaw, cr.body);
|
|
380
|
+
updatedContent = updatedContent.replace(/^status:\s*.+/m, `status: ${newStatus}`);
|
|
381
|
+
await writeFile(absPath, updatedContent, 'utf-8');
|
|
339
382
|
updated++;
|
|
383
|
+
|
|
384
|
+
state.changeRequests![normalizePath(localPath)] = {
|
|
385
|
+
remoteId: cr.id,
|
|
386
|
+
localHash: sha256(updatedContent),
|
|
387
|
+
lastSynced: new Date().toISOString(),
|
|
388
|
+
};
|
|
340
389
|
} else {
|
|
390
|
+
// Brand-new CR — create file
|
|
391
|
+
const crStatus = cr.status === 'draft' ? 'draft' : 'pending';
|
|
392
|
+
const markdown = buildCRMarkdown(cr.title, cr.body, cr.created_at, crStatus);
|
|
393
|
+
await writeFile(absPath, markdown, 'utf-8');
|
|
341
394
|
created++;
|
|
342
|
-
}
|
|
343
|
-
await writeFile(absPath, markdown, 'utf-8');
|
|
344
395
|
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
|
|
350
|
-
}
|
|
396
|
+
state.changeRequests![normalizePath(localPath)] = {
|
|
397
|
+
remoteId: cr.id,
|
|
398
|
+
localHash: sha256(markdown),
|
|
399
|
+
lastSynced: new Date().toISOString(),
|
|
400
|
+
};
|
|
401
|
+
}
|
|
351
402
|
}
|
|
352
403
|
|
|
353
404
|
await writeRemoteState(root, state);
|
|
@@ -370,16 +421,10 @@ export async function pullBugsFromRemote(root: string, timeout?: number): Promis
|
|
|
370
421
|
idToPath.set(entry.remoteId, localPath);
|
|
371
422
|
}
|
|
372
423
|
|
|
373
|
-
const bugsDir = resolve(root, 'bugs');
|
|
374
|
-
if (!existsSync(bugsDir)) {
|
|
375
|
-
await mkdir(bugsDir, { recursive: true });
|
|
376
|
-
}
|
|
377
|
-
|
|
378
424
|
let created = 0;
|
|
379
425
|
let updated = 0;
|
|
380
426
|
|
|
381
427
|
for (const bug of remoteBugs) {
|
|
382
|
-
// Use the original local path if we pushed this bug before, otherwise generate a fallback
|
|
383
428
|
const localPath = idToPath.get(bug.id) ?? `bugs/BUG-${bug.id.substring(0, 8)}.md`;
|
|
384
429
|
const absPath = resolve(root, localPath);
|
|
385
430
|
const dir = dirname(absPath);
|
|
@@ -387,22 +432,47 @@ export async function pullBugsFromRemote(root: string, timeout?: number): Promis
|
|
|
387
432
|
await mkdir(dir, { recursive: true });
|
|
388
433
|
}
|
|
389
434
|
|
|
390
|
-
const bugStatus = bug.status === 'draft' ? 'draft' : 'open';
|
|
391
|
-
const markdown = buildBugMarkdown(bug.title, bug.body, bug.created_at, bugStatus);
|
|
392
|
-
|
|
393
435
|
if (existsSync(absPath)) {
|
|
436
|
+
// File exists — compare body, only update if changed
|
|
437
|
+
const localRaw = await readFile(absPath, 'utf-8');
|
|
438
|
+
const localBody = extractBody(localRaw);
|
|
439
|
+
const remoteBody = bug.body.trim();
|
|
440
|
+
|
|
441
|
+
if (localBody === remoteBody) {
|
|
442
|
+
// Identical — don't touch the file
|
|
443
|
+
state.bugs![normalizePath(localPath)] = {
|
|
444
|
+
remoteId: bug.id,
|
|
445
|
+
localHash: sha256(localRaw),
|
|
446
|
+
lastSynced: new Date().toISOString(),
|
|
447
|
+
};
|
|
448
|
+
continue;
|
|
449
|
+
}
|
|
450
|
+
|
|
451
|
+
// Body changed — update body, preserve frontmatter
|
|
452
|
+
const newStatus = bug.status === 'draft' ? 'draft' : 'open';
|
|
453
|
+
let updatedContent = replaceBody(localRaw, bug.body);
|
|
454
|
+
updatedContent = updatedContent.replace(/^status:\s*.+/m, `status: ${newStatus}`);
|
|
455
|
+
await writeFile(absPath, updatedContent, 'utf-8');
|
|
394
456
|
updated++;
|
|
457
|
+
|
|
458
|
+
state.bugs![normalizePath(localPath)] = {
|
|
459
|
+
remoteId: bug.id,
|
|
460
|
+
localHash: sha256(updatedContent),
|
|
461
|
+
lastSynced: new Date().toISOString(),
|
|
462
|
+
};
|
|
395
463
|
} else {
|
|
464
|
+
// Brand-new bug — create file
|
|
465
|
+
const bugStatus = bug.status === 'draft' ? 'draft' : 'open';
|
|
466
|
+
const markdown = buildBugMarkdown(bug.title, bug.body, bug.created_at, bugStatus);
|
|
467
|
+
await writeFile(absPath, markdown, 'utf-8');
|
|
396
468
|
created++;
|
|
397
|
-
}
|
|
398
|
-
await writeFile(absPath, markdown, 'utf-8');
|
|
399
469
|
|
|
400
|
-
|
|
401
|
-
|
|
402
|
-
|
|
403
|
-
|
|
404
|
-
|
|
405
|
-
}
|
|
470
|
+
state.bugs![normalizePath(localPath)] = {
|
|
471
|
+
remoteId: bug.id,
|
|
472
|
+
localHash: sha256(markdown),
|
|
473
|
+
lastSynced: new Date().toISOString(),
|
|
474
|
+
};
|
|
475
|
+
}
|
|
406
476
|
}
|
|
407
477
|
|
|
408
478
|
await writeRemoteState(root, state);
|
|
@@ -180,10 +180,11 @@ describe('Sync engine - pull', () => {
|
|
|
180
180
|
},
|
|
181
181
|
});
|
|
182
182
|
|
|
183
|
+
// Remote has DIFFERENT body content to trigger a real conflict
|
|
183
184
|
globalThis.fetch = vi.fn().mockResolvedValue({
|
|
184
185
|
ok: true,
|
|
185
186
|
status: 200,
|
|
186
|
-
json: async () => [makeDocResponse({ version: 2 })],
|
|
187
|
+
json: async () => [makeDocResponse({ version: 2, content: '# Product Vision\n\nUpdated on remote.\n' })],
|
|
187
188
|
});
|
|
188
189
|
|
|
189
190
|
const result = await sdd.pull();
|