refactor: hard-fork GSD -> MSD (Make Software Done)
Mechanical rename produced by scripts/msd-rename.cjs: gsd/Gsd/GSD -> msd/Msd/MSD across contents and paths, upstream package/repo coordinates -> @golem15/msd-core and golem15com/msd-core. Deep links into upstream history, sibling upstream packages, the GSD-2 import feature, CHANGELOG.md and .changeset/ are kept as-is. Hand edits on top: MSD block-letter banner and logos, LICENSE copyright line, package/plugin identity, regenerated lockfile, install-tree fixtures, derived registries and benchmark baseline; migration checksum baseline re-locked (MSD keeps its own install state, so no install had applied the old sums); sort-order and regex-escaped expectations in tests adjusted.
This commit is contained in:
@@ -4,7 +4,7 @@
|
||||
* Failing-first suite for `resolveInstalledSurfaces` (#2872 Phase 3).
|
||||
*
|
||||
* Implements sections 3 ("resolveInstalledSurfaces") and 4 ("stem derivation
|
||||
* bijection") of `.gsd/phase/feat-2872-manifest-scope-runtime/50-test-matrix.md`
|
||||
* bijection") of `.msd/phase/feat-2872-manifest-scope-runtime/50-test-matrix.md`
|
||||
* (rows S1-S21, B1-B16). Sections 1, 2 and 5 are owned by sibling suites —
|
||||
* `tests/install-manifest-scope-runtime.test.cjs`,
|
||||
* `tests/installer-migrations-manifest-schema.test.cjs`,
|
||||
@@ -38,10 +38,10 @@ const path = require('node:path');
|
||||
const { createTempDir, cleanup } = require('./helpers.cjs');
|
||||
const fc = require('./helpers/fast-check-setup.cjs');
|
||||
|
||||
const { resolveInstalledSurfaces } = require('../gsd-core/bin/lib/installed-surface-resolver.cjs');
|
||||
const { resolveScope } = require('../gsd-core/bin/lib/install-scope.cjs');
|
||||
const capabilityRegistry = require('../gsd-core/bin/lib/capability-registry.cjs');
|
||||
const { isNamespacedByDir, composeCommandFilename } = require('../gsd-core/bin/lib/runtime-artifact-layout.cjs');
|
||||
const { resolveInstalledSurfaces } = require('../msd-core/bin/lib/installed-surface-resolver.cjs');
|
||||
const { resolveScope } = require('../msd-core/bin/lib/install-scope.cjs');
|
||||
const capabilityRegistry = require('../msd-core/bin/lib/capability-registry.cjs');
|
||||
const { isNamespacedByDir, composeCommandFilename } = require('../msd-core/bin/lib/runtime-artifact-layout.cjs');
|
||||
|
||||
// ─── Fixture helpers ─────────────────────────────────────────────────────
|
||||
|
||||
@@ -106,7 +106,7 @@ describe('resolveInstalledSurfaces — scope presence (S1-S3)', () => {
|
||||
const cwd = '/fixture/project';
|
||||
const homes = scopeHomes('claude', home, cwd);
|
||||
const byConfigHome = new Map([
|
||||
[homes.global, manifest({ manifestVersion: 2, runtime: 'claude', scope: 'global', files: { 'skills/gsd-plan-phase/SKILL.md': 'a' } })],
|
||||
[homes.global, manifest({ manifestVersion: 2, runtime: 'claude', scope: 'global', files: { 'skills/msd-plan-phase/SKILL.md': 'a' } })],
|
||||
]);
|
||||
const result = resolveInstalledSurfaces('claude', baseOpts(home, cwd, { readManifest: mkReadManifest(byConfigHome) }));
|
||||
const global = scopeOf(result, 'global');
|
||||
@@ -123,7 +123,7 @@ describe('resolveInstalledSurfaces — scope presence (S1-S3)', () => {
|
||||
const cwd = '/fixture/project';
|
||||
const homes = scopeHomes('claude', home, cwd);
|
||||
const byConfigHome = new Map([
|
||||
[homes.local, manifest({ manifestVersion: 2, runtime: 'claude', scope: 'local', files: { 'commands/gsd-plan-phase.md': 'a' } })],
|
||||
[homes.local, manifest({ manifestVersion: 2, runtime: 'claude', scope: 'local', files: { 'commands/msd-plan-phase.md': 'a' } })],
|
||||
]);
|
||||
const result = resolveInstalledSurfaces('claude', baseOpts(home, cwd, { readManifest: mkReadManifest(byConfigHome) }));
|
||||
const global = scopeOf(result, 'global');
|
||||
@@ -142,8 +142,8 @@ describe('resolveInstalledSurfaces — shadowing (S4-S7, acceptance criterion S4
|
||||
const cwd = '/fixture/project';
|
||||
const homes = scopeHomes('claude', home, cwd);
|
||||
const byConfigHome = new Map([
|
||||
[homes.global, manifest({ manifestVersion: 2, runtime: 'claude', scope: 'global', files: { 'skills/gsd-plan-phase/SKILL.md': 'a' } })],
|
||||
[homes.local, manifest({ manifestVersion: 2, runtime: 'claude', scope: 'local', files: { 'commands/gsd-plan-phase.md': 'a' } })],
|
||||
[homes.global, manifest({ manifestVersion: 2, runtime: 'claude', scope: 'global', files: { 'skills/msd-plan-phase/SKILL.md': 'a' } })],
|
||||
[homes.local, manifest({ manifestVersion: 2, runtime: 'claude', scope: 'local', files: { 'commands/msd-plan-phase.md': 'a' } })],
|
||||
]);
|
||||
const result = resolveInstalledSurfaces('claude', baseOpts(home, cwd, { readManifest: mkReadManifest(byConfigHome) }));
|
||||
const triggers = result[0].triggers;
|
||||
@@ -164,11 +164,11 @@ describe('resolveInstalledSurfaces — shadowing (S4-S7, acceptance criterion S4
|
||||
const cwd = '/fixture/project';
|
||||
const homes = scopeHomes('cursor', home, cwd);
|
||||
const byConfigHome = new Map([
|
||||
[homes.global, manifest({ manifestVersion: 2, runtime: 'cursor', scope: 'global', files: { 'skills/gsd-plan-phase/SKILL.md': 'a' } })],
|
||||
[homes.local, manifest({ manifestVersion: 2, runtime: 'cursor', scope: 'local', files: { 'skills/gsd-plan-phase/SKILL.md': 'a' } })],
|
||||
[homes.global, manifest({ manifestVersion: 2, runtime: 'cursor', scope: 'global', files: { 'skills/msd-plan-phase/SKILL.md': 'a' } })],
|
||||
[homes.local, manifest({ manifestVersion: 2, runtime: 'cursor', scope: 'local', files: { 'skills/msd-plan-phase/SKILL.md': 'a' } })],
|
||||
]);
|
||||
const result = resolveInstalledSurfaces('cursor', baseOpts(home, cwd, { readManifest: mkReadManifest(byConfigHome) }));
|
||||
const group = result[0].triggers.filter((t) => t.trigger === 'gsd-plan-phase' && t.kind === 'skills');
|
||||
const group = result[0].triggers.filter((t) => t.trigger === 'msd-plan-phase' && t.kind === 'skills');
|
||||
const winner = group.find((t) => t.scope === 'global');
|
||||
const loser = group.find((t) => t.scope === 'local');
|
||||
assert.ok(winner);
|
||||
@@ -182,8 +182,8 @@ describe('resolveInstalledSurfaces — shadowing (S4-S7, acceptance criterion S4
|
||||
const cwd = '/fixture/project';
|
||||
const homes = scopeHomes('windsurf', home, cwd);
|
||||
const byConfigHome = new Map([
|
||||
[homes.global, manifest({ manifestVersion: 2, runtime: 'windsurf', scope: 'global', files: { 'agents/gsd-planner.md': 'a' } })],
|
||||
[homes.local, manifest({ manifestVersion: 2, runtime: 'windsurf', scope: 'local', files: { 'workflows/gsd-plan-phase.md': 'a' } })],
|
||||
[homes.global, manifest({ manifestVersion: 2, runtime: 'windsurf', scope: 'global', files: { 'agents/msd-planner.md': 'a' } })],
|
||||
[homes.local, manifest({ manifestVersion: 2, runtime: 'windsurf', scope: 'local', files: { 'workflows/msd-plan-phase.md': 'a' } })],
|
||||
]);
|
||||
const result = resolveInstalledSurfaces('windsurf', baseOpts(home, cwd, { readManifest: mkReadManifest(byConfigHome) }));
|
||||
assert.strictEqual(scopeOf(result, 'global').installed, true);
|
||||
@@ -199,10 +199,10 @@ describe('resolveInstalledSurfaces — shadowing (S4-S7, acceptance criterion S4
|
||||
const cwd = '/fixture/project';
|
||||
const homes = scopeHomes('cline', home, cwd);
|
||||
const byConfigHome = new Map([
|
||||
[homes.global, manifest({ manifestVersion: 2, runtime: 'cline', scope: 'global', files: { 'skills/gsd-plan-phase/SKILL.md': 'a' } })],
|
||||
[homes.global, manifest({ manifestVersion: 2, runtime: 'cline', scope: 'global', files: { 'skills/msd-plan-phase/SKILL.md': 'a' } })],
|
||||
// cline's local layout declares no kinds at all — a manifest present
|
||||
// there still counts as "installed", but contributes no stems.
|
||||
[homes.local, manifest({ manifestVersion: 2, runtime: 'cline', scope: 'local', files: { 'commands/gsd-plan-phase.md': 'a' } })],
|
||||
[homes.local, manifest({ manifestVersion: 2, runtime: 'cline', scope: 'local', files: { 'commands/msd-plan-phase.md': 'a' } })],
|
||||
]);
|
||||
const result = resolveInstalledSurfaces('cline', baseOpts(home, cwd, { readManifest: mkReadManifest(byConfigHome) }));
|
||||
assert.deepStrictEqual(scopeOf(result, 'local').stems, []);
|
||||
@@ -250,7 +250,7 @@ describe('resolveInstalledSurfaces — v1/v2 manifest reporting (S12-S14, accept
|
||||
const cwd = '/fixture/project';
|
||||
const homes = scopeHomes('claude', home, cwd);
|
||||
const byConfigHome = new Map([
|
||||
[homes.global, manifest({ manifestVersion: 1, runtime: null, scope: null, files: { 'skills/gsd-plan-phase/SKILL.md': 'a' } })],
|
||||
[homes.global, manifest({ manifestVersion: 1, runtime: null, scope: null, files: { 'skills/msd-plan-phase/SKILL.md': 'a' } })],
|
||||
]);
|
||||
const result = resolveInstalledSurfaces('claude', baseOpts(home, cwd, { readManifest: mkReadManifest(byConfigHome) }));
|
||||
const global = scopeOf(result, 'global');
|
||||
@@ -303,7 +303,7 @@ describe('resolveInstalledSurfaces — negative space (S15, S16, S20, S21)', ()
|
||||
const homes = scopeHomes('claude', shared, shared);
|
||||
assert.strictEqual(homes.global, homes.local, 'fixture assumption: both scopes collapse to one configHome');
|
||||
const byConfigHome = new Map([
|
||||
[homes.global, manifest({ manifestVersion: 2, runtime: 'claude', scope: 'global', files: { 'skills/gsd-plan-phase/SKILL.md': 'a' } })],
|
||||
[homes.global, manifest({ manifestVersion: 2, runtime: 'claude', scope: 'global', files: { 'skills/msd-plan-phase/SKILL.md': 'a' } })],
|
||||
]);
|
||||
const result = resolveInstalledSurfaces('claude', baseOpts(shared, shared, { readManifest: mkReadManifest(byConfigHome) }));
|
||||
assert.strictEqual(scopeOf(result, 'global').installed, true);
|
||||
@@ -333,19 +333,19 @@ describe('resolveInstalledSurfaces — negative space (S15, S16, S20, S21)', ()
|
||||
const byConfigHome = new Map([
|
||||
[homes.global, manifest({
|
||||
manifestVersion: 2, runtime: 'claude', scope: 'global',
|
||||
files: { 'hooks/foo.json': 'a', 'gsd-core/VERSION': 'b', 'settings.json': 'c' },
|
||||
files: { 'hooks/foo.json': 'a', 'msd-core/VERSION': 'b', 'settings.json': 'c' },
|
||||
})],
|
||||
]);
|
||||
const result = resolveInstalledSurfaces('claude', baseOpts(home, cwd, { readManifest: mkReadManifest(byConfigHome) }));
|
||||
assert.deepStrictEqual(scopeOf(result, 'global').stems, []);
|
||||
});
|
||||
|
||||
test('a gsd-prefixed key outside a declared subpath is not a trigger (S21)', () => {
|
||||
test('a msd-prefixed key outside a declared subpath is not a trigger (S21)', () => {
|
||||
const home = '/fixture/home';
|
||||
const cwd = '/fixture/project';
|
||||
const homes = scopeHomes('claude', home, cwd);
|
||||
const byConfigHome = new Map([
|
||||
[homes.global, manifest({ manifestVersion: 2, runtime: 'claude', scope: 'global', files: { 'gsd-something.md': 'a' } })],
|
||||
[homes.global, manifest({ manifestVersion: 2, runtime: 'claude', scope: 'global', files: { 'msd-something.md': 'a' } })],
|
||||
]);
|
||||
const result = resolveInstalledSurfaces('claude', baseOpts(home, cwd, { readManifest: mkReadManifest(byConfigHome) }));
|
||||
assert.deepStrictEqual(scopeOf(result, 'global').stems, []);
|
||||
@@ -373,7 +373,7 @@ describe('resolveInstalledSurfaces — filesystem failure and the STEP 1 fix (S1
|
||||
const cwd = '/fixture/project';
|
||||
const homes = scopeHomes('claude', home, cwd);
|
||||
const byConfigHome = new Map([
|
||||
[homes.global, manifest({ manifestVersion: 2, runtime: 'claude', scope: 'global', files: { 'skills/gsd-plan-phase/SKILL.md': 'a' } })],
|
||||
[homes.global, manifest({ manifestVersion: 2, runtime: 'claude', scope: 'global', files: { 'skills/msd-plan-phase/SKILL.md': 'a' } })],
|
||||
]);
|
||||
// A synthetic registry that reproduces the exact TypeError
|
||||
// `resolveRuntimeArtifactLayoutFromRegistry` throws for a skills entry
|
||||
@@ -402,8 +402,8 @@ describe('resolveInstalledSurfaces — purity (S18, S19)', () => {
|
||||
const cwd = '/fixture/project';
|
||||
const homes = scopeHomes('claude', home, cwd);
|
||||
const byConfigHome = new Map([
|
||||
[homes.global, manifest({ manifestVersion: 2, runtime: 'claude', scope: 'global', files: { 'skills/gsd-plan-phase/SKILL.md': 'a' } })],
|
||||
[homes.local, manifest({ manifestVersion: 2, runtime: 'claude', scope: 'local', files: { 'commands/gsd-plan-phase.md': 'a' } })],
|
||||
[homes.global, manifest({ manifestVersion: 2, runtime: 'claude', scope: 'global', files: { 'skills/msd-plan-phase/SKILL.md': 'a' } })],
|
||||
[homes.local, manifest({ manifestVersion: 2, runtime: 'claude', scope: 'local', files: { 'commands/msd-plan-phase.md': 'a' } })],
|
||||
]);
|
||||
const opts = baseOpts(home, cwd, { readManifest: mkReadManifest(byConfigHome) });
|
||||
|
||||
@@ -420,7 +420,7 @@ describe('resolveInstalledSurfaces — purity (S18, S19)', () => {
|
||||
});
|
||||
|
||||
test('resolveInstalledSurfaces mutates nothing on disk (S19, acceptance criterion)', (t) => {
|
||||
const root = createTempDir('gsd-installed-surface-resolver-');
|
||||
const root = createTempDir('msd-installed-surface-resolver-');
|
||||
t.after(() => cleanup(root));
|
||||
|
||||
const home = path.join(root, 'home');
|
||||
@@ -435,7 +435,7 @@ describe('resolveInstalledSurfaces — purity (S18, S19)', () => {
|
||||
version: '1.10.0',
|
||||
timestamp: nowIso,
|
||||
mode: 'full',
|
||||
files: { 'skills/gsd-plan-phase/SKILL.md': 'sha-global' },
|
||||
files: { 'skills/msd-plan-phase/SKILL.md': 'sha-global' },
|
||||
manifestVersion: 2,
|
||||
runtime: 'claude',
|
||||
scope: 'global',
|
||||
@@ -444,13 +444,13 @@ describe('resolveInstalledSurfaces — purity (S18, S19)', () => {
|
||||
version: '1.10.0',
|
||||
timestamp: nowIso,
|
||||
mode: 'full',
|
||||
files: { 'commands/gsd-plan-phase.md': 'sha-local' },
|
||||
files: { 'commands/msd-plan-phase.md': 'sha-local' },
|
||||
manifestVersion: 2,
|
||||
runtime: 'claude',
|
||||
scope: 'local',
|
||||
};
|
||||
fs.writeFileSync(path.join(globalDir, 'gsd-file-manifest.json'), JSON.stringify(globalManifest, null, 2));
|
||||
fs.writeFileSync(path.join(localDir, 'gsd-file-manifest.json'), JSON.stringify(localManifest, null, 2));
|
||||
fs.writeFileSync(path.join(globalDir, 'msd-file-manifest.json'), JSON.stringify(globalManifest, null, 2));
|
||||
fs.writeFileSync(path.join(localDir, 'msd-file-manifest.json'), JSON.stringify(localManifest, null, 2));
|
||||
// A stray, unrelated file — proves the resolver doesn't touch anything it
|
||||
// doesn't need either.
|
||||
fs.writeFileSync(path.join(globalDir, 'settings.json'), '{}');
|
||||
@@ -498,7 +498,7 @@ describe('resolveInstalledSurfaces — stem derivation (B1-B15)', () => {
|
||||
const cwd = '/fixture/project';
|
||||
const homes = scopeHomes('claude', home, cwd);
|
||||
const byConfigHome = new Map([
|
||||
[homes.global, manifest({ manifestVersion: 2, files: { 'skills/gsd-plan-phase/SKILL.md': 'a' } })],
|
||||
[homes.global, manifest({ manifestVersion: 2, files: { 'skills/msd-plan-phase/SKILL.md': 'a' } })],
|
||||
]);
|
||||
const result = resolveInstalledSurfaces('claude', baseOpts(home, cwd, { readManifest: mkReadManifest(byConfigHome) }));
|
||||
assert.deepStrictEqual(scopeOf(result, 'global').stems, ['plan-phase']);
|
||||
@@ -521,7 +521,7 @@ describe('resolveInstalledSurfaces — stem derivation (B1-B15)', () => {
|
||||
artifactLayout: {
|
||||
global: [],
|
||||
local: [
|
||||
{ kind: 'commands', destSubpath: 'commands/gsd', prefix: 'gsd-', nesting: 'flat', recursive: false, converter: null },
|
||||
{ kind: 'commands', destSubpath: 'commands/msd', prefix: 'msd-', nesting: 'flat', recursive: false, converter: null },
|
||||
],
|
||||
},
|
||||
},
|
||||
@@ -529,7 +529,7 @@ describe('resolveInstalledSurfaces — stem derivation (B1-B15)', () => {
|
||||
},
|
||||
};
|
||||
const byConfigHome = new Map([
|
||||
[homes.local, manifest({ manifestVersion: 2, files: { 'commands/gsd/plan-phase.md': 'a' } })],
|
||||
[homes.local, manifest({ manifestVersion: 2, files: { 'commands/msd/plan-phase.md': 'a' } })],
|
||||
]);
|
||||
const result = resolveInstalledSurfaces('claude', baseOpts(home, cwd, { readManifest: mkReadManifest(byConfigHome), registry }));
|
||||
assert.deepStrictEqual(scopeOf(result, 'local').stems, ['plan-phase']);
|
||||
@@ -540,7 +540,7 @@ describe('resolveInstalledSurfaces — stem derivation (B1-B15)', () => {
|
||||
const cwd = '/fixture/project';
|
||||
const homes = scopeHomes('claude', home, cwd);
|
||||
const byConfigHome = new Map([
|
||||
[homes.local, manifest({ manifestVersion: 2, files: { 'commands/gsd-plan-phase.md': 'a' } })],
|
||||
[homes.local, manifest({ manifestVersion: 2, files: { 'commands/msd-plan-phase.md': 'a' } })],
|
||||
]);
|
||||
const result = resolveInstalledSurfaces('claude', baseOpts(home, cwd, { readManifest: mkReadManifest(byConfigHome) }));
|
||||
assert.deepStrictEqual(scopeOf(result, 'local').stems, ['plan-phase']);
|
||||
@@ -554,8 +554,8 @@ describe('resolveInstalledSurfaces — stem derivation (B1-B15)', () => {
|
||||
[homes.global, manifest({
|
||||
manifestVersion: 2,
|
||||
files: {
|
||||
'skills/gsd-plan-phase/SKILL.md': 'a',
|
||||
'skills/gsd-plan-phase/reference.md': 'b',
|
||||
'skills/msd-plan-phase/SKILL.md': 'a',
|
||||
'skills/msd-plan-phase/reference.md': 'b',
|
||||
},
|
||||
})],
|
||||
]);
|
||||
@@ -568,7 +568,7 @@ describe('resolveInstalledSurfaces — stem derivation (B1-B15)', () => {
|
||||
const cwd = '/fixture/project';
|
||||
const homes = scopeHomes('claude', home, cwd);
|
||||
const byConfigHome = new Map([
|
||||
[homes.global, manifest({ manifestVersion: 2, files: { 'skills\\gsd-plan-phase\\SKILL.md': 'a' } })],
|
||||
[homes.global, manifest({ manifestVersion: 2, files: { 'skills\\msd-plan-phase\\SKILL.md': 'a' } })],
|
||||
]);
|
||||
const result = resolveInstalledSurfaces('claude', baseOpts(home, cwd, { readManifest: mkReadManifest(byConfigHome) }));
|
||||
assert.deepStrictEqual(scopeOf(result, 'global').stems, ['plan-phase']);
|
||||
@@ -579,7 +579,7 @@ describe('resolveInstalledSurfaces — stem derivation (B1-B15)', () => {
|
||||
const cwd = '/fixture/project';
|
||||
const homes = scopeHomes('claude', home, cwd);
|
||||
const byConfigHome = new Map([
|
||||
[homes.local, manifest({ manifestVersion: 2, files: { 'commands/gsd-plan-phase': 'a' } })],
|
||||
[homes.local, manifest({ manifestVersion: 2, files: { 'commands/msd-plan-phase': 'a' } })],
|
||||
]);
|
||||
const result = resolveInstalledSurfaces('claude', baseOpts(home, cwd, { readManifest: mkReadManifest(byConfigHome) }));
|
||||
assert.deepStrictEqual(scopeOf(result, 'local').stems, []);
|
||||
@@ -590,7 +590,7 @@ describe('resolveInstalledSurfaces — stem derivation (B1-B15)', () => {
|
||||
const cwd = '/fixture/project';
|
||||
const homes = scopeHomes('claude', home, cwd);
|
||||
const byConfigHome = new Map([
|
||||
[homes.local, manifest({ manifestVersion: 2, files: { 'commands/gsd-.md': 'a' } })],
|
||||
[homes.local, manifest({ manifestVersion: 2, files: { 'commands/msd-.md': 'a' } })],
|
||||
]);
|
||||
const result = resolveInstalledSurfaces('claude', baseOpts(home, cwd, { readManifest: mkReadManifest(byConfigHome) }));
|
||||
assert.deepStrictEqual(scopeOf(result, 'local').stems, []);
|
||||
@@ -601,7 +601,7 @@ describe('resolveInstalledSurfaces — stem derivation (B1-B15)', () => {
|
||||
const cwd = '/fixture/project';
|
||||
const homes = scopeHomes('claude', home, cwd);
|
||||
const byConfigHome = new Map([
|
||||
[homes.global, manifest({ manifestVersion: 2, files: { 'skills/gsd-../SKILL.md': 'a' } })],
|
||||
[homes.global, manifest({ manifestVersion: 2, files: { 'skills/msd-../SKILL.md': 'a' } })],
|
||||
]);
|
||||
const result = resolveInstalledSurfaces('claude', baseOpts(home, cwd, { readManifest: mkReadManifest(byConfigHome) }));
|
||||
assert.deepStrictEqual(scopeOf(result, 'global').stems, []);
|
||||
@@ -612,7 +612,7 @@ describe('resolveInstalledSurfaces — stem derivation (B1-B15)', () => {
|
||||
const cwd = '/fixture/project';
|
||||
const homes = scopeHomes('claude', home, cwd);
|
||||
const byConfigHome = new Map([
|
||||
[homes.global, manifest({ manifestVersion: 2, files: { 'skills/gsd-../../../x/SKILL.md': 'a' } })],
|
||||
[homes.global, manifest({ manifestVersion: 2, files: { 'skills/msd-../../../x/SKILL.md': 'a' } })],
|
||||
]);
|
||||
const result = resolveInstalledSurfaces('claude', baseOpts(home, cwd, { readManifest: mkReadManifest(byConfigHome) }));
|
||||
assert.deepStrictEqual(scopeOf(result, 'global').stems, []);
|
||||
@@ -623,7 +623,7 @@ describe('resolveInstalledSurfaces — stem derivation (B1-B15)', () => {
|
||||
const cwd = '/fixture/project';
|
||||
const homes = scopeHomes('claude', home, cwd);
|
||||
const byConfigHome = new Map([
|
||||
[homes.global, manifest({ manifestVersion: 2, files: { 'skills/gsd-x\ny/SKILL.md': 'a' } })],
|
||||
[homes.global, manifest({ manifestVersion: 2, files: { 'skills/msd-x\ny/SKILL.md': 'a' } })],
|
||||
]);
|
||||
const result = resolveInstalledSurfaces('claude', baseOpts(home, cwd, { readManifest: mkReadManifest(byConfigHome) }));
|
||||
assert.deepStrictEqual(scopeOf(result, 'global').stems, []);
|
||||
@@ -634,7 +634,7 @@ describe('resolveInstalledSurfaces — stem derivation (B1-B15)', () => {
|
||||
const cwd = '/fixture/project';
|
||||
const homes = scopeHomes('claude', home, cwd);
|
||||
const byConfigHome = new Map([
|
||||
[homes.global, manifest({ manifestVersion: 2, files: { 'skills/gsd-x[31my/SKILL.md': 'a' } })],
|
||||
[homes.global, manifest({ manifestVersion: 2, files: { 'skills/msd-x[31my/SKILL.md': 'a' } })],
|
||||
]);
|
||||
const result = resolveInstalledSurfaces('claude', baseOpts(home, cwd, { readManifest: mkReadManifest(byConfigHome) }));
|
||||
assert.deepStrictEqual(scopeOf(result, 'global').stems, []);
|
||||
@@ -645,7 +645,7 @@ describe('resolveInstalledSurfaces — stem derivation (B1-B15)', () => {
|
||||
const cwd = '/fixture/project';
|
||||
const homes = scopeHomes('claude', home, cwd);
|
||||
const byConfigHome = new Map([
|
||||
[homes.global, manifest({ manifestVersion: 2, files: { 'skills/gsd-xy/SKILL.md': 'a' } })],
|
||||
[homes.global, manifest({ manifestVersion: 2, files: { 'skills/msd-xy/SKILL.md': 'a' } })],
|
||||
]);
|
||||
const result = resolveInstalledSurfaces('claude', baseOpts(home, cwd, { readManifest: mkReadManifest(byConfigHome) }));
|
||||
assert.deepStrictEqual(scopeOf(result, 'global').stems, []);
|
||||
@@ -656,7 +656,7 @@ describe('resolveInstalledSurfaces — stem derivation (B1-B15)', () => {
|
||||
const cwd = '/fixture/project';
|
||||
const homes = scopeHomes('claude', home, cwd);
|
||||
const byConfigHome = new Map([
|
||||
[homes.global, manifest({ manifestVersion: 2, files: { 'skills/gsd-PlanPhase/SKILL.md': 'a' } })],
|
||||
[homes.global, manifest({ manifestVersion: 2, files: { 'skills/msd-PlanPhase/SKILL.md': 'a' } })],
|
||||
]);
|
||||
const result = resolveInstalledSurfaces('claude', baseOpts(home, cwd, { readManifest: mkReadManifest(byConfigHome) }));
|
||||
assert.deepStrictEqual(scopeOf(result, 'global').stems, []);
|
||||
@@ -667,7 +667,7 @@ describe('resolveInstalledSurfaces — stem derivation (B1-B15)', () => {
|
||||
const cwd = '/fixture/project';
|
||||
const homes = scopeHomes('claude', home, cwd);
|
||||
const byConfigHome = new Map([
|
||||
[homes.global, manifest({ manifestVersion: 2, files: { 'skills/gsd--x/SKILL.md': 'a' } })],
|
||||
[homes.global, manifest({ manifestVersion: 2, files: { 'skills/msd--x/SKILL.md': 'a' } })],
|
||||
]);
|
||||
const result = resolveInstalledSurfaces('claude', baseOpts(home, cwd, { readManifest: mkReadManifest(byConfigHome) }));
|
||||
assert.deepStrictEqual(scopeOf(result, 'global').stems, []);
|
||||
@@ -680,7 +680,7 @@ describe('resolveInstalledSurfaces — stem derivation is the exact inverse of P
|
||||
// stay realistic in length.
|
||||
const stemArb = fc.stringMatching(/^[a-z0-9]{1,8}(-[a-z0-9]{1,8}){0,2}$/);
|
||||
|
||||
const PREFIX = 'gsd-';
|
||||
const PREFIX = 'msd-';
|
||||
const home = '/fixture/home';
|
||||
const cwd = '/fixture/project';
|
||||
const homes = scopeHomes('claude', home, cwd);
|
||||
@@ -695,7 +695,7 @@ describe('resolveInstalledSurfaces — stem derivation is the exact inverse of P
|
||||
artifactLayout: {
|
||||
global: [],
|
||||
local: [
|
||||
{ kind: 'commands', destSubpath: 'commands/gsd', prefix: PREFIX, nesting: 'flat', recursive: false, converter: null },
|
||||
{ kind: 'commands', destSubpath: 'commands/msd', prefix: PREFIX, nesting: 'flat', recursive: false, converter: null },
|
||||
],
|
||||
},
|
||||
},
|
||||
@@ -729,11 +729,11 @@ describe('resolveInstalledSurfaces — stem derivation is the exact inverse of P
|
||||
test('property: namespaced-by-dir commands round-trip', () => {
|
||||
fc.assert(
|
||||
fc.property(stemArb, (stem) => {
|
||||
const namespacedByDir = isNamespacedByDir('commands', 'commands/gsd', PREFIX);
|
||||
const namespacedByDir = isNamespacedByDir('commands', 'commands/msd', PREFIX);
|
||||
assert.strictEqual(namespacedByDir, true, 'fixture assumption: the synthetic layout is the namespaced-by-dir shape');
|
||||
const filename = composeCommandFilename(namespacedByDir, PREFIX, stem);
|
||||
const byConfigHome = new Map([
|
||||
[homes.local, manifest({ manifestVersion: 2, files: { [`commands/gsd/${filename}`]: 'a' } })],
|
||||
[homes.local, manifest({ manifestVersion: 2, files: { [`commands/msd/${filename}`]: 'a' } })],
|
||||
]);
|
||||
const result = resolveInstalledSurfaces('claude', baseOpts(home, cwd, {
|
||||
readManifest: mkReadManifest(byConfigHome),
|
||||
|
||||
Reference in New Issue
Block a user