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,7 +3,7 @@
/**
* Behavioral tests for markdown-table.cjs
*
* Module: gsd-core/bin/lib/markdown-table.cjs
* Module: msd-core/bin/lib/markdown-table.cjs
* Exports: parseMarkdownTable, matchTableSchema, TABLE_SCHEMAS
*
* Covers:
@@ -24,7 +24,7 @@ const path = require('node:path');
const fc = require('./helpers/fast-check-setup.cjs');
const {
migrateQuickTasksTable, parseMarkdownTable, matchTableSchema, TABLE_SCHEMAS, appendQuickTaskRow, findTableBySchema, findTableWithColumns, updateTableCell, deleteTableRow, resetQuickTaskRows, QUICK_TASKS_SECTION_ABSENT } = require('../gsd-core/bin/lib/markdown-table.cjs');
migrateQuickTasksTable, parseMarkdownTable, matchTableSchema, TABLE_SCHEMAS, appendQuickTaskRow, findTableBySchema, findTableWithColumns, updateTableCell, deleteTableRow, resetQuickTaskRows, QUICK_TASKS_SECTION_ABSENT } = require('../msd-core/bin/lib/markdown-table.cjs');
const { buildHeader, normalize } = require('../scripts/lint-table-schema-drift.cjs');
const ROOT = path.join(__dirname, '..');
@@ -464,7 +464,7 @@ describe('appendQuickTaskRow (#2133)', () => {
// ─── quick-tasks-append: canonical row + no forced progress re-derive (#3356) ──
//
// #3356 named two independent, silent (exit 0, ok:true) defects in
// `routeQuickTasksAppend` (gsd-core/bin/gsd-tools.cjs): (1) the emitted `#`
// `routeQuickTasksAppend` (msd-core/bin/msd-tools.cjs): (1) the emitted `#`
// cell was hardcoded to a positional ordinal and `Directory` hardcoded to
// `'—'`, so the row could never match the canonical row `workflows/
// quick.md`'s Step 7c documents even though quick.md:635 (pre-fix :617)
@@ -479,7 +479,7 @@ describe('appendQuickTaskRow (#2133)', () => {
// `routeQuickTasksAppend` now (a) accepts `--quick-id`/`--slug`/`--directory`
// to render the canonical row, and (b) passes `{ resync: false }`. Per
// ADR-3180 Decision 4(b) / epic #3473 B7, the two CLI-level tests below drive
// the real `gsd-tools quick-tasks-append` subcommand and assert on ITS
// the real `msd-tools quick-tasks-append` subcommand and assert on ITS
// emitted output / the STATE.md it writes — not on `appendQuickTaskRow`'s
// return value alone, which a helper-only test would leave unproven at the
// consumer boundary.
@@ -524,7 +524,7 @@ describe('appendQuickTaskRow quickId widening (#3356 defect 1, unit)', () => {
});
describe('CLI: quick-tasks-append (#3356)', () => {
const { createTempProject, cleanup, runGsdTools } = require('./helpers.cjs');
const { createTempProject, cleanup, runMsdTools } = require('./helpers.cjs');
/** Minimal STATE.md with a Quick Tasks table and a curated progress block. */
function writeState(tmpDir, totalPhases) {
@@ -554,7 +554,7 @@ describe('CLI: quick-tasks-append (#3356)', () => {
t.after(() => cleanup(tmpDir));
writeState(tmpDir, 25);
const r = runGsdTools(
const r = runMsdTools(
['quick-tasks-append', '--task', 'Fix thing', '--quick-id', '260811-gfl', '--slug', 'fix-thing'],
tmpDir,
);
@@ -576,7 +576,7 @@ describe('CLI: quick-tasks-append (#3356)', () => {
t.after(() => cleanup(tmpDir));
writeState(tmpDir, 25);
const r = runGsdTools(['quick-tasks-append', '--task', 'Fix thing'], tmpDir);
const r = runMsdTools(['quick-tasks-append', '--task', 'Fix thing'], tmpDir);
assert.ok(r.success, `quick-tasks-append should succeed: ${r.error}`);
const out = JSON.parse(r.output);
assert.ok(/^\| 1 \| Fix thing \| .* \| — \|$/.test(out.row), `expected the ordinal + em-dash fallback, got: ${out.row}`);
@@ -594,7 +594,7 @@ describe('CLI: quick-tasks-append (#3356)', () => {
fs.writeFileSync(path.join(tmpDir, '.planning', 'ROADMAP.md'), '# Roadmap\n\n## Phase 1: Alpha\n## Phase 2: Beta\n');
writeState(tmpDir, 25);
const r = runGsdTools(['quick-tasks-append', '--task', 'Fix thing'], tmpDir);
const r = runMsdTools(['quick-tasks-append', '--task', 'Fix thing'], tmpDir);
assert.ok(r.success, `quick-tasks-append should succeed: ${r.error}`);
const stateContent = fs.readFileSync(path.join(tmpDir, '.planning', 'STATE.md'), 'utf8');
@@ -1112,27 +1112,27 @@ describe('TABLE_SCHEMAS parity: registry headers must appear verbatim in their s
);
}
test('RoadmapProgress variants appear in gsd-core/templates/roadmap.md', () => {
test('RoadmapProgress variants appear in msd-core/templates/roadmap.md', () => {
for (const variant of TABLE_SCHEMAS.RoadmapProgress) {
assertHeaderInFile('gsd-core/templates/roadmap.md', variant);
assertHeaderInFile('msd-core/templates/roadmap.md', variant);
}
});
test('RequirementsTraceability variant appears in gsd-core/templates/requirements.md', () => {
test('RequirementsTraceability variant appears in msd-core/templates/requirements.md', () => {
for (const variant of TABLE_SCHEMAS.RequirementsTraceability) {
assertHeaderInFile('gsd-core/templates/requirements.md', variant);
assertHeaderInFile('msd-core/templates/requirements.md', variant);
}
});
test('QuickTasks variants appear in gsd-core/workflows/quick.md', () => {
test('QuickTasks variants appear in msd-core/workflows/quick.md', () => {
for (const variant of TABLE_SCHEMAS.QuickTasks) {
assertHeaderInFile('gsd-core/workflows/quick.md', variant);
assertHeaderInFile('msd-core/workflows/quick.md', variant);
}
});
test('Security variants appear in gsd-core/templates/SECURITY.md', () => {
test('Security variants appear in msd-core/templates/SECURITY.md', () => {
for (const variant of TABLE_SCHEMAS.Security) {
assertHeaderInFile('gsd-core/templates/SECURITY.md', variant);
assertHeaderInFile('msd-core/templates/SECURITY.md', variant);
}
});
});
@@ -1613,12 +1613,12 @@ describe('migrateQuickTasksTable (#3730 option b)', () => {
});
describe('quick-tasks-migrate CLI and workflow wiring (#3730)', () => {
const { createTempProject, cleanup, runGsdTools } = require('./helpers.cjs');
const { createTempProject, cleanup, runMsdTools } = require('./helpers.cjs');
const fs = require('node:fs');
const path = require('node:path');
test('quick-tasks-migrate CLI round-trip', (t) => {
const tmpDir = createTempProject('gsd-3730-cli-');
const tmpDir = createTempProject('msd-3730-cli-');
t.after(() => cleanup(tmpDir));
const statePath = path.join(tmpDir, '.planning', 'STATE.md');
fs.writeFileSync(statePath, [
@@ -1628,7 +1628,7 @@ describe('quick-tasks-migrate CLI and workflow wiring (#3730)', () => {
'| 2026-04-17 | 260417-abc | bootstrap | roles/x |',
].join('\n'));
const first = runGsdTools('quick-tasks-migrate', tmpDir);
const first = runMsdTools('quick-tasks-migrate', tmpDir);
assert.equal(first.success, true, `migrate failed: ${first.error}`);
const firstOut = JSON.parse(first.output);
assert.equal(firstOut.migrated, true);
@@ -1636,18 +1636,18 @@ describe('quick-tasks-migrate CLI and workflow wiring (#3730)', () => {
assert.ok(fs.readFileSync(statePath, 'utf8').includes('| # | Description | Date | Commit | Status | Directory |'),
'STATE.md rewritten to canonical');
const second = runGsdTools('quick-tasks-migrate', tmpDir);
const second = runMsdTools('quick-tasks-migrate', tmpDir);
assert.equal(second.success, true, `second migrate failed: ${second.error}`);
assert.equal(JSON.parse(second.output).migrated, false, 'a canonical table is a no-op');
});
test('quick and fast run the migration check first', () => {
const fast = fs.readFileSync(path.join(__dirname, '..', 'gsd-core', 'workflows', 'fast.md'), 'utf8');
const quick = fs.readFileSync(path.join(__dirname, '..', 'gsd-core', 'workflows', 'quick.md'), 'utf8');
const fast = fs.readFileSync(path.join(__dirname, '..', 'msd-core', 'workflows', 'fast.md'), 'utf8');
const quick = fs.readFileSync(path.join(__dirname, '..', 'msd-core', 'workflows', 'quick.md'), 'utf8');
// Compare the INVOCATIONS, not first prose mentions — fast.md's prose
// names the append helper (~line 77) before the bash block that runs both.
const fastMigrate = fast.indexOf('gsd_run quick-tasks-migrate');
const fastAppend = fast.indexOf('gsd_run quick-tasks-append');
const fastMigrate = fast.indexOf('msd_run quick-tasks-migrate');
const fastAppend = fast.indexOf('msd_run quick-tasks-append');
assert.ok(fastMigrate !== -1, 'fast.md invokes quick-tasks-migrate');
assert.ok(fastAppend !== -1 && fastMigrate < fastAppend, 'the migration runs BEFORE the append');
assert.ok(quick.includes('quick-tasks-migrate'),