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

@@ -32,7 +32,7 @@
* `hasNameableContent(`.
*
* - shell phase-number-arithmetic ban: `$((10#...))` base-10-forced arithmetic
* inside `gsd-core/workflows/**\/*.md` and `gsd-core/references/**\/*.md` breaks
* inside `msd-core/workflows/**\/*.md` and `msd-core/references/**\/*.md` breaks
* on decimal or multi-segment phase ids and is banned outright. This scan runs
* over markdown, not `.cts` source, so its sanction is an HTML comment on the
* nearest preceding non-blank line: `<!-- phase-id-owner: <reason> -->`.
@@ -40,7 +40,7 @@
* - branch-slug fallback drift: a `.replace('{slug}', ... || 'phase')` call
* silently substitutes the literal string `'phase'` when a phase's slug
* can't be derived, producing a non-identifying branch name like
* `gsd/phase-08-phase` (#4126, now fixed via the shared renderPhaseBranchName
* `msd/phase-08-phase` (#4126, now fixed via the shared renderPhaseBranchName
* owner in phase-id.cts, consumed by both prior call sites). Sanctioned
* the same way as the token/bracket/name-validity rules (`// phase-id-owner:`
* on the nearest preceding non-blank line), with a line-level escape for a
@@ -198,7 +198,7 @@ function findNameValidityDrift(text) {
// #4634: the branch-slug fallback anti-pattern (#4126) — a
// `.replace('{slug}', ... || 'phase')` call silently falls back to the
// literal string `'phase'` when a phase's slug can't be derived, producing a
// non-identifying branch name like `gsd/phase-08-phase`. Now fixed at both
// non-identifying branch name like `msd/phase-08-phase`. Now fixed at both
// prior call sites (commands.cts, init.cts) via the shared
// `renderPhaseBranchName` owner in phase-id.cts; this rule is the ratchet
// against a THIRD site reintroducing the inline fallback. Deliberately
@@ -295,16 +295,16 @@ function findShellPhaseArithDrift(text) {
}
// #4634: the markdown scan roots — shell embedded in workflow/reference docs.
const MD_SCAN_DIRS = [path.join('gsd-core', 'workflows'), path.join('gsd-core', 'references')];
const MD_SCAN_DIRS = [path.join('msd-core', 'workflows'), path.join('msd-core', 'references')];
// #4568 (epic #4634): the single-segment phase regex ban scans a THIRD root,
// `agents/**/*.md`, that the #4619 shell-arithmetic extension above never
// touched — the gsd-code-fixer agent prompts re-derive the phase-number
// touched — the msd-code-fixer agent prompts re-derive the phase-number
// grammar too. Reuses the same `walkMd` walker as the shell-arith scan.
const SINGLE_SEGMENT_SCAN_DIRS = [...MD_SCAN_DIRS, 'agents'];
/**
* Scan `gsd-core/workflows/**\/*.md` and `gsd-core/references/**\/*.md` for
* Scan `msd-core/workflows/**\/*.md` and `msd-core/references/**\/*.md` for
* unsanctioned `$((10#...))` shell arithmetic. Returns [{ file, line, found }]
* with repo-relative paths.
*/
@@ -369,7 +369,7 @@ function findSingleSegmentPhaseRegexDrift(text) {
}
/**
* Scan `gsd-core/workflows/**\/*.md`, `gsd-core/references/**\/*.md`, and
* Scan `msd-core/workflows/**\/*.md`, `msd-core/references/**\/*.md`, and
* `agents/**\/*.md` for unsanctioned single-optional-dotted-segment phase
* regexes. Returns [{ file, line, found }] with repo-relative paths.
*/
@@ -561,7 +561,7 @@ function findShellPhasePrintfPadDrift(text) {
}
/**
* Scan the shell roots (`gsd-core/workflows/**\/*.md`, `gsd-core/references/**\/*.md`)
* Scan the shell roots (`msd-core/workflows/**\/*.md`, `msd-core/references/**\/*.md`)
* for the two shell-idiom rules (a, c) and the three regex roots (those plus
* `agents/**\/*.md`) for the extraction-shape rule (b). Returns
* [{ file, kind, line, found }] with repo-relative paths.
@@ -764,11 +764,11 @@ function main() {
process.stderr.write('the name-validity predicate — or sanction the site with a dedicated\n');
process.stderr.write('`// phase-id-owner: <reason>` comment on the line directly above the regex.\n');
process.stderr.write('`$((10#...))` base-10-forced shell arithmetic is banned outright in\n');
process.stderr.write('gsd-core/workflows/**/*.md and gsd-core/references/**/*.md — sanction with\n');
process.stderr.write('msd-core/workflows/**/*.md and msd-core/references/**/*.md — sanction with\n');
process.stderr.write('`<!-- phase-id-owner: <reason> -->` on the line directly above.\n');
process.stderr.write('The single-optional-dotted-segment phase regex `[0-9]+(\\.[0-9]+)?` (or its \\d\n');
process.stderr.write('near-variant) is banned outright in gsd-core/workflows/**/*.md,\n');
process.stderr.write('gsd-core/references/**/*.md, and agents/**/*.md — widen it to `*` (unbounded\n');
process.stderr.write('near-variant) is banned outright in msd-core/workflows/**/*.md,\n');
process.stderr.write('msd-core/references/**/*.md, and agents/**/*.md — widen it to `*` (unbounded\n');
process.stderr.write('segments) or sanction with `<!-- phase-id-owner: <reason> -->`.\n');
process.stderr.write('A digit-only unbounded-segment phase regex `[0-9]+(\\.[0-9]+)*` on the same roots\n');
process.stderr.write('is missing the canonical letter axis (#4660) — widen to `[0-9]+[A-Z]?(\\.[0-9]+)*`\n');