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

@@ -13,7 +13,7 @@
*
* Focus areas:
* A. loop render-hooks execute:wave:post — resolution full/partial/none
* B. check verify.schema-drift — no-schema/block/GSD_SKIP_SCHEMA_CHECK bypass
* B. check verify.schema-drift — no-schema/block/MSD_SKIP_SCHEMA_CHECK bypass
* C. check verify.codebase-drift — BVA threshold-1/threshold/auto-remap/no-STRUCTURE.md
* D. check ui.safety-gate — frontend+UI-file/+spec/missing-arg
* E. Full pipeline chain (render-hooks → dispatch each gate)
@@ -33,7 +33,7 @@ const { cleanup, installSpawnEnv, withAmbientCapabilityHome } = require('./helpe
const { gitOrThrow } = require('./helpers/git-fixture.cjs');
const { LOOP_HOOK_POINT_CLI_TIMEOUT_MS } = require('./helpers/timeouts.cjs');
const GSD_TOOLS = path.join(__dirname, '..', 'gsd-core', 'bin', 'gsd-tools.cjs');
const MSD_TOOLS = path.join(__dirname, '..', 'msd-core', 'bin', 'msd-tools.cjs');
// ─── Test-local git helper ───────────────────────────────────────────────────
// Inline — NOT modifying tests/helpers.cjs per task rules.
@@ -54,21 +54,21 @@ function gitAddCommit(dir, message) {
gitSync(['commit', '--allow-empty', '-m', message], dir);
}
// ─── GSD CLI runner ──────────────────────────────────────────────────────────
// ─── MSD CLI runner ──────────────────────────────────────────────────────────
/**
* Run gsd-tools and return { status, stdout, stderr, parsed? }.
* Run msd-tools and return { status, stdout, stderr, parsed? }.
* When raw=true the tool emits JSON; parsed is set on success.
*/
function runTool(args, { cwd, env = {} } = {}) {
const childEnv = installSpawnEnv({
GSD_SESSION_KEY: '',
MSD_SESSION_KEY: '',
CODEX_THREAD_ID: '',
CLAUDE_SESSION_ID: '',
CLAUDE_CODE_SSE_PORT: '',
...env,
});
const r = spawnSync(process.execPath, [GSD_TOOLS, ...args], {
const r = spawnSync(process.execPath, [MSD_TOOLS, ...args], {
cwd: cwd || os.tmpdir(),
encoding: 'utf8',
env: childEnv,
@@ -85,7 +85,7 @@ function runTool(args, { cwd, env = {} } = {}) {
const tmpDirs = [];
function makeTmpDir() {
const d = fs.mkdtempSync(path.join(os.tmpdir(), 'gsd-wave-post-'));
const d = fs.mkdtempSync(path.join(os.tmpdir(), 'msd-wave-post-'));
tmpDirs.push(d);
return d;
}
@@ -97,7 +97,7 @@ after(() => { for (const d of tmpDirs) { try { cleanup(d); } catch { /* best-eff
describe('A. loop render-hooks execute:wave:post — resolution', () => {
test('#4485: render-hooks ignores capabilities installed in ambient user locations', (t) => {
withAmbientCapabilityHome(t, 'gsd-ambient-wave-post-', 'ambient-wave-post', 'execute:wave:post');
withAmbientCapabilityHome(t, 'msd-ambient-wave-post-', 'ambient-wave-post', 'execute:wave:post');
const dir = makeTmpDir();
const result = runTool(['loop', 'render-hooks', 'execute:wave:post', '--raw'], { cwd: dir });
@@ -240,12 +240,12 @@ describe('B. check verify.schema-drift — CLI route', () => {
`unpushed_orms must include 'prisma'; got ${JSON.stringify(result.unpushed_orms)}`);
});
test('[negative] GSD_SKIP_SCHEMA_CHECK=true → block:false, skipped:true even with schema drift', () => {
test('[negative] MSD_SKIP_SCHEMA_CHECK=true → block:false, skipped:true even with schema drift', () => {
const dir = buildSchemaDriftFixture({ hasSchemaFile: true });
const r = runTool(['check', 'verify.schema-drift', '1', '--raw'], {
cwd: dir,
env: { GSD_SKIP_SCHEMA_CHECK: 'true' },
env: { MSD_SKIP_SCHEMA_CHECK: 'true' },
});
assert.strictEqual(r.status, 0, `exit non-zero: ${r.stderr}`);
assert.ok(r.parsed, `stdout not JSON: ${r.stdout}`);
@@ -253,7 +253,7 @@ describe('B. check verify.schema-drift — CLI route', () => {
// Specific: block must be FALSE (bypassed) even though drift was detected
assert.strictEqual(result.block, false,
`block must be false with GSD_SKIP_SCHEMA_CHECK=true; got ${result.block}`);
`block must be false with MSD_SKIP_SCHEMA_CHECK=true; got ${result.block}`);
assert.strictEqual(result.skipped, true,
`skipped must be true; got ${result.skipped}`);
// drift_detected should still be true (bypass doesn't mask detection)
@@ -601,7 +601,7 @@ describe('E. Full execute:wave:post pipeline — render-hooks then dispatch gate
describe('F. Real registry execute:wave:post shape — guard against accidental changes', () => {
const realRegistry = require('../gsd-core/bin/lib/capability-registry.cjs');
const realRegistry = require('../msd-core/bin/lib/capability-registry.cjs');
test('[happy] real registry execute:wave:post has exactly 3 gates with correct queries', () => {
const point = realRegistry.byLoopPoint['execute:wave:post'];
@@ -640,7 +640,7 @@ describe('F. Real registry execute:wave:post shape — guard against accidental
`ui.safety-gate onError must be 'halt'; got ${uiGate.onError}`);
});
test('[happy] real registry: execute:wave:post has exactly 2 steps (#3661 code-review ref.skill:code-review pointFrom:workflow.code_review_point onError:skip; #2856 live-dom-uat gsd-dom-verifier, onError:skip) and 2 contributions (external-job executor + mempalace capture-problems)', () => {
test('[happy] real registry: execute:wave:post has exactly 2 steps (#3661 code-review ref.skill:code-review pointFrom:workflow.code_review_point onError:skip; #2856 live-dom-uat msd-dom-verifier, onError:skip) and 2 contributions (external-job executor + mempalace capture-problems)', () => {
const point = realRegistry.byLoopPoint['execute:wave:post'];
assert.strictEqual(point.steps.length, 2,
`execute:wave:post must have exactly 2 steps; got ${point.steps.length}`);
@@ -659,8 +659,8 @@ describe('F. Real registry execute:wave:post shape — guard against accidental
`execute:wave:post code-review step onError must be 'skip'; got ${codeReviewStep.onError}`);
assert.strictEqual(domUatStep.capId, 'live-dom-uat',
`execute:wave:post step capId must be 'live-dom-uat'; got ${domUatStep.capId}`);
assert.deepStrictEqual(domUatStep.ref, { agent: 'gsd-dom-verifier' },
`execute:wave:post step ref must be { agent: 'gsd-dom-verifier' }; got ${JSON.stringify(domUatStep.ref)}`);
assert.deepStrictEqual(domUatStep.ref, { agent: 'msd-dom-verifier' },
`execute:wave:post step ref must be { agent: 'msd-dom-verifier' }; got ${JSON.stringify(domUatStep.ref)}`);
assert.strictEqual(domUatStep.onError, 'skip',
`execute:wave:post step onError must be 'skip'; got ${domUatStep.onError}`);
// #4740: claude-orchestration never contributed here (external-job +