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:
@@ -20,7 +20,7 @@
|
||||
* "has_work": "true"|"false",
|
||||
* "matrix": {
|
||||
* "include": [
|
||||
* { "name": "<module>", "mutate": "gsd-core/bin/lib/<module>.cjs", "tests": "<space-joined test files>" },
|
||||
* { "name": "<module>", "mutate": "msd-core/bin/lib/<module>.cjs", "tests": "<space-joined test files>" },
|
||||
* ...
|
||||
* ]
|
||||
* }
|
||||
@@ -123,7 +123,7 @@ const TARGET_MUTATION_SCORE = 80;
|
||||
// exists on disk.
|
||||
//
|
||||
// SIGNAL: a test file that directly `require()`s a covered module's built
|
||||
// artifact (`gsd-core/bin/lib/<name>.cjs`) is declaring, by that require, that
|
||||
// artifact (`msd-core/bin/lib/<name>.cjs`) is declaring, by that require, that
|
||||
// it constrains that module. That signal alone is far too broad to feed a
|
||||
// per-mutant re-run budget: measured directly (no filter) against this tree,
|
||||
// config-schema alone picks up 22 files most of this repo's spawn-heavy
|
||||
@@ -136,7 +136,7 @@ const TARGET_MUTATION_SCORE = 80;
|
||||
//
|
||||
// NARROWING RULE: a file is auto-derived into a module's shard only when BOTH
|
||||
// hold:
|
||||
// 1. it directly requires that module's `gsd-core/bin/lib/<name>.cjs`, and
|
||||
// 1. it directly requires that module's `msd-core/bin/lib/<name>.cjs`, and
|
||||
// 2. its own filename starts with the module's name followed by `.` or `-`
|
||||
// (i.e. `<name>.test.cjs`, `<name>.unit.test.cjs`, `<name>.property.test.cjs`,
|
||||
// `<name>-anything.test.cjs`) — the file DECLARES itself, by its own name,
|
||||
@@ -177,8 +177,8 @@ let _testRequireCache = null;
|
||||
|
||||
/**
|
||||
* Scan every `tests/*.test.cjs` file once and cache, per covered module name,
|
||||
* which files directly `require('gsd-core/bin/lib/<name>.cjs')` (or a relative
|
||||
* equivalent — `../gsd-core/bin/lib/<name>` etc. — the require path always
|
||||
* which files directly `require('msd-core/bin/lib/<name>.cjs')` (or a relative
|
||||
* equivalent — `../msd-core/bin/lib/<name>` etc. — the require path always
|
||||
* ends in the literal segment matched below). Pure w.r.t. process lifetime;
|
||||
* the tests/ directory does not change while this process runs.
|
||||
*
|
||||
@@ -186,7 +186,7 @@ let _testRequireCache = null;
|
||||
*/
|
||||
function scanTestRequires() {
|
||||
if (_testRequireCache) return _testRequireCache;
|
||||
const REQUIRE_RE = /require\(\s*['"](?:[./]*)?gsd-core\/bin\/lib\/([a-zA-Z0-9_-]+)(?:\.cjs)?['"]\s*\)/g;
|
||||
const REQUIRE_RE = /require\(\s*['"](?:[./]*)?msd-core\/bin\/lib\/([a-zA-Z0-9_-]+)(?:\.cjs)?['"]\s*\)/g;
|
||||
const cache = new Map();
|
||||
let entries;
|
||||
try {
|
||||
@@ -315,7 +315,7 @@ function computeModuleTests(moduleName, entry) {
|
||||
// local run without CI cross-check.
|
||||
const COVERED = {
|
||||
'context-utilization': {
|
||||
cjs: 'gsd-core/bin/lib/context-utilization.cjs',
|
||||
cjs: 'msd-core/bin/lib/context-utilization.cjs',
|
||||
// Derived: context-utilization.property.test.cjs (pre-existing) +
|
||||
// context-utilization.test.cjs (piece-2 derivation find: it directly requires and
|
||||
// matches the naming rule, but was never hand-added to the old literal list —
|
||||
@@ -339,7 +339,7 @@ const COVERED = {
|
||||
// — both genuinely constrain context-composer.cjs (the ladder was relocated INTO it), so
|
||||
// both are declared via extraTests rather than silently missing from the derivation.
|
||||
'context-composer': {
|
||||
cjs: 'gsd-core/bin/lib/context-composer.cjs',
|
||||
cjs: 'msd-core/bin/lib/context-composer.cjs',
|
||||
extraTests: [
|
||||
'prompt-budget-parity.test.cjs',
|
||||
'prompt-budget.unit.test.cjs',
|
||||
@@ -349,7 +349,7 @@ const COVERED = {
|
||||
minScore: 78,
|
||||
},
|
||||
'prompt-budget': {
|
||||
cjs: 'gsd-core/bin/lib/prompt-budget.cjs',
|
||||
cjs: 'msd-core/bin/lib/prompt-budget.cjs',
|
||||
// Derived: property + unit (pre-existing) plus two piece-2 derivation finds that
|
||||
// directly require prompt-budget.cjs and match the naming rule but were never in the
|
||||
// old hand list — prompt-budget-parity.test.cjs and prompt-budget.test.cjs. Measured
|
||||
@@ -364,7 +364,7 @@ const COVERED = {
|
||||
minScore: 87,
|
||||
},
|
||||
frontmatter: {
|
||||
cjs: 'gsd-core/bin/lib/frontmatter.cjs',
|
||||
cjs: 'msd-core/bin/lib/frontmatter.cjs',
|
||||
// extraTests: files that genuinely constrain frontmatter.cjs but do not match the
|
||||
// "frontmatter*" naming rule, so the derivation cannot find them on its own —
|
||||
// each earns its slot on evidence, not blanket inclusion (verified no two duplicate
|
||||
@@ -384,7 +384,7 @@ const COVERED = {
|
||||
// excludeTests: files the derivation WOULD auto-include (require frontmatter.cjs
|
||||
// directly AND match the "frontmatter*" naming rule) but are deliberately withheld:
|
||||
// - frontmatter-cli.test.cjs: 778-line CLI-integration file, 39 subprocess-spawn
|
||||
// references (spawnSync/execFileSync/runGsdTools) — the same #2790
|
||||
// references (spawnSync/execFileSync/runMsdTools) — the same #2790
|
||||
// planning-inspect.test.cjs shape (a `node --test <file>` invocation Stryker's
|
||||
// command runner re-runs whole, once per mutant, at whatever its slowest spawn
|
||||
// case costs). Never measured in a shard; excluded up front on the same evidence
|
||||
@@ -396,7 +396,7 @@ const COVERED = {
|
||||
// for #3881) projected to ~96 of the shard's 140-minute total. Its two
|
||||
// genuinely-unique assertion classes — anchor-alias-bomb refusal (billion-laughs
|
||||
// -style anchor/alias expansion must be rejected, not expanded) and the B1/B2
|
||||
// block-scalar assertions (parsing commands/gsd/add-tests.md must not invent a
|
||||
// block-scalar assertions (parsing commands/msd/add-tests.md must not invent a
|
||||
// phantom "Example" key) — were relocated verbatim into
|
||||
// feat-3881-yaml-parser-consequences.test.cjs (already in this shard via
|
||||
// extraTests above) rather than deleted, so the mutants they kill stay killed.
|
||||
@@ -437,11 +437,11 @@ const COVERED = {
|
||||
// (e.g. graphify-auto-update.slow.test.cjs) that merely load config-schema as a fixture
|
||||
// dependency of something else under test.
|
||||
'adr-parser': {
|
||||
cjs: 'gsd-core/bin/lib/adr-parser.cjs',
|
||||
cjs: 'msd-core/bin/lib/adr-parser.cjs',
|
||||
minScore: 68,
|
||||
},
|
||||
'config-schema': {
|
||||
cjs: 'gsd-core/bin/lib/config-schema.cjs',
|
||||
cjs: 'msd-core/bin/lib/config-schema.cjs',
|
||||
// CI 54.55% timeout-free (18 killed / 0 timeout / 33 total) 2026-06-14;
|
||||
// local was 69.7% — timeout inflation. Floor = 54 - 2 margin.
|
||||
// CI run 33012034388 (2026-08-25, #3881 ratchet): measured 75.51%. Floor =
|
||||
@@ -449,13 +449,13 @@ const COVERED = {
|
||||
minScore: 74,
|
||||
},
|
||||
'active-workstream-store': {
|
||||
cjs: 'gsd-core/bin/lib/active-workstream-store.cjs',
|
||||
cjs: 'msd-core/bin/lib/active-workstream-store.cjs',
|
||||
// CI run 33012034388 (2026-08-25, #3881 ratchet): measured 87.42%. Floor =
|
||||
// floor(87.42) - 1 = 86.
|
||||
minScore: 86,
|
||||
},
|
||||
'core-utils': {
|
||||
cjs: 'gsd-core/bin/lib/core-utils.cjs',
|
||||
cjs: 'msd-core/bin/lib/core-utils.cjs',
|
||||
minScore: 75, // measured 77.52% (2026-06-14, issue #1187); floor = 77 - 2
|
||||
},
|
||||
// planning-inspect / plan-document / planning-command-router: net-new modules
|
||||
@@ -467,7 +467,7 @@ const COVERED = {
|
||||
// integration file were CANCELLED at the workflow's 15-minute cap —
|
||||
// "Mutation testing 4% (elapsed: ~3m, remaining: ~1h 19m) 27/640 tested".
|
||||
// tests/planning-inspect.test.cjs is INTEGRATION-shaped (91 cases, most
|
||||
// spawning a `gsd-tools` child process via `runGsdTools`); Stryker's command
|
||||
// spawning a `msd-tools` child process via `runMsdTools`); Stryker's command
|
||||
// runner treats the whole `node --test <file>` invocation as ONE test costing
|
||||
// whatever the slowest case costs (measured ~20s), and re-runs that entire
|
||||
// file once per mutant — 640 mutants x 20s cannot finish in 15 minutes.
|
||||
@@ -492,7 +492,7 @@ const COVERED = {
|
||||
// All three shards point at tests/planning-inspect.unit.test.cjs (in-process,
|
||||
// spawn-free, ~0.3s dry run), not tests/planning-inspect.test.cjs — that is
|
||||
// what made measurement possible at all. The integration file spawns a
|
||||
// subprocess per case via runGsdTools; Stryker's command runner treats the
|
||||
// subprocess per case via runMsdTools; Stryker's command runner treats the
|
||||
// whole `node --test <file>` invocation as one test costing whatever the
|
||||
// slowest case costs (measured ~20s), and re-runs that entire file once per
|
||||
// mutant, so 640 mutants x 20s could not finish inside the 15-minute shard
|
||||
@@ -505,7 +505,7 @@ const COVERED = {
|
||||
// otherwise auto-include it and reproduce the exact 15-minute-cap cancellation the
|
||||
// comment above documents.
|
||||
'planning-inspect': {
|
||||
cjs: 'gsd-core/bin/lib/planning-inspect.cjs',
|
||||
cjs: 'msd-core/bin/lib/planning-inspect.cjs',
|
||||
excludeTests: ['planning-inspect.test.cjs'],
|
||||
minScore: 56,
|
||||
},
|
||||
@@ -514,12 +514,12 @@ const COVERED = {
|
||||
// #2790 extracted them alongside), so the naming-rule derivation finds nothing — same
|
||||
// cross-cutting shape as context-composer above. Declared via extraTests.
|
||||
'plan-document': {
|
||||
cjs: 'gsd-core/bin/lib/plan-document.cjs',
|
||||
cjs: 'msd-core/bin/lib/plan-document.cjs',
|
||||
extraTests: ['planning-inspect.unit.test.cjs'],
|
||||
minScore: 75,
|
||||
},
|
||||
'planning-command-router': {
|
||||
cjs: 'gsd-core/bin/lib/planning-command-router.cjs',
|
||||
cjs: 'msd-core/bin/lib/planning-command-router.cjs',
|
||||
extraTests: ['planning-inspect.unit.test.cjs'],
|
||||
minScore: 94,
|
||||
},
|
||||
@@ -531,7 +531,7 @@ const COVERED = {
|
||||
//
|
||||
// Same #2790 precedent as planning-inspect above: this shard points at a
|
||||
// dedicated tests/model-catalog.unit.test.cjs, NOT tests/model-resolver.test.cjs
|
||||
// — that integration file uses runGsdTools heavily and would hit the same
|
||||
// — that integration file uses runMsdTools heavily and would hit the same
|
||||
// 15-minute shard-cap cancellation #2790 documented (a `node --test <file>`
|
||||
// invocation is ONE test costing whatever its slowest case costs, re-run
|
||||
// per mutant). tests/model-catalog.unit.test.cjs is spawn-free, in-process,
|
||||
@@ -573,7 +573,7 @@ const COVERED = {
|
||||
// The floor MUST come from a CI shard, never a local run — same rule as every other
|
||||
// entry in this file.
|
||||
'model-catalog': {
|
||||
cjs: 'gsd-core/bin/lib/model-catalog.cjs',
|
||||
cjs: 'msd-core/bin/lib/model-catalog.cjs',
|
||||
minScore: 74,
|
||||
},
|
||||
// state-contract: net-new module from #3227. Without this entry the
|
||||
@@ -583,8 +583,8 @@ const COVERED = {
|
||||
//
|
||||
// Same #2790 precedent as planning-inspect / model-catalog above: this
|
||||
// shard points at tests/state-contract.unit.test.cjs, NOT
|
||||
// tests/state-contract.test.cjs — the latter spawns a `gsd-tools` child
|
||||
// process per case via runGsdTools, and Stryker's command runner treats
|
||||
// tests/state-contract.test.cjs — the latter spawns a `msd-tools` child
|
||||
// process per case via runMsdTools, and Stryker's command runner treats
|
||||
// the whole `node --test <file>` invocation as ONE test costing whatever
|
||||
// its slowest case costs, re-run once per mutant, so it cannot finish
|
||||
// inside the 15-minute shard cap. tests/state-contract.unit.test.cjs is
|
||||
@@ -608,7 +608,7 @@ const COVERED = {
|
||||
// but is the same spawn-heavy integration shape as planning-inspect.test.cjs (446 lines,
|
||||
// 16 subprocess-spawn references) — excluded explicitly rather than left to fall through.
|
||||
'state-contract': {
|
||||
cjs: 'gsd-core/bin/lib/state-contract.cjs',
|
||||
cjs: 'msd-core/bin/lib/state-contract.cjs',
|
||||
excludeTests: ['state-contract.test.cjs'],
|
||||
minScore: 65,
|
||||
},
|
||||
|
||||
Reference in New Issue
Block a user