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

@@ -32,12 +32,12 @@ describe('response-language workflow coverage lint (#2529)', () => {
});
function fixture() {
const root = fs.mkdtempSync(path.join(os.tmpdir(), 'gsd-response-language-'));
const root = fs.mkdtempSync(path.join(os.tmpdir(), 'msd-response-language-'));
tempDirs.push(root);
fs.mkdirSync(path.join(root, 'nested', 'modes'), { recursive: true });
fs.writeFileSync(
path.join(root, 'covered-by-reference.md'),
'@~/.claude/gsd-core/references/response-language-directive.md\n',
'@~/.claude/msd-core/references/response-language-directive.md\n',
);
fs.writeFileSync(
path.join(root, 'nested', 'covered-inline.md'),
@@ -66,7 +66,7 @@ describe('response-language workflow coverage lint (#2529)', () => {
});
test('an uppercase extension is discovered, and is a violation rather than an exemption', () => {
const root = fs.mkdtempSync(path.join(os.tmpdir(), 'gsd-response-language-case-'));
const root = fs.mkdtempSync(path.join(os.tmpdir(), 'msd-response-language-case-'));
tempDirs.push(root);
fs.writeFileSync(path.join(root, 'SHOUTING.MD'), '# no directive\n');
fs.writeFileSync(path.join(root, 'mixed.Md'), '# no directive\n');
@@ -108,7 +108,7 @@ describe('response-language workflow coverage lint (#2529)', () => {
});
test('pins every shared inline directive site to one exact canonical line', () => {
const root = fs.mkdtempSync(path.join(os.tmpdir(), 'gsd-response-language-parity-'));
const root = fs.mkdtempSync(path.join(os.tmpdir(), 'msd-response-language-parity-'));
tempDirs.push(root);
for (const relative of EXACT_INLINE_DIRECTIVE_WORKFLOWS) {
const file = path.join(root, relative);
@@ -136,18 +136,18 @@ describe('response-language workflow coverage lint (#2529)', () => {
// directive of its own, so without inheritance every extraction reds this lint
// for prose that was already covered where it used to live.
function fragmentFixture({ parentCovered = true, parentNamesFragment = true } = {}) {
const root = fs.mkdtempSync(path.join(os.tmpdir(), 'gsd-response-language-fragment-'));
const root = fs.mkdtempSync(path.join(os.tmpdir(), 'msd-response-language-fragment-'));
tempDirs.push(root);
fs.mkdirSync(path.join(root, 'autonomous', 'steps'), { recursive: true });
fs.writeFileSync(
path.join(root, 'autonomous.md'),
[
parentCovered
? '@~/.claude/gsd-core/references/response-language-directive.md'
? '@~/.claude/msd-core/references/response-language-directive.md'
: '# No directive here',
parentNamesFragment
? 'read and execute `gsd-core/workflows/autonomous/steps/converge-banner.md`'
: 'read and execute `gsd-core/workflows/autonomous/steps/something-else.md`',
? 'read and execute `msd-core/workflows/autonomous/steps/converge-banner.md`'
: 'read and execute `msd-core/workflows/autonomous/steps/something-else.md`',
].join('\n') + '\n',
);
fs.writeFileSync(
@@ -189,18 +189,18 @@ describe('response-language workflow coverage lint (#2529)', () => {
// tests above pin, for `detail/` specifically, so the extension cannot
// silently become an exemption instead of inheritance.
function detailFragmentFixture({ parentCovered = true, parentNamesFragment = true } = {}) {
const root = fs.mkdtempSync(path.join(os.tmpdir(), 'gsd-response-language-detail-'));
const root = fs.mkdtempSync(path.join(os.tmpdir(), 'msd-response-language-detail-'));
tempDirs.push(root);
fs.mkdirSync(path.join(root, 'autonomous', 'detail'), { recursive: true });
fs.writeFileSync(
path.join(root, 'autonomous.md'),
[
parentCovered
? '@~/.claude/gsd-core/references/response-language-directive.md'
? '@~/.claude/msd-core/references/response-language-directive.md'
: '# No directive here',
parentNamesFragment
? 'read and execute `gsd-core/workflows/autonomous/detail/converge-detail.md`'
: 'read and execute `gsd-core/workflows/autonomous/detail/something-else.md`',
? 'read and execute `msd-core/workflows/autonomous/detail/converge-detail.md`'
: 'read and execute `msd-core/workflows/autonomous/detail/something-else.md`',
].join('\n') + '\n',
);
fs.writeFileSync(
@@ -271,12 +271,12 @@ describe('response-language workflow coverage lint (#2529)', () => {
// parent's directive is loaded when the fragment runs.
test('inheritance requires a dispatching read/execute context, not a bare mention', () => {
const dispatches = [
'If `section_manifest` is `null`: read and execute `gsd-core/workflows/a/steps/b.md`. Otherwise skip.',
'Read and execute `gsd-core/workflows/a/steps/b.md`.',
'Read+execute `gsd-core/workflows/a/steps/b.md` (defines the helpers).',
'Read `gsd-core/workflows/a/steps/b.md` if planning freezes on Windows.',
'If `section_manifest` is `null`: read and execute `msd-core/workflows/a/steps/b.md`. Otherwise skip.',
'Read and execute `msd-core/workflows/a/steps/b.md`.',
'Read+execute `msd-core/workflows/a/steps/b.md` (defines the helpers).',
'Read `msd-core/workflows/a/steps/b.md` if planning freezes on Windows.',
// #1689's per-plan executor routing dispatches with `run`, not read/execute.
'**Executor routing.** Per plan, run `gsd-core/workflows/a/steps/b.md` to set `EXECUTOR_TYPE`.',
'**Executor routing.** Per plan, run `msd-core/workflows/a/steps/b.md` to set `EXECUTOR_TYPE`.',
// #3552's `branching_strategy: none` arm dispatches with the path written
// RELATIVE to the catalog. A rooted-only needle read that live dispatch as
// no dispatch, and the fragment it reaches read as uncovered.
@@ -291,14 +291,14 @@ describe('response-language workflow coverage lint (#2529)', () => {
}
const mentions = [
'- #1234: extracted the wave logic into `gsd-core/workflows/a/steps/b.md`.',
'The prose below used to live in `gsd-core/workflows/a/steps/b.md`.',
'`gsd-core/workflows/a/steps/b.md` is deprecated and no longer dispatched.',
'- #1234: extracted the wave logic into `msd-core/workflows/a/steps/b.md`.',
'The prose below used to live in `msd-core/workflows/a/steps/b.md`.',
'`msd-core/workflows/a/steps/b.md` is deprecated and no longer dispatched.',
// The verb is on a different line: it governs nothing here.
'Read and execute the step below.\nSee `gsd-core/workflows/a/steps/b.md`.',
'Read and execute the step below.\nSee `msd-core/workflows/a/steps/b.md`.',
// The verb is on the same line but a whole clause away, so it belongs to a
// different sentence — the window is what keeps it from vouching.
'Read the roadmap first, then decide whether any of this still applies to `gsd-core/workflows/a/steps/b.md`.',
'Read the roadmap first, then decide whether any of this still applies to `msd-core/workflows/a/steps/b.md`.',
// The relative form matches on a path boundary, so a DIFFERENT file whose
// path merely ends with this one dispatches itself, not this fragment.
'Read and execute `vendor/a/steps/b.md`.',
@@ -313,13 +313,13 @@ describe('response-language workflow coverage lint (#2529)', () => {
});
test('a fragment mentioned but never dispatched does not inherit', () => {
const root = fs.mkdtempSync(path.join(os.tmpdir(), 'gsd-response-language-mention-'));
const root = fs.mkdtempSync(path.join(os.tmpdir(), 'msd-response-language-mention-'));
tempDirs.push(root);
fs.mkdirSync(path.join(root, 'autonomous', 'steps'), { recursive: true });
fs.writeFileSync(
path.join(root, 'autonomous.md'),
'@~/.claude/gsd-core/references/response-language-directive.md\n'
+ '- #1671: the banner prose moved to `gsd-core/workflows/autonomous/steps/converge-banner.md`.\n',
'@~/.claude/msd-core/references/response-language-directive.md\n'
+ '- #1671: the banner prose moved to `msd-core/workflows/autonomous/steps/converge-banner.md`.\n',
);
fs.writeFileSync(
path.join(root, 'autonomous', 'steps', 'converge-banner.md'),
@@ -336,7 +336,7 @@ describe('response-language workflow coverage lint (#2529)', () => {
);
});
// #2558 round 10 (Minor C), narrowed in round 13. The `gsd-verifier` subagent
// #2558 round 10 (Minor C), narrowed in round 13. The `msd-verifier` subagent
// emits user-facing prose but reads no workflow file of its own, so its
// coverage lives entirely in the dispatch prompt execute-phase.md builds: the
// reference tells the orchestrator to carry the directive "immediately after
@@ -355,7 +355,7 @@ describe('response-language workflow coverage lint (#2529)', () => {
anchorIn: 'execute-phase.md',
};
test('the gsd-verifier dispatch contract still has both of its halves', () => {
test('the msd-verifier dispatch contract still has both of its halves', () => {
const { reference, directive, anchor, anchorIn } = VERIFIER_DISPATCH_CONTRACT;
const referencePath = path.join(WORKFLOWS_DIR, reference);
@@ -414,11 +414,11 @@ describe('response-language workflow coverage lint (#2529)', () => {
// false-positive class, one level up.
test('coverage by reference requires an @-import, not a mention of the path', () => {
const imports = [
'@~/.claude/gsd-core/references/response-language-directive.md',
'@$HOME/.claude/gsd-core/references/response-language-directive.md',
'@~/.claude/gsd-core/references/execute-phase-response-language.md',
'@~/.claude/msd-core/references/response-language-directive.md',
'@$HOME/.claude/msd-core/references/response-language-directive.md',
'@~/.claude/msd-core/references/execute-phase-response-language.md',
// Leading/trailing whitespace is still an import line.
' @~/.claude/gsd-core/references/response-language-directive.md ',
' @~/.claude/msd-core/references/response-language-directive.md ',
];
for (const line of imports) {
assert.strictEqual(
@@ -430,10 +430,10 @@ describe('response-language workflow coverage lint (#2529)', () => {
const mentions = [
'- #2529: added the shared references/response-language-directive.md reference.',
'The directive lives in `gsd-core/references/response-language-directive.md`.',
'The directive lives in `msd-core/references/response-language-directive.md`.',
'references/response-language-directive.md is deprecated; do not import it.',
// An import that is only quoted as an example, mid-sentence, loads nothing.
'Add `@~/.claude/gsd-core/references/response-language-directive.md` to new workflows.',
'Add `@~/.claude/msd-core/references/response-language-directive.md` to new workflows.',
];
for (const line of mentions) {
assert.strictEqual(
@@ -560,7 +560,7 @@ describe('response-language workflow coverage lint (#2529)', () => {
});
test('main returns success and emits the covered workflow count', () => {
const root = fs.mkdtempSync(path.join(os.tmpdir(), 'gsd-response-language-ok-'));
const root = fs.mkdtempSync(path.join(os.tmpdir(), 'msd-response-language-ok-'));
tempDirs.push(root);
fs.writeFileSync(
path.join(root, 'covered.md'),
@@ -580,7 +580,7 @@ describe('response-language workflow coverage lint (#2529)', () => {
});
test('main fails instead of passing vacuously when discovery finds no workflow', () => {
const root = fs.mkdtempSync(path.join(os.tmpdir(), 'gsd-response-language-empty-'));
const root = fs.mkdtempSync(path.join(os.tmpdir(), 'msd-response-language-empty-'));
tempDirs.push(root);
fs.mkdirSync(path.join(root, 'not-a-workflow'), { recursive: true });
fs.writeFileSync(path.join(root, 'not-a-workflow', 'notes.txt'), 'not Markdown');
@@ -596,7 +596,7 @@ describe('response-language workflow coverage lint (#2529)', () => {
});
test('main fails closed on an unreadable workflow directory rather than throwing', () => {
const root = fs.mkdtempSync(path.join(os.tmpdir(), 'gsd-response-language-absent-'));
const root = fs.mkdtempSync(path.join(os.tmpdir(), 'msd-response-language-absent-'));
tempDirs.push(root);
fs.writeFileSync(path.join(root, 'file-not-dir.md'), 'Apply response_language to all prose.\n');
const errors = [];
@@ -622,14 +622,14 @@ describe('response-language workflow coverage lint (#2529)', () => {
// "the gate certifies the defect" failure the round-10 fix closed, one level up.
// These tests fail on the unfixed lint.
function referenceFixture(referenceText) {
const root = fs.mkdtempSync(path.join(os.tmpdir(), 'gsd-response-language-ref-'));
const root = fs.mkdtempSync(path.join(os.tmpdir(), 'msd-response-language-ref-'));
tempDirs.push(root);
const workflows = path.join(root, 'workflows');
fs.mkdirSync(path.join(root, 'references'), { recursive: true });
fs.mkdirSync(workflows, { recursive: true });
fs.writeFileSync(
path.join(workflows, 'takes-the-reference.md'),
'@~/.claude/gsd-core/references/response-language-directive.md\n',
'@~/.claude/msd-core/references/response-language-directive.md\n',
);
if (referenceText !== null) {
fs.writeFileSync(
@@ -709,7 +709,7 @@ describe('response-language workflow coverage lint (#2529)', () => {
// to skip such a subtree in silence while files.length > 0 kept the run green,
// which is precisely what main()'s comment claims cannot happen.
test('the walk follows a symlinked subtree instead of skipping it silently', (t) => {
const root = fs.mkdtempSync(path.join(os.tmpdir(), 'gsd-response-language-symlink-'));
const root = fs.mkdtempSync(path.join(os.tmpdir(), 'msd-response-language-symlink-'));
tempDirs.push(root);
const workflows = path.join(root, 'workflows');
const outside = path.join(root, 'outside');
@@ -856,7 +856,7 @@ describe('response-language workflow coverage lint (#2529)', () => {
const converted = referenceFixture(STRONG_REFERENCE);
fs.writeFileSync(
path.join(converted.workflows, pinned),
'@~/.claude/gsd-core/references/response-language-directive.md\n',
'@~/.claude/msd-core/references/response-language-directive.md\n',
);
assert.deepStrictEqual(findViolations(converted.workflows, converted.root), []);
@@ -877,7 +877,7 @@ describe('response-language workflow coverage lint (#2529)', () => {
const weakened = referenceFixture(WEAK_REFERENCE);
fs.writeFileSync(
path.join(weakened.workflows, pinned),
'@~/.claude/gsd-core/references/response-language-directive.md\n',
'@~/.claude/msd-core/references/response-language-directive.md\n',
);
assert.deepStrictEqual(
findViolations(weakened.workflows, weakened.root).map((file) => path.basename(file)).sort(),