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:
Jakub Zych
2026-10-06 01:47:40 +02:00
parent fe069b2a56
commit a9a7a328e6
2763 changed files with 78465 additions and 78434 deletions

View File

@@ -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-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, []);
@@ -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-x‮y/SKILL.md': 'a' } })],
[homes.global, manifest({ manifestVersion: 2, files: { 'skills/msd-x‮y/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),