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:
@@ -6,8 +6,8 @@
|
||||
/**
|
||||
* Worktree Cleanup Module — HEAD attachment, post-executor cleanup, and contract tests
|
||||
*
|
||||
* Seam: gsd-core/workflows/{execute-phase,execute-plan,quick}.md,
|
||||
* agents/gsd-executor.md, references/git-integration.md
|
||||
* Seam: msd-core/workflows/{execute-phase,execute-plan,quick}.md,
|
||||
* agents/msd-executor.md, references/git-integration.md
|
||||
*
|
||||
* Split from the consolidated 13→2 worktree cluster (≤800 LOC/file):
|
||||
* - tests/bug-2924-worktree-head-attachment.test.cjs (#2924: HEAD attachment)
|
||||
@@ -26,15 +26,15 @@ const { describe, test } = require('node:test');
|
||||
const assert = require('node:assert/strict');
|
||||
const fs = require('node:fs');
|
||||
const path = require('node:path');
|
||||
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 EXECUTE_PHASE_PATH = path.join(REPO_ROOT, 'gsd-core', 'workflows', 'execute-phase.md');
|
||||
const EXECUTE_PLAN_PATH = path.join(REPO_ROOT, 'gsd-core', 'workflows', 'execute-plan.md');
|
||||
const QUICK_PATH = path.join(REPO_ROOT, 'gsd-core', 'workflows', 'quick.md');
|
||||
const EXECUTOR_AGENT_PATH = path.join(REPO_ROOT, 'agents', 'gsd-executor.md');
|
||||
const GIT_INTEGRATION_PATH = path.join(REPO_ROOT, 'gsd-core', 'references', 'git-integration.md');
|
||||
const WORKTREE_BRANCH_CHECK_FRAGMENT = path.join(REPO_ROOT, 'gsd-core', 'references', 'worktree-branch-check.md');
|
||||
const EXECUTE_PHASE_PATH = path.join(REPO_ROOT, 'msd-core', 'workflows', 'execute-phase.md');
|
||||
const EXECUTE_PLAN_PATH = path.join(REPO_ROOT, 'msd-core', 'workflows', 'execute-plan.md');
|
||||
const QUICK_PATH = path.join(REPO_ROOT, 'msd-core', 'workflows', 'quick.md');
|
||||
const EXECUTOR_AGENT_PATH = path.join(REPO_ROOT, 'agents', 'msd-executor.md');
|
||||
const GIT_INTEGRATION_PATH = path.join(REPO_ROOT, 'msd-core', 'references', 'git-integration.md');
|
||||
const WORKTREE_BRANCH_CHECK_FRAGMENT = path.join(REPO_ROOT, 'msd-core', 'references', 'worktree-branch-check.md');
|
||||
|
||||
// ─── Helpers ──────────────────────────────────────────────────────────────────
|
||||
|
||||
@@ -334,12 +334,12 @@ describe('bug #2924: worktree HEAD attachment + destructive recovery', () => {
|
||||
|
||||
describe('quick.md pre-dispatch plan commit no longer hard-codes --no-verify', () => {
|
||||
// #2994 fragmentization moved the pre-dispatch plan commit block out of
|
||||
// quick.md into gsd-core/workflows/quick/steps/worktree-pre-dispatch-commit.md
|
||||
// quick.md into msd-core/workflows/quick/steps/worktree-pre-dispatch-commit.md
|
||||
// behind a section marker. Read host + step file combined so the fenced
|
||||
// code block search below still finds it.
|
||||
const content = fs.readFileSync(QUICK_PATH, 'utf-8') +
|
||||
'\n' + fs.readFileSync(
|
||||
path.join(REPO_ROOT, 'gsd-core', 'workflows', 'quick', 'steps', 'worktree-pre-dispatch-commit.md'),
|
||||
path.join(REPO_ROOT, 'msd-core', 'workflows', 'quick', 'steps', 'worktree-pre-dispatch-commit.md'),
|
||||
'utf-8'
|
||||
);
|
||||
const codeBlocks = extractFencedCodeBlocks(content);
|
||||
@@ -376,12 +376,12 @@ describe('bug #2924: worktree HEAD attachment + destructive recovery', () => {
|
||||
});
|
||||
});
|
||||
|
||||
describe('gsd-executor.md prohibits update-ref self-recovery', () => {
|
||||
describe('msd-executor.md prohibits update-ref self-recovery', () => {
|
||||
const content = fs.readFileSync(EXECUTOR_AGENT_PATH, 'utf-8');
|
||||
const block = extractNamedBlock(content, 'destructive_git_prohibition');
|
||||
|
||||
test('destructive_git_prohibition block exists', () => {
|
||||
assert.ok(block, 'gsd-executor.md must contain a <destructive_git_prohibition> block');
|
||||
assert.ok(block, 'msd-executor.md must contain a <destructive_git_prohibition> block');
|
||||
});
|
||||
|
||||
test('block prohibits `git update-ref refs/heads/<protected>`', () => {
|
||||
@@ -403,12 +403,12 @@ describe('bug #2924: worktree HEAD attachment + destructive recovery', () => {
|
||||
});
|
||||
});
|
||||
|
||||
describe('gsd-executor.md task_commit_protocol enforces worktree-agent-* allow-list', () => {
|
||||
describe('msd-executor.md task_commit_protocol enforces worktree-agent-* allow-list', () => {
|
||||
const content = fs.readFileSync(EXECUTOR_AGENT_PATH, 'utf-8');
|
||||
const block = extractNamedBlock(content, 'task_commit_protocol');
|
||||
|
||||
test('task_commit_protocol block exists', () => {
|
||||
assert.ok(block, 'gsd-executor.md must contain a <task_commit_protocol> block');
|
||||
assert.ok(block, 'msd-executor.md must contain a <task_commit_protocol> block');
|
||||
});
|
||||
|
||||
test('step 0 enforces positive worktree-agent-* allow-list (#2924 hardening)', () => {
|
||||
@@ -423,7 +423,7 @@ describe('bug #2924: worktree HEAD attachment + destructive recovery', () => {
|
||||
});
|
||||
|
||||
describe('no workflow file performs unconditional update-ref on a protected branch', () => {
|
||||
const workflowsDir = path.join(REPO_ROOT, 'gsd-core', 'workflows');
|
||||
const workflowsDir = path.join(REPO_ROOT, 'msd-core', 'workflows');
|
||||
const workflowFiles = fs
|
||||
.readdirSync(workflowsDir, { recursive: true })
|
||||
.filter((f) => typeof f === 'string' && f.endsWith('.md'))
|
||||
@@ -482,8 +482,8 @@ describe('bug #2924: worktree HEAD attachment + destructive recovery', () => {
|
||||
// ─── #1496: post-executor worktree cleanup ──────────────────────────────────
|
||||
|
||||
describe('worktree cleanup after executor completes (#1496)', () => {
|
||||
const executePhasePath = path.join(__dirname, '..', 'gsd-core', 'workflows', 'execute-phase.md');
|
||||
const quickPath = path.join(__dirname, '..', 'gsd-core', 'workflows', 'quick.md');
|
||||
const executePhasePath = path.join(__dirname, '..', 'msd-core', 'workflows', 'execute-phase.md');
|
||||
const quickPath = path.join(__dirname, '..', 'msd-core', 'workflows', 'quick.md');
|
||||
|
||||
test('execute-phase.md includes worktree cleanup step', () => {
|
||||
const content = fs.readFileSync(executePhasePath, 'utf8');
|
||||
@@ -524,7 +524,7 @@ describe('worktree cleanup after executor completes (#1496)', () => {
|
||||
// deletion internally). The manual shell cleanup loop has been removed.
|
||||
assert.ok(
|
||||
content.includes('worktree.cleanup-wave'),
|
||||
'quick cleanup must delegate to gsd_run query worktree.cleanup-wave (#3797)',
|
||||
'quick cleanup must delegate to msd_run query worktree.cleanup-wave (#3797)',
|
||||
);
|
||||
});
|
||||
|
||||
@@ -534,7 +534,7 @@ describe('worktree cleanup after executor completes (#1496)', () => {
|
||||
// A soft || { warn } fallback would silently swallow blocked cleanups.
|
||||
assert.match(
|
||||
content,
|
||||
/gsd_run query worktree\.cleanup-wave.*\|\| exit 1/,
|
||||
/msd_run query worktree\.cleanup-wave.*\|\| exit 1/,
|
||||
'quick.md cleanup-wave must use || exit 1 — SDK safety refusals must surface (#3797)',
|
||||
);
|
||||
});
|
||||
@@ -559,8 +559,8 @@ describe('worktree merge: orchestrator file protection (#1756)', () => {
|
||||
// worktree.cleanup-wave handles STATE.md/ROADMAP.md backup + restore internally.
|
||||
assert.match(
|
||||
content,
|
||||
/gsd_run query worktree\.cleanup-wave --manifest "\$WAVE_WORKTREE_MANIFEST" \|\| exit 1/,
|
||||
'execute-phase.md must delegate to gsd_run query worktree.cleanup-wave with || exit 1 (#3797)',
|
||||
/msd_run query worktree\.cleanup-wave --manifest "\$WAVE_WORKTREE_MANIFEST" \|\| exit 1/,
|
||||
'execute-phase.md must delegate to msd_run query worktree.cleanup-wave with || exit 1 (#3797)',
|
||||
);
|
||||
});
|
||||
|
||||
@@ -594,8 +594,8 @@ describe('worktree merge: orchestrator file protection (#1756)', () => {
|
||||
// backup code — that is handled internally by worktree.cleanup-wave.
|
||||
assert.match(
|
||||
content,
|
||||
/gsd_run query worktree\.cleanup-wave --manifest "\$QUICK_WORKTREE_MANIFEST" \|\| exit 1/,
|
||||
'quick.md must delegate to gsd_run query worktree.cleanup-wave with || exit 1 (#3797)',
|
||||
/msd_run query worktree\.cleanup-wave --manifest "\$QUICK_WORKTREE_MANIFEST" \|\| exit 1/,
|
||||
'quick.md must delegate to msd_run query worktree.cleanup-wave with || exit 1 (#3797)',
|
||||
);
|
||||
});
|
||||
});
|
||||
@@ -622,7 +622,7 @@ describe('worktree commit safety hardening (#1977)', () => {
|
||||
assert.ok(isUniversal, 'worktree_branch_check description must indicate the fix applies to all platforms');
|
||||
});
|
||||
|
||||
test('gsd-executor.md task_commit_protocol includes post-commit deletion verification', () => {
|
||||
test('msd-executor.md task_commit_protocol includes post-commit deletion verification', () => {
|
||||
const content = fs.readFileSync(EXECUTOR_AGENT_PATH, 'utf-8');
|
||||
assert.ok(content.includes('--diff-filter=D'), 'must include --diff-filter=D deletion verification');
|
||||
assert.ok(
|
||||
@@ -689,19 +689,19 @@ describe('bug #3384: worktree cleanup workflow contracts', () => {
|
||||
assert.match(content, /worktree\.cleanup-wave/);
|
||||
// #1298: the per-agent manifest write now goes through the validated
|
||||
// `worktree record-agent` writer verb (was a prose "atomically append").
|
||||
assert.match(content, /record the `\{agent_id, worktree_path, branch, expected_base\}` entry with `gsd_run query worktree\.record-agent/);
|
||||
assert.match(content, /record the `\{agent_id, worktree_path, branch, expected_base\}` entry with `msd_run query worktree\.record-agent/);
|
||||
assert.match(content, /try\{if\(!p\)throw new Error\("WAVE_WORKTREE_MANIFEST is unset"\)/);
|
||||
assert.match(content, /WT_PATHS_FILE=.*gsd-worktree-paths-/);
|
||||
assert.match(content, /WT_PATHS_FILE=.*msd-worktree-paths-/);
|
||||
assert.doesNotMatch(content, /done < <\(node -e 'const fs=require\("fs"\);const p=process\.env\.WAVE_WORKTREE_MANIFEST/);
|
||||
assert.doesNotMatch(content, /done < <\(git worktree list --porcelain \| grep "\^worktree " \| grep "\\\.claude\/worktrees\/agent-"/);
|
||||
});
|
||||
|
||||
test('#1297 gsd-executor self-reports authoritative worktree metadata', () => {
|
||||
test('#1297 msd-executor self-reports authoritative worktree metadata', () => {
|
||||
const content = fs.readFileSync(EXECUTOR_AGENT_PATH, 'utf8');
|
||||
assert.match(content, /<worktree_metadata_capture>/);
|
||||
assert.match(content, /git rev-parse --show-toplevel/);
|
||||
assert.match(content, /git rev-parse --abbrev-ref HEAD/);
|
||||
assert.match(content, /GSD_WORKTREE_EXPECTED_BASE=\$\(git rev-parse HEAD\)/);
|
||||
assert.match(content, /MSD_WORKTREE_EXPECTED_BASE=\$\(git rev-parse HEAD\)/);
|
||||
assert.match(content, /<worktree_metadata>/);
|
||||
assert.match(content, /"worktree_path":/);
|
||||
assert.match(content, /"branch":/);
|
||||
@@ -723,13 +723,13 @@ describe('bug #3384: worktree cleanup workflow contracts', () => {
|
||||
const content = fs.readFileSync(QUICK_PATH, 'utf8');
|
||||
assert.match(content, /WAVE_WORKTREE_MANIFEST|QUICK_WORKTREE_MANIFEST/);
|
||||
assert.match(content, /worktree\.cleanup-wave/);
|
||||
assert.match(content, /mktemp "\$\{TMPDIR:-\/tmp\}\/gsd-quick-worktree-/);
|
||||
assert.match(content, /mktemp "\$\{TMPDIR:-\/tmp\}\/msd-quick-worktree-/);
|
||||
assert.match(content, /append its returned `\{agent_id, worktree_path, branch, expected_base, allowed_bases\}`/);
|
||||
// After #3797 architectural fix: quick.md delegates entirely to the SDK's cleanup-wave
|
||||
// command (which handles manifest parsing internally). The shell fallback with manual
|
||||
// QUICK_WORKTREE_MANIFEST node-e code is removed — the gsd_run call with || exit 1 is the
|
||||
// QUICK_WORKTREE_MANIFEST node-e code is removed — the msd_run call with || exit 1 is the
|
||||
// only cleanup path, enforcing safety-refusal semantics (#3174/#3384).
|
||||
assert.match(content, /gsd_run query worktree\.cleanup-wave --manifest "\$QUICK_WORKTREE_MANIFEST" \|\| exit 1/);
|
||||
assert.match(content, /msd_run query worktree\.cleanup-wave --manifest "\$QUICK_WORKTREE_MANIFEST" \|\| exit 1/);
|
||||
assert.doesNotMatch(content, /done < <\(node -e 'const fs=require\("fs"\);const p=process\.env\.QUICK_WORKTREE_MANIFEST/);
|
||||
assert.doesNotMatch(content, /done < <\(git worktree list --porcelain \| grep "\^worktree " \| grep "\\\.claude\/worktrees\/agent-"/);
|
||||
});
|
||||
@@ -749,8 +749,8 @@ test('#3425: helper cleanup path pins orchestrator CWD to primary worktree and c
|
||||
assert.match(content, /cd "\$PRIMARY_WT" \|\| \{ echo "FATAL: cannot cd to primary worktree \$PRIMARY_WT" >&2; exit 1; \}/);
|
||||
assert.match(content, /ORCH_BRANCH=\$\(git rev-parse --abbrev-ref HEAD\)/);
|
||||
assert.match(content, /FATAL: orchestrator on '\$ORCH_BRANCH' but expected '\$EXPECTED_BRANCH' before worktree cleanup — refusing to merge \(#3174-class drift\)/);
|
||||
// After #3797 architectural fix, callsites use gsd_run
|
||||
assert.match(content, /gsd_run query worktree\.cleanup-wave --manifest "\$WAVE_WORKTREE_MANIFEST"/);
|
||||
// After #3797 architectural fix, callsites use msd_run
|
||||
assert.match(content, /msd_run query worktree\.cleanup-wave --manifest "\$WAVE_WORKTREE_MANIFEST"/);
|
||||
});
|
||||
|
||||
test('#3425: cleanup-tail snippet carries the same primary-worktree pin before removal', () => {
|
||||
@@ -842,7 +842,7 @@ const fs = require('fs');
|
||||
const path = require('path');
|
||||
|
||||
const EXECUTE_PHASE = path.join(
|
||||
__dirname, '..', 'gsd-core', 'workflows', 'execute-phase.md'
|
||||
__dirname, '..', 'msd-core', 'workflows', 'execute-phase.md'
|
||||
);
|
||||
|
||||
/**
|
||||
@@ -857,7 +857,7 @@ function parseExecutePhaseContract(filePath) {
|
||||
delegatesToCleanupWave: lines.some(l => l.includes('worktree.cleanup-wave')),
|
||||
// Does the cleanup-wave invocation use || exit 1 (fail-closed)?
|
||||
cleanupWaveFailClosed: lines.some(
|
||||
l => /gsd_run query worktree\.cleanup-wave.*\|\| exit 1/.test(l),
|
||||
l => /msd_run query worktree\.cleanup-wave.*\|\| exit 1/.test(l),
|
||||
),
|
||||
// Does the workflow export/reference WAVE_WORKTREE_MANIFEST for the SDK?
|
||||
passesWaveManifest: lines.some(l => l.includes('WAVE_WORKTREE_MANIFEST')),
|
||||
@@ -873,7 +873,7 @@ describe('execute-phase.md — post-merge deletion audit (#2384)', () => {
|
||||
// The workflow delegates to the SDK rather than duplicating the check inline.
|
||||
assert.ok(
|
||||
contract.delegatesToCleanupWave,
|
||||
'execute-phase.md must delegate to gsd_run query worktree.cleanup-wave (#2384/#3797)',
|
||||
'execute-phase.md must delegate to msd_run query worktree.cleanup-wave (#2384/#3797)',
|
||||
);
|
||||
});
|
||||
|
||||
@@ -932,7 +932,7 @@ const fs = require('fs');
|
||||
const path = require('path');
|
||||
|
||||
const EXECUTE_PHASE = path.join(
|
||||
__dirname, '..', 'gsd-core', 'workflows', 'execute-phase.md'
|
||||
__dirname, '..', 'msd-core', 'workflows', 'execute-phase.md'
|
||||
);
|
||||
|
||||
describe('execute-phase.md — resurrection-detection guard (#2501)', () => {
|
||||
@@ -1001,10 +1001,10 @@ const fs = require('fs');
|
||||
const path = require('path');
|
||||
|
||||
const QUICK_MD = path.join(
|
||||
__dirname, '..', 'gsd-core', 'workflows', 'quick.md'
|
||||
__dirname, '..', 'msd-core', 'workflows', 'quick.md'
|
||||
);
|
||||
const EXECUTE_PHASE_MD = path.join(
|
||||
__dirname, '..', 'gsd-core', 'workflows', 'execute-phase.md'
|
||||
__dirname, '..', 'msd-core', 'workflows', 'execute-phase.md'
|
||||
);
|
||||
|
||||
describe('resurrection guard drift check — quick.md vs execute-phase.md (#3195)', () => {
|
||||
@@ -1085,7 +1085,7 @@ describe('resurrection guard drift check — quick.md vs execute-phase.md (#3195
|
||||
const { describe: __foldDescribe } = require('node:test');
|
||||
__foldDescribe("folded:bug-3521-quick-cleanup-cwd-pin (consolidation epic #1969 B4 #1973)", () => {
|
||||
// allow-test-rule: source-text-is-the-product (see #3521)
|
||||
// quick.md is the shipped orchestration contract for /gsd-quick; this
|
||||
// quick.md is the shipped orchestration contract for /msd-quick; this
|
||||
// regression test previously locked the CWD-safety guard in the manual shell
|
||||
// cleanup loop. After #3797, quick.md delegates cleanup entirely to the SDK's
|
||||
// worktree.cleanup-wave command, which encapsulates CWD-pinning, STATE.md/
|
||||
@@ -1102,7 +1102,7 @@ const assert = require('node:assert/strict');
|
||||
const fs = require('node:fs');
|
||||
const path = require('node:path');
|
||||
|
||||
const QUICK_MD = path.join(__dirname, '..', 'gsd-core', 'workflows', 'quick.md');
|
||||
const QUICK_MD = path.join(__dirname, '..', 'msd-core', 'workflows', 'quick.md');
|
||||
|
||||
function readQuickMd() {
|
||||
return fs.readFileSync(QUICK_MD, 'utf8');
|
||||
@@ -1117,12 +1117,12 @@ describe('bug #3521 — quick.md post-merge cleanup CWD safety (via SDK delegati
|
||||
|
||||
test('quick.md cleanup delegates CWD-safe worktree cleanup to SDK (worktree.cleanup-wave)', () => {
|
||||
const content = readQuickMd();
|
||||
// After #3797: quick.md delegates to gsd_run query worktree.cleanup-wave
|
||||
// After #3797: quick.md delegates to msd_run query worktree.cleanup-wave
|
||||
// which handles CWD pinning, STATE.md backup, deletion guards, and branch
|
||||
// cleanup internally. The manual shell loop has been removed.
|
||||
assert.ok(
|
||||
content.includes('worktree.cleanup-wave'),
|
||||
'quick.md must delegate cleanup to gsd_run query worktree.cleanup-wave (#3797)',
|
||||
'quick.md must delegate cleanup to msd_run query worktree.cleanup-wave (#3797)',
|
||||
);
|
||||
});
|
||||
|
||||
@@ -1130,11 +1130,11 @@ describe('bug #3521 — quick.md post-merge cleanup CWD safety (via SDK delegati
|
||||
const content = readQuickMd();
|
||||
// The || exit 1 enforces fail-closed: SDK safety refusals (e.g. branch
|
||||
// drift detection from #3174) surface immediately rather than being swallowed.
|
||||
// This is the equivalent of the pre-#3797 `gsd_run query ... || exit 1` in the
|
||||
// `if command -v gsd-sdk` branch.
|
||||
// This is the equivalent of the pre-#3797 `msd_run query ... || exit 1` in the
|
||||
// `if command -v msd-sdk` branch.
|
||||
assert.match(
|
||||
content,
|
||||
/gsd_run query worktree\.cleanup-wave.*\|\| exit 1/,
|
||||
/msd_run query worktree\.cleanup-wave.*\|\| exit 1/,
|
||||
'quick.md cleanup-wave must use || exit 1 — fail-closed for safety refusals (#3521/#3797)',
|
||||
);
|
||||
});
|
||||
@@ -1191,8 +1191,8 @@ const fs = require('fs');
|
||||
const path = require('path');
|
||||
|
||||
const REPO_ROOT = path.join(__dirname, '..');
|
||||
const EXECUTE_PHASE_PATH = path.join(REPO_ROOT, 'gsd-core', 'workflows', 'execute-phase.md');
|
||||
const QUICK_PATH = path.join(REPO_ROOT, 'gsd-core', 'workflows', 'quick.md');
|
||||
const EXECUTE_PHASE_PATH = path.join(REPO_ROOT, 'msd-core', 'workflows', 'execute-phase.md');
|
||||
const QUICK_PATH = path.join(REPO_ROOT, 'msd-core', 'workflows', 'quick.md');
|
||||
|
||||
/**
|
||||
* Parse a workflow markdown file into a structured contract object.
|
||||
@@ -1207,7 +1207,7 @@ function parseWorkflowContract(filePath) {
|
||||
delegatesToCleanupWave: lines.some(l => l.includes('worktree.cleanup-wave')),
|
||||
// Does the cleanup-wave invocation use || exit 1 (fail-closed)?
|
||||
cleanupWaveFailClosed: lines.some(
|
||||
l => /gsd_run query worktree\.cleanup-wave.*\|\| exit 1/.test(l),
|
||||
l => /msd_run query worktree\.cleanup-wave.*\|\| exit 1/.test(l),
|
||||
),
|
||||
// Does the workflow still contain the broken ls-files --exclude-standard rescue form?
|
||||
hasBrokenLsFilesForm: lines.some(
|
||||
@@ -1315,7 +1315,7 @@ const { cleanup } = require('./helpers.cjs');
|
||||
const { runNode } = require('./helpers/process-seam.cjs');
|
||||
const { gitOrThrow, throwIfFailed } = require('./helpers/git-fixture.cjs');
|
||||
|
||||
const EXECUTE_PHASE_MD = path.join(__dirname, '..', 'gsd-core', 'workflows', 'execute-phase.md');
|
||||
const EXECUTE_PHASE_MD = path.join(__dirname, '..', 'msd-core', 'workflows', 'execute-phase.md');
|
||||
|
||||
// 30000ms: git plumbing (init/config/add/commit/worktree/rev-parse) against a
|
||||
// small mkdtemp fixture repo, and a `node -e <manifest-reader>` one-liner
|
||||
@@ -1409,7 +1409,7 @@ describe('bug #630 — wave-cleanup pins to the orchestrator root, not git-workt
|
||||
// ── Behavioral proof of the pivot ─────────────────────────────────────────
|
||||
|
||||
test('shipped manifest reader resolves to the lane worktree, while first-entry resolves to main (#630)', () => {
|
||||
const tmpRoot = fs.mkdtempSync(path.join(os.tmpdir(), 'gsd-630-'));
|
||||
const tmpRoot = fs.mkdtempSync(path.join(os.tmpdir(), 'msd-630-'));
|
||||
try {
|
||||
const mainDir = path.join(tmpRoot, 'main');
|
||||
fs.mkdirSync(mainDir);
|
||||
@@ -1462,7 +1462,7 @@ describe('bug #630 — wave-cleanup pins to the orchestrator root, not git-workt
|
||||
});
|
||||
|
||||
test('manifest reader falls through (empty output) when orchestrator_root is absent — fallback engages (#630)', () => {
|
||||
const tmpRoot = fs.mkdtempSync(path.join(os.tmpdir(), 'gsd-630-fb-'));
|
||||
const tmpRoot = fs.mkdtempSync(path.join(os.tmpdir(), 'msd-630-fb-'));
|
||||
try {
|
||||
const manifest = path.join(tmpRoot, 'legacy.json');
|
||||
// Pre-#630 manifest shape: no orchestrator_root.
|
||||
@@ -1503,7 +1503,7 @@ const { runHook, runGit } = require('./helpers/process-seam.cjs');
|
||||
const { gitOrThrow } = require('./helpers/git-fixture.cjs');
|
||||
|
||||
const REPO_ROOT = path.join(__dirname, '..');
|
||||
const EXECUTE_PHASE_PATH = path.join(REPO_ROOT, 'gsd-core', 'workflows', 'execute-phase.md');
|
||||
const EXECUTE_PHASE_PATH = path.join(REPO_ROOT, 'msd-core', 'workflows', 'execute-phase.md');
|
||||
|
||||
// #3145: class-norm timeout, not a per-suite value — see helpers/timeouts.cjs.
|
||||
const { GIT_TIMEOUT_MS, HOOK_FANOUT_TIMEOUT_MS } = require('./helpers/timeouts.cjs');
|
||||
@@ -1627,7 +1627,7 @@ function git(cwd, args) {
|
||||
|
||||
before(() => {
|
||||
// --- upstream: the main repo with an initial commit ---
|
||||
upstreamDir = fs.mkdtempSync(path.join(os.tmpdir(), 'gsd-48-upstream-'));
|
||||
upstreamDir = fs.mkdtempSync(path.join(os.tmpdir(), 'msd-48-upstream-'));
|
||||
dirsToCleanup.push(upstreamDir);
|
||||
|
||||
git(upstreamDir, ['init', '-b', 'main']);
|
||||
@@ -1639,7 +1639,7 @@ before(() => {
|
||||
git(upstreamDir, ['commit', '-m', 'chore: init']);
|
||||
|
||||
// --- feature worktree: non-agent branch, path outside .claude/worktrees ---
|
||||
featureDir = fs.mkdtempSync(path.join(os.tmpdir(), 'gsd-48-feature-'));
|
||||
featureDir = fs.mkdtempSync(path.join(os.tmpdir(), 'msd-48-feature-'));
|
||||
dirsToCleanup.push(featureDir);
|
||||
// git worktree add creates the directory itself; remove so it can do so
|
||||
fs.rmdirSync(featureDir);
|
||||
@@ -1724,7 +1724,7 @@ describe('bug #48: orchestrator cwd-drift guard — executable e2e', () => {
|
||||
});
|
||||
|
||||
test('guard fails closed (exit 1) when not inside a git repo', (t) => {
|
||||
const nonRepoDir = fs.mkdtempSync(path.join(os.tmpdir(), 'gsd-48-nongit-'));
|
||||
const nonRepoDir = fs.mkdtempSync(path.join(os.tmpdir(), 'msd-48-nongit-'));
|
||||
try {
|
||||
// Verify that git rev-parse --show-toplevel actually fails here.
|
||||
// On some systems /tmp itself might be inside a git repo (e.g. if the
|
||||
|
||||
Reference in New Issue
Block a user