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:
@@ -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(),
|
||||
|
||||
Reference in New Issue
Block a user