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

@@ -15,13 +15,13 @@ const { test, describe } = require('node:test');
const assert = require('node:assert/strict');
const fs = require('fs');
const path = require('path');
const { scanFencedBlocks } = require('../gsd-core/bin/lib/markdown-sectionizer.cjs');
const { scanFencedBlocks } = require('../msd-core/bin/lib/markdown-sectionizer.cjs');
const COMMAND_PATH = path.join(__dirname, '..', 'commands', 'gsd', 'execute-phase.md');
const COMMAND_PATH = path.join(__dirname, '..', 'commands', 'msd', 'execute-phase.md');
describe('execute-phase command: active flags are explicit', () => {
test('command file exists', () => {
assert.ok(fs.existsSync(COMMAND_PATH), 'commands/gsd/execute-phase.md should exist');
assert.ok(fs.existsSync(COMMAND_PATH), 'commands/msd/execute-phase.md should exist');
});
test('objective says documented flags are not implied active', () => {
@@ -96,14 +96,14 @@ const assert = require('node:assert/strict');
const fs = require('fs');
const path = require('path');
const EXECUTE_PHASE_PATH = path.join(__dirname, '..', 'gsd-core', 'workflows', 'execute-phase.md');
const AUDIT_FIX_PATH = path.join(__dirname, '..', 'gsd-core', 'workflows', 'audit-fix.md');
const EXECUTE_PHASE_PATH = path.join(__dirname, '..', 'msd-core', 'workflows', 'execute-phase.md');
const AUDIT_FIX_PATH = path.join(__dirname, '..', 'msd-core', 'workflows', 'audit-fix.md');
// #1857: execute-phase's regression-gate test-command resolution was extracted
// to this step file (execute-phase.md is size-frozen — phase-6 capstone).
// #2932: steps/regression-gate.md now only discovers prior-phase test files and
// delegates (via "Read and execute") to steps/regression-gate-run.md, which
// carries the actual test-command resolution (Makefile/config-get priority).
const REGRESSION_GATE_PATH = path.join(__dirname, '..', 'gsd-core', 'workflows', 'execute-phase', 'steps', 'regression-gate-run.md');
const REGRESSION_GATE_PATH = path.join(__dirname, '..', 'msd-core', 'workflows', 'execute-phase', 'steps', 'regression-gate-run.md');
function assertMakefileCheckBeforeNpmTest(filePath, label) {
const content = fs.readFileSync(filePath, 'utf-8');
@@ -227,18 +227,18 @@ const path = require('path');
const WORKFLOW_PATH = path.join(
__dirname,
'..',
'gsd-core',
'msd-core',
'workflows',
'execute-phase.md'
);
describe('bug #2516: executor_model "inherit" must not be passed literally to Task()', () => {
test('workflow file exists', () => {
assert.ok(fs.existsSync(WORKFLOW_PATH), 'gsd-core/workflows/execute-phase.md should exist');
assert.ok(fs.existsSync(WORKFLOW_PATH), 'msd-core/workflows/execute-phase.md should exist');
});
test('workflow contains instructions for handling the "inherit" case', () => {
assert.ok(fs.existsSync(WORKFLOW_PATH), 'gsd-core/workflows/execute-phase.md should exist');
assert.ok(fs.existsSync(WORKFLOW_PATH), 'msd-core/workflows/execute-phase.md should exist');
const content = fs.readFileSync(WORKFLOW_PATH, 'utf-8');
const hasInheritInstruction =
content.includes('"inherit"') &&
@@ -253,7 +253,7 @@ describe('bug #2516: executor_model "inherit" must not be passed literally to Ta
});
test('workflow does not instruct passing model="inherit" literally to Task', () => {
assert.ok(fs.existsSync(WORKFLOW_PATH), 'gsd-core/workflows/execute-phase.md should exist');
assert.ok(fs.existsSync(WORKFLOW_PATH), 'msd-core/workflows/execute-phase.md should exist');
const content = fs.readFileSync(WORKFLOW_PATH, 'utf-8');
// The workflow must not have an unconditional model="{executor_model}" template
// that would pass "inherit" through. It should document conditional logic.
@@ -298,7 +298,7 @@ describe('bug #2516: executor_model "inherit" must not be passed literally to Ta
});
test('workflow documents that omitting model= causes inheritance from orchestrator', () => {
assert.ok(fs.existsSync(WORKFLOW_PATH), 'gsd-core/workflows/execute-phase.md should exist');
assert.ok(fs.existsSync(WORKFLOW_PATH), 'msd-core/workflows/execute-phase.md should exist');
const content = fs.readFileSync(WORKFLOW_PATH, 'utf-8');
const hasInheritanceExplanation =
content.includes('inherit') &&
@@ -335,8 +335,8 @@ describe('bug #2516: executor_model "inherit" must not be passed literally to Ta
* recommendation, leaving agents without guidance on the correct first step.
*
* Fixed: offer_next now checks for {next}-CONTEXT.md in the phase directory.
* - If CONTEXT.md is missing: primary suggestion is /gsd-discuss-phase
* - If CONTEXT.md exists: primary suggestion is /gsd-plan-phase
* - If CONTEXT.md is missing: primary suggestion is /msd-discuss-phase
* - If CONTEXT.md exists: primary suggestion is /msd-plan-phase
*/
'use strict';
@@ -347,7 +347,7 @@ const fs = require('node:fs');
const path = require('node:path');
const workflowPath = path.resolve(
__dirname, '..', 'gsd-core', 'workflows', 'execute-phase.md'
__dirname, '..', 'msd-core', 'workflows', 'execute-phase.md'
);
describe('bug #2002: next-step suggestion checks CONTEXT.md (now via transition offer_next_phase, reached by execute-phase post-completion delegation — #1526)', () => {
@@ -355,7 +355,7 @@ describe('bug #2002: next-step suggestion checks CONTEXT.md (now via transition
// post-completion to the transition workflow, whose offer_next_phase step performs
// the #2002 CONTEXT.md-gated next-step suggestion. These tests track that behavior
// in its new home (transition.md) and assert the delegation reaches it.
const transPath = path.resolve(__dirname, '..', 'gsd-core', 'workflows', 'transition.md');
const transPath = path.resolve(__dirname, '..', 'msd-core', 'workflows', 'transition.md');
let offerNextPhase;
test('setup: transition.md offer_next_phase section is readable', () => {
@@ -370,7 +370,7 @@ describe('bug #2002: next-step suggestion checks CONTEXT.md (now via transition
test('#1526: execute-phase delegates post-completion to transition (no inline offer_next step)', () => {
const wf = fs.readFileSync(workflowPath, 'utf-8');
assert.ok(wf.includes('delegate_post_completion_to_transition'), 'execute-phase must delegate post-completion to transition');
assert.ok(wf.includes('@~/.claude/gsd-core/workflows/transition.md'), 'execute-phase must @-include transition.md');
assert.ok(wf.includes('@~/.claude/msd-core/workflows/transition.md'), 'execute-phase must @-include transition.md');
assert.equal(wf.includes('<step name="offer_next">'), false, 'inline offer_next step is intentionally removed (delegated to transition.offer_next_phase)');
});
@@ -381,18 +381,18 @@ describe('bug #2002: next-step suggestion checks CONTEXT.md (now via transition
);
});
test('offer_next_phase presents /gsd-discuss-phase when CONTEXT.md does not exist', () => {
test('offer_next_phase presents /msd-discuss-phase when CONTEXT.md does not exist', () => {
assert.ok(
/CONTEXT\.md.*does not exist|CONTEXT\.md.*not.*exist|If CONTEXT\.md does/i.test(offerNextPhase) ||
/discuss-phase/i.test(offerNextPhase),
'offer_next_phase must present /gsd-discuss-phase as primary when CONTEXT.md does not exist'
'offer_next_phase must present /msd-discuss-phase as primary when CONTEXT.md does not exist'
);
});
test('offer_next_phase presents /gsd-plan-phase when CONTEXT.md exists', () => {
test('offer_next_phase presents /msd-plan-phase when CONTEXT.md exists', () => {
assert.ok(
/CONTEXT\.md.*exists|exists.*CONTEXT\.md|If CONTEXT\.md/i.test(offerNextPhase),
'offer_next_phase must present /gsd-plan-phase as primary when CONTEXT.md exists'
'offer_next_phase must present /msd-plan-phase as primary when CONTEXT.md exists'
);
});
@@ -426,7 +426,7 @@ const path = require('node:path');
const fc = require('fast-check');
const ROOT = path.join(__dirname, '..');
const WORKFLOW = path.join(ROOT, 'gsd-core', 'workflows', 'execute-phase.md');
const WORKFLOW = path.join(ROOT, 'msd-core', 'workflows', 'execute-phase.md');
const MATRIX = path.join(ROOT, 'docs', 'reference', 'host-integration-capability-matrix.md');
const DESCRIPTOR = path.join(ROOT, 'capabilities', 'claude', 'capability.json');
@@ -488,7 +488,7 @@ describe('#3177: execute-phase.md states Claude Code dispatch truthfully', () =>
+ 'opt-out is not the guidance here — confirming completion is.',
);
assert.ok(
bullet.includes('Agent(subagent_type="gsd-executor"'),
bullet.includes('Agent(subagent_type="msd-executor"'),
'the bullet must still carry the dispatch mechanism the rest of the file depends on',
);
});
@@ -610,14 +610,14 @@ describe('#3177: matrix section extraction is bounded by its heading', () => {
});
describe('#3177: debug.md dispatches its session manager in the foreground', () => {
const DEBUG_WF = path.join(ROOT, 'gsd-core', 'workflows', 'debug.md');
const DEBUG_WF = path.join(ROOT, 'msd-core', 'workflows', 'debug.md');
const debugText = () => fs.readFileSync(DEBUG_WF, 'utf8');
/**
* Every fenced `Agent( … )` block in debug.md that dispatches the session manager.
*
* Anchored on a line that is exactly `Agent(` so the PROSE mention of
* `Agent(subagent_type="gsd-debug-session-manager", …)` inside the blockquote at
* `Agent(subagent_type="msd-debug-session-manager", …)` inside the blockquote at
* :206 is not mistaken for a dispatch. Positional selection (first match wins) was
* the original bug here: it silently checked the continue path while the
* new-session path went unexamined.
@@ -628,7 +628,7 @@ describe('#3177: debug.md dispatches its session manager in the foreground', ()
const close = text.indexOf('\n)', m.index);
if (close === -1) continue;
const block = text.slice(m.index, close);
if (block.includes('subagent_type="gsd-debug-session-manager"')) blocks.push(block);
if (block.includes('subagent_type="msd-debug-session-manager"')) blocks.push(block);
}
return blocks;
}
@@ -649,7 +649,7 @@ describe('#3177: debug.md dispatches its session manager in the foreground', ()
for (const block of blocks) {
assert.match(
block, /run_in_background\s*=\s*false/,
'every gsd-debug-session-manager dispatch must pass run_in_background=false — without '
'every msd-debug-session-manager dispatch must pass run_in_background=false — without '
+ 'it Claude Code backgrounds the spawn and the compact summary never returns (#2196).',
);
}