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

@@ -5,13 +5,13 @@
// spawn.
//
// resolveProfile() derived the agent set by scanning ONLY the command bodies
// (commands/gsd/*.md), which are thin delegators — the actual
// `subagent_type="gsd-*"` spawns live in the workflow files those commands
// reference. Under --profile=standard that omitted gsd-verifier (spawned by
// (commands/msd/*.md), which are thin delegators — the actual
// `subagent_type="msd-*"` spawns live in the workflow files those commands
// reference. Under --profile=standard that omitted msd-verifier (spawned by
// execute-phase's verify_phase_goal), so phase-goal verification failed at
// the point of spawn, AFTER execution work had landed. The manifest's agent
// derivation now also reads every referenced workflow body (plus split
// workflows' steps/ fragments) and unions their gsd-* tokens.
// workflows' steps/ fragments) and unions their msd-* tokens.
// ─────────────────────────────────────────────────────────────────────────────
const { test, describe } = require('node:test');
@@ -24,10 +24,10 @@ const REPO = path.join(__dirname, '..');
const {
loadSkillsManifest,
resolveProfile,
} = require('../gsd-core/bin/lib/install-profiles.cjs');
} = require('../msd-core/bin/lib/install-profiles.cjs');
const COMMANDS_DIR = path.join(REPO, 'commands', 'gsd');
const WORKFLOWS_DIR = path.join(REPO, 'gsd-core', 'workflows');
const COMMANDS_DIR = path.join(REPO, 'commands', 'msd');
const WORKFLOWS_DIR = path.join(REPO, 'msd-core', 'workflows');
const AGENTS_DIR = path.join(REPO, 'agents');
const realAgents = new Set(
@@ -42,17 +42,17 @@ function realAgentsFor(mode) {
}
describe('install-profile workflow spawn closure (#3798)', () => {
test('#3798: standard profile includes the agents its workflows spawn (gsd-verifier)', () => {
test('#3798: standard profile includes the agents its workflows spawn (msd-verifier)', () => {
const { installed } = realAgentsFor('standard');
assert.ok(
installed.includes('gsd-verifier'),
`gsd-verifier is spawned by execute-phase's verify_phase_goal and must be installed under standard; got: ${installed.join(' ')}`,
installed.includes('msd-verifier'),
`msd-verifier is spawned by execute-phase's verify_phase_goal and must be installed under standard; got: ${installed.join(' ')}`,
);
});
test('#3798: the agent set is a superset of referenced workflows\' spawn tokens', () => {
const { resolved, installed } = realAgentsFor('standard');
// Independently re-derive the gsd-* tokens in every workflow referenced by
// Independently re-derive the msd-* tokens in every workflow referenced by
// a standard skill, and require each token that names a real agent to be
// in the installed set — the property whose absence was the bug.
const tokens = new Set();
@@ -64,7 +64,7 @@ describe('install-profile workflow spawn closure (#3798)', () => {
for (const ref of refs) {
const wf = path.join(WORKFLOWS_DIR, ref.slice('workflows/'.length));
try {
for (const tok of fs.readFileSync(wf, 'utf8').match(/\bgsd-[a-z][a-z-]*/g) || []) {
for (const tok of fs.readFileSync(wf, 'utf8').match(/\bmsd-[a-z][a-z-]*/g) || []) {
tokens.add(tok);
}
} catch { /* workflow file absent — skip */ }
@@ -99,19 +99,19 @@ describe('install-profile workflow spawn closure (#3798)', () => {
// whose modes/ fragment carries the only spawn token — proves the
// recursive fragment walk, not just the parent body, feeds the union.
const os = require('node:os');
const tmp = fs.mkdtempSync(path.join(os.tmpdir(), 'gsd-3798-wf-'));
const tmp = fs.mkdtempSync(path.join(os.tmpdir(), 'msd-3798-wf-'));
t.after(() => cleanup(tmp));
const wfDir = path.join(tmp, 'workflows');
fs.mkdirSync(path.join(wfDir, 'probe', 'modes'), { recursive: true });
fs.writeFileSync(path.join(wfDir, 'probe.md'), '# Probe\n\nNo agents here.\n');
fs.writeFileSync(path.join(wfDir, 'probe', 'modes', 'advisor.md'), 'Spawn: subagent_type="gsd-fixture-only-agent"\n');
const cmdDir = path.join(tmp, 'commands', 'gsd');
fs.writeFileSync(path.join(wfDir, 'probe', 'modes', 'advisor.md'), 'Spawn: subagent_type="msd-fixture-only-agent"\n');
const cmdDir = path.join(tmp, 'commands', 'msd');
fs.mkdirSync(cmdDir, { recursive: true });
fs.writeFileSync(path.join(cmdDir, 'probe-skill.md'), '@~/.claude/gsd-core/workflows/probe.md\n');
fs.writeFileSync(path.join(cmdDir, 'probe-skill.md'), '@~/.claude/msd-core/workflows/probe.md\n');
const man = loadSkillsManifest(cmdDir, wfDir);
assert.ok(
(man.get('_calls_agents_probe-skill') || []).includes('gsd-fixture-only-agent'),
(man.get('_calls_agents_probe-skill') || []).includes('msd-fixture-only-agent'),
'#3798: a spawn token living ONLY in a workflow fragment (modes/) must reach the agent set',
);
});