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:
@@ -306,8 +306,8 @@ function loadDecisionExtraction(contextPath: string): { trackable: Decision[]; o
|
||||
* (#2492, #1365 fail-loud, #2770 empty-arg fail-closed).
|
||||
*
|
||||
* Invocation (the context path may be supplied EITHER way; #4130 follow-up):
|
||||
* gsd_run check decision-coverage-plan <phase-dir> <context-path> (positional, the workflow caller's form)
|
||||
* gsd_run check decision-coverage-plan --context <path> [<phase-dir>]
|
||||
* msd_run check decision-coverage-plan <phase-dir> <context-path> (positional, the workflow caller's form)
|
||||
* msd_run check decision-coverage-plan --context <path> [<phase-dir>]
|
||||
*
|
||||
* `--context <path>` follows the sibling flag convention (`check predicate`,
|
||||
* #2008): `--flag value` pairs parsed by the shared partitionPredicateArgs
|
||||
@@ -555,7 +555,7 @@ function cmdDecisionCoverageVerify(projectDir: string, args: string[], raw: bool
|
||||
* block = frontend && hasFrontendEvidence && !hasUiSpec (#3312: gate fires when
|
||||
* UI work is detected AND the repo has static frontend evidence but no spec exists)
|
||||
*
|
||||
* Invocable as: gsd_run check ui-plan-gate <phase>
|
||||
* Invocable as: msd_run check ui-plan-gate <phase>
|
||||
*
|
||||
* Uses checkUiPresence from ui-safety-gate.cjs — does NOT reimplement frontend detection.
|
||||
* Uses getRoadmapPhaseWithFallback + findPhaseInternal from leaf modules for phase data.
|
||||
@@ -705,8 +705,8 @@ function cmdUiPlanGate(projectDir: string, args: string[], raw: boolean): void {
|
||||
* block = frontend && hasUiFiles && !hasUiSpec
|
||||
*
|
||||
* Args: check ui-safety-gate <phase>
|
||||
* Invocable as: gsd_run check ui-safety-gate <phase>
|
||||
* or gsd_run check ui.safety-gate <phase> (dots normalized to hyphens)
|
||||
* Invocable as: msd_run check ui-safety-gate <phase>
|
||||
* or msd_run check ui.safety-gate <phase> (dots normalized to hyphens)
|
||||
*
|
||||
* Uses checkUiPresence from ui-safety-gate.cjs — does NOT reimplement frontend detection.
|
||||
* Checks whether any files changed in recent git history match frontend file patterns.
|
||||
@@ -809,7 +809,7 @@ function computeUiSafetyGate(projectDir: string, phase: string): {
|
||||
|
||||
if (block) {
|
||||
result.message = `UI files changed in this wave but no UI-SPEC.md exists for Phase ${phase}. ` +
|
||||
`Run /gsd:ui-phase ${phase} to generate the design contract before continuing.`;
|
||||
`Run /msd:ui-phase ${phase} to generate the design contract before continuing.`;
|
||||
}
|
||||
if (phaseLookupFailed) result.phaseLookupFailed = true;
|
||||
return result;
|
||||
@@ -831,7 +831,7 @@ function cmdUiSafetyGate(projectDir: string, args: string[], raw: boolean): void
|
||||
* tdd-review-checkpoint: end-of-phase advisory check that scans type:tdd plans
|
||||
* for RED/GREEN/REFACTOR gate-sequence compliance and surfaces a review table.
|
||||
*
|
||||
* Logic from gsd-core/references/tdd.md <end_of_phase_review> and
|
||||
* Logic from msd-core/references/tdd.md <end_of_phase_review> and
|
||||
* execute-phase.md <step name="tdd_review_checkpoint"> (now removed).
|
||||
*
|
||||
* Returns JSON:
|
||||
@@ -1116,7 +1116,7 @@ function resolvePhaseDirOrEmpty(projectDir: string, phase: string): string {
|
||||
* see verify-command-grounding.cjs for the recognizer contract.
|
||||
*
|
||||
* Args: check verify-command-paths <phase>
|
||||
* Invocable as: gsd_run check verify-command-paths <phase>
|
||||
* Invocable as: msd_run check verify-command-paths <phase>
|
||||
*
|
||||
* When the phase cannot be resolved to a directory, this emits a non-throwing
|
||||
* degraded JSON payload (status/commands/counts all zeroed, `readError`
|
||||
@@ -1169,7 +1169,7 @@ function cmdVerifyCommandPaths(projectDir: string, args: string[], raw: boolean)
|
||||
* direction — see verify-command-grounding.cjs for the recognizer contract.
|
||||
*
|
||||
* Args: check verify-failure-directions <phase>
|
||||
* Invocable as: gsd_run check verify-failure-directions <phase>
|
||||
* Invocable as: msd_run check verify-failure-directions <phase>
|
||||
*
|
||||
* When the phase cannot be resolved to a directory, this emits a non-throwing
|
||||
* degraded JSON payload (status/commands/counts all zeroed, `readError`
|
||||
@@ -1226,7 +1226,7 @@ function cmdVerifyFailureDirections(projectDir: string, args: string[], raw: boo
|
||||
* This gate is always advisory (passed: true) — it never blocks phase advancement.
|
||||
*
|
||||
* Args: check gap-analysis.plan-post <phase-dir> [phase-req-ids]
|
||||
* Invocable as: gsd_run check gap-analysis.plan-post <phase-dir> [phase-req-ids]
|
||||
* Invocable as: msd_run check gap-analysis.plan-post <phase-dir> [phase-req-ids]
|
||||
*/
|
||||
function cmdGapAnalysisPlanPost(projectDir: string, args: string[], raw: boolean): void {
|
||||
// args[0] = 'check', args[1] = 'gap-analysis-plan-post' (normalized), args[2] = phaseDir, args[3] = phaseReqIds
|
||||
@@ -1383,7 +1383,7 @@ function parsePredicateFlags(args: string[]): Record<string, string> {
|
||||
* routed per the gate's `onError`.
|
||||
*
|
||||
* Invocation:
|
||||
* gsd_run check predicate --predicate '<json>' \
|
||||
* msd_run check predicate --predicate '<json>' \
|
||||
* [--phase-dir <dir>] [--phase-number <n>] [--phase-req-ids <ids>] --raw
|
||||
*
|
||||
* The subprocess runs at the runtime project root (the `cwd` passed to this
|
||||
@@ -1472,7 +1472,7 @@ function cmdApiCoverageVerifyPre(projectDir: string, args: string[], raw: boolea
|
||||
// A token like ".." or "." carries no phase identity → unresolvable.
|
||||
if (token === '.' || token === '..') token = '';
|
||||
|
||||
// Not a GSD project (no phases tree at all) → fail-open: nothing to gate.
|
||||
// Not a MSD project (no phases tree at all) → fail-open: nothing to gate.
|
||||
if (!fs.existsSync(phasesRoot)) {
|
||||
output(
|
||||
{
|
||||
@@ -1480,7 +1480,7 @@ function cmdApiCoverageVerifyPre(projectDir: string, args: string[], raw: boolea
|
||||
passed: true,
|
||||
coverage_present: false,
|
||||
detected: false,
|
||||
message: 'api-coverage: no .planning/phases directory; gate skipped (not a GSD project layout)',
|
||||
message: 'api-coverage: no .planning/phases directory; gate skipped (not a MSD project layout)',
|
||||
},
|
||||
raw,
|
||||
undefined,
|
||||
@@ -1503,7 +1503,7 @@ function cmdApiCoverageVerifyPre(projectDir: string, args: string[], raw: boolea
|
||||
// The phases tree EXISTS but THIS phase could not be resolved. For a
|
||||
// BLOCKING gate, fail-closed: a missing phase dir must not silently bypass
|
||||
// the coverage requirement. (Distinguished from "no .planning at all"
|
||||
// above, which is a genuine non-GSD-project → pass.)
|
||||
// above, which is a genuine non-MSD-project → pass.)
|
||||
output(
|
||||
{
|
||||
block: true,
|
||||
@@ -1835,9 +1835,9 @@ function readPhaseScope(projectDir: string, phaseDir: string, phaseNumber: strin
|
||||
function routeCheckCommand({ args, cwd, raw }: RouteCheckCommandOptions): void {
|
||||
// Normalize dots to hyphens in the subcommand so both forms are accepted.
|
||||
// This makes `check.query = "ui.plan-gate"` (dotted form in capability.json gates)
|
||||
// directly runnable as `gsd_run check ui.plan-gate` — the dot is normalized to
|
||||
// directly runnable as `msd_run check ui.plan-gate` — the dot is normalized to
|
||||
// `ui-plan-gate` before routing. The generic gate-dispatch in §5.6 reads
|
||||
// `check.query` from the active gate hook and runs `gsd_run check ${hook.check.query}`,
|
||||
// `check.query` from the active gate hook and runs `msd_run check ${hook.check.query}`,
|
||||
// so the declared query must be dispatchable exactly as declared.
|
||||
const rawSubcommand = args[1];
|
||||
const subcommand = typeof rawSubcommand === 'string' ? rawSubcommand.replace(/\./g, '-') : rawSubcommand;
|
||||
@@ -1896,9 +1896,9 @@ function routeCheckCommand({ args, cwd, raw }: RouteCheckCommandOptions): void {
|
||||
if (subcommand === 'verify-schema-drift') {
|
||||
// Delegates to verify.schema-drift — drift capability gate at execute:wave:post (blocking).
|
||||
// Dot-to-hyphen normalization means query "verify.schema-drift" routes here.
|
||||
// Honor GSD_SKIP_SCHEMA_CHECK=true to bypass the gate (preserves the original inline gate behavior).
|
||||
// Honor MSD_SKIP_SCHEMA_CHECK=true to bypass the gate (preserves the original inline gate behavior).
|
||||
const phaseArg = typeof args[2] === 'string' ? args[2] : '';
|
||||
const skipSchemaCheck = process.env['GSD_SKIP_SCHEMA_CHECK'] === 'true';
|
||||
const skipSchemaCheck = process.env['MSD_SKIP_SCHEMA_CHECK'] === 'true';
|
||||
cmdVerifySchemaDrift(cwd, phaseArg, skipSchemaCheck, raw);
|
||||
return;
|
||||
}
|
||||
@@ -1930,7 +1930,7 @@ function routeCheckCommand({ args, cwd, raw }: RouteCheckCommandOptions): void {
|
||||
// The deterministic test-tier prohibition PRODUCER/gate (#1259, ADR-550 D5d). Locates the
|
||||
// wired mechanical check (node-test or lint-rule), confirms fail-first, runs it, builds
|
||||
// enforcementEvidence, and emits the dispositionForProhibition verdict. Invocable as
|
||||
// `gsd_run check prohibition-enforcement <request.json>`.
|
||||
// `msd_run check prohibition-enforcement <request.json>`.
|
||||
routeProhibitionEnforcement(args, raw);
|
||||
return;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user