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

@@ -4,8 +4,8 @@
* Failing-first tests for #3777 (opt-in concurrent per-plan planners in
* chunked mode).
*
* Design: .gsd/phase/feat-3777-chunked-parallel-planners/40-design.md
* Test matrix: .gsd/phase/feat-3777-chunked-parallel-planners/50-test-matrix.md
* Design: .msd/phase/feat-3777-chunked-parallel-planners/40-design.md
* Test matrix: .msd/phase/feat-3777-chunked-parallel-planners/50-test-matrix.md
*
* Two real, shipped bash blocks are extracted and EXECUTED (never re-typed), both from
* chunked-planning-mode.md:
@@ -26,17 +26,17 @@ const {
createTempProject,
cleanup,
readFileNormalized,
runGsdTools,
runMsdTools,
} = require('./helpers.cjs');
const { runHook } = require('./helpers/process-seam.cjs');
const { HOOK_FANOUT_TIMEOUT_MS } = require('./helpers/timeouts.cjs');
const { scanFencedBlocks } = require('../gsd-core/bin/lib/markdown-sectionizer.cjs');
const { scanFencedBlocks } = require('../msd-core/bin/lib/markdown-sectionizer.cjs');
const REPO_ROOT = path.join(__dirname, '..');
const CHUNKED_MODE_MD_PATH = path.join(
REPO_ROOT, 'gsd-core', 'workflows', 'plan-phase', 'steps', 'chunked-planning-mode.md',
REPO_ROOT, 'msd-core', 'workflows', 'plan-phase', 'steps', 'chunked-planning-mode.md',
);
const RUNTIME_LAUNCHER_SNIPPET_PATH = path.join(REPO_ROOT, 'gsd-core', 'workflows', '_runtime-launcher.snippet.sh');
const RUNTIME_LAUNCHER_SNIPPET_PATH = path.join(REPO_ROOT, 'msd-core', 'workflows', '_runtime-launcher.snippet.sh');
// ─── extraction (source-text-is-the-product) ──────────────────────────────
@@ -58,7 +58,7 @@ function extractBashFenceContaining(content, mustInclude, label, filePath) {
* CHUNKED_PARALLEL resolution fence in production (tests/runtime-launcher-parity.test.cjs
* owns verifying its placement/uniqueness). Strip it here so this suite tests
* only the resolution logic it's actually about, not the preamble's own
* gsd_run-shim-resolution behavior (which would stomp this file's `gsd_run`
* msd_run-shim-resolution behavior (which would stomp this file's `msd_run`
* stub — see #3777 investigation).
*/
function stripRuntimeLauncherPreamble(block) {
@@ -93,18 +93,18 @@ function extractBatchPlanIdsDedup() {
// ─── runners ────────────────────────────────────────────────────────────────
/**
* Runs the real extracted CHUNKED_PARALLEL resolution block with a `gsd_run`
* Runs the real extracted CHUNKED_PARALLEL resolution block with a `msd_run`
* stub spliced in front of it. Returns the resolved `CHUNKED_PARALLEL` value
* as a string ("true"/"false"), exactly as production code reads it.
*/
function runChunkedParallelResolution(t, opts) {
const scriptDir = createTempDir('gsd-3777-script-');
const scriptDir = createTempDir('msd-3777-script-');
t.after(() => cleanup(scriptDir));
const block = extractChunkedParallelResolution();
const stub = [
'gsd_run() {',
'msd_run() {',
' if [ "$1" = "query" ] && [ "$2" = "config-get" ] && [ "$3" = "planning.chunked_parallel" ]; then',
' if [ "$STUB_CONFIG_GET_FAILS" = "1" ]; then',
' return 1',
@@ -165,7 +165,7 @@ function runChunkedParallelResolution(t, opts) {
* orchestrator populates it from outline rows).
*/
function runBatchDedup(t, waveIds) {
const scriptDir = createTempDir('gsd-3777-dedup-script-');
const scriptDir = createTempDir('msd-3777-dedup-script-');
t.after(() => cleanup(scriptDir));
const block = extractBatchPlanIdsDedup();
@@ -303,7 +303,7 @@ describe('#3777 planning.chunked_parallel config key', () => {
const tmpDir = createTempProject();
t.after(() => cleanup(tmpDir));
const setResult = runGsdTools('config-set planning.chunked_parallel true', tmpDir);
const setResult = runMsdTools('config-set planning.chunked_parallel true', tmpDir);
assert.ok(setResult.success, `config-set failed: ${setResult.error}`);
const configPath = path.join(tmpDir, '.planning', 'config.json');
@@ -311,7 +311,7 @@ describe('#3777 planning.chunked_parallel config key', () => {
assert.equal(config.planning?.chunked_parallel, true);
assert.equal(typeof config.planning?.chunked_parallel, 'boolean');
const getResult = runGsdTools('config-get planning.chunked_parallel --raw', tmpDir);
const getResult = runMsdTools('config-get planning.chunked_parallel --raw', tmpDir);
assert.ok(getResult.success, `config-get failed: ${getResult.error}`);
assert.equal((getResult.output || '').trim(), 'true');
});
@@ -320,7 +320,7 @@ describe('#3777 planning.chunked_parallel config key', () => {
const tmpDir = createTempProject();
t.after(() => cleanup(tmpDir));
const setResult = runGsdTools('config-set planning.chunked_parallel false', tmpDir);
const setResult = runMsdTools('config-set planning.chunked_parallel false', tmpDir);
assert.ok(setResult.success, `config-set failed: ${setResult.error}`);
const configPath = path.join(tmpDir, '.planning', 'config.json');
@@ -336,7 +336,7 @@ describe('#3777 planning.chunked_parallel config key', () => {
// Extra "l" — proves the whitelist is load-bearing and the two tests
// above are not vacuous (they'd pass even for an unregistered key if
// config-set accepted anything).
const result = runGsdTools('config-set planning.chunked_parallell true', tmpDir);
const result = runMsdTools('config-set planning.chunked_parallell true', tmpDir);
assert.equal(result.success, false, 'an unregistered near-miss key must be rejected');
});
});