@lumenflow/core 3.5.1 → 3.6.1
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/dist/arg-parser.d.ts.map +1 -1
- package/dist/arg-parser.js +23 -0
- package/dist/arg-parser.js.map +1 -1
- package/dist/config-contract.d.ts +22 -0
- package/dist/config-contract.d.ts.map +1 -1
- package/dist/config-contract.js +43 -0
- package/dist/config-contract.js.map +1 -1
- package/dist/core/tool.schemas.d.ts +2 -2
- package/dist/git-adapter.d.ts +23 -0
- package/dist/git-adapter.d.ts.map +1 -1
- package/dist/git-adapter.js +53 -0
- package/dist/git-adapter.js.map +1 -1
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/lane-checker.d.ts.map +1 -1
- package/dist/lane-checker.js +21 -9
- package/dist/lane-checker.js.map +1 -1
- package/dist/lumenflow-config.d.ts +2 -0
- package/dist/lumenflow-config.d.ts.map +1 -1
- package/dist/lumenflow-config.js +2 -0
- package/dist/lumenflow-config.js.map +1 -1
- package/dist/micro-worktree-shared.d.ts +22 -1
- package/dist/micro-worktree-shared.d.ts.map +1 -1
- package/dist/micro-worktree-shared.js +32 -3
- package/dist/micro-worktree-shared.js.map +1 -1
- package/dist/micro-worktree.d.ts.map +1 -1
- package/dist/micro-worktree.js +7 -20
- package/dist/micro-worktree.js.map +1 -1
- package/dist/ports/index.d.ts +1 -0
- package/dist/ports/index.d.ts.map +1 -1
- package/dist/ports/index.js +1 -0
- package/dist/ports/index.js.map +1 -1
- package/dist/ports/sync-validator.ports.d.ts +52 -0
- package/dist/ports/sync-validator.ports.d.ts.map +1 -0
- package/dist/ports/sync-validator.ports.js +4 -0
- package/dist/ports/sync-validator.ports.js.map +1 -0
- package/dist/ports/wu-helpers.ports.d.ts +2 -13
- package/dist/ports/wu-helpers.ports.d.ts.map +1 -1
- package/dist/schemas/flow-arg-validators.d.ts +2 -2
- package/dist/schemas/flow-schemas.d.ts +4 -4
- package/dist/schemas/workspace-config.d.ts +15 -4
- package/dist/schemas/workspace-config.d.ts.map +1 -1
- package/dist/schemas/workspace-config.js +14 -2
- package/dist/schemas/workspace-config.js.map +1 -1
- package/dist/schemas/wu-lifecycle-arg-validators.d.ts +2 -0
- package/dist/schemas/wu-lifecycle-arg-validators.d.ts.map +1 -1
- package/dist/schemas/wu-lifecycle-schemas.d.ts +4 -1
- package/dist/schemas/wu-lifecycle-schemas.d.ts.map +1 -1
- package/dist/schemas/wu-lifecycle-schemas.js +5 -1
- package/dist/schemas/wu-lifecycle-schemas.js.map +1 -1
- package/dist/sync-validator.d.ts +36 -0
- package/dist/sync-validator.d.ts.map +1 -0
- package/dist/sync-validator.js +77 -0
- package/dist/sync-validator.js.map +1 -0
- package/dist/telemetry.d.ts +19 -0
- package/dist/telemetry.d.ts.map +1 -1
- package/dist/telemetry.js +40 -0
- package/dist/telemetry.js.map +1 -1
- package/dist/wu-done-inputs.d.ts.map +1 -1
- package/dist/wu-done-inputs.js +1 -0
- package/dist/wu-done-inputs.js.map +1 -1
- package/dist/wu-done-main-sync.d.ts +4 -32
- package/dist/wu-done-main-sync.d.ts.map +1 -1
- package/dist/wu-done-main-sync.js +3 -61
- package/dist/wu-done-main-sync.js.map +1 -1
- package/dist/wu-done-worktree-services.d.ts +2 -5
- package/dist/wu-done-worktree-services.d.ts.map +1 -1
- package/dist/wu-done-worktree-services.js +10 -11
- package/dist/wu-done-worktree-services.js.map +1 -1
- package/dist/wu-duplicate-id-detector.d.ts +64 -0
- package/dist/wu-duplicate-id-detector.d.ts.map +1 -0
- package/dist/wu-duplicate-id-detector.js +334 -0
- package/dist/wu-duplicate-id-detector.js.map +1 -0
- package/dist/wu-helpers.d.ts +1 -16
- package/dist/wu-helpers.d.ts.map +1 -1
- package/dist/wu-helpers.js +2 -22
- package/dist/wu-helpers.js.map +1 -1
- package/dist/wu-id-generator.d.ts +96 -2
- package/dist/wu-id-generator.d.ts.map +1 -1
- package/dist/wu-id-generator.js +224 -11
- package/dist/wu-id-generator.js.map +1 -1
- package/dist/wu-repair-core.d.ts +16 -0
- package/dist/wu-repair-core.d.ts.map +1 -1
- package/dist/wu-repair-core.js +56 -0
- package/dist/wu-repair-core.js.map +1 -1
- package/package.json +5 -2
package/dist/wu-done-inputs.js
CHANGED
|
@@ -31,6 +31,7 @@ export function validateInputs(argv) {
|
|
|
31
31
|
' --override-owner Override ownership check (requires --reason, audited)\n' +
|
|
32
32
|
' --force, -f Bypass dirty-main pre-merge guard (audited, WU-1503)\n' +
|
|
33
33
|
' --no-auto-rebase Disable auto-rebase on branch divergence (WU-1303)\n' +
|
|
34
|
+
' --already-merged Skip merge phase; finalize metadata only for code already on main (WU-2211)\n' +
|
|
34
35
|
' --require-agents Block completion if mandatory agents not invoked (WU-1542)\n' +
|
|
35
36
|
' --help, -h Show this help\n\n' +
|
|
36
37
|
'⚠️ SKIP-GATES WARNING:\n' +
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"wu-done-inputs.js","sourceRoot":"","sources":["../src/wu-done-inputs.ts"],"names":[],"mappings":"AAAA,iCAAiC;AACjC,yCAAyC;AAEzC;;GAEG;AAEH,OAAO,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAC9C,OAAO,EAAE,GAAG,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAC3D,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAEzD;;;;GAIG;AACH,MAAM,UAAU,cAAc,CAAC,IAAc;IAC3C,MAAM,IAAI,GAAG,WAAW,CAAC,IAAI,CAAC,CAAC;IAC/B,IAAI,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC;QAC1B,OAAO,CAAC,GAAG,CACT,+CAA+C;YAC7C,YAAY;YACZ,oFAAoF;YACpF,sFAAsF;YACtF,+CAA+C;YAC/C,+DAA+D;YAC/D,gFAAgF;YAChF,2EAA2E;YAC3E,mEAAmE;YACnE,qEAAqE;YACrE,gFAAgF;YAChF,wEAAwE;YACxE,sFAAsF;YACtF,0FAA0F;YAC1F,+EAA+E;YAC/E,8EAA8E;YAC9E,4EAA4E;YAC5E,oFAAoF;YACpF,0CAA0C;YAC1C,2BAA2B;YAC3B,iCAAiC;YACjC,8EAA8E;YAC9E,4EAA4E;YAC5E,8CAA8C;YAC9C,gEAAgE;YAChE,2EAA2E;YAC3E,oBAAoB;YACpB,yCAAyC;YACzC,6EAA6E;YAC7E,kEAAkE;YAClE,gFAAgF,CACnF,CAAC;QACF,MAAM,IAAI,gBAAgB,CACxB,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC,CAAC,4BAA4B,EAC3D,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,UAAU,CAAC,KAAK,CAClD,CAAC;IACJ,CAAC;IAED,MAAM,EAAE,GAAG,IAAI,CAAC,EAAE,CAAC,WAAW,EAAE,CAAC;IACjC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;QAAE,GAAG,CAAC,kBAAkB,IAAI,CAAC,EAAE,2BAA2B,CAAC,CAAC;IAExF,OAAO,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC;AACtB,CAAC"}
|
|
1
|
+
{"version":3,"file":"wu-done-inputs.js","sourceRoot":"","sources":["../src/wu-done-inputs.ts"],"names":[],"mappings":"AAAA,iCAAiC;AACjC,yCAAyC;AAEzC;;GAEG;AAEH,OAAO,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAC9C,OAAO,EAAE,GAAG,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAC3D,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAEzD;;;;GAIG;AACH,MAAM,UAAU,cAAc,CAAC,IAAc;IAC3C,MAAM,IAAI,GAAG,WAAW,CAAC,IAAI,CAAC,CAAC;IAC/B,IAAI,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC;QAC1B,OAAO,CAAC,GAAG,CACT,+CAA+C;YAC7C,YAAY;YACZ,oFAAoF;YACpF,sFAAsF;YACtF,+CAA+C;YAC/C,+DAA+D;YAC/D,gFAAgF;YAChF,2EAA2E;YAC3E,mEAAmE;YACnE,qEAAqE;YACrE,gFAAgF;YAChF,wEAAwE;YACxE,sFAAsF;YACtF,0FAA0F;YAC1F,+EAA+E;YAC/E,8EAA8E;YAC9E,4EAA4E;YAC5E,qGAAqG;YACrG,oFAAoF;YACpF,0CAA0C;YAC1C,2BAA2B;YAC3B,iCAAiC;YACjC,8EAA8E;YAC9E,4EAA4E;YAC5E,8CAA8C;YAC9C,gEAAgE;YAChE,2EAA2E;YAC3E,oBAAoB;YACpB,yCAAyC;YACzC,6EAA6E;YAC7E,kEAAkE;YAClE,gFAAgF,CACnF,CAAC;QACF,MAAM,IAAI,gBAAgB,CACxB,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC,CAAC,4BAA4B,EAC3D,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,UAAU,CAAC,KAAK,CAClD,CAAC;IACJ,CAAC;IAED,MAAM,EAAE,GAAG,IAAI,CAAC,EAAE,CAAC,WAAW,EAAE,CAAC;IACjC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;QAAE,GAAG,CAAC,kBAAkB,IAAI,CAAC,EAAE,2BAA2B,CAAC,CAAC;IAExF,OAAO,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC;AACtB,CAAC"}
|
|
@@ -1,36 +1,8 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
3
|
-
* Avoids importing the full GitAdapter type to reduce coupling.
|
|
4
|
-
*/
|
|
5
|
-
interface MainSyncGitAdapter {
|
|
6
|
-
fetch: (remote?: string, branch?: string) => Promise<void>;
|
|
7
|
-
getCommitHash: (ref: string) => Promise<string>;
|
|
8
|
-
revList: (args: string[]) => Promise<string>;
|
|
9
|
-
}
|
|
10
|
-
/**
|
|
11
|
-
* WU-1577: Validate that local main is not behind origin/main before transaction.
|
|
12
|
-
*
|
|
13
|
-
* Defense-in-depth check inside the core layer. The CLI layer already has
|
|
14
|
-
* `ensureMainUpToDate()`, but this adds a guard directly before the
|
|
15
|
-
* transaction starts in `executeWorktreeCompletion()`.
|
|
16
|
-
*
|
|
17
|
-
* Fail-open: if the fetch or comparison fails (network issue), returns valid=true
|
|
18
|
-
* to avoid blocking legitimate work when there's no remote.
|
|
19
|
-
*/
|
|
20
|
-
export declare function validateMainNotBehindOrigin(gitAdapter: MainSyncGitAdapter): Promise<{
|
|
21
|
-
valid: boolean;
|
|
22
|
-
commitsBehind: number;
|
|
23
|
-
failOpen?: boolean;
|
|
24
|
-
}>;
|
|
25
|
-
/**
|
|
26
|
-
* WU-1577: Helper that throws if local main is behind origin.
|
|
27
|
-
*
|
|
28
|
-
* Used as a pre-flight guard before starting the wu:done transaction.
|
|
2
|
+
* WU-2014: Main branch sync validation compatibility exports for wu:done.
|
|
29
3
|
*
|
|
30
|
-
*
|
|
31
|
-
* @param wuId - WU ID for error messages
|
|
32
|
-
* @throws When local main is behind origin/main
|
|
4
|
+
* Canonical implementations now live in sync-validator.ts.
|
|
33
5
|
*/
|
|
34
|
-
export
|
|
35
|
-
export {};
|
|
6
|
+
export { validateMainNotBehindOrigin, ensureMainNotBehindOrigin } from './sync-validator.js';
|
|
7
|
+
export type { EnsureMainNotBehindOriginOptions, MainSyncGitAdapter } from './sync-validator.js';
|
|
36
8
|
//# sourceMappingURL=wu-done-main-sync.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"wu-done-main-sync.d.ts","sourceRoot":"","sources":["../src/wu-done-main-sync.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"wu-done-main-sync.d.ts","sourceRoot":"","sources":["../src/wu-done-main-sync.ts"],"names":[],"mappings":"AAGA;;;;GAIG;AACH,OAAO,EAAE,2BAA2B,EAAE,yBAAyB,EAAE,MAAM,qBAAqB,CAAC;AAC7F,YAAY,EAAE,gCAAgC,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC"}
|
|
@@ -1,67 +1,9 @@
|
|
|
1
1
|
// Copyright (c) 2026 Hellmai Ltd
|
|
2
2
|
// SPDX-License-Identifier: AGPL-3.0-only
|
|
3
3
|
/**
|
|
4
|
-
* WU-2014: Main branch sync validation for wu:done
|
|
4
|
+
* WU-2014: Main branch sync validation compatibility exports for wu:done.
|
|
5
5
|
*
|
|
6
|
-
*
|
|
7
|
-
* detection into a focused module.
|
|
8
|
-
*
|
|
9
|
-
* Functions:
|
|
10
|
-
* validateMainNotBehindOrigin - Check if local main is behind origin/main
|
|
11
|
-
* ensureMainNotBehindOrigin - Throws if local main is behind origin
|
|
12
|
-
*/
|
|
13
|
-
import { createGitForPath } from './git-adapter.js';
|
|
14
|
-
import { BRANCHES, REMOTES } from './wu-constants.js';
|
|
15
|
-
import { createError, ErrorCodes } from './error-handler.js';
|
|
16
|
-
/**
|
|
17
|
-
* WU-1577: Validate that local main is not behind origin/main before transaction.
|
|
18
|
-
*
|
|
19
|
-
* Defense-in-depth check inside the core layer. The CLI layer already has
|
|
20
|
-
* `ensureMainUpToDate()`, but this adds a guard directly before the
|
|
21
|
-
* transaction starts in `executeWorktreeCompletion()`.
|
|
22
|
-
*
|
|
23
|
-
* Fail-open: if the fetch or comparison fails (network issue), returns valid=true
|
|
24
|
-
* to avoid blocking legitimate work when there's no remote.
|
|
25
|
-
*/
|
|
26
|
-
export async function validateMainNotBehindOrigin(gitAdapter) {
|
|
27
|
-
try {
|
|
28
|
-
await gitAdapter.fetch(REMOTES.ORIGIN, BRANCHES.MAIN);
|
|
29
|
-
const localSha = await gitAdapter.getCommitHash(BRANCHES.MAIN);
|
|
30
|
-
const remoteSha = await gitAdapter.getCommitHash(`${REMOTES.ORIGIN}/${BRANCHES.MAIN}`);
|
|
31
|
-
if (localSha === remoteSha) {
|
|
32
|
-
return { valid: true, commitsBehind: 0 };
|
|
33
|
-
}
|
|
34
|
-
const behindRaw = await gitAdapter.revList([
|
|
35
|
-
'--count',
|
|
36
|
-
`${BRANCHES.MAIN}..${REMOTES.ORIGIN}/${BRANCHES.MAIN}`,
|
|
37
|
-
]);
|
|
38
|
-
const commitsBehind = Number(behindRaw.trim()) || 0;
|
|
39
|
-
if (commitsBehind > 0) {
|
|
40
|
-
return { valid: false, commitsBehind };
|
|
41
|
-
}
|
|
42
|
-
return { valid: true, commitsBehind: 0 };
|
|
43
|
-
}
|
|
44
|
-
catch {
|
|
45
|
-
return { valid: true, commitsBehind: 0, failOpen: true };
|
|
46
|
-
}
|
|
47
|
-
}
|
|
48
|
-
/**
|
|
49
|
-
* WU-1577: Helper that throws if local main is behind origin.
|
|
50
|
-
*
|
|
51
|
-
* Used as a pre-flight guard before starting the wu:done transaction.
|
|
52
|
-
*
|
|
53
|
-
* @param mainCheckoutPath - Absolute path to the main checkout
|
|
54
|
-
* @param wuId - WU ID for error messages
|
|
55
|
-
* @throws When local main is behind origin/main
|
|
6
|
+
* Canonical implementations now live in sync-validator.ts.
|
|
56
7
|
*/
|
|
57
|
-
export
|
|
58
|
-
const gitMainPreCheck = createGitForPath(mainCheckoutPath);
|
|
59
|
-
const result = await validateMainNotBehindOrigin(gitMainPreCheck);
|
|
60
|
-
if (!result.valid) {
|
|
61
|
-
throw createError(ErrorCodes.GIT_ERROR, `Local main is ${result.commitsBehind} commit(s) behind origin/main.\n\n` +
|
|
62
|
-
`wu:done aborted BEFORE file writes to prevent metadata leaks (WU-1577).\n\n` +
|
|
63
|
-
`Fix: git pull origin main\n` +
|
|
64
|
-
`Then retry: pnpm wu:done --id ${wuId}`, { wuId, commitsBehind: result.commitsBehind });
|
|
65
|
-
}
|
|
66
|
-
}
|
|
8
|
+
export { validateMainNotBehindOrigin, ensureMainNotBehindOrigin } from './sync-validator.js';
|
|
67
9
|
//# sourceMappingURL=wu-done-main-sync.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"wu-done-main-sync.js","sourceRoot":"","sources":["../src/wu-done-main-sync.ts"],"names":[],"mappings":"AAAA,iCAAiC;AACjC,yCAAyC;AAEzC
|
|
1
|
+
{"version":3,"file":"wu-done-main-sync.js","sourceRoot":"","sources":["../src/wu-done-main-sync.ts"],"names":[],"mappings":"AAAA,iCAAiC;AACjC,yCAAyC;AAEzC;;;;GAIG;AACH,OAAO,EAAE,2BAA2B,EAAE,yBAAyB,EAAE,MAAM,qBAAqB,CAAC"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { WUTransaction } from './wu-transaction.js';
|
|
2
|
+
import type { MainSyncGitAdapter } from './sync-validator.js';
|
|
2
3
|
/**
|
|
3
4
|
* Common dependencies shared by worktree completion services.
|
|
4
5
|
*/
|
|
@@ -65,11 +66,7 @@ export interface ValidateWorktreeStateInput {
|
|
|
65
66
|
/** Absolute path to the main checkout (for main-behind-origin check) */
|
|
66
67
|
mainCheckoutPath: string;
|
|
67
68
|
/** Git adapter scoped to the main checkout */
|
|
68
|
-
gitAdapterForMain
|
|
69
|
-
getCommitHash: (ref: string) => Promise<string>;
|
|
70
|
-
fetch: (...args: unknown[]) => Promise<unknown>;
|
|
71
|
-
revList: (args: string[]) => Promise<string>;
|
|
72
|
-
};
|
|
69
|
+
gitAdapterForMain?: MainSyncGitAdapter;
|
|
73
70
|
}
|
|
74
71
|
/**
|
|
75
72
|
* Validate worktree state for wu:done completion.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"wu-done-worktree-services.d.ts","sourceRoot":"","sources":["../src/wu-done-worktree-services.ts"],"names":[],"mappings":"AAwCA,OAAO,EAAE,aAAa,EAAkD,MAAM,qBAAqB,CAAC;
|
|
1
|
+
{"version":3,"file":"wu-done-worktree-services.d.ts","sourceRoot":"","sources":["../src/wu-done-worktree-services.ts"],"names":[],"mappings":"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"}
|
|
@@ -21,7 +21,7 @@ import path from 'node:path';
|
|
|
21
21
|
import { collectMetadataToTransaction, stageAndFormatMetadata, generateCommitMessage, defaultBranchFrom, branchExists, validatePostMutation, } from './wu-done-validators.js';
|
|
22
22
|
import { validateDoneWU, validateAndNormalizeWUYAML } from './wu-schema.js';
|
|
23
23
|
import { assertTransition } from './state-machine.js';
|
|
24
|
-
import {
|
|
24
|
+
import { resolveWorktreeMetadataPaths } from './wu-done-worktree.js';
|
|
25
25
|
import { emitLaneSignalForCompletion } from './wu-done-branch-only.js';
|
|
26
26
|
import { WU_DONE_COMPLETION_MODES } from './wu-done-pr.js';
|
|
27
27
|
import { clearRecoveryAttempts, detectZombieState } from './wu-recovery.js';
|
|
@@ -33,6 +33,8 @@ import { withAtomicMerge } from './atomic-merge.js';
|
|
|
33
33
|
import { BRANCHES, LOG_PREFIX, WU_STATUS } from './wu-constants.js';
|
|
34
34
|
import { createError, ErrorCodes } from './error-handler.js';
|
|
35
35
|
import { createValidationError } from './wu-done-errors.js';
|
|
36
|
+
import { createGitForPath } from './git-adapter.js';
|
|
37
|
+
import { ensureMainNotBehindOrigin } from './wu-done-main-sync.js';
|
|
36
38
|
/**
|
|
37
39
|
* Validate worktree state for wu:done completion.
|
|
38
40
|
*
|
|
@@ -47,7 +49,7 @@ import { createValidationError } from './wu-done-errors.js';
|
|
|
47
49
|
* @returns Validation result with error details
|
|
48
50
|
*/
|
|
49
51
|
export async function validateWorktreeState(input) {
|
|
50
|
-
const { wuId, worktreePath, doc, gitAdapterForMain } = input;
|
|
52
|
+
const { wuId, worktreePath, doc, mainCheckoutPath, gitAdapterForMain } = input;
|
|
51
53
|
const errors = [];
|
|
52
54
|
let zombieDetected = false;
|
|
53
55
|
// Check for zombie state (status=done in worktree)
|
|
@@ -65,17 +67,14 @@ export async function validateWorktreeState(input) {
|
|
|
65
67
|
errors.push(`State transition invalid: ${err.message}`);
|
|
66
68
|
return { valid: false, errors, zombieDetected };
|
|
67
69
|
}
|
|
68
|
-
// Check main
|
|
70
|
+
// Check main sync using canonical wu:done not-behind invariant (fail-closed on sync errors).
|
|
69
71
|
try {
|
|
70
|
-
const
|
|
71
|
-
|
|
72
|
-
errors.push(`Local main is ${mainResult.commitsBehind} commit(s) behind origin/main. ` +
|
|
73
|
-
`Fix: git pull origin main`);
|
|
74
|
-
return { valid: false, errors, zombieDetected };
|
|
75
|
-
}
|
|
72
|
+
const mainGit = gitAdapterForMain ?? createGitForPath(mainCheckoutPath);
|
|
73
|
+
await ensureMainNotBehindOrigin(mainCheckoutPath, wuId, { gitAdapterForMain: mainGit });
|
|
76
74
|
}
|
|
77
|
-
catch {
|
|
78
|
-
|
|
75
|
+
catch (err) {
|
|
76
|
+
errors.push(err.message);
|
|
77
|
+
return { valid: false, errors, zombieDetected };
|
|
79
78
|
}
|
|
80
79
|
// Validate and normalize WU YAML schema
|
|
81
80
|
const normalizeResult = validateAndNormalizeWUYAML(doc);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"wu-done-worktree-services.js","sourceRoot":"","sources":["../src/wu-done-worktree-services.ts"],"names":[],"mappings":"AAAA,iCAAiC;AACjC,yCAAyC;AAEzC;;;;;;;;;;;;;;;;GAgBG;AAEH,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EACL,4BAA4B,EAC5B,sBAAsB,EACtB,qBAAqB,EACrB,iBAAiB,EACjB,YAAY,EACZ,oBAAoB,GACrB,MAAM,yBAAyB,CAAC;AACjC,OAAO,EAAE,cAAc,EAAE,0BAA0B,EAAE,MAAM,gBAAgB,CAAC;AAC5E,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AACtD,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"wu-done-worktree-services.js","sourceRoot":"","sources":["../src/wu-done-worktree-services.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
/** A single ID collision group */
|
|
2
|
+
export interface DuplicateIdGroup {
|
|
3
|
+
/** The duplicated WU ID */
|
|
4
|
+
id: string;
|
|
5
|
+
/** Absolute paths to YAML files that claim this ID */
|
|
6
|
+
files: string[];
|
|
7
|
+
/** Stamp file paths associated with this ID */
|
|
8
|
+
stamps: string[];
|
|
9
|
+
/** Events from wu-events.jsonl associated with this ID */
|
|
10
|
+
events: Array<{
|
|
11
|
+
line: number;
|
|
12
|
+
event: Record<string, unknown>;
|
|
13
|
+
}>;
|
|
14
|
+
}
|
|
15
|
+
/** Detection report */
|
|
16
|
+
export interface DuplicateIdReport {
|
|
17
|
+
/** Total WU files scanned */
|
|
18
|
+
totalWUs: number;
|
|
19
|
+
/** Groups of colliding IDs */
|
|
20
|
+
duplicates: DuplicateIdGroup[];
|
|
21
|
+
}
|
|
22
|
+
/** A single ID remapping entry */
|
|
23
|
+
export interface IdMapping {
|
|
24
|
+
/** Original colliding ID */
|
|
25
|
+
oldId: string;
|
|
26
|
+
/** Newly assigned ID */
|
|
27
|
+
newId: string;
|
|
28
|
+
/** The file that was renamed (the duplicate, not the canonical) */
|
|
29
|
+
renamedFile: string;
|
|
30
|
+
/** All files that were modified during repair */
|
|
31
|
+
touchedFiles: string[];
|
|
32
|
+
}
|
|
33
|
+
/** Repair result */
|
|
34
|
+
export interface DuplicateIdRepairResult {
|
|
35
|
+
/** Whether changes were actually applied */
|
|
36
|
+
applied: boolean;
|
|
37
|
+
/** Mapping of old -> new IDs */
|
|
38
|
+
mappings: IdMapping[];
|
|
39
|
+
}
|
|
40
|
+
/** Repair options */
|
|
41
|
+
export interface RepairOptions {
|
|
42
|
+
/** If true, actually modify files. If false, dry-run only. */
|
|
43
|
+
apply: boolean;
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* Detect duplicate WU IDs across YAML files, stamps, and events.
|
|
47
|
+
*
|
|
48
|
+
* @param projectRoot - Absolute path to the project root
|
|
49
|
+
* @returns Detection report
|
|
50
|
+
*/
|
|
51
|
+
export declare function detectDuplicateIds(projectRoot: string): Promise<DuplicateIdReport>;
|
|
52
|
+
/**
|
|
53
|
+
* Repair duplicate WU IDs.
|
|
54
|
+
*
|
|
55
|
+
* For each collision group, the canonical file (matching filename) keeps its ID.
|
|
56
|
+
* All other files get a new unique ID. References (blocked_by, dependencies, blocks)
|
|
57
|
+
* in other WU files are updated. Stamps and events are updated accordingly.
|
|
58
|
+
*
|
|
59
|
+
* @param projectRoot - Absolute path to the project root
|
|
60
|
+
* @param options - Repair options (apply: true to actually mutate files)
|
|
61
|
+
* @returns Repair result with mappings
|
|
62
|
+
*/
|
|
63
|
+
export declare function repairDuplicateIds(projectRoot: string, options: RepairOptions): Promise<DuplicateIdRepairResult>;
|
|
64
|
+
//# sourceMappingURL=wu-duplicate-id-detector.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"wu-duplicate-id-detector.d.ts","sourceRoot":"","sources":["../src/wu-duplicate-id-detector.ts"],"names":[],"mappings":"AAwBA,kCAAkC;AAClC,MAAM,WAAW,gBAAgB;IAC/B,2BAA2B;IAC3B,EAAE,EAAE,MAAM,CAAC;IACX,sDAAsD;IACtD,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,+CAA+C;IAC/C,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,0DAA0D;IAC1D,MAAM,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;KAAE,CAAC,CAAC;CACjE;AAED,uBAAuB;AACvB,MAAM,WAAW,iBAAiB;IAChC,6BAA6B;IAC7B,QAAQ,EAAE,MAAM,CAAC;IACjB,8BAA8B;IAC9B,UAAU,EAAE,gBAAgB,EAAE,CAAC;CAChC;AAED,kCAAkC;AAClC,MAAM,WAAW,SAAS;IACxB,4BAA4B;IAC5B,KAAK,EAAE,MAAM,CAAC;IACd,wBAAwB;IACxB,KAAK,EAAE,MAAM,CAAC;IACd,mEAAmE;IACnE,WAAW,EAAE,MAAM,CAAC;IACpB,iDAAiD;IACjD,YAAY,EAAE,MAAM,EAAE,CAAC;CACxB;AAED,oBAAoB;AACpB,MAAM,WAAW,uBAAuB;IACtC,4CAA4C;IAC5C,OAAO,EAAE,OAAO,CAAC;IACjB,gCAAgC;IAChC,QAAQ,EAAE,SAAS,EAAE,CAAC;CACvB;AAED,qBAAqB;AACrB,MAAM,WAAW,aAAa;IAC5B,8DAA8D;IAC9D,KAAK,EAAE,OAAO,CAAC;CAChB;AA6FD;;;;;GAKG;AACH,wBAAsB,kBAAkB,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAgCxF;AAuHD;;;;;;;;;;GAUG;AACH,wBAAsB,kBAAkB,CACtC,WAAW,EAAE,MAAM,EACnB,OAAO,EAAE,aAAa,GACrB,OAAO,CAAC,uBAAuB,CAAC,CA2FlC"}
|