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