diff --git a/docs/adr/2264-golden-parity-redesign.md b/docs/adr/2264-golden-parity-redesign.md index 279686793..0702f09c9 100644 --- a/docs/adr/2264-golden-parity-redesign.md +++ b/docs/adr/2264-golden-parity-redesign.md @@ -76,3 +76,18 @@ Only the **transformed** outputs (per-runtime projections from `runtime-artifact - ADR-1239 (Phase B safety net); issues #2086, #2095, #2100, #2117, #1691 - Node.js test runner: `context.assert.snapshot` + `--test-update-snapshots` - Jest `--ci` snapshot posture (fail on new snapshot, deliberate `-u` regeneration) + +## Amendment (2026-07-14): Phase 2 redesign — the copy/transform split was unsound + +Implementing Phase 2 began with an empirical spike classifying every emitted install file. It **overturned the §2–§4 premise**: + +- **The copy/transform boundary is not clean.** Nearly every emitted file passes through a *deterministic* rewrite (path-prefix canonicalization, `{{GSD_VERSION}}` stamping, hyphen-normalization) — even for claude, the reference host. Only ~36% of claude's files are byte-identical to source; ~64% are "transformed." A "content-hash only the transformed ~5%" golden (§4) was the wrong model. +- **The §3 from-source copy-parity property test is unsound.** Asserting `emitted == transform(source)` by calling the installer's own transform functions is largely tautological (it catches only non-determinism) — strictly *weaker* regression coverage than the current golden. Making it independent means reimplementing the transform in the test — the exact duplication this epic fights. It is also noisier than the golden it replaces: the harness's `configDir == $HOME` collapses path canonicalization differently than a real install, mis-classifying ~147 of claude's files as transforms. +- **The real defect was stale fixtures, not platform divergence.** The Phase-1 red (`gsd-statusline.js` + 3 claude-local files) was *deterministic* (macOS hash == Linux-bench hash for every entry); the fixtures were simply stale because `golden-install-parity` was not selected by CI when the emitting source (a `hooks/` file) changed, so it merged undetected. + +**Revised Phase 2 (implemented in #2267):** + +1. **File-set snapshot** — `tests/golden-install-tree.test.cjs` + `tests/fixtures/install-tree/*.json`: a per-runtime sorted list of emitted paths (no hashes), reusing the single-source exclusions via `buildInstallTree` (= sorted keys of `buildParityManifest`). Cheap structural coverage; changes only when the file *set* changes, giving a clean reviewable diff instead of hash noise. +2. **Anti-staleness CI selection** — `scripts/ci-test-scope.cjs` gains a rule selecting `golden-install-parity` + the file-set snapshot whenever an installed-source path changes: the four `gsd-core/` content subtrees (`workflows`, `templates`, `references`, `contexts`) + `gsd-core/bin/shared/*.json`, plus `hooks/**`, `commands/**`, `agents/**`, `skills/**`, and the shipped `scripts/*` files (`scripts/changeset/`, `scripts/lib/`, and three named generators) — not just `src/`/installer paths. `gsd-core/bin/**` (tsc-compiled) is deliberately excluded (already covered by the installer rule). This makes the #2266 silent-staleness class impossible: a source edit that changes emitted output re-verifies the fixtures at PR time. + +**Deferred as an optional future refinement:** the §3-style content-dedup of verbatim copies. The *safe* subset (structurally raw-copied non-`.md`/`.js` data files) is modest, and the broad form is unsound — a `.md` file that is byte-equal today transforms the moment a self-reference is added, producing false property-test failures. Since the anti-staleness rule already removes the root pain (silent stale merges) and the file-set snapshot adds structural coverage, the content-hash golden is retained as-is; churn on *transformed* output is legitimate (you should review transformed output when you change its source). diff --git a/scripts/ci-test-scope.cjs b/scripts/ci-test-scope.cjs index bdc7ac92d..dc06bb3db 100644 --- a/scripts/ci-test-scope.cjs +++ b/scripts/ci-test-scope.cjs @@ -145,6 +145,37 @@ const RULES = [ 'tests/golden-install-parity.test.cjs', // any src/installer change can alter emitted install artifacts → re-verify golden install parity (drift guard) ], }, + { + name: 'shipped install content (golden-parity drift guard, #2267)', + // Every source file the installer EMITS into a runtime layout is captured by + // golden-install-parity + the install-tree snapshot. A source edit here that + // changes emitted output MUST re-verify the fixtures — otherwise stale golden + // fixtures merge silently (#2266: a hooks/gsd-statusline.js edit changed + // installed output but no rule selected golden-parity, so stale fixtures + // shipped to next undetected). Union semantics: this ADDS the parity guard on + // top of each path's existing content-specific tests. Targeted lane only (the + // golden test skips win32 by design), no fullMatrix. + // NOTE: intentionally NOT a blanket 'gsd-core/' prefix, for two reasons: + // (1) gsd-core/bin/** is tsc-compiled runtime output — EXCLUDED_PREFIXES- + // excluded from both manifests, and already covered by the 'installer and + // package layout' rule (path.startsWith('gsd-core/bin/')) — so matching it + // here would be pure noise; and + // (2) enumerating only the installer-shipped content subtrees preserves the + // bug-408 unit-fallback contract: a gsd-core/ path that is NOT shipped + // verbatim (the bug-408 test uses gsd-core/src/some-util.js) must still + // fall back to ['unit'] when no rule matches. + // Listed: the four gsd-core content subtrees the installer ships verbatim + // (contexts, references, templates, workflows) + bin/shared/*.json data files. + // Verify against Object.keys(golden fixture) grouped by gsd-core/. + match: path => + ['hooks/', 'commands/', 'agents/', 'skills/', 'gsd-core/workflows/', 'gsd-core/templates/', 'gsd-core/references/', 'gsd-core/contexts/', 'scripts/changeset/', 'scripts/lib/'].some(p => path.startsWith(p)) || + (path.startsWith('gsd-core/bin/shared/') && path.endsWith('.json')) || + ['scripts/fix-slash-commands.cjs', 'scripts/gen-capability-registry.cjs', 'scripts/gen-loop-host-contract.cjs'].includes(path), + tests: [ + 'tests/golden-install-parity.test.cjs', + 'tests/golden-install-tree.test.cjs', + ], + }, { name: 'hooks', match: path => path.startsWith('hooks/'), @@ -364,8 +395,15 @@ function classify(files) { for (const file of files) { // Determine if this file is product/pipeline code. // docs/ and root-level .md files are intentionally excluded. + // 'skills/' is shipped agent-skill content installed into every runtime by + // the installer (see the 'shipped install content' RULES entry below) — it + // must be product code, or a skills/-only change silently gets + // code_changed=false and skips the ENTIRE CI matrix, not merely golden-parity + // (found while verifying the #2267 golden-parity rule against skills/**: the + // rule fired in `reasons` but classify()'s codeChanged gate zeroed out every + // targeted test because 'skills/' was absent from this list). if ( - ['bin/', 'src/', 'gsd-core/', 'agents/', 'commands/', 'hooks/', 'tests/', 'scripts/', 'eslint-rules/'].some(p => file.startsWith(p)) || + ['bin/', 'src/', 'gsd-core/', 'agents/', 'commands/', 'hooks/', 'skills/', 'tests/', 'scripts/', 'eslint-rules/'].some(p => file.startsWith(p)) || file === 'package.json' || file === 'package-lock.json' || (file.startsWith('tsconfig') && file.endsWith('.json')) || file.startsWith('.github/rulesets/') diff --git a/scripts/gen-golden-install-parity-zcode.cjs b/scripts/gen-golden-install-parity-zcode.cjs index d755bc251..24e629133 100644 --- a/scripts/gen-golden-install-parity-zcode.cjs +++ b/scripts/gen-golden-install-parity-zcode.cjs @@ -15,6 +15,7 @@ */ const fs = require('node:fs'); const path = require('node:path'); +const { execFileSync } = require('node:child_process'); const ROOT = path.resolve(__dirname, '..'); // buildParityManifest (and its exclusion constants) is the canonical single @@ -22,7 +23,7 @@ const ROOT = path.resolve(__dirname, '..'); // generator no longer keeps its own inline copy, which had drifted from the // test harness's copy (missing the realpath/`` normalization) and // mis-generated the claude-local fixture (#2100). -const { runMinimalInstall, RUNTIME_META, buildParityManifest } = require(path.join(ROOT, 'tests', 'helpers', 'install-shared.cjs')); +const { runMinimalInstall, RUNTIME_META, buildParityManifest, BUILD_SCRIPT } = require(path.join(ROOT, 'tests', 'helpers', 'install-shared.cjs')); const FIXTURE_DIR = path.join(ROOT, 'tests', 'fixtures', 'golden-install-parity'); function cleanup(root) { @@ -38,6 +39,12 @@ function cleanup(root) { const targets = process.argv.slice(2).length > 0 ? process.argv.slice(2) : Object.keys(RUNTIME_META); fs.mkdirSync(FIXTURE_DIR, { recursive: true }); +// Build hooks/dist before capturing so fixtures are complete even in a clean +// checkout (hooks/dist is gitignored + built; DEFECT.HOOKS-DIST-SCOPED-CI). The +// test harness's before() hook does the same; without it a fresh checkout omits +// every hooks/* path and this generator silently writes short fixtures. +execFileSync(process.execPath, [BUILD_SCRIPT], { stdio: 'pipe' }); + for (const runtime of targets) { if (!Object.prototype.hasOwnProperty.call(RUNTIME_META, runtime)) { process.stderr.write(`[gen] unknown runtime '${runtime}' (not in RUNTIME_META) — skipping\n`); diff --git a/scripts/gen-install-tree-fixtures.cjs b/scripts/gen-install-tree-fixtures.cjs new file mode 100644 index 000000000..3c00fca97 --- /dev/null +++ b/scripts/gen-install-tree-fixtures.cjs @@ -0,0 +1,75 @@ +#!/usr/bin/env node +'use strict'; +/** + * Standalone golden-fixture generator for tests/golden-install-tree (#2267 Phase 2). + * + * This is a BUILD-TIME generation script — NOT a test run. It imports the + * canonical buildInstallTree builder from tests/helpers/install-shared.cjs, + * which in turn reuses buildParityManifest's exact exclusion set (issue + * #2266) so the file-set fixtures here and the golden-install-parity content + * fixtures never diverge on which files they cover. The authoritative test + * gate remains `gsd-test run`, never a local `node --test`. + * + * Usage: node scripts/gen-install-tree-fixtures.cjs [runtime ...] + */ +const fs = require('node:fs'); +const path = require('node:path'); +const { execFileSync } = require('node:child_process'); + +const ROOT = path.resolve(__dirname, '..'); +// buildInstallTree (and the exclusion constants it reuses from +// buildParityManifest) is the canonical single source of truth in +// tests/helpers/install-shared.cjs (issue #2266/#2267) — this generator does +// not keep its own inline copy of the walk/exclusion logic. +const { runMinimalInstall, RUNTIME_META, buildInstallTree, BUILD_SCRIPT } = require(path.join(ROOT, 'tests', 'helpers', 'install-shared.cjs')); +const FIXTURE_DIR = path.join(ROOT, 'tests', 'fixtures', 'install-tree'); + +function cleanup(root) { + try { fs.rmSync(root, { recursive: true, force: true }); } catch { /* best effort */ } +} + +// Regenerate the fixture for every runtime in RUNTIME_META. Needed when a +// SHARED gsd-core payload file (e.g. model-catalog.json, capability-registry) +// changes content — its path appears in every runtime's manifest, so all +// fixtures must be recaptured together. Usage: +// node scripts/gen-install-tree-fixtures.cjs [runtime ...] +// With no args, regenerates ALL runtimes. With args, only the named runtimes. +const targets = process.argv.slice(2).length > 0 ? process.argv.slice(2) : Object.keys(RUNTIME_META); +fs.mkdirSync(FIXTURE_DIR, { recursive: true }); + +// Build hooks/dist before capturing so fixtures are complete even in a clean +// checkout (hooks/dist is gitignored + built; DEFECT.HOOKS-DIST-SCOPED-CI). The +// test harness's before() hook does the same; without it a fresh checkout omits +// every hooks/* path and this generator silently writes short fixtures. +execFileSync(process.execPath, [BUILD_SCRIPT], { stdio: 'pipe' }); + +for (const runtime of targets) { + if (!Object.prototype.hasOwnProperty.call(RUNTIME_META, runtime)) { + process.stderr.write(`[gen] unknown runtime '${runtime}' (not in RUNTIME_META) — skipping\n`); + continue; + } + const { configDir, root } = runMinimalInstall({ runtime, scope: 'global' }); + let actual; + try { + actual = buildInstallTree(configDir, root); + } finally { + cleanup(root); + } + const fixturePath = path.join(FIXTURE_DIR, `${runtime}.json`); + fs.writeFileSync(fixturePath, JSON.stringify(actual, null, 2) + '\n', 'utf8'); + process.stdout.write(`[gen] ${runtime}: wrote ${actual.length} paths -> ${fixturePath}\n`); +} + +// Also regenerate the claude LOCAL legacy-layout fixture (claude-local.json). +// This layout is distinct from the global install (commands/gsd-*.md + +// agents/gsd-*.md) and has its own snapshot assertion in the test harness. +const { configDir: localConfigDir, root: localRoot } = runMinimalInstall({ runtime: 'claude', scope: 'local' }); +let localActual; +try { + localActual = buildInstallTree(localConfigDir, localRoot); +} finally { + cleanup(localRoot); +} +const localFixturePath = path.join(FIXTURE_DIR, 'claude-local.json'); +fs.writeFileSync(localFixturePath, JSON.stringify(localActual, null, 2) + '\n', 'utf8'); +process.stdout.write(`[gen] claude-local: wrote ${localActual.length} paths -> ${localFixturePath}\n`); diff --git a/tests/ci-test-scope.test.cjs b/tests/ci-test-scope.test.cjs index 6f9db506f..7dea2684f 100644 --- a/tests/ci-test-scope.test.cjs +++ b/tests/ci-test-scope.test.cjs @@ -581,6 +581,77 @@ describe('golden-install-parity selection (#1691 drift guard)', () => { }); }); +describe('shipped install content (golden-parity drift guard, #2267)', () => { + // #2266 regression: hooks/gsd-statusline.js changed installed output but no + // RULES entry selected golden-install-parity, so stale golden fixtures merged + // to `next` undetected. The installer emits hooks/*, commands/*, agents/*, + // skills/*, gsd-core/workflows/*, gsd-core/templates/*, gsd-core/references/*, + // gsd-core/bin/shared/*.json, and a handful of shipped scripts/* files — every + // one of those paths must additionally select golden-install-parity AND the + // install-tree snapshot (union semantics: this rule ADDS to whatever + // content-specific rule already matched the path). + // One path per prefix the rule handles — every installed-source dir the + // installer emits. gsd-core/contexts/ is the regression for the review miss + // (a real shipped dir that the initial enumeration omitted). + const SHIPPED_PATHS = [ + 'hooks/gsd-statusline.js', // exact #2266 regression + 'gsd-core/workflows/plan-phase.md', + 'gsd-core/templates/config.json', + 'gsd-core/references/ui-brand.md', + 'gsd-core/contexts/dev.md', // regression: initially omitted from the rule + 'agents/gsd-planner.md', + 'commands/gsd/mempalace-capture.md', + 'skills/gsd-explore/SKILL.md', + 'gsd-core/bin/shared/model-catalog.json', + 'scripts/changeset/lint.cjs', + 'scripts/lib/cli-exit.cjs', + 'scripts/fix-slash-commands.cjs', // exact-match allowlist entry + 'scripts/gen-capability-registry.cjs', // exact-match allowlist entry + 'scripts/gen-loop-host-contract.cjs', // exact-match allowlist entry + ]; + + for (const file of SHIPPED_PATHS) { + test(`${file} selects golden-install-parity + golden-install-tree`, () => { + const result = scopeFor([file]); + assert.strictEqual(result.code_changed, true, + `expected code_changed=true for ${file}, got: ${JSON.stringify(result)}`); + assert.ok( + result.targeted_tests.includes('tests/golden-install-parity.test.cjs'), + `expected golden-install-parity in targeted_tests for ${file}, got: ${JSON.stringify(result.targeted_tests)}`, + ); + assert.ok( + result.targeted_tests.includes('tests/golden-install-tree.test.cjs'), + `expected golden-install-tree in targeted_tests for ${file}, got: ${JSON.stringify(result.targeted_tests)}`, + ); + }); + } + + test('docs/ change does NOT select golden-install-parity (negative case)', () => { + const result = scopeFor(['docs/usage.md']); + assert.strictEqual(result.code_changed, false, + `expected code_changed=false for docs-only change, got: ${JSON.stringify(result)}`); + assert.ok( + !result.targeted_tests.includes('tests/golden-install-parity.test.cjs'), + `docs-only change must NOT select golden-install-parity, got: ${JSON.stringify(result.targeted_tests)}`, + ); + }); + + test('non-shipped scripts/ file does NOT select golden-install-tree (allowlist is exact)', () => { + // The rule allowlists only 3 named scripts + scripts/changeset|lib/. A + // sibling script that is code but NOT installed verbatim must NOT pull in + // the install-tree snapshot — proving this is not a blanket 'scripts/' + // prefix that would re-run the golden on every script edit. Assert on + // golden-install-TREE (the rule's dedicated test), not parity: many scripts/ + // paths legitimately select parity via the installer rule's + // path.includes('install') substring. + const result = scopeFor(['scripts/build-hooks.js']); + assert.ok( + !result.targeted_tests.includes('tests/golden-install-tree.test.cjs'), + `non-shipped script must NOT select golden-install-tree, got: ${JSON.stringify(result.targeted_tests)}`, + ); + }); +}); + describe('code_changed=false implies clean output invariant', () => { // Fix 1: when code_changed is false, full_matrix, targeted_tests, windows_tests // must ALL be empty/false — even if a docs path coincidentally diff --git a/tests/fixtures/install-tree/antigravity.json b/tests/fixtures/install-tree/antigravity.json new file mode 100644 index 000000000..129debac2 --- /dev/null +++ b/tests/fixtures/install-tree/antigravity.json @@ -0,0 +1,427 @@ +[ + ".gsd-profile", + ".gsd/defaults.json", + "agents/gsd-advisor-researcher.md", + "agents/gsd-ai-researcher.md", + "agents/gsd-assumptions-analyzer.md", + "agents/gsd-code-fixer.md", + "agents/gsd-code-reviewer.md", + "agents/gsd-codebase-mapper.md", + "agents/gsd-debug-session-manager.md", + "agents/gsd-debugger.md", + "agents/gsd-doc-classifier.md", + "agents/gsd-doc-synthesizer.md", + "agents/gsd-doc-verifier.md", + "agents/gsd-doc-writer.md", + "agents/gsd-domain-researcher.md", + "agents/gsd-eval-auditor.md", + "agents/gsd-eval-planner.md", + "agents/gsd-executor.md", + "agents/gsd-framework-selector.md", + "agents/gsd-integration-checker.md", + "agents/gsd-intel-updater.md", + "agents/gsd-mempalace-curator.md", + "agents/gsd-nyquist-auditor.md", + "agents/gsd-pattern-mapper.md", + "agents/gsd-phase-researcher.md", + "agents/gsd-plan-checker.md", + "agents/gsd-planner.md", + "agents/gsd-project-researcher.md", + "agents/gsd-research-synthesizer.md", + "agents/gsd-roadmapper.md", + "agents/gsd-security-auditor.md", + "agents/gsd-ui-auditor.md", + "agents/gsd-ui-checker.md", + "agents/gsd-ui-researcher.md", + "agents/gsd-user-profiler.md", + "agents/gsd-verifier.md", + "gsd-core/VERSION", + "gsd-core/bin/check-latest-version.cjs", + "gsd-core/bin/ensure-runtime-build.cjs", + "gsd-core/bin/gsd-tools.cjs", + "gsd-core/bin/gsd_run", + "gsd-core/bin/shared/config-defaults.manifest.json", + "gsd-core/bin/shared/config-schema.manifest.json", + "gsd-core/bin/shared/model-catalog.json", + "gsd-core/bin/shared/runtime-aliases.manifest.json", + "gsd-core/bin/verify-reapply-patches.cjs", + "gsd-core/contexts/dev.md", + "gsd-core/contexts/research.md", + "gsd-core/contexts/review.md", + "gsd-core/references/agent-contracts.md", + "gsd-core/references/agent-skills-bootstrap.md", + "gsd-core/references/ai-evals.md", + "gsd-core/references/ai-frameworks.md", + "gsd-core/references/api-coverage.md", + "gsd-core/references/artifact-types.md", + "gsd-core/references/autonomous-smart-discuss.md", + "gsd-core/references/checkpoints.md", + "gsd-core/references/common-bug-patterns.md", + "gsd-core/references/context-budget.md", + "gsd-core/references/continuation-format.md", + "gsd-core/references/debugger-philosophy.md", + "gsd-core/references/decimal-phase-calculation.md", + "gsd-core/references/doc-conflict-engine.md", + "gsd-core/references/domain-probes.md", + "gsd-core/references/edge-probe-fixtures/01-round-half-even/expected-coverage.json", + "gsd-core/references/edge-probe-fixtures/01-round-half-even/requirements.json", + "gsd-core/references/edge-probe-fixtures/02-merge-intervals/expected-coverage.json", + "gsd-core/references/edge-probe-fixtures/02-merge-intervals/requirements.json", + "gsd-core/references/edge-probe-fixtures/03-truncate-graphemes/expected-coverage.json", + "gsd-core/references/edge-probe-fixtures/03-truncate-graphemes/requirements.json", + "gsd-core/references/edge-probe-fixtures/04-money-rounding/expected-coverage.json", + "gsd-core/references/edge-probe-fixtures/04-money-rounding/requirements.json", + "gsd-core/references/edge-probe-fixtures/05-list-dedupe/expected-coverage.json", + "gsd-core/references/edge-probe-fixtures/05-list-dedupe/requirements.json", + "gsd-core/references/edge-probe-fixtures/06-resolved-mixed/expected-coverage.json", + "gsd-core/references/edge-probe-fixtures/06-resolved-mixed/requirements.json", + "gsd-core/references/edge-probe-fixtures/06-resolved-mixed/resolutions.json", + "gsd-core/references/edge-probe.md", + "gsd-core/references/execute-mvp-tdd.md", + "gsd-core/references/execute-phase-between-wave-reset.md", + "gsd-core/references/execute-phase-context-guard.md", + "gsd-core/references/execute-phase-wave-guard.md", + "gsd-core/references/executor-examples.md", + "gsd-core/references/few-shot-examples/plan-checker.md", + "gsd-core/references/few-shot-examples/verifier.md", + "gsd-core/references/gate-prompts.md", + "gsd-core/references/gates.md", + "gsd-core/references/git-integration.md", + "gsd-core/references/git-planning-commit.md", + "gsd-core/references/gsd-run-resolver.md", + "gsd-core/references/honest-verifier.md", + "gsd-core/references/ios-scaffold.md", + "gsd-core/references/loop-hook-dispatch.md", + "gsd-core/references/mandatory-initial-read.md", + "gsd-core/references/model-profile-resolution.md", + "gsd-core/references/model-profiles.md", + "gsd-core/references/mvp-concepts.md", + "gsd-core/references/phase-argument-parsing.md", + "gsd-core/references/planner-antipatterns.md", + "gsd-core/references/planner-chunked.md", + "gsd-core/references/planner-gap-closure.md", + "gsd-core/references/planner-graphify-auto-update.md", + "gsd-core/references/planner-guidance.md", + "gsd-core/references/planner-human-verify-mode.md", + "gsd-core/references/planner-interface-context.md", + "gsd-core/references/planner-load-graph-context.md", + "gsd-core/references/planner-mvp-mode.md", + "gsd-core/references/planner-reviews.md", + "gsd-core/references/planner-revision.md", + "gsd-core/references/planner-source-audit.md", + "gsd-core/references/planning-config.md", + "gsd-core/references/prohibition-probe-fixtures/01-streak-reminder/expected.json", + "gsd-core/references/prohibition-probe-fixtures/02-clean-utility/expected.json", + "gsd-core/references/prohibition-probe-fixtures/03-multi-prohibition/expected.json", + "gsd-core/references/prohibition-probe.md", + "gsd-core/references/project-skills-discovery.md", + "gsd-core/references/questioning.md", + "gsd-core/references/research-documentation-lookup.md", + "gsd-core/references/research-philosophy.md", + "gsd-core/references/research-verification-protocol.md", + "gsd-core/references/reviewer-instances.md", + "gsd-core/references/revision-loop.md", + "gsd-core/references/scout-codebase.md", + "gsd-core/references/security-asvs-levels.md", + "gsd-core/references/skeleton-template.md", + "gsd-core/references/sketch-interactivity.md", + "gsd-core/references/sketch-theme-system.md", + "gsd-core/references/sketch-tooling.md", + "gsd-core/references/sketch-variant-patterns.md", + "gsd-core/references/specless-probe-fallback.md", + "gsd-core/references/spidr-splitting.md", + "gsd-core/references/tdd.md", + "gsd-core/references/thinking-models-debug.md", + "gsd-core/references/thinking-models-execution.md", + "gsd-core/references/thinking-models-planning.md", + "gsd-core/references/thinking-models-research.md", + "gsd-core/references/thinking-models-verification.md", + "gsd-core/references/thinking-partner.md", + "gsd-core/references/ui-brand.md", + "gsd-core/references/ui-consideration-probe.md", + "gsd-core/references/universal-anti-patterns.md", + "gsd-core/references/untrusted-input-boundary.md", + "gsd-core/references/user-profiling.md", + "gsd-core/references/user-story-template.md", + "gsd-core/references/verification-overrides.md", + "gsd-core/references/verification-patterns.md", + "gsd-core/references/verify-mvp-mode.md", + "gsd-core/references/workstream-flag.md", + "gsd-core/references/worktree-branch-check.md", + "gsd-core/references/worktree-path-safety.md", + "gsd-core/templates/AI-SPEC.md", + "gsd-core/templates/DEBUG.md", + "gsd-core/templates/README.md", + "gsd-core/templates/SECURITY.md", + "gsd-core/templates/UAT.md", + "gsd-core/templates/UI-SPEC.md", + "gsd-core/templates/VALIDATION.md", + "gsd-core/templates/claude-md.md", + "gsd-core/templates/codebase/architecture.md", + "gsd-core/templates/codebase/concerns.md", + "gsd-core/templates/codebase/conventions.md", + "gsd-core/templates/codebase/integrations.md", + "gsd-core/templates/codebase/stack.md", + "gsd-core/templates/codebase/structure.md", + "gsd-core/templates/codebase/testing.md", + "gsd-core/templates/config.json", + "gsd-core/templates/context.md", + "gsd-core/templates/continue-here.md", + "gsd-core/templates/copilot-instructions.md", + "gsd-core/templates/debug-subagent-prompt.md", + "gsd-core/templates/dev-preferences.md", + "gsd-core/templates/discovery.md", + "gsd-core/templates/discussion-log.md", + "gsd-core/templates/milestone-archive.md", + "gsd-core/templates/milestone.md", + "gsd-core/templates/phase-prompt.md", + "gsd-core/templates/planner-subagent-prompt.md", + "gsd-core/templates/project.md", + "gsd-core/templates/requirements.md", + "gsd-core/templates/research-project/ARCHITECTURE.md", + "gsd-core/templates/research-project/FEATURES.md", + "gsd-core/templates/research-project/PITFALLS.md", + "gsd-core/templates/research-project/STACK.md", + "gsd-core/templates/research-project/SUMMARY.md", + "gsd-core/templates/research.md", + "gsd-core/templates/retrospective.md", + "gsd-core/templates/roadmap.md", + "gsd-core/templates/spec.md", + "gsd-core/templates/state.md", + "gsd-core/templates/summary-complex.md", + "gsd-core/templates/summary-minimal.md", + "gsd-core/templates/summary-standard.md", + "gsd-core/templates/summary.md", + "gsd-core/templates/user-profile.md", + "gsd-core/templates/user-setup.md", + "gsd-core/templates/verification-report.md", + "gsd-core/workflows/_runtime-launcher.snippet.sh", + "gsd-core/workflows/add-backlog.md", + "gsd-core/workflows/add-phase.md", + "gsd-core/workflows/add-tests.md", + "gsd-core/workflows/add-todo.md", + "gsd-core/workflows/ai-integration-phase.md", + "gsd-core/workflows/analyze-dependencies.md", + "gsd-core/workflows/audit-fix.md", + "gsd-core/workflows/audit-milestone.md", + "gsd-core/workflows/audit-uat.md", + "gsd-core/workflows/autonomous.md", + "gsd-core/workflows/check-todos.md", + "gsd-core/workflows/cleanup.md", + "gsd-core/workflows/code-review-fix.md", + "gsd-core/workflows/code-review.md", + "gsd-core/workflows/complete-milestone.md", + "gsd-core/workflows/debug.md", + "gsd-core/workflows/diagnose-issues.md", + "gsd-core/workflows/discovery-phase.md", + "gsd-core/workflows/discuss-phase-assumptions.md", + "gsd-core/workflows/discuss-phase-power.md", + "gsd-core/workflows/discuss-phase.md", + "gsd-core/workflows/discuss-phase/modes/advisor.md", + "gsd-core/workflows/discuss-phase/modes/all.md", + "gsd-core/workflows/discuss-phase/modes/analyze.md", + "gsd-core/workflows/discuss-phase/modes/auto.md", + "gsd-core/workflows/discuss-phase/modes/batch.md", + "gsd-core/workflows/discuss-phase/modes/chain.md", + "gsd-core/workflows/discuss-phase/modes/default.md", + "gsd-core/workflows/discuss-phase/modes/power.md", + "gsd-core/workflows/discuss-phase/modes/text.md", + "gsd-core/workflows/discuss-phase/templates/checkpoint.json", + "gsd-core/workflows/discuss-phase/templates/context.md", + "gsd-core/workflows/discuss-phase/templates/discussion-log.md", + "gsd-core/workflows/do.md", + "gsd-core/workflows/docs-update.md", + "gsd-core/workflows/edit-phase.md", + "gsd-core/workflows/eval-review.md", + "gsd-core/workflows/execute-phase.md", + "gsd-core/workflows/execute-phase/steps/codebase-drift-gate.md", + "gsd-core/workflows/execute-phase/steps/per-plan-worktree-gate.md", + "gsd-core/workflows/execute-phase/steps/post-merge-gate.md", + "gsd-core/workflows/execute-phase/steps/regression-gate.md", + "gsd-core/workflows/execute-phase/steps/worktree-recovery-policy.md", + "gsd-core/workflows/execute-plan.md", + "gsd-core/workflows/explore.md", + "gsd-core/workflows/extract-learnings.md", + "gsd-core/workflows/fast.md", + "gsd-core/workflows/forensics.md", + "gsd-core/workflows/graduation.md", + "gsd-core/workflows/health.md", + "gsd-core/workflows/help.md", + "gsd-core/workflows/help/modes/brief.md", + "gsd-core/workflows/help/modes/default.md", + "gsd-core/workflows/help/modes/full.md", + "gsd-core/workflows/help/modes/topic.md", + "gsd-core/workflows/import.md", + "gsd-core/workflows/inbox.md", + "gsd-core/workflows/ingest-docs.md", + "gsd-core/workflows/insert-phase.md", + "gsd-core/workflows/list-phase-assumptions.md", + "gsd-core/workflows/list-seeds.md", + "gsd-core/workflows/list-workspaces.md", + "gsd-core/workflows/manager.md", + "gsd-core/workflows/map-codebase.md", + "gsd-core/workflows/milestone-summary.md", + "gsd-core/workflows/mvp-phase.md", + "gsd-core/workflows/new-milestone.md", + "gsd-core/workflows/new-project.md", + "gsd-core/workflows/new-workspace.md", + "gsd-core/workflows/next.md", + "gsd-core/workflows/node-repair.md", + "gsd-core/workflows/note.md", + "gsd-core/workflows/onboard.md", + "gsd-core/workflows/pause-work.md", + "gsd-core/workflows/plan-milestone-gaps.md", + "gsd-core/workflows/plan-phase.md", + "gsd-core/workflows/plan-phase/steps/closed-phase-gate.md", + "gsd-core/workflows/plan-phase/steps/prd-express-path.md", + "gsd-core/workflows/plan-phase/steps/windows-troubleshooting.md", + "gsd-core/workflows/plan-review-convergence.md", + "gsd-core/workflows/plant-seed.md", + "gsd-core/workflows/pr-branch.md", + "gsd-core/workflows/profile-user.md", + "gsd-core/workflows/progress.md", + "gsd-core/workflows/quick.md", + "gsd-core/workflows/reapply-patches.md", + "gsd-core/workflows/remove-phase.md", + "gsd-core/workflows/remove-workspace.md", + "gsd-core/workflows/resume-project.md", + "gsd-core/workflows/review.md", + "gsd-core/workflows/scan.md", + "gsd-core/workflows/secure-phase.md", + "gsd-core/workflows/session-report.md", + "gsd-core/workflows/settings-advanced.md", + "gsd-core/workflows/settings-integrations.md", + "gsd-core/workflows/settings.md", + "gsd-core/workflows/ship.md", + "gsd-core/workflows/sketch-wrap-up.md", + "gsd-core/workflows/sketch.md", + "gsd-core/workflows/smart-entry.md", + "gsd-core/workflows/spec-phase.md", + "gsd-core/workflows/spike-wrap-up.md", + "gsd-core/workflows/spike.md", + "gsd-core/workflows/stats.md", + "gsd-core/workflows/sync-skills.md", + "gsd-core/workflows/thread.md", + "gsd-core/workflows/transition.md", + "gsd-core/workflows/ui-phase.md", + "gsd-core/workflows/ui-review.md", + "gsd-core/workflows/ultraplan-phase.md", + "gsd-core/workflows/undo.md", + "gsd-core/workflows/update.md", + "gsd-core/workflows/validate-phase.md", + "gsd-core/workflows/verify-phase.md", + "gsd-core/workflows/verify-work.md", + "hooks/gsd-check-update-worker.js", + "hooks/gsd-check-update.js", + "hooks/gsd-config-reload.js", + "hooks/gsd-context-monitor.js", + "hooks/gsd-cursor-post-tool.js", + "hooks/gsd-cursor-pre-tool.js", + "hooks/gsd-cursor-session-start.js", + "hooks/gsd-cursor-stop.js", + "hooks/gsd-cursor-subagent-start.js", + "hooks/gsd-cursor-subagent-stop.js", + "hooks/gsd-ensure-canonical-path.js", + "hooks/gsd-graphify-update.sh", + "hooks/gsd-phase-boundary.sh", + "hooks/gsd-prompt-guard.js", + "hooks/gsd-read-guard.js", + "hooks/gsd-read-injection-scanner.js", + "hooks/gsd-session-state.sh", + "hooks/gsd-statusline.js", + "hooks/gsd-update-banner.js", + "hooks/gsd-validate-commit.sh", + "hooks/gsd-windsurf-pre-command.js", + "hooks/gsd-windsurf-pre-write.js", + "hooks/gsd-workflow-guard.js", + "hooks/gsd-worktree-path-guard.js", + "hooks/lib/git-cmd.js", + "hooks/lib/gsd-graphify-rebuild.sh", + "hooks/managed-hooks-registry.cjs", + "mcp_config.json", + "package.json", + "scripts/changeset/README.md", + "scripts/changeset/cli.cjs", + "scripts/changeset/github-release-notes.cjs", + "scripts/changeset/lint.cjs", + "scripts/changeset/new.cjs", + "scripts/changeset/parse.cjs", + "scripts/changeset/render.cjs", + "scripts/changeset/serialize.cjs", + "scripts/fix-slash-commands.cjs", + "scripts/gen-capability-registry.cjs", + "scripts/gen-loop-host-contract.cjs", + "scripts/lib/allowlist-ratchet.cjs", + "scripts/lib/cli-exit.cjs", + "skills/gsd-add-tests/SKILL.md", + "skills/gsd-ai-integration-phase/SKILL.md", + "skills/gsd-audit-fix/SKILL.md", + "skills/gsd-audit-milestone/SKILL.md", + "skills/gsd-audit-uat/SKILL.md", + "skills/gsd-autonomous/SKILL.md", + "skills/gsd-capture/SKILL.md", + "skills/gsd-cleanup/SKILL.md", + "skills/gsd-code-review/SKILL.md", + "skills/gsd-complete-milestone/SKILL.md", + "skills/gsd-config/SKILL.md", + "skills/gsd-debug/SKILL.md", + "skills/gsd-discuss-phase/SKILL.md", + "skills/gsd-docs-update/SKILL.md", + "skills/gsd-eval-review/SKILL.md", + "skills/gsd-execute-phase/SKILL.md", + "skills/gsd-explore/SKILL.md", + "skills/gsd-extract-learnings/SKILL.md", + "skills/gsd-fast/SKILL.md", + "skills/gsd-forensics/SKILL.md", + "skills/gsd-graphify/SKILL.md", + "skills/gsd-health/SKILL.md", + "skills/gsd-help/SKILL.md", + "skills/gsd-import/SKILL.md", + "skills/gsd-inbox/SKILL.md", + "skills/gsd-ingest-docs/SKILL.md", + "skills/gsd-manager/SKILL.md", + "skills/gsd-map-codebase/SKILL.md", + "skills/gsd-mempalace-capture/SKILL.md", + "skills/gsd-mempalace-recall/SKILL.md", + "skills/gsd-milestone-summary/SKILL.md", + "skills/gsd-mvp-phase/SKILL.md", + "skills/gsd-new-milestone/SKILL.md", + "skills/gsd-new-project/SKILL.md", + "skills/gsd-next/SKILL.md", + "skills/gsd-ns-context/SKILL.md", + "skills/gsd-ns-ideate/SKILL.md", + "skills/gsd-ns-manage/SKILL.md", + "skills/gsd-ns-project/SKILL.md", + "skills/gsd-ns-review/SKILL.md", + "skills/gsd-ns-workflow/SKILL.md", + "skills/gsd-onboard/SKILL.md", + "skills/gsd-pause-work/SKILL.md", + "skills/gsd-phase/SKILL.md", + "skills/gsd-plan-phase/SKILL.md", + "skills/gsd-plan-review-convergence/SKILL.md", + "skills/gsd-pr-branch/SKILL.md", + "skills/gsd-profile-user/SKILL.md", + "skills/gsd-progress/SKILL.md", + "skills/gsd-quick/SKILL.md", + "skills/gsd-resume-work/SKILL.md", + "skills/gsd-review-backlog/SKILL.md", + "skills/gsd-review/SKILL.md", + "skills/gsd-secure-phase/SKILL.md", + "skills/gsd-settings/SKILL.md", + "skills/gsd-ship/SKILL.md", + "skills/gsd-sketch/SKILL.md", + "skills/gsd-spec-phase/SKILL.md", + "skills/gsd-spike/SKILL.md", + "skills/gsd-stats/SKILL.md", + "skills/gsd-surface/SKILL.md", + "skills/gsd-thread/SKILL.md", + "skills/gsd-ui-phase/SKILL.md", + "skills/gsd-ui-review/SKILL.md", + "skills/gsd-ultraplan-phase/SKILL.md", + "skills/gsd-undo/SKILL.md", + "skills/gsd-update/SKILL.md", + "skills/gsd-validate-phase/SKILL.md", + "skills/gsd-verify-work/SKILL.md", + "skills/gsd-workspace/SKILL.md", + "skills/gsd-workstreams/SKILL.md" +] diff --git a/tests/fixtures/install-tree/augment.json b/tests/fixtures/install-tree/augment.json new file mode 100644 index 000000000..1c5977a7c --- /dev/null +++ b/tests/fixtures/install-tree/augment.json @@ -0,0 +1,498 @@ +[ + ".gsd-profile", + ".gsd/defaults.json", + "agents/gsd-advisor-researcher.md", + "agents/gsd-ai-researcher.md", + "agents/gsd-assumptions-analyzer.md", + "agents/gsd-code-fixer.md", + "agents/gsd-code-reviewer.md", + "agents/gsd-codebase-mapper.md", + "agents/gsd-debug-session-manager.md", + "agents/gsd-debugger.md", + "agents/gsd-doc-classifier.md", + "agents/gsd-doc-synthesizer.md", + "agents/gsd-doc-verifier.md", + "agents/gsd-doc-writer.md", + "agents/gsd-domain-researcher.md", + "agents/gsd-eval-auditor.md", + "agents/gsd-eval-planner.md", + "agents/gsd-executor.md", + "agents/gsd-framework-selector.md", + "agents/gsd-integration-checker.md", + "agents/gsd-intel-updater.md", + "agents/gsd-mempalace-curator.md", + "agents/gsd-nyquist-auditor.md", + "agents/gsd-pattern-mapper.md", + "agents/gsd-phase-researcher.md", + "agents/gsd-plan-checker.md", + "agents/gsd-planner.md", + "agents/gsd-project-researcher.md", + "agents/gsd-research-synthesizer.md", + "agents/gsd-roadmapper.md", + "agents/gsd-security-auditor.md", + "agents/gsd-ui-auditor.md", + "agents/gsd-ui-checker.md", + "agents/gsd-ui-researcher.md", + "agents/gsd-user-profiler.md", + "agents/gsd-verifier.md", + "commands/gsd-add-tests.md", + "commands/gsd-ai-integration-phase.md", + "commands/gsd-audit-fix.md", + "commands/gsd-audit-milestone.md", + "commands/gsd-audit-uat.md", + "commands/gsd-autonomous.md", + "commands/gsd-capture.md", + "commands/gsd-cleanup.md", + "commands/gsd-code-review.md", + "commands/gsd-complete-milestone.md", + "commands/gsd-config.md", + "commands/gsd-debug.md", + "commands/gsd-discuss-phase.md", + "commands/gsd-docs-update.md", + "commands/gsd-eval-review.md", + "commands/gsd-execute-phase.md", + "commands/gsd-explore.md", + "commands/gsd-extract-learnings.md", + "commands/gsd-fast.md", + "commands/gsd-forensics.md", + "commands/gsd-graphify.md", + "commands/gsd-health.md", + "commands/gsd-help.md", + "commands/gsd-import.md", + "commands/gsd-inbox.md", + "commands/gsd-ingest-docs.md", + "commands/gsd-manager.md", + "commands/gsd-map-codebase.md", + "commands/gsd-mempalace-capture.md", + "commands/gsd-mempalace-recall.md", + "commands/gsd-milestone-summary.md", + "commands/gsd-mvp-phase.md", + "commands/gsd-new-milestone.md", + "commands/gsd-new-project.md", + "commands/gsd-next.md", + "commands/gsd-ns-context.md", + "commands/gsd-ns-ideate.md", + "commands/gsd-ns-manage.md", + "commands/gsd-ns-project.md", + "commands/gsd-ns-review.md", + "commands/gsd-ns-workflow.md", + "commands/gsd-onboard.md", + "commands/gsd-pause-work.md", + "commands/gsd-phase.md", + "commands/gsd-plan-phase.md", + "commands/gsd-plan-review-convergence.md", + "commands/gsd-pr-branch.md", + "commands/gsd-profile-user.md", + "commands/gsd-progress.md", + "commands/gsd-quick.md", + "commands/gsd-resume-work.md", + "commands/gsd-review-backlog.md", + "commands/gsd-review.md", + "commands/gsd-secure-phase.md", + "commands/gsd-settings.md", + "commands/gsd-ship.md", + "commands/gsd-sketch.md", + "commands/gsd-spec-phase.md", + "commands/gsd-spike.md", + "commands/gsd-stats.md", + "commands/gsd-surface.md", + "commands/gsd-thread.md", + "commands/gsd-ui-phase.md", + "commands/gsd-ui-review.md", + "commands/gsd-ultraplan-phase.md", + "commands/gsd-undo.md", + "commands/gsd-update.md", + "commands/gsd-validate-phase.md", + "commands/gsd-verify-work.md", + "commands/gsd-workspace.md", + "commands/gsd-workstreams.md", + "gsd-core/VERSION", + "gsd-core/bin/check-latest-version.cjs", + "gsd-core/bin/ensure-runtime-build.cjs", + "gsd-core/bin/gsd-tools.cjs", + "gsd-core/bin/gsd_run", + "gsd-core/bin/shared/config-defaults.manifest.json", + "gsd-core/bin/shared/config-schema.manifest.json", + "gsd-core/bin/shared/model-catalog.json", + "gsd-core/bin/shared/runtime-aliases.manifest.json", + "gsd-core/bin/verify-reapply-patches.cjs", + "gsd-core/contexts/dev.md", + "gsd-core/contexts/research.md", + "gsd-core/contexts/review.md", + "gsd-core/references/agent-contracts.md", + "gsd-core/references/agent-skills-bootstrap.md", + "gsd-core/references/ai-evals.md", + "gsd-core/references/ai-frameworks.md", + "gsd-core/references/api-coverage.md", + "gsd-core/references/artifact-types.md", + "gsd-core/references/autonomous-smart-discuss.md", + "gsd-core/references/checkpoints.md", + "gsd-core/references/common-bug-patterns.md", + "gsd-core/references/context-budget.md", + "gsd-core/references/continuation-format.md", + "gsd-core/references/debugger-philosophy.md", + "gsd-core/references/decimal-phase-calculation.md", + "gsd-core/references/doc-conflict-engine.md", + "gsd-core/references/domain-probes.md", + "gsd-core/references/edge-probe-fixtures/01-round-half-even/expected-coverage.json", + "gsd-core/references/edge-probe-fixtures/01-round-half-even/requirements.json", + "gsd-core/references/edge-probe-fixtures/02-merge-intervals/expected-coverage.json", + "gsd-core/references/edge-probe-fixtures/02-merge-intervals/requirements.json", + "gsd-core/references/edge-probe-fixtures/03-truncate-graphemes/expected-coverage.json", + "gsd-core/references/edge-probe-fixtures/03-truncate-graphemes/requirements.json", + "gsd-core/references/edge-probe-fixtures/04-money-rounding/expected-coverage.json", + "gsd-core/references/edge-probe-fixtures/04-money-rounding/requirements.json", + "gsd-core/references/edge-probe-fixtures/05-list-dedupe/expected-coverage.json", + "gsd-core/references/edge-probe-fixtures/05-list-dedupe/requirements.json", + "gsd-core/references/edge-probe-fixtures/06-resolved-mixed/expected-coverage.json", + "gsd-core/references/edge-probe-fixtures/06-resolved-mixed/requirements.json", + "gsd-core/references/edge-probe-fixtures/06-resolved-mixed/resolutions.json", + "gsd-core/references/edge-probe.md", + "gsd-core/references/execute-mvp-tdd.md", + "gsd-core/references/execute-phase-between-wave-reset.md", + "gsd-core/references/execute-phase-context-guard.md", + "gsd-core/references/execute-phase-wave-guard.md", + "gsd-core/references/executor-examples.md", + "gsd-core/references/few-shot-examples/plan-checker.md", + "gsd-core/references/few-shot-examples/verifier.md", + "gsd-core/references/gate-prompts.md", + "gsd-core/references/gates.md", + "gsd-core/references/git-integration.md", + "gsd-core/references/git-planning-commit.md", + "gsd-core/references/gsd-run-resolver.md", + "gsd-core/references/honest-verifier.md", + "gsd-core/references/ios-scaffold.md", + "gsd-core/references/loop-hook-dispatch.md", + "gsd-core/references/mandatory-initial-read.md", + "gsd-core/references/model-profile-resolution.md", + "gsd-core/references/model-profiles.md", + "gsd-core/references/mvp-concepts.md", + "gsd-core/references/phase-argument-parsing.md", + "gsd-core/references/planner-antipatterns.md", + "gsd-core/references/planner-chunked.md", + "gsd-core/references/planner-gap-closure.md", + "gsd-core/references/planner-graphify-auto-update.md", + "gsd-core/references/planner-guidance.md", + "gsd-core/references/planner-human-verify-mode.md", + "gsd-core/references/planner-interface-context.md", + "gsd-core/references/planner-load-graph-context.md", + "gsd-core/references/planner-mvp-mode.md", + "gsd-core/references/planner-reviews.md", + "gsd-core/references/planner-revision.md", + "gsd-core/references/planner-source-audit.md", + "gsd-core/references/planning-config.md", + "gsd-core/references/prohibition-probe-fixtures/01-streak-reminder/expected.json", + "gsd-core/references/prohibition-probe-fixtures/02-clean-utility/expected.json", + "gsd-core/references/prohibition-probe-fixtures/03-multi-prohibition/expected.json", + "gsd-core/references/prohibition-probe.md", + "gsd-core/references/project-skills-discovery.md", + "gsd-core/references/questioning.md", + "gsd-core/references/research-documentation-lookup.md", + "gsd-core/references/research-philosophy.md", + "gsd-core/references/research-verification-protocol.md", + "gsd-core/references/reviewer-instances.md", + "gsd-core/references/revision-loop.md", + "gsd-core/references/scout-codebase.md", + "gsd-core/references/security-asvs-levels.md", + "gsd-core/references/skeleton-template.md", + "gsd-core/references/sketch-interactivity.md", + "gsd-core/references/sketch-theme-system.md", + "gsd-core/references/sketch-tooling.md", + "gsd-core/references/sketch-variant-patterns.md", + "gsd-core/references/specless-probe-fallback.md", + "gsd-core/references/spidr-splitting.md", + "gsd-core/references/tdd.md", + "gsd-core/references/thinking-models-debug.md", + "gsd-core/references/thinking-models-execution.md", + "gsd-core/references/thinking-models-planning.md", + "gsd-core/references/thinking-models-research.md", + "gsd-core/references/thinking-models-verification.md", + "gsd-core/references/thinking-partner.md", + "gsd-core/references/ui-brand.md", + "gsd-core/references/ui-consideration-probe.md", + "gsd-core/references/universal-anti-patterns.md", + "gsd-core/references/untrusted-input-boundary.md", + "gsd-core/references/user-profiling.md", + "gsd-core/references/user-story-template.md", + "gsd-core/references/verification-overrides.md", + "gsd-core/references/verification-patterns.md", + "gsd-core/references/verify-mvp-mode.md", + "gsd-core/references/workstream-flag.md", + "gsd-core/references/worktree-branch-check.md", + "gsd-core/references/worktree-path-safety.md", + "gsd-core/templates/AI-SPEC.md", + "gsd-core/templates/DEBUG.md", + "gsd-core/templates/README.md", + "gsd-core/templates/SECURITY.md", + "gsd-core/templates/UAT.md", + "gsd-core/templates/UI-SPEC.md", + "gsd-core/templates/VALIDATION.md", + "gsd-core/templates/claude-md.md", + "gsd-core/templates/codebase/architecture.md", + "gsd-core/templates/codebase/concerns.md", + "gsd-core/templates/codebase/conventions.md", + "gsd-core/templates/codebase/integrations.md", + "gsd-core/templates/codebase/stack.md", + "gsd-core/templates/codebase/structure.md", + "gsd-core/templates/codebase/testing.md", + "gsd-core/templates/config.json", + "gsd-core/templates/context.md", + "gsd-core/templates/continue-here.md", + "gsd-core/templates/copilot-instructions.md", + "gsd-core/templates/debug-subagent-prompt.md", + "gsd-core/templates/dev-preferences.md", + "gsd-core/templates/discovery.md", + "gsd-core/templates/discussion-log.md", + "gsd-core/templates/milestone-archive.md", + "gsd-core/templates/milestone.md", + "gsd-core/templates/phase-prompt.md", + "gsd-core/templates/planner-subagent-prompt.md", + "gsd-core/templates/project.md", + "gsd-core/templates/requirements.md", + "gsd-core/templates/research-project/ARCHITECTURE.md", + "gsd-core/templates/research-project/FEATURES.md", + "gsd-core/templates/research-project/PITFALLS.md", + "gsd-core/templates/research-project/STACK.md", + "gsd-core/templates/research-project/SUMMARY.md", + "gsd-core/templates/research.md", + "gsd-core/templates/retrospective.md", + "gsd-core/templates/roadmap.md", + "gsd-core/templates/spec.md", + "gsd-core/templates/state.md", + "gsd-core/templates/summary-complex.md", + "gsd-core/templates/summary-minimal.md", + "gsd-core/templates/summary-standard.md", + "gsd-core/templates/summary.md", + "gsd-core/templates/user-profile.md", + "gsd-core/templates/user-setup.md", + "gsd-core/templates/verification-report.md", + "gsd-core/workflows/_runtime-launcher.snippet.sh", + "gsd-core/workflows/add-backlog.md", + "gsd-core/workflows/add-phase.md", + "gsd-core/workflows/add-tests.md", + "gsd-core/workflows/add-todo.md", + "gsd-core/workflows/ai-integration-phase.md", + "gsd-core/workflows/analyze-dependencies.md", + "gsd-core/workflows/audit-fix.md", + "gsd-core/workflows/audit-milestone.md", + "gsd-core/workflows/audit-uat.md", + "gsd-core/workflows/autonomous.md", + "gsd-core/workflows/check-todos.md", + "gsd-core/workflows/cleanup.md", + "gsd-core/workflows/code-review-fix.md", + "gsd-core/workflows/code-review.md", + "gsd-core/workflows/complete-milestone.md", + "gsd-core/workflows/debug.md", + "gsd-core/workflows/diagnose-issues.md", + "gsd-core/workflows/discovery-phase.md", + "gsd-core/workflows/discuss-phase-assumptions.md", + "gsd-core/workflows/discuss-phase-power.md", + "gsd-core/workflows/discuss-phase.md", + "gsd-core/workflows/discuss-phase/modes/advisor.md", + "gsd-core/workflows/discuss-phase/modes/all.md", + "gsd-core/workflows/discuss-phase/modes/analyze.md", + "gsd-core/workflows/discuss-phase/modes/auto.md", + "gsd-core/workflows/discuss-phase/modes/batch.md", + "gsd-core/workflows/discuss-phase/modes/chain.md", + "gsd-core/workflows/discuss-phase/modes/default.md", + "gsd-core/workflows/discuss-phase/modes/power.md", + "gsd-core/workflows/discuss-phase/modes/text.md", + "gsd-core/workflows/discuss-phase/templates/checkpoint.json", + "gsd-core/workflows/discuss-phase/templates/context.md", + "gsd-core/workflows/discuss-phase/templates/discussion-log.md", + "gsd-core/workflows/do.md", + "gsd-core/workflows/docs-update.md", + "gsd-core/workflows/edit-phase.md", + "gsd-core/workflows/eval-review.md", + "gsd-core/workflows/execute-phase.md", + "gsd-core/workflows/execute-phase/steps/codebase-drift-gate.md", + "gsd-core/workflows/execute-phase/steps/per-plan-worktree-gate.md", + "gsd-core/workflows/execute-phase/steps/post-merge-gate.md", + "gsd-core/workflows/execute-phase/steps/regression-gate.md", + "gsd-core/workflows/execute-phase/steps/worktree-recovery-policy.md", + "gsd-core/workflows/execute-plan.md", + "gsd-core/workflows/explore.md", + "gsd-core/workflows/extract-learnings.md", + "gsd-core/workflows/fast.md", + "gsd-core/workflows/forensics.md", + "gsd-core/workflows/graduation.md", + "gsd-core/workflows/health.md", + "gsd-core/workflows/help.md", + "gsd-core/workflows/help/modes/brief.md", + "gsd-core/workflows/help/modes/default.md", + "gsd-core/workflows/help/modes/full.md", + "gsd-core/workflows/help/modes/topic.md", + "gsd-core/workflows/import.md", + "gsd-core/workflows/inbox.md", + "gsd-core/workflows/ingest-docs.md", + "gsd-core/workflows/insert-phase.md", + "gsd-core/workflows/list-phase-assumptions.md", + "gsd-core/workflows/list-seeds.md", + "gsd-core/workflows/list-workspaces.md", + "gsd-core/workflows/manager.md", + "gsd-core/workflows/map-codebase.md", + "gsd-core/workflows/milestone-summary.md", + "gsd-core/workflows/mvp-phase.md", + "gsd-core/workflows/new-milestone.md", + "gsd-core/workflows/new-project.md", + "gsd-core/workflows/new-workspace.md", + "gsd-core/workflows/next.md", + "gsd-core/workflows/node-repair.md", + "gsd-core/workflows/note.md", + "gsd-core/workflows/onboard.md", + "gsd-core/workflows/pause-work.md", + "gsd-core/workflows/plan-milestone-gaps.md", + "gsd-core/workflows/plan-phase.md", + "gsd-core/workflows/plan-phase/steps/closed-phase-gate.md", + "gsd-core/workflows/plan-phase/steps/prd-express-path.md", + "gsd-core/workflows/plan-phase/steps/windows-troubleshooting.md", + "gsd-core/workflows/plan-review-convergence.md", + "gsd-core/workflows/plant-seed.md", + "gsd-core/workflows/pr-branch.md", + "gsd-core/workflows/profile-user.md", + "gsd-core/workflows/progress.md", + "gsd-core/workflows/quick.md", + "gsd-core/workflows/reapply-patches.md", + "gsd-core/workflows/remove-phase.md", + "gsd-core/workflows/remove-workspace.md", + "gsd-core/workflows/resume-project.md", + "gsd-core/workflows/review.md", + "gsd-core/workflows/scan.md", + "gsd-core/workflows/secure-phase.md", + "gsd-core/workflows/session-report.md", + "gsd-core/workflows/settings-advanced.md", + "gsd-core/workflows/settings-integrations.md", + "gsd-core/workflows/settings.md", + "gsd-core/workflows/ship.md", + "gsd-core/workflows/sketch-wrap-up.md", + "gsd-core/workflows/sketch.md", + "gsd-core/workflows/smart-entry.md", + "gsd-core/workflows/spec-phase.md", + "gsd-core/workflows/spike-wrap-up.md", + "gsd-core/workflows/spike.md", + "gsd-core/workflows/stats.md", + "gsd-core/workflows/sync-skills.md", + "gsd-core/workflows/thread.md", + "gsd-core/workflows/transition.md", + "gsd-core/workflows/ui-phase.md", + "gsd-core/workflows/ui-review.md", + "gsd-core/workflows/ultraplan-phase.md", + "gsd-core/workflows/undo.md", + "gsd-core/workflows/update.md", + "gsd-core/workflows/validate-phase.md", + "gsd-core/workflows/verify-phase.md", + "gsd-core/workflows/verify-work.md", + "hooks/gsd-check-update-worker.js", + "hooks/gsd-check-update.js", + "hooks/gsd-config-reload.js", + "hooks/gsd-context-monitor.js", + "hooks/gsd-cursor-post-tool.js", + "hooks/gsd-cursor-pre-tool.js", + "hooks/gsd-cursor-session-start.js", + "hooks/gsd-cursor-stop.js", + "hooks/gsd-cursor-subagent-start.js", + "hooks/gsd-cursor-subagent-stop.js", + "hooks/gsd-ensure-canonical-path.js", + "hooks/gsd-graphify-update.sh", + "hooks/gsd-phase-boundary.sh", + "hooks/gsd-prompt-guard.js", + "hooks/gsd-read-guard.js", + "hooks/gsd-read-injection-scanner.js", + "hooks/gsd-session-state.sh", + "hooks/gsd-statusline.js", + "hooks/gsd-update-banner.js", + "hooks/gsd-validate-commit.sh", + "hooks/gsd-windsurf-pre-command.js", + "hooks/gsd-windsurf-pre-write.js", + "hooks/gsd-workflow-guard.js", + "hooks/gsd-worktree-path-guard.js", + "hooks/lib/git-cmd.js", + "hooks/lib/gsd-graphify-rebuild.sh", + "hooks/managed-hooks-registry.cjs", + "package.json", + "scripts/changeset/README.md", + "scripts/changeset/cli.cjs", + "scripts/changeset/github-release-notes.cjs", + "scripts/changeset/lint.cjs", + "scripts/changeset/new.cjs", + "scripts/changeset/parse.cjs", + "scripts/changeset/render.cjs", + "scripts/changeset/serialize.cjs", + "scripts/fix-slash-commands.cjs", + "scripts/gen-capability-registry.cjs", + "scripts/gen-loop-host-contract.cjs", + "scripts/lib/allowlist-ratchet.cjs", + "scripts/lib/cli-exit.cjs", + "skills/gsd-ns-context/SKILL.md", + "skills/gsd-ns-context/skills/docs-update/SKILL.md", + "skills/gsd-ns-context/skills/extract-learnings/SKILL.md", + "skills/gsd-ns-context/skills/graphify/SKILL.md", + "skills/gsd-ns-context/skills/map-codebase/SKILL.md", + "skills/gsd-ns-context/skills/mempalace-capture/SKILL.md", + "skills/gsd-ns-context/skills/mempalace-recall/SKILL.md", + "skills/gsd-ns-ideate/SKILL.md", + "skills/gsd-ns-ideate/skills/capture/SKILL.md", + "skills/gsd-ns-ideate/skills/explore/SKILL.md", + "skills/gsd-ns-ideate/skills/sketch/SKILL.md", + "skills/gsd-ns-ideate/skills/spec-phase/SKILL.md", + "skills/gsd-ns-ideate/skills/spike/SKILL.md", + "skills/gsd-ns-manage/SKILL.md", + "skills/gsd-ns-manage/skills/cleanup/SKILL.md", + "skills/gsd-ns-manage/skills/config/SKILL.md", + "skills/gsd-ns-manage/skills/health/SKILL.md", + "skills/gsd-ns-manage/skills/help/SKILL.md", + "skills/gsd-ns-manage/skills/inbox/SKILL.md", + "skills/gsd-ns-manage/skills/manager/SKILL.md", + "skills/gsd-ns-manage/skills/pause-work/SKILL.md", + "skills/gsd-ns-manage/skills/pr-branch/SKILL.md", + "skills/gsd-ns-manage/skills/resume-work/SKILL.md", + "skills/gsd-ns-manage/skills/settings/SKILL.md", + "skills/gsd-ns-manage/skills/ship/SKILL.md", + "skills/gsd-ns-manage/skills/stats/SKILL.md", + "skills/gsd-ns-manage/skills/surface/SKILL.md", + "skills/gsd-ns-manage/skills/thread/SKILL.md", + "skills/gsd-ns-manage/skills/undo/SKILL.md", + "skills/gsd-ns-manage/skills/update/SKILL.md", + "skills/gsd-ns-manage/skills/workspace/SKILL.md", + "skills/gsd-ns-manage/skills/workstreams/SKILL.md", + "skills/gsd-ns-project/SKILL.md", + "skills/gsd-ns-project/skills/audit-milestone/SKILL.md", + "skills/gsd-ns-project/skills/complete-milestone/SKILL.md", + "skills/gsd-ns-project/skills/import/SKILL.md", + "skills/gsd-ns-project/skills/ingest-docs/SKILL.md", + "skills/gsd-ns-project/skills/milestone-summary/SKILL.md", + "skills/gsd-ns-project/skills/new-milestone/SKILL.md", + "skills/gsd-ns-project/skills/new-project/SKILL.md", + "skills/gsd-ns-project/skills/onboard/SKILL.md", + "skills/gsd-ns-project/skills/profile-user/SKILL.md", + "skills/gsd-ns-project/skills/review-backlog/SKILL.md", + "skills/gsd-ns-review/SKILL.md", + "skills/gsd-ns-review/skills/audit-fix/SKILL.md", + "skills/gsd-ns-review/skills/audit-uat/SKILL.md", + "skills/gsd-ns-review/skills/code-review/SKILL.md", + "skills/gsd-ns-review/skills/debug/SKILL.md", + "skills/gsd-ns-review/skills/eval-review/SKILL.md", + "skills/gsd-ns-review/skills/forensics/SKILL.md", + "skills/gsd-ns-review/skills/review/SKILL.md", + "skills/gsd-ns-review/skills/secure-phase/SKILL.md", + "skills/gsd-ns-review/skills/ui-phase/SKILL.md", + "skills/gsd-ns-review/skills/ui-review/SKILL.md", + "skills/gsd-ns-review/skills/validate-phase/SKILL.md", + "skills/gsd-ns-workflow/SKILL.md", + "skills/gsd-ns-workflow/skills/add-tests/SKILL.md", + "skills/gsd-ns-workflow/skills/ai-integration-phase/SKILL.md", + "skills/gsd-ns-workflow/skills/autonomous/SKILL.md", + "skills/gsd-ns-workflow/skills/discuss-phase/SKILL.md", + "skills/gsd-ns-workflow/skills/execute-phase/SKILL.md", + "skills/gsd-ns-workflow/skills/fast/SKILL.md", + "skills/gsd-ns-workflow/skills/mvp-phase/SKILL.md", + "skills/gsd-ns-workflow/skills/next/SKILL.md", + "skills/gsd-ns-workflow/skills/phase/SKILL.md", + "skills/gsd-ns-workflow/skills/plan-phase/SKILL.md", + "skills/gsd-ns-workflow/skills/plan-review-convergence/SKILL.md", + "skills/gsd-ns-workflow/skills/progress/SKILL.md", + "skills/gsd-ns-workflow/skills/quick/SKILL.md", + "skills/gsd-ns-workflow/skills/spec-phase/SKILL.md", + "skills/gsd-ns-workflow/skills/ultraplan-phase/SKILL.md", + "skills/gsd-ns-workflow/skills/verify-work/SKILL.md" +] diff --git a/tests/fixtures/install-tree/claude-local.json b/tests/fixtures/install-tree/claude-local.json new file mode 100644 index 000000000..46d4776ea --- /dev/null +++ b/tests/fixtures/install-tree/claude-local.json @@ -0,0 +1,425 @@ +[ + ".gsd-profile", + "agents/gsd-advisor-researcher.md", + "agents/gsd-ai-researcher.md", + "agents/gsd-assumptions-analyzer.md", + "agents/gsd-code-fixer.md", + "agents/gsd-code-reviewer.md", + "agents/gsd-codebase-mapper.md", + "agents/gsd-debug-session-manager.md", + "agents/gsd-debugger.md", + "agents/gsd-doc-classifier.md", + "agents/gsd-doc-synthesizer.md", + "agents/gsd-doc-verifier.md", + "agents/gsd-doc-writer.md", + "agents/gsd-domain-researcher.md", + "agents/gsd-eval-auditor.md", + "agents/gsd-eval-planner.md", + "agents/gsd-executor.md", + "agents/gsd-framework-selector.md", + "agents/gsd-integration-checker.md", + "agents/gsd-intel-updater.md", + "agents/gsd-mempalace-curator.md", + "agents/gsd-nyquist-auditor.md", + "agents/gsd-pattern-mapper.md", + "agents/gsd-phase-researcher.md", + "agents/gsd-plan-checker.md", + "agents/gsd-planner.md", + "agents/gsd-project-researcher.md", + "agents/gsd-research-synthesizer.md", + "agents/gsd-roadmapper.md", + "agents/gsd-security-auditor.md", + "agents/gsd-ui-auditor.md", + "agents/gsd-ui-checker.md", + "agents/gsd-ui-researcher.md", + "agents/gsd-user-profiler.md", + "agents/gsd-verifier.md", + "commands/gsd-add-tests.md", + "commands/gsd-ai-integration-phase.md", + "commands/gsd-audit-fix.md", + "commands/gsd-audit-milestone.md", + "commands/gsd-audit-uat.md", + "commands/gsd-autonomous.md", + "commands/gsd-capture.md", + "commands/gsd-cleanup.md", + "commands/gsd-code-review.md", + "commands/gsd-complete-milestone.md", + "commands/gsd-config.md", + "commands/gsd-debug.md", + "commands/gsd-discuss-phase.md", + "commands/gsd-docs-update.md", + "commands/gsd-eval-review.md", + "commands/gsd-execute-phase.md", + "commands/gsd-explore.md", + "commands/gsd-extract-learnings.md", + "commands/gsd-fast.md", + "commands/gsd-forensics.md", + "commands/gsd-graphify.md", + "commands/gsd-health.md", + "commands/gsd-help.md", + "commands/gsd-import.md", + "commands/gsd-inbox.md", + "commands/gsd-ingest-docs.md", + "commands/gsd-manager.md", + "commands/gsd-map-codebase.md", + "commands/gsd-mempalace-capture.md", + "commands/gsd-mempalace-recall.md", + "commands/gsd-milestone-summary.md", + "commands/gsd-mvp-phase.md", + "commands/gsd-new-milestone.md", + "commands/gsd-new-project.md", + "commands/gsd-next.md", + "commands/gsd-ns-context.md", + "commands/gsd-ns-ideate.md", + "commands/gsd-ns-manage.md", + "commands/gsd-ns-project.md", + "commands/gsd-ns-review.md", + "commands/gsd-ns-workflow.md", + "commands/gsd-onboard.md", + "commands/gsd-pause-work.md", + "commands/gsd-phase.md", + "commands/gsd-plan-phase.md", + "commands/gsd-plan-review-convergence.md", + "commands/gsd-pr-branch.md", + "commands/gsd-profile-user.md", + "commands/gsd-progress.md", + "commands/gsd-quick.md", + "commands/gsd-resume-work.md", + "commands/gsd-review-backlog.md", + "commands/gsd-review.md", + "commands/gsd-secure-phase.md", + "commands/gsd-settings.md", + "commands/gsd-ship.md", + "commands/gsd-sketch.md", + "commands/gsd-spec-phase.md", + "commands/gsd-spike.md", + "commands/gsd-stats.md", + "commands/gsd-surface.md", + "commands/gsd-thread.md", + "commands/gsd-ui-phase.md", + "commands/gsd-ui-review.md", + "commands/gsd-ultraplan-phase.md", + "commands/gsd-undo.md", + "commands/gsd-update.md", + "commands/gsd-validate-phase.md", + "commands/gsd-verify-work.md", + "commands/gsd-workspace.md", + "commands/gsd-workstreams.md", + "gsd-core/VERSION", + "gsd-core/bin/check-latest-version.cjs", + "gsd-core/bin/ensure-runtime-build.cjs", + "gsd-core/bin/gsd-tools.cjs", + "gsd-core/bin/gsd_run", + "gsd-core/bin/shared/config-defaults.manifest.json", + "gsd-core/bin/shared/config-schema.manifest.json", + "gsd-core/bin/shared/model-catalog.json", + "gsd-core/bin/shared/runtime-aliases.manifest.json", + "gsd-core/bin/verify-reapply-patches.cjs", + "gsd-core/contexts/dev.md", + "gsd-core/contexts/research.md", + "gsd-core/contexts/review.md", + "gsd-core/references/agent-contracts.md", + "gsd-core/references/agent-skills-bootstrap.md", + "gsd-core/references/ai-evals.md", + "gsd-core/references/ai-frameworks.md", + "gsd-core/references/api-coverage.md", + "gsd-core/references/artifact-types.md", + "gsd-core/references/autonomous-smart-discuss.md", + "gsd-core/references/checkpoints.md", + "gsd-core/references/common-bug-patterns.md", + "gsd-core/references/context-budget.md", + "gsd-core/references/continuation-format.md", + "gsd-core/references/debugger-philosophy.md", + "gsd-core/references/decimal-phase-calculation.md", + "gsd-core/references/doc-conflict-engine.md", + "gsd-core/references/domain-probes.md", + "gsd-core/references/edge-probe-fixtures/01-round-half-even/expected-coverage.json", + "gsd-core/references/edge-probe-fixtures/01-round-half-even/requirements.json", + "gsd-core/references/edge-probe-fixtures/02-merge-intervals/expected-coverage.json", + "gsd-core/references/edge-probe-fixtures/02-merge-intervals/requirements.json", + "gsd-core/references/edge-probe-fixtures/03-truncate-graphemes/expected-coverage.json", + "gsd-core/references/edge-probe-fixtures/03-truncate-graphemes/requirements.json", + "gsd-core/references/edge-probe-fixtures/04-money-rounding/expected-coverage.json", + "gsd-core/references/edge-probe-fixtures/04-money-rounding/requirements.json", + "gsd-core/references/edge-probe-fixtures/05-list-dedupe/expected-coverage.json", + "gsd-core/references/edge-probe-fixtures/05-list-dedupe/requirements.json", + "gsd-core/references/edge-probe-fixtures/06-resolved-mixed/expected-coverage.json", + "gsd-core/references/edge-probe-fixtures/06-resolved-mixed/requirements.json", + "gsd-core/references/edge-probe-fixtures/06-resolved-mixed/resolutions.json", + "gsd-core/references/edge-probe.md", + "gsd-core/references/execute-mvp-tdd.md", + "gsd-core/references/execute-phase-between-wave-reset.md", + "gsd-core/references/execute-phase-context-guard.md", + "gsd-core/references/execute-phase-wave-guard.md", + "gsd-core/references/executor-examples.md", + "gsd-core/references/few-shot-examples/plan-checker.md", + "gsd-core/references/few-shot-examples/verifier.md", + "gsd-core/references/gate-prompts.md", + "gsd-core/references/gates.md", + "gsd-core/references/git-integration.md", + "gsd-core/references/git-planning-commit.md", + "gsd-core/references/gsd-run-resolver.md", + "gsd-core/references/honest-verifier.md", + "gsd-core/references/ios-scaffold.md", + "gsd-core/references/loop-hook-dispatch.md", + "gsd-core/references/mandatory-initial-read.md", + "gsd-core/references/model-profile-resolution.md", + "gsd-core/references/model-profiles.md", + "gsd-core/references/mvp-concepts.md", + "gsd-core/references/phase-argument-parsing.md", + "gsd-core/references/planner-antipatterns.md", + "gsd-core/references/planner-chunked.md", + "gsd-core/references/planner-gap-closure.md", + "gsd-core/references/planner-graphify-auto-update.md", + "gsd-core/references/planner-guidance.md", + "gsd-core/references/planner-human-verify-mode.md", + "gsd-core/references/planner-interface-context.md", + "gsd-core/references/planner-load-graph-context.md", + "gsd-core/references/planner-mvp-mode.md", + "gsd-core/references/planner-reviews.md", + "gsd-core/references/planner-revision.md", + "gsd-core/references/planner-source-audit.md", + "gsd-core/references/planning-config.md", + "gsd-core/references/prohibition-probe-fixtures/01-streak-reminder/expected.json", + "gsd-core/references/prohibition-probe-fixtures/02-clean-utility/expected.json", + "gsd-core/references/prohibition-probe-fixtures/03-multi-prohibition/expected.json", + "gsd-core/references/prohibition-probe.md", + "gsd-core/references/project-skills-discovery.md", + "gsd-core/references/questioning.md", + "gsd-core/references/research-documentation-lookup.md", + "gsd-core/references/research-philosophy.md", + "gsd-core/references/research-verification-protocol.md", + "gsd-core/references/reviewer-instances.md", + "gsd-core/references/revision-loop.md", + "gsd-core/references/scout-codebase.md", + "gsd-core/references/security-asvs-levels.md", + "gsd-core/references/skeleton-template.md", + "gsd-core/references/sketch-interactivity.md", + "gsd-core/references/sketch-theme-system.md", + "gsd-core/references/sketch-tooling.md", + "gsd-core/references/sketch-variant-patterns.md", + "gsd-core/references/specless-probe-fallback.md", + "gsd-core/references/spidr-splitting.md", + "gsd-core/references/tdd.md", + "gsd-core/references/thinking-models-debug.md", + "gsd-core/references/thinking-models-execution.md", + "gsd-core/references/thinking-models-planning.md", + "gsd-core/references/thinking-models-research.md", + "gsd-core/references/thinking-models-verification.md", + "gsd-core/references/thinking-partner.md", + "gsd-core/references/ui-brand.md", + "gsd-core/references/ui-consideration-probe.md", + "gsd-core/references/universal-anti-patterns.md", + "gsd-core/references/untrusted-input-boundary.md", + "gsd-core/references/user-profiling.md", + "gsd-core/references/user-story-template.md", + "gsd-core/references/verification-overrides.md", + "gsd-core/references/verification-patterns.md", + "gsd-core/references/verify-mvp-mode.md", + "gsd-core/references/workstream-flag.md", + "gsd-core/references/worktree-branch-check.md", + "gsd-core/references/worktree-path-safety.md", + "gsd-core/templates/AI-SPEC.md", + "gsd-core/templates/DEBUG.md", + "gsd-core/templates/README.md", + "gsd-core/templates/SECURITY.md", + "gsd-core/templates/UAT.md", + "gsd-core/templates/UI-SPEC.md", + "gsd-core/templates/VALIDATION.md", + "gsd-core/templates/claude-md.md", + "gsd-core/templates/codebase/architecture.md", + "gsd-core/templates/codebase/concerns.md", + "gsd-core/templates/codebase/conventions.md", + "gsd-core/templates/codebase/integrations.md", + "gsd-core/templates/codebase/stack.md", + "gsd-core/templates/codebase/structure.md", + "gsd-core/templates/codebase/testing.md", + "gsd-core/templates/config.json", + "gsd-core/templates/context.md", + "gsd-core/templates/continue-here.md", + "gsd-core/templates/copilot-instructions.md", + "gsd-core/templates/debug-subagent-prompt.md", + "gsd-core/templates/dev-preferences.md", + "gsd-core/templates/discovery.md", + "gsd-core/templates/discussion-log.md", + "gsd-core/templates/milestone-archive.md", + "gsd-core/templates/milestone.md", + "gsd-core/templates/phase-prompt.md", + "gsd-core/templates/planner-subagent-prompt.md", + "gsd-core/templates/project.md", + "gsd-core/templates/requirements.md", + "gsd-core/templates/research-project/ARCHITECTURE.md", + "gsd-core/templates/research-project/FEATURES.md", + "gsd-core/templates/research-project/PITFALLS.md", + "gsd-core/templates/research-project/STACK.md", + "gsd-core/templates/research-project/SUMMARY.md", + "gsd-core/templates/research.md", + "gsd-core/templates/retrospective.md", + "gsd-core/templates/roadmap.md", + "gsd-core/templates/spec.md", + "gsd-core/templates/state.md", + "gsd-core/templates/summary-complex.md", + "gsd-core/templates/summary-minimal.md", + "gsd-core/templates/summary-standard.md", + "gsd-core/templates/summary.md", + "gsd-core/templates/user-profile.md", + "gsd-core/templates/user-setup.md", + "gsd-core/templates/verification-report.md", + "gsd-core/workflows/_runtime-launcher.snippet.sh", + "gsd-core/workflows/add-backlog.md", + "gsd-core/workflows/add-phase.md", + "gsd-core/workflows/add-tests.md", + "gsd-core/workflows/add-todo.md", + "gsd-core/workflows/ai-integration-phase.md", + "gsd-core/workflows/analyze-dependencies.md", + "gsd-core/workflows/audit-fix.md", + "gsd-core/workflows/audit-milestone.md", + "gsd-core/workflows/audit-uat.md", + "gsd-core/workflows/autonomous.md", + "gsd-core/workflows/check-todos.md", + "gsd-core/workflows/cleanup.md", + "gsd-core/workflows/code-review-fix.md", + "gsd-core/workflows/code-review.md", + "gsd-core/workflows/complete-milestone.md", + "gsd-core/workflows/debug.md", + "gsd-core/workflows/diagnose-issues.md", + "gsd-core/workflows/discovery-phase.md", + "gsd-core/workflows/discuss-phase-assumptions.md", + "gsd-core/workflows/discuss-phase-power.md", + "gsd-core/workflows/discuss-phase.md", + "gsd-core/workflows/discuss-phase/modes/advisor.md", + "gsd-core/workflows/discuss-phase/modes/all.md", + "gsd-core/workflows/discuss-phase/modes/analyze.md", + "gsd-core/workflows/discuss-phase/modes/auto.md", + "gsd-core/workflows/discuss-phase/modes/batch.md", + "gsd-core/workflows/discuss-phase/modes/chain.md", + "gsd-core/workflows/discuss-phase/modes/default.md", + "gsd-core/workflows/discuss-phase/modes/power.md", + "gsd-core/workflows/discuss-phase/modes/text.md", + "gsd-core/workflows/discuss-phase/templates/checkpoint.json", + "gsd-core/workflows/discuss-phase/templates/context.md", + "gsd-core/workflows/discuss-phase/templates/discussion-log.md", + "gsd-core/workflows/do.md", + "gsd-core/workflows/docs-update.md", + "gsd-core/workflows/edit-phase.md", + "gsd-core/workflows/eval-review.md", + "gsd-core/workflows/execute-phase.md", + "gsd-core/workflows/execute-phase/steps/codebase-drift-gate.md", + "gsd-core/workflows/execute-phase/steps/per-plan-worktree-gate.md", + "gsd-core/workflows/execute-phase/steps/post-merge-gate.md", + "gsd-core/workflows/execute-phase/steps/regression-gate.md", + "gsd-core/workflows/execute-phase/steps/worktree-recovery-policy.md", + "gsd-core/workflows/execute-plan.md", + "gsd-core/workflows/explore.md", + "gsd-core/workflows/extract-learnings.md", + "gsd-core/workflows/fast.md", + "gsd-core/workflows/forensics.md", + "gsd-core/workflows/graduation.md", + "gsd-core/workflows/health.md", + "gsd-core/workflows/help.md", + "gsd-core/workflows/help/modes/brief.md", + "gsd-core/workflows/help/modes/default.md", + "gsd-core/workflows/help/modes/full.md", + "gsd-core/workflows/help/modes/topic.md", + "gsd-core/workflows/import.md", + "gsd-core/workflows/inbox.md", + "gsd-core/workflows/ingest-docs.md", + "gsd-core/workflows/insert-phase.md", + "gsd-core/workflows/list-phase-assumptions.md", + "gsd-core/workflows/list-seeds.md", + "gsd-core/workflows/list-workspaces.md", + "gsd-core/workflows/manager.md", + "gsd-core/workflows/map-codebase.md", + "gsd-core/workflows/milestone-summary.md", + "gsd-core/workflows/mvp-phase.md", + "gsd-core/workflows/new-milestone.md", + "gsd-core/workflows/new-project.md", + "gsd-core/workflows/new-workspace.md", + "gsd-core/workflows/next.md", + "gsd-core/workflows/node-repair.md", + "gsd-core/workflows/note.md", + "gsd-core/workflows/onboard.md", + "gsd-core/workflows/pause-work.md", + "gsd-core/workflows/plan-milestone-gaps.md", + "gsd-core/workflows/plan-phase.md", + "gsd-core/workflows/plan-phase/steps/closed-phase-gate.md", + "gsd-core/workflows/plan-phase/steps/prd-express-path.md", + "gsd-core/workflows/plan-phase/steps/windows-troubleshooting.md", + "gsd-core/workflows/plan-review-convergence.md", + "gsd-core/workflows/plant-seed.md", + "gsd-core/workflows/pr-branch.md", + "gsd-core/workflows/profile-user.md", + "gsd-core/workflows/progress.md", + "gsd-core/workflows/quick.md", + "gsd-core/workflows/reapply-patches.md", + "gsd-core/workflows/remove-phase.md", + "gsd-core/workflows/remove-workspace.md", + "gsd-core/workflows/resume-project.md", + "gsd-core/workflows/review.md", + "gsd-core/workflows/scan.md", + "gsd-core/workflows/secure-phase.md", + "gsd-core/workflows/session-report.md", + "gsd-core/workflows/settings-advanced.md", + "gsd-core/workflows/settings-integrations.md", + "gsd-core/workflows/settings.md", + "gsd-core/workflows/ship.md", + "gsd-core/workflows/sketch-wrap-up.md", + "gsd-core/workflows/sketch.md", + "gsd-core/workflows/smart-entry.md", + "gsd-core/workflows/spec-phase.md", + "gsd-core/workflows/spike-wrap-up.md", + "gsd-core/workflows/spike.md", + "gsd-core/workflows/stats.md", + "gsd-core/workflows/sync-skills.md", + "gsd-core/workflows/thread.md", + "gsd-core/workflows/transition.md", + "gsd-core/workflows/ui-phase.md", + "gsd-core/workflows/ui-review.md", + "gsd-core/workflows/ultraplan-phase.md", + "gsd-core/workflows/undo.md", + "gsd-core/workflows/update.md", + "gsd-core/workflows/validate-phase.md", + "gsd-core/workflows/verify-phase.md", + "gsd-core/workflows/verify-work.md", + "hooks/gsd-check-update-worker.js", + "hooks/gsd-check-update.js", + "hooks/gsd-config-reload.js", + "hooks/gsd-context-monitor.js", + "hooks/gsd-cursor-post-tool.js", + "hooks/gsd-cursor-pre-tool.js", + "hooks/gsd-cursor-session-start.js", + "hooks/gsd-cursor-stop.js", + "hooks/gsd-cursor-subagent-start.js", + "hooks/gsd-cursor-subagent-stop.js", + "hooks/gsd-ensure-canonical-path.js", + "hooks/gsd-graphify-update.sh", + "hooks/gsd-phase-boundary.sh", + "hooks/gsd-prompt-guard.js", + "hooks/gsd-read-guard.js", + "hooks/gsd-read-injection-scanner.js", + "hooks/gsd-session-state.sh", + "hooks/gsd-statusline.js", + "hooks/gsd-update-banner.js", + "hooks/gsd-validate-commit.sh", + "hooks/gsd-windsurf-pre-command.js", + "hooks/gsd-windsurf-pre-write.js", + "hooks/gsd-workflow-guard.js", + "hooks/gsd-worktree-path-guard.js", + "hooks/lib/git-cmd.js", + "hooks/lib/gsd-graphify-rebuild.sh", + "hooks/managed-hooks-registry.cjs", + "package.json", + "scripts/changeset/README.md", + "scripts/changeset/cli.cjs", + "scripts/changeset/github-release-notes.cjs", + "scripts/changeset/lint.cjs", + "scripts/changeset/new.cjs", + "scripts/changeset/parse.cjs", + "scripts/changeset/render.cjs", + "scripts/changeset/serialize.cjs", + "scripts/fix-slash-commands.cjs", + "scripts/gen-capability-registry.cjs", + "scripts/gen-loop-host-contract.cjs", + "scripts/lib/allowlist-ratchet.cjs", + "scripts/lib/cli-exit.cjs" +] diff --git a/tests/fixtures/install-tree/claude.json b/tests/fixtures/install-tree/claude.json new file mode 100644 index 000000000..656bf934b --- /dev/null +++ b/tests/fixtures/install-tree/claude.json @@ -0,0 +1,425 @@ +[ + ".gsd-profile", + "agents/gsd-advisor-researcher.md", + "agents/gsd-ai-researcher.md", + "agents/gsd-assumptions-analyzer.md", + "agents/gsd-code-fixer.md", + "agents/gsd-code-reviewer.md", + "agents/gsd-codebase-mapper.md", + "agents/gsd-debug-session-manager.md", + "agents/gsd-debugger.md", + "agents/gsd-doc-classifier.md", + "agents/gsd-doc-synthesizer.md", + "agents/gsd-doc-verifier.md", + "agents/gsd-doc-writer.md", + "agents/gsd-domain-researcher.md", + "agents/gsd-eval-auditor.md", + "agents/gsd-eval-planner.md", + "agents/gsd-executor.md", + "agents/gsd-framework-selector.md", + "agents/gsd-integration-checker.md", + "agents/gsd-intel-updater.md", + "agents/gsd-mempalace-curator.md", + "agents/gsd-nyquist-auditor.md", + "agents/gsd-pattern-mapper.md", + "agents/gsd-phase-researcher.md", + "agents/gsd-plan-checker.md", + "agents/gsd-planner.md", + "agents/gsd-project-researcher.md", + "agents/gsd-research-synthesizer.md", + "agents/gsd-roadmapper.md", + "agents/gsd-security-auditor.md", + "agents/gsd-ui-auditor.md", + "agents/gsd-ui-checker.md", + "agents/gsd-ui-researcher.md", + "agents/gsd-user-profiler.md", + "agents/gsd-verifier.md", + "gsd-core/VERSION", + "gsd-core/bin/check-latest-version.cjs", + "gsd-core/bin/ensure-runtime-build.cjs", + "gsd-core/bin/gsd-tools.cjs", + "gsd-core/bin/gsd_run", + "gsd-core/bin/shared/config-defaults.manifest.json", + "gsd-core/bin/shared/config-schema.manifest.json", + "gsd-core/bin/shared/model-catalog.json", + "gsd-core/bin/shared/runtime-aliases.manifest.json", + "gsd-core/bin/verify-reapply-patches.cjs", + "gsd-core/contexts/dev.md", + "gsd-core/contexts/research.md", + "gsd-core/contexts/review.md", + "gsd-core/references/agent-contracts.md", + "gsd-core/references/agent-skills-bootstrap.md", + "gsd-core/references/ai-evals.md", + "gsd-core/references/ai-frameworks.md", + "gsd-core/references/api-coverage.md", + "gsd-core/references/artifact-types.md", + "gsd-core/references/autonomous-smart-discuss.md", + "gsd-core/references/checkpoints.md", + "gsd-core/references/common-bug-patterns.md", + "gsd-core/references/context-budget.md", + "gsd-core/references/continuation-format.md", + "gsd-core/references/debugger-philosophy.md", + "gsd-core/references/decimal-phase-calculation.md", + "gsd-core/references/doc-conflict-engine.md", + "gsd-core/references/domain-probes.md", + "gsd-core/references/edge-probe-fixtures/01-round-half-even/expected-coverage.json", + "gsd-core/references/edge-probe-fixtures/01-round-half-even/requirements.json", + "gsd-core/references/edge-probe-fixtures/02-merge-intervals/expected-coverage.json", + "gsd-core/references/edge-probe-fixtures/02-merge-intervals/requirements.json", + "gsd-core/references/edge-probe-fixtures/03-truncate-graphemes/expected-coverage.json", + "gsd-core/references/edge-probe-fixtures/03-truncate-graphemes/requirements.json", + "gsd-core/references/edge-probe-fixtures/04-money-rounding/expected-coverage.json", + "gsd-core/references/edge-probe-fixtures/04-money-rounding/requirements.json", + "gsd-core/references/edge-probe-fixtures/05-list-dedupe/expected-coverage.json", + "gsd-core/references/edge-probe-fixtures/05-list-dedupe/requirements.json", + "gsd-core/references/edge-probe-fixtures/06-resolved-mixed/expected-coverage.json", + "gsd-core/references/edge-probe-fixtures/06-resolved-mixed/requirements.json", + "gsd-core/references/edge-probe-fixtures/06-resolved-mixed/resolutions.json", + "gsd-core/references/edge-probe.md", + "gsd-core/references/execute-mvp-tdd.md", + "gsd-core/references/execute-phase-between-wave-reset.md", + "gsd-core/references/execute-phase-context-guard.md", + "gsd-core/references/execute-phase-wave-guard.md", + "gsd-core/references/executor-examples.md", + "gsd-core/references/few-shot-examples/plan-checker.md", + "gsd-core/references/few-shot-examples/verifier.md", + "gsd-core/references/gate-prompts.md", + "gsd-core/references/gates.md", + "gsd-core/references/git-integration.md", + "gsd-core/references/git-planning-commit.md", + "gsd-core/references/gsd-run-resolver.md", + "gsd-core/references/honest-verifier.md", + "gsd-core/references/ios-scaffold.md", + "gsd-core/references/loop-hook-dispatch.md", + "gsd-core/references/mandatory-initial-read.md", + "gsd-core/references/model-profile-resolution.md", + "gsd-core/references/model-profiles.md", + "gsd-core/references/mvp-concepts.md", + "gsd-core/references/phase-argument-parsing.md", + "gsd-core/references/planner-antipatterns.md", + "gsd-core/references/planner-chunked.md", + "gsd-core/references/planner-gap-closure.md", + "gsd-core/references/planner-graphify-auto-update.md", + "gsd-core/references/planner-guidance.md", + "gsd-core/references/planner-human-verify-mode.md", + "gsd-core/references/planner-interface-context.md", + "gsd-core/references/planner-load-graph-context.md", + "gsd-core/references/planner-mvp-mode.md", + "gsd-core/references/planner-reviews.md", + "gsd-core/references/planner-revision.md", + "gsd-core/references/planner-source-audit.md", + "gsd-core/references/planning-config.md", + "gsd-core/references/prohibition-probe-fixtures/01-streak-reminder/expected.json", + "gsd-core/references/prohibition-probe-fixtures/02-clean-utility/expected.json", + "gsd-core/references/prohibition-probe-fixtures/03-multi-prohibition/expected.json", + "gsd-core/references/prohibition-probe.md", + "gsd-core/references/project-skills-discovery.md", + "gsd-core/references/questioning.md", + "gsd-core/references/research-documentation-lookup.md", + "gsd-core/references/research-philosophy.md", + "gsd-core/references/research-verification-protocol.md", + "gsd-core/references/reviewer-instances.md", + "gsd-core/references/revision-loop.md", + "gsd-core/references/scout-codebase.md", + "gsd-core/references/security-asvs-levels.md", + "gsd-core/references/skeleton-template.md", + "gsd-core/references/sketch-interactivity.md", + "gsd-core/references/sketch-theme-system.md", + "gsd-core/references/sketch-tooling.md", + "gsd-core/references/sketch-variant-patterns.md", + "gsd-core/references/specless-probe-fallback.md", + "gsd-core/references/spidr-splitting.md", + "gsd-core/references/tdd.md", + "gsd-core/references/thinking-models-debug.md", + "gsd-core/references/thinking-models-execution.md", + "gsd-core/references/thinking-models-planning.md", + "gsd-core/references/thinking-models-research.md", + "gsd-core/references/thinking-models-verification.md", + "gsd-core/references/thinking-partner.md", + "gsd-core/references/ui-brand.md", + "gsd-core/references/ui-consideration-probe.md", + "gsd-core/references/universal-anti-patterns.md", + "gsd-core/references/untrusted-input-boundary.md", + "gsd-core/references/user-profiling.md", + "gsd-core/references/user-story-template.md", + "gsd-core/references/verification-overrides.md", + "gsd-core/references/verification-patterns.md", + "gsd-core/references/verify-mvp-mode.md", + "gsd-core/references/workstream-flag.md", + "gsd-core/references/worktree-branch-check.md", + "gsd-core/references/worktree-path-safety.md", + "gsd-core/templates/AI-SPEC.md", + "gsd-core/templates/DEBUG.md", + "gsd-core/templates/README.md", + "gsd-core/templates/SECURITY.md", + "gsd-core/templates/UAT.md", + "gsd-core/templates/UI-SPEC.md", + "gsd-core/templates/VALIDATION.md", + "gsd-core/templates/claude-md.md", + "gsd-core/templates/codebase/architecture.md", + "gsd-core/templates/codebase/concerns.md", + "gsd-core/templates/codebase/conventions.md", + "gsd-core/templates/codebase/integrations.md", + "gsd-core/templates/codebase/stack.md", + "gsd-core/templates/codebase/structure.md", + "gsd-core/templates/codebase/testing.md", + "gsd-core/templates/config.json", + "gsd-core/templates/context.md", + "gsd-core/templates/continue-here.md", + "gsd-core/templates/copilot-instructions.md", + "gsd-core/templates/debug-subagent-prompt.md", + "gsd-core/templates/dev-preferences.md", + "gsd-core/templates/discovery.md", + "gsd-core/templates/discussion-log.md", + "gsd-core/templates/milestone-archive.md", + "gsd-core/templates/milestone.md", + "gsd-core/templates/phase-prompt.md", + "gsd-core/templates/planner-subagent-prompt.md", + "gsd-core/templates/project.md", + "gsd-core/templates/requirements.md", + "gsd-core/templates/research-project/ARCHITECTURE.md", + "gsd-core/templates/research-project/FEATURES.md", + "gsd-core/templates/research-project/PITFALLS.md", + "gsd-core/templates/research-project/STACK.md", + "gsd-core/templates/research-project/SUMMARY.md", + "gsd-core/templates/research.md", + "gsd-core/templates/retrospective.md", + "gsd-core/templates/roadmap.md", + "gsd-core/templates/spec.md", + "gsd-core/templates/state.md", + "gsd-core/templates/summary-complex.md", + "gsd-core/templates/summary-minimal.md", + "gsd-core/templates/summary-standard.md", + "gsd-core/templates/summary.md", + "gsd-core/templates/user-profile.md", + "gsd-core/templates/user-setup.md", + "gsd-core/templates/verification-report.md", + "gsd-core/workflows/_runtime-launcher.snippet.sh", + "gsd-core/workflows/add-backlog.md", + "gsd-core/workflows/add-phase.md", + "gsd-core/workflows/add-tests.md", + "gsd-core/workflows/add-todo.md", + "gsd-core/workflows/ai-integration-phase.md", + "gsd-core/workflows/analyze-dependencies.md", + "gsd-core/workflows/audit-fix.md", + "gsd-core/workflows/audit-milestone.md", + "gsd-core/workflows/audit-uat.md", + "gsd-core/workflows/autonomous.md", + "gsd-core/workflows/check-todos.md", + "gsd-core/workflows/cleanup.md", + "gsd-core/workflows/code-review-fix.md", + "gsd-core/workflows/code-review.md", + "gsd-core/workflows/complete-milestone.md", + "gsd-core/workflows/debug.md", + "gsd-core/workflows/diagnose-issues.md", + "gsd-core/workflows/discovery-phase.md", + "gsd-core/workflows/discuss-phase-assumptions.md", + "gsd-core/workflows/discuss-phase-power.md", + "gsd-core/workflows/discuss-phase.md", + "gsd-core/workflows/discuss-phase/modes/advisor.md", + "gsd-core/workflows/discuss-phase/modes/all.md", + "gsd-core/workflows/discuss-phase/modes/analyze.md", + "gsd-core/workflows/discuss-phase/modes/auto.md", + "gsd-core/workflows/discuss-phase/modes/batch.md", + "gsd-core/workflows/discuss-phase/modes/chain.md", + "gsd-core/workflows/discuss-phase/modes/default.md", + "gsd-core/workflows/discuss-phase/modes/power.md", + "gsd-core/workflows/discuss-phase/modes/text.md", + "gsd-core/workflows/discuss-phase/templates/checkpoint.json", + "gsd-core/workflows/discuss-phase/templates/context.md", + "gsd-core/workflows/discuss-phase/templates/discussion-log.md", + "gsd-core/workflows/do.md", + "gsd-core/workflows/docs-update.md", + "gsd-core/workflows/edit-phase.md", + "gsd-core/workflows/eval-review.md", + "gsd-core/workflows/execute-phase.md", + "gsd-core/workflows/execute-phase/steps/codebase-drift-gate.md", + "gsd-core/workflows/execute-phase/steps/per-plan-worktree-gate.md", + "gsd-core/workflows/execute-phase/steps/post-merge-gate.md", + "gsd-core/workflows/execute-phase/steps/regression-gate.md", + "gsd-core/workflows/execute-phase/steps/worktree-recovery-policy.md", + "gsd-core/workflows/execute-plan.md", + "gsd-core/workflows/explore.md", + "gsd-core/workflows/extract-learnings.md", + "gsd-core/workflows/fast.md", + "gsd-core/workflows/forensics.md", + "gsd-core/workflows/graduation.md", + "gsd-core/workflows/health.md", + "gsd-core/workflows/help.md", + "gsd-core/workflows/help/modes/brief.md", + "gsd-core/workflows/help/modes/default.md", + "gsd-core/workflows/help/modes/full.md", + "gsd-core/workflows/help/modes/topic.md", + "gsd-core/workflows/import.md", + "gsd-core/workflows/inbox.md", + "gsd-core/workflows/ingest-docs.md", + "gsd-core/workflows/insert-phase.md", + "gsd-core/workflows/list-phase-assumptions.md", + "gsd-core/workflows/list-seeds.md", + "gsd-core/workflows/list-workspaces.md", + "gsd-core/workflows/manager.md", + "gsd-core/workflows/map-codebase.md", + "gsd-core/workflows/milestone-summary.md", + "gsd-core/workflows/mvp-phase.md", + "gsd-core/workflows/new-milestone.md", + "gsd-core/workflows/new-project.md", + "gsd-core/workflows/new-workspace.md", + "gsd-core/workflows/next.md", + "gsd-core/workflows/node-repair.md", + "gsd-core/workflows/note.md", + "gsd-core/workflows/onboard.md", + "gsd-core/workflows/pause-work.md", + "gsd-core/workflows/plan-milestone-gaps.md", + "gsd-core/workflows/plan-phase.md", + "gsd-core/workflows/plan-phase/steps/closed-phase-gate.md", + "gsd-core/workflows/plan-phase/steps/prd-express-path.md", + "gsd-core/workflows/plan-phase/steps/windows-troubleshooting.md", + "gsd-core/workflows/plan-review-convergence.md", + "gsd-core/workflows/plant-seed.md", + "gsd-core/workflows/pr-branch.md", + "gsd-core/workflows/profile-user.md", + "gsd-core/workflows/progress.md", + "gsd-core/workflows/quick.md", + "gsd-core/workflows/reapply-patches.md", + "gsd-core/workflows/remove-phase.md", + "gsd-core/workflows/remove-workspace.md", + "gsd-core/workflows/resume-project.md", + "gsd-core/workflows/review.md", + "gsd-core/workflows/scan.md", + "gsd-core/workflows/secure-phase.md", + "gsd-core/workflows/session-report.md", + "gsd-core/workflows/settings-advanced.md", + "gsd-core/workflows/settings-integrations.md", + "gsd-core/workflows/settings.md", + "gsd-core/workflows/ship.md", + "gsd-core/workflows/sketch-wrap-up.md", + "gsd-core/workflows/sketch.md", + "gsd-core/workflows/smart-entry.md", + "gsd-core/workflows/spec-phase.md", + "gsd-core/workflows/spike-wrap-up.md", + "gsd-core/workflows/spike.md", + "gsd-core/workflows/stats.md", + "gsd-core/workflows/sync-skills.md", + "gsd-core/workflows/thread.md", + "gsd-core/workflows/transition.md", + "gsd-core/workflows/ui-phase.md", + "gsd-core/workflows/ui-review.md", + "gsd-core/workflows/ultraplan-phase.md", + "gsd-core/workflows/undo.md", + "gsd-core/workflows/update.md", + "gsd-core/workflows/validate-phase.md", + "gsd-core/workflows/verify-phase.md", + "gsd-core/workflows/verify-work.md", + "hooks/gsd-check-update-worker.js", + "hooks/gsd-check-update.js", + "hooks/gsd-config-reload.js", + "hooks/gsd-context-monitor.js", + "hooks/gsd-cursor-post-tool.js", + "hooks/gsd-cursor-pre-tool.js", + "hooks/gsd-cursor-session-start.js", + "hooks/gsd-cursor-stop.js", + "hooks/gsd-cursor-subagent-start.js", + "hooks/gsd-cursor-subagent-stop.js", + "hooks/gsd-ensure-canonical-path.js", + "hooks/gsd-graphify-update.sh", + "hooks/gsd-phase-boundary.sh", + "hooks/gsd-prompt-guard.js", + "hooks/gsd-read-guard.js", + "hooks/gsd-read-injection-scanner.js", + "hooks/gsd-session-state.sh", + "hooks/gsd-statusline.js", + "hooks/gsd-update-banner.js", + "hooks/gsd-validate-commit.sh", + "hooks/gsd-windsurf-pre-command.js", + "hooks/gsd-windsurf-pre-write.js", + "hooks/gsd-workflow-guard.js", + "hooks/gsd-worktree-path-guard.js", + "hooks/lib/git-cmd.js", + "hooks/lib/gsd-graphify-rebuild.sh", + "hooks/managed-hooks-registry.cjs", + "package.json", + "scripts/changeset/README.md", + "scripts/changeset/cli.cjs", + "scripts/changeset/github-release-notes.cjs", + "scripts/changeset/lint.cjs", + "scripts/changeset/new.cjs", + "scripts/changeset/parse.cjs", + "scripts/changeset/render.cjs", + "scripts/changeset/serialize.cjs", + "scripts/fix-slash-commands.cjs", + "scripts/gen-capability-registry.cjs", + "scripts/gen-loop-host-contract.cjs", + "scripts/lib/allowlist-ratchet.cjs", + "scripts/lib/cli-exit.cjs", + "skills/gsd-add-tests/SKILL.md", + "skills/gsd-ai-integration-phase/SKILL.md", + "skills/gsd-audit-fix/SKILL.md", + "skills/gsd-audit-milestone/SKILL.md", + "skills/gsd-audit-uat/SKILL.md", + "skills/gsd-autonomous/SKILL.md", + "skills/gsd-capture/SKILL.md", + "skills/gsd-cleanup/SKILL.md", + "skills/gsd-code-review/SKILL.md", + "skills/gsd-complete-milestone/SKILL.md", + "skills/gsd-config/SKILL.md", + "skills/gsd-debug/SKILL.md", + "skills/gsd-discuss-phase/SKILL.md", + "skills/gsd-docs-update/SKILL.md", + "skills/gsd-eval-review/SKILL.md", + "skills/gsd-execute-phase/SKILL.md", + "skills/gsd-explore/SKILL.md", + "skills/gsd-extract-learnings/SKILL.md", + "skills/gsd-fast/SKILL.md", + "skills/gsd-forensics/SKILL.md", + "skills/gsd-graphify/SKILL.md", + "skills/gsd-health/SKILL.md", + "skills/gsd-help/SKILL.md", + "skills/gsd-import/SKILL.md", + "skills/gsd-inbox/SKILL.md", + "skills/gsd-ingest-docs/SKILL.md", + "skills/gsd-manager/SKILL.md", + "skills/gsd-map-codebase/SKILL.md", + "skills/gsd-mempalace-capture/SKILL.md", + "skills/gsd-mempalace-recall/SKILL.md", + "skills/gsd-milestone-summary/SKILL.md", + "skills/gsd-mvp-phase/SKILL.md", + "skills/gsd-new-milestone/SKILL.md", + "skills/gsd-new-project/SKILL.md", + "skills/gsd-next/SKILL.md", + "skills/gsd-ns-context/SKILL.md", + "skills/gsd-ns-ideate/SKILL.md", + "skills/gsd-ns-manage/SKILL.md", + "skills/gsd-ns-project/SKILL.md", + "skills/gsd-ns-review/SKILL.md", + "skills/gsd-ns-workflow/SKILL.md", + "skills/gsd-onboard/SKILL.md", + "skills/gsd-pause-work/SKILL.md", + "skills/gsd-phase/SKILL.md", + "skills/gsd-plan-phase/SKILL.md", + "skills/gsd-plan-review-convergence/SKILL.md", + "skills/gsd-pr-branch/SKILL.md", + "skills/gsd-profile-user/SKILL.md", + "skills/gsd-progress/SKILL.md", + "skills/gsd-quick/SKILL.md", + "skills/gsd-resume-work/SKILL.md", + "skills/gsd-review-backlog/SKILL.md", + "skills/gsd-review/SKILL.md", + "skills/gsd-secure-phase/SKILL.md", + "skills/gsd-settings/SKILL.md", + "skills/gsd-ship/SKILL.md", + "skills/gsd-sketch/SKILL.md", + "skills/gsd-spec-phase/SKILL.md", + "skills/gsd-spike/SKILL.md", + "skills/gsd-stats/SKILL.md", + "skills/gsd-surface/SKILL.md", + "skills/gsd-thread/SKILL.md", + "skills/gsd-ui-phase/SKILL.md", + "skills/gsd-ui-review/SKILL.md", + "skills/gsd-ultraplan-phase/SKILL.md", + "skills/gsd-undo/SKILL.md", + "skills/gsd-update/SKILL.md", + "skills/gsd-validate-phase/SKILL.md", + "skills/gsd-verify-work/SKILL.md", + "skills/gsd-workspace/SKILL.md", + "skills/gsd-workstreams/SKILL.md" +] diff --git a/tests/fixtures/install-tree/cline.json b/tests/fixtures/install-tree/cline.json new file mode 100644 index 000000000..668e59098 --- /dev/null +++ b/tests/fixtures/install-tree/cline.json @@ -0,0 +1,402 @@ +[ + ".agents/AGENTS.md", + ".clinerules/gsd.md", + ".clinerules/hooks/PreToolUse", + ".gsd-profile", + ".gsd/defaults.json", + "agents/gsd-advisor-researcher.md", + "agents/gsd-ai-researcher.md", + "agents/gsd-assumptions-analyzer.md", + "agents/gsd-code-fixer.md", + "agents/gsd-code-reviewer.md", + "agents/gsd-codebase-mapper.md", + "agents/gsd-debug-session-manager.md", + "agents/gsd-debugger.md", + "agents/gsd-doc-classifier.md", + "agents/gsd-doc-synthesizer.md", + "agents/gsd-doc-verifier.md", + "agents/gsd-doc-writer.md", + "agents/gsd-domain-researcher.md", + "agents/gsd-eval-auditor.md", + "agents/gsd-eval-planner.md", + "agents/gsd-executor.md", + "agents/gsd-framework-selector.md", + "agents/gsd-integration-checker.md", + "agents/gsd-intel-updater.md", + "agents/gsd-mempalace-curator.md", + "agents/gsd-nyquist-auditor.md", + "agents/gsd-pattern-mapper.md", + "agents/gsd-phase-researcher.md", + "agents/gsd-plan-checker.md", + "agents/gsd-planner.md", + "agents/gsd-project-researcher.md", + "agents/gsd-research-synthesizer.md", + "agents/gsd-roadmapper.md", + "agents/gsd-security-auditor.md", + "agents/gsd-ui-auditor.md", + "agents/gsd-ui-checker.md", + "agents/gsd-ui-researcher.md", + "agents/gsd-user-profiler.md", + "agents/gsd-verifier.md", + "gsd-core/VERSION", + "gsd-core/bin/check-latest-version.cjs", + "gsd-core/bin/ensure-runtime-build.cjs", + "gsd-core/bin/gsd-tools.cjs", + "gsd-core/bin/gsd_run", + "gsd-core/bin/shared/config-defaults.manifest.json", + "gsd-core/bin/shared/config-schema.manifest.json", + "gsd-core/bin/shared/model-catalog.json", + "gsd-core/bin/shared/runtime-aliases.manifest.json", + "gsd-core/bin/verify-reapply-patches.cjs", + "gsd-core/contexts/dev.md", + "gsd-core/contexts/research.md", + "gsd-core/contexts/review.md", + "gsd-core/references/agent-contracts.md", + "gsd-core/references/agent-skills-bootstrap.md", + "gsd-core/references/ai-evals.md", + "gsd-core/references/ai-frameworks.md", + "gsd-core/references/api-coverage.md", + "gsd-core/references/artifact-types.md", + "gsd-core/references/autonomous-smart-discuss.md", + "gsd-core/references/checkpoints.md", + "gsd-core/references/common-bug-patterns.md", + "gsd-core/references/context-budget.md", + "gsd-core/references/continuation-format.md", + "gsd-core/references/debugger-philosophy.md", + "gsd-core/references/decimal-phase-calculation.md", + "gsd-core/references/doc-conflict-engine.md", + "gsd-core/references/domain-probes.md", + "gsd-core/references/edge-probe-fixtures/01-round-half-even/expected-coverage.json", + "gsd-core/references/edge-probe-fixtures/01-round-half-even/requirements.json", + "gsd-core/references/edge-probe-fixtures/02-merge-intervals/expected-coverage.json", + "gsd-core/references/edge-probe-fixtures/02-merge-intervals/requirements.json", + "gsd-core/references/edge-probe-fixtures/03-truncate-graphemes/expected-coverage.json", + "gsd-core/references/edge-probe-fixtures/03-truncate-graphemes/requirements.json", + "gsd-core/references/edge-probe-fixtures/04-money-rounding/expected-coverage.json", + "gsd-core/references/edge-probe-fixtures/04-money-rounding/requirements.json", + "gsd-core/references/edge-probe-fixtures/05-list-dedupe/expected-coverage.json", + "gsd-core/references/edge-probe-fixtures/05-list-dedupe/requirements.json", + "gsd-core/references/edge-probe-fixtures/06-resolved-mixed/expected-coverage.json", + "gsd-core/references/edge-probe-fixtures/06-resolved-mixed/requirements.json", + "gsd-core/references/edge-probe-fixtures/06-resolved-mixed/resolutions.json", + "gsd-core/references/edge-probe.md", + "gsd-core/references/execute-mvp-tdd.md", + "gsd-core/references/execute-phase-between-wave-reset.md", + "gsd-core/references/execute-phase-context-guard.md", + "gsd-core/references/execute-phase-wave-guard.md", + "gsd-core/references/executor-examples.md", + "gsd-core/references/few-shot-examples/plan-checker.md", + "gsd-core/references/few-shot-examples/verifier.md", + "gsd-core/references/gate-prompts.md", + "gsd-core/references/gates.md", + "gsd-core/references/git-integration.md", + "gsd-core/references/git-planning-commit.md", + "gsd-core/references/gsd-run-resolver.md", + "gsd-core/references/honest-verifier.md", + "gsd-core/references/ios-scaffold.md", + "gsd-core/references/loop-hook-dispatch.md", + "gsd-core/references/mandatory-initial-read.md", + "gsd-core/references/model-profile-resolution.md", + "gsd-core/references/model-profiles.md", + "gsd-core/references/mvp-concepts.md", + "gsd-core/references/phase-argument-parsing.md", + "gsd-core/references/planner-antipatterns.md", + "gsd-core/references/planner-chunked.md", + "gsd-core/references/planner-gap-closure.md", + "gsd-core/references/planner-graphify-auto-update.md", + "gsd-core/references/planner-guidance.md", + "gsd-core/references/planner-human-verify-mode.md", + "gsd-core/references/planner-interface-context.md", + "gsd-core/references/planner-load-graph-context.md", + "gsd-core/references/planner-mvp-mode.md", + "gsd-core/references/planner-reviews.md", + "gsd-core/references/planner-revision.md", + "gsd-core/references/planner-source-audit.md", + "gsd-core/references/planning-config.md", + "gsd-core/references/prohibition-probe-fixtures/01-streak-reminder/expected.json", + "gsd-core/references/prohibition-probe-fixtures/02-clean-utility/expected.json", + "gsd-core/references/prohibition-probe-fixtures/03-multi-prohibition/expected.json", + "gsd-core/references/prohibition-probe.md", + "gsd-core/references/project-skills-discovery.md", + "gsd-core/references/questioning.md", + "gsd-core/references/research-documentation-lookup.md", + "gsd-core/references/research-philosophy.md", + "gsd-core/references/research-verification-protocol.md", + "gsd-core/references/reviewer-instances.md", + "gsd-core/references/revision-loop.md", + "gsd-core/references/scout-codebase.md", + "gsd-core/references/security-asvs-levels.md", + "gsd-core/references/skeleton-template.md", + "gsd-core/references/sketch-interactivity.md", + "gsd-core/references/sketch-theme-system.md", + "gsd-core/references/sketch-tooling.md", + "gsd-core/references/sketch-variant-patterns.md", + "gsd-core/references/specless-probe-fallback.md", + "gsd-core/references/spidr-splitting.md", + "gsd-core/references/tdd.md", + "gsd-core/references/thinking-models-debug.md", + "gsd-core/references/thinking-models-execution.md", + "gsd-core/references/thinking-models-planning.md", + "gsd-core/references/thinking-models-research.md", + "gsd-core/references/thinking-models-verification.md", + "gsd-core/references/thinking-partner.md", + "gsd-core/references/ui-brand.md", + "gsd-core/references/ui-consideration-probe.md", + "gsd-core/references/universal-anti-patterns.md", + "gsd-core/references/untrusted-input-boundary.md", + "gsd-core/references/user-profiling.md", + "gsd-core/references/user-story-template.md", + "gsd-core/references/verification-overrides.md", + "gsd-core/references/verification-patterns.md", + "gsd-core/references/verify-mvp-mode.md", + "gsd-core/references/workstream-flag.md", + "gsd-core/references/worktree-branch-check.md", + "gsd-core/references/worktree-path-safety.md", + "gsd-core/templates/AI-SPEC.md", + "gsd-core/templates/DEBUG.md", + "gsd-core/templates/README.md", + "gsd-core/templates/SECURITY.md", + "gsd-core/templates/UAT.md", + "gsd-core/templates/UI-SPEC.md", + "gsd-core/templates/VALIDATION.md", + "gsd-core/templates/claude-md.md", + "gsd-core/templates/codebase/architecture.md", + "gsd-core/templates/codebase/concerns.md", + "gsd-core/templates/codebase/conventions.md", + "gsd-core/templates/codebase/integrations.md", + "gsd-core/templates/codebase/stack.md", + "gsd-core/templates/codebase/structure.md", + "gsd-core/templates/codebase/testing.md", + "gsd-core/templates/config.json", + "gsd-core/templates/context.md", + "gsd-core/templates/continue-here.md", + "gsd-core/templates/copilot-instructions.md", + "gsd-core/templates/debug-subagent-prompt.md", + "gsd-core/templates/dev-preferences.md", + "gsd-core/templates/discovery.md", + "gsd-core/templates/discussion-log.md", + "gsd-core/templates/milestone-archive.md", + "gsd-core/templates/milestone.md", + "gsd-core/templates/phase-prompt.md", + "gsd-core/templates/planner-subagent-prompt.md", + "gsd-core/templates/project.md", + "gsd-core/templates/requirements.md", + "gsd-core/templates/research-project/ARCHITECTURE.md", + "gsd-core/templates/research-project/FEATURES.md", + "gsd-core/templates/research-project/PITFALLS.md", + "gsd-core/templates/research-project/STACK.md", + "gsd-core/templates/research-project/SUMMARY.md", + "gsd-core/templates/research.md", + "gsd-core/templates/retrospective.md", + "gsd-core/templates/roadmap.md", + "gsd-core/templates/spec.md", + "gsd-core/templates/state.md", + "gsd-core/templates/summary-complex.md", + "gsd-core/templates/summary-minimal.md", + "gsd-core/templates/summary-standard.md", + "gsd-core/templates/summary.md", + "gsd-core/templates/user-profile.md", + "gsd-core/templates/user-setup.md", + "gsd-core/templates/verification-report.md", + "gsd-core/workflows/_runtime-launcher.snippet.sh", + "gsd-core/workflows/add-backlog.md", + "gsd-core/workflows/add-phase.md", + "gsd-core/workflows/add-tests.md", + "gsd-core/workflows/add-todo.md", + "gsd-core/workflows/ai-integration-phase.md", + "gsd-core/workflows/analyze-dependencies.md", + "gsd-core/workflows/audit-fix.md", + "gsd-core/workflows/audit-milestone.md", + "gsd-core/workflows/audit-uat.md", + "gsd-core/workflows/autonomous.md", + "gsd-core/workflows/check-todos.md", + "gsd-core/workflows/cleanup.md", + "gsd-core/workflows/code-review-fix.md", + "gsd-core/workflows/code-review.md", + "gsd-core/workflows/complete-milestone.md", + "gsd-core/workflows/debug.md", + "gsd-core/workflows/diagnose-issues.md", + "gsd-core/workflows/discovery-phase.md", + "gsd-core/workflows/discuss-phase-assumptions.md", + "gsd-core/workflows/discuss-phase-power.md", + "gsd-core/workflows/discuss-phase.md", + "gsd-core/workflows/discuss-phase/modes/advisor.md", + "gsd-core/workflows/discuss-phase/modes/all.md", + "gsd-core/workflows/discuss-phase/modes/analyze.md", + "gsd-core/workflows/discuss-phase/modes/auto.md", + "gsd-core/workflows/discuss-phase/modes/batch.md", + "gsd-core/workflows/discuss-phase/modes/chain.md", + "gsd-core/workflows/discuss-phase/modes/default.md", + "gsd-core/workflows/discuss-phase/modes/power.md", + "gsd-core/workflows/discuss-phase/modes/text.md", + "gsd-core/workflows/discuss-phase/templates/checkpoint.json", + "gsd-core/workflows/discuss-phase/templates/context.md", + "gsd-core/workflows/discuss-phase/templates/discussion-log.md", + "gsd-core/workflows/do.md", + "gsd-core/workflows/docs-update.md", + "gsd-core/workflows/edit-phase.md", + "gsd-core/workflows/eval-review.md", + "gsd-core/workflows/execute-phase.md", + "gsd-core/workflows/execute-phase/steps/codebase-drift-gate.md", + "gsd-core/workflows/execute-phase/steps/per-plan-worktree-gate.md", + "gsd-core/workflows/execute-phase/steps/post-merge-gate.md", + "gsd-core/workflows/execute-phase/steps/regression-gate.md", + "gsd-core/workflows/execute-phase/steps/worktree-recovery-policy.md", + "gsd-core/workflows/execute-plan.md", + "gsd-core/workflows/explore.md", + "gsd-core/workflows/extract-learnings.md", + "gsd-core/workflows/fast.md", + "gsd-core/workflows/forensics.md", + "gsd-core/workflows/graduation.md", + "gsd-core/workflows/health.md", + "gsd-core/workflows/help.md", + "gsd-core/workflows/help/modes/brief.md", + "gsd-core/workflows/help/modes/default.md", + "gsd-core/workflows/help/modes/full.md", + "gsd-core/workflows/help/modes/topic.md", + "gsd-core/workflows/import.md", + "gsd-core/workflows/inbox.md", + "gsd-core/workflows/ingest-docs.md", + "gsd-core/workflows/insert-phase.md", + "gsd-core/workflows/list-phase-assumptions.md", + "gsd-core/workflows/list-seeds.md", + "gsd-core/workflows/list-workspaces.md", + "gsd-core/workflows/manager.md", + "gsd-core/workflows/map-codebase.md", + "gsd-core/workflows/milestone-summary.md", + "gsd-core/workflows/mvp-phase.md", + "gsd-core/workflows/new-milestone.md", + "gsd-core/workflows/new-project.md", + "gsd-core/workflows/new-workspace.md", + "gsd-core/workflows/next.md", + "gsd-core/workflows/node-repair.md", + "gsd-core/workflows/note.md", + "gsd-core/workflows/onboard.md", + "gsd-core/workflows/pause-work.md", + "gsd-core/workflows/plan-milestone-gaps.md", + "gsd-core/workflows/plan-phase.md", + "gsd-core/workflows/plan-phase/steps/closed-phase-gate.md", + "gsd-core/workflows/plan-phase/steps/prd-express-path.md", + "gsd-core/workflows/plan-phase/steps/windows-troubleshooting.md", + "gsd-core/workflows/plan-review-convergence.md", + "gsd-core/workflows/plant-seed.md", + "gsd-core/workflows/pr-branch.md", + "gsd-core/workflows/profile-user.md", + "gsd-core/workflows/progress.md", + "gsd-core/workflows/quick.md", + "gsd-core/workflows/reapply-patches.md", + "gsd-core/workflows/remove-phase.md", + "gsd-core/workflows/remove-workspace.md", + "gsd-core/workflows/resume-project.md", + "gsd-core/workflows/review.md", + "gsd-core/workflows/scan.md", + "gsd-core/workflows/secure-phase.md", + "gsd-core/workflows/session-report.md", + "gsd-core/workflows/settings-advanced.md", + "gsd-core/workflows/settings-integrations.md", + "gsd-core/workflows/settings.md", + "gsd-core/workflows/ship.md", + "gsd-core/workflows/sketch-wrap-up.md", + "gsd-core/workflows/sketch.md", + "gsd-core/workflows/smart-entry.md", + "gsd-core/workflows/spec-phase.md", + "gsd-core/workflows/spike-wrap-up.md", + "gsd-core/workflows/spike.md", + "gsd-core/workflows/stats.md", + "gsd-core/workflows/sync-skills.md", + "gsd-core/workflows/thread.md", + "gsd-core/workflows/transition.md", + "gsd-core/workflows/ui-phase.md", + "gsd-core/workflows/ui-review.md", + "gsd-core/workflows/ultraplan-phase.md", + "gsd-core/workflows/undo.md", + "gsd-core/workflows/update.md", + "gsd-core/workflows/validate-phase.md", + "gsd-core/workflows/verify-phase.md", + "gsd-core/workflows/verify-work.md", + "scripts/changeset/README.md", + "scripts/changeset/cli.cjs", + "scripts/changeset/github-release-notes.cjs", + "scripts/changeset/lint.cjs", + "scripts/changeset/new.cjs", + "scripts/changeset/parse.cjs", + "scripts/changeset/render.cjs", + "scripts/changeset/serialize.cjs", + "scripts/fix-slash-commands.cjs", + "scripts/gen-capability-registry.cjs", + "scripts/gen-loop-host-contract.cjs", + "scripts/lib/allowlist-ratchet.cjs", + "scripts/lib/cli-exit.cjs", + "skills/gsd-ns-context/SKILL.md", + "skills/gsd-ns-context/skills/docs-update/SKILL.md", + "skills/gsd-ns-context/skills/extract-learnings/SKILL.md", + "skills/gsd-ns-context/skills/graphify/SKILL.md", + "skills/gsd-ns-context/skills/map-codebase/SKILL.md", + "skills/gsd-ns-context/skills/mempalace-capture/SKILL.md", + "skills/gsd-ns-context/skills/mempalace-recall/SKILL.md", + "skills/gsd-ns-ideate/SKILL.md", + "skills/gsd-ns-ideate/skills/capture/SKILL.md", + "skills/gsd-ns-ideate/skills/explore/SKILL.md", + "skills/gsd-ns-ideate/skills/sketch/SKILL.md", + "skills/gsd-ns-ideate/skills/spec-phase/SKILL.md", + "skills/gsd-ns-ideate/skills/spike/SKILL.md", + "skills/gsd-ns-manage/SKILL.md", + "skills/gsd-ns-manage/skills/cleanup/SKILL.md", + "skills/gsd-ns-manage/skills/config/SKILL.md", + "skills/gsd-ns-manage/skills/health/SKILL.md", + "skills/gsd-ns-manage/skills/help/SKILL.md", + "skills/gsd-ns-manage/skills/inbox/SKILL.md", + "skills/gsd-ns-manage/skills/manager/SKILL.md", + "skills/gsd-ns-manage/skills/pause-work/SKILL.md", + "skills/gsd-ns-manage/skills/pr-branch/SKILL.md", + "skills/gsd-ns-manage/skills/resume-work/SKILL.md", + "skills/gsd-ns-manage/skills/settings/SKILL.md", + "skills/gsd-ns-manage/skills/ship/SKILL.md", + "skills/gsd-ns-manage/skills/stats/SKILL.md", + "skills/gsd-ns-manage/skills/surface/SKILL.md", + "skills/gsd-ns-manage/skills/thread/SKILL.md", + "skills/gsd-ns-manage/skills/undo/SKILL.md", + "skills/gsd-ns-manage/skills/update/SKILL.md", + "skills/gsd-ns-manage/skills/workspace/SKILL.md", + "skills/gsd-ns-manage/skills/workstreams/SKILL.md", + "skills/gsd-ns-project/SKILL.md", + "skills/gsd-ns-project/skills/audit-milestone/SKILL.md", + "skills/gsd-ns-project/skills/complete-milestone/SKILL.md", + "skills/gsd-ns-project/skills/import/SKILL.md", + "skills/gsd-ns-project/skills/ingest-docs/SKILL.md", + "skills/gsd-ns-project/skills/milestone-summary/SKILL.md", + "skills/gsd-ns-project/skills/new-milestone/SKILL.md", + "skills/gsd-ns-project/skills/new-project/SKILL.md", + "skills/gsd-ns-project/skills/onboard/SKILL.md", + "skills/gsd-ns-project/skills/profile-user/SKILL.md", + "skills/gsd-ns-project/skills/review-backlog/SKILL.md", + "skills/gsd-ns-review/SKILL.md", + "skills/gsd-ns-review/skills/audit-fix/SKILL.md", + "skills/gsd-ns-review/skills/audit-uat/SKILL.md", + "skills/gsd-ns-review/skills/code-review/SKILL.md", + "skills/gsd-ns-review/skills/debug/SKILL.md", + "skills/gsd-ns-review/skills/eval-review/SKILL.md", + "skills/gsd-ns-review/skills/forensics/SKILL.md", + "skills/gsd-ns-review/skills/review/SKILL.md", + "skills/gsd-ns-review/skills/secure-phase/SKILL.md", + "skills/gsd-ns-review/skills/ui-phase/SKILL.md", + "skills/gsd-ns-review/skills/ui-review/SKILL.md", + "skills/gsd-ns-review/skills/validate-phase/SKILL.md", + "skills/gsd-ns-workflow/SKILL.md", + "skills/gsd-ns-workflow/skills/add-tests/SKILL.md", + "skills/gsd-ns-workflow/skills/ai-integration-phase/SKILL.md", + "skills/gsd-ns-workflow/skills/autonomous/SKILL.md", + "skills/gsd-ns-workflow/skills/discuss-phase/SKILL.md", + "skills/gsd-ns-workflow/skills/execute-phase/SKILL.md", + "skills/gsd-ns-workflow/skills/fast/SKILL.md", + "skills/gsd-ns-workflow/skills/mvp-phase/SKILL.md", + "skills/gsd-ns-workflow/skills/next/SKILL.md", + "skills/gsd-ns-workflow/skills/phase/SKILL.md", + "skills/gsd-ns-workflow/skills/plan-phase/SKILL.md", + "skills/gsd-ns-workflow/skills/plan-review-convergence/SKILL.md", + "skills/gsd-ns-workflow/skills/progress/SKILL.md", + "skills/gsd-ns-workflow/skills/quick/SKILL.md", + "skills/gsd-ns-workflow/skills/spec-phase/SKILL.md", + "skills/gsd-ns-workflow/skills/ultraplan-phase/SKILL.md", + "skills/gsd-ns-workflow/skills/verify-work/SKILL.md" +] diff --git a/tests/fixtures/install-tree/codebuddy.json b/tests/fixtures/install-tree/codebuddy.json new file mode 100644 index 000000000..dcc5e54bc --- /dev/null +++ b/tests/fixtures/install-tree/codebuddy.json @@ -0,0 +1,497 @@ +[ + ".gsd-profile", + ".gsd/defaults.json", + "agents/gsd-advisor-researcher.md", + "agents/gsd-ai-researcher.md", + "agents/gsd-assumptions-analyzer.md", + "agents/gsd-code-fixer.md", + "agents/gsd-code-reviewer.md", + "agents/gsd-codebase-mapper.md", + "agents/gsd-debug-session-manager.md", + "agents/gsd-debugger.md", + "agents/gsd-doc-classifier.md", + "agents/gsd-doc-synthesizer.md", + "agents/gsd-doc-verifier.md", + "agents/gsd-doc-writer.md", + "agents/gsd-domain-researcher.md", + "agents/gsd-eval-auditor.md", + "agents/gsd-eval-planner.md", + "agents/gsd-executor.md", + "agents/gsd-framework-selector.md", + "agents/gsd-integration-checker.md", + "agents/gsd-intel-updater.md", + "agents/gsd-mempalace-curator.md", + "agents/gsd-nyquist-auditor.md", + "agents/gsd-pattern-mapper.md", + "agents/gsd-phase-researcher.md", + "agents/gsd-plan-checker.md", + "agents/gsd-planner.md", + "agents/gsd-project-researcher.md", + "agents/gsd-research-synthesizer.md", + "agents/gsd-roadmapper.md", + "agents/gsd-security-auditor.md", + "agents/gsd-ui-auditor.md", + "agents/gsd-ui-checker.md", + "agents/gsd-ui-researcher.md", + "agents/gsd-user-profiler.md", + "agents/gsd-verifier.md", + "commands/gsd-add-tests.md", + "commands/gsd-ai-integration-phase.md", + "commands/gsd-audit-fix.md", + "commands/gsd-audit-milestone.md", + "commands/gsd-audit-uat.md", + "commands/gsd-autonomous.md", + "commands/gsd-capture.md", + "commands/gsd-cleanup.md", + "commands/gsd-code-review.md", + "commands/gsd-complete-milestone.md", + "commands/gsd-config.md", + "commands/gsd-debug.md", + "commands/gsd-discuss-phase.md", + "commands/gsd-docs-update.md", + "commands/gsd-eval-review.md", + "commands/gsd-execute-phase.md", + "commands/gsd-explore.md", + "commands/gsd-extract-learnings.md", + "commands/gsd-fast.md", + "commands/gsd-forensics.md", + "commands/gsd-graphify.md", + "commands/gsd-health.md", + "commands/gsd-help.md", + "commands/gsd-import.md", + "commands/gsd-inbox.md", + "commands/gsd-ingest-docs.md", + "commands/gsd-manager.md", + "commands/gsd-map-codebase.md", + "commands/gsd-mempalace-capture.md", + "commands/gsd-mempalace-recall.md", + "commands/gsd-milestone-summary.md", + "commands/gsd-mvp-phase.md", + "commands/gsd-new-milestone.md", + "commands/gsd-new-project.md", + "commands/gsd-next.md", + "commands/gsd-ns-context.md", + "commands/gsd-ns-ideate.md", + "commands/gsd-ns-manage.md", + "commands/gsd-ns-project.md", + "commands/gsd-ns-review.md", + "commands/gsd-ns-workflow.md", + "commands/gsd-onboard.md", + "commands/gsd-pause-work.md", + "commands/gsd-phase.md", + "commands/gsd-plan-phase.md", + "commands/gsd-plan-review-convergence.md", + "commands/gsd-pr-branch.md", + "commands/gsd-profile-user.md", + "commands/gsd-progress.md", + "commands/gsd-quick.md", + "commands/gsd-resume-work.md", + "commands/gsd-review-backlog.md", + "commands/gsd-review.md", + "commands/gsd-secure-phase.md", + "commands/gsd-settings.md", + "commands/gsd-ship.md", + "commands/gsd-sketch.md", + "commands/gsd-spec-phase.md", + "commands/gsd-spike.md", + "commands/gsd-stats.md", + "commands/gsd-surface.md", + "commands/gsd-thread.md", + "commands/gsd-ui-phase.md", + "commands/gsd-ui-review.md", + "commands/gsd-ultraplan-phase.md", + "commands/gsd-undo.md", + "commands/gsd-update.md", + "commands/gsd-validate-phase.md", + "commands/gsd-verify-work.md", + "commands/gsd-workspace.md", + "commands/gsd-workstreams.md", + "gsd-core/VERSION", + "gsd-core/bin/check-latest-version.cjs", + "gsd-core/bin/ensure-runtime-build.cjs", + "gsd-core/bin/gsd-tools.cjs", + "gsd-core/bin/gsd_run", + "gsd-core/bin/shared/config-defaults.manifest.json", + "gsd-core/bin/shared/config-schema.manifest.json", + "gsd-core/bin/shared/model-catalog.json", + "gsd-core/bin/shared/runtime-aliases.manifest.json", + "gsd-core/bin/verify-reapply-patches.cjs", + "gsd-core/contexts/dev.md", + "gsd-core/contexts/research.md", + "gsd-core/contexts/review.md", + "gsd-core/references/agent-contracts.md", + "gsd-core/references/agent-skills-bootstrap.md", + "gsd-core/references/ai-evals.md", + "gsd-core/references/ai-frameworks.md", + "gsd-core/references/api-coverage.md", + "gsd-core/references/artifact-types.md", + "gsd-core/references/autonomous-smart-discuss.md", + "gsd-core/references/checkpoints.md", + "gsd-core/references/common-bug-patterns.md", + "gsd-core/references/context-budget.md", + "gsd-core/references/continuation-format.md", + "gsd-core/references/debugger-philosophy.md", + "gsd-core/references/decimal-phase-calculation.md", + "gsd-core/references/doc-conflict-engine.md", + "gsd-core/references/domain-probes.md", + "gsd-core/references/edge-probe-fixtures/01-round-half-even/expected-coverage.json", + "gsd-core/references/edge-probe-fixtures/01-round-half-even/requirements.json", + "gsd-core/references/edge-probe-fixtures/02-merge-intervals/expected-coverage.json", + "gsd-core/references/edge-probe-fixtures/02-merge-intervals/requirements.json", + "gsd-core/references/edge-probe-fixtures/03-truncate-graphemes/expected-coverage.json", + "gsd-core/references/edge-probe-fixtures/03-truncate-graphemes/requirements.json", + "gsd-core/references/edge-probe-fixtures/04-money-rounding/expected-coverage.json", + "gsd-core/references/edge-probe-fixtures/04-money-rounding/requirements.json", + "gsd-core/references/edge-probe-fixtures/05-list-dedupe/expected-coverage.json", + "gsd-core/references/edge-probe-fixtures/05-list-dedupe/requirements.json", + "gsd-core/references/edge-probe-fixtures/06-resolved-mixed/expected-coverage.json", + "gsd-core/references/edge-probe-fixtures/06-resolved-mixed/requirements.json", + "gsd-core/references/edge-probe-fixtures/06-resolved-mixed/resolutions.json", + "gsd-core/references/edge-probe.md", + "gsd-core/references/execute-mvp-tdd.md", + "gsd-core/references/execute-phase-between-wave-reset.md", + "gsd-core/references/execute-phase-context-guard.md", + "gsd-core/references/execute-phase-wave-guard.md", + "gsd-core/references/executor-examples.md", + "gsd-core/references/few-shot-examples/plan-checker.md", + "gsd-core/references/few-shot-examples/verifier.md", + "gsd-core/references/gate-prompts.md", + "gsd-core/references/gates.md", + "gsd-core/references/git-integration.md", + "gsd-core/references/git-planning-commit.md", + "gsd-core/references/gsd-run-resolver.md", + "gsd-core/references/honest-verifier.md", + "gsd-core/references/ios-scaffold.md", + "gsd-core/references/loop-hook-dispatch.md", + "gsd-core/references/mandatory-initial-read.md", + "gsd-core/references/model-profile-resolution.md", + "gsd-core/references/model-profiles.md", + "gsd-core/references/mvp-concepts.md", + "gsd-core/references/phase-argument-parsing.md", + "gsd-core/references/planner-antipatterns.md", + "gsd-core/references/planner-chunked.md", + "gsd-core/references/planner-gap-closure.md", + "gsd-core/references/planner-graphify-auto-update.md", + "gsd-core/references/planner-guidance.md", + "gsd-core/references/planner-human-verify-mode.md", + "gsd-core/references/planner-interface-context.md", + "gsd-core/references/planner-load-graph-context.md", + "gsd-core/references/planner-mvp-mode.md", + "gsd-core/references/planner-reviews.md", + "gsd-core/references/planner-revision.md", + "gsd-core/references/planner-source-audit.md", + "gsd-core/references/planning-config.md", + "gsd-core/references/prohibition-probe-fixtures/01-streak-reminder/expected.json", + "gsd-core/references/prohibition-probe-fixtures/02-clean-utility/expected.json", + "gsd-core/references/prohibition-probe-fixtures/03-multi-prohibition/expected.json", + "gsd-core/references/prohibition-probe.md", + "gsd-core/references/project-skills-discovery.md", + "gsd-core/references/questioning.md", + "gsd-core/references/research-documentation-lookup.md", + "gsd-core/references/research-philosophy.md", + "gsd-core/references/research-verification-protocol.md", + "gsd-core/references/reviewer-instances.md", + "gsd-core/references/revision-loop.md", + "gsd-core/references/scout-codebase.md", + "gsd-core/references/security-asvs-levels.md", + "gsd-core/references/skeleton-template.md", + "gsd-core/references/sketch-interactivity.md", + "gsd-core/references/sketch-theme-system.md", + "gsd-core/references/sketch-tooling.md", + "gsd-core/references/sketch-variant-patterns.md", + "gsd-core/references/specless-probe-fallback.md", + "gsd-core/references/spidr-splitting.md", + "gsd-core/references/tdd.md", + "gsd-core/references/thinking-models-debug.md", + "gsd-core/references/thinking-models-execution.md", + "gsd-core/references/thinking-models-planning.md", + "gsd-core/references/thinking-models-research.md", + "gsd-core/references/thinking-models-verification.md", + "gsd-core/references/thinking-partner.md", + "gsd-core/references/ui-brand.md", + "gsd-core/references/ui-consideration-probe.md", + "gsd-core/references/universal-anti-patterns.md", + "gsd-core/references/untrusted-input-boundary.md", + "gsd-core/references/user-profiling.md", + "gsd-core/references/user-story-template.md", + "gsd-core/references/verification-overrides.md", + "gsd-core/references/verification-patterns.md", + "gsd-core/references/verify-mvp-mode.md", + "gsd-core/references/workstream-flag.md", + "gsd-core/references/worktree-branch-check.md", + "gsd-core/references/worktree-path-safety.md", + "gsd-core/templates/AI-SPEC.md", + "gsd-core/templates/DEBUG.md", + "gsd-core/templates/README.md", + "gsd-core/templates/SECURITY.md", + "gsd-core/templates/UAT.md", + "gsd-core/templates/UI-SPEC.md", + "gsd-core/templates/VALIDATION.md", + "gsd-core/templates/claude-md.md", + "gsd-core/templates/codebase/architecture.md", + "gsd-core/templates/codebase/concerns.md", + "gsd-core/templates/codebase/conventions.md", + "gsd-core/templates/codebase/integrations.md", + "gsd-core/templates/codebase/stack.md", + "gsd-core/templates/codebase/structure.md", + "gsd-core/templates/codebase/testing.md", + "gsd-core/templates/config.json", + "gsd-core/templates/context.md", + "gsd-core/templates/continue-here.md", + "gsd-core/templates/copilot-instructions.md", + "gsd-core/templates/debug-subagent-prompt.md", + "gsd-core/templates/dev-preferences.md", + "gsd-core/templates/discovery.md", + "gsd-core/templates/discussion-log.md", + "gsd-core/templates/milestone-archive.md", + "gsd-core/templates/milestone.md", + "gsd-core/templates/phase-prompt.md", + "gsd-core/templates/planner-subagent-prompt.md", + "gsd-core/templates/project.md", + "gsd-core/templates/requirements.md", + "gsd-core/templates/research-project/ARCHITECTURE.md", + "gsd-core/templates/research-project/FEATURES.md", + "gsd-core/templates/research-project/PITFALLS.md", + "gsd-core/templates/research-project/STACK.md", + "gsd-core/templates/research-project/SUMMARY.md", + "gsd-core/templates/research.md", + "gsd-core/templates/retrospective.md", + "gsd-core/templates/roadmap.md", + "gsd-core/templates/spec.md", + "gsd-core/templates/state.md", + "gsd-core/templates/summary-complex.md", + "gsd-core/templates/summary-minimal.md", + "gsd-core/templates/summary-standard.md", + "gsd-core/templates/summary.md", + "gsd-core/templates/user-profile.md", + "gsd-core/templates/user-setup.md", + "gsd-core/templates/verification-report.md", + "gsd-core/workflows/_runtime-launcher.snippet.sh", + "gsd-core/workflows/add-backlog.md", + "gsd-core/workflows/add-phase.md", + "gsd-core/workflows/add-tests.md", + "gsd-core/workflows/add-todo.md", + "gsd-core/workflows/ai-integration-phase.md", + "gsd-core/workflows/analyze-dependencies.md", + "gsd-core/workflows/audit-fix.md", + "gsd-core/workflows/audit-milestone.md", + "gsd-core/workflows/audit-uat.md", + "gsd-core/workflows/autonomous.md", + "gsd-core/workflows/check-todos.md", + "gsd-core/workflows/cleanup.md", + "gsd-core/workflows/code-review-fix.md", + "gsd-core/workflows/code-review.md", + "gsd-core/workflows/complete-milestone.md", + "gsd-core/workflows/debug.md", + "gsd-core/workflows/diagnose-issues.md", + "gsd-core/workflows/discovery-phase.md", + "gsd-core/workflows/discuss-phase-assumptions.md", + "gsd-core/workflows/discuss-phase-power.md", + "gsd-core/workflows/discuss-phase.md", + "gsd-core/workflows/discuss-phase/modes/advisor.md", + "gsd-core/workflows/discuss-phase/modes/all.md", + "gsd-core/workflows/discuss-phase/modes/analyze.md", + "gsd-core/workflows/discuss-phase/modes/auto.md", + "gsd-core/workflows/discuss-phase/modes/batch.md", + "gsd-core/workflows/discuss-phase/modes/chain.md", + "gsd-core/workflows/discuss-phase/modes/default.md", + "gsd-core/workflows/discuss-phase/modes/power.md", + "gsd-core/workflows/discuss-phase/modes/text.md", + "gsd-core/workflows/discuss-phase/templates/checkpoint.json", + "gsd-core/workflows/discuss-phase/templates/context.md", + "gsd-core/workflows/discuss-phase/templates/discussion-log.md", + "gsd-core/workflows/do.md", + "gsd-core/workflows/docs-update.md", + "gsd-core/workflows/edit-phase.md", + "gsd-core/workflows/eval-review.md", + "gsd-core/workflows/execute-phase.md", + "gsd-core/workflows/execute-phase/steps/codebase-drift-gate.md", + "gsd-core/workflows/execute-phase/steps/per-plan-worktree-gate.md", + "gsd-core/workflows/execute-phase/steps/post-merge-gate.md", + "gsd-core/workflows/execute-phase/steps/regression-gate.md", + "gsd-core/workflows/execute-phase/steps/worktree-recovery-policy.md", + "gsd-core/workflows/execute-plan.md", + "gsd-core/workflows/explore.md", + "gsd-core/workflows/extract-learnings.md", + "gsd-core/workflows/fast.md", + "gsd-core/workflows/forensics.md", + "gsd-core/workflows/graduation.md", + "gsd-core/workflows/health.md", + "gsd-core/workflows/help.md", + "gsd-core/workflows/help/modes/brief.md", + "gsd-core/workflows/help/modes/default.md", + "gsd-core/workflows/help/modes/full.md", + "gsd-core/workflows/help/modes/topic.md", + "gsd-core/workflows/import.md", + "gsd-core/workflows/inbox.md", + "gsd-core/workflows/ingest-docs.md", + "gsd-core/workflows/insert-phase.md", + "gsd-core/workflows/list-phase-assumptions.md", + "gsd-core/workflows/list-seeds.md", + "gsd-core/workflows/list-workspaces.md", + "gsd-core/workflows/manager.md", + "gsd-core/workflows/map-codebase.md", + "gsd-core/workflows/milestone-summary.md", + "gsd-core/workflows/mvp-phase.md", + "gsd-core/workflows/new-milestone.md", + "gsd-core/workflows/new-project.md", + "gsd-core/workflows/new-workspace.md", + "gsd-core/workflows/next.md", + "gsd-core/workflows/node-repair.md", + "gsd-core/workflows/note.md", + "gsd-core/workflows/onboard.md", + "gsd-core/workflows/pause-work.md", + "gsd-core/workflows/plan-milestone-gaps.md", + "gsd-core/workflows/plan-phase.md", + "gsd-core/workflows/plan-phase/steps/closed-phase-gate.md", + "gsd-core/workflows/plan-phase/steps/prd-express-path.md", + "gsd-core/workflows/plan-phase/steps/windows-troubleshooting.md", + "gsd-core/workflows/plan-review-convergence.md", + "gsd-core/workflows/plant-seed.md", + "gsd-core/workflows/pr-branch.md", + "gsd-core/workflows/profile-user.md", + "gsd-core/workflows/progress.md", + "gsd-core/workflows/quick.md", + "gsd-core/workflows/reapply-patches.md", + "gsd-core/workflows/remove-phase.md", + "gsd-core/workflows/remove-workspace.md", + "gsd-core/workflows/resume-project.md", + "gsd-core/workflows/review.md", + "gsd-core/workflows/scan.md", + "gsd-core/workflows/secure-phase.md", + "gsd-core/workflows/session-report.md", + "gsd-core/workflows/settings-advanced.md", + "gsd-core/workflows/settings-integrations.md", + "gsd-core/workflows/settings.md", + "gsd-core/workflows/ship.md", + "gsd-core/workflows/sketch-wrap-up.md", + "gsd-core/workflows/sketch.md", + "gsd-core/workflows/smart-entry.md", + "gsd-core/workflows/spec-phase.md", + "gsd-core/workflows/spike-wrap-up.md", + "gsd-core/workflows/spike.md", + "gsd-core/workflows/stats.md", + "gsd-core/workflows/sync-skills.md", + "gsd-core/workflows/thread.md", + "gsd-core/workflows/transition.md", + "gsd-core/workflows/ui-phase.md", + "gsd-core/workflows/ui-review.md", + "gsd-core/workflows/ultraplan-phase.md", + "gsd-core/workflows/undo.md", + "gsd-core/workflows/update.md", + "gsd-core/workflows/validate-phase.md", + "gsd-core/workflows/verify-phase.md", + "gsd-core/workflows/verify-work.md", + "hooks/gsd-check-update-worker.js", + "hooks/gsd-check-update.js", + "hooks/gsd-config-reload.js", + "hooks/gsd-context-monitor.js", + "hooks/gsd-cursor-post-tool.js", + "hooks/gsd-cursor-pre-tool.js", + "hooks/gsd-cursor-session-start.js", + "hooks/gsd-cursor-stop.js", + "hooks/gsd-cursor-subagent-start.js", + "hooks/gsd-cursor-subagent-stop.js", + "hooks/gsd-ensure-canonical-path.js", + "hooks/gsd-graphify-update.sh", + "hooks/gsd-phase-boundary.sh", + "hooks/gsd-prompt-guard.js", + "hooks/gsd-read-guard.js", + "hooks/gsd-read-injection-scanner.js", + "hooks/gsd-session-state.sh", + "hooks/gsd-statusline.js", + "hooks/gsd-update-banner.js", + "hooks/gsd-validate-commit.sh", + "hooks/gsd-windsurf-pre-command.js", + "hooks/gsd-windsurf-pre-write.js", + "hooks/gsd-workflow-guard.js", + "hooks/gsd-worktree-path-guard.js", + "hooks/lib/git-cmd.js", + "hooks/lib/gsd-graphify-rebuild.sh", + "hooks/managed-hooks-registry.cjs", + "package.json", + "scripts/changeset/README.md", + "scripts/changeset/cli.cjs", + "scripts/changeset/github-release-notes.cjs", + "scripts/changeset/lint.cjs", + "scripts/changeset/new.cjs", + "scripts/changeset/parse.cjs", + "scripts/changeset/render.cjs", + "scripts/changeset/serialize.cjs", + "scripts/fix-slash-commands.cjs", + "scripts/gen-capability-registry.cjs", + "scripts/gen-loop-host-contract.cjs", + "scripts/lib/allowlist-ratchet.cjs", + "scripts/lib/cli-exit.cjs", + "skills/gsd-add-tests/SKILL.md", + "skills/gsd-ai-integration-phase/SKILL.md", + "skills/gsd-audit-fix/SKILL.md", + "skills/gsd-audit-milestone/SKILL.md", + "skills/gsd-audit-uat/SKILL.md", + "skills/gsd-autonomous/SKILL.md", + "skills/gsd-capture/SKILL.md", + "skills/gsd-cleanup/SKILL.md", + "skills/gsd-code-review/SKILL.md", + "skills/gsd-complete-milestone/SKILL.md", + "skills/gsd-config/SKILL.md", + "skills/gsd-debug/SKILL.md", + "skills/gsd-discuss-phase/SKILL.md", + "skills/gsd-docs-update/SKILL.md", + "skills/gsd-eval-review/SKILL.md", + "skills/gsd-execute-phase/SKILL.md", + "skills/gsd-explore/SKILL.md", + "skills/gsd-extract-learnings/SKILL.md", + "skills/gsd-fast/SKILL.md", + "skills/gsd-forensics/SKILL.md", + "skills/gsd-graphify/SKILL.md", + "skills/gsd-health/SKILL.md", + "skills/gsd-help/SKILL.md", + "skills/gsd-import/SKILL.md", + "skills/gsd-inbox/SKILL.md", + "skills/gsd-ingest-docs/SKILL.md", + "skills/gsd-manager/SKILL.md", + "skills/gsd-map-codebase/SKILL.md", + "skills/gsd-mempalace-capture/SKILL.md", + "skills/gsd-mempalace-recall/SKILL.md", + "skills/gsd-milestone-summary/SKILL.md", + "skills/gsd-mvp-phase/SKILL.md", + "skills/gsd-new-milestone/SKILL.md", + "skills/gsd-new-project/SKILL.md", + "skills/gsd-next/SKILL.md", + "skills/gsd-ns-context/SKILL.md", + "skills/gsd-ns-ideate/SKILL.md", + "skills/gsd-ns-manage/SKILL.md", + "skills/gsd-ns-project/SKILL.md", + "skills/gsd-ns-review/SKILL.md", + "skills/gsd-ns-workflow/SKILL.md", + "skills/gsd-onboard/SKILL.md", + "skills/gsd-pause-work/SKILL.md", + "skills/gsd-phase/SKILL.md", + "skills/gsd-plan-phase/SKILL.md", + "skills/gsd-plan-review-convergence/SKILL.md", + "skills/gsd-pr-branch/SKILL.md", + "skills/gsd-profile-user/SKILL.md", + "skills/gsd-progress/SKILL.md", + "skills/gsd-quick/SKILL.md", + "skills/gsd-resume-work/SKILL.md", + "skills/gsd-review-backlog/SKILL.md", + "skills/gsd-review/SKILL.md", + "skills/gsd-secure-phase/SKILL.md", + "skills/gsd-settings/SKILL.md", + "skills/gsd-ship/SKILL.md", + "skills/gsd-sketch/SKILL.md", + "skills/gsd-spec-phase/SKILL.md", + "skills/gsd-spike/SKILL.md", + "skills/gsd-stats/SKILL.md", + "skills/gsd-surface/SKILL.md", + "skills/gsd-thread/SKILL.md", + "skills/gsd-ui-phase/SKILL.md", + "skills/gsd-ui-review/SKILL.md", + "skills/gsd-ultraplan-phase/SKILL.md", + "skills/gsd-undo/SKILL.md", + "skills/gsd-update/SKILL.md", + "skills/gsd-validate-phase/SKILL.md", + "skills/gsd-verify-work/SKILL.md", + "skills/gsd-workspace/SKILL.md", + "skills/gsd-workstreams/SKILL.md" +] diff --git a/tests/fixtures/install-tree/codex.json b/tests/fixtures/install-tree/codex.json new file mode 100644 index 000000000..a5db2f467 --- /dev/null +++ b/tests/fixtures/install-tree/codex.json @@ -0,0 +1,435 @@ +[ + ".agents/skills/gsd-add-tests/SKILL.md", + ".agents/skills/gsd-ai-integration-phase/SKILL.md", + ".agents/skills/gsd-audit-fix/SKILL.md", + ".agents/skills/gsd-audit-milestone/SKILL.md", + ".agents/skills/gsd-audit-uat/SKILL.md", + ".agents/skills/gsd-autonomous/SKILL.md", + ".agents/skills/gsd-capture/SKILL.md", + ".agents/skills/gsd-cleanup/SKILL.md", + ".agents/skills/gsd-code-review/SKILL.md", + ".agents/skills/gsd-complete-milestone/SKILL.md", + ".agents/skills/gsd-config/SKILL.md", + ".agents/skills/gsd-debug/SKILL.md", + ".agents/skills/gsd-discuss-phase/SKILL.md", + ".agents/skills/gsd-docs-update/SKILL.md", + ".agents/skills/gsd-eval-review/SKILL.md", + ".agents/skills/gsd-execute-phase/SKILL.md", + ".agents/skills/gsd-explore/SKILL.md", + ".agents/skills/gsd-extract-learnings/SKILL.md", + ".agents/skills/gsd-fast/SKILL.md", + ".agents/skills/gsd-forensics/SKILL.md", + ".agents/skills/gsd-graphify/SKILL.md", + ".agents/skills/gsd-health/SKILL.md", + ".agents/skills/gsd-help/SKILL.md", + ".agents/skills/gsd-import/SKILL.md", + ".agents/skills/gsd-inbox/SKILL.md", + ".agents/skills/gsd-ingest-docs/SKILL.md", + ".agents/skills/gsd-manager/SKILL.md", + ".agents/skills/gsd-map-codebase/SKILL.md", + ".agents/skills/gsd-mempalace-capture/SKILL.md", + ".agents/skills/gsd-mempalace-recall/SKILL.md", + ".agents/skills/gsd-milestone-summary/SKILL.md", + ".agents/skills/gsd-mvp-phase/SKILL.md", + ".agents/skills/gsd-new-milestone/SKILL.md", + ".agents/skills/gsd-new-project/SKILL.md", + ".agents/skills/gsd-next/SKILL.md", + ".agents/skills/gsd-ns-context/SKILL.md", + ".agents/skills/gsd-ns-ideate/SKILL.md", + ".agents/skills/gsd-ns-manage/SKILL.md", + ".agents/skills/gsd-ns-project/SKILL.md", + ".agents/skills/gsd-ns-review/SKILL.md", + ".agents/skills/gsd-ns-workflow/SKILL.md", + ".agents/skills/gsd-onboard/SKILL.md", + ".agents/skills/gsd-pause-work/SKILL.md", + ".agents/skills/gsd-phase/SKILL.md", + ".agents/skills/gsd-plan-phase/SKILL.md", + ".agents/skills/gsd-plan-review-convergence/SKILL.md", + ".agents/skills/gsd-pr-branch/SKILL.md", + ".agents/skills/gsd-profile-user/SKILL.md", + ".agents/skills/gsd-progress/SKILL.md", + ".agents/skills/gsd-quick/SKILL.md", + ".agents/skills/gsd-resume-work/SKILL.md", + ".agents/skills/gsd-review-backlog/SKILL.md", + ".agents/skills/gsd-review/SKILL.md", + ".agents/skills/gsd-secure-phase/SKILL.md", + ".agents/skills/gsd-settings/SKILL.md", + ".agents/skills/gsd-ship/SKILL.md", + ".agents/skills/gsd-sketch/SKILL.md", + ".agents/skills/gsd-spec-phase/SKILL.md", + ".agents/skills/gsd-spike/SKILL.md", + ".agents/skills/gsd-stats/SKILL.md", + ".agents/skills/gsd-surface/SKILL.md", + ".agents/skills/gsd-thread/SKILL.md", + ".agents/skills/gsd-ui-phase/SKILL.md", + ".agents/skills/gsd-ui-review/SKILL.md", + ".agents/skills/gsd-ultraplan-phase/SKILL.md", + ".agents/skills/gsd-undo/SKILL.md", + ".agents/skills/gsd-update/SKILL.md", + ".agents/skills/gsd-validate-phase/SKILL.md", + ".agents/skills/gsd-verify-work/SKILL.md", + ".agents/skills/gsd-workspace/SKILL.md", + ".agents/skills/gsd-workstreams/SKILL.md", + ".gsd-profile", + ".gsd/defaults.json", + "agents/gsd-advisor-researcher.md", + "agents/gsd-advisor-researcher.toml", + "agents/gsd-ai-researcher.md", + "agents/gsd-ai-researcher.toml", + "agents/gsd-assumptions-analyzer.md", + "agents/gsd-assumptions-analyzer.toml", + "agents/gsd-code-fixer.md", + "agents/gsd-code-fixer.toml", + "agents/gsd-code-reviewer.md", + "agents/gsd-code-reviewer.toml", + "agents/gsd-codebase-mapper.md", + "agents/gsd-codebase-mapper.toml", + "agents/gsd-debug-session-manager.md", + "agents/gsd-debug-session-manager.toml", + "agents/gsd-debugger.md", + "agents/gsd-debugger.toml", + "agents/gsd-doc-classifier.md", + "agents/gsd-doc-classifier.toml", + "agents/gsd-doc-synthesizer.md", + "agents/gsd-doc-synthesizer.toml", + "agents/gsd-doc-verifier.md", + "agents/gsd-doc-verifier.toml", + "agents/gsd-doc-writer.md", + "agents/gsd-doc-writer.toml", + "agents/gsd-domain-researcher.md", + "agents/gsd-domain-researcher.toml", + "agents/gsd-eval-auditor.md", + "agents/gsd-eval-auditor.toml", + "agents/gsd-eval-planner.md", + "agents/gsd-eval-planner.toml", + "agents/gsd-executor.md", + "agents/gsd-executor.toml", + "agents/gsd-framework-selector.md", + "agents/gsd-framework-selector.toml", + "agents/gsd-integration-checker.md", + "agents/gsd-integration-checker.toml", + "agents/gsd-intel-updater.md", + "agents/gsd-intel-updater.toml", + "agents/gsd-mempalace-curator.md", + "agents/gsd-mempalace-curator.toml", + "agents/gsd-nyquist-auditor.md", + "agents/gsd-nyquist-auditor.toml", + "agents/gsd-pattern-mapper.md", + "agents/gsd-pattern-mapper.toml", + "agents/gsd-phase-researcher.md", + "agents/gsd-phase-researcher.toml", + "agents/gsd-plan-checker.md", + "agents/gsd-plan-checker.toml", + "agents/gsd-planner.md", + "agents/gsd-planner.toml", + "agents/gsd-project-researcher.md", + "agents/gsd-project-researcher.toml", + "agents/gsd-research-synthesizer.md", + "agents/gsd-research-synthesizer.toml", + "agents/gsd-roadmapper.md", + "agents/gsd-roadmapper.toml", + "agents/gsd-security-auditor.md", + "agents/gsd-security-auditor.toml", + "agents/gsd-ui-auditor.md", + "agents/gsd-ui-auditor.toml", + "agents/gsd-ui-checker.md", + "agents/gsd-ui-checker.toml", + "agents/gsd-ui-researcher.md", + "agents/gsd-ui-researcher.toml", + "agents/gsd-user-profiler.md", + "agents/gsd-user-profiler.toml", + "agents/gsd-verifier.md", + "agents/gsd-verifier.toml", + "config.toml", + "gsd-core/VERSION", + "gsd-core/bin/check-latest-version.cjs", + "gsd-core/bin/ensure-runtime-build.cjs", + "gsd-core/bin/gsd-tools.cjs", + "gsd-core/bin/gsd_run", + "gsd-core/bin/shared/config-defaults.manifest.json", + "gsd-core/bin/shared/config-schema.manifest.json", + "gsd-core/bin/shared/model-catalog.json", + "gsd-core/bin/shared/runtime-aliases.manifest.json", + "gsd-core/bin/verify-reapply-patches.cjs", + "gsd-core/contexts/dev.md", + "gsd-core/contexts/research.md", + "gsd-core/contexts/review.md", + "gsd-core/references/agent-contracts.md", + "gsd-core/references/agent-skills-bootstrap.md", + "gsd-core/references/ai-evals.md", + "gsd-core/references/ai-frameworks.md", + "gsd-core/references/api-coverage.md", + "gsd-core/references/artifact-types.md", + "gsd-core/references/autonomous-smart-discuss.md", + "gsd-core/references/checkpoints.md", + "gsd-core/references/common-bug-patterns.md", + "gsd-core/references/context-budget.md", + "gsd-core/references/continuation-format.md", + "gsd-core/references/debugger-philosophy.md", + "gsd-core/references/decimal-phase-calculation.md", + "gsd-core/references/doc-conflict-engine.md", + "gsd-core/references/domain-probes.md", + "gsd-core/references/edge-probe-fixtures/01-round-half-even/expected-coverage.json", + "gsd-core/references/edge-probe-fixtures/01-round-half-even/requirements.json", + "gsd-core/references/edge-probe-fixtures/02-merge-intervals/expected-coverage.json", + "gsd-core/references/edge-probe-fixtures/02-merge-intervals/requirements.json", + "gsd-core/references/edge-probe-fixtures/03-truncate-graphemes/expected-coverage.json", + "gsd-core/references/edge-probe-fixtures/03-truncate-graphemes/requirements.json", + "gsd-core/references/edge-probe-fixtures/04-money-rounding/expected-coverage.json", + "gsd-core/references/edge-probe-fixtures/04-money-rounding/requirements.json", + "gsd-core/references/edge-probe-fixtures/05-list-dedupe/expected-coverage.json", + "gsd-core/references/edge-probe-fixtures/05-list-dedupe/requirements.json", + "gsd-core/references/edge-probe-fixtures/06-resolved-mixed/expected-coverage.json", + "gsd-core/references/edge-probe-fixtures/06-resolved-mixed/requirements.json", + "gsd-core/references/edge-probe-fixtures/06-resolved-mixed/resolutions.json", + "gsd-core/references/edge-probe.md", + "gsd-core/references/execute-mvp-tdd.md", + "gsd-core/references/execute-phase-between-wave-reset.md", + "gsd-core/references/execute-phase-context-guard.md", + "gsd-core/references/execute-phase-wave-guard.md", + "gsd-core/references/executor-examples.md", + "gsd-core/references/few-shot-examples/plan-checker.md", + "gsd-core/references/few-shot-examples/verifier.md", + "gsd-core/references/gate-prompts.md", + "gsd-core/references/gates.md", + "gsd-core/references/git-integration.md", + "gsd-core/references/git-planning-commit.md", + "gsd-core/references/gsd-run-resolver.md", + "gsd-core/references/honest-verifier.md", + "gsd-core/references/ios-scaffold.md", + "gsd-core/references/loop-hook-dispatch.md", + "gsd-core/references/mandatory-initial-read.md", + "gsd-core/references/model-profile-resolution.md", + "gsd-core/references/model-profiles.md", + "gsd-core/references/mvp-concepts.md", + "gsd-core/references/phase-argument-parsing.md", + "gsd-core/references/planner-antipatterns.md", + "gsd-core/references/planner-chunked.md", + "gsd-core/references/planner-gap-closure.md", + "gsd-core/references/planner-graphify-auto-update.md", + "gsd-core/references/planner-guidance.md", + "gsd-core/references/planner-human-verify-mode.md", + "gsd-core/references/planner-interface-context.md", + "gsd-core/references/planner-load-graph-context.md", + "gsd-core/references/planner-mvp-mode.md", + "gsd-core/references/planner-reviews.md", + "gsd-core/references/planner-revision.md", + "gsd-core/references/planner-source-audit.md", + "gsd-core/references/planning-config.md", + "gsd-core/references/prohibition-probe-fixtures/01-streak-reminder/expected.json", + "gsd-core/references/prohibition-probe-fixtures/02-clean-utility/expected.json", + "gsd-core/references/prohibition-probe-fixtures/03-multi-prohibition/expected.json", + "gsd-core/references/prohibition-probe.md", + "gsd-core/references/project-skills-discovery.md", + "gsd-core/references/questioning.md", + "gsd-core/references/research-documentation-lookup.md", + "gsd-core/references/research-philosophy.md", + "gsd-core/references/research-verification-protocol.md", + "gsd-core/references/reviewer-instances.md", + "gsd-core/references/revision-loop.md", + "gsd-core/references/scout-codebase.md", + "gsd-core/references/security-asvs-levels.md", + "gsd-core/references/skeleton-template.md", + "gsd-core/references/sketch-interactivity.md", + "gsd-core/references/sketch-theme-system.md", + "gsd-core/references/sketch-tooling.md", + "gsd-core/references/sketch-variant-patterns.md", + "gsd-core/references/specless-probe-fallback.md", + "gsd-core/references/spidr-splitting.md", + "gsd-core/references/tdd.md", + "gsd-core/references/thinking-models-debug.md", + "gsd-core/references/thinking-models-execution.md", + "gsd-core/references/thinking-models-planning.md", + "gsd-core/references/thinking-models-research.md", + "gsd-core/references/thinking-models-verification.md", + "gsd-core/references/thinking-partner.md", + "gsd-core/references/ui-brand.md", + "gsd-core/references/ui-consideration-probe.md", + "gsd-core/references/universal-anti-patterns.md", + "gsd-core/references/untrusted-input-boundary.md", + "gsd-core/references/user-profiling.md", + "gsd-core/references/user-story-template.md", + "gsd-core/references/verification-overrides.md", + "gsd-core/references/verification-patterns.md", + "gsd-core/references/verify-mvp-mode.md", + "gsd-core/references/workstream-flag.md", + "gsd-core/references/worktree-branch-check.md", + "gsd-core/references/worktree-path-safety.md", + "gsd-core/templates/AI-SPEC.md", + "gsd-core/templates/DEBUG.md", + "gsd-core/templates/README.md", + "gsd-core/templates/SECURITY.md", + "gsd-core/templates/UAT.md", + "gsd-core/templates/UI-SPEC.md", + "gsd-core/templates/VALIDATION.md", + "gsd-core/templates/claude-md.md", + "gsd-core/templates/codebase/architecture.md", + "gsd-core/templates/codebase/concerns.md", + "gsd-core/templates/codebase/conventions.md", + "gsd-core/templates/codebase/integrations.md", + "gsd-core/templates/codebase/stack.md", + "gsd-core/templates/codebase/structure.md", + "gsd-core/templates/codebase/testing.md", + "gsd-core/templates/config.json", + "gsd-core/templates/context.md", + "gsd-core/templates/continue-here.md", + "gsd-core/templates/copilot-instructions.md", + "gsd-core/templates/debug-subagent-prompt.md", + "gsd-core/templates/dev-preferences.md", + "gsd-core/templates/discovery.md", + "gsd-core/templates/discussion-log.md", + "gsd-core/templates/milestone-archive.md", + "gsd-core/templates/milestone.md", + "gsd-core/templates/phase-prompt.md", + "gsd-core/templates/planner-subagent-prompt.md", + "gsd-core/templates/project.md", + "gsd-core/templates/requirements.md", + "gsd-core/templates/research-project/ARCHITECTURE.md", + "gsd-core/templates/research-project/FEATURES.md", + "gsd-core/templates/research-project/PITFALLS.md", + "gsd-core/templates/research-project/STACK.md", + "gsd-core/templates/research-project/SUMMARY.md", + "gsd-core/templates/research.md", + "gsd-core/templates/retrospective.md", + "gsd-core/templates/roadmap.md", + "gsd-core/templates/spec.md", + "gsd-core/templates/state.md", + "gsd-core/templates/summary-complex.md", + "gsd-core/templates/summary-minimal.md", + "gsd-core/templates/summary-standard.md", + "gsd-core/templates/summary.md", + "gsd-core/templates/user-profile.md", + "gsd-core/templates/user-setup.md", + "gsd-core/templates/verification-report.md", + "gsd-core/workflows/_runtime-launcher.snippet.sh", + "gsd-core/workflows/add-backlog.md", + "gsd-core/workflows/add-phase.md", + "gsd-core/workflows/add-tests.md", + "gsd-core/workflows/add-todo.md", + "gsd-core/workflows/ai-integration-phase.md", + "gsd-core/workflows/analyze-dependencies.md", + "gsd-core/workflows/audit-fix.md", + "gsd-core/workflows/audit-milestone.md", + "gsd-core/workflows/audit-uat.md", + "gsd-core/workflows/autonomous.md", + "gsd-core/workflows/check-todos.md", + "gsd-core/workflows/cleanup.md", + "gsd-core/workflows/code-review-fix.md", + "gsd-core/workflows/code-review.md", + "gsd-core/workflows/complete-milestone.md", + "gsd-core/workflows/debug.md", + "gsd-core/workflows/diagnose-issues.md", + "gsd-core/workflows/discovery-phase.md", + "gsd-core/workflows/discuss-phase-assumptions.md", + "gsd-core/workflows/discuss-phase-power.md", + "gsd-core/workflows/discuss-phase.md", + "gsd-core/workflows/discuss-phase/modes/advisor.md", + "gsd-core/workflows/discuss-phase/modes/all.md", + "gsd-core/workflows/discuss-phase/modes/analyze.md", + "gsd-core/workflows/discuss-phase/modes/auto.md", + "gsd-core/workflows/discuss-phase/modes/batch.md", + "gsd-core/workflows/discuss-phase/modes/chain.md", + "gsd-core/workflows/discuss-phase/modes/default.md", + "gsd-core/workflows/discuss-phase/modes/power.md", + "gsd-core/workflows/discuss-phase/modes/text.md", + "gsd-core/workflows/discuss-phase/templates/checkpoint.json", + "gsd-core/workflows/discuss-phase/templates/context.md", + "gsd-core/workflows/discuss-phase/templates/discussion-log.md", + "gsd-core/workflows/do.md", + "gsd-core/workflows/docs-update.md", + "gsd-core/workflows/edit-phase.md", + "gsd-core/workflows/eval-review.md", + "gsd-core/workflows/execute-phase.md", + "gsd-core/workflows/execute-phase/steps/codebase-drift-gate.md", + "gsd-core/workflows/execute-phase/steps/per-plan-worktree-gate.md", + "gsd-core/workflows/execute-phase/steps/post-merge-gate.md", + "gsd-core/workflows/execute-phase/steps/regression-gate.md", + "gsd-core/workflows/execute-phase/steps/worktree-recovery-policy.md", + "gsd-core/workflows/execute-plan.md", + "gsd-core/workflows/explore.md", + "gsd-core/workflows/extract-learnings.md", + "gsd-core/workflows/fast.md", + "gsd-core/workflows/forensics.md", + "gsd-core/workflows/graduation.md", + "gsd-core/workflows/health.md", + "gsd-core/workflows/help.md", + "gsd-core/workflows/help/modes/brief.md", + "gsd-core/workflows/help/modes/default.md", + "gsd-core/workflows/help/modes/full.md", + "gsd-core/workflows/help/modes/topic.md", + "gsd-core/workflows/import.md", + "gsd-core/workflows/inbox.md", + "gsd-core/workflows/ingest-docs.md", + "gsd-core/workflows/insert-phase.md", + "gsd-core/workflows/list-phase-assumptions.md", + "gsd-core/workflows/list-seeds.md", + "gsd-core/workflows/list-workspaces.md", + "gsd-core/workflows/manager.md", + "gsd-core/workflows/map-codebase.md", + "gsd-core/workflows/milestone-summary.md", + "gsd-core/workflows/mvp-phase.md", + "gsd-core/workflows/new-milestone.md", + "gsd-core/workflows/new-project.md", + "gsd-core/workflows/new-workspace.md", + "gsd-core/workflows/next.md", + "gsd-core/workflows/node-repair.md", + "gsd-core/workflows/note.md", + "gsd-core/workflows/onboard.md", + "gsd-core/workflows/pause-work.md", + "gsd-core/workflows/plan-milestone-gaps.md", + "gsd-core/workflows/plan-phase.md", + "gsd-core/workflows/plan-phase/steps/closed-phase-gate.md", + "gsd-core/workflows/plan-phase/steps/prd-express-path.md", + "gsd-core/workflows/plan-phase/steps/windows-troubleshooting.md", + "gsd-core/workflows/plan-review-convergence.md", + "gsd-core/workflows/plant-seed.md", + "gsd-core/workflows/pr-branch.md", + "gsd-core/workflows/profile-user.md", + "gsd-core/workflows/progress.md", + "gsd-core/workflows/quick.md", + "gsd-core/workflows/reapply-patches.md", + "gsd-core/workflows/remove-phase.md", + "gsd-core/workflows/remove-workspace.md", + "gsd-core/workflows/resume-project.md", + "gsd-core/workflows/review.md", + "gsd-core/workflows/scan.md", + "gsd-core/workflows/secure-phase.md", + "gsd-core/workflows/session-report.md", + "gsd-core/workflows/settings-advanced.md", + "gsd-core/workflows/settings-integrations.md", + "gsd-core/workflows/settings.md", + "gsd-core/workflows/ship.md", + "gsd-core/workflows/sketch-wrap-up.md", + "gsd-core/workflows/sketch.md", + "gsd-core/workflows/smart-entry.md", + "gsd-core/workflows/spec-phase.md", + "gsd-core/workflows/spike-wrap-up.md", + "gsd-core/workflows/spike.md", + "gsd-core/workflows/stats.md", + "gsd-core/workflows/sync-skills.md", + "gsd-core/workflows/thread.md", + "gsd-core/workflows/transition.md", + "gsd-core/workflows/ui-phase.md", + "gsd-core/workflows/ui-review.md", + "gsd-core/workflows/ultraplan-phase.md", + "gsd-core/workflows/undo.md", + "gsd-core/workflows/update.md", + "gsd-core/workflows/validate-phase.md", + "gsd-core/workflows/verify-phase.md", + "gsd-core/workflows/verify-work.md", + "hooks/gsd-check-update.js", + "hooks/gsd-context-monitor.js", + "scripts/changeset/README.md", + "scripts/changeset/cli.cjs", + "scripts/changeset/github-release-notes.cjs", + "scripts/changeset/lint.cjs", + "scripts/changeset/new.cjs", + "scripts/changeset/parse.cjs", + "scripts/changeset/render.cjs", + "scripts/changeset/serialize.cjs", + "scripts/fix-slash-commands.cjs", + "scripts/gen-capability-registry.cjs", + "scripts/gen-loop-host-contract.cjs", + "scripts/lib/allowlist-ratchet.cjs", + "scripts/lib/cli-exit.cjs" +] diff --git a/tests/fixtures/install-tree/copilot.json b/tests/fixtures/install-tree/copilot.json new file mode 100644 index 000000000..bf257edbf --- /dev/null +++ b/tests/fixtures/install-tree/copilot.json @@ -0,0 +1,400 @@ +[ + ".gsd-profile", + ".gsd/defaults.json", + "agents/gsd-advisor-researcher.agent.md", + "agents/gsd-ai-researcher.agent.md", + "agents/gsd-assumptions-analyzer.agent.md", + "agents/gsd-code-fixer.agent.md", + "agents/gsd-code-reviewer.agent.md", + "agents/gsd-codebase-mapper.agent.md", + "agents/gsd-debug-session-manager.agent.md", + "agents/gsd-debugger.agent.md", + "agents/gsd-doc-classifier.agent.md", + "agents/gsd-doc-synthesizer.agent.md", + "agents/gsd-doc-verifier.agent.md", + "agents/gsd-doc-writer.agent.md", + "agents/gsd-domain-researcher.agent.md", + "agents/gsd-eval-auditor.agent.md", + "agents/gsd-eval-planner.agent.md", + "agents/gsd-executor.agent.md", + "agents/gsd-framework-selector.agent.md", + "agents/gsd-integration-checker.agent.md", + "agents/gsd-intel-updater.agent.md", + "agents/gsd-mempalace-curator.agent.md", + "agents/gsd-nyquist-auditor.agent.md", + "agents/gsd-pattern-mapper.agent.md", + "agents/gsd-phase-researcher.agent.md", + "agents/gsd-plan-checker.agent.md", + "agents/gsd-planner.agent.md", + "agents/gsd-project-researcher.agent.md", + "agents/gsd-research-synthesizer.agent.md", + "agents/gsd-roadmapper.agent.md", + "agents/gsd-security-auditor.agent.md", + "agents/gsd-ui-auditor.agent.md", + "agents/gsd-ui-checker.agent.md", + "agents/gsd-ui-researcher.agent.md", + "agents/gsd-user-profiler.agent.md", + "agents/gsd-verifier.agent.md", + "copilot-instructions.md", + "gsd-core/VERSION", + "gsd-core/bin/check-latest-version.cjs", + "gsd-core/bin/ensure-runtime-build.cjs", + "gsd-core/bin/gsd-tools.cjs", + "gsd-core/bin/gsd_run", + "gsd-core/bin/shared/config-defaults.manifest.json", + "gsd-core/bin/shared/config-schema.manifest.json", + "gsd-core/bin/shared/model-catalog.json", + "gsd-core/bin/shared/runtime-aliases.manifest.json", + "gsd-core/bin/verify-reapply-patches.cjs", + "gsd-core/contexts/dev.md", + "gsd-core/contexts/research.md", + "gsd-core/contexts/review.md", + "gsd-core/references/agent-contracts.md", + "gsd-core/references/agent-skills-bootstrap.md", + "gsd-core/references/ai-evals.md", + "gsd-core/references/ai-frameworks.md", + "gsd-core/references/api-coverage.md", + "gsd-core/references/artifact-types.md", + "gsd-core/references/autonomous-smart-discuss.md", + "gsd-core/references/checkpoints.md", + "gsd-core/references/common-bug-patterns.md", + "gsd-core/references/context-budget.md", + "gsd-core/references/continuation-format.md", + "gsd-core/references/debugger-philosophy.md", + "gsd-core/references/decimal-phase-calculation.md", + "gsd-core/references/doc-conflict-engine.md", + "gsd-core/references/domain-probes.md", + "gsd-core/references/edge-probe-fixtures/01-round-half-even/expected-coverage.json", + "gsd-core/references/edge-probe-fixtures/01-round-half-even/requirements.json", + "gsd-core/references/edge-probe-fixtures/02-merge-intervals/expected-coverage.json", + "gsd-core/references/edge-probe-fixtures/02-merge-intervals/requirements.json", + "gsd-core/references/edge-probe-fixtures/03-truncate-graphemes/expected-coverage.json", + "gsd-core/references/edge-probe-fixtures/03-truncate-graphemes/requirements.json", + "gsd-core/references/edge-probe-fixtures/04-money-rounding/expected-coverage.json", + "gsd-core/references/edge-probe-fixtures/04-money-rounding/requirements.json", + "gsd-core/references/edge-probe-fixtures/05-list-dedupe/expected-coverage.json", + "gsd-core/references/edge-probe-fixtures/05-list-dedupe/requirements.json", + "gsd-core/references/edge-probe-fixtures/06-resolved-mixed/expected-coverage.json", + "gsd-core/references/edge-probe-fixtures/06-resolved-mixed/requirements.json", + "gsd-core/references/edge-probe-fixtures/06-resolved-mixed/resolutions.json", + "gsd-core/references/edge-probe.md", + "gsd-core/references/execute-mvp-tdd.md", + "gsd-core/references/execute-phase-between-wave-reset.md", + "gsd-core/references/execute-phase-context-guard.md", + "gsd-core/references/execute-phase-wave-guard.md", + "gsd-core/references/executor-examples.md", + "gsd-core/references/few-shot-examples/plan-checker.md", + "gsd-core/references/few-shot-examples/verifier.md", + "gsd-core/references/gate-prompts.md", + "gsd-core/references/gates.md", + "gsd-core/references/git-integration.md", + "gsd-core/references/git-planning-commit.md", + "gsd-core/references/gsd-run-resolver.md", + "gsd-core/references/honest-verifier.md", + "gsd-core/references/ios-scaffold.md", + "gsd-core/references/loop-hook-dispatch.md", + "gsd-core/references/mandatory-initial-read.md", + "gsd-core/references/model-profile-resolution.md", + "gsd-core/references/model-profiles.md", + "gsd-core/references/mvp-concepts.md", + "gsd-core/references/phase-argument-parsing.md", + "gsd-core/references/planner-antipatterns.md", + "gsd-core/references/planner-chunked.md", + "gsd-core/references/planner-gap-closure.md", + "gsd-core/references/planner-graphify-auto-update.md", + "gsd-core/references/planner-guidance.md", + "gsd-core/references/planner-human-verify-mode.md", + "gsd-core/references/planner-interface-context.md", + "gsd-core/references/planner-load-graph-context.md", + "gsd-core/references/planner-mvp-mode.md", + "gsd-core/references/planner-reviews.md", + "gsd-core/references/planner-revision.md", + "gsd-core/references/planner-source-audit.md", + "gsd-core/references/planning-config.md", + "gsd-core/references/prohibition-probe-fixtures/01-streak-reminder/expected.json", + "gsd-core/references/prohibition-probe-fixtures/02-clean-utility/expected.json", + "gsd-core/references/prohibition-probe-fixtures/03-multi-prohibition/expected.json", + "gsd-core/references/prohibition-probe.md", + "gsd-core/references/project-skills-discovery.md", + "gsd-core/references/questioning.md", + "gsd-core/references/research-documentation-lookup.md", + "gsd-core/references/research-philosophy.md", + "gsd-core/references/research-verification-protocol.md", + "gsd-core/references/reviewer-instances.md", + "gsd-core/references/revision-loop.md", + "gsd-core/references/scout-codebase.md", + "gsd-core/references/security-asvs-levels.md", + "gsd-core/references/skeleton-template.md", + "gsd-core/references/sketch-interactivity.md", + "gsd-core/references/sketch-theme-system.md", + "gsd-core/references/sketch-tooling.md", + "gsd-core/references/sketch-variant-patterns.md", + "gsd-core/references/specless-probe-fallback.md", + "gsd-core/references/spidr-splitting.md", + "gsd-core/references/tdd.md", + "gsd-core/references/thinking-models-debug.md", + "gsd-core/references/thinking-models-execution.md", + "gsd-core/references/thinking-models-planning.md", + "gsd-core/references/thinking-models-research.md", + "gsd-core/references/thinking-models-verification.md", + "gsd-core/references/thinking-partner.md", + "gsd-core/references/ui-brand.md", + "gsd-core/references/ui-consideration-probe.md", + "gsd-core/references/universal-anti-patterns.md", + "gsd-core/references/untrusted-input-boundary.md", + "gsd-core/references/user-profiling.md", + "gsd-core/references/user-story-template.md", + "gsd-core/references/verification-overrides.md", + "gsd-core/references/verification-patterns.md", + "gsd-core/references/verify-mvp-mode.md", + "gsd-core/references/workstream-flag.md", + "gsd-core/references/worktree-branch-check.md", + "gsd-core/references/worktree-path-safety.md", + "gsd-core/templates/AI-SPEC.md", + "gsd-core/templates/DEBUG.md", + "gsd-core/templates/README.md", + "gsd-core/templates/SECURITY.md", + "gsd-core/templates/UAT.md", + "gsd-core/templates/UI-SPEC.md", + "gsd-core/templates/VALIDATION.md", + "gsd-core/templates/claude-md.md", + "gsd-core/templates/codebase/architecture.md", + "gsd-core/templates/codebase/concerns.md", + "gsd-core/templates/codebase/conventions.md", + "gsd-core/templates/codebase/integrations.md", + "gsd-core/templates/codebase/stack.md", + "gsd-core/templates/codebase/structure.md", + "gsd-core/templates/codebase/testing.md", + "gsd-core/templates/config.json", + "gsd-core/templates/context.md", + "gsd-core/templates/continue-here.md", + "gsd-core/templates/copilot-instructions.md", + "gsd-core/templates/debug-subagent-prompt.md", + "gsd-core/templates/dev-preferences.md", + "gsd-core/templates/discovery.md", + "gsd-core/templates/discussion-log.md", + "gsd-core/templates/milestone-archive.md", + "gsd-core/templates/milestone.md", + "gsd-core/templates/phase-prompt.md", + "gsd-core/templates/planner-subagent-prompt.md", + "gsd-core/templates/project.md", + "gsd-core/templates/requirements.md", + "gsd-core/templates/research-project/ARCHITECTURE.md", + "gsd-core/templates/research-project/FEATURES.md", + "gsd-core/templates/research-project/PITFALLS.md", + "gsd-core/templates/research-project/STACK.md", + "gsd-core/templates/research-project/SUMMARY.md", + "gsd-core/templates/research.md", + "gsd-core/templates/retrospective.md", + "gsd-core/templates/roadmap.md", + "gsd-core/templates/spec.md", + "gsd-core/templates/state.md", + "gsd-core/templates/summary-complex.md", + "gsd-core/templates/summary-minimal.md", + "gsd-core/templates/summary-standard.md", + "gsd-core/templates/summary.md", + "gsd-core/templates/user-profile.md", + "gsd-core/templates/user-setup.md", + "gsd-core/templates/verification-report.md", + "gsd-core/workflows/_runtime-launcher.snippet.sh", + "gsd-core/workflows/add-backlog.md", + "gsd-core/workflows/add-phase.md", + "gsd-core/workflows/add-tests.md", + "gsd-core/workflows/add-todo.md", + "gsd-core/workflows/ai-integration-phase.md", + "gsd-core/workflows/analyze-dependencies.md", + "gsd-core/workflows/audit-fix.md", + "gsd-core/workflows/audit-milestone.md", + "gsd-core/workflows/audit-uat.md", + "gsd-core/workflows/autonomous.md", + "gsd-core/workflows/check-todos.md", + "gsd-core/workflows/cleanup.md", + "gsd-core/workflows/code-review-fix.md", + "gsd-core/workflows/code-review.md", + "gsd-core/workflows/complete-milestone.md", + "gsd-core/workflows/debug.md", + "gsd-core/workflows/diagnose-issues.md", + "gsd-core/workflows/discovery-phase.md", + "gsd-core/workflows/discuss-phase-assumptions.md", + "gsd-core/workflows/discuss-phase-power.md", + "gsd-core/workflows/discuss-phase.md", + "gsd-core/workflows/discuss-phase/modes/advisor.md", + "gsd-core/workflows/discuss-phase/modes/all.md", + "gsd-core/workflows/discuss-phase/modes/analyze.md", + "gsd-core/workflows/discuss-phase/modes/auto.md", + "gsd-core/workflows/discuss-phase/modes/batch.md", + "gsd-core/workflows/discuss-phase/modes/chain.md", + "gsd-core/workflows/discuss-phase/modes/default.md", + "gsd-core/workflows/discuss-phase/modes/power.md", + "gsd-core/workflows/discuss-phase/modes/text.md", + "gsd-core/workflows/discuss-phase/templates/checkpoint.json", + "gsd-core/workflows/discuss-phase/templates/context.md", + "gsd-core/workflows/discuss-phase/templates/discussion-log.md", + "gsd-core/workflows/do.md", + "gsd-core/workflows/docs-update.md", + "gsd-core/workflows/edit-phase.md", + "gsd-core/workflows/eval-review.md", + "gsd-core/workflows/execute-phase.md", + "gsd-core/workflows/execute-phase/steps/codebase-drift-gate.md", + "gsd-core/workflows/execute-phase/steps/per-plan-worktree-gate.md", + "gsd-core/workflows/execute-phase/steps/post-merge-gate.md", + "gsd-core/workflows/execute-phase/steps/regression-gate.md", + "gsd-core/workflows/execute-phase/steps/worktree-recovery-policy.md", + "gsd-core/workflows/execute-plan.md", + "gsd-core/workflows/explore.md", + "gsd-core/workflows/extract-learnings.md", + "gsd-core/workflows/fast.md", + "gsd-core/workflows/forensics.md", + "gsd-core/workflows/graduation.md", + "gsd-core/workflows/health.md", + "gsd-core/workflows/help.md", + "gsd-core/workflows/help/modes/brief.md", + "gsd-core/workflows/help/modes/default.md", + "gsd-core/workflows/help/modes/full.md", + "gsd-core/workflows/help/modes/topic.md", + "gsd-core/workflows/import.md", + "gsd-core/workflows/inbox.md", + "gsd-core/workflows/ingest-docs.md", + "gsd-core/workflows/insert-phase.md", + "gsd-core/workflows/list-phase-assumptions.md", + "gsd-core/workflows/list-seeds.md", + "gsd-core/workflows/list-workspaces.md", + "gsd-core/workflows/manager.md", + "gsd-core/workflows/map-codebase.md", + "gsd-core/workflows/milestone-summary.md", + "gsd-core/workflows/mvp-phase.md", + "gsd-core/workflows/new-milestone.md", + "gsd-core/workflows/new-project.md", + "gsd-core/workflows/new-workspace.md", + "gsd-core/workflows/next.md", + "gsd-core/workflows/node-repair.md", + "gsd-core/workflows/note.md", + "gsd-core/workflows/onboard.md", + "gsd-core/workflows/pause-work.md", + "gsd-core/workflows/plan-milestone-gaps.md", + "gsd-core/workflows/plan-phase.md", + "gsd-core/workflows/plan-phase/steps/closed-phase-gate.md", + "gsd-core/workflows/plan-phase/steps/prd-express-path.md", + "gsd-core/workflows/plan-phase/steps/windows-troubleshooting.md", + "gsd-core/workflows/plan-review-convergence.md", + "gsd-core/workflows/plant-seed.md", + "gsd-core/workflows/pr-branch.md", + "gsd-core/workflows/profile-user.md", + "gsd-core/workflows/progress.md", + "gsd-core/workflows/quick.md", + "gsd-core/workflows/reapply-patches.md", + "gsd-core/workflows/remove-phase.md", + "gsd-core/workflows/remove-workspace.md", + "gsd-core/workflows/resume-project.md", + "gsd-core/workflows/review.md", + "gsd-core/workflows/scan.md", + "gsd-core/workflows/secure-phase.md", + "gsd-core/workflows/session-report.md", + "gsd-core/workflows/settings-advanced.md", + "gsd-core/workflows/settings-integrations.md", + "gsd-core/workflows/settings.md", + "gsd-core/workflows/ship.md", + "gsd-core/workflows/sketch-wrap-up.md", + "gsd-core/workflows/sketch.md", + "gsd-core/workflows/smart-entry.md", + "gsd-core/workflows/spec-phase.md", + "gsd-core/workflows/spike-wrap-up.md", + "gsd-core/workflows/spike.md", + "gsd-core/workflows/stats.md", + "gsd-core/workflows/sync-skills.md", + "gsd-core/workflows/thread.md", + "gsd-core/workflows/transition.md", + "gsd-core/workflows/ui-phase.md", + "gsd-core/workflows/ui-review.md", + "gsd-core/workflows/ultraplan-phase.md", + "gsd-core/workflows/undo.md", + "gsd-core/workflows/update.md", + "gsd-core/workflows/validate-phase.md", + "gsd-core/workflows/verify-phase.md", + "gsd-core/workflows/verify-work.md", + "hooks/gsd-session.json", + "scripts/changeset/README.md", + "scripts/changeset/cli.cjs", + "scripts/changeset/github-release-notes.cjs", + "scripts/changeset/lint.cjs", + "scripts/changeset/new.cjs", + "scripts/changeset/parse.cjs", + "scripts/changeset/render.cjs", + "scripts/changeset/serialize.cjs", + "scripts/fix-slash-commands.cjs", + "scripts/gen-capability-registry.cjs", + "scripts/gen-loop-host-contract.cjs", + "scripts/lib/allowlist-ratchet.cjs", + "scripts/lib/cli-exit.cjs", + "skills/gsd-add-tests/SKILL.md", + "skills/gsd-ai-integration-phase/SKILL.md", + "skills/gsd-audit-fix/SKILL.md", + "skills/gsd-audit-milestone/SKILL.md", + "skills/gsd-audit-uat/SKILL.md", + "skills/gsd-autonomous/SKILL.md", + "skills/gsd-capture/SKILL.md", + "skills/gsd-cleanup/SKILL.md", + "skills/gsd-code-review/SKILL.md", + "skills/gsd-complete-milestone/SKILL.md", + "skills/gsd-config/SKILL.md", + "skills/gsd-debug/SKILL.md", + "skills/gsd-discuss-phase/SKILL.md", + "skills/gsd-docs-update/SKILL.md", + "skills/gsd-eval-review/SKILL.md", + "skills/gsd-execute-phase/SKILL.md", + "skills/gsd-explore/SKILL.md", + "skills/gsd-extract-learnings/SKILL.md", + "skills/gsd-fast/SKILL.md", + "skills/gsd-forensics/SKILL.md", + "skills/gsd-graphify/SKILL.md", + "skills/gsd-health/SKILL.md", + "skills/gsd-help/SKILL.md", + "skills/gsd-import/SKILL.md", + "skills/gsd-inbox/SKILL.md", + "skills/gsd-ingest-docs/SKILL.md", + "skills/gsd-manager/SKILL.md", + "skills/gsd-map-codebase/SKILL.md", + "skills/gsd-mempalace-capture/SKILL.md", + "skills/gsd-mempalace-recall/SKILL.md", + "skills/gsd-milestone-summary/SKILL.md", + "skills/gsd-mvp-phase/SKILL.md", + "skills/gsd-new-milestone/SKILL.md", + "skills/gsd-new-project/SKILL.md", + "skills/gsd-next/SKILL.md", + "skills/gsd-ns-context/SKILL.md", + "skills/gsd-ns-ideate/SKILL.md", + "skills/gsd-ns-manage/SKILL.md", + "skills/gsd-ns-project/SKILL.md", + "skills/gsd-ns-review/SKILL.md", + "skills/gsd-ns-workflow/SKILL.md", + "skills/gsd-onboard/SKILL.md", + "skills/gsd-pause-work/SKILL.md", + "skills/gsd-phase/SKILL.md", + "skills/gsd-plan-phase/SKILL.md", + "skills/gsd-plan-review-convergence/SKILL.md", + "skills/gsd-pr-branch/SKILL.md", + "skills/gsd-profile-user/SKILL.md", + "skills/gsd-progress/SKILL.md", + "skills/gsd-quick/SKILL.md", + "skills/gsd-resume-work/SKILL.md", + "skills/gsd-review-backlog/SKILL.md", + "skills/gsd-review/SKILL.md", + "skills/gsd-secure-phase/SKILL.md", + "skills/gsd-settings/SKILL.md", + "skills/gsd-ship/SKILL.md", + "skills/gsd-sketch/SKILL.md", + "skills/gsd-spec-phase/SKILL.md", + "skills/gsd-spike/SKILL.md", + "skills/gsd-stats/SKILL.md", + "skills/gsd-surface/SKILL.md", + "skills/gsd-thread/SKILL.md", + "skills/gsd-ui-phase/SKILL.md", + "skills/gsd-ui-review/SKILL.md", + "skills/gsd-ultraplan-phase/SKILL.md", + "skills/gsd-undo/SKILL.md", + "skills/gsd-update/SKILL.md", + "skills/gsd-validate-phase/SKILL.md", + "skills/gsd-verify-work/SKILL.md", + "skills/gsd-workspace/SKILL.md", + "skills/gsd-workstreams/SKILL.md" +] diff --git a/tests/fixtures/install-tree/cursor.json b/tests/fixtures/install-tree/cursor.json new file mode 100644 index 000000000..373692429 --- /dev/null +++ b/tests/fixtures/install-tree/cursor.json @@ -0,0 +1,475 @@ +[ + ".gsd-profile", + ".gsd/defaults.json", + "agents/gsd-advisor-researcher.md", + "agents/gsd-ai-researcher.md", + "agents/gsd-assumptions-analyzer.md", + "agents/gsd-code-fixer.md", + "agents/gsd-code-reviewer.md", + "agents/gsd-codebase-mapper.md", + "agents/gsd-debug-session-manager.md", + "agents/gsd-debugger.md", + "agents/gsd-doc-classifier.md", + "agents/gsd-doc-synthesizer.md", + "agents/gsd-doc-verifier.md", + "agents/gsd-doc-writer.md", + "agents/gsd-domain-researcher.md", + "agents/gsd-eval-auditor.md", + "agents/gsd-eval-planner.md", + "agents/gsd-executor.md", + "agents/gsd-framework-selector.md", + "agents/gsd-integration-checker.md", + "agents/gsd-intel-updater.md", + "agents/gsd-mempalace-curator.md", + "agents/gsd-nyquist-auditor.md", + "agents/gsd-pattern-mapper.md", + "agents/gsd-phase-researcher.md", + "agents/gsd-plan-checker.md", + "agents/gsd-planner.md", + "agents/gsd-project-researcher.md", + "agents/gsd-research-synthesizer.md", + "agents/gsd-roadmapper.md", + "agents/gsd-security-auditor.md", + "agents/gsd-ui-auditor.md", + "agents/gsd-ui-checker.md", + "agents/gsd-ui-researcher.md", + "agents/gsd-user-profiler.md", + "agents/gsd-verifier.md", + "commands/gsd-add-tests.md", + "commands/gsd-ai-integration-phase.md", + "commands/gsd-audit-fix.md", + "commands/gsd-audit-milestone.md", + "commands/gsd-audit-uat.md", + "commands/gsd-autonomous.md", + "commands/gsd-capture.md", + "commands/gsd-cleanup.md", + "commands/gsd-code-review.md", + "commands/gsd-complete-milestone.md", + "commands/gsd-config.md", + "commands/gsd-debug.md", + "commands/gsd-discuss-phase.md", + "commands/gsd-docs-update.md", + "commands/gsd-eval-review.md", + "commands/gsd-execute-phase.md", + "commands/gsd-explore.md", + "commands/gsd-extract-learnings.md", + "commands/gsd-fast.md", + "commands/gsd-forensics.md", + "commands/gsd-graphify.md", + "commands/gsd-health.md", + "commands/gsd-help.md", + "commands/gsd-import.md", + "commands/gsd-inbox.md", + "commands/gsd-ingest-docs.md", + "commands/gsd-manager.md", + "commands/gsd-map-codebase.md", + "commands/gsd-mempalace-capture.md", + "commands/gsd-mempalace-recall.md", + "commands/gsd-milestone-summary.md", + "commands/gsd-mvp-phase.md", + "commands/gsd-new-milestone.md", + "commands/gsd-new-project.md", + "commands/gsd-next.md", + "commands/gsd-ns-context.md", + "commands/gsd-ns-ideate.md", + "commands/gsd-ns-manage.md", + "commands/gsd-ns-project.md", + "commands/gsd-ns-review.md", + "commands/gsd-ns-workflow.md", + "commands/gsd-onboard.md", + "commands/gsd-pause-work.md", + "commands/gsd-phase.md", + "commands/gsd-plan-phase.md", + "commands/gsd-plan-review-convergence.md", + "commands/gsd-pr-branch.md", + "commands/gsd-profile-user.md", + "commands/gsd-progress.md", + "commands/gsd-quick.md", + "commands/gsd-resume-work.md", + "commands/gsd-review-backlog.md", + "commands/gsd-review.md", + "commands/gsd-secure-phase.md", + "commands/gsd-settings.md", + "commands/gsd-ship.md", + "commands/gsd-sketch.md", + "commands/gsd-spec-phase.md", + "commands/gsd-spike.md", + "commands/gsd-stats.md", + "commands/gsd-surface.md", + "commands/gsd-thread.md", + "commands/gsd-ui-phase.md", + "commands/gsd-ui-review.md", + "commands/gsd-ultraplan-phase.md", + "commands/gsd-undo.md", + "commands/gsd-update.md", + "commands/gsd-validate-phase.md", + "commands/gsd-verify-work.md", + "commands/gsd-workspace.md", + "commands/gsd-workstreams.md", + "gsd-core/VERSION", + "gsd-core/bin/check-latest-version.cjs", + "gsd-core/bin/ensure-runtime-build.cjs", + "gsd-core/bin/gsd-tools.cjs", + "gsd-core/bin/gsd_run", + "gsd-core/bin/shared/config-defaults.manifest.json", + "gsd-core/bin/shared/config-schema.manifest.json", + "gsd-core/bin/shared/model-catalog.json", + "gsd-core/bin/shared/runtime-aliases.manifest.json", + "gsd-core/bin/verify-reapply-patches.cjs", + "gsd-core/contexts/dev.md", + "gsd-core/contexts/research.md", + "gsd-core/contexts/review.md", + "gsd-core/references/agent-contracts.md", + "gsd-core/references/agent-skills-bootstrap.md", + "gsd-core/references/ai-evals.md", + "gsd-core/references/ai-frameworks.md", + "gsd-core/references/api-coverage.md", + "gsd-core/references/artifact-types.md", + "gsd-core/references/autonomous-smart-discuss.md", + "gsd-core/references/checkpoints.md", + "gsd-core/references/common-bug-patterns.md", + "gsd-core/references/context-budget.md", + "gsd-core/references/continuation-format.md", + "gsd-core/references/debugger-philosophy.md", + "gsd-core/references/decimal-phase-calculation.md", + "gsd-core/references/doc-conflict-engine.md", + "gsd-core/references/domain-probes.md", + "gsd-core/references/edge-probe-fixtures/01-round-half-even/expected-coverage.json", + "gsd-core/references/edge-probe-fixtures/01-round-half-even/requirements.json", + "gsd-core/references/edge-probe-fixtures/02-merge-intervals/expected-coverage.json", + "gsd-core/references/edge-probe-fixtures/02-merge-intervals/requirements.json", + "gsd-core/references/edge-probe-fixtures/03-truncate-graphemes/expected-coverage.json", + "gsd-core/references/edge-probe-fixtures/03-truncate-graphemes/requirements.json", + "gsd-core/references/edge-probe-fixtures/04-money-rounding/expected-coverage.json", + "gsd-core/references/edge-probe-fixtures/04-money-rounding/requirements.json", + "gsd-core/references/edge-probe-fixtures/05-list-dedupe/expected-coverage.json", + "gsd-core/references/edge-probe-fixtures/05-list-dedupe/requirements.json", + "gsd-core/references/edge-probe-fixtures/06-resolved-mixed/expected-coverage.json", + "gsd-core/references/edge-probe-fixtures/06-resolved-mixed/requirements.json", + "gsd-core/references/edge-probe-fixtures/06-resolved-mixed/resolutions.json", + "gsd-core/references/edge-probe.md", + "gsd-core/references/execute-mvp-tdd.md", + "gsd-core/references/execute-phase-between-wave-reset.md", + "gsd-core/references/execute-phase-context-guard.md", + "gsd-core/references/execute-phase-wave-guard.md", + "gsd-core/references/executor-examples.md", + "gsd-core/references/few-shot-examples/plan-checker.md", + "gsd-core/references/few-shot-examples/verifier.md", + "gsd-core/references/gate-prompts.md", + "gsd-core/references/gates.md", + "gsd-core/references/git-integration.md", + "gsd-core/references/git-planning-commit.md", + "gsd-core/references/gsd-run-resolver.md", + "gsd-core/references/honest-verifier.md", + "gsd-core/references/ios-scaffold.md", + "gsd-core/references/loop-hook-dispatch.md", + "gsd-core/references/mandatory-initial-read.md", + "gsd-core/references/model-profile-resolution.md", + "gsd-core/references/model-profiles.md", + "gsd-core/references/mvp-concepts.md", + "gsd-core/references/phase-argument-parsing.md", + "gsd-core/references/planner-antipatterns.md", + "gsd-core/references/planner-chunked.md", + "gsd-core/references/planner-gap-closure.md", + "gsd-core/references/planner-graphify-auto-update.md", + "gsd-core/references/planner-guidance.md", + "gsd-core/references/planner-human-verify-mode.md", + "gsd-core/references/planner-interface-context.md", + "gsd-core/references/planner-load-graph-context.md", + "gsd-core/references/planner-mvp-mode.md", + "gsd-core/references/planner-reviews.md", + "gsd-core/references/planner-revision.md", + "gsd-core/references/planner-source-audit.md", + "gsd-core/references/planning-config.md", + "gsd-core/references/prohibition-probe-fixtures/01-streak-reminder/expected.json", + "gsd-core/references/prohibition-probe-fixtures/02-clean-utility/expected.json", + "gsd-core/references/prohibition-probe-fixtures/03-multi-prohibition/expected.json", + "gsd-core/references/prohibition-probe.md", + "gsd-core/references/project-skills-discovery.md", + "gsd-core/references/questioning.md", + "gsd-core/references/research-documentation-lookup.md", + "gsd-core/references/research-philosophy.md", + "gsd-core/references/research-verification-protocol.md", + "gsd-core/references/reviewer-instances.md", + "gsd-core/references/revision-loop.md", + "gsd-core/references/scout-codebase.md", + "gsd-core/references/security-asvs-levels.md", + "gsd-core/references/skeleton-template.md", + "gsd-core/references/sketch-interactivity.md", + "gsd-core/references/sketch-theme-system.md", + "gsd-core/references/sketch-tooling.md", + "gsd-core/references/sketch-variant-patterns.md", + "gsd-core/references/specless-probe-fallback.md", + "gsd-core/references/spidr-splitting.md", + "gsd-core/references/tdd.md", + "gsd-core/references/thinking-models-debug.md", + "gsd-core/references/thinking-models-execution.md", + "gsd-core/references/thinking-models-planning.md", + "gsd-core/references/thinking-models-research.md", + "gsd-core/references/thinking-models-verification.md", + "gsd-core/references/thinking-partner.md", + "gsd-core/references/ui-brand.md", + "gsd-core/references/ui-consideration-probe.md", + "gsd-core/references/universal-anti-patterns.md", + "gsd-core/references/untrusted-input-boundary.md", + "gsd-core/references/user-profiling.md", + "gsd-core/references/user-story-template.md", + "gsd-core/references/verification-overrides.md", + "gsd-core/references/verification-patterns.md", + "gsd-core/references/verify-mvp-mode.md", + "gsd-core/references/workstream-flag.md", + "gsd-core/references/worktree-branch-check.md", + "gsd-core/references/worktree-path-safety.md", + "gsd-core/templates/AI-SPEC.md", + "gsd-core/templates/DEBUG.md", + "gsd-core/templates/README.md", + "gsd-core/templates/SECURITY.md", + "gsd-core/templates/UAT.md", + "gsd-core/templates/UI-SPEC.md", + "gsd-core/templates/VALIDATION.md", + "gsd-core/templates/claude-md.md", + "gsd-core/templates/codebase/architecture.md", + "gsd-core/templates/codebase/concerns.md", + "gsd-core/templates/codebase/conventions.md", + "gsd-core/templates/codebase/integrations.md", + "gsd-core/templates/codebase/stack.md", + "gsd-core/templates/codebase/structure.md", + "gsd-core/templates/codebase/testing.md", + "gsd-core/templates/config.json", + "gsd-core/templates/context.md", + "gsd-core/templates/continue-here.md", + "gsd-core/templates/copilot-instructions.md", + "gsd-core/templates/debug-subagent-prompt.md", + "gsd-core/templates/dev-preferences.md", + "gsd-core/templates/discovery.md", + "gsd-core/templates/discussion-log.md", + "gsd-core/templates/milestone-archive.md", + "gsd-core/templates/milestone.md", + "gsd-core/templates/phase-prompt.md", + "gsd-core/templates/planner-subagent-prompt.md", + "gsd-core/templates/project.md", + "gsd-core/templates/requirements.md", + "gsd-core/templates/research-project/ARCHITECTURE.md", + "gsd-core/templates/research-project/FEATURES.md", + "gsd-core/templates/research-project/PITFALLS.md", + "gsd-core/templates/research-project/STACK.md", + "gsd-core/templates/research-project/SUMMARY.md", + "gsd-core/templates/research.md", + "gsd-core/templates/retrospective.md", + "gsd-core/templates/roadmap.md", + "gsd-core/templates/spec.md", + "gsd-core/templates/state.md", + "gsd-core/templates/summary-complex.md", + "gsd-core/templates/summary-minimal.md", + "gsd-core/templates/summary-standard.md", + "gsd-core/templates/summary.md", + "gsd-core/templates/user-profile.md", + "gsd-core/templates/user-setup.md", + "gsd-core/templates/verification-report.md", + "gsd-core/workflows/_runtime-launcher.snippet.sh", + "gsd-core/workflows/add-backlog.md", + "gsd-core/workflows/add-phase.md", + "gsd-core/workflows/add-tests.md", + "gsd-core/workflows/add-todo.md", + "gsd-core/workflows/ai-integration-phase.md", + "gsd-core/workflows/analyze-dependencies.md", + "gsd-core/workflows/audit-fix.md", + "gsd-core/workflows/audit-milestone.md", + "gsd-core/workflows/audit-uat.md", + "gsd-core/workflows/autonomous.md", + "gsd-core/workflows/check-todos.md", + "gsd-core/workflows/cleanup.md", + "gsd-core/workflows/code-review-fix.md", + "gsd-core/workflows/code-review.md", + "gsd-core/workflows/complete-milestone.md", + "gsd-core/workflows/debug.md", + "gsd-core/workflows/diagnose-issues.md", + "gsd-core/workflows/discovery-phase.md", + "gsd-core/workflows/discuss-phase-assumptions.md", + "gsd-core/workflows/discuss-phase-power.md", + "gsd-core/workflows/discuss-phase.md", + "gsd-core/workflows/discuss-phase/modes/advisor.md", + "gsd-core/workflows/discuss-phase/modes/all.md", + "gsd-core/workflows/discuss-phase/modes/analyze.md", + "gsd-core/workflows/discuss-phase/modes/auto.md", + "gsd-core/workflows/discuss-phase/modes/batch.md", + "gsd-core/workflows/discuss-phase/modes/chain.md", + "gsd-core/workflows/discuss-phase/modes/default.md", + "gsd-core/workflows/discuss-phase/modes/power.md", + "gsd-core/workflows/discuss-phase/modes/text.md", + "gsd-core/workflows/discuss-phase/templates/checkpoint.json", + "gsd-core/workflows/discuss-phase/templates/context.md", + "gsd-core/workflows/discuss-phase/templates/discussion-log.md", + "gsd-core/workflows/do.md", + "gsd-core/workflows/docs-update.md", + "gsd-core/workflows/edit-phase.md", + "gsd-core/workflows/eval-review.md", + "gsd-core/workflows/execute-phase.md", + "gsd-core/workflows/execute-phase/steps/codebase-drift-gate.md", + "gsd-core/workflows/execute-phase/steps/per-plan-worktree-gate.md", + "gsd-core/workflows/execute-phase/steps/post-merge-gate.md", + "gsd-core/workflows/execute-phase/steps/regression-gate.md", + "gsd-core/workflows/execute-phase/steps/worktree-recovery-policy.md", + "gsd-core/workflows/execute-plan.md", + "gsd-core/workflows/explore.md", + "gsd-core/workflows/extract-learnings.md", + "gsd-core/workflows/fast.md", + "gsd-core/workflows/forensics.md", + "gsd-core/workflows/graduation.md", + "gsd-core/workflows/health.md", + "gsd-core/workflows/help.md", + "gsd-core/workflows/help/modes/brief.md", + "gsd-core/workflows/help/modes/default.md", + "gsd-core/workflows/help/modes/full.md", + "gsd-core/workflows/help/modes/topic.md", + "gsd-core/workflows/import.md", + "gsd-core/workflows/inbox.md", + "gsd-core/workflows/ingest-docs.md", + "gsd-core/workflows/insert-phase.md", + "gsd-core/workflows/list-phase-assumptions.md", + "gsd-core/workflows/list-seeds.md", + "gsd-core/workflows/list-workspaces.md", + "gsd-core/workflows/manager.md", + "gsd-core/workflows/map-codebase.md", + "gsd-core/workflows/milestone-summary.md", + "gsd-core/workflows/mvp-phase.md", + "gsd-core/workflows/new-milestone.md", + "gsd-core/workflows/new-project.md", + "gsd-core/workflows/new-workspace.md", + "gsd-core/workflows/next.md", + "gsd-core/workflows/node-repair.md", + "gsd-core/workflows/note.md", + "gsd-core/workflows/onboard.md", + "gsd-core/workflows/pause-work.md", + "gsd-core/workflows/plan-milestone-gaps.md", + "gsd-core/workflows/plan-phase.md", + "gsd-core/workflows/plan-phase/steps/closed-phase-gate.md", + "gsd-core/workflows/plan-phase/steps/prd-express-path.md", + "gsd-core/workflows/plan-phase/steps/windows-troubleshooting.md", + "gsd-core/workflows/plan-review-convergence.md", + "gsd-core/workflows/plant-seed.md", + "gsd-core/workflows/pr-branch.md", + "gsd-core/workflows/profile-user.md", + "gsd-core/workflows/progress.md", + "gsd-core/workflows/quick.md", + "gsd-core/workflows/reapply-patches.md", + "gsd-core/workflows/remove-phase.md", + "gsd-core/workflows/remove-workspace.md", + "gsd-core/workflows/resume-project.md", + "gsd-core/workflows/review.md", + "gsd-core/workflows/scan.md", + "gsd-core/workflows/secure-phase.md", + "gsd-core/workflows/session-report.md", + "gsd-core/workflows/settings-advanced.md", + "gsd-core/workflows/settings-integrations.md", + "gsd-core/workflows/settings.md", + "gsd-core/workflows/ship.md", + "gsd-core/workflows/sketch-wrap-up.md", + "gsd-core/workflows/sketch.md", + "gsd-core/workflows/smart-entry.md", + "gsd-core/workflows/spec-phase.md", + "gsd-core/workflows/spike-wrap-up.md", + "gsd-core/workflows/spike.md", + "gsd-core/workflows/stats.md", + "gsd-core/workflows/sync-skills.md", + "gsd-core/workflows/thread.md", + "gsd-core/workflows/transition.md", + "gsd-core/workflows/ui-phase.md", + "gsd-core/workflows/ui-review.md", + "gsd-core/workflows/ultraplan-phase.md", + "gsd-core/workflows/undo.md", + "gsd-core/workflows/update.md", + "gsd-core/workflows/validate-phase.md", + "gsd-core/workflows/verify-phase.md", + "gsd-core/workflows/verify-work.md", + "hooks/gsd-cursor-post-tool.js", + "hooks/gsd-cursor-pre-tool.js", + "hooks/gsd-cursor-session-start.js", + "hooks/gsd-cursor-stop.js", + "hooks/gsd-cursor-subagent-start.js", + "hooks/gsd-cursor-subagent-stop.js", + "scripts/changeset/README.md", + "scripts/changeset/cli.cjs", + "scripts/changeset/github-release-notes.cjs", + "scripts/changeset/lint.cjs", + "scripts/changeset/new.cjs", + "scripts/changeset/parse.cjs", + "scripts/changeset/render.cjs", + "scripts/changeset/serialize.cjs", + "scripts/fix-slash-commands.cjs", + "scripts/gen-capability-registry.cjs", + "scripts/gen-loop-host-contract.cjs", + "scripts/lib/allowlist-ratchet.cjs", + "scripts/lib/cli-exit.cjs", + "skills/gsd-add-tests/SKILL.md", + "skills/gsd-ai-integration-phase/SKILL.md", + "skills/gsd-audit-fix/SKILL.md", + "skills/gsd-audit-milestone/SKILL.md", + "skills/gsd-audit-uat/SKILL.md", + "skills/gsd-autonomous/SKILL.md", + "skills/gsd-capture/SKILL.md", + "skills/gsd-cleanup/SKILL.md", + "skills/gsd-code-review/SKILL.md", + "skills/gsd-complete-milestone/SKILL.md", + "skills/gsd-config/SKILL.md", + "skills/gsd-debug/SKILL.md", + "skills/gsd-discuss-phase/SKILL.md", + "skills/gsd-docs-update/SKILL.md", + "skills/gsd-eval-review/SKILL.md", + "skills/gsd-execute-phase/SKILL.md", + "skills/gsd-explore/SKILL.md", + "skills/gsd-extract-learnings/SKILL.md", + "skills/gsd-fast/SKILL.md", + "skills/gsd-forensics/SKILL.md", + "skills/gsd-graphify/SKILL.md", + "skills/gsd-health/SKILL.md", + "skills/gsd-help/SKILL.md", + "skills/gsd-import/SKILL.md", + "skills/gsd-inbox/SKILL.md", + "skills/gsd-ingest-docs/SKILL.md", + "skills/gsd-manager/SKILL.md", + "skills/gsd-map-codebase/SKILL.md", + "skills/gsd-mempalace-capture/SKILL.md", + "skills/gsd-mempalace-recall/SKILL.md", + "skills/gsd-milestone-summary/SKILL.md", + "skills/gsd-mvp-phase/SKILL.md", + "skills/gsd-new-milestone/SKILL.md", + "skills/gsd-new-project/SKILL.md", + "skills/gsd-next/SKILL.md", + "skills/gsd-ns-context/SKILL.md", + "skills/gsd-ns-ideate/SKILL.md", + "skills/gsd-ns-manage/SKILL.md", + "skills/gsd-ns-project/SKILL.md", + "skills/gsd-ns-review/SKILL.md", + "skills/gsd-ns-workflow/SKILL.md", + "skills/gsd-onboard/SKILL.md", + "skills/gsd-pause-work/SKILL.md", + "skills/gsd-phase/SKILL.md", + "skills/gsd-plan-phase/SKILL.md", + "skills/gsd-plan-review-convergence/SKILL.md", + "skills/gsd-pr-branch/SKILL.md", + "skills/gsd-profile-user/SKILL.md", + "skills/gsd-progress/SKILL.md", + "skills/gsd-quick/SKILL.md", + "skills/gsd-resume-work/SKILL.md", + "skills/gsd-review-backlog/SKILL.md", + "skills/gsd-review/SKILL.md", + "skills/gsd-secure-phase/SKILL.md", + "skills/gsd-settings/SKILL.md", + "skills/gsd-ship/SKILL.md", + "skills/gsd-sketch/SKILL.md", + "skills/gsd-spec-phase/SKILL.md", + "skills/gsd-spike/SKILL.md", + "skills/gsd-stats/SKILL.md", + "skills/gsd-surface/SKILL.md", + "skills/gsd-thread/SKILL.md", + "skills/gsd-ui-phase/SKILL.md", + "skills/gsd-ui-review/SKILL.md", + "skills/gsd-ultraplan-phase/SKILL.md", + "skills/gsd-undo/SKILL.md", + "skills/gsd-update/SKILL.md", + "skills/gsd-validate-phase/SKILL.md", + "skills/gsd-verify-work/SKILL.md", + "skills/gsd-workspace/SKILL.md", + "skills/gsd-workstreams/SKILL.md" +] diff --git a/tests/fixtures/install-tree/hermes.json b/tests/fixtures/install-tree/hermes.json new file mode 100644 index 000000000..cb82f8eb8 --- /dev/null +++ b/tests/fixtures/install-tree/hermes.json @@ -0,0 +1,428 @@ +[ + ".gsd-profile", + ".gsd/defaults.json", + "agents/gsd-advisor-researcher.md", + "agents/gsd-ai-researcher.md", + "agents/gsd-assumptions-analyzer.md", + "agents/gsd-code-fixer.md", + "agents/gsd-code-reviewer.md", + "agents/gsd-codebase-mapper.md", + "agents/gsd-debug-session-manager.md", + "agents/gsd-debugger.md", + "agents/gsd-doc-classifier.md", + "agents/gsd-doc-synthesizer.md", + "agents/gsd-doc-verifier.md", + "agents/gsd-doc-writer.md", + "agents/gsd-domain-researcher.md", + "agents/gsd-eval-auditor.md", + "agents/gsd-eval-planner.md", + "agents/gsd-executor.md", + "agents/gsd-framework-selector.md", + "agents/gsd-integration-checker.md", + "agents/gsd-intel-updater.md", + "agents/gsd-mempalace-curator.md", + "agents/gsd-nyquist-auditor.md", + "agents/gsd-pattern-mapper.md", + "agents/gsd-phase-researcher.md", + "agents/gsd-plan-checker.md", + "agents/gsd-planner.md", + "agents/gsd-project-researcher.md", + "agents/gsd-research-synthesizer.md", + "agents/gsd-roadmapper.md", + "agents/gsd-security-auditor.md", + "agents/gsd-ui-auditor.md", + "agents/gsd-ui-checker.md", + "agents/gsd-ui-researcher.md", + "agents/gsd-user-profiler.md", + "agents/gsd-verifier.md", + "gsd-core/VERSION", + "gsd-core/bin/check-latest-version.cjs", + "gsd-core/bin/ensure-runtime-build.cjs", + "gsd-core/bin/gsd-tools.cjs", + "gsd-core/bin/gsd_run", + "gsd-core/bin/shared/config-defaults.manifest.json", + "gsd-core/bin/shared/config-schema.manifest.json", + "gsd-core/bin/shared/model-catalog.json", + "gsd-core/bin/shared/runtime-aliases.manifest.json", + "gsd-core/bin/verify-reapply-patches.cjs", + "gsd-core/contexts/dev.md", + "gsd-core/contexts/research.md", + "gsd-core/contexts/review.md", + "gsd-core/references/agent-contracts.md", + "gsd-core/references/agent-skills-bootstrap.md", + "gsd-core/references/ai-evals.md", + "gsd-core/references/ai-frameworks.md", + "gsd-core/references/api-coverage.md", + "gsd-core/references/artifact-types.md", + "gsd-core/references/autonomous-smart-discuss.md", + "gsd-core/references/checkpoints.md", + "gsd-core/references/common-bug-patterns.md", + "gsd-core/references/context-budget.md", + "gsd-core/references/continuation-format.md", + "gsd-core/references/debugger-philosophy.md", + "gsd-core/references/decimal-phase-calculation.md", + "gsd-core/references/doc-conflict-engine.md", + "gsd-core/references/domain-probes.md", + "gsd-core/references/edge-probe-fixtures/01-round-half-even/expected-coverage.json", + "gsd-core/references/edge-probe-fixtures/01-round-half-even/requirements.json", + "gsd-core/references/edge-probe-fixtures/02-merge-intervals/expected-coverage.json", + "gsd-core/references/edge-probe-fixtures/02-merge-intervals/requirements.json", + "gsd-core/references/edge-probe-fixtures/03-truncate-graphemes/expected-coverage.json", + "gsd-core/references/edge-probe-fixtures/03-truncate-graphemes/requirements.json", + "gsd-core/references/edge-probe-fixtures/04-money-rounding/expected-coverage.json", + "gsd-core/references/edge-probe-fixtures/04-money-rounding/requirements.json", + "gsd-core/references/edge-probe-fixtures/05-list-dedupe/expected-coverage.json", + "gsd-core/references/edge-probe-fixtures/05-list-dedupe/requirements.json", + "gsd-core/references/edge-probe-fixtures/06-resolved-mixed/expected-coverage.json", + "gsd-core/references/edge-probe-fixtures/06-resolved-mixed/requirements.json", + "gsd-core/references/edge-probe-fixtures/06-resolved-mixed/resolutions.json", + "gsd-core/references/edge-probe.md", + "gsd-core/references/execute-mvp-tdd.md", + "gsd-core/references/execute-phase-between-wave-reset.md", + "gsd-core/references/execute-phase-context-guard.md", + "gsd-core/references/execute-phase-wave-guard.md", + "gsd-core/references/executor-examples.md", + "gsd-core/references/few-shot-examples/plan-checker.md", + "gsd-core/references/few-shot-examples/verifier.md", + "gsd-core/references/gate-prompts.md", + "gsd-core/references/gates.md", + "gsd-core/references/git-integration.md", + "gsd-core/references/git-planning-commit.md", + "gsd-core/references/gsd-run-resolver.md", + "gsd-core/references/honest-verifier.md", + "gsd-core/references/ios-scaffold.md", + "gsd-core/references/loop-hook-dispatch.md", + "gsd-core/references/mandatory-initial-read.md", + "gsd-core/references/model-profile-resolution.md", + "gsd-core/references/model-profiles.md", + "gsd-core/references/mvp-concepts.md", + "gsd-core/references/phase-argument-parsing.md", + "gsd-core/references/planner-antipatterns.md", + "gsd-core/references/planner-chunked.md", + "gsd-core/references/planner-gap-closure.md", + "gsd-core/references/planner-graphify-auto-update.md", + "gsd-core/references/planner-guidance.md", + "gsd-core/references/planner-human-verify-mode.md", + "gsd-core/references/planner-interface-context.md", + "gsd-core/references/planner-load-graph-context.md", + "gsd-core/references/planner-mvp-mode.md", + "gsd-core/references/planner-reviews.md", + "gsd-core/references/planner-revision.md", + "gsd-core/references/planner-source-audit.md", + "gsd-core/references/planning-config.md", + "gsd-core/references/prohibition-probe-fixtures/01-streak-reminder/expected.json", + "gsd-core/references/prohibition-probe-fixtures/02-clean-utility/expected.json", + "gsd-core/references/prohibition-probe-fixtures/03-multi-prohibition/expected.json", + "gsd-core/references/prohibition-probe.md", + "gsd-core/references/project-skills-discovery.md", + "gsd-core/references/questioning.md", + "gsd-core/references/research-documentation-lookup.md", + "gsd-core/references/research-philosophy.md", + "gsd-core/references/research-verification-protocol.md", + "gsd-core/references/reviewer-instances.md", + "gsd-core/references/revision-loop.md", + "gsd-core/references/scout-codebase.md", + "gsd-core/references/security-asvs-levels.md", + "gsd-core/references/skeleton-template.md", + "gsd-core/references/sketch-interactivity.md", + "gsd-core/references/sketch-theme-system.md", + "gsd-core/references/sketch-tooling.md", + "gsd-core/references/sketch-variant-patterns.md", + "gsd-core/references/specless-probe-fallback.md", + "gsd-core/references/spidr-splitting.md", + "gsd-core/references/tdd.md", + "gsd-core/references/thinking-models-debug.md", + "gsd-core/references/thinking-models-execution.md", + "gsd-core/references/thinking-models-planning.md", + "gsd-core/references/thinking-models-research.md", + "gsd-core/references/thinking-models-verification.md", + "gsd-core/references/thinking-partner.md", + "gsd-core/references/ui-brand.md", + "gsd-core/references/ui-consideration-probe.md", + "gsd-core/references/universal-anti-patterns.md", + "gsd-core/references/untrusted-input-boundary.md", + "gsd-core/references/user-profiling.md", + "gsd-core/references/user-story-template.md", + "gsd-core/references/verification-overrides.md", + "gsd-core/references/verification-patterns.md", + "gsd-core/references/verify-mvp-mode.md", + "gsd-core/references/workstream-flag.md", + "gsd-core/references/worktree-branch-check.md", + "gsd-core/references/worktree-path-safety.md", + "gsd-core/templates/AI-SPEC.md", + "gsd-core/templates/DEBUG.md", + "gsd-core/templates/README.md", + "gsd-core/templates/SECURITY.md", + "gsd-core/templates/UAT.md", + "gsd-core/templates/UI-SPEC.md", + "gsd-core/templates/VALIDATION.md", + "gsd-core/templates/claude-md.md", + "gsd-core/templates/codebase/architecture.md", + "gsd-core/templates/codebase/concerns.md", + "gsd-core/templates/codebase/conventions.md", + "gsd-core/templates/codebase/integrations.md", + "gsd-core/templates/codebase/stack.md", + "gsd-core/templates/codebase/structure.md", + "gsd-core/templates/codebase/testing.md", + "gsd-core/templates/config.json", + "gsd-core/templates/context.md", + "gsd-core/templates/continue-here.md", + "gsd-core/templates/copilot-instructions.md", + "gsd-core/templates/debug-subagent-prompt.md", + "gsd-core/templates/dev-preferences.md", + "gsd-core/templates/discovery.md", + "gsd-core/templates/discussion-log.md", + "gsd-core/templates/milestone-archive.md", + "gsd-core/templates/milestone.md", + "gsd-core/templates/phase-prompt.md", + "gsd-core/templates/planner-subagent-prompt.md", + "gsd-core/templates/project.md", + "gsd-core/templates/requirements.md", + "gsd-core/templates/research-project/ARCHITECTURE.md", + "gsd-core/templates/research-project/FEATURES.md", + "gsd-core/templates/research-project/PITFALLS.md", + "gsd-core/templates/research-project/STACK.md", + "gsd-core/templates/research-project/SUMMARY.md", + "gsd-core/templates/research.md", + "gsd-core/templates/retrospective.md", + "gsd-core/templates/roadmap.md", + "gsd-core/templates/spec.md", + "gsd-core/templates/state.md", + "gsd-core/templates/summary-complex.md", + "gsd-core/templates/summary-minimal.md", + "gsd-core/templates/summary-standard.md", + "gsd-core/templates/summary.md", + "gsd-core/templates/user-profile.md", + "gsd-core/templates/user-setup.md", + "gsd-core/templates/verification-report.md", + "gsd-core/workflows/_runtime-launcher.snippet.sh", + "gsd-core/workflows/add-backlog.md", + "gsd-core/workflows/add-phase.md", + "gsd-core/workflows/add-tests.md", + "gsd-core/workflows/add-todo.md", + "gsd-core/workflows/ai-integration-phase.md", + "gsd-core/workflows/analyze-dependencies.md", + "gsd-core/workflows/audit-fix.md", + "gsd-core/workflows/audit-milestone.md", + "gsd-core/workflows/audit-uat.md", + "gsd-core/workflows/autonomous.md", + "gsd-core/workflows/check-todos.md", + "gsd-core/workflows/cleanup.md", + "gsd-core/workflows/code-review-fix.md", + "gsd-core/workflows/code-review.md", + "gsd-core/workflows/complete-milestone.md", + "gsd-core/workflows/debug.md", + "gsd-core/workflows/diagnose-issues.md", + "gsd-core/workflows/discovery-phase.md", + "gsd-core/workflows/discuss-phase-assumptions.md", + "gsd-core/workflows/discuss-phase-power.md", + "gsd-core/workflows/discuss-phase.md", + "gsd-core/workflows/discuss-phase/modes/advisor.md", + "gsd-core/workflows/discuss-phase/modes/all.md", + "gsd-core/workflows/discuss-phase/modes/analyze.md", + "gsd-core/workflows/discuss-phase/modes/auto.md", + "gsd-core/workflows/discuss-phase/modes/batch.md", + "gsd-core/workflows/discuss-phase/modes/chain.md", + "gsd-core/workflows/discuss-phase/modes/default.md", + "gsd-core/workflows/discuss-phase/modes/power.md", + "gsd-core/workflows/discuss-phase/modes/text.md", + "gsd-core/workflows/discuss-phase/templates/checkpoint.json", + "gsd-core/workflows/discuss-phase/templates/context.md", + "gsd-core/workflows/discuss-phase/templates/discussion-log.md", + "gsd-core/workflows/do.md", + "gsd-core/workflows/docs-update.md", + "gsd-core/workflows/edit-phase.md", + "gsd-core/workflows/eval-review.md", + "gsd-core/workflows/execute-phase.md", + "gsd-core/workflows/execute-phase/steps/codebase-drift-gate.md", + "gsd-core/workflows/execute-phase/steps/per-plan-worktree-gate.md", + "gsd-core/workflows/execute-phase/steps/post-merge-gate.md", + "gsd-core/workflows/execute-phase/steps/regression-gate.md", + "gsd-core/workflows/execute-phase/steps/worktree-recovery-policy.md", + "gsd-core/workflows/execute-plan.md", + "gsd-core/workflows/explore.md", + "gsd-core/workflows/extract-learnings.md", + "gsd-core/workflows/fast.md", + "gsd-core/workflows/forensics.md", + "gsd-core/workflows/graduation.md", + "gsd-core/workflows/health.md", + "gsd-core/workflows/help.md", + "gsd-core/workflows/help/modes/brief.md", + "gsd-core/workflows/help/modes/default.md", + "gsd-core/workflows/help/modes/full.md", + "gsd-core/workflows/help/modes/topic.md", + "gsd-core/workflows/import.md", + "gsd-core/workflows/inbox.md", + "gsd-core/workflows/ingest-docs.md", + "gsd-core/workflows/insert-phase.md", + "gsd-core/workflows/list-phase-assumptions.md", + "gsd-core/workflows/list-seeds.md", + "gsd-core/workflows/list-workspaces.md", + "gsd-core/workflows/manager.md", + "gsd-core/workflows/map-codebase.md", + "gsd-core/workflows/milestone-summary.md", + "gsd-core/workflows/mvp-phase.md", + "gsd-core/workflows/new-milestone.md", + "gsd-core/workflows/new-project.md", + "gsd-core/workflows/new-workspace.md", + "gsd-core/workflows/next.md", + "gsd-core/workflows/node-repair.md", + "gsd-core/workflows/note.md", + "gsd-core/workflows/onboard.md", + "gsd-core/workflows/pause-work.md", + "gsd-core/workflows/plan-milestone-gaps.md", + "gsd-core/workflows/plan-phase.md", + "gsd-core/workflows/plan-phase/steps/closed-phase-gate.md", + "gsd-core/workflows/plan-phase/steps/prd-express-path.md", + "gsd-core/workflows/plan-phase/steps/windows-troubleshooting.md", + "gsd-core/workflows/plan-review-convergence.md", + "gsd-core/workflows/plant-seed.md", + "gsd-core/workflows/pr-branch.md", + "gsd-core/workflows/profile-user.md", + "gsd-core/workflows/progress.md", + "gsd-core/workflows/quick.md", + "gsd-core/workflows/reapply-patches.md", + "gsd-core/workflows/remove-phase.md", + "gsd-core/workflows/remove-workspace.md", + "gsd-core/workflows/resume-project.md", + "gsd-core/workflows/review.md", + "gsd-core/workflows/scan.md", + "gsd-core/workflows/secure-phase.md", + "gsd-core/workflows/session-report.md", + "gsd-core/workflows/settings-advanced.md", + "gsd-core/workflows/settings-integrations.md", + "gsd-core/workflows/settings.md", + "gsd-core/workflows/ship.md", + "gsd-core/workflows/sketch-wrap-up.md", + "gsd-core/workflows/sketch.md", + "gsd-core/workflows/smart-entry.md", + "gsd-core/workflows/spec-phase.md", + "gsd-core/workflows/spike-wrap-up.md", + "gsd-core/workflows/spike.md", + "gsd-core/workflows/stats.md", + "gsd-core/workflows/sync-skills.md", + "gsd-core/workflows/thread.md", + "gsd-core/workflows/transition.md", + "gsd-core/workflows/ui-phase.md", + "gsd-core/workflows/ui-review.md", + "gsd-core/workflows/ultraplan-phase.md", + "gsd-core/workflows/undo.md", + "gsd-core/workflows/update.md", + "gsd-core/workflows/validate-phase.md", + "gsd-core/workflows/verify-phase.md", + "gsd-core/workflows/verify-work.md", + "hooks/gsd-check-update-worker.js", + "hooks/gsd-check-update.js", + "hooks/gsd-config-reload.js", + "hooks/gsd-context-monitor.js", + "hooks/gsd-cursor-post-tool.js", + "hooks/gsd-cursor-pre-tool.js", + "hooks/gsd-cursor-session-start.js", + "hooks/gsd-cursor-stop.js", + "hooks/gsd-cursor-subagent-start.js", + "hooks/gsd-cursor-subagent-stop.js", + "hooks/gsd-ensure-canonical-path.js", + "hooks/gsd-graphify-update.sh", + "hooks/gsd-phase-boundary.sh", + "hooks/gsd-prompt-guard.js", + "hooks/gsd-read-guard.js", + "hooks/gsd-read-injection-scanner.js", + "hooks/gsd-session-state.sh", + "hooks/gsd-statusline.js", + "hooks/gsd-update-banner.js", + "hooks/gsd-validate-commit.sh", + "hooks/gsd-windsurf-pre-command.js", + "hooks/gsd-windsurf-pre-write.js", + "hooks/gsd-workflow-guard.js", + "hooks/gsd-worktree-path-guard.js", + "hooks/lib/git-cmd.js", + "hooks/lib/gsd-graphify-rebuild.sh", + "hooks/managed-hooks-registry.cjs", + "package.json", + "scripts/changeset/README.md", + "scripts/changeset/cli.cjs", + "scripts/changeset/github-release-notes.cjs", + "scripts/changeset/lint.cjs", + "scripts/changeset/new.cjs", + "scripts/changeset/parse.cjs", + "scripts/changeset/render.cjs", + "scripts/changeset/serialize.cjs", + "scripts/fix-slash-commands.cjs", + "scripts/gen-capability-registry.cjs", + "scripts/gen-loop-host-contract.cjs", + "scripts/lib/allowlist-ratchet.cjs", + "scripts/lib/cli-exit.cjs", + "skills/gsd/DESCRIPTION.md", + "skills/gsd/gsd-ns-context/SKILL.md", + "skills/gsd/gsd-ns-context/skills/docs-update/SKILL.md", + "skills/gsd/gsd-ns-context/skills/extract-learnings/SKILL.md", + "skills/gsd/gsd-ns-context/skills/graphify/SKILL.md", + "skills/gsd/gsd-ns-context/skills/map-codebase/SKILL.md", + "skills/gsd/gsd-ns-context/skills/mempalace-capture/SKILL.md", + "skills/gsd/gsd-ns-context/skills/mempalace-recall/SKILL.md", + "skills/gsd/gsd-ns-ideate/SKILL.md", + "skills/gsd/gsd-ns-ideate/skills/capture/SKILL.md", + "skills/gsd/gsd-ns-ideate/skills/explore/SKILL.md", + "skills/gsd/gsd-ns-ideate/skills/sketch/SKILL.md", + "skills/gsd/gsd-ns-ideate/skills/spec-phase/SKILL.md", + "skills/gsd/gsd-ns-ideate/skills/spike/SKILL.md", + "skills/gsd/gsd-ns-manage/SKILL.md", + "skills/gsd/gsd-ns-manage/skills/cleanup/SKILL.md", + "skills/gsd/gsd-ns-manage/skills/config/SKILL.md", + "skills/gsd/gsd-ns-manage/skills/health/SKILL.md", + "skills/gsd/gsd-ns-manage/skills/help/SKILL.md", + "skills/gsd/gsd-ns-manage/skills/inbox/SKILL.md", + "skills/gsd/gsd-ns-manage/skills/manager/SKILL.md", + "skills/gsd/gsd-ns-manage/skills/pause-work/SKILL.md", + "skills/gsd/gsd-ns-manage/skills/pr-branch/SKILL.md", + "skills/gsd/gsd-ns-manage/skills/resume-work/SKILL.md", + "skills/gsd/gsd-ns-manage/skills/settings/SKILL.md", + "skills/gsd/gsd-ns-manage/skills/ship/SKILL.md", + "skills/gsd/gsd-ns-manage/skills/stats/SKILL.md", + "skills/gsd/gsd-ns-manage/skills/surface/SKILL.md", + "skills/gsd/gsd-ns-manage/skills/thread/SKILL.md", + "skills/gsd/gsd-ns-manage/skills/undo/SKILL.md", + "skills/gsd/gsd-ns-manage/skills/update/SKILL.md", + "skills/gsd/gsd-ns-manage/skills/workspace/SKILL.md", + "skills/gsd/gsd-ns-manage/skills/workstreams/SKILL.md", + "skills/gsd/gsd-ns-project/SKILL.md", + "skills/gsd/gsd-ns-project/skills/audit-milestone/SKILL.md", + "skills/gsd/gsd-ns-project/skills/complete-milestone/SKILL.md", + "skills/gsd/gsd-ns-project/skills/import/SKILL.md", + "skills/gsd/gsd-ns-project/skills/ingest-docs/SKILL.md", + "skills/gsd/gsd-ns-project/skills/milestone-summary/SKILL.md", + "skills/gsd/gsd-ns-project/skills/new-milestone/SKILL.md", + "skills/gsd/gsd-ns-project/skills/new-project/SKILL.md", + "skills/gsd/gsd-ns-project/skills/onboard/SKILL.md", + "skills/gsd/gsd-ns-project/skills/profile-user/SKILL.md", + "skills/gsd/gsd-ns-project/skills/review-backlog/SKILL.md", + "skills/gsd/gsd-ns-review/SKILL.md", + "skills/gsd/gsd-ns-review/skills/audit-fix/SKILL.md", + "skills/gsd/gsd-ns-review/skills/audit-uat/SKILL.md", + "skills/gsd/gsd-ns-review/skills/code-review/SKILL.md", + "skills/gsd/gsd-ns-review/skills/debug/SKILL.md", + "skills/gsd/gsd-ns-review/skills/eval-review/SKILL.md", + "skills/gsd/gsd-ns-review/skills/forensics/SKILL.md", + "skills/gsd/gsd-ns-review/skills/review/SKILL.md", + "skills/gsd/gsd-ns-review/skills/secure-phase/SKILL.md", + "skills/gsd/gsd-ns-review/skills/ui-phase/SKILL.md", + "skills/gsd/gsd-ns-review/skills/ui-review/SKILL.md", + "skills/gsd/gsd-ns-review/skills/validate-phase/SKILL.md", + "skills/gsd/gsd-ns-workflow/SKILL.md", + "skills/gsd/gsd-ns-workflow/skills/add-tests/SKILL.md", + "skills/gsd/gsd-ns-workflow/skills/ai-integration-phase/SKILL.md", + "skills/gsd/gsd-ns-workflow/skills/autonomous/SKILL.md", + "skills/gsd/gsd-ns-workflow/skills/discuss-phase/SKILL.md", + "skills/gsd/gsd-ns-workflow/skills/execute-phase/SKILL.md", + "skills/gsd/gsd-ns-workflow/skills/fast/SKILL.md", + "skills/gsd/gsd-ns-workflow/skills/mvp-phase/SKILL.md", + "skills/gsd/gsd-ns-workflow/skills/next/SKILL.md", + "skills/gsd/gsd-ns-workflow/skills/phase/SKILL.md", + "skills/gsd/gsd-ns-workflow/skills/plan-phase/SKILL.md", + "skills/gsd/gsd-ns-workflow/skills/plan-review-convergence/SKILL.md", + "skills/gsd/gsd-ns-workflow/skills/progress/SKILL.md", + "skills/gsd/gsd-ns-workflow/skills/quick/SKILL.md", + "skills/gsd/gsd-ns-workflow/skills/spec-phase/SKILL.md", + "skills/gsd/gsd-ns-workflow/skills/ultraplan-phase/SKILL.md", + "skills/gsd/gsd-ns-workflow/skills/verify-work/SKILL.md" +] diff --git a/tests/fixtures/install-tree/kilo.json b/tests/fixtures/install-tree/kilo.json new file mode 100644 index 000000000..93ff07f73 --- /dev/null +++ b/tests/fixtures/install-tree/kilo.json @@ -0,0 +1,471 @@ +[ + ".gsd-profile", + ".gsd/defaults.json", + "agents/gsd-advisor-researcher.md", + "agents/gsd-ai-researcher.md", + "agents/gsd-assumptions-analyzer.md", + "agents/gsd-code-fixer.md", + "agents/gsd-code-reviewer.md", + "agents/gsd-codebase-mapper.md", + "agents/gsd-debug-session-manager.md", + "agents/gsd-debugger.md", + "agents/gsd-doc-classifier.md", + "agents/gsd-doc-synthesizer.md", + "agents/gsd-doc-verifier.md", + "agents/gsd-doc-writer.md", + "agents/gsd-domain-researcher.md", + "agents/gsd-eval-auditor.md", + "agents/gsd-eval-planner.md", + "agents/gsd-executor.md", + "agents/gsd-framework-selector.md", + "agents/gsd-integration-checker.md", + "agents/gsd-intel-updater.md", + "agents/gsd-mempalace-curator.md", + "agents/gsd-nyquist-auditor.md", + "agents/gsd-pattern-mapper.md", + "agents/gsd-phase-researcher.md", + "agents/gsd-plan-checker.md", + "agents/gsd-planner.md", + "agents/gsd-project-researcher.md", + "agents/gsd-research-synthesizer.md", + "agents/gsd-roadmapper.md", + "agents/gsd-security-auditor.md", + "agents/gsd-ui-auditor.md", + "agents/gsd-ui-checker.md", + "agents/gsd-ui-researcher.md", + "agents/gsd-user-profiler.md", + "agents/gsd-verifier.md", + "command/gsd-add-tests.md", + "command/gsd-ai-integration-phase.md", + "command/gsd-audit-fix.md", + "command/gsd-audit-milestone.md", + "command/gsd-audit-uat.md", + "command/gsd-autonomous.md", + "command/gsd-capture.md", + "command/gsd-cleanup.md", + "command/gsd-code-review.md", + "command/gsd-complete-milestone.md", + "command/gsd-config.md", + "command/gsd-debug.md", + "command/gsd-discuss-phase.md", + "command/gsd-docs-update.md", + "command/gsd-eval-review.md", + "command/gsd-execute-phase.md", + "command/gsd-explore.md", + "command/gsd-extract-learnings.md", + "command/gsd-fast.md", + "command/gsd-forensics.md", + "command/gsd-graphify.md", + "command/gsd-health.md", + "command/gsd-help.md", + "command/gsd-import.md", + "command/gsd-inbox.md", + "command/gsd-ingest-docs.md", + "command/gsd-manager.md", + "command/gsd-map-codebase.md", + "command/gsd-mempalace-capture.md", + "command/gsd-mempalace-recall.md", + "command/gsd-milestone-summary.md", + "command/gsd-mvp-phase.md", + "command/gsd-new-milestone.md", + "command/gsd-new-project.md", + "command/gsd-next.md", + "command/gsd-ns-context.md", + "command/gsd-ns-ideate.md", + "command/gsd-ns-manage.md", + "command/gsd-ns-project.md", + "command/gsd-ns-review.md", + "command/gsd-ns-workflow.md", + "command/gsd-onboard.md", + "command/gsd-pause-work.md", + "command/gsd-phase.md", + "command/gsd-plan-phase.md", + "command/gsd-plan-review-convergence.md", + "command/gsd-pr-branch.md", + "command/gsd-profile-user.md", + "command/gsd-progress.md", + "command/gsd-quick.md", + "command/gsd-resume-work.md", + "command/gsd-review-backlog.md", + "command/gsd-review.md", + "command/gsd-secure-phase.md", + "command/gsd-settings.md", + "command/gsd-ship.md", + "command/gsd-sketch.md", + "command/gsd-spec-phase.md", + "command/gsd-spike.md", + "command/gsd-stats.md", + "command/gsd-surface.md", + "command/gsd-thread.md", + "command/gsd-ui-phase.md", + "command/gsd-ui-review.md", + "command/gsd-ultraplan-phase.md", + "command/gsd-undo.md", + "command/gsd-update.md", + "command/gsd-validate-phase.md", + "command/gsd-verify-work.md", + "command/gsd-workspace.md", + "command/gsd-workstreams.md", + "gsd-core/VERSION", + "gsd-core/bin/check-latest-version.cjs", + "gsd-core/bin/ensure-runtime-build.cjs", + "gsd-core/bin/gsd-tools.cjs", + "gsd-core/bin/gsd_run", + "gsd-core/bin/shared/config-defaults.manifest.json", + "gsd-core/bin/shared/config-schema.manifest.json", + "gsd-core/bin/shared/model-catalog.json", + "gsd-core/bin/shared/runtime-aliases.manifest.json", + "gsd-core/bin/verify-reapply-patches.cjs", + "gsd-core/contexts/dev.md", + "gsd-core/contexts/research.md", + "gsd-core/contexts/review.md", + "gsd-core/references/agent-contracts.md", + "gsd-core/references/agent-skills-bootstrap.md", + "gsd-core/references/ai-evals.md", + "gsd-core/references/ai-frameworks.md", + "gsd-core/references/api-coverage.md", + "gsd-core/references/artifact-types.md", + "gsd-core/references/autonomous-smart-discuss.md", + "gsd-core/references/checkpoints.md", + "gsd-core/references/common-bug-patterns.md", + "gsd-core/references/context-budget.md", + "gsd-core/references/continuation-format.md", + "gsd-core/references/debugger-philosophy.md", + "gsd-core/references/decimal-phase-calculation.md", + "gsd-core/references/doc-conflict-engine.md", + "gsd-core/references/domain-probes.md", + "gsd-core/references/edge-probe-fixtures/01-round-half-even/expected-coverage.json", + "gsd-core/references/edge-probe-fixtures/01-round-half-even/requirements.json", + "gsd-core/references/edge-probe-fixtures/02-merge-intervals/expected-coverage.json", + "gsd-core/references/edge-probe-fixtures/02-merge-intervals/requirements.json", + "gsd-core/references/edge-probe-fixtures/03-truncate-graphemes/expected-coverage.json", + "gsd-core/references/edge-probe-fixtures/03-truncate-graphemes/requirements.json", + "gsd-core/references/edge-probe-fixtures/04-money-rounding/expected-coverage.json", + "gsd-core/references/edge-probe-fixtures/04-money-rounding/requirements.json", + "gsd-core/references/edge-probe-fixtures/05-list-dedupe/expected-coverage.json", + "gsd-core/references/edge-probe-fixtures/05-list-dedupe/requirements.json", + "gsd-core/references/edge-probe-fixtures/06-resolved-mixed/expected-coverage.json", + "gsd-core/references/edge-probe-fixtures/06-resolved-mixed/requirements.json", + "gsd-core/references/edge-probe-fixtures/06-resolved-mixed/resolutions.json", + "gsd-core/references/edge-probe.md", + "gsd-core/references/execute-mvp-tdd.md", + "gsd-core/references/execute-phase-between-wave-reset.md", + "gsd-core/references/execute-phase-context-guard.md", + "gsd-core/references/execute-phase-wave-guard.md", + "gsd-core/references/executor-examples.md", + "gsd-core/references/few-shot-examples/plan-checker.md", + "gsd-core/references/few-shot-examples/verifier.md", + "gsd-core/references/gate-prompts.md", + "gsd-core/references/gates.md", + "gsd-core/references/git-integration.md", + "gsd-core/references/git-planning-commit.md", + "gsd-core/references/gsd-run-resolver.md", + "gsd-core/references/honest-verifier.md", + "gsd-core/references/ios-scaffold.md", + "gsd-core/references/loop-hook-dispatch.md", + "gsd-core/references/mandatory-initial-read.md", + "gsd-core/references/model-profile-resolution.md", + "gsd-core/references/model-profiles.md", + "gsd-core/references/mvp-concepts.md", + "gsd-core/references/phase-argument-parsing.md", + "gsd-core/references/planner-antipatterns.md", + "gsd-core/references/planner-chunked.md", + "gsd-core/references/planner-gap-closure.md", + "gsd-core/references/planner-graphify-auto-update.md", + "gsd-core/references/planner-guidance.md", + "gsd-core/references/planner-human-verify-mode.md", + "gsd-core/references/planner-interface-context.md", + "gsd-core/references/planner-load-graph-context.md", + "gsd-core/references/planner-mvp-mode.md", + "gsd-core/references/planner-reviews.md", + "gsd-core/references/planner-revision.md", + "gsd-core/references/planner-source-audit.md", + "gsd-core/references/planning-config.md", + "gsd-core/references/prohibition-probe-fixtures/01-streak-reminder/expected.json", + "gsd-core/references/prohibition-probe-fixtures/02-clean-utility/expected.json", + "gsd-core/references/prohibition-probe-fixtures/03-multi-prohibition/expected.json", + "gsd-core/references/prohibition-probe.md", + "gsd-core/references/project-skills-discovery.md", + "gsd-core/references/questioning.md", + "gsd-core/references/research-documentation-lookup.md", + "gsd-core/references/research-philosophy.md", + "gsd-core/references/research-verification-protocol.md", + "gsd-core/references/reviewer-instances.md", + "gsd-core/references/revision-loop.md", + "gsd-core/references/scout-codebase.md", + "gsd-core/references/security-asvs-levels.md", + "gsd-core/references/skeleton-template.md", + "gsd-core/references/sketch-interactivity.md", + "gsd-core/references/sketch-theme-system.md", + "gsd-core/references/sketch-tooling.md", + "gsd-core/references/sketch-variant-patterns.md", + "gsd-core/references/specless-probe-fallback.md", + "gsd-core/references/spidr-splitting.md", + "gsd-core/references/tdd.md", + "gsd-core/references/thinking-models-debug.md", + "gsd-core/references/thinking-models-execution.md", + "gsd-core/references/thinking-models-planning.md", + "gsd-core/references/thinking-models-research.md", + "gsd-core/references/thinking-models-verification.md", + "gsd-core/references/thinking-partner.md", + "gsd-core/references/ui-brand.md", + "gsd-core/references/ui-consideration-probe.md", + "gsd-core/references/universal-anti-patterns.md", + "gsd-core/references/untrusted-input-boundary.md", + "gsd-core/references/user-profiling.md", + "gsd-core/references/user-story-template.md", + "gsd-core/references/verification-overrides.md", + "gsd-core/references/verification-patterns.md", + "gsd-core/references/verify-mvp-mode.md", + "gsd-core/references/workstream-flag.md", + "gsd-core/references/worktree-branch-check.md", + "gsd-core/references/worktree-path-safety.md", + "gsd-core/templates/AI-SPEC.md", + "gsd-core/templates/DEBUG.md", + "gsd-core/templates/README.md", + "gsd-core/templates/SECURITY.md", + "gsd-core/templates/UAT.md", + "gsd-core/templates/UI-SPEC.md", + "gsd-core/templates/VALIDATION.md", + "gsd-core/templates/claude-md.md", + "gsd-core/templates/codebase/architecture.md", + "gsd-core/templates/codebase/concerns.md", + "gsd-core/templates/codebase/conventions.md", + "gsd-core/templates/codebase/integrations.md", + "gsd-core/templates/codebase/stack.md", + "gsd-core/templates/codebase/structure.md", + "gsd-core/templates/codebase/testing.md", + "gsd-core/templates/config.json", + "gsd-core/templates/context.md", + "gsd-core/templates/continue-here.md", + "gsd-core/templates/copilot-instructions.md", + "gsd-core/templates/debug-subagent-prompt.md", + "gsd-core/templates/dev-preferences.md", + "gsd-core/templates/discovery.md", + "gsd-core/templates/discussion-log.md", + "gsd-core/templates/milestone-archive.md", + "gsd-core/templates/milestone.md", + "gsd-core/templates/phase-prompt.md", + "gsd-core/templates/planner-subagent-prompt.md", + "gsd-core/templates/project.md", + "gsd-core/templates/requirements.md", + "gsd-core/templates/research-project/ARCHITECTURE.md", + "gsd-core/templates/research-project/FEATURES.md", + "gsd-core/templates/research-project/PITFALLS.md", + "gsd-core/templates/research-project/STACK.md", + "gsd-core/templates/research-project/SUMMARY.md", + "gsd-core/templates/research.md", + "gsd-core/templates/retrospective.md", + "gsd-core/templates/roadmap.md", + "gsd-core/templates/spec.md", + "gsd-core/templates/state.md", + "gsd-core/templates/summary-complex.md", + "gsd-core/templates/summary-minimal.md", + "gsd-core/templates/summary-standard.md", + "gsd-core/templates/summary.md", + "gsd-core/templates/user-profile.md", + "gsd-core/templates/user-setup.md", + "gsd-core/templates/verification-report.md", + "gsd-core/workflows/_runtime-launcher.snippet.sh", + "gsd-core/workflows/add-backlog.md", + "gsd-core/workflows/add-phase.md", + "gsd-core/workflows/add-tests.md", + "gsd-core/workflows/add-todo.md", + "gsd-core/workflows/ai-integration-phase.md", + "gsd-core/workflows/analyze-dependencies.md", + "gsd-core/workflows/audit-fix.md", + "gsd-core/workflows/audit-milestone.md", + "gsd-core/workflows/audit-uat.md", + "gsd-core/workflows/autonomous.md", + "gsd-core/workflows/check-todos.md", + "gsd-core/workflows/cleanup.md", + "gsd-core/workflows/code-review-fix.md", + "gsd-core/workflows/code-review.md", + "gsd-core/workflows/complete-milestone.md", + "gsd-core/workflows/debug.md", + "gsd-core/workflows/diagnose-issues.md", + "gsd-core/workflows/discovery-phase.md", + "gsd-core/workflows/discuss-phase-assumptions.md", + "gsd-core/workflows/discuss-phase-power.md", + "gsd-core/workflows/discuss-phase.md", + "gsd-core/workflows/discuss-phase/modes/advisor.md", + "gsd-core/workflows/discuss-phase/modes/all.md", + "gsd-core/workflows/discuss-phase/modes/analyze.md", + "gsd-core/workflows/discuss-phase/modes/auto.md", + "gsd-core/workflows/discuss-phase/modes/batch.md", + "gsd-core/workflows/discuss-phase/modes/chain.md", + "gsd-core/workflows/discuss-phase/modes/default.md", + "gsd-core/workflows/discuss-phase/modes/power.md", + "gsd-core/workflows/discuss-phase/modes/text.md", + "gsd-core/workflows/discuss-phase/templates/checkpoint.json", + "gsd-core/workflows/discuss-phase/templates/context.md", + "gsd-core/workflows/discuss-phase/templates/discussion-log.md", + "gsd-core/workflows/do.md", + "gsd-core/workflows/docs-update.md", + "gsd-core/workflows/edit-phase.md", + "gsd-core/workflows/eval-review.md", + "gsd-core/workflows/execute-phase.md", + "gsd-core/workflows/execute-phase/steps/codebase-drift-gate.md", + "gsd-core/workflows/execute-phase/steps/per-plan-worktree-gate.md", + "gsd-core/workflows/execute-phase/steps/post-merge-gate.md", + "gsd-core/workflows/execute-phase/steps/regression-gate.md", + "gsd-core/workflows/execute-phase/steps/worktree-recovery-policy.md", + "gsd-core/workflows/execute-plan.md", + "gsd-core/workflows/explore.md", + "gsd-core/workflows/extract-learnings.md", + "gsd-core/workflows/fast.md", + "gsd-core/workflows/forensics.md", + "gsd-core/workflows/graduation.md", + "gsd-core/workflows/health.md", + "gsd-core/workflows/help.md", + "gsd-core/workflows/help/modes/brief.md", + "gsd-core/workflows/help/modes/default.md", + "gsd-core/workflows/help/modes/full.md", + "gsd-core/workflows/help/modes/topic.md", + "gsd-core/workflows/import.md", + "gsd-core/workflows/inbox.md", + "gsd-core/workflows/ingest-docs.md", + "gsd-core/workflows/insert-phase.md", + "gsd-core/workflows/list-phase-assumptions.md", + "gsd-core/workflows/list-seeds.md", + "gsd-core/workflows/list-workspaces.md", + "gsd-core/workflows/manager.md", + "gsd-core/workflows/map-codebase.md", + "gsd-core/workflows/milestone-summary.md", + "gsd-core/workflows/mvp-phase.md", + "gsd-core/workflows/new-milestone.md", + "gsd-core/workflows/new-project.md", + "gsd-core/workflows/new-workspace.md", + "gsd-core/workflows/next.md", + "gsd-core/workflows/node-repair.md", + "gsd-core/workflows/note.md", + "gsd-core/workflows/onboard.md", + "gsd-core/workflows/pause-work.md", + "gsd-core/workflows/plan-milestone-gaps.md", + "gsd-core/workflows/plan-phase.md", + "gsd-core/workflows/plan-phase/steps/closed-phase-gate.md", + "gsd-core/workflows/plan-phase/steps/prd-express-path.md", + "gsd-core/workflows/plan-phase/steps/windows-troubleshooting.md", + "gsd-core/workflows/plan-review-convergence.md", + "gsd-core/workflows/plant-seed.md", + "gsd-core/workflows/pr-branch.md", + "gsd-core/workflows/profile-user.md", + "gsd-core/workflows/progress.md", + "gsd-core/workflows/quick.md", + "gsd-core/workflows/reapply-patches.md", + "gsd-core/workflows/remove-phase.md", + "gsd-core/workflows/remove-workspace.md", + "gsd-core/workflows/resume-project.md", + "gsd-core/workflows/review.md", + "gsd-core/workflows/scan.md", + "gsd-core/workflows/secure-phase.md", + "gsd-core/workflows/session-report.md", + "gsd-core/workflows/settings-advanced.md", + "gsd-core/workflows/settings-integrations.md", + "gsd-core/workflows/settings.md", + "gsd-core/workflows/ship.md", + "gsd-core/workflows/sketch-wrap-up.md", + "gsd-core/workflows/sketch.md", + "gsd-core/workflows/smart-entry.md", + "gsd-core/workflows/spec-phase.md", + "gsd-core/workflows/spike-wrap-up.md", + "gsd-core/workflows/spike.md", + "gsd-core/workflows/stats.md", + "gsd-core/workflows/sync-skills.md", + "gsd-core/workflows/thread.md", + "gsd-core/workflows/transition.md", + "gsd-core/workflows/ui-phase.md", + "gsd-core/workflows/ui-review.md", + "gsd-core/workflows/ultraplan-phase.md", + "gsd-core/workflows/undo.md", + "gsd-core/workflows/update.md", + "gsd-core/workflows/validate-phase.md", + "gsd-core/workflows/verify-phase.md", + "gsd-core/workflows/verify-work.md", + "kilo.json", + "plugins/gsd-core.js", + "scripts/changeset/README.md", + "scripts/changeset/cli.cjs", + "scripts/changeset/github-release-notes.cjs", + "scripts/changeset/lint.cjs", + "scripts/changeset/new.cjs", + "scripts/changeset/parse.cjs", + "scripts/changeset/render.cjs", + "scripts/changeset/serialize.cjs", + "scripts/fix-slash-commands.cjs", + "scripts/gen-capability-registry.cjs", + "scripts/gen-loop-host-contract.cjs", + "scripts/lib/allowlist-ratchet.cjs", + "scripts/lib/cli-exit.cjs", + "skills/gsd-add-tests/SKILL.md", + "skills/gsd-ai-integration-phase/SKILL.md", + "skills/gsd-audit-fix/SKILL.md", + "skills/gsd-audit-milestone/SKILL.md", + "skills/gsd-audit-uat/SKILL.md", + "skills/gsd-autonomous/SKILL.md", + "skills/gsd-capture/SKILL.md", + "skills/gsd-cleanup/SKILL.md", + "skills/gsd-code-review/SKILL.md", + "skills/gsd-complete-milestone/SKILL.md", + "skills/gsd-config/SKILL.md", + "skills/gsd-debug/SKILL.md", + "skills/gsd-discuss-phase/SKILL.md", + "skills/gsd-docs-update/SKILL.md", + "skills/gsd-eval-review/SKILL.md", + "skills/gsd-execute-phase/SKILL.md", + "skills/gsd-explore/SKILL.md", + "skills/gsd-extract-learnings/SKILL.md", + "skills/gsd-fast/SKILL.md", + "skills/gsd-forensics/SKILL.md", + "skills/gsd-graphify/SKILL.md", + "skills/gsd-health/SKILL.md", + "skills/gsd-help/SKILL.md", + "skills/gsd-import/SKILL.md", + "skills/gsd-inbox/SKILL.md", + "skills/gsd-ingest-docs/SKILL.md", + "skills/gsd-manager/SKILL.md", + "skills/gsd-map-codebase/SKILL.md", + "skills/gsd-mempalace-capture/SKILL.md", + "skills/gsd-mempalace-recall/SKILL.md", + "skills/gsd-milestone-summary/SKILL.md", + "skills/gsd-mvp-phase/SKILL.md", + "skills/gsd-new-milestone/SKILL.md", + "skills/gsd-new-project/SKILL.md", + "skills/gsd-next/SKILL.md", + "skills/gsd-ns-context/SKILL.md", + "skills/gsd-ns-ideate/SKILL.md", + "skills/gsd-ns-manage/SKILL.md", + "skills/gsd-ns-project/SKILL.md", + "skills/gsd-ns-review/SKILL.md", + "skills/gsd-ns-workflow/SKILL.md", + "skills/gsd-onboard/SKILL.md", + "skills/gsd-pause-work/SKILL.md", + "skills/gsd-phase/SKILL.md", + "skills/gsd-plan-phase/SKILL.md", + "skills/gsd-plan-review-convergence/SKILL.md", + "skills/gsd-pr-branch/SKILL.md", + "skills/gsd-profile-user/SKILL.md", + "skills/gsd-progress/SKILL.md", + "skills/gsd-quick/SKILL.md", + "skills/gsd-resume-work/SKILL.md", + "skills/gsd-review-backlog/SKILL.md", + "skills/gsd-review/SKILL.md", + "skills/gsd-secure-phase/SKILL.md", + "skills/gsd-settings/SKILL.md", + "skills/gsd-ship/SKILL.md", + "skills/gsd-sketch/SKILL.md", + "skills/gsd-spec-phase/SKILL.md", + "skills/gsd-spike/SKILL.md", + "skills/gsd-stats/SKILL.md", + "skills/gsd-surface/SKILL.md", + "skills/gsd-thread/SKILL.md", + "skills/gsd-ui-phase/SKILL.md", + "skills/gsd-ui-review/SKILL.md", + "skills/gsd-ultraplan-phase/SKILL.md", + "skills/gsd-undo/SKILL.md", + "skills/gsd-update/SKILL.md", + "skills/gsd-validate-phase/SKILL.md", + "skills/gsd-verify-work/SKILL.md", + "skills/gsd-workspace/SKILL.md", + "skills/gsd-workstreams/SKILL.md" +] diff --git a/tests/fixtures/install-tree/kimi.json b/tests/fixtures/install-tree/kimi.json new file mode 100644 index 000000000..03d9428da --- /dev/null +++ b/tests/fixtures/install-tree/kimi.json @@ -0,0 +1,462 @@ +[ + ".gsd-profile", + ".gsd/defaults.json", + ".kimi/hooks/gsd-check-update-worker.js", + ".kimi/hooks/gsd-check-update.js", + ".kimi/hooks/gsd-config-reload.js", + ".kimi/hooks/gsd-context-monitor.js", + ".kimi/hooks/gsd-cursor-post-tool.js", + ".kimi/hooks/gsd-cursor-pre-tool.js", + ".kimi/hooks/gsd-cursor-session-start.js", + ".kimi/hooks/gsd-cursor-stop.js", + ".kimi/hooks/gsd-cursor-subagent-start.js", + ".kimi/hooks/gsd-cursor-subagent-stop.js", + ".kimi/hooks/gsd-ensure-canonical-path.js", + ".kimi/hooks/gsd-graphify-update.sh", + ".kimi/hooks/gsd-phase-boundary.sh", + ".kimi/hooks/gsd-prompt-guard.js", + ".kimi/hooks/gsd-read-guard.js", + ".kimi/hooks/gsd-read-injection-scanner.js", + ".kimi/hooks/gsd-session-state.sh", + ".kimi/hooks/gsd-statusline.js", + ".kimi/hooks/gsd-update-banner.js", + ".kimi/hooks/gsd-validate-commit.sh", + ".kimi/hooks/gsd-windsurf-pre-command.js", + ".kimi/hooks/gsd-windsurf-pre-write.js", + ".kimi/hooks/gsd-workflow-guard.js", + ".kimi/hooks/gsd-worktree-path-guard.js", + ".kimi/hooks/lib/git-cmd.js", + ".kimi/hooks/lib/gsd-graphify-rebuild.sh", + ".kimi/hooks/managed-hooks-registry.cjs", + ".kimi/package.json", + "agents/gsd.md", + "agents/gsd.yaml", + "agents/subagents/gsd-advisor-researcher.md", + "agents/subagents/gsd-advisor-researcher.yaml", + "agents/subagents/gsd-ai-researcher.md", + "agents/subagents/gsd-ai-researcher.yaml", + "agents/subagents/gsd-assumptions-analyzer.md", + "agents/subagents/gsd-assumptions-analyzer.yaml", + "agents/subagents/gsd-code-fixer.md", + "agents/subagents/gsd-code-fixer.yaml", + "agents/subagents/gsd-code-reviewer.md", + "agents/subagents/gsd-code-reviewer.yaml", + "agents/subagents/gsd-codebase-mapper.md", + "agents/subagents/gsd-codebase-mapper.yaml", + "agents/subagents/gsd-debug-session-manager.md", + "agents/subagents/gsd-debug-session-manager.yaml", + "agents/subagents/gsd-debugger.md", + "agents/subagents/gsd-debugger.yaml", + "agents/subagents/gsd-doc-classifier.md", + "agents/subagents/gsd-doc-classifier.yaml", + "agents/subagents/gsd-doc-synthesizer.md", + "agents/subagents/gsd-doc-synthesizer.yaml", + "agents/subagents/gsd-doc-verifier.md", + "agents/subagents/gsd-doc-verifier.yaml", + "agents/subagents/gsd-doc-writer.md", + "agents/subagents/gsd-doc-writer.yaml", + "agents/subagents/gsd-domain-researcher.md", + "agents/subagents/gsd-domain-researcher.yaml", + "agents/subagents/gsd-eval-auditor.md", + "agents/subagents/gsd-eval-auditor.yaml", + "agents/subagents/gsd-eval-planner.md", + "agents/subagents/gsd-eval-planner.yaml", + "agents/subagents/gsd-executor.md", + "agents/subagents/gsd-executor.yaml", + "agents/subagents/gsd-framework-selector.md", + "agents/subagents/gsd-framework-selector.yaml", + "agents/subagents/gsd-integration-checker.md", + "agents/subagents/gsd-integration-checker.yaml", + "agents/subagents/gsd-intel-updater.md", + "agents/subagents/gsd-intel-updater.yaml", + "agents/subagents/gsd-mempalace-curator.md", + "agents/subagents/gsd-mempalace-curator.yaml", + "agents/subagents/gsd-nyquist-auditor.md", + "agents/subagents/gsd-nyquist-auditor.yaml", + "agents/subagents/gsd-pattern-mapper.md", + "agents/subagents/gsd-pattern-mapper.yaml", + "agents/subagents/gsd-phase-researcher.md", + "agents/subagents/gsd-phase-researcher.yaml", + "agents/subagents/gsd-plan-checker.md", + "agents/subagents/gsd-plan-checker.yaml", + "agents/subagents/gsd-planner.md", + "agents/subagents/gsd-planner.yaml", + "agents/subagents/gsd-project-researcher.md", + "agents/subagents/gsd-project-researcher.yaml", + "agents/subagents/gsd-research-synthesizer.md", + "agents/subagents/gsd-research-synthesizer.yaml", + "agents/subagents/gsd-roadmapper.md", + "agents/subagents/gsd-roadmapper.yaml", + "agents/subagents/gsd-security-auditor.md", + "agents/subagents/gsd-security-auditor.yaml", + "agents/subagents/gsd-ui-auditor.md", + "agents/subagents/gsd-ui-auditor.yaml", + "agents/subagents/gsd-ui-checker.md", + "agents/subagents/gsd-ui-checker.yaml", + "agents/subagents/gsd-ui-researcher.md", + "agents/subagents/gsd-ui-researcher.yaml", + "agents/subagents/gsd-user-profiler.md", + "agents/subagents/gsd-user-profiler.yaml", + "agents/subagents/gsd-verifier.md", + "agents/subagents/gsd-verifier.yaml", + "gsd-core/VERSION", + "gsd-core/bin/check-latest-version.cjs", + "gsd-core/bin/ensure-runtime-build.cjs", + "gsd-core/bin/gsd-tools.cjs", + "gsd-core/bin/gsd_run", + "gsd-core/bin/shared/config-defaults.manifest.json", + "gsd-core/bin/shared/config-schema.manifest.json", + "gsd-core/bin/shared/model-catalog.json", + "gsd-core/bin/shared/runtime-aliases.manifest.json", + "gsd-core/bin/verify-reapply-patches.cjs", + "gsd-core/contexts/dev.md", + "gsd-core/contexts/research.md", + "gsd-core/contexts/review.md", + "gsd-core/references/agent-contracts.md", + "gsd-core/references/agent-skills-bootstrap.md", + "gsd-core/references/ai-evals.md", + "gsd-core/references/ai-frameworks.md", + "gsd-core/references/api-coverage.md", + "gsd-core/references/artifact-types.md", + "gsd-core/references/autonomous-smart-discuss.md", + "gsd-core/references/checkpoints.md", + "gsd-core/references/common-bug-patterns.md", + "gsd-core/references/context-budget.md", + "gsd-core/references/continuation-format.md", + "gsd-core/references/debugger-philosophy.md", + "gsd-core/references/decimal-phase-calculation.md", + "gsd-core/references/doc-conflict-engine.md", + "gsd-core/references/domain-probes.md", + "gsd-core/references/edge-probe-fixtures/01-round-half-even/expected-coverage.json", + "gsd-core/references/edge-probe-fixtures/01-round-half-even/requirements.json", + "gsd-core/references/edge-probe-fixtures/02-merge-intervals/expected-coverage.json", + "gsd-core/references/edge-probe-fixtures/02-merge-intervals/requirements.json", + "gsd-core/references/edge-probe-fixtures/03-truncate-graphemes/expected-coverage.json", + "gsd-core/references/edge-probe-fixtures/03-truncate-graphemes/requirements.json", + "gsd-core/references/edge-probe-fixtures/04-money-rounding/expected-coverage.json", + "gsd-core/references/edge-probe-fixtures/04-money-rounding/requirements.json", + "gsd-core/references/edge-probe-fixtures/05-list-dedupe/expected-coverage.json", + "gsd-core/references/edge-probe-fixtures/05-list-dedupe/requirements.json", + "gsd-core/references/edge-probe-fixtures/06-resolved-mixed/expected-coverage.json", + "gsd-core/references/edge-probe-fixtures/06-resolved-mixed/requirements.json", + "gsd-core/references/edge-probe-fixtures/06-resolved-mixed/resolutions.json", + "gsd-core/references/edge-probe.md", + "gsd-core/references/execute-mvp-tdd.md", + "gsd-core/references/execute-phase-between-wave-reset.md", + "gsd-core/references/execute-phase-context-guard.md", + "gsd-core/references/execute-phase-wave-guard.md", + "gsd-core/references/executor-examples.md", + "gsd-core/references/few-shot-examples/plan-checker.md", + "gsd-core/references/few-shot-examples/verifier.md", + "gsd-core/references/gate-prompts.md", + "gsd-core/references/gates.md", + "gsd-core/references/git-integration.md", + "gsd-core/references/git-planning-commit.md", + "gsd-core/references/gsd-run-resolver.md", + "gsd-core/references/honest-verifier.md", + "gsd-core/references/ios-scaffold.md", + "gsd-core/references/loop-hook-dispatch.md", + "gsd-core/references/mandatory-initial-read.md", + "gsd-core/references/model-profile-resolution.md", + "gsd-core/references/model-profiles.md", + "gsd-core/references/mvp-concepts.md", + "gsd-core/references/phase-argument-parsing.md", + "gsd-core/references/planner-antipatterns.md", + "gsd-core/references/planner-chunked.md", + "gsd-core/references/planner-gap-closure.md", + "gsd-core/references/planner-graphify-auto-update.md", + "gsd-core/references/planner-guidance.md", + "gsd-core/references/planner-human-verify-mode.md", + "gsd-core/references/planner-interface-context.md", + "gsd-core/references/planner-load-graph-context.md", + "gsd-core/references/planner-mvp-mode.md", + "gsd-core/references/planner-reviews.md", + "gsd-core/references/planner-revision.md", + "gsd-core/references/planner-source-audit.md", + "gsd-core/references/planning-config.md", + "gsd-core/references/prohibition-probe-fixtures/01-streak-reminder/expected.json", + "gsd-core/references/prohibition-probe-fixtures/02-clean-utility/expected.json", + "gsd-core/references/prohibition-probe-fixtures/03-multi-prohibition/expected.json", + "gsd-core/references/prohibition-probe.md", + "gsd-core/references/project-skills-discovery.md", + "gsd-core/references/questioning.md", + "gsd-core/references/research-documentation-lookup.md", + "gsd-core/references/research-philosophy.md", + "gsd-core/references/research-verification-protocol.md", + "gsd-core/references/reviewer-instances.md", + "gsd-core/references/revision-loop.md", + "gsd-core/references/scout-codebase.md", + "gsd-core/references/security-asvs-levels.md", + "gsd-core/references/skeleton-template.md", + "gsd-core/references/sketch-interactivity.md", + "gsd-core/references/sketch-theme-system.md", + "gsd-core/references/sketch-tooling.md", + "gsd-core/references/sketch-variant-patterns.md", + "gsd-core/references/specless-probe-fallback.md", + "gsd-core/references/spidr-splitting.md", + "gsd-core/references/tdd.md", + "gsd-core/references/thinking-models-debug.md", + "gsd-core/references/thinking-models-execution.md", + "gsd-core/references/thinking-models-planning.md", + "gsd-core/references/thinking-models-research.md", + "gsd-core/references/thinking-models-verification.md", + "gsd-core/references/thinking-partner.md", + "gsd-core/references/ui-brand.md", + "gsd-core/references/ui-consideration-probe.md", + "gsd-core/references/universal-anti-patterns.md", + "gsd-core/references/untrusted-input-boundary.md", + "gsd-core/references/user-profiling.md", + "gsd-core/references/user-story-template.md", + "gsd-core/references/verification-overrides.md", + "gsd-core/references/verification-patterns.md", + "gsd-core/references/verify-mvp-mode.md", + "gsd-core/references/workstream-flag.md", + "gsd-core/references/worktree-branch-check.md", + "gsd-core/references/worktree-path-safety.md", + "gsd-core/templates/AI-SPEC.md", + "gsd-core/templates/DEBUG.md", + "gsd-core/templates/README.md", + "gsd-core/templates/SECURITY.md", + "gsd-core/templates/UAT.md", + "gsd-core/templates/UI-SPEC.md", + "gsd-core/templates/VALIDATION.md", + "gsd-core/templates/claude-md.md", + "gsd-core/templates/codebase/architecture.md", + "gsd-core/templates/codebase/concerns.md", + "gsd-core/templates/codebase/conventions.md", + "gsd-core/templates/codebase/integrations.md", + "gsd-core/templates/codebase/stack.md", + "gsd-core/templates/codebase/structure.md", + "gsd-core/templates/codebase/testing.md", + "gsd-core/templates/config.json", + "gsd-core/templates/context.md", + "gsd-core/templates/continue-here.md", + "gsd-core/templates/copilot-instructions.md", + "gsd-core/templates/debug-subagent-prompt.md", + "gsd-core/templates/dev-preferences.md", + "gsd-core/templates/discovery.md", + "gsd-core/templates/discussion-log.md", + "gsd-core/templates/milestone-archive.md", + "gsd-core/templates/milestone.md", + "gsd-core/templates/phase-prompt.md", + "gsd-core/templates/planner-subagent-prompt.md", + "gsd-core/templates/project.md", + "gsd-core/templates/requirements.md", + "gsd-core/templates/research-project/ARCHITECTURE.md", + "gsd-core/templates/research-project/FEATURES.md", + "gsd-core/templates/research-project/PITFALLS.md", + "gsd-core/templates/research-project/STACK.md", + "gsd-core/templates/research-project/SUMMARY.md", + "gsd-core/templates/research.md", + "gsd-core/templates/retrospective.md", + "gsd-core/templates/roadmap.md", + "gsd-core/templates/spec.md", + "gsd-core/templates/state.md", + "gsd-core/templates/summary-complex.md", + "gsd-core/templates/summary-minimal.md", + "gsd-core/templates/summary-standard.md", + "gsd-core/templates/summary.md", + "gsd-core/templates/user-profile.md", + "gsd-core/templates/user-setup.md", + "gsd-core/templates/verification-report.md", + "gsd-core/workflows/_runtime-launcher.snippet.sh", + "gsd-core/workflows/add-backlog.md", + "gsd-core/workflows/add-phase.md", + "gsd-core/workflows/add-tests.md", + "gsd-core/workflows/add-todo.md", + "gsd-core/workflows/ai-integration-phase.md", + "gsd-core/workflows/analyze-dependencies.md", + "gsd-core/workflows/audit-fix.md", + "gsd-core/workflows/audit-milestone.md", + "gsd-core/workflows/audit-uat.md", + "gsd-core/workflows/autonomous.md", + "gsd-core/workflows/check-todos.md", + "gsd-core/workflows/cleanup.md", + "gsd-core/workflows/code-review-fix.md", + "gsd-core/workflows/code-review.md", + "gsd-core/workflows/complete-milestone.md", + "gsd-core/workflows/debug.md", + "gsd-core/workflows/diagnose-issues.md", + "gsd-core/workflows/discovery-phase.md", + "gsd-core/workflows/discuss-phase-assumptions.md", + "gsd-core/workflows/discuss-phase-power.md", + "gsd-core/workflows/discuss-phase.md", + "gsd-core/workflows/discuss-phase/modes/advisor.md", + "gsd-core/workflows/discuss-phase/modes/all.md", + "gsd-core/workflows/discuss-phase/modes/analyze.md", + "gsd-core/workflows/discuss-phase/modes/auto.md", + "gsd-core/workflows/discuss-phase/modes/batch.md", + "gsd-core/workflows/discuss-phase/modes/chain.md", + "gsd-core/workflows/discuss-phase/modes/default.md", + "gsd-core/workflows/discuss-phase/modes/power.md", + "gsd-core/workflows/discuss-phase/modes/text.md", + "gsd-core/workflows/discuss-phase/templates/checkpoint.json", + "gsd-core/workflows/discuss-phase/templates/context.md", + "gsd-core/workflows/discuss-phase/templates/discussion-log.md", + "gsd-core/workflows/do.md", + "gsd-core/workflows/docs-update.md", + "gsd-core/workflows/edit-phase.md", + "gsd-core/workflows/eval-review.md", + "gsd-core/workflows/execute-phase.md", + "gsd-core/workflows/execute-phase/steps/codebase-drift-gate.md", + "gsd-core/workflows/execute-phase/steps/per-plan-worktree-gate.md", + "gsd-core/workflows/execute-phase/steps/post-merge-gate.md", + "gsd-core/workflows/execute-phase/steps/regression-gate.md", + "gsd-core/workflows/execute-phase/steps/worktree-recovery-policy.md", + "gsd-core/workflows/execute-plan.md", + "gsd-core/workflows/explore.md", + "gsd-core/workflows/extract-learnings.md", + "gsd-core/workflows/fast.md", + "gsd-core/workflows/forensics.md", + "gsd-core/workflows/graduation.md", + "gsd-core/workflows/health.md", + "gsd-core/workflows/help.md", + "gsd-core/workflows/help/modes/brief.md", + "gsd-core/workflows/help/modes/default.md", + "gsd-core/workflows/help/modes/full.md", + "gsd-core/workflows/help/modes/topic.md", + "gsd-core/workflows/import.md", + "gsd-core/workflows/inbox.md", + "gsd-core/workflows/ingest-docs.md", + "gsd-core/workflows/insert-phase.md", + "gsd-core/workflows/list-phase-assumptions.md", + "gsd-core/workflows/list-seeds.md", + "gsd-core/workflows/list-workspaces.md", + "gsd-core/workflows/manager.md", + "gsd-core/workflows/map-codebase.md", + "gsd-core/workflows/milestone-summary.md", + "gsd-core/workflows/mvp-phase.md", + "gsd-core/workflows/new-milestone.md", + "gsd-core/workflows/new-project.md", + "gsd-core/workflows/new-workspace.md", + "gsd-core/workflows/next.md", + "gsd-core/workflows/node-repair.md", + "gsd-core/workflows/note.md", + "gsd-core/workflows/onboard.md", + "gsd-core/workflows/pause-work.md", + "gsd-core/workflows/plan-milestone-gaps.md", + "gsd-core/workflows/plan-phase.md", + "gsd-core/workflows/plan-phase/steps/closed-phase-gate.md", + "gsd-core/workflows/plan-phase/steps/prd-express-path.md", + "gsd-core/workflows/plan-phase/steps/windows-troubleshooting.md", + "gsd-core/workflows/plan-review-convergence.md", + "gsd-core/workflows/plant-seed.md", + "gsd-core/workflows/pr-branch.md", + "gsd-core/workflows/profile-user.md", + "gsd-core/workflows/progress.md", + "gsd-core/workflows/quick.md", + "gsd-core/workflows/reapply-patches.md", + "gsd-core/workflows/remove-phase.md", + "gsd-core/workflows/remove-workspace.md", + "gsd-core/workflows/resume-project.md", + "gsd-core/workflows/review.md", + "gsd-core/workflows/scan.md", + "gsd-core/workflows/secure-phase.md", + "gsd-core/workflows/session-report.md", + "gsd-core/workflows/settings-advanced.md", + "gsd-core/workflows/settings-integrations.md", + "gsd-core/workflows/settings.md", + "gsd-core/workflows/ship.md", + "gsd-core/workflows/sketch-wrap-up.md", + "gsd-core/workflows/sketch.md", + "gsd-core/workflows/smart-entry.md", + "gsd-core/workflows/spec-phase.md", + "gsd-core/workflows/spike-wrap-up.md", + "gsd-core/workflows/spike.md", + "gsd-core/workflows/stats.md", + "gsd-core/workflows/sync-skills.md", + "gsd-core/workflows/thread.md", + "gsd-core/workflows/transition.md", + "gsd-core/workflows/ui-phase.md", + "gsd-core/workflows/ui-review.md", + "gsd-core/workflows/ultraplan-phase.md", + "gsd-core/workflows/undo.md", + "gsd-core/workflows/update.md", + "gsd-core/workflows/validate-phase.md", + "gsd-core/workflows/verify-phase.md", + "gsd-core/workflows/verify-work.md", + "scripts/changeset/README.md", + "scripts/changeset/cli.cjs", + "scripts/changeset/github-release-notes.cjs", + "scripts/changeset/lint.cjs", + "scripts/changeset/new.cjs", + "scripts/changeset/parse.cjs", + "scripts/changeset/render.cjs", + "scripts/changeset/serialize.cjs", + "scripts/fix-slash-commands.cjs", + "scripts/gen-capability-registry.cjs", + "scripts/gen-loop-host-contract.cjs", + "scripts/lib/allowlist-ratchet.cjs", + "scripts/lib/cli-exit.cjs", + "skills/gsd-add-tests/SKILL.md", + "skills/gsd-ai-integration-phase/SKILL.md", + "skills/gsd-audit-fix/SKILL.md", + "skills/gsd-audit-milestone/SKILL.md", + "skills/gsd-audit-uat/SKILL.md", + "skills/gsd-autonomous/SKILL.md", + "skills/gsd-capture/SKILL.md", + "skills/gsd-cleanup/SKILL.md", + "skills/gsd-code-review/SKILL.md", + "skills/gsd-complete-milestone/SKILL.md", + "skills/gsd-config/SKILL.md", + "skills/gsd-debug/SKILL.md", + "skills/gsd-discuss-phase/SKILL.md", + "skills/gsd-docs-update/SKILL.md", + "skills/gsd-eval-review/SKILL.md", + "skills/gsd-execute-phase/SKILL.md", + "skills/gsd-explore/SKILL.md", + "skills/gsd-extract-learnings/SKILL.md", + "skills/gsd-fast/SKILL.md", + "skills/gsd-forensics/SKILL.md", + "skills/gsd-graphify/SKILL.md", + "skills/gsd-health/SKILL.md", + "skills/gsd-help/SKILL.md", + "skills/gsd-import/SKILL.md", + "skills/gsd-inbox/SKILL.md", + "skills/gsd-ingest-docs/SKILL.md", + "skills/gsd-manager/SKILL.md", + "skills/gsd-map-codebase/SKILL.md", + "skills/gsd-mempalace-capture/SKILL.md", + "skills/gsd-mempalace-recall/SKILL.md", + "skills/gsd-milestone-summary/SKILL.md", + "skills/gsd-mvp-phase/SKILL.md", + "skills/gsd-new-milestone/SKILL.md", + "skills/gsd-new-project/SKILL.md", + "skills/gsd-next/SKILL.md", + "skills/gsd-ns-context/SKILL.md", + "skills/gsd-ns-ideate/SKILL.md", + "skills/gsd-ns-manage/SKILL.md", + "skills/gsd-ns-project/SKILL.md", + "skills/gsd-ns-review/SKILL.md", + "skills/gsd-ns-workflow/SKILL.md", + "skills/gsd-onboard/SKILL.md", + "skills/gsd-pause-work/SKILL.md", + "skills/gsd-phase/SKILL.md", + "skills/gsd-plan-phase/SKILL.md", + "skills/gsd-plan-review-convergence/SKILL.md", + "skills/gsd-pr-branch/SKILL.md", + "skills/gsd-profile-user/SKILL.md", + "skills/gsd-progress/SKILL.md", + "skills/gsd-quick/SKILL.md", + "skills/gsd-resume-work/SKILL.md", + "skills/gsd-review-backlog/SKILL.md", + "skills/gsd-review/SKILL.md", + "skills/gsd-secure-phase/SKILL.md", + "skills/gsd-settings/SKILL.md", + "skills/gsd-ship/SKILL.md", + "skills/gsd-sketch/SKILL.md", + "skills/gsd-spec-phase/SKILL.md", + "skills/gsd-spike/SKILL.md", + "skills/gsd-stats/SKILL.md", + "skills/gsd-surface/SKILL.md", + "skills/gsd-thread/SKILL.md", + "skills/gsd-ui-phase/SKILL.md", + "skills/gsd-ui-review/SKILL.md", + "skills/gsd-ultraplan-phase/SKILL.md", + "skills/gsd-undo/SKILL.md", + "skills/gsd-update/SKILL.md", + "skills/gsd-validate-phase/SKILL.md", + "skills/gsd-verify-work/SKILL.md", + "skills/gsd-workspace/SKILL.md", + "skills/gsd-workstreams/SKILL.md" +] diff --git a/tests/fixtures/install-tree/opencode.json b/tests/fixtures/install-tree/opencode.json new file mode 100644 index 000000000..0ac467bf3 --- /dev/null +++ b/tests/fixtures/install-tree/opencode.json @@ -0,0 +1,499 @@ +[ + ".gsd-profile", + ".gsd/defaults.json", + "agents/gsd-advisor-researcher.md", + "agents/gsd-ai-researcher.md", + "agents/gsd-assumptions-analyzer.md", + "agents/gsd-code-fixer.md", + "agents/gsd-code-reviewer.md", + "agents/gsd-codebase-mapper.md", + "agents/gsd-debug-session-manager.md", + "agents/gsd-debugger.md", + "agents/gsd-doc-classifier.md", + "agents/gsd-doc-synthesizer.md", + "agents/gsd-doc-verifier.md", + "agents/gsd-doc-writer.md", + "agents/gsd-domain-researcher.md", + "agents/gsd-eval-auditor.md", + "agents/gsd-eval-planner.md", + "agents/gsd-executor.md", + "agents/gsd-framework-selector.md", + "agents/gsd-integration-checker.md", + "agents/gsd-intel-updater.md", + "agents/gsd-mempalace-curator.md", + "agents/gsd-nyquist-auditor.md", + "agents/gsd-pattern-mapper.md", + "agents/gsd-phase-researcher.md", + "agents/gsd-plan-checker.md", + "agents/gsd-planner.md", + "agents/gsd-project-researcher.md", + "agents/gsd-research-synthesizer.md", + "agents/gsd-roadmapper.md", + "agents/gsd-security-auditor.md", + "agents/gsd-ui-auditor.md", + "agents/gsd-ui-checker.md", + "agents/gsd-ui-researcher.md", + "agents/gsd-user-profiler.md", + "agents/gsd-verifier.md", + "command/gsd-add-tests.md", + "command/gsd-ai-integration-phase.md", + "command/gsd-audit-fix.md", + "command/gsd-audit-milestone.md", + "command/gsd-audit-uat.md", + "command/gsd-autonomous.md", + "command/gsd-capture.md", + "command/gsd-cleanup.md", + "command/gsd-code-review.md", + "command/gsd-complete-milestone.md", + "command/gsd-config.md", + "command/gsd-debug.md", + "command/gsd-discuss-phase.md", + "command/gsd-docs-update.md", + "command/gsd-eval-review.md", + "command/gsd-execute-phase.md", + "command/gsd-explore.md", + "command/gsd-extract-learnings.md", + "command/gsd-fast.md", + "command/gsd-forensics.md", + "command/gsd-graphify.md", + "command/gsd-health.md", + "command/gsd-help.md", + "command/gsd-import.md", + "command/gsd-inbox.md", + "command/gsd-ingest-docs.md", + "command/gsd-manager.md", + "command/gsd-map-codebase.md", + "command/gsd-mempalace-capture.md", + "command/gsd-mempalace-recall.md", + "command/gsd-milestone-summary.md", + "command/gsd-mvp-phase.md", + "command/gsd-new-milestone.md", + "command/gsd-new-project.md", + "command/gsd-next.md", + "command/gsd-ns-context.md", + "command/gsd-ns-ideate.md", + "command/gsd-ns-manage.md", + "command/gsd-ns-project.md", + "command/gsd-ns-review.md", + "command/gsd-ns-workflow.md", + "command/gsd-onboard.md", + "command/gsd-pause-work.md", + "command/gsd-phase.md", + "command/gsd-plan-phase.md", + "command/gsd-plan-review-convergence.md", + "command/gsd-pr-branch.md", + "command/gsd-profile-user.md", + "command/gsd-progress.md", + "command/gsd-quick.md", + "command/gsd-resume-work.md", + "command/gsd-review-backlog.md", + "command/gsd-review.md", + "command/gsd-secure-phase.md", + "command/gsd-settings.md", + "command/gsd-ship.md", + "command/gsd-sketch.md", + "command/gsd-spec-phase.md", + "command/gsd-spike.md", + "command/gsd-stats.md", + "command/gsd-surface.md", + "command/gsd-thread.md", + "command/gsd-ui-phase.md", + "command/gsd-ui-review.md", + "command/gsd-ultraplan-phase.md", + "command/gsd-undo.md", + "command/gsd-update.md", + "command/gsd-validate-phase.md", + "command/gsd-verify-work.md", + "command/gsd-workspace.md", + "command/gsd-workstreams.md", + "gsd-core/VERSION", + "gsd-core/bin/check-latest-version.cjs", + "gsd-core/bin/ensure-runtime-build.cjs", + "gsd-core/bin/gsd-tools.cjs", + "gsd-core/bin/gsd_run", + "gsd-core/bin/shared/config-defaults.manifest.json", + "gsd-core/bin/shared/config-schema.manifest.json", + "gsd-core/bin/shared/model-catalog.json", + "gsd-core/bin/shared/runtime-aliases.manifest.json", + "gsd-core/bin/verify-reapply-patches.cjs", + "gsd-core/contexts/dev.md", + "gsd-core/contexts/research.md", + "gsd-core/contexts/review.md", + "gsd-core/references/agent-contracts.md", + "gsd-core/references/agent-skills-bootstrap.md", + "gsd-core/references/ai-evals.md", + "gsd-core/references/ai-frameworks.md", + "gsd-core/references/api-coverage.md", + "gsd-core/references/artifact-types.md", + "gsd-core/references/autonomous-smart-discuss.md", + "gsd-core/references/checkpoints.md", + "gsd-core/references/common-bug-patterns.md", + "gsd-core/references/context-budget.md", + "gsd-core/references/continuation-format.md", + "gsd-core/references/debugger-philosophy.md", + "gsd-core/references/decimal-phase-calculation.md", + "gsd-core/references/doc-conflict-engine.md", + "gsd-core/references/domain-probes.md", + "gsd-core/references/edge-probe-fixtures/01-round-half-even/expected-coverage.json", + "gsd-core/references/edge-probe-fixtures/01-round-half-even/requirements.json", + "gsd-core/references/edge-probe-fixtures/02-merge-intervals/expected-coverage.json", + "gsd-core/references/edge-probe-fixtures/02-merge-intervals/requirements.json", + "gsd-core/references/edge-probe-fixtures/03-truncate-graphemes/expected-coverage.json", + "gsd-core/references/edge-probe-fixtures/03-truncate-graphemes/requirements.json", + "gsd-core/references/edge-probe-fixtures/04-money-rounding/expected-coverage.json", + "gsd-core/references/edge-probe-fixtures/04-money-rounding/requirements.json", + "gsd-core/references/edge-probe-fixtures/05-list-dedupe/expected-coverage.json", + "gsd-core/references/edge-probe-fixtures/05-list-dedupe/requirements.json", + "gsd-core/references/edge-probe-fixtures/06-resolved-mixed/expected-coverage.json", + "gsd-core/references/edge-probe-fixtures/06-resolved-mixed/requirements.json", + "gsd-core/references/edge-probe-fixtures/06-resolved-mixed/resolutions.json", + "gsd-core/references/edge-probe.md", + "gsd-core/references/execute-mvp-tdd.md", + "gsd-core/references/execute-phase-between-wave-reset.md", + "gsd-core/references/execute-phase-context-guard.md", + "gsd-core/references/execute-phase-wave-guard.md", + "gsd-core/references/executor-examples.md", + "gsd-core/references/few-shot-examples/plan-checker.md", + "gsd-core/references/few-shot-examples/verifier.md", + "gsd-core/references/gate-prompts.md", + "gsd-core/references/gates.md", + "gsd-core/references/git-integration.md", + "gsd-core/references/git-planning-commit.md", + "gsd-core/references/gsd-run-resolver.md", + "gsd-core/references/honest-verifier.md", + "gsd-core/references/ios-scaffold.md", + "gsd-core/references/loop-hook-dispatch.md", + "gsd-core/references/mandatory-initial-read.md", + "gsd-core/references/model-profile-resolution.md", + "gsd-core/references/model-profiles.md", + "gsd-core/references/mvp-concepts.md", + "gsd-core/references/phase-argument-parsing.md", + "gsd-core/references/planner-antipatterns.md", + "gsd-core/references/planner-chunked.md", + "gsd-core/references/planner-gap-closure.md", + "gsd-core/references/planner-graphify-auto-update.md", + "gsd-core/references/planner-guidance.md", + "gsd-core/references/planner-human-verify-mode.md", + "gsd-core/references/planner-interface-context.md", + "gsd-core/references/planner-load-graph-context.md", + "gsd-core/references/planner-mvp-mode.md", + "gsd-core/references/planner-reviews.md", + "gsd-core/references/planner-revision.md", + "gsd-core/references/planner-source-audit.md", + "gsd-core/references/planning-config.md", + "gsd-core/references/prohibition-probe-fixtures/01-streak-reminder/expected.json", + "gsd-core/references/prohibition-probe-fixtures/02-clean-utility/expected.json", + "gsd-core/references/prohibition-probe-fixtures/03-multi-prohibition/expected.json", + "gsd-core/references/prohibition-probe.md", + "gsd-core/references/project-skills-discovery.md", + "gsd-core/references/questioning.md", + "gsd-core/references/research-documentation-lookup.md", + "gsd-core/references/research-philosophy.md", + "gsd-core/references/research-verification-protocol.md", + "gsd-core/references/reviewer-instances.md", + "gsd-core/references/revision-loop.md", + "gsd-core/references/scout-codebase.md", + "gsd-core/references/security-asvs-levels.md", + "gsd-core/references/skeleton-template.md", + "gsd-core/references/sketch-interactivity.md", + "gsd-core/references/sketch-theme-system.md", + "gsd-core/references/sketch-tooling.md", + "gsd-core/references/sketch-variant-patterns.md", + "gsd-core/references/specless-probe-fallback.md", + "gsd-core/references/spidr-splitting.md", + "gsd-core/references/tdd.md", + "gsd-core/references/thinking-models-debug.md", + "gsd-core/references/thinking-models-execution.md", + "gsd-core/references/thinking-models-planning.md", + "gsd-core/references/thinking-models-research.md", + "gsd-core/references/thinking-models-verification.md", + "gsd-core/references/thinking-partner.md", + "gsd-core/references/ui-brand.md", + "gsd-core/references/ui-consideration-probe.md", + "gsd-core/references/universal-anti-patterns.md", + "gsd-core/references/untrusted-input-boundary.md", + "gsd-core/references/user-profiling.md", + "gsd-core/references/user-story-template.md", + "gsd-core/references/verification-overrides.md", + "gsd-core/references/verification-patterns.md", + "gsd-core/references/verify-mvp-mode.md", + "gsd-core/references/workstream-flag.md", + "gsd-core/references/worktree-branch-check.md", + "gsd-core/references/worktree-path-safety.md", + "gsd-core/templates/AI-SPEC.md", + "gsd-core/templates/DEBUG.md", + "gsd-core/templates/README.md", + "gsd-core/templates/SECURITY.md", + "gsd-core/templates/UAT.md", + "gsd-core/templates/UI-SPEC.md", + "gsd-core/templates/VALIDATION.md", + "gsd-core/templates/claude-md.md", + "gsd-core/templates/codebase/architecture.md", + "gsd-core/templates/codebase/concerns.md", + "gsd-core/templates/codebase/conventions.md", + "gsd-core/templates/codebase/integrations.md", + "gsd-core/templates/codebase/stack.md", + "gsd-core/templates/codebase/structure.md", + "gsd-core/templates/codebase/testing.md", + "gsd-core/templates/config.json", + "gsd-core/templates/context.md", + "gsd-core/templates/continue-here.md", + "gsd-core/templates/copilot-instructions.md", + "gsd-core/templates/debug-subagent-prompt.md", + "gsd-core/templates/dev-preferences.md", + "gsd-core/templates/discovery.md", + "gsd-core/templates/discussion-log.md", + "gsd-core/templates/milestone-archive.md", + "gsd-core/templates/milestone.md", + "gsd-core/templates/phase-prompt.md", + "gsd-core/templates/planner-subagent-prompt.md", + "gsd-core/templates/project.md", + "gsd-core/templates/requirements.md", + "gsd-core/templates/research-project/ARCHITECTURE.md", + "gsd-core/templates/research-project/FEATURES.md", + "gsd-core/templates/research-project/PITFALLS.md", + "gsd-core/templates/research-project/STACK.md", + "gsd-core/templates/research-project/SUMMARY.md", + "gsd-core/templates/research.md", + "gsd-core/templates/retrospective.md", + "gsd-core/templates/roadmap.md", + "gsd-core/templates/spec.md", + "gsd-core/templates/state.md", + "gsd-core/templates/summary-complex.md", + "gsd-core/templates/summary-minimal.md", + "gsd-core/templates/summary-standard.md", + "gsd-core/templates/summary.md", + "gsd-core/templates/user-profile.md", + "gsd-core/templates/user-setup.md", + "gsd-core/templates/verification-report.md", + "gsd-core/workflows/_runtime-launcher.snippet.sh", + "gsd-core/workflows/add-backlog.md", + "gsd-core/workflows/add-phase.md", + "gsd-core/workflows/add-tests.md", + "gsd-core/workflows/add-todo.md", + "gsd-core/workflows/ai-integration-phase.md", + "gsd-core/workflows/analyze-dependencies.md", + "gsd-core/workflows/audit-fix.md", + "gsd-core/workflows/audit-milestone.md", + "gsd-core/workflows/audit-uat.md", + "gsd-core/workflows/autonomous.md", + "gsd-core/workflows/check-todos.md", + "gsd-core/workflows/cleanup.md", + "gsd-core/workflows/code-review-fix.md", + "gsd-core/workflows/code-review.md", + "gsd-core/workflows/complete-milestone.md", + "gsd-core/workflows/debug.md", + "gsd-core/workflows/diagnose-issues.md", + "gsd-core/workflows/discovery-phase.md", + "gsd-core/workflows/discuss-phase-assumptions.md", + "gsd-core/workflows/discuss-phase-power.md", + "gsd-core/workflows/discuss-phase.md", + "gsd-core/workflows/discuss-phase/modes/advisor.md", + "gsd-core/workflows/discuss-phase/modes/all.md", + "gsd-core/workflows/discuss-phase/modes/analyze.md", + "gsd-core/workflows/discuss-phase/modes/auto.md", + "gsd-core/workflows/discuss-phase/modes/batch.md", + "gsd-core/workflows/discuss-phase/modes/chain.md", + "gsd-core/workflows/discuss-phase/modes/default.md", + "gsd-core/workflows/discuss-phase/modes/power.md", + "gsd-core/workflows/discuss-phase/modes/text.md", + "gsd-core/workflows/discuss-phase/templates/checkpoint.json", + "gsd-core/workflows/discuss-phase/templates/context.md", + "gsd-core/workflows/discuss-phase/templates/discussion-log.md", + "gsd-core/workflows/do.md", + "gsd-core/workflows/docs-update.md", + "gsd-core/workflows/edit-phase.md", + "gsd-core/workflows/eval-review.md", + "gsd-core/workflows/execute-phase.md", + "gsd-core/workflows/execute-phase/steps/codebase-drift-gate.md", + "gsd-core/workflows/execute-phase/steps/per-plan-worktree-gate.md", + "gsd-core/workflows/execute-phase/steps/post-merge-gate.md", + "gsd-core/workflows/execute-phase/steps/regression-gate.md", + "gsd-core/workflows/execute-phase/steps/worktree-recovery-policy.md", + "gsd-core/workflows/execute-plan.md", + "gsd-core/workflows/explore.md", + "gsd-core/workflows/extract-learnings.md", + "gsd-core/workflows/fast.md", + "gsd-core/workflows/forensics.md", + "gsd-core/workflows/graduation.md", + "gsd-core/workflows/health.md", + "gsd-core/workflows/help.md", + "gsd-core/workflows/help/modes/brief.md", + "gsd-core/workflows/help/modes/default.md", + "gsd-core/workflows/help/modes/full.md", + "gsd-core/workflows/help/modes/topic.md", + "gsd-core/workflows/import.md", + "gsd-core/workflows/inbox.md", + "gsd-core/workflows/ingest-docs.md", + "gsd-core/workflows/insert-phase.md", + "gsd-core/workflows/list-phase-assumptions.md", + "gsd-core/workflows/list-seeds.md", + "gsd-core/workflows/list-workspaces.md", + "gsd-core/workflows/manager.md", + "gsd-core/workflows/map-codebase.md", + "gsd-core/workflows/milestone-summary.md", + "gsd-core/workflows/mvp-phase.md", + "gsd-core/workflows/new-milestone.md", + "gsd-core/workflows/new-project.md", + "gsd-core/workflows/new-workspace.md", + "gsd-core/workflows/next.md", + "gsd-core/workflows/node-repair.md", + "gsd-core/workflows/note.md", + "gsd-core/workflows/onboard.md", + "gsd-core/workflows/pause-work.md", + "gsd-core/workflows/plan-milestone-gaps.md", + "gsd-core/workflows/plan-phase.md", + "gsd-core/workflows/plan-phase/steps/closed-phase-gate.md", + "gsd-core/workflows/plan-phase/steps/prd-express-path.md", + "gsd-core/workflows/plan-phase/steps/windows-troubleshooting.md", + "gsd-core/workflows/plan-review-convergence.md", + "gsd-core/workflows/plant-seed.md", + "gsd-core/workflows/pr-branch.md", + "gsd-core/workflows/profile-user.md", + "gsd-core/workflows/progress.md", + "gsd-core/workflows/quick.md", + "gsd-core/workflows/reapply-patches.md", + "gsd-core/workflows/remove-phase.md", + "gsd-core/workflows/remove-workspace.md", + "gsd-core/workflows/resume-project.md", + "gsd-core/workflows/review.md", + "gsd-core/workflows/scan.md", + "gsd-core/workflows/secure-phase.md", + "gsd-core/workflows/session-report.md", + "gsd-core/workflows/settings-advanced.md", + "gsd-core/workflows/settings-integrations.md", + "gsd-core/workflows/settings.md", + "gsd-core/workflows/ship.md", + "gsd-core/workflows/sketch-wrap-up.md", + "gsd-core/workflows/sketch.md", + "gsd-core/workflows/smart-entry.md", + "gsd-core/workflows/spec-phase.md", + "gsd-core/workflows/spike-wrap-up.md", + "gsd-core/workflows/spike.md", + "gsd-core/workflows/stats.md", + "gsd-core/workflows/sync-skills.md", + "gsd-core/workflows/thread.md", + "gsd-core/workflows/transition.md", + "gsd-core/workflows/ui-phase.md", + "gsd-core/workflows/ui-review.md", + "gsd-core/workflows/ultraplan-phase.md", + "gsd-core/workflows/undo.md", + "gsd-core/workflows/update.md", + "gsd-core/workflows/validate-phase.md", + "gsd-core/workflows/verify-phase.md", + "gsd-core/workflows/verify-work.md", + "hooks/gsd-check-update-worker.js", + "hooks/gsd-check-update.js", + "hooks/gsd-config-reload.js", + "hooks/gsd-context-monitor.js", + "hooks/gsd-cursor-post-tool.js", + "hooks/gsd-cursor-pre-tool.js", + "hooks/gsd-cursor-session-start.js", + "hooks/gsd-cursor-stop.js", + "hooks/gsd-cursor-subagent-start.js", + "hooks/gsd-cursor-subagent-stop.js", + "hooks/gsd-ensure-canonical-path.js", + "hooks/gsd-graphify-update.sh", + "hooks/gsd-phase-boundary.sh", + "hooks/gsd-prompt-guard.js", + "hooks/gsd-read-guard.js", + "hooks/gsd-read-injection-scanner.js", + "hooks/gsd-session-state.sh", + "hooks/gsd-statusline.js", + "hooks/gsd-update-banner.js", + "hooks/gsd-validate-commit.sh", + "hooks/gsd-windsurf-pre-command.js", + "hooks/gsd-windsurf-pre-write.js", + "hooks/gsd-workflow-guard.js", + "hooks/gsd-worktree-path-guard.js", + "hooks/lib/git-cmd.js", + "hooks/lib/gsd-graphify-rebuild.sh", + "hooks/managed-hooks-registry.cjs", + "opencode.json", + "package.json", + "plugins/gsd-core.js", + "scripts/changeset/README.md", + "scripts/changeset/cli.cjs", + "scripts/changeset/github-release-notes.cjs", + "scripts/changeset/lint.cjs", + "scripts/changeset/new.cjs", + "scripts/changeset/parse.cjs", + "scripts/changeset/render.cjs", + "scripts/changeset/serialize.cjs", + "scripts/fix-slash-commands.cjs", + "scripts/gen-capability-registry.cjs", + "scripts/gen-loop-host-contract.cjs", + "scripts/lib/allowlist-ratchet.cjs", + "scripts/lib/cli-exit.cjs", + "skills/gsd-add-tests/SKILL.md", + "skills/gsd-ai-integration-phase/SKILL.md", + "skills/gsd-audit-fix/SKILL.md", + "skills/gsd-audit-milestone/SKILL.md", + "skills/gsd-audit-uat/SKILL.md", + "skills/gsd-autonomous/SKILL.md", + "skills/gsd-capture/SKILL.md", + "skills/gsd-cleanup/SKILL.md", + "skills/gsd-code-review/SKILL.md", + "skills/gsd-complete-milestone/SKILL.md", + "skills/gsd-config/SKILL.md", + "skills/gsd-debug/SKILL.md", + "skills/gsd-discuss-phase/SKILL.md", + "skills/gsd-docs-update/SKILL.md", + "skills/gsd-eval-review/SKILL.md", + "skills/gsd-execute-phase/SKILL.md", + "skills/gsd-explore/SKILL.md", + "skills/gsd-extract-learnings/SKILL.md", + "skills/gsd-fast/SKILL.md", + "skills/gsd-forensics/SKILL.md", + "skills/gsd-graphify/SKILL.md", + "skills/gsd-health/SKILL.md", + "skills/gsd-help/SKILL.md", + "skills/gsd-import/SKILL.md", + "skills/gsd-inbox/SKILL.md", + "skills/gsd-ingest-docs/SKILL.md", + "skills/gsd-manager/SKILL.md", + "skills/gsd-map-codebase/SKILL.md", + "skills/gsd-mempalace-capture/SKILL.md", + "skills/gsd-mempalace-recall/SKILL.md", + "skills/gsd-milestone-summary/SKILL.md", + "skills/gsd-mvp-phase/SKILL.md", + "skills/gsd-new-milestone/SKILL.md", + "skills/gsd-new-project/SKILL.md", + "skills/gsd-next/SKILL.md", + "skills/gsd-ns-context/SKILL.md", + "skills/gsd-ns-ideate/SKILL.md", + "skills/gsd-ns-manage/SKILL.md", + "skills/gsd-ns-project/SKILL.md", + "skills/gsd-ns-review/SKILL.md", + "skills/gsd-ns-workflow/SKILL.md", + "skills/gsd-onboard/SKILL.md", + "skills/gsd-pause-work/SKILL.md", + "skills/gsd-phase/SKILL.md", + "skills/gsd-plan-phase/SKILL.md", + "skills/gsd-plan-review-convergence/SKILL.md", + "skills/gsd-pr-branch/SKILL.md", + "skills/gsd-profile-user/SKILL.md", + "skills/gsd-progress/SKILL.md", + "skills/gsd-quick/SKILL.md", + "skills/gsd-resume-work/SKILL.md", + "skills/gsd-review-backlog/SKILL.md", + "skills/gsd-review/SKILL.md", + "skills/gsd-secure-phase/SKILL.md", + "skills/gsd-settings/SKILL.md", + "skills/gsd-ship/SKILL.md", + "skills/gsd-sketch/SKILL.md", + "skills/gsd-spec-phase/SKILL.md", + "skills/gsd-spike/SKILL.md", + "skills/gsd-stats/SKILL.md", + "skills/gsd-surface/SKILL.md", + "skills/gsd-thread/SKILL.md", + "skills/gsd-ui-phase/SKILL.md", + "skills/gsd-ui-review/SKILL.md", + "skills/gsd-ultraplan-phase/SKILL.md", + "skills/gsd-undo/SKILL.md", + "skills/gsd-update/SKILL.md", + "skills/gsd-validate-phase/SKILL.md", + "skills/gsd-verify-work/SKILL.md", + "skills/gsd-workspace/SKILL.md", + "skills/gsd-workstreams/SKILL.md" +] diff --git a/tests/fixtures/install-tree/pi.json b/tests/fixtures/install-tree/pi.json new file mode 100644 index 000000000..31f35703b --- /dev/null +++ b/tests/fixtures/install-tree/pi.json @@ -0,0 +1,322 @@ +[ + ".gsd-profile", + ".gsd/defaults.json", + "extensions/gsd.cjs", + "gsd-core/VERSION", + "gsd-core/bin/check-latest-version.cjs", + "gsd-core/bin/ensure-runtime-build.cjs", + "gsd-core/bin/gsd-tools.cjs", + "gsd-core/bin/gsd_run", + "gsd-core/bin/shared/config-defaults.manifest.json", + "gsd-core/bin/shared/config-schema.manifest.json", + "gsd-core/bin/shared/model-catalog.json", + "gsd-core/bin/shared/runtime-aliases.manifest.json", + "gsd-core/bin/verify-reapply-patches.cjs", + "gsd-core/contexts/dev.md", + "gsd-core/contexts/research.md", + "gsd-core/contexts/review.md", + "gsd-core/references/agent-contracts.md", + "gsd-core/references/agent-skills-bootstrap.md", + "gsd-core/references/ai-evals.md", + "gsd-core/references/ai-frameworks.md", + "gsd-core/references/api-coverage.md", + "gsd-core/references/artifact-types.md", + "gsd-core/references/autonomous-smart-discuss.md", + "gsd-core/references/checkpoints.md", + "gsd-core/references/common-bug-patterns.md", + "gsd-core/references/context-budget.md", + "gsd-core/references/continuation-format.md", + "gsd-core/references/debugger-philosophy.md", + "gsd-core/references/decimal-phase-calculation.md", + "gsd-core/references/doc-conflict-engine.md", + "gsd-core/references/domain-probes.md", + "gsd-core/references/edge-probe-fixtures/01-round-half-even/expected-coverage.json", + "gsd-core/references/edge-probe-fixtures/01-round-half-even/requirements.json", + "gsd-core/references/edge-probe-fixtures/02-merge-intervals/expected-coverage.json", + "gsd-core/references/edge-probe-fixtures/02-merge-intervals/requirements.json", + "gsd-core/references/edge-probe-fixtures/03-truncate-graphemes/expected-coverage.json", + "gsd-core/references/edge-probe-fixtures/03-truncate-graphemes/requirements.json", + "gsd-core/references/edge-probe-fixtures/04-money-rounding/expected-coverage.json", + "gsd-core/references/edge-probe-fixtures/04-money-rounding/requirements.json", + "gsd-core/references/edge-probe-fixtures/05-list-dedupe/expected-coverage.json", + "gsd-core/references/edge-probe-fixtures/05-list-dedupe/requirements.json", + "gsd-core/references/edge-probe-fixtures/06-resolved-mixed/expected-coverage.json", + "gsd-core/references/edge-probe-fixtures/06-resolved-mixed/requirements.json", + "gsd-core/references/edge-probe-fixtures/06-resolved-mixed/resolutions.json", + "gsd-core/references/edge-probe.md", + "gsd-core/references/execute-mvp-tdd.md", + "gsd-core/references/execute-phase-between-wave-reset.md", + "gsd-core/references/execute-phase-context-guard.md", + "gsd-core/references/execute-phase-wave-guard.md", + "gsd-core/references/executor-examples.md", + "gsd-core/references/few-shot-examples/plan-checker.md", + "gsd-core/references/few-shot-examples/verifier.md", + "gsd-core/references/gate-prompts.md", + "gsd-core/references/gates.md", + "gsd-core/references/git-integration.md", + "gsd-core/references/git-planning-commit.md", + "gsd-core/references/gsd-run-resolver.md", + "gsd-core/references/honest-verifier.md", + "gsd-core/references/ios-scaffold.md", + "gsd-core/references/loop-hook-dispatch.md", + "gsd-core/references/mandatory-initial-read.md", + "gsd-core/references/model-profile-resolution.md", + "gsd-core/references/model-profiles.md", + "gsd-core/references/mvp-concepts.md", + "gsd-core/references/phase-argument-parsing.md", + "gsd-core/references/planner-antipatterns.md", + "gsd-core/references/planner-chunked.md", + "gsd-core/references/planner-gap-closure.md", + "gsd-core/references/planner-graphify-auto-update.md", + "gsd-core/references/planner-guidance.md", + "gsd-core/references/planner-human-verify-mode.md", + "gsd-core/references/planner-interface-context.md", + "gsd-core/references/planner-load-graph-context.md", + "gsd-core/references/planner-mvp-mode.md", + "gsd-core/references/planner-reviews.md", + "gsd-core/references/planner-revision.md", + "gsd-core/references/planner-source-audit.md", + "gsd-core/references/planning-config.md", + "gsd-core/references/prohibition-probe-fixtures/01-streak-reminder/expected.json", + "gsd-core/references/prohibition-probe-fixtures/02-clean-utility/expected.json", + "gsd-core/references/prohibition-probe-fixtures/03-multi-prohibition/expected.json", + "gsd-core/references/prohibition-probe.md", + "gsd-core/references/project-skills-discovery.md", + "gsd-core/references/questioning.md", + "gsd-core/references/research-documentation-lookup.md", + "gsd-core/references/research-philosophy.md", + "gsd-core/references/research-verification-protocol.md", + "gsd-core/references/reviewer-instances.md", + "gsd-core/references/revision-loop.md", + "gsd-core/references/scout-codebase.md", + "gsd-core/references/security-asvs-levels.md", + "gsd-core/references/skeleton-template.md", + "gsd-core/references/sketch-interactivity.md", + "gsd-core/references/sketch-theme-system.md", + "gsd-core/references/sketch-tooling.md", + "gsd-core/references/sketch-variant-patterns.md", + "gsd-core/references/specless-probe-fallback.md", + "gsd-core/references/spidr-splitting.md", + "gsd-core/references/tdd.md", + "gsd-core/references/thinking-models-debug.md", + "gsd-core/references/thinking-models-execution.md", + "gsd-core/references/thinking-models-planning.md", + "gsd-core/references/thinking-models-research.md", + "gsd-core/references/thinking-models-verification.md", + "gsd-core/references/thinking-partner.md", + "gsd-core/references/ui-brand.md", + "gsd-core/references/ui-consideration-probe.md", + "gsd-core/references/universal-anti-patterns.md", + "gsd-core/references/untrusted-input-boundary.md", + "gsd-core/references/user-profiling.md", + "gsd-core/references/user-story-template.md", + "gsd-core/references/verification-overrides.md", + "gsd-core/references/verification-patterns.md", + "gsd-core/references/verify-mvp-mode.md", + "gsd-core/references/workstream-flag.md", + "gsd-core/references/worktree-branch-check.md", + "gsd-core/references/worktree-path-safety.md", + "gsd-core/templates/AI-SPEC.md", + "gsd-core/templates/DEBUG.md", + "gsd-core/templates/README.md", + "gsd-core/templates/SECURITY.md", + "gsd-core/templates/UAT.md", + "gsd-core/templates/UI-SPEC.md", + "gsd-core/templates/VALIDATION.md", + "gsd-core/templates/claude-md.md", + "gsd-core/templates/codebase/architecture.md", + "gsd-core/templates/codebase/concerns.md", + "gsd-core/templates/codebase/conventions.md", + "gsd-core/templates/codebase/integrations.md", + "gsd-core/templates/codebase/stack.md", + "gsd-core/templates/codebase/structure.md", + "gsd-core/templates/codebase/testing.md", + "gsd-core/templates/config.json", + "gsd-core/templates/context.md", + "gsd-core/templates/continue-here.md", + "gsd-core/templates/copilot-instructions.md", + "gsd-core/templates/debug-subagent-prompt.md", + "gsd-core/templates/dev-preferences.md", + "gsd-core/templates/discovery.md", + "gsd-core/templates/discussion-log.md", + "gsd-core/templates/milestone-archive.md", + "gsd-core/templates/milestone.md", + "gsd-core/templates/phase-prompt.md", + "gsd-core/templates/planner-subagent-prompt.md", + "gsd-core/templates/project.md", + "gsd-core/templates/requirements.md", + "gsd-core/templates/research-project/ARCHITECTURE.md", + "gsd-core/templates/research-project/FEATURES.md", + "gsd-core/templates/research-project/PITFALLS.md", + "gsd-core/templates/research-project/STACK.md", + "gsd-core/templates/research-project/SUMMARY.md", + "gsd-core/templates/research.md", + "gsd-core/templates/retrospective.md", + "gsd-core/templates/roadmap.md", + "gsd-core/templates/spec.md", + "gsd-core/templates/state.md", + "gsd-core/templates/summary-complex.md", + "gsd-core/templates/summary-minimal.md", + "gsd-core/templates/summary-standard.md", + "gsd-core/templates/summary.md", + "gsd-core/templates/user-profile.md", + "gsd-core/templates/user-setup.md", + "gsd-core/templates/verification-report.md", + "gsd-core/workflows/_runtime-launcher.snippet.sh", + "gsd-core/workflows/add-backlog.md", + "gsd-core/workflows/add-phase.md", + "gsd-core/workflows/add-tests.md", + "gsd-core/workflows/add-todo.md", + "gsd-core/workflows/ai-integration-phase.md", + "gsd-core/workflows/analyze-dependencies.md", + "gsd-core/workflows/audit-fix.md", + "gsd-core/workflows/audit-milestone.md", + "gsd-core/workflows/audit-uat.md", + "gsd-core/workflows/autonomous.md", + "gsd-core/workflows/check-todos.md", + "gsd-core/workflows/cleanup.md", + "gsd-core/workflows/code-review-fix.md", + "gsd-core/workflows/code-review.md", + "gsd-core/workflows/complete-milestone.md", + "gsd-core/workflows/debug.md", + "gsd-core/workflows/diagnose-issues.md", + "gsd-core/workflows/discovery-phase.md", + "gsd-core/workflows/discuss-phase-assumptions.md", + "gsd-core/workflows/discuss-phase-power.md", + "gsd-core/workflows/discuss-phase.md", + "gsd-core/workflows/discuss-phase/modes/advisor.md", + "gsd-core/workflows/discuss-phase/modes/all.md", + "gsd-core/workflows/discuss-phase/modes/analyze.md", + "gsd-core/workflows/discuss-phase/modes/auto.md", + "gsd-core/workflows/discuss-phase/modes/batch.md", + "gsd-core/workflows/discuss-phase/modes/chain.md", + "gsd-core/workflows/discuss-phase/modes/default.md", + "gsd-core/workflows/discuss-phase/modes/power.md", + "gsd-core/workflows/discuss-phase/modes/text.md", + "gsd-core/workflows/discuss-phase/templates/checkpoint.json", + "gsd-core/workflows/discuss-phase/templates/context.md", + "gsd-core/workflows/discuss-phase/templates/discussion-log.md", + "gsd-core/workflows/do.md", + "gsd-core/workflows/docs-update.md", + "gsd-core/workflows/edit-phase.md", + "gsd-core/workflows/eval-review.md", + "gsd-core/workflows/execute-phase.md", + "gsd-core/workflows/execute-phase/steps/codebase-drift-gate.md", + "gsd-core/workflows/execute-phase/steps/per-plan-worktree-gate.md", + "gsd-core/workflows/execute-phase/steps/post-merge-gate.md", + "gsd-core/workflows/execute-phase/steps/regression-gate.md", + "gsd-core/workflows/execute-phase/steps/worktree-recovery-policy.md", + "gsd-core/workflows/execute-plan.md", + "gsd-core/workflows/explore.md", + "gsd-core/workflows/extract-learnings.md", + "gsd-core/workflows/fast.md", + "gsd-core/workflows/forensics.md", + "gsd-core/workflows/graduation.md", + "gsd-core/workflows/health.md", + "gsd-core/workflows/help.md", + "gsd-core/workflows/help/modes/brief.md", + "gsd-core/workflows/help/modes/default.md", + "gsd-core/workflows/help/modes/full.md", + "gsd-core/workflows/help/modes/topic.md", + "gsd-core/workflows/import.md", + "gsd-core/workflows/inbox.md", + "gsd-core/workflows/ingest-docs.md", + "gsd-core/workflows/insert-phase.md", + "gsd-core/workflows/list-phase-assumptions.md", + "gsd-core/workflows/list-seeds.md", + "gsd-core/workflows/list-workspaces.md", + "gsd-core/workflows/manager.md", + "gsd-core/workflows/map-codebase.md", + "gsd-core/workflows/milestone-summary.md", + "gsd-core/workflows/mvp-phase.md", + "gsd-core/workflows/new-milestone.md", + "gsd-core/workflows/new-project.md", + "gsd-core/workflows/new-workspace.md", + "gsd-core/workflows/next.md", + "gsd-core/workflows/node-repair.md", + "gsd-core/workflows/note.md", + "gsd-core/workflows/onboard.md", + "gsd-core/workflows/pause-work.md", + "gsd-core/workflows/plan-milestone-gaps.md", + "gsd-core/workflows/plan-phase.md", + "gsd-core/workflows/plan-phase/steps/closed-phase-gate.md", + "gsd-core/workflows/plan-phase/steps/prd-express-path.md", + "gsd-core/workflows/plan-phase/steps/windows-troubleshooting.md", + "gsd-core/workflows/plan-review-convergence.md", + "gsd-core/workflows/plant-seed.md", + "gsd-core/workflows/pr-branch.md", + "gsd-core/workflows/profile-user.md", + "gsd-core/workflows/progress.md", + "gsd-core/workflows/quick.md", + "gsd-core/workflows/reapply-patches.md", + "gsd-core/workflows/remove-phase.md", + "gsd-core/workflows/remove-workspace.md", + "gsd-core/workflows/resume-project.md", + "gsd-core/workflows/review.md", + "gsd-core/workflows/scan.md", + "gsd-core/workflows/secure-phase.md", + "gsd-core/workflows/session-report.md", + "gsd-core/workflows/settings-advanced.md", + "gsd-core/workflows/settings-integrations.md", + "gsd-core/workflows/settings.md", + "gsd-core/workflows/ship.md", + "gsd-core/workflows/sketch-wrap-up.md", + "gsd-core/workflows/sketch.md", + "gsd-core/workflows/smart-entry.md", + "gsd-core/workflows/spec-phase.md", + "gsd-core/workflows/spike-wrap-up.md", + "gsd-core/workflows/spike.md", + "gsd-core/workflows/stats.md", + "gsd-core/workflows/sync-skills.md", + "gsd-core/workflows/thread.md", + "gsd-core/workflows/transition.md", + "gsd-core/workflows/ui-phase.md", + "gsd-core/workflows/ui-review.md", + "gsd-core/workflows/ultraplan-phase.md", + "gsd-core/workflows/undo.md", + "gsd-core/workflows/update.md", + "gsd-core/workflows/validate-phase.md", + "gsd-core/workflows/verify-phase.md", + "gsd-core/workflows/verify-work.md", + "hooks/gsd-check-update-worker.js", + "hooks/gsd-check-update.js", + "hooks/gsd-config-reload.js", + "hooks/gsd-context-monitor.js", + "hooks/gsd-cursor-post-tool.js", + "hooks/gsd-cursor-pre-tool.js", + "hooks/gsd-cursor-session-start.js", + "hooks/gsd-cursor-stop.js", + "hooks/gsd-cursor-subagent-start.js", + "hooks/gsd-cursor-subagent-stop.js", + "hooks/gsd-ensure-canonical-path.js", + "hooks/gsd-graphify-update.sh", + "hooks/gsd-phase-boundary.sh", + "hooks/gsd-prompt-guard.js", + "hooks/gsd-read-guard.js", + "hooks/gsd-read-injection-scanner.js", + "hooks/gsd-session-state.sh", + "hooks/gsd-statusline.js", + "hooks/gsd-update-banner.js", + "hooks/gsd-validate-commit.sh", + "hooks/gsd-windsurf-pre-command.js", + "hooks/gsd-windsurf-pre-write.js", + "hooks/gsd-workflow-guard.js", + "hooks/gsd-worktree-path-guard.js", + "hooks/lib/git-cmd.js", + "hooks/lib/gsd-graphify-rebuild.sh", + "hooks/managed-hooks-registry.cjs", + "package.json", + "scripts/changeset/README.md", + "scripts/changeset/cli.cjs", + "scripts/changeset/github-release-notes.cjs", + "scripts/changeset/lint.cjs", + "scripts/changeset/new.cjs", + "scripts/changeset/parse.cjs", + "scripts/changeset/render.cjs", + "scripts/changeset/serialize.cjs", + "scripts/fix-slash-commands.cjs", + "scripts/gen-capability-registry.cjs", + "scripts/gen-loop-host-contract.cjs", + "scripts/lib/allowlist-ratchet.cjs", + "scripts/lib/cli-exit.cjs" +] diff --git a/tests/fixtures/install-tree/qwen.json b/tests/fixtures/install-tree/qwen.json new file mode 100644 index 000000000..d1d1e8dc9 --- /dev/null +++ b/tests/fixtures/install-tree/qwen.json @@ -0,0 +1,427 @@ +[ + ".gsd-profile", + ".gsd/defaults.json", + "agents/gsd-advisor-researcher.md", + "agents/gsd-ai-researcher.md", + "agents/gsd-assumptions-analyzer.md", + "agents/gsd-code-fixer.md", + "agents/gsd-code-reviewer.md", + "agents/gsd-codebase-mapper.md", + "agents/gsd-debug-session-manager.md", + "agents/gsd-debugger.md", + "agents/gsd-doc-classifier.md", + "agents/gsd-doc-synthesizer.md", + "agents/gsd-doc-verifier.md", + "agents/gsd-doc-writer.md", + "agents/gsd-domain-researcher.md", + "agents/gsd-eval-auditor.md", + "agents/gsd-eval-planner.md", + "agents/gsd-executor.md", + "agents/gsd-framework-selector.md", + "agents/gsd-integration-checker.md", + "agents/gsd-intel-updater.md", + "agents/gsd-mempalace-curator.md", + "agents/gsd-nyquist-auditor.md", + "agents/gsd-pattern-mapper.md", + "agents/gsd-phase-researcher.md", + "agents/gsd-plan-checker.md", + "agents/gsd-planner.md", + "agents/gsd-project-researcher.md", + "agents/gsd-research-synthesizer.md", + "agents/gsd-roadmapper.md", + "agents/gsd-security-auditor.md", + "agents/gsd-ui-auditor.md", + "agents/gsd-ui-checker.md", + "agents/gsd-ui-researcher.md", + "agents/gsd-user-profiler.md", + "agents/gsd-verifier.md", + "gsd-core/VERSION", + "gsd-core/bin/check-latest-version.cjs", + "gsd-core/bin/ensure-runtime-build.cjs", + "gsd-core/bin/gsd-tools.cjs", + "gsd-core/bin/gsd_run", + "gsd-core/bin/shared/config-defaults.manifest.json", + "gsd-core/bin/shared/config-schema.manifest.json", + "gsd-core/bin/shared/model-catalog.json", + "gsd-core/bin/shared/runtime-aliases.manifest.json", + "gsd-core/bin/verify-reapply-patches.cjs", + "gsd-core/contexts/dev.md", + "gsd-core/contexts/research.md", + "gsd-core/contexts/review.md", + "gsd-core/references/agent-contracts.md", + "gsd-core/references/agent-skills-bootstrap.md", + "gsd-core/references/ai-evals.md", + "gsd-core/references/ai-frameworks.md", + "gsd-core/references/api-coverage.md", + "gsd-core/references/artifact-types.md", + "gsd-core/references/autonomous-smart-discuss.md", + "gsd-core/references/checkpoints.md", + "gsd-core/references/common-bug-patterns.md", + "gsd-core/references/context-budget.md", + "gsd-core/references/continuation-format.md", + "gsd-core/references/debugger-philosophy.md", + "gsd-core/references/decimal-phase-calculation.md", + "gsd-core/references/doc-conflict-engine.md", + "gsd-core/references/domain-probes.md", + "gsd-core/references/edge-probe-fixtures/01-round-half-even/expected-coverage.json", + "gsd-core/references/edge-probe-fixtures/01-round-half-even/requirements.json", + "gsd-core/references/edge-probe-fixtures/02-merge-intervals/expected-coverage.json", + "gsd-core/references/edge-probe-fixtures/02-merge-intervals/requirements.json", + "gsd-core/references/edge-probe-fixtures/03-truncate-graphemes/expected-coverage.json", + "gsd-core/references/edge-probe-fixtures/03-truncate-graphemes/requirements.json", + "gsd-core/references/edge-probe-fixtures/04-money-rounding/expected-coverage.json", + "gsd-core/references/edge-probe-fixtures/04-money-rounding/requirements.json", + "gsd-core/references/edge-probe-fixtures/05-list-dedupe/expected-coverage.json", + "gsd-core/references/edge-probe-fixtures/05-list-dedupe/requirements.json", + "gsd-core/references/edge-probe-fixtures/06-resolved-mixed/expected-coverage.json", + "gsd-core/references/edge-probe-fixtures/06-resolved-mixed/requirements.json", + "gsd-core/references/edge-probe-fixtures/06-resolved-mixed/resolutions.json", + "gsd-core/references/edge-probe.md", + "gsd-core/references/execute-mvp-tdd.md", + "gsd-core/references/execute-phase-between-wave-reset.md", + "gsd-core/references/execute-phase-context-guard.md", + "gsd-core/references/execute-phase-wave-guard.md", + "gsd-core/references/executor-examples.md", + "gsd-core/references/few-shot-examples/plan-checker.md", + "gsd-core/references/few-shot-examples/verifier.md", + "gsd-core/references/gate-prompts.md", + "gsd-core/references/gates.md", + "gsd-core/references/git-integration.md", + "gsd-core/references/git-planning-commit.md", + "gsd-core/references/gsd-run-resolver.md", + "gsd-core/references/honest-verifier.md", + "gsd-core/references/ios-scaffold.md", + "gsd-core/references/loop-hook-dispatch.md", + "gsd-core/references/mandatory-initial-read.md", + "gsd-core/references/model-profile-resolution.md", + "gsd-core/references/model-profiles.md", + "gsd-core/references/mvp-concepts.md", + "gsd-core/references/phase-argument-parsing.md", + "gsd-core/references/planner-antipatterns.md", + "gsd-core/references/planner-chunked.md", + "gsd-core/references/planner-gap-closure.md", + "gsd-core/references/planner-graphify-auto-update.md", + "gsd-core/references/planner-guidance.md", + "gsd-core/references/planner-human-verify-mode.md", + "gsd-core/references/planner-interface-context.md", + "gsd-core/references/planner-load-graph-context.md", + "gsd-core/references/planner-mvp-mode.md", + "gsd-core/references/planner-reviews.md", + "gsd-core/references/planner-revision.md", + "gsd-core/references/planner-source-audit.md", + "gsd-core/references/planning-config.md", + "gsd-core/references/prohibition-probe-fixtures/01-streak-reminder/expected.json", + "gsd-core/references/prohibition-probe-fixtures/02-clean-utility/expected.json", + "gsd-core/references/prohibition-probe-fixtures/03-multi-prohibition/expected.json", + "gsd-core/references/prohibition-probe.md", + "gsd-core/references/project-skills-discovery.md", + "gsd-core/references/questioning.md", + "gsd-core/references/research-documentation-lookup.md", + "gsd-core/references/research-philosophy.md", + "gsd-core/references/research-verification-protocol.md", + "gsd-core/references/reviewer-instances.md", + "gsd-core/references/revision-loop.md", + "gsd-core/references/scout-codebase.md", + "gsd-core/references/security-asvs-levels.md", + "gsd-core/references/skeleton-template.md", + "gsd-core/references/sketch-interactivity.md", + "gsd-core/references/sketch-theme-system.md", + "gsd-core/references/sketch-tooling.md", + "gsd-core/references/sketch-variant-patterns.md", + "gsd-core/references/specless-probe-fallback.md", + "gsd-core/references/spidr-splitting.md", + "gsd-core/references/tdd.md", + "gsd-core/references/thinking-models-debug.md", + "gsd-core/references/thinking-models-execution.md", + "gsd-core/references/thinking-models-planning.md", + "gsd-core/references/thinking-models-research.md", + "gsd-core/references/thinking-models-verification.md", + "gsd-core/references/thinking-partner.md", + "gsd-core/references/ui-brand.md", + "gsd-core/references/ui-consideration-probe.md", + "gsd-core/references/universal-anti-patterns.md", + "gsd-core/references/untrusted-input-boundary.md", + "gsd-core/references/user-profiling.md", + "gsd-core/references/user-story-template.md", + "gsd-core/references/verification-overrides.md", + "gsd-core/references/verification-patterns.md", + "gsd-core/references/verify-mvp-mode.md", + "gsd-core/references/workstream-flag.md", + "gsd-core/references/worktree-branch-check.md", + "gsd-core/references/worktree-path-safety.md", + "gsd-core/templates/AI-SPEC.md", + "gsd-core/templates/DEBUG.md", + "gsd-core/templates/README.md", + "gsd-core/templates/SECURITY.md", + "gsd-core/templates/UAT.md", + "gsd-core/templates/UI-SPEC.md", + "gsd-core/templates/VALIDATION.md", + "gsd-core/templates/claude-md.md", + "gsd-core/templates/codebase/architecture.md", + "gsd-core/templates/codebase/concerns.md", + "gsd-core/templates/codebase/conventions.md", + "gsd-core/templates/codebase/integrations.md", + "gsd-core/templates/codebase/stack.md", + "gsd-core/templates/codebase/structure.md", + "gsd-core/templates/codebase/testing.md", + "gsd-core/templates/config.json", + "gsd-core/templates/context.md", + "gsd-core/templates/continue-here.md", + "gsd-core/templates/copilot-instructions.md", + "gsd-core/templates/debug-subagent-prompt.md", + "gsd-core/templates/dev-preferences.md", + "gsd-core/templates/discovery.md", + "gsd-core/templates/discussion-log.md", + "gsd-core/templates/milestone-archive.md", + "gsd-core/templates/milestone.md", + "gsd-core/templates/phase-prompt.md", + "gsd-core/templates/planner-subagent-prompt.md", + "gsd-core/templates/project.md", + "gsd-core/templates/requirements.md", + "gsd-core/templates/research-project/ARCHITECTURE.md", + "gsd-core/templates/research-project/FEATURES.md", + "gsd-core/templates/research-project/PITFALLS.md", + "gsd-core/templates/research-project/STACK.md", + "gsd-core/templates/research-project/SUMMARY.md", + "gsd-core/templates/research.md", + "gsd-core/templates/retrospective.md", + "gsd-core/templates/roadmap.md", + "gsd-core/templates/spec.md", + "gsd-core/templates/state.md", + "gsd-core/templates/summary-complex.md", + "gsd-core/templates/summary-minimal.md", + "gsd-core/templates/summary-standard.md", + "gsd-core/templates/summary.md", + "gsd-core/templates/user-profile.md", + "gsd-core/templates/user-setup.md", + "gsd-core/templates/verification-report.md", + "gsd-core/workflows/_runtime-launcher.snippet.sh", + "gsd-core/workflows/add-backlog.md", + "gsd-core/workflows/add-phase.md", + "gsd-core/workflows/add-tests.md", + "gsd-core/workflows/add-todo.md", + "gsd-core/workflows/ai-integration-phase.md", + "gsd-core/workflows/analyze-dependencies.md", + "gsd-core/workflows/audit-fix.md", + "gsd-core/workflows/audit-milestone.md", + "gsd-core/workflows/audit-uat.md", + "gsd-core/workflows/autonomous.md", + "gsd-core/workflows/check-todos.md", + "gsd-core/workflows/cleanup.md", + "gsd-core/workflows/code-review-fix.md", + "gsd-core/workflows/code-review.md", + "gsd-core/workflows/complete-milestone.md", + "gsd-core/workflows/debug.md", + "gsd-core/workflows/diagnose-issues.md", + "gsd-core/workflows/discovery-phase.md", + "gsd-core/workflows/discuss-phase-assumptions.md", + "gsd-core/workflows/discuss-phase-power.md", + "gsd-core/workflows/discuss-phase.md", + "gsd-core/workflows/discuss-phase/modes/advisor.md", + "gsd-core/workflows/discuss-phase/modes/all.md", + "gsd-core/workflows/discuss-phase/modes/analyze.md", + "gsd-core/workflows/discuss-phase/modes/auto.md", + "gsd-core/workflows/discuss-phase/modes/batch.md", + "gsd-core/workflows/discuss-phase/modes/chain.md", + "gsd-core/workflows/discuss-phase/modes/default.md", + "gsd-core/workflows/discuss-phase/modes/power.md", + "gsd-core/workflows/discuss-phase/modes/text.md", + "gsd-core/workflows/discuss-phase/templates/checkpoint.json", + "gsd-core/workflows/discuss-phase/templates/context.md", + "gsd-core/workflows/discuss-phase/templates/discussion-log.md", + "gsd-core/workflows/do.md", + "gsd-core/workflows/docs-update.md", + "gsd-core/workflows/edit-phase.md", + "gsd-core/workflows/eval-review.md", + "gsd-core/workflows/execute-phase.md", + "gsd-core/workflows/execute-phase/steps/codebase-drift-gate.md", + "gsd-core/workflows/execute-phase/steps/per-plan-worktree-gate.md", + "gsd-core/workflows/execute-phase/steps/post-merge-gate.md", + "gsd-core/workflows/execute-phase/steps/regression-gate.md", + "gsd-core/workflows/execute-phase/steps/worktree-recovery-policy.md", + "gsd-core/workflows/execute-plan.md", + "gsd-core/workflows/explore.md", + "gsd-core/workflows/extract-learnings.md", + "gsd-core/workflows/fast.md", + "gsd-core/workflows/forensics.md", + "gsd-core/workflows/graduation.md", + "gsd-core/workflows/health.md", + "gsd-core/workflows/help.md", + "gsd-core/workflows/help/modes/brief.md", + "gsd-core/workflows/help/modes/default.md", + "gsd-core/workflows/help/modes/full.md", + "gsd-core/workflows/help/modes/topic.md", + "gsd-core/workflows/import.md", + "gsd-core/workflows/inbox.md", + "gsd-core/workflows/ingest-docs.md", + "gsd-core/workflows/insert-phase.md", + "gsd-core/workflows/list-phase-assumptions.md", + "gsd-core/workflows/list-seeds.md", + "gsd-core/workflows/list-workspaces.md", + "gsd-core/workflows/manager.md", + "gsd-core/workflows/map-codebase.md", + "gsd-core/workflows/milestone-summary.md", + "gsd-core/workflows/mvp-phase.md", + "gsd-core/workflows/new-milestone.md", + "gsd-core/workflows/new-project.md", + "gsd-core/workflows/new-workspace.md", + "gsd-core/workflows/next.md", + "gsd-core/workflows/node-repair.md", + "gsd-core/workflows/note.md", + "gsd-core/workflows/onboard.md", + "gsd-core/workflows/pause-work.md", + "gsd-core/workflows/plan-milestone-gaps.md", + "gsd-core/workflows/plan-phase.md", + "gsd-core/workflows/plan-phase/steps/closed-phase-gate.md", + "gsd-core/workflows/plan-phase/steps/prd-express-path.md", + "gsd-core/workflows/plan-phase/steps/windows-troubleshooting.md", + "gsd-core/workflows/plan-review-convergence.md", + "gsd-core/workflows/plant-seed.md", + "gsd-core/workflows/pr-branch.md", + "gsd-core/workflows/profile-user.md", + "gsd-core/workflows/progress.md", + "gsd-core/workflows/quick.md", + "gsd-core/workflows/reapply-patches.md", + "gsd-core/workflows/remove-phase.md", + "gsd-core/workflows/remove-workspace.md", + "gsd-core/workflows/resume-project.md", + "gsd-core/workflows/review.md", + "gsd-core/workflows/scan.md", + "gsd-core/workflows/secure-phase.md", + "gsd-core/workflows/session-report.md", + "gsd-core/workflows/settings-advanced.md", + "gsd-core/workflows/settings-integrations.md", + "gsd-core/workflows/settings.md", + "gsd-core/workflows/ship.md", + "gsd-core/workflows/sketch-wrap-up.md", + "gsd-core/workflows/sketch.md", + "gsd-core/workflows/smart-entry.md", + "gsd-core/workflows/spec-phase.md", + "gsd-core/workflows/spike-wrap-up.md", + "gsd-core/workflows/spike.md", + "gsd-core/workflows/stats.md", + "gsd-core/workflows/sync-skills.md", + "gsd-core/workflows/thread.md", + "gsd-core/workflows/transition.md", + "gsd-core/workflows/ui-phase.md", + "gsd-core/workflows/ui-review.md", + "gsd-core/workflows/ultraplan-phase.md", + "gsd-core/workflows/undo.md", + "gsd-core/workflows/update.md", + "gsd-core/workflows/validate-phase.md", + "gsd-core/workflows/verify-phase.md", + "gsd-core/workflows/verify-work.md", + "hooks/gsd-check-update-worker.js", + "hooks/gsd-check-update.js", + "hooks/gsd-config-reload.js", + "hooks/gsd-context-monitor.js", + "hooks/gsd-cursor-post-tool.js", + "hooks/gsd-cursor-pre-tool.js", + "hooks/gsd-cursor-session-start.js", + "hooks/gsd-cursor-stop.js", + "hooks/gsd-cursor-subagent-start.js", + "hooks/gsd-cursor-subagent-stop.js", + "hooks/gsd-ensure-canonical-path.js", + "hooks/gsd-graphify-update.sh", + "hooks/gsd-phase-boundary.sh", + "hooks/gsd-prompt-guard.js", + "hooks/gsd-read-guard.js", + "hooks/gsd-read-injection-scanner.js", + "hooks/gsd-session-state.sh", + "hooks/gsd-statusline.js", + "hooks/gsd-update-banner.js", + "hooks/gsd-validate-commit.sh", + "hooks/gsd-windsurf-pre-command.js", + "hooks/gsd-windsurf-pre-write.js", + "hooks/gsd-workflow-guard.js", + "hooks/gsd-worktree-path-guard.js", + "hooks/lib/git-cmd.js", + "hooks/lib/gsd-graphify-rebuild.sh", + "hooks/managed-hooks-registry.cjs", + "package.json", + "scripts/changeset/README.md", + "scripts/changeset/cli.cjs", + "scripts/changeset/github-release-notes.cjs", + "scripts/changeset/lint.cjs", + "scripts/changeset/new.cjs", + "scripts/changeset/parse.cjs", + "scripts/changeset/render.cjs", + "scripts/changeset/serialize.cjs", + "scripts/fix-slash-commands.cjs", + "scripts/gen-capability-registry.cjs", + "scripts/gen-loop-host-contract.cjs", + "scripts/lib/allowlist-ratchet.cjs", + "scripts/lib/cli-exit.cjs", + "skills/gsd-ns-context/SKILL.md", + "skills/gsd-ns-context/skills/docs-update/SKILL.md", + "skills/gsd-ns-context/skills/extract-learnings/SKILL.md", + "skills/gsd-ns-context/skills/graphify/SKILL.md", + "skills/gsd-ns-context/skills/map-codebase/SKILL.md", + "skills/gsd-ns-context/skills/mempalace-capture/SKILL.md", + "skills/gsd-ns-context/skills/mempalace-recall/SKILL.md", + "skills/gsd-ns-ideate/SKILL.md", + "skills/gsd-ns-ideate/skills/capture/SKILL.md", + "skills/gsd-ns-ideate/skills/explore/SKILL.md", + "skills/gsd-ns-ideate/skills/sketch/SKILL.md", + "skills/gsd-ns-ideate/skills/spec-phase/SKILL.md", + "skills/gsd-ns-ideate/skills/spike/SKILL.md", + "skills/gsd-ns-manage/SKILL.md", + "skills/gsd-ns-manage/skills/cleanup/SKILL.md", + "skills/gsd-ns-manage/skills/config/SKILL.md", + "skills/gsd-ns-manage/skills/health/SKILL.md", + "skills/gsd-ns-manage/skills/help/SKILL.md", + "skills/gsd-ns-manage/skills/inbox/SKILL.md", + "skills/gsd-ns-manage/skills/manager/SKILL.md", + "skills/gsd-ns-manage/skills/pause-work/SKILL.md", + "skills/gsd-ns-manage/skills/pr-branch/SKILL.md", + "skills/gsd-ns-manage/skills/resume-work/SKILL.md", + "skills/gsd-ns-manage/skills/settings/SKILL.md", + "skills/gsd-ns-manage/skills/ship/SKILL.md", + "skills/gsd-ns-manage/skills/stats/SKILL.md", + "skills/gsd-ns-manage/skills/surface/SKILL.md", + "skills/gsd-ns-manage/skills/thread/SKILL.md", + "skills/gsd-ns-manage/skills/undo/SKILL.md", + "skills/gsd-ns-manage/skills/update/SKILL.md", + "skills/gsd-ns-manage/skills/workspace/SKILL.md", + "skills/gsd-ns-manage/skills/workstreams/SKILL.md", + "skills/gsd-ns-project/SKILL.md", + "skills/gsd-ns-project/skills/audit-milestone/SKILL.md", + "skills/gsd-ns-project/skills/complete-milestone/SKILL.md", + "skills/gsd-ns-project/skills/import/SKILL.md", + "skills/gsd-ns-project/skills/ingest-docs/SKILL.md", + "skills/gsd-ns-project/skills/milestone-summary/SKILL.md", + "skills/gsd-ns-project/skills/new-milestone/SKILL.md", + "skills/gsd-ns-project/skills/new-project/SKILL.md", + "skills/gsd-ns-project/skills/onboard/SKILL.md", + "skills/gsd-ns-project/skills/profile-user/SKILL.md", + "skills/gsd-ns-project/skills/review-backlog/SKILL.md", + "skills/gsd-ns-review/SKILL.md", + "skills/gsd-ns-review/skills/audit-fix/SKILL.md", + "skills/gsd-ns-review/skills/audit-uat/SKILL.md", + "skills/gsd-ns-review/skills/code-review/SKILL.md", + "skills/gsd-ns-review/skills/debug/SKILL.md", + "skills/gsd-ns-review/skills/eval-review/SKILL.md", + "skills/gsd-ns-review/skills/forensics/SKILL.md", + "skills/gsd-ns-review/skills/review/SKILL.md", + "skills/gsd-ns-review/skills/secure-phase/SKILL.md", + "skills/gsd-ns-review/skills/ui-phase/SKILL.md", + "skills/gsd-ns-review/skills/ui-review/SKILL.md", + "skills/gsd-ns-review/skills/validate-phase/SKILL.md", + "skills/gsd-ns-workflow/SKILL.md", + "skills/gsd-ns-workflow/skills/add-tests/SKILL.md", + "skills/gsd-ns-workflow/skills/ai-integration-phase/SKILL.md", + "skills/gsd-ns-workflow/skills/autonomous/SKILL.md", + "skills/gsd-ns-workflow/skills/discuss-phase/SKILL.md", + "skills/gsd-ns-workflow/skills/execute-phase/SKILL.md", + "skills/gsd-ns-workflow/skills/fast/SKILL.md", + "skills/gsd-ns-workflow/skills/mvp-phase/SKILL.md", + "skills/gsd-ns-workflow/skills/next/SKILL.md", + "skills/gsd-ns-workflow/skills/phase/SKILL.md", + "skills/gsd-ns-workflow/skills/plan-phase/SKILL.md", + "skills/gsd-ns-workflow/skills/plan-review-convergence/SKILL.md", + "skills/gsd-ns-workflow/skills/progress/SKILL.md", + "skills/gsd-ns-workflow/skills/quick/SKILL.md", + "skills/gsd-ns-workflow/skills/spec-phase/SKILL.md", + "skills/gsd-ns-workflow/skills/ultraplan-phase/SKILL.md", + "skills/gsd-ns-workflow/skills/verify-work/SKILL.md" +] diff --git a/tests/fixtures/install-tree/trae.json b/tests/fixtures/install-tree/trae.json new file mode 100644 index 000000000..401b9fa55 --- /dev/null +++ b/tests/fixtures/install-tree/trae.json @@ -0,0 +1,399 @@ +[ + ".gsd-profile", + ".gsd/defaults.json", + "agents/gsd-advisor-researcher.md", + "agents/gsd-ai-researcher.md", + "agents/gsd-assumptions-analyzer.md", + "agents/gsd-code-fixer.md", + "agents/gsd-code-reviewer.md", + "agents/gsd-codebase-mapper.md", + "agents/gsd-debug-session-manager.md", + "agents/gsd-debugger.md", + "agents/gsd-doc-classifier.md", + "agents/gsd-doc-synthesizer.md", + "agents/gsd-doc-verifier.md", + "agents/gsd-doc-writer.md", + "agents/gsd-domain-researcher.md", + "agents/gsd-eval-auditor.md", + "agents/gsd-eval-planner.md", + "agents/gsd-executor.md", + "agents/gsd-framework-selector.md", + "agents/gsd-integration-checker.md", + "agents/gsd-intel-updater.md", + "agents/gsd-mempalace-curator.md", + "agents/gsd-nyquist-auditor.md", + "agents/gsd-pattern-mapper.md", + "agents/gsd-phase-researcher.md", + "agents/gsd-plan-checker.md", + "agents/gsd-planner.md", + "agents/gsd-project-researcher.md", + "agents/gsd-research-synthesizer.md", + "agents/gsd-roadmapper.md", + "agents/gsd-security-auditor.md", + "agents/gsd-ui-auditor.md", + "agents/gsd-ui-checker.md", + "agents/gsd-ui-researcher.md", + "agents/gsd-user-profiler.md", + "agents/gsd-verifier.md", + "gsd-core/VERSION", + "gsd-core/bin/check-latest-version.cjs", + "gsd-core/bin/ensure-runtime-build.cjs", + "gsd-core/bin/gsd-tools.cjs", + "gsd-core/bin/gsd_run", + "gsd-core/bin/shared/config-defaults.manifest.json", + "gsd-core/bin/shared/config-schema.manifest.json", + "gsd-core/bin/shared/model-catalog.json", + "gsd-core/bin/shared/runtime-aliases.manifest.json", + "gsd-core/bin/verify-reapply-patches.cjs", + "gsd-core/contexts/dev.md", + "gsd-core/contexts/research.md", + "gsd-core/contexts/review.md", + "gsd-core/references/agent-contracts.md", + "gsd-core/references/agent-skills-bootstrap.md", + "gsd-core/references/ai-evals.md", + "gsd-core/references/ai-frameworks.md", + "gsd-core/references/api-coverage.md", + "gsd-core/references/artifact-types.md", + "gsd-core/references/autonomous-smart-discuss.md", + "gsd-core/references/checkpoints.md", + "gsd-core/references/common-bug-patterns.md", + "gsd-core/references/context-budget.md", + "gsd-core/references/continuation-format.md", + "gsd-core/references/debugger-philosophy.md", + "gsd-core/references/decimal-phase-calculation.md", + "gsd-core/references/doc-conflict-engine.md", + "gsd-core/references/domain-probes.md", + "gsd-core/references/edge-probe-fixtures/01-round-half-even/expected-coverage.json", + "gsd-core/references/edge-probe-fixtures/01-round-half-even/requirements.json", + "gsd-core/references/edge-probe-fixtures/02-merge-intervals/expected-coverage.json", + "gsd-core/references/edge-probe-fixtures/02-merge-intervals/requirements.json", + "gsd-core/references/edge-probe-fixtures/03-truncate-graphemes/expected-coverage.json", + "gsd-core/references/edge-probe-fixtures/03-truncate-graphemes/requirements.json", + "gsd-core/references/edge-probe-fixtures/04-money-rounding/expected-coverage.json", + "gsd-core/references/edge-probe-fixtures/04-money-rounding/requirements.json", + "gsd-core/references/edge-probe-fixtures/05-list-dedupe/expected-coverage.json", + "gsd-core/references/edge-probe-fixtures/05-list-dedupe/requirements.json", + "gsd-core/references/edge-probe-fixtures/06-resolved-mixed/expected-coverage.json", + "gsd-core/references/edge-probe-fixtures/06-resolved-mixed/requirements.json", + "gsd-core/references/edge-probe-fixtures/06-resolved-mixed/resolutions.json", + "gsd-core/references/edge-probe.md", + "gsd-core/references/execute-mvp-tdd.md", + "gsd-core/references/execute-phase-between-wave-reset.md", + "gsd-core/references/execute-phase-context-guard.md", + "gsd-core/references/execute-phase-wave-guard.md", + "gsd-core/references/executor-examples.md", + "gsd-core/references/few-shot-examples/plan-checker.md", + "gsd-core/references/few-shot-examples/verifier.md", + "gsd-core/references/gate-prompts.md", + "gsd-core/references/gates.md", + "gsd-core/references/git-integration.md", + "gsd-core/references/git-planning-commit.md", + "gsd-core/references/gsd-run-resolver.md", + "gsd-core/references/honest-verifier.md", + "gsd-core/references/ios-scaffold.md", + "gsd-core/references/loop-hook-dispatch.md", + "gsd-core/references/mandatory-initial-read.md", + "gsd-core/references/model-profile-resolution.md", + "gsd-core/references/model-profiles.md", + "gsd-core/references/mvp-concepts.md", + "gsd-core/references/phase-argument-parsing.md", + "gsd-core/references/planner-antipatterns.md", + "gsd-core/references/planner-chunked.md", + "gsd-core/references/planner-gap-closure.md", + "gsd-core/references/planner-graphify-auto-update.md", + "gsd-core/references/planner-guidance.md", + "gsd-core/references/planner-human-verify-mode.md", + "gsd-core/references/planner-interface-context.md", + "gsd-core/references/planner-load-graph-context.md", + "gsd-core/references/planner-mvp-mode.md", + "gsd-core/references/planner-reviews.md", + "gsd-core/references/planner-revision.md", + "gsd-core/references/planner-source-audit.md", + "gsd-core/references/planning-config.md", + "gsd-core/references/prohibition-probe-fixtures/01-streak-reminder/expected.json", + "gsd-core/references/prohibition-probe-fixtures/02-clean-utility/expected.json", + "gsd-core/references/prohibition-probe-fixtures/03-multi-prohibition/expected.json", + "gsd-core/references/prohibition-probe.md", + "gsd-core/references/project-skills-discovery.md", + "gsd-core/references/questioning.md", + "gsd-core/references/research-documentation-lookup.md", + "gsd-core/references/research-philosophy.md", + "gsd-core/references/research-verification-protocol.md", + "gsd-core/references/reviewer-instances.md", + "gsd-core/references/revision-loop.md", + "gsd-core/references/scout-codebase.md", + "gsd-core/references/security-asvs-levels.md", + "gsd-core/references/skeleton-template.md", + "gsd-core/references/sketch-interactivity.md", + "gsd-core/references/sketch-theme-system.md", + "gsd-core/references/sketch-tooling.md", + "gsd-core/references/sketch-variant-patterns.md", + "gsd-core/references/specless-probe-fallback.md", + "gsd-core/references/spidr-splitting.md", + "gsd-core/references/tdd.md", + "gsd-core/references/thinking-models-debug.md", + "gsd-core/references/thinking-models-execution.md", + "gsd-core/references/thinking-models-planning.md", + "gsd-core/references/thinking-models-research.md", + "gsd-core/references/thinking-models-verification.md", + "gsd-core/references/thinking-partner.md", + "gsd-core/references/ui-brand.md", + "gsd-core/references/ui-consideration-probe.md", + "gsd-core/references/universal-anti-patterns.md", + "gsd-core/references/untrusted-input-boundary.md", + "gsd-core/references/user-profiling.md", + "gsd-core/references/user-story-template.md", + "gsd-core/references/verification-overrides.md", + "gsd-core/references/verification-patterns.md", + "gsd-core/references/verify-mvp-mode.md", + "gsd-core/references/workstream-flag.md", + "gsd-core/references/worktree-branch-check.md", + "gsd-core/references/worktree-path-safety.md", + "gsd-core/templates/AI-SPEC.md", + "gsd-core/templates/DEBUG.md", + "gsd-core/templates/README.md", + "gsd-core/templates/SECURITY.md", + "gsd-core/templates/UAT.md", + "gsd-core/templates/UI-SPEC.md", + "gsd-core/templates/VALIDATION.md", + "gsd-core/templates/claude-md.md", + "gsd-core/templates/codebase/architecture.md", + "gsd-core/templates/codebase/concerns.md", + "gsd-core/templates/codebase/conventions.md", + "gsd-core/templates/codebase/integrations.md", + "gsd-core/templates/codebase/stack.md", + "gsd-core/templates/codebase/structure.md", + "gsd-core/templates/codebase/testing.md", + "gsd-core/templates/config.json", + "gsd-core/templates/context.md", + "gsd-core/templates/continue-here.md", + "gsd-core/templates/copilot-instructions.md", + "gsd-core/templates/debug-subagent-prompt.md", + "gsd-core/templates/dev-preferences.md", + "gsd-core/templates/discovery.md", + "gsd-core/templates/discussion-log.md", + "gsd-core/templates/milestone-archive.md", + "gsd-core/templates/milestone.md", + "gsd-core/templates/phase-prompt.md", + "gsd-core/templates/planner-subagent-prompt.md", + "gsd-core/templates/project.md", + "gsd-core/templates/requirements.md", + "gsd-core/templates/research-project/ARCHITECTURE.md", + "gsd-core/templates/research-project/FEATURES.md", + "gsd-core/templates/research-project/PITFALLS.md", + "gsd-core/templates/research-project/STACK.md", + "gsd-core/templates/research-project/SUMMARY.md", + "gsd-core/templates/research.md", + "gsd-core/templates/retrospective.md", + "gsd-core/templates/roadmap.md", + "gsd-core/templates/spec.md", + "gsd-core/templates/state.md", + "gsd-core/templates/summary-complex.md", + "gsd-core/templates/summary-minimal.md", + "gsd-core/templates/summary-standard.md", + "gsd-core/templates/summary.md", + "gsd-core/templates/user-profile.md", + "gsd-core/templates/user-setup.md", + "gsd-core/templates/verification-report.md", + "gsd-core/workflows/_runtime-launcher.snippet.sh", + "gsd-core/workflows/add-backlog.md", + "gsd-core/workflows/add-phase.md", + "gsd-core/workflows/add-tests.md", + "gsd-core/workflows/add-todo.md", + "gsd-core/workflows/ai-integration-phase.md", + "gsd-core/workflows/analyze-dependencies.md", + "gsd-core/workflows/audit-fix.md", + "gsd-core/workflows/audit-milestone.md", + "gsd-core/workflows/audit-uat.md", + "gsd-core/workflows/autonomous.md", + "gsd-core/workflows/check-todos.md", + "gsd-core/workflows/cleanup.md", + "gsd-core/workflows/code-review-fix.md", + "gsd-core/workflows/code-review.md", + "gsd-core/workflows/complete-milestone.md", + "gsd-core/workflows/debug.md", + "gsd-core/workflows/diagnose-issues.md", + "gsd-core/workflows/discovery-phase.md", + "gsd-core/workflows/discuss-phase-assumptions.md", + "gsd-core/workflows/discuss-phase-power.md", + "gsd-core/workflows/discuss-phase.md", + "gsd-core/workflows/discuss-phase/modes/advisor.md", + "gsd-core/workflows/discuss-phase/modes/all.md", + "gsd-core/workflows/discuss-phase/modes/analyze.md", + "gsd-core/workflows/discuss-phase/modes/auto.md", + "gsd-core/workflows/discuss-phase/modes/batch.md", + "gsd-core/workflows/discuss-phase/modes/chain.md", + "gsd-core/workflows/discuss-phase/modes/default.md", + "gsd-core/workflows/discuss-phase/modes/power.md", + "gsd-core/workflows/discuss-phase/modes/text.md", + "gsd-core/workflows/discuss-phase/templates/checkpoint.json", + "gsd-core/workflows/discuss-phase/templates/context.md", + "gsd-core/workflows/discuss-phase/templates/discussion-log.md", + "gsd-core/workflows/do.md", + "gsd-core/workflows/docs-update.md", + "gsd-core/workflows/edit-phase.md", + "gsd-core/workflows/eval-review.md", + "gsd-core/workflows/execute-phase.md", + "gsd-core/workflows/execute-phase/steps/codebase-drift-gate.md", + "gsd-core/workflows/execute-phase/steps/per-plan-worktree-gate.md", + "gsd-core/workflows/execute-phase/steps/post-merge-gate.md", + "gsd-core/workflows/execute-phase/steps/regression-gate.md", + "gsd-core/workflows/execute-phase/steps/worktree-recovery-policy.md", + "gsd-core/workflows/execute-plan.md", + "gsd-core/workflows/explore.md", + "gsd-core/workflows/extract-learnings.md", + "gsd-core/workflows/fast.md", + "gsd-core/workflows/forensics.md", + "gsd-core/workflows/graduation.md", + "gsd-core/workflows/health.md", + "gsd-core/workflows/help.md", + "gsd-core/workflows/help/modes/brief.md", + "gsd-core/workflows/help/modes/default.md", + "gsd-core/workflows/help/modes/full.md", + "gsd-core/workflows/help/modes/topic.md", + "gsd-core/workflows/import.md", + "gsd-core/workflows/inbox.md", + "gsd-core/workflows/ingest-docs.md", + "gsd-core/workflows/insert-phase.md", + "gsd-core/workflows/list-phase-assumptions.md", + "gsd-core/workflows/list-seeds.md", + "gsd-core/workflows/list-workspaces.md", + "gsd-core/workflows/manager.md", + "gsd-core/workflows/map-codebase.md", + "gsd-core/workflows/milestone-summary.md", + "gsd-core/workflows/mvp-phase.md", + "gsd-core/workflows/new-milestone.md", + "gsd-core/workflows/new-project.md", + "gsd-core/workflows/new-workspace.md", + "gsd-core/workflows/next.md", + "gsd-core/workflows/node-repair.md", + "gsd-core/workflows/note.md", + "gsd-core/workflows/onboard.md", + "gsd-core/workflows/pause-work.md", + "gsd-core/workflows/plan-milestone-gaps.md", + "gsd-core/workflows/plan-phase.md", + "gsd-core/workflows/plan-phase/steps/closed-phase-gate.md", + "gsd-core/workflows/plan-phase/steps/prd-express-path.md", + "gsd-core/workflows/plan-phase/steps/windows-troubleshooting.md", + "gsd-core/workflows/plan-review-convergence.md", + "gsd-core/workflows/plant-seed.md", + "gsd-core/workflows/pr-branch.md", + "gsd-core/workflows/profile-user.md", + "gsd-core/workflows/progress.md", + "gsd-core/workflows/quick.md", + "gsd-core/workflows/reapply-patches.md", + "gsd-core/workflows/remove-phase.md", + "gsd-core/workflows/remove-workspace.md", + "gsd-core/workflows/resume-project.md", + "gsd-core/workflows/review.md", + "gsd-core/workflows/scan.md", + "gsd-core/workflows/secure-phase.md", + "gsd-core/workflows/session-report.md", + "gsd-core/workflows/settings-advanced.md", + "gsd-core/workflows/settings-integrations.md", + "gsd-core/workflows/settings.md", + "gsd-core/workflows/ship.md", + "gsd-core/workflows/sketch-wrap-up.md", + "gsd-core/workflows/sketch.md", + "gsd-core/workflows/smart-entry.md", + "gsd-core/workflows/spec-phase.md", + "gsd-core/workflows/spike-wrap-up.md", + "gsd-core/workflows/spike.md", + "gsd-core/workflows/stats.md", + "gsd-core/workflows/sync-skills.md", + "gsd-core/workflows/thread.md", + "gsd-core/workflows/transition.md", + "gsd-core/workflows/ui-phase.md", + "gsd-core/workflows/ui-review.md", + "gsd-core/workflows/ultraplan-phase.md", + "gsd-core/workflows/undo.md", + "gsd-core/workflows/update.md", + "gsd-core/workflows/validate-phase.md", + "gsd-core/workflows/verify-phase.md", + "gsd-core/workflows/verify-work.md", + "scripts/changeset/README.md", + "scripts/changeset/cli.cjs", + "scripts/changeset/github-release-notes.cjs", + "scripts/changeset/lint.cjs", + "scripts/changeset/new.cjs", + "scripts/changeset/parse.cjs", + "scripts/changeset/render.cjs", + "scripts/changeset/serialize.cjs", + "scripts/fix-slash-commands.cjs", + "scripts/gen-capability-registry.cjs", + "scripts/gen-loop-host-contract.cjs", + "scripts/lib/allowlist-ratchet.cjs", + "scripts/lib/cli-exit.cjs", + "skills/gsd-ns-context/SKILL.md", + "skills/gsd-ns-context/skills/docs-update/SKILL.md", + "skills/gsd-ns-context/skills/extract-learnings/SKILL.md", + "skills/gsd-ns-context/skills/graphify/SKILL.md", + "skills/gsd-ns-context/skills/map-codebase/SKILL.md", + "skills/gsd-ns-context/skills/mempalace-capture/SKILL.md", + "skills/gsd-ns-context/skills/mempalace-recall/SKILL.md", + "skills/gsd-ns-ideate/SKILL.md", + "skills/gsd-ns-ideate/skills/capture/SKILL.md", + "skills/gsd-ns-ideate/skills/explore/SKILL.md", + "skills/gsd-ns-ideate/skills/sketch/SKILL.md", + "skills/gsd-ns-ideate/skills/spec-phase/SKILL.md", + "skills/gsd-ns-ideate/skills/spike/SKILL.md", + "skills/gsd-ns-manage/SKILL.md", + "skills/gsd-ns-manage/skills/cleanup/SKILL.md", + "skills/gsd-ns-manage/skills/config/SKILL.md", + "skills/gsd-ns-manage/skills/health/SKILL.md", + "skills/gsd-ns-manage/skills/help/SKILL.md", + "skills/gsd-ns-manage/skills/inbox/SKILL.md", + "skills/gsd-ns-manage/skills/manager/SKILL.md", + "skills/gsd-ns-manage/skills/pause-work/SKILL.md", + "skills/gsd-ns-manage/skills/pr-branch/SKILL.md", + "skills/gsd-ns-manage/skills/resume-work/SKILL.md", + "skills/gsd-ns-manage/skills/settings/SKILL.md", + "skills/gsd-ns-manage/skills/ship/SKILL.md", + "skills/gsd-ns-manage/skills/stats/SKILL.md", + "skills/gsd-ns-manage/skills/surface/SKILL.md", + "skills/gsd-ns-manage/skills/thread/SKILL.md", + "skills/gsd-ns-manage/skills/undo/SKILL.md", + "skills/gsd-ns-manage/skills/update/SKILL.md", + "skills/gsd-ns-manage/skills/workspace/SKILL.md", + "skills/gsd-ns-manage/skills/workstreams/SKILL.md", + "skills/gsd-ns-project/SKILL.md", + "skills/gsd-ns-project/skills/audit-milestone/SKILL.md", + "skills/gsd-ns-project/skills/complete-milestone/SKILL.md", + "skills/gsd-ns-project/skills/import/SKILL.md", + "skills/gsd-ns-project/skills/ingest-docs/SKILL.md", + "skills/gsd-ns-project/skills/milestone-summary/SKILL.md", + "skills/gsd-ns-project/skills/new-milestone/SKILL.md", + "skills/gsd-ns-project/skills/new-project/SKILL.md", + "skills/gsd-ns-project/skills/onboard/SKILL.md", + "skills/gsd-ns-project/skills/profile-user/SKILL.md", + "skills/gsd-ns-project/skills/review-backlog/SKILL.md", + "skills/gsd-ns-review/SKILL.md", + "skills/gsd-ns-review/skills/audit-fix/SKILL.md", + "skills/gsd-ns-review/skills/audit-uat/SKILL.md", + "skills/gsd-ns-review/skills/code-review/SKILL.md", + "skills/gsd-ns-review/skills/debug/SKILL.md", + "skills/gsd-ns-review/skills/eval-review/SKILL.md", + "skills/gsd-ns-review/skills/forensics/SKILL.md", + "skills/gsd-ns-review/skills/review/SKILL.md", + "skills/gsd-ns-review/skills/secure-phase/SKILL.md", + "skills/gsd-ns-review/skills/ui-phase/SKILL.md", + "skills/gsd-ns-review/skills/ui-review/SKILL.md", + "skills/gsd-ns-review/skills/validate-phase/SKILL.md", + "skills/gsd-ns-workflow/SKILL.md", + "skills/gsd-ns-workflow/skills/add-tests/SKILL.md", + "skills/gsd-ns-workflow/skills/ai-integration-phase/SKILL.md", + "skills/gsd-ns-workflow/skills/autonomous/SKILL.md", + "skills/gsd-ns-workflow/skills/discuss-phase/SKILL.md", + "skills/gsd-ns-workflow/skills/execute-phase/SKILL.md", + "skills/gsd-ns-workflow/skills/fast/SKILL.md", + "skills/gsd-ns-workflow/skills/mvp-phase/SKILL.md", + "skills/gsd-ns-workflow/skills/next/SKILL.md", + "skills/gsd-ns-workflow/skills/phase/SKILL.md", + "skills/gsd-ns-workflow/skills/plan-phase/SKILL.md", + "skills/gsd-ns-workflow/skills/plan-review-convergence/SKILL.md", + "skills/gsd-ns-workflow/skills/progress/SKILL.md", + "skills/gsd-ns-workflow/skills/quick/SKILL.md", + "skills/gsd-ns-workflow/skills/spec-phase/SKILL.md", + "skills/gsd-ns-workflow/skills/ultraplan-phase/SKILL.md", + "skills/gsd-ns-workflow/skills/verify-work/SKILL.md" +] diff --git a/tests/fixtures/install-tree/windsurf.json b/tests/fixtures/install-tree/windsurf.json new file mode 100644 index 000000000..eca97635e --- /dev/null +++ b/tests/fixtures/install-tree/windsurf.json @@ -0,0 +1,329 @@ +[ + ".gsd-profile", + ".gsd/defaults.json", + "agents/gsd-advisor-researcher.md", + "agents/gsd-ai-researcher.md", + "agents/gsd-assumptions-analyzer.md", + "agents/gsd-code-fixer.md", + "agents/gsd-code-reviewer.md", + "agents/gsd-codebase-mapper.md", + "agents/gsd-debug-session-manager.md", + "agents/gsd-debugger.md", + "agents/gsd-doc-classifier.md", + "agents/gsd-doc-synthesizer.md", + "agents/gsd-doc-verifier.md", + "agents/gsd-doc-writer.md", + "agents/gsd-domain-researcher.md", + "agents/gsd-eval-auditor.md", + "agents/gsd-eval-planner.md", + "agents/gsd-executor.md", + "agents/gsd-framework-selector.md", + "agents/gsd-integration-checker.md", + "agents/gsd-intel-updater.md", + "agents/gsd-mempalace-curator.md", + "agents/gsd-nyquist-auditor.md", + "agents/gsd-pattern-mapper.md", + "agents/gsd-phase-researcher.md", + "agents/gsd-plan-checker.md", + "agents/gsd-planner.md", + "agents/gsd-project-researcher.md", + "agents/gsd-research-synthesizer.md", + "agents/gsd-roadmapper.md", + "agents/gsd-security-auditor.md", + "agents/gsd-ui-auditor.md", + "agents/gsd-ui-checker.md", + "agents/gsd-ui-researcher.md", + "agents/gsd-user-profiler.md", + "agents/gsd-verifier.md", + "gsd-core/VERSION", + "gsd-core/bin/check-latest-version.cjs", + "gsd-core/bin/ensure-runtime-build.cjs", + "gsd-core/bin/gsd-tools.cjs", + "gsd-core/bin/gsd_run", + "gsd-core/bin/shared/config-defaults.manifest.json", + "gsd-core/bin/shared/config-schema.manifest.json", + "gsd-core/bin/shared/model-catalog.json", + "gsd-core/bin/shared/runtime-aliases.manifest.json", + "gsd-core/bin/verify-reapply-patches.cjs", + "gsd-core/contexts/dev.md", + "gsd-core/contexts/research.md", + "gsd-core/contexts/review.md", + "gsd-core/references/agent-contracts.md", + "gsd-core/references/agent-skills-bootstrap.md", + "gsd-core/references/ai-evals.md", + "gsd-core/references/ai-frameworks.md", + "gsd-core/references/api-coverage.md", + "gsd-core/references/artifact-types.md", + "gsd-core/references/autonomous-smart-discuss.md", + "gsd-core/references/checkpoints.md", + "gsd-core/references/common-bug-patterns.md", + "gsd-core/references/context-budget.md", + "gsd-core/references/continuation-format.md", + "gsd-core/references/debugger-philosophy.md", + "gsd-core/references/decimal-phase-calculation.md", + "gsd-core/references/doc-conflict-engine.md", + "gsd-core/references/domain-probes.md", + "gsd-core/references/edge-probe-fixtures/01-round-half-even/expected-coverage.json", + "gsd-core/references/edge-probe-fixtures/01-round-half-even/requirements.json", + "gsd-core/references/edge-probe-fixtures/02-merge-intervals/expected-coverage.json", + "gsd-core/references/edge-probe-fixtures/02-merge-intervals/requirements.json", + "gsd-core/references/edge-probe-fixtures/03-truncate-graphemes/expected-coverage.json", + "gsd-core/references/edge-probe-fixtures/03-truncate-graphemes/requirements.json", + "gsd-core/references/edge-probe-fixtures/04-money-rounding/expected-coverage.json", + "gsd-core/references/edge-probe-fixtures/04-money-rounding/requirements.json", + "gsd-core/references/edge-probe-fixtures/05-list-dedupe/expected-coverage.json", + "gsd-core/references/edge-probe-fixtures/05-list-dedupe/requirements.json", + "gsd-core/references/edge-probe-fixtures/06-resolved-mixed/expected-coverage.json", + "gsd-core/references/edge-probe-fixtures/06-resolved-mixed/requirements.json", + "gsd-core/references/edge-probe-fixtures/06-resolved-mixed/resolutions.json", + "gsd-core/references/edge-probe.md", + "gsd-core/references/execute-mvp-tdd.md", + "gsd-core/references/execute-phase-between-wave-reset.md", + "gsd-core/references/execute-phase-context-guard.md", + "gsd-core/references/execute-phase-wave-guard.md", + "gsd-core/references/executor-examples.md", + "gsd-core/references/few-shot-examples/plan-checker.md", + "gsd-core/references/few-shot-examples/verifier.md", + "gsd-core/references/gate-prompts.md", + "gsd-core/references/gates.md", + "gsd-core/references/git-integration.md", + "gsd-core/references/git-planning-commit.md", + "gsd-core/references/gsd-run-resolver.md", + "gsd-core/references/honest-verifier.md", + "gsd-core/references/ios-scaffold.md", + "gsd-core/references/loop-hook-dispatch.md", + "gsd-core/references/mandatory-initial-read.md", + "gsd-core/references/model-profile-resolution.md", + "gsd-core/references/model-profiles.md", + "gsd-core/references/mvp-concepts.md", + "gsd-core/references/phase-argument-parsing.md", + "gsd-core/references/planner-antipatterns.md", + "gsd-core/references/planner-chunked.md", + "gsd-core/references/planner-gap-closure.md", + "gsd-core/references/planner-graphify-auto-update.md", + "gsd-core/references/planner-guidance.md", + "gsd-core/references/planner-human-verify-mode.md", + "gsd-core/references/planner-interface-context.md", + "gsd-core/references/planner-load-graph-context.md", + "gsd-core/references/planner-mvp-mode.md", + "gsd-core/references/planner-reviews.md", + "gsd-core/references/planner-revision.md", + "gsd-core/references/planner-source-audit.md", + "gsd-core/references/planning-config.md", + "gsd-core/references/prohibition-probe-fixtures/01-streak-reminder/expected.json", + "gsd-core/references/prohibition-probe-fixtures/02-clean-utility/expected.json", + "gsd-core/references/prohibition-probe-fixtures/03-multi-prohibition/expected.json", + "gsd-core/references/prohibition-probe.md", + "gsd-core/references/project-skills-discovery.md", + "gsd-core/references/questioning.md", + "gsd-core/references/research-documentation-lookup.md", + "gsd-core/references/research-philosophy.md", + "gsd-core/references/research-verification-protocol.md", + "gsd-core/references/reviewer-instances.md", + "gsd-core/references/revision-loop.md", + "gsd-core/references/scout-codebase.md", + "gsd-core/references/security-asvs-levels.md", + "gsd-core/references/skeleton-template.md", + "gsd-core/references/sketch-interactivity.md", + "gsd-core/references/sketch-theme-system.md", + "gsd-core/references/sketch-tooling.md", + "gsd-core/references/sketch-variant-patterns.md", + "gsd-core/references/specless-probe-fallback.md", + "gsd-core/references/spidr-splitting.md", + "gsd-core/references/tdd.md", + "gsd-core/references/thinking-models-debug.md", + "gsd-core/references/thinking-models-execution.md", + "gsd-core/references/thinking-models-planning.md", + "gsd-core/references/thinking-models-research.md", + "gsd-core/references/thinking-models-verification.md", + "gsd-core/references/thinking-partner.md", + "gsd-core/references/ui-brand.md", + "gsd-core/references/ui-consideration-probe.md", + "gsd-core/references/universal-anti-patterns.md", + "gsd-core/references/untrusted-input-boundary.md", + "gsd-core/references/user-profiling.md", + "gsd-core/references/user-story-template.md", + "gsd-core/references/verification-overrides.md", + "gsd-core/references/verification-patterns.md", + "gsd-core/references/verify-mvp-mode.md", + "gsd-core/references/workstream-flag.md", + "gsd-core/references/worktree-branch-check.md", + "gsd-core/references/worktree-path-safety.md", + "gsd-core/templates/AI-SPEC.md", + "gsd-core/templates/DEBUG.md", + "gsd-core/templates/README.md", + "gsd-core/templates/SECURITY.md", + "gsd-core/templates/UAT.md", + "gsd-core/templates/UI-SPEC.md", + "gsd-core/templates/VALIDATION.md", + "gsd-core/templates/claude-md.md", + "gsd-core/templates/codebase/architecture.md", + "gsd-core/templates/codebase/concerns.md", + "gsd-core/templates/codebase/conventions.md", + "gsd-core/templates/codebase/integrations.md", + "gsd-core/templates/codebase/stack.md", + "gsd-core/templates/codebase/structure.md", + "gsd-core/templates/codebase/testing.md", + "gsd-core/templates/config.json", + "gsd-core/templates/context.md", + "gsd-core/templates/continue-here.md", + "gsd-core/templates/copilot-instructions.md", + "gsd-core/templates/debug-subagent-prompt.md", + "gsd-core/templates/dev-preferences.md", + "gsd-core/templates/discovery.md", + "gsd-core/templates/discussion-log.md", + "gsd-core/templates/milestone-archive.md", + "gsd-core/templates/milestone.md", + "gsd-core/templates/phase-prompt.md", + "gsd-core/templates/planner-subagent-prompt.md", + "gsd-core/templates/project.md", + "gsd-core/templates/requirements.md", + "gsd-core/templates/research-project/ARCHITECTURE.md", + "gsd-core/templates/research-project/FEATURES.md", + "gsd-core/templates/research-project/PITFALLS.md", + "gsd-core/templates/research-project/STACK.md", + "gsd-core/templates/research-project/SUMMARY.md", + "gsd-core/templates/research.md", + "gsd-core/templates/retrospective.md", + "gsd-core/templates/roadmap.md", + "gsd-core/templates/spec.md", + "gsd-core/templates/state.md", + "gsd-core/templates/summary-complex.md", + "gsd-core/templates/summary-minimal.md", + "gsd-core/templates/summary-standard.md", + "gsd-core/templates/summary.md", + "gsd-core/templates/user-profile.md", + "gsd-core/templates/user-setup.md", + "gsd-core/templates/verification-report.md", + "gsd-core/workflows/_runtime-launcher.snippet.sh", + "gsd-core/workflows/add-backlog.md", + "gsd-core/workflows/add-phase.md", + "gsd-core/workflows/add-tests.md", + "gsd-core/workflows/add-todo.md", + "gsd-core/workflows/ai-integration-phase.md", + "gsd-core/workflows/analyze-dependencies.md", + "gsd-core/workflows/audit-fix.md", + "gsd-core/workflows/audit-milestone.md", + "gsd-core/workflows/audit-uat.md", + "gsd-core/workflows/autonomous.md", + "gsd-core/workflows/check-todos.md", + "gsd-core/workflows/cleanup.md", + "gsd-core/workflows/code-review-fix.md", + "gsd-core/workflows/code-review.md", + "gsd-core/workflows/complete-milestone.md", + "gsd-core/workflows/debug.md", + "gsd-core/workflows/diagnose-issues.md", + "gsd-core/workflows/discovery-phase.md", + "gsd-core/workflows/discuss-phase-assumptions.md", + "gsd-core/workflows/discuss-phase-power.md", + "gsd-core/workflows/discuss-phase.md", + "gsd-core/workflows/discuss-phase/modes/advisor.md", + "gsd-core/workflows/discuss-phase/modes/all.md", + "gsd-core/workflows/discuss-phase/modes/analyze.md", + "gsd-core/workflows/discuss-phase/modes/auto.md", + "gsd-core/workflows/discuss-phase/modes/batch.md", + "gsd-core/workflows/discuss-phase/modes/chain.md", + "gsd-core/workflows/discuss-phase/modes/default.md", + "gsd-core/workflows/discuss-phase/modes/power.md", + "gsd-core/workflows/discuss-phase/modes/text.md", + "gsd-core/workflows/discuss-phase/templates/checkpoint.json", + "gsd-core/workflows/discuss-phase/templates/context.md", + "gsd-core/workflows/discuss-phase/templates/discussion-log.md", + "gsd-core/workflows/do.md", + "gsd-core/workflows/docs-update.md", + "gsd-core/workflows/edit-phase.md", + "gsd-core/workflows/eval-review.md", + "gsd-core/workflows/execute-phase.md", + "gsd-core/workflows/execute-phase/steps/codebase-drift-gate.md", + "gsd-core/workflows/execute-phase/steps/per-plan-worktree-gate.md", + "gsd-core/workflows/execute-phase/steps/post-merge-gate.md", + "gsd-core/workflows/execute-phase/steps/regression-gate.md", + "gsd-core/workflows/execute-phase/steps/worktree-recovery-policy.md", + "gsd-core/workflows/execute-plan.md", + "gsd-core/workflows/explore.md", + "gsd-core/workflows/extract-learnings.md", + "gsd-core/workflows/fast.md", + "gsd-core/workflows/forensics.md", + "gsd-core/workflows/graduation.md", + "gsd-core/workflows/health.md", + "gsd-core/workflows/help.md", + "gsd-core/workflows/help/modes/brief.md", + "gsd-core/workflows/help/modes/default.md", + "gsd-core/workflows/help/modes/full.md", + "gsd-core/workflows/help/modes/topic.md", + "gsd-core/workflows/import.md", + "gsd-core/workflows/inbox.md", + "gsd-core/workflows/ingest-docs.md", + "gsd-core/workflows/insert-phase.md", + "gsd-core/workflows/list-phase-assumptions.md", + "gsd-core/workflows/list-seeds.md", + "gsd-core/workflows/list-workspaces.md", + "gsd-core/workflows/manager.md", + "gsd-core/workflows/map-codebase.md", + "gsd-core/workflows/milestone-summary.md", + "gsd-core/workflows/mvp-phase.md", + "gsd-core/workflows/new-milestone.md", + "gsd-core/workflows/new-project.md", + "gsd-core/workflows/new-workspace.md", + "gsd-core/workflows/next.md", + "gsd-core/workflows/node-repair.md", + "gsd-core/workflows/note.md", + "gsd-core/workflows/onboard.md", + "gsd-core/workflows/pause-work.md", + "gsd-core/workflows/plan-milestone-gaps.md", + "gsd-core/workflows/plan-phase.md", + "gsd-core/workflows/plan-phase/steps/closed-phase-gate.md", + "gsd-core/workflows/plan-phase/steps/prd-express-path.md", + "gsd-core/workflows/plan-phase/steps/windows-troubleshooting.md", + "gsd-core/workflows/plan-review-convergence.md", + "gsd-core/workflows/plant-seed.md", + "gsd-core/workflows/pr-branch.md", + "gsd-core/workflows/profile-user.md", + "gsd-core/workflows/progress.md", + "gsd-core/workflows/quick.md", + "gsd-core/workflows/reapply-patches.md", + "gsd-core/workflows/remove-phase.md", + "gsd-core/workflows/remove-workspace.md", + "gsd-core/workflows/resume-project.md", + "gsd-core/workflows/review.md", + "gsd-core/workflows/scan.md", + "gsd-core/workflows/secure-phase.md", + "gsd-core/workflows/session-report.md", + "gsd-core/workflows/settings-advanced.md", + "gsd-core/workflows/settings-integrations.md", + "gsd-core/workflows/settings.md", + "gsd-core/workflows/ship.md", + "gsd-core/workflows/sketch-wrap-up.md", + "gsd-core/workflows/sketch.md", + "gsd-core/workflows/smart-entry.md", + "gsd-core/workflows/spec-phase.md", + "gsd-core/workflows/spike-wrap-up.md", + "gsd-core/workflows/spike.md", + "gsd-core/workflows/stats.md", + "gsd-core/workflows/sync-skills.md", + "gsd-core/workflows/thread.md", + "gsd-core/workflows/transition.md", + "gsd-core/workflows/ui-phase.md", + "gsd-core/workflows/ui-review.md", + "gsd-core/workflows/ultraplan-phase.md", + "gsd-core/workflows/undo.md", + "gsd-core/workflows/update.md", + "gsd-core/workflows/validate-phase.md", + "gsd-core/workflows/verify-phase.md", + "gsd-core/workflows/verify-work.md", + "hooks/gsd-windsurf-pre-command.js", + "hooks/gsd-windsurf-pre-write.js", + "scripts/changeset/README.md", + "scripts/changeset/cli.cjs", + "scripts/changeset/github-release-notes.cjs", + "scripts/changeset/lint.cjs", + "scripts/changeset/new.cjs", + "scripts/changeset/parse.cjs", + "scripts/changeset/render.cjs", + "scripts/changeset/serialize.cjs", + "scripts/fix-slash-commands.cjs", + "scripts/gen-capability-registry.cjs", + "scripts/gen-loop-host-contract.cjs", + "scripts/lib/allowlist-ratchet.cjs", + "scripts/lib/cli-exit.cjs" +] diff --git a/tests/fixtures/install-tree/zcode.json b/tests/fixtures/install-tree/zcode.json new file mode 100644 index 000000000..fc10b6b55 --- /dev/null +++ b/tests/fixtures/install-tree/zcode.json @@ -0,0 +1,470 @@ +[ + ".gsd-profile", + ".gsd/defaults.json", + "agents/gsd-advisor-researcher.md", + "agents/gsd-ai-researcher.md", + "agents/gsd-assumptions-analyzer.md", + "agents/gsd-code-fixer.md", + "agents/gsd-code-reviewer.md", + "agents/gsd-codebase-mapper.md", + "agents/gsd-debug-session-manager.md", + "agents/gsd-debugger.md", + "agents/gsd-doc-classifier.md", + "agents/gsd-doc-synthesizer.md", + "agents/gsd-doc-verifier.md", + "agents/gsd-doc-writer.md", + "agents/gsd-domain-researcher.md", + "agents/gsd-eval-auditor.md", + "agents/gsd-eval-planner.md", + "agents/gsd-executor.md", + "agents/gsd-framework-selector.md", + "agents/gsd-integration-checker.md", + "agents/gsd-intel-updater.md", + "agents/gsd-mempalace-curator.md", + "agents/gsd-nyquist-auditor.md", + "agents/gsd-pattern-mapper.md", + "agents/gsd-phase-researcher.md", + "agents/gsd-plan-checker.md", + "agents/gsd-planner.md", + "agents/gsd-project-researcher.md", + "agents/gsd-research-synthesizer.md", + "agents/gsd-roadmapper.md", + "agents/gsd-security-auditor.md", + "agents/gsd-ui-auditor.md", + "agents/gsd-ui-checker.md", + "agents/gsd-ui-researcher.md", + "agents/gsd-user-profiler.md", + "agents/gsd-verifier.md", + "commands/gsd-add-tests.md", + "commands/gsd-ai-integration-phase.md", + "commands/gsd-audit-fix.md", + "commands/gsd-audit-milestone.md", + "commands/gsd-audit-uat.md", + "commands/gsd-autonomous.md", + "commands/gsd-capture.md", + "commands/gsd-cleanup.md", + "commands/gsd-code-review.md", + "commands/gsd-complete-milestone.md", + "commands/gsd-config.md", + "commands/gsd-debug.md", + "commands/gsd-discuss-phase.md", + "commands/gsd-docs-update.md", + "commands/gsd-eval-review.md", + "commands/gsd-execute-phase.md", + "commands/gsd-explore.md", + "commands/gsd-extract-learnings.md", + "commands/gsd-fast.md", + "commands/gsd-forensics.md", + "commands/gsd-graphify.md", + "commands/gsd-health.md", + "commands/gsd-help.md", + "commands/gsd-import.md", + "commands/gsd-inbox.md", + "commands/gsd-ingest-docs.md", + "commands/gsd-manager.md", + "commands/gsd-map-codebase.md", + "commands/gsd-mempalace-capture.md", + "commands/gsd-mempalace-recall.md", + "commands/gsd-milestone-summary.md", + "commands/gsd-mvp-phase.md", + "commands/gsd-new-milestone.md", + "commands/gsd-new-project.md", + "commands/gsd-next.md", + "commands/gsd-ns-context.md", + "commands/gsd-ns-ideate.md", + "commands/gsd-ns-manage.md", + "commands/gsd-ns-project.md", + "commands/gsd-ns-review.md", + "commands/gsd-ns-workflow.md", + "commands/gsd-onboard.md", + "commands/gsd-pause-work.md", + "commands/gsd-phase.md", + "commands/gsd-plan-phase.md", + "commands/gsd-plan-review-convergence.md", + "commands/gsd-pr-branch.md", + "commands/gsd-profile-user.md", + "commands/gsd-progress.md", + "commands/gsd-quick.md", + "commands/gsd-resume-work.md", + "commands/gsd-review-backlog.md", + "commands/gsd-review.md", + "commands/gsd-secure-phase.md", + "commands/gsd-settings.md", + "commands/gsd-ship.md", + "commands/gsd-sketch.md", + "commands/gsd-spec-phase.md", + "commands/gsd-spike.md", + "commands/gsd-stats.md", + "commands/gsd-surface.md", + "commands/gsd-thread.md", + "commands/gsd-ui-phase.md", + "commands/gsd-ui-review.md", + "commands/gsd-ultraplan-phase.md", + "commands/gsd-undo.md", + "commands/gsd-update.md", + "commands/gsd-validate-phase.md", + "commands/gsd-verify-work.md", + "commands/gsd-workspace.md", + "commands/gsd-workstreams.md", + "gsd-core/VERSION", + "gsd-core/bin/check-latest-version.cjs", + "gsd-core/bin/ensure-runtime-build.cjs", + "gsd-core/bin/gsd-tools.cjs", + "gsd-core/bin/gsd_run", + "gsd-core/bin/shared/config-defaults.manifest.json", + "gsd-core/bin/shared/config-schema.manifest.json", + "gsd-core/bin/shared/model-catalog.json", + "gsd-core/bin/shared/runtime-aliases.manifest.json", + "gsd-core/bin/verify-reapply-patches.cjs", + "gsd-core/contexts/dev.md", + "gsd-core/contexts/research.md", + "gsd-core/contexts/review.md", + "gsd-core/references/agent-contracts.md", + "gsd-core/references/agent-skills-bootstrap.md", + "gsd-core/references/ai-evals.md", + "gsd-core/references/ai-frameworks.md", + "gsd-core/references/api-coverage.md", + "gsd-core/references/artifact-types.md", + "gsd-core/references/autonomous-smart-discuss.md", + "gsd-core/references/checkpoints.md", + "gsd-core/references/common-bug-patterns.md", + "gsd-core/references/context-budget.md", + "gsd-core/references/continuation-format.md", + "gsd-core/references/debugger-philosophy.md", + "gsd-core/references/decimal-phase-calculation.md", + "gsd-core/references/doc-conflict-engine.md", + "gsd-core/references/domain-probes.md", + "gsd-core/references/edge-probe-fixtures/01-round-half-even/expected-coverage.json", + "gsd-core/references/edge-probe-fixtures/01-round-half-even/requirements.json", + "gsd-core/references/edge-probe-fixtures/02-merge-intervals/expected-coverage.json", + "gsd-core/references/edge-probe-fixtures/02-merge-intervals/requirements.json", + "gsd-core/references/edge-probe-fixtures/03-truncate-graphemes/expected-coverage.json", + "gsd-core/references/edge-probe-fixtures/03-truncate-graphemes/requirements.json", + "gsd-core/references/edge-probe-fixtures/04-money-rounding/expected-coverage.json", + "gsd-core/references/edge-probe-fixtures/04-money-rounding/requirements.json", + "gsd-core/references/edge-probe-fixtures/05-list-dedupe/expected-coverage.json", + "gsd-core/references/edge-probe-fixtures/05-list-dedupe/requirements.json", + "gsd-core/references/edge-probe-fixtures/06-resolved-mixed/expected-coverage.json", + "gsd-core/references/edge-probe-fixtures/06-resolved-mixed/requirements.json", + "gsd-core/references/edge-probe-fixtures/06-resolved-mixed/resolutions.json", + "gsd-core/references/edge-probe.md", + "gsd-core/references/execute-mvp-tdd.md", + "gsd-core/references/execute-phase-between-wave-reset.md", + "gsd-core/references/execute-phase-context-guard.md", + "gsd-core/references/execute-phase-wave-guard.md", + "gsd-core/references/executor-examples.md", + "gsd-core/references/few-shot-examples/plan-checker.md", + "gsd-core/references/few-shot-examples/verifier.md", + "gsd-core/references/gate-prompts.md", + "gsd-core/references/gates.md", + "gsd-core/references/git-integration.md", + "gsd-core/references/git-planning-commit.md", + "gsd-core/references/gsd-run-resolver.md", + "gsd-core/references/honest-verifier.md", + "gsd-core/references/ios-scaffold.md", + "gsd-core/references/loop-hook-dispatch.md", + "gsd-core/references/mandatory-initial-read.md", + "gsd-core/references/model-profile-resolution.md", + "gsd-core/references/model-profiles.md", + "gsd-core/references/mvp-concepts.md", + "gsd-core/references/phase-argument-parsing.md", + "gsd-core/references/planner-antipatterns.md", + "gsd-core/references/planner-chunked.md", + "gsd-core/references/planner-gap-closure.md", + "gsd-core/references/planner-graphify-auto-update.md", + "gsd-core/references/planner-guidance.md", + "gsd-core/references/planner-human-verify-mode.md", + "gsd-core/references/planner-interface-context.md", + "gsd-core/references/planner-load-graph-context.md", + "gsd-core/references/planner-mvp-mode.md", + "gsd-core/references/planner-reviews.md", + "gsd-core/references/planner-revision.md", + "gsd-core/references/planner-source-audit.md", + "gsd-core/references/planning-config.md", + "gsd-core/references/prohibition-probe-fixtures/01-streak-reminder/expected.json", + "gsd-core/references/prohibition-probe-fixtures/02-clean-utility/expected.json", + "gsd-core/references/prohibition-probe-fixtures/03-multi-prohibition/expected.json", + "gsd-core/references/prohibition-probe.md", + "gsd-core/references/project-skills-discovery.md", + "gsd-core/references/questioning.md", + "gsd-core/references/research-documentation-lookup.md", + "gsd-core/references/research-philosophy.md", + "gsd-core/references/research-verification-protocol.md", + "gsd-core/references/reviewer-instances.md", + "gsd-core/references/revision-loop.md", + "gsd-core/references/scout-codebase.md", + "gsd-core/references/security-asvs-levels.md", + "gsd-core/references/skeleton-template.md", + "gsd-core/references/sketch-interactivity.md", + "gsd-core/references/sketch-theme-system.md", + "gsd-core/references/sketch-tooling.md", + "gsd-core/references/sketch-variant-patterns.md", + "gsd-core/references/specless-probe-fallback.md", + "gsd-core/references/spidr-splitting.md", + "gsd-core/references/tdd.md", + "gsd-core/references/thinking-models-debug.md", + "gsd-core/references/thinking-models-execution.md", + "gsd-core/references/thinking-models-planning.md", + "gsd-core/references/thinking-models-research.md", + "gsd-core/references/thinking-models-verification.md", + "gsd-core/references/thinking-partner.md", + "gsd-core/references/ui-brand.md", + "gsd-core/references/ui-consideration-probe.md", + "gsd-core/references/universal-anti-patterns.md", + "gsd-core/references/untrusted-input-boundary.md", + "gsd-core/references/user-profiling.md", + "gsd-core/references/user-story-template.md", + "gsd-core/references/verification-overrides.md", + "gsd-core/references/verification-patterns.md", + "gsd-core/references/verify-mvp-mode.md", + "gsd-core/references/workstream-flag.md", + "gsd-core/references/worktree-branch-check.md", + "gsd-core/references/worktree-path-safety.md", + "gsd-core/templates/AI-SPEC.md", + "gsd-core/templates/DEBUG.md", + "gsd-core/templates/README.md", + "gsd-core/templates/SECURITY.md", + "gsd-core/templates/UAT.md", + "gsd-core/templates/UI-SPEC.md", + "gsd-core/templates/VALIDATION.md", + "gsd-core/templates/claude-md.md", + "gsd-core/templates/codebase/architecture.md", + "gsd-core/templates/codebase/concerns.md", + "gsd-core/templates/codebase/conventions.md", + "gsd-core/templates/codebase/integrations.md", + "gsd-core/templates/codebase/stack.md", + "gsd-core/templates/codebase/structure.md", + "gsd-core/templates/codebase/testing.md", + "gsd-core/templates/config.json", + "gsd-core/templates/context.md", + "gsd-core/templates/continue-here.md", + "gsd-core/templates/copilot-instructions.md", + "gsd-core/templates/debug-subagent-prompt.md", + "gsd-core/templates/dev-preferences.md", + "gsd-core/templates/discovery.md", + "gsd-core/templates/discussion-log.md", + "gsd-core/templates/milestone-archive.md", + "gsd-core/templates/milestone.md", + "gsd-core/templates/phase-prompt.md", + "gsd-core/templates/planner-subagent-prompt.md", + "gsd-core/templates/project.md", + "gsd-core/templates/requirements.md", + "gsd-core/templates/research-project/ARCHITECTURE.md", + "gsd-core/templates/research-project/FEATURES.md", + "gsd-core/templates/research-project/PITFALLS.md", + "gsd-core/templates/research-project/STACK.md", + "gsd-core/templates/research-project/SUMMARY.md", + "gsd-core/templates/research.md", + "gsd-core/templates/retrospective.md", + "gsd-core/templates/roadmap.md", + "gsd-core/templates/spec.md", + "gsd-core/templates/state.md", + "gsd-core/templates/summary-complex.md", + "gsd-core/templates/summary-minimal.md", + "gsd-core/templates/summary-standard.md", + "gsd-core/templates/summary.md", + "gsd-core/templates/user-profile.md", + "gsd-core/templates/user-setup.md", + "gsd-core/templates/verification-report.md", + "gsd-core/workflows/_runtime-launcher.snippet.sh", + "gsd-core/workflows/add-backlog.md", + "gsd-core/workflows/add-phase.md", + "gsd-core/workflows/add-tests.md", + "gsd-core/workflows/add-todo.md", + "gsd-core/workflows/ai-integration-phase.md", + "gsd-core/workflows/analyze-dependencies.md", + "gsd-core/workflows/audit-fix.md", + "gsd-core/workflows/audit-milestone.md", + "gsd-core/workflows/audit-uat.md", + "gsd-core/workflows/autonomous.md", + "gsd-core/workflows/check-todos.md", + "gsd-core/workflows/cleanup.md", + "gsd-core/workflows/code-review-fix.md", + "gsd-core/workflows/code-review.md", + "gsd-core/workflows/complete-milestone.md", + "gsd-core/workflows/debug.md", + "gsd-core/workflows/diagnose-issues.md", + "gsd-core/workflows/discovery-phase.md", + "gsd-core/workflows/discuss-phase-assumptions.md", + "gsd-core/workflows/discuss-phase-power.md", + "gsd-core/workflows/discuss-phase.md", + "gsd-core/workflows/discuss-phase/modes/advisor.md", + "gsd-core/workflows/discuss-phase/modes/all.md", + "gsd-core/workflows/discuss-phase/modes/analyze.md", + "gsd-core/workflows/discuss-phase/modes/auto.md", + "gsd-core/workflows/discuss-phase/modes/batch.md", + "gsd-core/workflows/discuss-phase/modes/chain.md", + "gsd-core/workflows/discuss-phase/modes/default.md", + "gsd-core/workflows/discuss-phase/modes/power.md", + "gsd-core/workflows/discuss-phase/modes/text.md", + "gsd-core/workflows/discuss-phase/templates/checkpoint.json", + "gsd-core/workflows/discuss-phase/templates/context.md", + "gsd-core/workflows/discuss-phase/templates/discussion-log.md", + "gsd-core/workflows/do.md", + "gsd-core/workflows/docs-update.md", + "gsd-core/workflows/edit-phase.md", + "gsd-core/workflows/eval-review.md", + "gsd-core/workflows/execute-phase.md", + "gsd-core/workflows/execute-phase/steps/codebase-drift-gate.md", + "gsd-core/workflows/execute-phase/steps/per-plan-worktree-gate.md", + "gsd-core/workflows/execute-phase/steps/post-merge-gate.md", + "gsd-core/workflows/execute-phase/steps/regression-gate.md", + "gsd-core/workflows/execute-phase/steps/worktree-recovery-policy.md", + "gsd-core/workflows/execute-plan.md", + "gsd-core/workflows/explore.md", + "gsd-core/workflows/extract-learnings.md", + "gsd-core/workflows/fast.md", + "gsd-core/workflows/forensics.md", + "gsd-core/workflows/graduation.md", + "gsd-core/workflows/health.md", + "gsd-core/workflows/help.md", + "gsd-core/workflows/help/modes/brief.md", + "gsd-core/workflows/help/modes/default.md", + "gsd-core/workflows/help/modes/full.md", + "gsd-core/workflows/help/modes/topic.md", + "gsd-core/workflows/import.md", + "gsd-core/workflows/inbox.md", + "gsd-core/workflows/ingest-docs.md", + "gsd-core/workflows/insert-phase.md", + "gsd-core/workflows/list-phase-assumptions.md", + "gsd-core/workflows/list-seeds.md", + "gsd-core/workflows/list-workspaces.md", + "gsd-core/workflows/manager.md", + "gsd-core/workflows/map-codebase.md", + "gsd-core/workflows/milestone-summary.md", + "gsd-core/workflows/mvp-phase.md", + "gsd-core/workflows/new-milestone.md", + "gsd-core/workflows/new-project.md", + "gsd-core/workflows/new-workspace.md", + "gsd-core/workflows/next.md", + "gsd-core/workflows/node-repair.md", + "gsd-core/workflows/note.md", + "gsd-core/workflows/onboard.md", + "gsd-core/workflows/pause-work.md", + "gsd-core/workflows/plan-milestone-gaps.md", + "gsd-core/workflows/plan-phase.md", + "gsd-core/workflows/plan-phase/steps/closed-phase-gate.md", + "gsd-core/workflows/plan-phase/steps/prd-express-path.md", + "gsd-core/workflows/plan-phase/steps/windows-troubleshooting.md", + "gsd-core/workflows/plan-review-convergence.md", + "gsd-core/workflows/plant-seed.md", + "gsd-core/workflows/pr-branch.md", + "gsd-core/workflows/profile-user.md", + "gsd-core/workflows/progress.md", + "gsd-core/workflows/quick.md", + "gsd-core/workflows/reapply-patches.md", + "gsd-core/workflows/remove-phase.md", + "gsd-core/workflows/remove-workspace.md", + "gsd-core/workflows/resume-project.md", + "gsd-core/workflows/review.md", + "gsd-core/workflows/scan.md", + "gsd-core/workflows/secure-phase.md", + "gsd-core/workflows/session-report.md", + "gsd-core/workflows/settings-advanced.md", + "gsd-core/workflows/settings-integrations.md", + "gsd-core/workflows/settings.md", + "gsd-core/workflows/ship.md", + "gsd-core/workflows/sketch-wrap-up.md", + "gsd-core/workflows/sketch.md", + "gsd-core/workflows/smart-entry.md", + "gsd-core/workflows/spec-phase.md", + "gsd-core/workflows/spike-wrap-up.md", + "gsd-core/workflows/spike.md", + "gsd-core/workflows/stats.md", + "gsd-core/workflows/sync-skills.md", + "gsd-core/workflows/thread.md", + "gsd-core/workflows/transition.md", + "gsd-core/workflows/ui-phase.md", + "gsd-core/workflows/ui-review.md", + "gsd-core/workflows/ultraplan-phase.md", + "gsd-core/workflows/undo.md", + "gsd-core/workflows/update.md", + "gsd-core/workflows/validate-phase.md", + "gsd-core/workflows/verify-phase.md", + "gsd-core/workflows/verify-work.md", + "scripts/changeset/README.md", + "scripts/changeset/cli.cjs", + "scripts/changeset/github-release-notes.cjs", + "scripts/changeset/lint.cjs", + "scripts/changeset/new.cjs", + "scripts/changeset/parse.cjs", + "scripts/changeset/render.cjs", + "scripts/changeset/serialize.cjs", + "scripts/fix-slash-commands.cjs", + "scripts/gen-capability-registry.cjs", + "scripts/gen-loop-host-contract.cjs", + "scripts/lib/allowlist-ratchet.cjs", + "scripts/lib/cli-exit.cjs", + "skills/gsd-ns-context/SKILL.md", + "skills/gsd-ns-context/skills/docs-update/SKILL.md", + "skills/gsd-ns-context/skills/extract-learnings/SKILL.md", + "skills/gsd-ns-context/skills/graphify/SKILL.md", + "skills/gsd-ns-context/skills/map-codebase/SKILL.md", + "skills/gsd-ns-context/skills/mempalace-capture/SKILL.md", + "skills/gsd-ns-context/skills/mempalace-recall/SKILL.md", + "skills/gsd-ns-ideate/SKILL.md", + "skills/gsd-ns-ideate/skills/capture/SKILL.md", + "skills/gsd-ns-ideate/skills/explore/SKILL.md", + "skills/gsd-ns-ideate/skills/sketch/SKILL.md", + "skills/gsd-ns-ideate/skills/spec-phase/SKILL.md", + "skills/gsd-ns-ideate/skills/spike/SKILL.md", + "skills/gsd-ns-manage/SKILL.md", + "skills/gsd-ns-manage/skills/cleanup/SKILL.md", + "skills/gsd-ns-manage/skills/config/SKILL.md", + "skills/gsd-ns-manage/skills/health/SKILL.md", + "skills/gsd-ns-manage/skills/help/SKILL.md", + "skills/gsd-ns-manage/skills/inbox/SKILL.md", + "skills/gsd-ns-manage/skills/manager/SKILL.md", + "skills/gsd-ns-manage/skills/pause-work/SKILL.md", + "skills/gsd-ns-manage/skills/pr-branch/SKILL.md", + "skills/gsd-ns-manage/skills/resume-work/SKILL.md", + "skills/gsd-ns-manage/skills/settings/SKILL.md", + "skills/gsd-ns-manage/skills/ship/SKILL.md", + "skills/gsd-ns-manage/skills/stats/SKILL.md", + "skills/gsd-ns-manage/skills/surface/SKILL.md", + "skills/gsd-ns-manage/skills/thread/SKILL.md", + "skills/gsd-ns-manage/skills/undo/SKILL.md", + "skills/gsd-ns-manage/skills/update/SKILL.md", + "skills/gsd-ns-manage/skills/workspace/SKILL.md", + "skills/gsd-ns-manage/skills/workstreams/SKILL.md", + "skills/gsd-ns-project/SKILL.md", + "skills/gsd-ns-project/skills/audit-milestone/SKILL.md", + "skills/gsd-ns-project/skills/complete-milestone/SKILL.md", + "skills/gsd-ns-project/skills/import/SKILL.md", + "skills/gsd-ns-project/skills/ingest-docs/SKILL.md", + "skills/gsd-ns-project/skills/milestone-summary/SKILL.md", + "skills/gsd-ns-project/skills/new-milestone/SKILL.md", + "skills/gsd-ns-project/skills/new-project/SKILL.md", + "skills/gsd-ns-project/skills/onboard/SKILL.md", + "skills/gsd-ns-project/skills/profile-user/SKILL.md", + "skills/gsd-ns-project/skills/review-backlog/SKILL.md", + "skills/gsd-ns-review/SKILL.md", + "skills/gsd-ns-review/skills/audit-fix/SKILL.md", + "skills/gsd-ns-review/skills/audit-uat/SKILL.md", + "skills/gsd-ns-review/skills/code-review/SKILL.md", + "skills/gsd-ns-review/skills/debug/SKILL.md", + "skills/gsd-ns-review/skills/eval-review/SKILL.md", + "skills/gsd-ns-review/skills/forensics/SKILL.md", + "skills/gsd-ns-review/skills/review/SKILL.md", + "skills/gsd-ns-review/skills/secure-phase/SKILL.md", + "skills/gsd-ns-review/skills/ui-phase/SKILL.md", + "skills/gsd-ns-review/skills/ui-review/SKILL.md", + "skills/gsd-ns-review/skills/validate-phase/SKILL.md", + "skills/gsd-ns-workflow/SKILL.md", + "skills/gsd-ns-workflow/skills/add-tests/SKILL.md", + "skills/gsd-ns-workflow/skills/ai-integration-phase/SKILL.md", + "skills/gsd-ns-workflow/skills/autonomous/SKILL.md", + "skills/gsd-ns-workflow/skills/discuss-phase/SKILL.md", + "skills/gsd-ns-workflow/skills/execute-phase/SKILL.md", + "skills/gsd-ns-workflow/skills/fast/SKILL.md", + "skills/gsd-ns-workflow/skills/mvp-phase/SKILL.md", + "skills/gsd-ns-workflow/skills/next/SKILL.md", + "skills/gsd-ns-workflow/skills/phase/SKILL.md", + "skills/gsd-ns-workflow/skills/plan-phase/SKILL.md", + "skills/gsd-ns-workflow/skills/plan-review-convergence/SKILL.md", + "skills/gsd-ns-workflow/skills/progress/SKILL.md", + "skills/gsd-ns-workflow/skills/quick/SKILL.md", + "skills/gsd-ns-workflow/skills/spec-phase/SKILL.md", + "skills/gsd-ns-workflow/skills/ultraplan-phase/SKILL.md", + "skills/gsd-ns-workflow/skills/verify-work/SKILL.md" +] diff --git a/tests/golden-install-tree.test.cjs b/tests/golden-install-tree.test.cjs new file mode 100644 index 000000000..5ea28e564 --- /dev/null +++ b/tests/golden-install-tree.test.cjs @@ -0,0 +1,148 @@ +'use strict'; + +/** + * golden-install-tree.test.cjs — file-set snapshot layer (#2267 Phase 2). + * + * Companion to tests/golden-install-parity.test.cjs. That harness hashes file + * CONTENT (catches a byte changing); this harness snapshots only the SORTED + * LIST of emitted relative paths (catches a file appearing/disappearing). + * Because it carries no hashes, a legitimate content-only change produces NO + * diff here at all, and a file being added/removed produces a small, clean, + * reviewable diff instead of hash noise. Both harnesses reuse the exact same + * exclusion set (buildParityManifest, tests/helpers/install-shared.cjs, + * #2266) via buildInstallTree, so the two can never diverge on which files + * they cover. + * + * ## UPDATE mode + * + * Run with UPDATE_INSTALL_TREE=1 to (re-)capture fixtures: + * UPDATE_INSTALL_TREE=1 node --test tests/golden-install-tree.test.cjs + */ + +const { test, before } = require('node:test'); +const assert = require('node:assert/strict'); +const fs = require('node:fs'); +const path = require('node:path'); +const { execFileSync } = require('node:child_process'); + +const { cleanup } = require('./helpers.cjs'); +const { RUNTIME_META, runMinimalInstall, BUILD_SCRIPT, buildInstallTree } = require('./helpers/install-shared.cjs'); + +// hooks/dist is gitignored and built (DEFECT.HOOKS-DIST-SCOPED-CI). The scoped +// CI test lane does not run build:hooks, so a real install there emits no hooks/ +// dir — making the harness report "removed (N) hooks/…". Build it idempotently +// here so the harness is lane-independent (mirrors golden-install-parity.test.cjs). +before(() => { + execFileSync(process.execPath, [BUILD_SCRIPT], { encoding: 'utf-8', stdio: 'pipe' }); +}); + +const UPDATE = process.env.UPDATE_INSTALL_TREE === '1'; + +const FIXTURE_DIR = path.join(__dirname, 'fixtures', 'install-tree'); + +// buildInstallTree (tests/helpers/install-shared.cjs) reuses buildParityManifest's +// exact exclusion constants (VOLATILE_FILES, HOOK_CONFIG_FILES, +// HOOK_CONFIG_RELATIVE_PATHS, EXCLUDED_PREFIXES) — see that module for the full +// rationale behind each exclusion. + +// Ensure the fixture directory exists (needed for UPDATE mode) +if (UPDATE) { + fs.mkdirSync(FIXTURE_DIR, { recursive: true }); +} + +function diffTree(actual, fixture) { + const fixtureSet = new Set(fixture); + const actualSet = new Set(actual); + const added = actual.filter((p) => !fixtureSet.has(p)); + const removed = fixture.filter((p) => !actualSet.has(p)); + return { added, removed }; +} + +const runtimes = Object.keys(RUNTIME_META); + +for (const runtime of runtimes) { + test(`install tree — ${runtime}`, async (t) => { + if (process.platform === 'win32') { + t.skip('install output is platform-specific on Windows (backslash paths); parity is asserted on macOS + Linux'); + return; + } + const { configDir, root } = runMinimalInstall({ runtime, scope: 'global' }); + let actual; + try { + actual = buildInstallTree(configDir, root); + } finally { + cleanup(root); + } + + const fixturePath = path.join(FIXTURE_DIR, `${runtime}.json`); + + if (UPDATE) { + fs.writeFileSync(fixturePath, JSON.stringify(actual, null, 2) + '\n', 'utf8'); + process.stdout.write(` [UPDATE] ${runtime}: wrote ${actual.length} paths → ${fixturePath}\n`); + return; + } + + // Assert mode: compare against golden fixture + if (!fs.existsSync(fixturePath)) { + assert.fail( + `Install-tree fixture missing for runtime '${runtime}': ${fixturePath}\n` + + 'Run UPDATE_INSTALL_TREE=1 node --test tests/golden-install-tree.test.cjs to capture.' + ); + } + + const fixture = JSON.parse(fs.readFileSync(fixturePath, 'utf8')); + + const { added, removed } = diffTree(actual, fixture); + + if (added.length > 0 || removed.length > 0) { + const lines = [`Install-tree mismatch for runtime '${runtime}':`]; + if (added.length) lines.push(` added (${added.length}): ${added.join(', ')}`); + if (removed.length) lines.push(` removed (${removed.length}): ${removed.join(', ')}`); + lines.push('Run UPDATE_INSTALL_TREE=1 to recapture if the change is intentional.'); + assert.deepEqual(actual, fixture, lines.join('\n')); + } + }); +} + +// #2086 (EoS/claude): claude is the reference host and the ONLY runtime with a +// distinct LOCAL "legacy flat-commands" layout (commands/gsd-*.md + agents/gsd-*.md). +// The loop above snapshots the GLOBAL skills layout; this snapshots the LOCAL +// commands/agents layout's file set too (mirrors golden-install-parity.test.cjs). +test('install tree — claude (local legacy layout)', async (t) => { + if (process.platform === 'win32') { + t.skip('install output is platform-specific on Windows (backslash paths); parity is asserted on macOS + Linux'); + return; + } + const { configDir, root } = runMinimalInstall({ runtime: 'claude', scope: 'local' }); + let actual; + try { + actual = buildInstallTree(configDir, root); + } finally { + cleanup(root); + } + + const fixturePath = path.join(FIXTURE_DIR, 'claude-local.json'); + + if (UPDATE) { + fs.writeFileSync(fixturePath, JSON.stringify(actual, null, 2) + '\n', 'utf8'); + process.stdout.write(` [UPDATE] claude-local: wrote ${actual.length} paths → ${fixturePath}\n`); + return; + } + + if (!fs.existsSync(fixturePath)) { + assert.fail( + `Install-tree fixture missing for claude-local: ${fixturePath}\n` + + 'Run UPDATE_INSTALL_TREE=1 node --test tests/golden-install-tree.test.cjs to capture.', + ); + } + + const fixture = JSON.parse(fs.readFileSync(fixturePath, 'utf8')); + const { added, removed } = diffTree(actual, fixture); + if (added.length || removed.length) { + const lines = ['Install-tree mismatch for claude-local:']; + if (added.length) lines.push(` added (${added.length}): ${added.join(', ')}`); + if (removed.length) lines.push(` removed (${removed.length}): ${removed.join(', ')}`); + lines.push('Run UPDATE_INSTALL_TREE=1 to recapture if the change is intentional.'); + assert.deepEqual(actual, fixture, lines.join('\n')); + } +}); diff --git a/tests/helpers/install-shared.cjs b/tests/helpers/install-shared.cjs index 50a6cb08b..694b85776 100644 --- a/tests/helpers/install-shared.cjs +++ b/tests/helpers/install-shared.cjs @@ -227,6 +227,13 @@ function buildParityManifest(configDir, root) { return sorted; } +/** Sorted list of emitted relative paths for a runtime install (file-set snapshot, + * #2267). Reuses buildParityManifest's exact exclusion set so the tree and the + * content manifest never diverge on which files they cover. */ +function buildInstallTree(configDir, root) { + return Object.keys(buildParityManifest(configDir, root)).sort(); +} + function simulateHookCopy(hooksSrc, hooksDest) { fs.mkdirSync(hooksDest, { recursive: true }); for (const entry of fs.readdirSync(hooksSrc)) { @@ -397,6 +404,7 @@ module.exports = { stripAnsi, walk, buildParityManifest, + buildInstallTree, simulateHookCopy, installerEnv, runMinimalInstall,