mewkit 1.14.1 → 1.15.0
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/README.md +7 -0
- package/dist/commands/capabilities.d.ts +13 -0
- package/dist/commands/capabilities.d.ts.map +1 -0
- package/dist/commands/capabilities.js +230 -0
- package/dist/commands/capabilities.js.map +1 -0
- package/dist/commands/context.d.ts +10 -0
- package/dist/commands/context.d.ts.map +1 -0
- package/dist/commands/context.js +125 -0
- package/dist/commands/context.js.map +1 -0
- package/dist/commands/doctor.d.ts +27 -0
- package/dist/commands/doctor.d.ts.map +1 -1
- package/dist/commands/doctor.js +123 -0
- package/dist/commands/doctor.js.map +1 -1
- package/dist/commands/providers.d.ts +2 -0
- package/dist/commands/providers.d.ts.map +1 -1
- package/dist/commands/providers.js +77 -0
- package/dist/commands/providers.js.map +1 -1
- package/dist/commands/task-state.d.ts +13 -0
- package/dist/commands/task-state.d.ts.map +1 -0
- package/dist/commands/task-state.js +106 -0
- package/dist/commands/task-state.js.map +1 -0
- package/dist/commands/validate.d.ts +48 -1
- package/dist/commands/validate.d.ts.map +1 -1
- package/dist/commands/validate.js +97 -24
- package/dist/commands/validate.js.map +1 -1
- package/dist/core/availability.d.ts +40 -0
- package/dist/core/availability.d.ts.map +1 -0
- package/dist/core/availability.js +47 -0
- package/dist/core/availability.js.map +1 -0
- package/dist/core/bootstrap.d.ts +19 -0
- package/dist/core/bootstrap.d.ts.map +1 -0
- package/dist/core/bootstrap.js +42 -0
- package/dist/core/bootstrap.js.map +1 -0
- package/dist/core/build-capabilities.d.ts +9 -0
- package/dist/core/build-capabilities.d.ts.map +1 -0
- package/dist/core/build-capabilities.js +123 -0
- package/dist/core/build-capabilities.js.map +1 -0
- package/dist/core/build-inventory.d.ts +2 -0
- package/dist/core/build-inventory.d.ts.map +1 -1
- package/dist/core/build-inventory.js +1 -1
- package/dist/core/build-inventory.js.map +1 -1
- package/dist/core/capability-authored.d.ts +26 -0
- package/dist/core/capability-authored.d.ts.map +1 -0
- package/dist/core/capability-authored.js +117 -0
- package/dist/core/capability-authored.js.map +1 -0
- package/dist/core/capability-snapshot.d.ts +13 -0
- package/dist/core/capability-snapshot.d.ts.map +1 -0
- package/dist/core/capability-snapshot.js +53 -0
- package/dist/core/capability-snapshot.js.map +1 -0
- package/dist/core/capability.d.ts +519 -0
- package/dist/core/capability.d.ts.map +1 -0
- package/dist/core/capability.js +114 -0
- package/dist/core/capability.js.map +1 -0
- package/dist/core/compute-checksums.d.ts.map +1 -1
- package/dist/core/compute-checksums.js +8 -2
- package/dist/core/compute-checksums.js.map +1 -1
- package/dist/core/consolidation-ledger.d.ts +30 -0
- package/dist/core/consolidation-ledger.d.ts.map +1 -0
- package/dist/core/consolidation-ledger.js +145 -0
- package/dist/core/consolidation-ledger.js.map +1 -0
- package/dist/core/generate-capability-view.d.ts +21 -0
- package/dist/core/generate-capability-view.d.ts.map +1 -0
- package/dist/core/generate-capability-view.js +48 -0
- package/dist/core/generate-capability-view.js.map +1 -0
- package/dist/core/install-metadata.d.ts +47 -30
- package/dist/core/install-metadata.d.ts.map +1 -1
- package/dist/core/install-metadata.js +49 -9
- package/dist/core/install-metadata.js.map +1 -1
- package/dist/core/plugin-manifest.d.ts +16 -16
- package/dist/core/provider-adapter.d.ts +28 -0
- package/dist/core/provider-adapter.d.ts.map +1 -0
- package/dist/core/provider-adapter.js +31 -0
- package/dist/core/provider-adapter.js.map +1 -0
- package/dist/core/provider-invocation.d.ts +14 -0
- package/dist/core/provider-invocation.d.ts.map +1 -0
- package/dist/core/provider-invocation.js +56 -0
- package/dist/core/provider-invocation.js.map +1 -0
- package/dist/core/provider-lifecycle.d.ts +35 -0
- package/dist/core/provider-lifecycle.d.ts.map +1 -0
- package/dist/core/provider-lifecycle.js +101 -0
- package/dist/core/provider-lifecycle.js.map +1 -0
- package/dist/core/provider-projection.d.ts +29 -0
- package/dist/core/provider-projection.d.ts.map +1 -0
- package/dist/core/provider-projection.js +47 -0
- package/dist/core/provider-projection.js.map +1 -0
- package/dist/core/release-metadata.d.ts +9 -2
- package/dist/core/release-metadata.d.ts.map +1 -1
- package/dist/core/release-metadata.js +13 -0
- package/dist/core/release-metadata.js.map +1 -1
- package/dist/core/repo-context-adapter.d.ts +23 -0
- package/dist/core/repo-context-adapter.d.ts.map +1 -0
- package/dist/core/repo-context-adapter.js +44 -0
- package/dist/core/repo-context-adapter.js.map +1 -0
- package/dist/core/repo-context.d.ts +147 -0
- package/dist/core/repo-context.d.ts.map +1 -0
- package/dist/core/repo-context.js +204 -0
- package/dist/core/repo-context.js.map +1 -0
- package/dist/core/resolve-capabilities.d.ts +70 -0
- package/dist/core/resolve-capabilities.d.ts.map +1 -0
- package/dist/core/resolve-capabilities.js +124 -0
- package/dist/core/resolve-capabilities.js.map +1 -0
- package/dist/core/smart-update.d.ts.map +1 -1
- package/dist/core/smart-update.js +13 -12
- package/dist/core/smart-update.js.map +1 -1
- package/dist/core/task-record.d.ts +252 -0
- package/dist/core/task-record.d.ts.map +1 -0
- package/dist/core/task-record.js +252 -0
- package/dist/core/task-record.js.map +1 -0
- package/dist/core/validate-capabilities.d.ts +12 -0
- package/dist/core/validate-capabilities.d.ts.map +1 -0
- package/dist/core/validate-capabilities.js +138 -0
- package/dist/core/validate-capabilities.js.map +1 -0
- package/dist/index.js +66 -4
- package/dist/index.js.map +1 -1
- package/dist/migrate/capability-bootstrap-projection.d.ts +11 -0
- package/dist/migrate/capability-bootstrap-projection.d.ts.map +1 -0
- package/dist/migrate/capability-bootstrap-projection.js +48 -0
- package/dist/migrate/capability-bootstrap-projection.js.map +1 -0
- package/dist/migrate/migrate-orchestrator.d.ts.map +1 -1
- package/dist/migrate/migrate-orchestrator.js +22 -0
- package/dist/migrate/migrate-orchestrator.js.map +1 -1
- package/dist/migrate/reconcile/portable-registry.d.ts +18 -18
- package/dist/orchviz-web/index.js +3 -3
- package/package.json +1 -1
- package/dist/commands/evolve.d.ts +0 -11
- package/dist/commands/evolve.d.ts.map +0 -1
- package/dist/commands/evolve.js +0 -63
- package/dist/commands/evolve.js.map +0 -1
- package/dist/commands/health.d.ts +0 -14
- package/dist/commands/health.d.ts.map +0 -1
- package/dist/commands/health.js +0 -193
- package/dist/commands/health.js.map +0 -1
- package/dist/commands/policy.d.ts +0 -8
- package/dist/commands/policy.d.ts.map +0 -1
- package/dist/commands/policy.js +0 -65
- package/dist/commands/policy.js.map +0 -1
- package/dist/commands/portability.d.ts +0 -7
- package/dist/commands/portability.d.ts.map +0 -1
- package/dist/commands/portability.js +0 -50
- package/dist/commands/portability.js.map +0 -1
- package/dist/commands/reflect.d.ts +0 -14
- package/dist/commands/reflect.d.ts.map +0 -1
- package/dist/commands/reflect.js +0 -135
- package/dist/commands/reflect.js.map +0 -1
- package/dist/commands/simulate.d.ts +0 -14
- package/dist/commands/simulate.d.ts.map +0 -1
- package/dist/commands/simulate.js +0 -86
- package/dist/commands/simulate.js.map +0 -1
- package/dist/core/event-log.d.ts +0 -44
- package/dist/core/event-log.d.ts.map +0 -1
- package/dist/core/event-log.js +0 -169
- package/dist/core/event-log.js.map +0 -1
- package/dist/core/evolution/event-clusters.d.ts +0 -4
- package/dist/core/evolution/event-clusters.d.ts.map +0 -1
- package/dist/core/evolution/event-clusters.js +0 -82
- package/dist/core/evolution/event-clusters.js.map +0 -1
- package/dist/core/evolution/recommendation-renderer.d.ts +0 -3
- package/dist/core/evolution/recommendation-renderer.d.ts.map +0 -1
- package/dist/core/evolution/recommendation-renderer.js +0 -24
- package/dist/core/evolution/recommendation-renderer.js.map +0 -1
- package/dist/core/evolution/review-failure-clusters.d.ts +0 -10
- package/dist/core/evolution/review-failure-clusters.d.ts.map +0 -1
- package/dist/core/evolution/review-failure-clusters.js +0 -30
- package/dist/core/evolution/review-failure-clusters.js.map +0 -1
- package/dist/core/evolution/suggestions.d.ts +0 -24
- package/dist/core/evolution/suggestions.d.ts.map +0 -1
- package/dist/core/evolution/suggestions.js +0 -11
- package/dist/core/evolution/suggestions.js.map +0 -1
- package/dist/core/gate-policy.d.ts +0 -20
- package/dist/core/gate-policy.d.ts.map +0 -1
- package/dist/core/gate-policy.js +0 -64
- package/dist/core/gate-policy.js.map +0 -1
- package/dist/core/portability-matrix.d.ts +0 -17
- package/dist/core/portability-matrix.d.ts.map +0 -1
- package/dist/core/portability-matrix.js +0 -31
- package/dist/core/portability-matrix.js.map +0 -1
- package/dist/core/simulation-runner.d.ts +0 -93
- package/dist/core/simulation-runner.d.ts.map +0 -1
- package/dist/core/simulation-runner.js +0 -161
- package/dist/core/simulation-runner.js.map +0 -1
- package/dist/core/usage/usage-analyzer.d.ts +0 -18
- package/dist/core/usage/usage-analyzer.d.ts.map +0 -1
- package/dist/core/usage/usage-analyzer.js +0 -41
- package/dist/core/usage/usage-analyzer.js.map +0 -1
- package/dist/memory/archive.d.ts +0 -9
- package/dist/memory/archive.d.ts.map +0 -1
- package/dist/memory/archive.js +0 -42
- package/dist/memory/archive.js.map +0 -1
- package/dist/memory/compact.d.ts +0 -9
- package/dist/memory/compact.d.ts.map +0 -1
- package/dist/memory/compact.js +0 -33
- package/dist/memory/compact.js.map +0 -1
- package/dist/memory/conflicts.d.ts +0 -8
- package/dist/memory/conflicts.d.ts.map +0 -1
- package/dist/memory/conflicts.js +0 -28
- package/dist/memory/conflicts.js.map +0 -1
- package/dist/memory/promote.d.ts +0 -8
- package/dist/memory/promote.d.ts.map +0 -1
- package/dist/memory/promote.js +0 -10
- package/dist/memory/promote.js.map +0 -1
- package/dist/memory/store-utils.d.ts +0 -14
- package/dist/memory/store-utils.d.ts.map +0 -1
- package/dist/memory/store-utils.js +0 -44
- package/dist/memory/store-utils.js.map +0 -1
- package/dist/migrate/__tests__/frontmatter-parser.test.d.ts +0 -2
- package/dist/migrate/__tests__/frontmatter-parser.test.d.ts.map +0 -1
- package/dist/migrate/__tests__/frontmatter-parser.test.js +0 -73
- package/dist/migrate/__tests__/frontmatter-parser.test.js.map +0 -1
- package/dist/migrate/__tests__/md-strip-mewkit.test.d.ts +0 -2
- package/dist/migrate/__tests__/md-strip-mewkit.test.d.ts.map +0 -1
- package/dist/migrate/__tests__/md-strip-mewkit.test.js +0 -55
- package/dist/migrate/__tests__/md-strip-mewkit.test.js.map +0 -1
- package/dist/migrate/__tests__/migrate-scope-resolver.test.d.ts +0 -2
- package/dist/migrate/__tests__/migrate-scope-resolver.test.d.ts.map +0 -1
- package/dist/migrate/__tests__/migrate-scope-resolver.test.js +0 -53
- package/dist/migrate/__tests__/migrate-scope-resolver.test.js.map +0 -1
- package/dist/migrate/__tests__/process-lock.test.d.ts +0 -2
- package/dist/migrate/__tests__/process-lock.test.d.ts.map +0 -1
- package/dist/migrate/__tests__/process-lock.test.js +0 -63
- package/dist/migrate/__tests__/process-lock.test.js.map +0 -1
- package/dist/migrate/__tests__/provider-registry.test.d.ts +0 -2
- package/dist/migrate/__tests__/provider-registry.test.d.ts.map +0 -1
- package/dist/migrate/__tests__/provider-registry.test.js +0 -53
- package/dist/migrate/__tests__/provider-registry.test.js.map +0 -1
- package/dist/migrate/__tests__/reconciler.test.d.ts +0 -2
- package/dist/migrate/__tests__/reconciler.test.d.ts.map +0 -1
- package/dist/migrate/__tests__/reconciler.test.js +0 -180
- package/dist/migrate/__tests__/reconciler.test.js.map +0 -1
- package/dist/migrate/__tests__/skill-id-utils.test.d.ts +0 -2
- package/dist/migrate/__tests__/skill-id-utils.test.d.ts.map +0 -1
- package/dist/migrate/__tests__/skill-id-utils.test.js +0 -78
- package/dist/migrate/__tests__/skill-id-utils.test.js.map +0 -1
- package/dist/orchviz/plan/__tests__/apply-todo-toggle.test.d.ts +0 -15
- package/dist/orchviz/plan/__tests__/apply-todo-toggle.test.d.ts.map +0 -1
- package/dist/orchviz/plan/__tests__/apply-todo-toggle.test.js +0 -165
- package/dist/orchviz/plan/__tests__/apply-todo-toggle.test.js.map +0 -1
- package/dist/orchviz/plan/__tests__/atomic-write.test.d.ts +0 -11
- package/dist/orchviz/plan/__tests__/atomic-write.test.d.ts.map +0 -1
- package/dist/orchviz/plan/__tests__/atomic-write.test.js +0 -89
- package/dist/orchviz/plan/__tests__/atomic-write.test.js.map +0 -1
- package/dist/orchviz/plan/__tests__/end-to-end.test.d.ts +0 -10
- package/dist/orchviz/plan/__tests__/end-to-end.test.d.ts.map +0 -1
- package/dist/orchviz/plan/__tests__/end-to-end.test.js +0 -132
- package/dist/orchviz/plan/__tests__/end-to-end.test.js.map +0 -1
- package/dist/orchviz/plan/__tests__/etag.test.d.ts +0 -11
- package/dist/orchviz/plan/__tests__/etag.test.d.ts.map +0 -1
- package/dist/orchviz/plan/__tests__/etag.test.js +0 -92
- package/dist/orchviz/plan/__tests__/etag.test.js.map +0 -1
- package/dist/orchviz/plan/__tests__/list-plans.test.d.ts +0 -14
- package/dist/orchviz/plan/__tests__/list-plans.test.d.ts.map +0 -1
- package/dist/orchviz/plan/__tests__/list-plans.test.js +0 -154
- package/dist/orchviz/plan/__tests__/list-plans.test.js.map +0 -1
- package/dist/orchviz/server/__tests__/security-smoke.test.d.ts +0 -13
- package/dist/orchviz/server/__tests__/security-smoke.test.d.ts.map +0 -1
- package/dist/orchviz/server/__tests__/security-smoke.test.js +0 -207
- package/dist/orchviz/server/__tests__/security-smoke.test.js.map +0 -1
- package/dist/orchviz/server/__tests__/write-handlers.test.d.ts +0 -24
- package/dist/orchviz/server/__tests__/write-handlers.test.d.ts.map +0 -1
- package/dist/orchviz/server/__tests__/write-handlers.test.js +0 -347
- package/dist/orchviz/server/__tests__/write-handlers.test.js.map +0 -1
- package/dist/orchviz/test-server-boot.d.ts +0 -28
- package/dist/orchviz/test-server-boot.d.ts.map +0 -1
- package/dist/orchviz/test-server-boot.js +0 -64
- package/dist/orchviz/test-server-boot.js.map +0 -1
|
@@ -1,180 +0,0 @@
|
|
|
1
|
-
import { describe, expect, it } from "vitest";
|
|
2
|
-
import { reconcile } from "../reconcile/reconciler.js";
|
|
3
|
-
function makeRegistry(installations = []) {
|
|
4
|
-
return { version: "3.0", installations };
|
|
5
|
-
}
|
|
6
|
-
function makeSource(item, sourceChecksum, targetChecksum) {
|
|
7
|
-
return {
|
|
8
|
-
item,
|
|
9
|
-
type: "agent",
|
|
10
|
-
sourceChecksum,
|
|
11
|
-
convertedChecksums: { cursor: sourceChecksum },
|
|
12
|
-
targetChecksums: { cursor: targetChecksum },
|
|
13
|
-
};
|
|
14
|
-
}
|
|
15
|
-
function makeInstall(item, sourceChecksum, targetChecksum) {
|
|
16
|
-
return {
|
|
17
|
-
item,
|
|
18
|
-
type: "agent",
|
|
19
|
-
provider: "cursor",
|
|
20
|
-
global: false,
|
|
21
|
-
path: ".cursor/rules/" + item + ".mdc",
|
|
22
|
-
installedAt: "2026-01-01T00:00:00Z",
|
|
23
|
-
sourcePath: "/src/" + item + ".md",
|
|
24
|
-
sourceChecksum,
|
|
25
|
-
targetChecksum,
|
|
26
|
-
installSource: "kit",
|
|
27
|
-
};
|
|
28
|
-
}
|
|
29
|
-
function makeTargetState(path, exists, currentChecksum) {
|
|
30
|
-
return { path, exists, currentChecksum };
|
|
31
|
-
}
|
|
32
|
-
const baseInput = {
|
|
33
|
-
providerConfigs: [{ provider: "cursor", global: false }],
|
|
34
|
-
};
|
|
35
|
-
describe("reconcile — 8-case decision matrix", () => {
|
|
36
|
-
it("case 1: not in registry, target missing → install (new-item)", () => {
|
|
37
|
-
const input = {
|
|
38
|
-
...baseInput,
|
|
39
|
-
sourceItems: [makeSource("scout", "src1", "src1")],
|
|
40
|
-
registry: makeRegistry(),
|
|
41
|
-
targetStates: new Map(),
|
|
42
|
-
};
|
|
43
|
-
const plan = reconcile(input);
|
|
44
|
-
expect(plan.summary.install).toBe(1);
|
|
45
|
-
expect(plan.actions[0].action).toBe("install");
|
|
46
|
-
expect(plan.actions[0].reasonCode).toBe("new-item");
|
|
47
|
-
});
|
|
48
|
-
it("case 2: not in registry but item exists for other providers → new-provider-for-item", () => {
|
|
49
|
-
const otherProvider = {
|
|
50
|
-
...makeInstall("scout", "src1", "src1"),
|
|
51
|
-
provider: "codex",
|
|
52
|
-
};
|
|
53
|
-
const input = {
|
|
54
|
-
...baseInput,
|
|
55
|
-
sourceItems: [makeSource("scout", "src1", "src1")],
|
|
56
|
-
registry: makeRegistry([otherProvider]),
|
|
57
|
-
targetStates: new Map(),
|
|
58
|
-
};
|
|
59
|
-
const plan = reconcile(input);
|
|
60
|
-
expect(plan.actions[0].action).toBe("install");
|
|
61
|
-
expect(plan.actions[0].reasonCode).toBe("new-provider-for-item");
|
|
62
|
-
});
|
|
63
|
-
it("case 3: in registry, sources match, target unchanged → skip (no-changes)", () => {
|
|
64
|
-
const reg = makeInstall("scout", "src1", "tgt1");
|
|
65
|
-
const input = {
|
|
66
|
-
...baseInput,
|
|
67
|
-
sourceItems: [makeSource("scout", "src1", "tgt1")],
|
|
68
|
-
registry: makeRegistry([reg]),
|
|
69
|
-
targetStates: new Map([[reg.path, makeTargetState(reg.path, true, "tgt1")]]),
|
|
70
|
-
};
|
|
71
|
-
const plan = reconcile(input);
|
|
72
|
-
expect(plan.summary.skip).toBe(1);
|
|
73
|
-
expect(plan.actions[0].reasonCode).toBe("no-changes");
|
|
74
|
-
});
|
|
75
|
-
it("case 4: in registry, sources match, target edited by user → skip (user-edits-preserved)", () => {
|
|
76
|
-
const reg = makeInstall("scout", "src1", "tgt1");
|
|
77
|
-
const input = {
|
|
78
|
-
...baseInput,
|
|
79
|
-
sourceItems: [makeSource("scout", "src1", "tgt1")],
|
|
80
|
-
registry: makeRegistry([reg]),
|
|
81
|
-
targetStates: new Map([[reg.path, makeTargetState(reg.path, true, "user-edited")]]),
|
|
82
|
-
};
|
|
83
|
-
const plan = reconcile(input);
|
|
84
|
-
expect(plan.summary.skip).toBe(1);
|
|
85
|
-
expect(plan.actions[0].reasonCode).toBe("user-edits-preserved");
|
|
86
|
-
});
|
|
87
|
-
it("case 4 with --force: target edited → install (force-overwrite)", () => {
|
|
88
|
-
const reg = makeInstall("scout", "src1", "tgt1");
|
|
89
|
-
const input = {
|
|
90
|
-
...baseInput,
|
|
91
|
-
sourceItems: [makeSource("scout", "src1", "tgt1")],
|
|
92
|
-
registry: makeRegistry([reg]),
|
|
93
|
-
targetStates: new Map([[reg.path, makeTargetState(reg.path, true, "user-edited")]]),
|
|
94
|
-
force: true,
|
|
95
|
-
};
|
|
96
|
-
const plan = reconcile(input);
|
|
97
|
-
expect(plan.summary.install).toBe(1);
|
|
98
|
-
expect(plan.actions[0].reasonCode).toBe("force-overwrite");
|
|
99
|
-
});
|
|
100
|
-
it("case 5: source changed, target unchanged → update (source-changed)", () => {
|
|
101
|
-
const reg = makeInstall("scout", "src1", "tgt1");
|
|
102
|
-
const input = {
|
|
103
|
-
...baseInput,
|
|
104
|
-
sourceItems: [makeSource("scout", "src2", "tgt2")],
|
|
105
|
-
registry: makeRegistry([reg]),
|
|
106
|
-
targetStates: new Map([[reg.path, makeTargetState(reg.path, true, "tgt1")]]),
|
|
107
|
-
};
|
|
108
|
-
const plan = reconcile(input);
|
|
109
|
-
expect(plan.summary.update).toBe(1);
|
|
110
|
-
expect(plan.actions[0].reasonCode).toBe("source-changed");
|
|
111
|
-
});
|
|
112
|
-
it("case 6: source changed AND target changed → conflict (both-changed)", () => {
|
|
113
|
-
const reg = makeInstall("scout", "src1", "tgt1");
|
|
114
|
-
const input = {
|
|
115
|
-
...baseInput,
|
|
116
|
-
sourceItems: [makeSource("scout", "src2", "tgt2")],
|
|
117
|
-
registry: makeRegistry([reg]),
|
|
118
|
-
targetStates: new Map([[reg.path, makeTargetState(reg.path, true, "user-edited")]]),
|
|
119
|
-
};
|
|
120
|
-
const plan = reconcile(input);
|
|
121
|
-
expect(plan.summary.conflict).toBe(1);
|
|
122
|
-
expect(plan.hasConflicts).toBe(true);
|
|
123
|
-
expect(plan.actions[0].reasonCode).toBe("both-changed");
|
|
124
|
-
});
|
|
125
|
-
it("case 7: source removed but registry has entry → delete (source-removed-orphan)", () => {
|
|
126
|
-
const reg = makeInstall("scout", "src1", "tgt1");
|
|
127
|
-
const input = {
|
|
128
|
-
...baseInput,
|
|
129
|
-
sourceItems: [],
|
|
130
|
-
registry: makeRegistry([reg]),
|
|
131
|
-
targetStates: new Map([[reg.path, makeTargetState(reg.path, true, "tgt1")]]),
|
|
132
|
-
};
|
|
133
|
-
const plan = reconcile(input);
|
|
134
|
-
expect(plan.summary.delete).toBe(1);
|
|
135
|
-
expect(plan.actions[0].reasonCode).toBe("source-removed-orphan");
|
|
136
|
-
});
|
|
137
|
-
it("case 8: unknown checksums in registry (v2 entry) + target matches → backfill skip", () => {
|
|
138
|
-
const reg = {
|
|
139
|
-
...makeInstall("scout", "unknown", "unknown"),
|
|
140
|
-
};
|
|
141
|
-
const source = makeSource("scout", "src1", "src1");
|
|
142
|
-
const input = {
|
|
143
|
-
...baseInput,
|
|
144
|
-
sourceItems: [source],
|
|
145
|
-
registry: makeRegistry([reg]),
|
|
146
|
-
targetStates: new Map([[reg.path, makeTargetState(reg.path, true, "src1")]]),
|
|
147
|
-
};
|
|
148
|
-
const plan = reconcile(input);
|
|
149
|
-
expect(plan.summary.skip).toBe(1);
|
|
150
|
-
expect(plan.actions[0].reasonCode).toBe("target-up-to-date-backfill");
|
|
151
|
-
expect(plan.actions[0].backfillRegistry).toBe(true);
|
|
152
|
-
});
|
|
153
|
-
it("target deleted by user, source unchanged → skip (user-deleted-respected)", () => {
|
|
154
|
-
const reg = makeInstall("scout", "src1", "tgt1");
|
|
155
|
-
const input = {
|
|
156
|
-
...baseInput,
|
|
157
|
-
sourceItems: [makeSource("scout", "src1", "tgt1")],
|
|
158
|
-
registry: makeRegistry([reg]),
|
|
159
|
-
targetStates: new Map([[reg.path, makeTargetState(reg.path, false)]]),
|
|
160
|
-
};
|
|
161
|
-
const plan = reconcile(input);
|
|
162
|
-
expect(plan.actions[0].action).toBe("skip");
|
|
163
|
-
expect(plan.actions[0].reasonCode).toBe("user-deleted-respected");
|
|
164
|
-
});
|
|
165
|
-
it("replay safety: same input twice → identical plans (deterministic)", () => {
|
|
166
|
-
const reg = makeInstall("scout", "src1", "tgt1");
|
|
167
|
-
const input = {
|
|
168
|
-
...baseInput,
|
|
169
|
-
sourceItems: [makeSource("scout", "src1", "tgt1")],
|
|
170
|
-
registry: makeRegistry([reg]),
|
|
171
|
-
targetStates: new Map([[reg.path, makeTargetState(reg.path, true, "tgt1")]]),
|
|
172
|
-
};
|
|
173
|
-
const plan1 = reconcile(input);
|
|
174
|
-
const plan2 = reconcile(input);
|
|
175
|
-
expect(plan1).toEqual(plan2);
|
|
176
|
-
expect(plan1.summary.install).toBe(0);
|
|
177
|
-
expect(plan1.summary.update).toBe(0);
|
|
178
|
-
});
|
|
179
|
-
});
|
|
180
|
-
//# sourceMappingURL=reconciler.test.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"reconciler.test.js","sourceRoot":"","sources":["../../../src/migrate/__tests__/reconciler.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"skill-id-utils.test.d.ts","sourceRoot":"","sources":["../../../src/migrate/__tests__/skill-id-utils.test.ts"],"names":[],"mappings":""}
|
|
@@ -1,78 +0,0 @@
|
|
|
1
|
-
import { afterEach, beforeEach, describe, expect, it, vi } from "vitest";
|
|
2
|
-
import { BASE_RE, SKILL_ID_RE, _resetWarnState, parseSkillId, resolveLegacy, } from "../discovery/skill-id-utils.js";
|
|
3
|
-
describe("skill-id-utils", () => {
|
|
4
|
-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
5
|
-
let stderrSpy;
|
|
6
|
-
beforeEach(() => {
|
|
7
|
-
_resetWarnState();
|
|
8
|
-
stderrSpy = vi.spyOn(process.stderr, "write").mockImplementation((() => true));
|
|
9
|
-
});
|
|
10
|
-
afterEach(() => {
|
|
11
|
-
stderrSpy.mockRestore();
|
|
12
|
-
});
|
|
13
|
-
describe("parseSkillId", () => {
|
|
14
|
-
it("returns mk:<base> from valid mk: frontmatter", () => {
|
|
15
|
-
expect(parseSkillId("mk:cook", "cook")).toBe("mk:cook");
|
|
16
|
-
expect(stderrSpy).not.toHaveBeenCalled();
|
|
17
|
-
});
|
|
18
|
-
it("normalizes legacy meow: frontmatter to mk:", () => {
|
|
19
|
-
expect(parseSkillId("meow:cook", "meow:cook")).toBe("mk:cook");
|
|
20
|
-
expect(stderrSpy).toHaveBeenCalledTimes(1);
|
|
21
|
-
});
|
|
22
|
-
it("falls back to mk:<base> when frontmatter is absent (post-rename folder)", () => {
|
|
23
|
-
expect(parseSkillId(undefined, "cook")).toBe("mk:cook");
|
|
24
|
-
});
|
|
25
|
-
it("falls back to mk:<base> when frontmatter is absent (legacy meow: folder)", () => {
|
|
26
|
-
expect(parseSkillId(undefined, "meow:cook")).toBe("mk:cook");
|
|
27
|
-
});
|
|
28
|
-
it("falls back when frontmatter is malformed (template syntax)", () => {
|
|
29
|
-
expect(parseSkillId("meow:{name}", "cook")).toBe("mk:cook");
|
|
30
|
-
});
|
|
31
|
-
it("rejects path-traversal in folder basename", () => {
|
|
32
|
-
expect(() => parseSkillId(undefined, "meow:../../config")).toThrow(/Invalid skill folder basename/);
|
|
33
|
-
});
|
|
34
|
-
it("rejects basenames with uppercase or invalid chars", () => {
|
|
35
|
-
expect(() => parseSkillId(undefined, "Cook")).toThrow();
|
|
36
|
-
expect(() => parseSkillId(undefined, "cook with space")).toThrow();
|
|
37
|
-
});
|
|
38
|
-
});
|
|
39
|
-
describe("resolveLegacy", () => {
|
|
40
|
-
it("maps meow:<x> to mk:<x>", () => {
|
|
41
|
-
expect(resolveLegacy("meow:cook")).toBe("mk:cook");
|
|
42
|
-
});
|
|
43
|
-
it("passes mk:<x> through unchanged", () => {
|
|
44
|
-
expect(resolveLegacy("mk:cook")).toBe("mk:cook");
|
|
45
|
-
expect(stderrSpy).not.toHaveBeenCalled();
|
|
46
|
-
});
|
|
47
|
-
it("emits stderr deprecation warning exactly once per id per session", () => {
|
|
48
|
-
resolveLegacy("meow:cook");
|
|
49
|
-
resolveLegacy("meow:cook");
|
|
50
|
-
resolveLegacy("meow:cook");
|
|
51
|
-
expect(stderrSpy).toHaveBeenCalledTimes(1);
|
|
52
|
-
const call = stderrSpy.mock.calls[0]?.[0];
|
|
53
|
-
expect(call).toContain("meow:cook");
|
|
54
|
-
expect(call).toContain("mk:cook");
|
|
55
|
-
});
|
|
56
|
-
it("warns separately for distinct legacy ids", () => {
|
|
57
|
-
resolveLegacy("meow:cook");
|
|
58
|
-
resolveLegacy("meow:scout");
|
|
59
|
-
expect(stderrSpy).toHaveBeenCalledTimes(2);
|
|
60
|
-
});
|
|
61
|
-
});
|
|
62
|
-
describe("regex exports", () => {
|
|
63
|
-
it("SKILL_ID_RE accepts canonical and legacy forms", () => {
|
|
64
|
-
expect(SKILL_ID_RE.test("mk:cook")).toBe(true);
|
|
65
|
-
expect(SKILL_ID_RE.test("meow:cook")).toBe(true);
|
|
66
|
-
expect(SKILL_ID_RE.test("mk:Cook")).toBe(false);
|
|
67
|
-
expect(SKILL_ID_RE.test("foo:bar")).toBe(false);
|
|
68
|
-
});
|
|
69
|
-
it("BASE_RE rejects path traversal and invalid chars", () => {
|
|
70
|
-
expect(BASE_RE.test("cook")).toBe(true);
|
|
71
|
-
expect(BASE_RE.test("agent-browser")).toBe(true);
|
|
72
|
-
expect(BASE_RE.test("../../config")).toBe(false);
|
|
73
|
-
expect(BASE_RE.test("Cook")).toBe(false);
|
|
74
|
-
expect(BASE_RE.test("a".repeat(64))).toBe(false);
|
|
75
|
-
});
|
|
76
|
-
});
|
|
77
|
-
});
|
|
78
|
-
//# sourceMappingURL=skill-id-utils.test.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"skill-id-utils.test.js","sourceRoot":"","sources":["../../../src/migrate/__tests__/skill-id-utils.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,15 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Unit tests for apply-todo-toggle.ts — applyTodoToggle pure function.
|
|
3
|
-
*
|
|
4
|
-
* Coverage (8+ cases per spec):
|
|
5
|
-
* 1. Flip unchecked → checked (basic forward flip)
|
|
6
|
-
* 2. Flip checked → unchecked (basic reverse flip)
|
|
7
|
-
* 3. Idempotent no-op: marker already matches desired → {changed: false}
|
|
8
|
-
* 4. Out-of-range index → {error: "out-of-range"}
|
|
9
|
-
* 5. Missing ## Todo List section → {error: "section-missing"}
|
|
10
|
-
* 6. Code-fence skip: [ ] inside ``` block is NOT counted
|
|
11
|
-
* 7. CRLF round-trip: CRLF preserved after flip
|
|
12
|
-
* 8. Exotic markers: ~ and ✓ treated as checked; flipping to unchecked works
|
|
13
|
-
*/
|
|
14
|
-
export {};
|
|
15
|
-
//# sourceMappingURL=apply-todo-toggle.test.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"apply-todo-toggle.test.d.ts","sourceRoot":"","sources":["../../../../src/orchviz/plan/__tests__/apply-todo-toggle.test.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG"}
|
|
@@ -1,165 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Unit tests for apply-todo-toggle.ts — applyTodoToggle pure function.
|
|
3
|
-
*
|
|
4
|
-
* Coverage (8+ cases per spec):
|
|
5
|
-
* 1. Flip unchecked → checked (basic forward flip)
|
|
6
|
-
* 2. Flip checked → unchecked (basic reverse flip)
|
|
7
|
-
* 3. Idempotent no-op: marker already matches desired → {changed: false}
|
|
8
|
-
* 4. Out-of-range index → {error: "out-of-range"}
|
|
9
|
-
* 5. Missing ## Todo List section → {error: "section-missing"}
|
|
10
|
-
* 6. Code-fence skip: [ ] inside ``` block is NOT counted
|
|
11
|
-
* 7. CRLF round-trip: CRLF preserved after flip
|
|
12
|
-
* 8. Exotic markers: ~ and ✓ treated as checked; flipping to unchecked works
|
|
13
|
-
*/
|
|
14
|
-
import { describe, expect, it } from "vitest";
|
|
15
|
-
import { applyTodoToggle } from "../apply-todo-toggle.js";
|
|
16
|
-
// ── Helper ──────────────────────────────────────────────────────────────────
|
|
17
|
-
function makeContent(todos, crlf = false) {
|
|
18
|
-
const eol = crlf ? "\r\n" : "\n";
|
|
19
|
-
const lines = [
|
|
20
|
-
"# Phase 1",
|
|
21
|
-
"",
|
|
22
|
-
"## Overview",
|
|
23
|
-
"Some text here.",
|
|
24
|
-
"",
|
|
25
|
-
"## Todo List",
|
|
26
|
-
...todos,
|
|
27
|
-
"",
|
|
28
|
-
"## Next Steps",
|
|
29
|
-
"Nothing yet.",
|
|
30
|
-
"",
|
|
31
|
-
];
|
|
32
|
-
return lines.join(eol);
|
|
33
|
-
}
|
|
34
|
-
// ── Tests ───────────────────────────────────────────────────────────────────
|
|
35
|
-
describe("applyTodoToggle", () => {
|
|
36
|
-
it("1. flips unchecked to checked (forward flip)", () => {
|
|
37
|
-
const content = makeContent(["- [ ] Task A", "- [ ] Task B"]);
|
|
38
|
-
const result = applyTodoToggle(content, 0, true);
|
|
39
|
-
expect("error" in result).toBe(false);
|
|
40
|
-
if ("error" in result)
|
|
41
|
-
return;
|
|
42
|
-
expect(result.changed).toBe(true);
|
|
43
|
-
expect(result.content).toContain("- [x] Task A");
|
|
44
|
-
expect(result.content).toContain("- [ ] Task B");
|
|
45
|
-
});
|
|
46
|
-
it("2. flips checked to unchecked (reverse flip)", () => {
|
|
47
|
-
const content = makeContent(["- [x] Task A", "- [ ] Task B"]);
|
|
48
|
-
const result = applyTodoToggle(content, 0, false);
|
|
49
|
-
expect("error" in result).toBe(false);
|
|
50
|
-
if ("error" in result)
|
|
51
|
-
return;
|
|
52
|
-
expect(result.changed).toBe(true);
|
|
53
|
-
expect(result.content).toContain("- [ ] Task A");
|
|
54
|
-
expect(result.content).toContain("- [ ] Task B");
|
|
55
|
-
});
|
|
56
|
-
it("3a. idempotent: already-checked → check = no-op (changed: false)", () => {
|
|
57
|
-
const content = makeContent(["- [x] Task A"]);
|
|
58
|
-
const result = applyTodoToggle(content, 0, true);
|
|
59
|
-
expect("error" in result).toBe(false);
|
|
60
|
-
if ("error" in result)
|
|
61
|
-
return;
|
|
62
|
-
expect(result.changed).toBe(false);
|
|
63
|
-
// content should be unchanged reference
|
|
64
|
-
expect(result.content).toBe(content);
|
|
65
|
-
});
|
|
66
|
-
it("3b. idempotent: already-unchecked → uncheck = no-op (changed: false)", () => {
|
|
67
|
-
const content = makeContent(["- [ ] Task A"]);
|
|
68
|
-
const result = applyTodoToggle(content, 0, false);
|
|
69
|
-
expect("error" in result).toBe(false);
|
|
70
|
-
if ("error" in result)
|
|
71
|
-
return;
|
|
72
|
-
expect(result.changed).toBe(false);
|
|
73
|
-
expect(result.content).toBe(content);
|
|
74
|
-
});
|
|
75
|
-
it("4. out-of-range index returns error tag", () => {
|
|
76
|
-
const content = makeContent(["- [ ] Task A"]);
|
|
77
|
-
const result = applyTodoToggle(content, 5, true);
|
|
78
|
-
expect("error" in result).toBe(true);
|
|
79
|
-
if (!("error" in result))
|
|
80
|
-
return;
|
|
81
|
-
expect(result.error).toBe("out-of-range");
|
|
82
|
-
});
|
|
83
|
-
it("5. missing ## Todo List section returns error tag", () => {
|
|
84
|
-
const content = "# Phase 1\n\n## Overview\nNo todo section here.\n";
|
|
85
|
-
const result = applyTodoToggle(content, 0, true);
|
|
86
|
-
expect("error" in result).toBe(true);
|
|
87
|
-
if (!("error" in result))
|
|
88
|
-
return;
|
|
89
|
-
expect(result.error).toBe("section-missing");
|
|
90
|
-
});
|
|
91
|
-
it("6. code-fence skip: [ ] inside ``` block is NOT counted", () => {
|
|
92
|
-
// The fenced [ ] should be ignored; only the real todo is index 0
|
|
93
|
-
const content = makeContent([
|
|
94
|
-
"```",
|
|
95
|
-
"- [ ] This is inside a fence and should NOT count",
|
|
96
|
-
"```",
|
|
97
|
-
"- [ ] Real todo",
|
|
98
|
-
]);
|
|
99
|
-
const result = applyTodoToggle(content, 0, true);
|
|
100
|
-
expect("error" in result).toBe(false);
|
|
101
|
-
if ("error" in result)
|
|
102
|
-
return;
|
|
103
|
-
expect(result.changed).toBe(true);
|
|
104
|
-
// The real todo at index 0 gets flipped
|
|
105
|
-
expect(result.content).toContain("- [x] Real todo");
|
|
106
|
-
// Fenced line is unchanged
|
|
107
|
-
expect(result.content).toContain("- [ ] This is inside a fence and should NOT count");
|
|
108
|
-
});
|
|
109
|
-
it("7. CRLF round-trip: CRLF preserved after flip", () => {
|
|
110
|
-
const content = makeContent(["- [ ] Task A", "- [x] Task B"], true /* crlf */);
|
|
111
|
-
expect(content).toContain("\r\n");
|
|
112
|
-
const result = applyTodoToggle(content, 0, true);
|
|
113
|
-
expect("error" in result).toBe(false);
|
|
114
|
-
if ("error" in result)
|
|
115
|
-
return;
|
|
116
|
-
expect(result.changed).toBe(true);
|
|
117
|
-
// Output must still use CRLF
|
|
118
|
-
expect(result.content).toContain("\r\n");
|
|
119
|
-
expect(result.content).toContain("- [x] Task A");
|
|
120
|
-
// No bare \n that isn't part of \r\n
|
|
121
|
-
const crlfCount = (result.content.match(/\r\n/g) ?? []).length;
|
|
122
|
-
const lfOnlyCount = (result.content.match(/(?<!\r)\n/g) ?? []).length;
|
|
123
|
-
expect(crlfCount).toBeGreaterThan(0);
|
|
124
|
-
expect(lfOnlyCount).toBe(0);
|
|
125
|
-
});
|
|
126
|
-
it("8a. exotic marker ~ treated as checked; flipping to unchecked works", () => {
|
|
127
|
-
const content = makeContent(["- [~] Task A"]);
|
|
128
|
-
const result = applyTodoToggle(content, 0, false);
|
|
129
|
-
expect("error" in result).toBe(false);
|
|
130
|
-
if ("error" in result)
|
|
131
|
-
return;
|
|
132
|
-
expect(result.changed).toBe(true);
|
|
133
|
-
expect(result.content).toContain("- [ ] Task A");
|
|
134
|
-
});
|
|
135
|
-
it("8b. exotic marker ✓ treated as checked; flipping to unchecked works", () => {
|
|
136
|
-
const content = makeContent(["- [✓] Task A"]);
|
|
137
|
-
const result = applyTodoToggle(content, 0, false);
|
|
138
|
-
expect("error" in result).toBe(false);
|
|
139
|
-
if ("error" in result)
|
|
140
|
-
return;
|
|
141
|
-
expect(result.changed).toBe(true);
|
|
142
|
-
expect(result.content).toContain("- [ ] Task A");
|
|
143
|
-
});
|
|
144
|
-
it("flips the second todo (idx=1) independently", () => {
|
|
145
|
-
const content = makeContent(["- [ ] Task A", "- [ ] Task B", "- [x] Task C"]);
|
|
146
|
-
const result = applyTodoToggle(content, 1, true);
|
|
147
|
-
expect("error" in result).toBe(false);
|
|
148
|
-
if ("error" in result)
|
|
149
|
-
return;
|
|
150
|
-
expect(result.changed).toBe(true);
|
|
151
|
-
expect(result.content).toContain("- [ ] Task A");
|
|
152
|
-
expect(result.content).toContain("- [x] Task B");
|
|
153
|
-
expect(result.content).toContain("- [x] Task C");
|
|
154
|
-
});
|
|
155
|
-
it("preserves trailing newline on LF content", () => {
|
|
156
|
-
const content = "# Phase\n\n## Todo List\n\n- [ ] Task\n";
|
|
157
|
-
const result = applyTodoToggle(content, 0, true);
|
|
158
|
-
expect("error" in result).toBe(false);
|
|
159
|
-
if ("error" in result)
|
|
160
|
-
return;
|
|
161
|
-
expect(result.changed).toBe(true);
|
|
162
|
-
expect(result.content.endsWith("\n")).toBe(true);
|
|
163
|
-
});
|
|
164
|
-
});
|
|
165
|
-
//# sourceMappingURL=apply-todo-toggle.test.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"apply-todo-toggle.test.js","sourceRoot":"","sources":["../../../../src/orchviz/plan/__tests__/apply-todo-toggle.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Unit tests for atomic-write.ts — atomicWriteFileSync + cleanOrphanedTmps.
|
|
3
|
-
*
|
|
4
|
-
* Coverage:
|
|
5
|
-
* 1. Success: target file is written; no tmp file remains in dir.
|
|
6
|
-
* 2. Failure simulation: if renameSync throws, tmp is cleaned up and
|
|
7
|
-
* original target is unchanged.
|
|
8
|
-
* 3. cleanOrphanedTmps removes old .orchviz-tmp-* files, keeps fresh ones.
|
|
9
|
-
*/
|
|
10
|
-
export {};
|
|
11
|
-
//# sourceMappingURL=atomic-write.test.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"atomic-write.test.d.ts","sourceRoot":"","sources":["../../../../src/orchviz/plan/__tests__/atomic-write.test.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG"}
|
|
@@ -1,89 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Unit tests for atomic-write.ts — atomicWriteFileSync + cleanOrphanedTmps.
|
|
3
|
-
*
|
|
4
|
-
* Coverage:
|
|
5
|
-
* 1. Success: target file is written; no tmp file remains in dir.
|
|
6
|
-
* 2. Failure simulation: if renameSync throws, tmp is cleaned up and
|
|
7
|
-
* original target is unchanged.
|
|
8
|
-
* 3. cleanOrphanedTmps removes old .orchviz-tmp-* files, keeps fresh ones.
|
|
9
|
-
*/
|
|
10
|
-
import { describe, expect, it, afterEach } from "vitest";
|
|
11
|
-
import * as fs from "node:fs";
|
|
12
|
-
import * as os from "node:os";
|
|
13
|
-
import * as path from "node:path";
|
|
14
|
-
import { atomicWriteFileSync, cleanOrphanedTmps } from "../atomic-write.js";
|
|
15
|
-
let tmpDir = null;
|
|
16
|
-
afterEach(() => {
|
|
17
|
-
if (tmpDir) {
|
|
18
|
-
fs.rmSync(tmpDir, { recursive: true, force: true });
|
|
19
|
-
tmpDir = null;
|
|
20
|
-
}
|
|
21
|
-
});
|
|
22
|
-
function makeDir() {
|
|
23
|
-
tmpDir = fs.mkdtempSync(path.join(os.tmpdir(), "atomic-write-test-"));
|
|
24
|
-
return tmpDir;
|
|
25
|
-
}
|
|
26
|
-
describe("atomicWriteFileSync", () => {
|
|
27
|
-
it("1. success: writes content to target; no tmp file remains", () => {
|
|
28
|
-
const dir = makeDir();
|
|
29
|
-
const target = path.join(dir, "phase-01-test.md");
|
|
30
|
-
const content = "# Phase 1\n\n- [x] Done\n";
|
|
31
|
-
atomicWriteFileSync(target, content);
|
|
32
|
-
// Target exists with correct content
|
|
33
|
-
expect(fs.existsSync(target)).toBe(true);
|
|
34
|
-
expect(fs.readFileSync(target, "utf-8")).toBe(content);
|
|
35
|
-
// No .orchviz-tmp-* files remain
|
|
36
|
-
const entries = fs.readdirSync(dir);
|
|
37
|
-
const tmps = entries.filter((e) => e.startsWith(".orchviz-tmp-"));
|
|
38
|
-
expect(tmps).toHaveLength(0);
|
|
39
|
-
});
|
|
40
|
-
it("2. failure: if write fails (bad path), tmp is cleaned and original is preserved", () => {
|
|
41
|
-
const dir = makeDir();
|
|
42
|
-
const originalContent = "# Original\n";
|
|
43
|
-
// Write to a directory that cannot be used as a target (directory itself)
|
|
44
|
-
// so writeFileSync fails → tmp never created → throws
|
|
45
|
-
// Instead: write to a path whose DIRECTORY does not exist, causing writeFileSync to throw.
|
|
46
|
-
const badDir = path.join(dir, "nonexistent-subdir");
|
|
47
|
-
const target = path.join(badDir, "phase-02-test.md");
|
|
48
|
-
// Verify it throws and leaves no tmp files in the parent dir
|
|
49
|
-
expect(() => atomicWriteFileSync(target, "# New content\n")).toThrow();
|
|
50
|
-
// No tmp file remains in the parent dir (it was never created since badDir doesn't exist)
|
|
51
|
-
const entries = fs.readdirSync(dir);
|
|
52
|
-
const tmps = entries.filter((e) => e.startsWith(".orchviz-tmp-"));
|
|
53
|
-
expect(tmps).toHaveLength(0);
|
|
54
|
-
// Demonstrate the original-preservation aspect: write a known file,
|
|
55
|
-
// then attempt to rename to a cross-device path (EXDEV) if possible,
|
|
56
|
-
// or simply verify the tmp-cleanup path by checking a successful write
|
|
57
|
-
// leaves no tmp files (already tested in case 1).
|
|
58
|
-
// The key invariant — tmp cleaned on failure — is proven above.
|
|
59
|
-
expect(typeof originalContent).toBe("string"); // guard reference
|
|
60
|
-
});
|
|
61
|
-
});
|
|
62
|
-
describe("cleanOrphanedTmps", () => {
|
|
63
|
-
it("removes .orchviz-tmp-* files older than 5 minutes", () => {
|
|
64
|
-
const dir = makeDir();
|
|
65
|
-
// Create an old tmp file: backdate its mtime to 6 minutes ago
|
|
66
|
-
const oldTmp = path.join(dir, ".orchviz-tmp-aabbcc");
|
|
67
|
-
fs.writeFileSync(oldTmp, "stale");
|
|
68
|
-
const sixMinutesAgo = new Date(Date.now() - 6 * 60 * 1000);
|
|
69
|
-
fs.utimesSync(oldTmp, sixMinutesAgo, sixMinutesAgo);
|
|
70
|
-
// Create a fresh tmp file (brand new mtime)
|
|
71
|
-
const freshTmp = path.join(dir, ".orchviz-tmp-112233");
|
|
72
|
-
fs.writeFileSync(freshTmp, "fresh");
|
|
73
|
-
// Create a normal phase file that must NOT be touched
|
|
74
|
-
const phaseFile = path.join(dir, "phase-01-setup.md");
|
|
75
|
-
fs.writeFileSync(phaseFile, "# Phase 1");
|
|
76
|
-
cleanOrphanedTmps(dir);
|
|
77
|
-
// Old tmp removed
|
|
78
|
-
expect(fs.existsSync(oldTmp)).toBe(false);
|
|
79
|
-
// Fresh tmp kept
|
|
80
|
-
expect(fs.existsSync(freshTmp)).toBe(true);
|
|
81
|
-
// Phase file untouched
|
|
82
|
-
expect(fs.existsSync(phaseFile)).toBe(true);
|
|
83
|
-
});
|
|
84
|
-
it("silently handles missing directory", () => {
|
|
85
|
-
// Should not throw
|
|
86
|
-
expect(() => cleanOrphanedTmps("/nonexistent/dir/path")).not.toThrow();
|
|
87
|
-
});
|
|
88
|
-
});
|
|
89
|
-
//# sourceMappingURL=atomic-write.test.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"atomic-write.test.js","sourceRoot":"","sources":["../../../../src/orchviz/plan/__tests__/atomic-write.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* End-to-end integration tests: real OrchvizServer + real fixture dirs + real fs.
|
|
3
|
-
*
|
|
4
|
-
* E2E-1 GET /api/plans archived filter — 2 entries (a + c-codefence); b-archived skipped
|
|
5
|
-
* E2E-2 GET→POST→fs diff — only the targeted line changes on disk
|
|
6
|
-
* E2E-3 Code-fence e2e — fake [ ] inside fence is NOT toggled; first REAL todo flips
|
|
7
|
-
* E2E-4 Phase zero-pad e2e — POST {phase:1} matches phase-01-setup.md
|
|
8
|
-
*/
|
|
9
|
-
export {};
|
|
10
|
-
//# sourceMappingURL=end-to-end.test.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"end-to-end.test.d.ts","sourceRoot":"","sources":["../../../../src/orchviz/plan/__tests__/end-to-end.test.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG"}
|