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

@@ -3,8 +3,8 @@
/**
* Dimension 3b — undeclared / temporal coupling between same-wave plans (#1954).
*
* `gsd-plan-checker` proves plan dependencies resolve and are acyclic (Dimension 3),
* and `/gsd:execute-phase` separately proves same-wave plans do not overlap in
* `msd-plan-checker` proves plan dependencies resolve and are acyclic (Dimension 3),
* and `/msd:execute-phase` separately proves same-wave plans do not overlap in
* `files_modified`. Neither axis sees coupling that is real but undeclared — plan A
* writes a config key / table / migration / global module that plan B reads, or B
* only works if A ran first. In parallel execution that surfaces as an intermittent
@@ -32,21 +32,21 @@ const { describe, test } = require('node:test');
const assert = require('node:assert/strict');
const fs = require('fs');
const path = require('path');
const { stripFencedCode } = require('../gsd-core/bin/lib/markdown-sectionizer.cjs');
const { stripFencedCode } = require('../msd-core/bin/lib/markdown-sectionizer.cjs');
const ROOT = path.join(__dirname, '..');
const AGENT_PATH = path.join(ROOT, 'agents', 'gsd-plan-checker.md');
const AGENT_PATH = path.join(ROOT, 'agents', 'msd-plan-checker.md');
const DOCS_AGENTS_PATH = path.join(ROOT, 'docs', 'AGENTS.md');
const REVISION_LOOP_PATH = path.join(ROOT, 'gsd-core', 'references', 'revision-loop.md');
const PLAN_PHASE_PATH = path.join(ROOT, 'gsd-core', 'workflows', 'plan-phase.md');
const PLANNER_PATH = path.join(ROOT, 'agents', 'gsd-planner.md');
const PLANNER_COUPLING_REF_PATH = path.join(ROOT, 'gsd-core', 'references', 'planner-coupling.md');
const REVISION_LOOP_PATH = path.join(ROOT, 'msd-core', 'references', 'revision-loop.md');
const PLAN_PHASE_PATH = path.join(ROOT, 'msd-core', 'workflows', 'plan-phase.md');
const PLANNER_PATH = path.join(ROOT, 'agents', 'msd-planner.md');
const PLANNER_COUPLING_REF_PATH = path.join(ROOT, 'msd-core', 'references', 'planner-coupling.md');
const VERIFY_WORK_PATH = path.join(ROOT, 'gsd-core', 'workflows', 'verify-work.md');
const QUICK_LOOP_PATH = path.join(ROOT, 'gsd-core', 'workflows', 'quick', 'steps', 'plan-checker-loop.md');
const IMPORT_PATH = path.join(ROOT, 'gsd-core', 'workflows', 'import.md');
const AGENT_CONTRACTS_PATH = path.join(ROOT, 'gsd-core', 'references', 'agent-contracts.md');
const { splitLines } = require('../gsd-core/bin/lib/text-lines.cjs');
const VERIFY_WORK_PATH = path.join(ROOT, 'msd-core', 'workflows', 'verify-work.md');
const QUICK_LOOP_PATH = path.join(ROOT, 'msd-core', 'workflows', 'quick', 'steps', 'plan-checker-loop.md');
const IMPORT_PATH = path.join(ROOT, 'msd-core', 'workflows', 'import.md');
const AGENT_CONTRACTS_PATH = path.join(ROOT, 'msd-core', 'references', 'agent-contracts.md');
const { splitLines } = require('../msd-core/bin/lib/text-lines.cjs');
const agentDoc = fs.readFileSync(AGENT_PATH, 'utf-8');
const docsAgents = fs.readFileSync(DOCS_AGENTS_PATH, 'utf-8');
@@ -108,11 +108,11 @@ function stripFences(content) {
return stripFencedCode(content).text;
}
describe('gsd-plan-checker Dimension 3b — undeclared/temporal coupling (#1954)', () => {
describe('msd-plan-checker Dimension 3b — undeclared/temporal coupling (#1954)', () => {
describe('the sub-check exists and is scoped to Dimension 3', () => {
test('Dimension 3 carries an undeclared-coupling sub-check', () => {
const heading = agentDoc.match(/^## Dimension 3b: (.+)$/m);
assert.ok(heading, 'agents/gsd-plan-checker.md must define a "## Dimension 3b:" heading');
assert.ok(heading, 'agents/msd-plan-checker.md must define a "## Dimension 3b:" heading');
assert.match(
heading[1],
/coupling/i,
@@ -314,7 +314,7 @@ describe('gsd-plan-checker Dimension 3b — undeclared/temporal coupling (#1954)
});
test('docs/AGENTS.md enumerates every dimension the agent defines', () => {
const section = sliceBetween(docsAgents, /^### gsd-plan-checker$/m, /^### gsd-integration-checker$/m);
const section = sliceBetween(docsAgents, /^### msd-plan-checker$/m, /^### msd-integration-checker$/m);
const documented = new Set(
[...section.matchAll(/^\| ([0-9]+[a-z]?) \| /gm)].map((m) => m[1])
);
@@ -327,11 +327,11 @@ describe('gsd-plan-checker Dimension 3b — undeclared/temporal coupling (#1954)
});
test('docs/AGENTS.md documents the coupling check', () => {
const section = sliceBetween(docsAgents, /^### gsd-plan-checker$/m, /^### gsd-integration-checker$/m);
const section = sliceBetween(docsAgents, /^### msd-plan-checker$/m, /^### msd-integration-checker$/m);
assert.match(
section,
/coupling/i,
'docs/AGENTS.md\'s gsd-plan-checker section must document the coupling check'
'docs/AGENTS.md\'s msd-plan-checker section must document the coupling check'
);
});
});
@@ -500,10 +500,10 @@ describe('gsd-plan-checker Dimension 3b — undeclared/temporal coupling (#1954)
'an INFO-only checker return must not block an import'
);
const contracts = fs.readFileSync(AGENT_CONTRACTS_PATH, 'utf-8');
const checkerRow = splitLines(contracts).find((line) => line.startsWith('| gsd-plan-checker |'));
const checkerRow = splitLines(contracts).find((line) => line.startsWith('| msd-plan-checker |'));
assert.ok(
checkerRow && checkerRow.includes('gsd-core/workflows/import.md'),
'agent-contracts.md must list import.md as a gsd-plan-checker sentinel consumer'
checkerRow && checkerRow.includes('msd-core/workflows/import.md'),
'agent-contracts.md must list import.md as a msd-plan-checker sentinel consumer'
);
});
@@ -550,12 +550,12 @@ describe('gsd-plan-checker Dimension 3b — undeclared/temporal coupling (#1954)
const planner = fs.readFileSync(PLANNER_PATH, 'utf-8');
assert.match(
planner,
/@~\/\.claude\/gsd-core\/references\/planner-coupling\.md/,
'gsd-planner.md must point at the planner-coupling reference (#3724 criterion 3)'
/@~\/\.claude\/msd-core\/references\/planner-coupling\.md/,
'msd-planner.md must point at the planner-coupling reference (#3724 criterion 3)'
);
assert.ok(
fs.existsSync(PLANNER_COUPLING_REF_PATH),
'gsd-core/references/planner-coupling.md must exist — the planner pointer routes there'
'msd-core/references/planner-coupling.md must exist — the planner pointer routes there'
);
const ref = fs.readFileSync(PLANNER_COUPLING_REF_PATH, 'utf-8');
assert.match(