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

@@ -15,7 +15,7 @@ const fs = require('fs');
const os = require('os');
const path = require('path');
const { findProjectRoot } = require('../gsd-core/bin/lib/project-root.cjs');
const { findProjectRoot } = require('../msd-core/bin/lib/project-root.cjs');
const { cleanup } = require('./helpers.cjs');
// ─── helpers ────────────────────────────────────────────────────────────────
@@ -36,7 +36,7 @@ describe('findProjectRoot nearest-.planning resolution (#1414)', () => {
let savedUserProfile;
beforeEach(() => {
tmpDir = fs.mkdtempSync(path.join(os.tmpdir(), 'gsd-pr-test-'));
tmpDir = fs.mkdtempSync(path.join(os.tmpdir(), 'msd-pr-test-'));
savedHome = process.env.HOME;
savedUserProfile = process.env.USERPROFILE;
});
@@ -156,7 +156,7 @@ describe('findProjectRoot nearest-.planning resolution (#1414)', () => {
// .planning/ ← child has its own .planning/ but NO .git (the trap for heuristic 4)
// src/
// code.js ← startDir (descendant of child)
const workspaceRoot = fs.mkdtempSync(path.join(os.tmpdir(), 'gsd-pr-subrepos-'));
const workspaceRoot = fs.mkdtempSync(path.join(os.tmpdir(), 'msd-pr-subrepos-'));
try {
fs.mkdirSync(path.join(workspaceRoot, '.planning'), { recursive: true });
fs.writeFileSync(
@@ -189,7 +189,7 @@ describe('findProjectRoot nearest-.planning resolution (#1414)', () => {
// .planning/ ← child has own .planning/
// .git/ ← child ALSO has own .git/ → was triggering heuristic-3 prematurely
// src/ ← startDir
const workspaceRoot = fs.mkdtempSync(path.join(os.tmpdir(), 'gsd-pr-subrepos-git-'));
const workspaceRoot = fs.mkdtempSync(path.join(os.tmpdir(), 'msd-pr-subrepos-git-'));
try {
fs.mkdirSync(path.join(workspaceRoot, '.planning'), { recursive: true });
fs.writeFileSync(
@@ -214,7 +214,7 @@ describe('findProjectRoot nearest-.planning resolution (#1414)', () => {
// REGRESSION (#1422): sub_repos child with .git resolves to parent even when
// startDir is nested more than one level inside the child.
test('sub_repos child with .git: startDir nested 2+ levels inside child still resolves to parent (#1422)', () => {
const workspaceRoot = fs.mkdtempSync(path.join(os.tmpdir(), 'gsd-pr-subrepos-nested-'));
const workspaceRoot = fs.mkdtempSync(path.join(os.tmpdir(), 'msd-pr-subrepos-nested-'));
try {
fs.mkdirSync(path.join(workspaceRoot, '.planning'), { recursive: true });
fs.writeFileSync(
@@ -245,7 +245,7 @@ describe('findProjectRoot nearest-.planning resolution (#1414)', () => {
// child/
// .git/ ← child has its own git repo
// src/ ← startDir
const workspaceRoot = fs.mkdtempSync(path.join(os.tmpdir(), 'gsd-pr-multirepo-'));
const workspaceRoot = fs.mkdtempSync(path.join(os.tmpdir(), 'msd-pr-multirepo-'));
try {
fs.mkdirSync(path.join(workspaceRoot, '.planning'), { recursive: true });
fs.writeFileSync(
@@ -277,25 +277,25 @@ describe('findProjectRoot nearest-.planning resolution (#1414)', () => {
});
// #2843: findProjectRoot must NOT cross a git-repo boundary. A nested child
// repo (own .git, no .planning of its own) under an ancestor GSD project must
// repo (own .git, no .planning of its own) under an ancestor MSD project must
// NOT resolve to the ancestor's root — that would silently return a different
// project's identity with exit 0. Pre-fix heuristic (3)'s isInsideGitRepo only
// checked "does SOME .git exist between start and the ancestor" — the child's
// own .git satisfied it, crossing the boundary.
test('#2843 does not resolve to an ancestor project across a nested child .git boundary', () => {
// tmpDir/ (plain — not a git repo, not HOME)
// parent-gsd/.planning/ ← ancestor GSD project
// parent-gsd/child-app/.git ← nested child repo, NO .planning of its own
// parent-gsd/child-app/src/ ← startDir
const parentGsd = mkDeep(tmpDir, 'parent-gsd');
fs.mkdirSync(path.join(parentGsd, '.planning'), { recursive: true });
const childApp = mkDeep(parentGsd, 'child-app');
// parent-msd/.planning/ ← ancestor MSD project
// parent-msd/child-app/.git ← nested child repo, NO .planning of its own
// parent-msd/child-app/src/ ← startDir
const parentMsd = mkDeep(tmpDir, 'parent-msd');
fs.mkdirSync(path.join(parentMsd, '.planning'), { recursive: true });
const childApp = mkDeep(parentMsd, 'child-app');
fs.mkdirSync(path.join(childApp, '.git'), { recursive: true });
const startDir = mkDeep(childApp, 'src');
const result = findProjectRoot(startDir);
assert.notStrictEqual(result, parentGsd,
'must NOT cross child-app\'s .git boundary to resolve to the ancestor parent-gsd project');
assert.notStrictEqual(result, parentMsd,
'must NOT cross child-app\'s .git boundary to resolve to the ancestor parent-msd project');
// The child repo has no .planning of its own, so resolution falls back to
// the startDir (or a path within child-app) — never the ancestor.
assert.ok(