test(#1971): consolidate 48 gsd-tools CLI regression tests into subcommand suites

Fold 48 issue-named gsd-tools CLI regression files into the canonical test file
that owns each subcommand subject (state, roadmap, phase, milestone, audit, config,
router/dispatch, stats, verify, health, etc.), preserving every assertion and its
origin issue number as provenance (block-scoped describe wrappers, 299 subtests
conserved 1:1). No monolithic gsd-tools.test.cjs created — routes into 18 existing
per-subject suites.

Removes 48 tests/ files. Regenerates regression-name allowlist (271->231), ratchets
the file-count allowlist across 6 buckets (audit/milestone/phase/roadmap/state/verify),
and makes 10 relocated allow-test-rule exemptions issue-ref-compliant (ADR-456; prunes
10 stale ids). Repoints one CONTEXT.md symptom ref and ADR-3524's parity-test ref.
lint:ci green.

Part of epic #1969. Closes #1971.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
Tom Boucher
2026-07-03 01:22:41 -04:00
parent 89ecee06fc
commit de3ba45d00
71 changed files with 10731 additions and 10317 deletions

View File

@@ -25,7 +25,6 @@
"tests/bug-214-phase-researcher-write-truncation-contract.test.cjs :: source-text-is-the-product",
"tests/bug-214-writer-agents-write-truncation-contract.test.cjs :: source-text-is-the-product",
"tests/bug-222-research-synthesizer-write-contract.test.cjs :: source-text-is-the-product",
"tests/bug-224-pick-stdout-capture.test.cjs :: structural-implementation-guard",
"tests/bug-2346-agent-read-loop-guards.test.cjs :: source-text-is-the-product",
"tests/bug-2388-plan-phase-no-branch-rename.test.cjs :: source-text-is-the-product",
"tests/bug-2396-makefile-test-priority.test.cjs :: source-text-is-the-product",
@@ -41,7 +40,6 @@
"tests/bug-2543-gsd-slash-namespace.test.cjs :: structural-regression-guard",
"tests/bug-2549-2550-2552-discuss-phase-context.test.cjs :: source-text-is-the-product",
"tests/bug-2559-stale-search-year.test.cjs :: source-text-is-the-product",
"tests/bug-2661-roadmap-sync-parallel.test.cjs :: source-text-is-the-product",
"tests/bug-2686-review-fix-worktree.test.cjs :: source-text-is-the-product",
"tests/bug-2770-annotate-deps-int-coerce.test.cjs :: source-text-is-the-product",
"tests/bug-2772-gitmodules-path-intersection.test.cjs :: source-text-is-the-product",
@@ -53,7 +51,6 @@
"tests/bug-2954-help-md-slash-command-stubs.test.cjs :: source-text-is-the-product",
"tests/bug-2973-profile-user-skills-path.test.cjs :: source-text-is-the-product. profile-user.md IS the",
"tests/bug-2990-code-fixer-worktree-branch.test.cjs :: source-text-is-the-product",
"tests/bug-3086-git-create-tag-config-gate.test.cjs :: workflow-markdown-is-the-runtime-contract",
"tests/bug-3096-ai-integration-phase-parallel-race.test.cjs :: reads product workflow markdown (ai-integration-phase.md) to verify structural ordering contract — not a source-grep test",
"tests/bug-3097-3099-executor-worktree-path-safety.test.cjs :: reads markdown product files (gsd-executor.md, worktree-path-safety.md) to verify structural protocol — not source-grep",
"tests/bug-3120-secure-phase-empty-register.test.cjs :: reads product workflow markdown (secure-phase.md) to verify structural guard contract — not a source-grep test",
@@ -75,7 +72,6 @@
"tests/bug-3430-planner-phase-contract.test.cjs :: source-text-is-the-product",
"tests/bug-3431-debug-command-yaml.test.cjs :: source-text-is-the-product",
"tests/bug-3446-resume-continue-here-discovery.test.cjs :: source-text-is-the-product",
"tests/bug-3489-complete-phase-idempotent.test.cjs :: source-text-is-the-product",
"tests/bug-3491-nested-git-worktree.test.cjs :: source-text-is-the-product",
"tests/bug-3516-reapply-patches-gsd-update-filter.test.cjs :: source-text-is-the-product",
"tests/bug-3521-quick-cleanup-cwd-pin.test.cjs :: source-text-is-the-product",
@@ -91,7 +87,6 @@
"tests/bug-3683-command-cross-reference-invariant.test.cjs :: source-text-is-the-product",
"tests/bug-3683-workflow-colon-namespace-leak.test.cjs :: source-text-is-the-product",
"tests/bug-3689-resume-glob-nomatch.test.cjs :: source-text-is-the-product",
"tests/bug-3691-annotate-deps-plans-block-variants.test.cjs :: source-text-is-the-product",
"tests/bug-3706-ui-safety-gate-false-positives.test.cjs :: source-text-is-the-product",
"tests/bug-3707-locked-worktree-cleanup.test.cjs :: source-text-is-the-product",
"tests/bug-3727-code-review-fix-flag-dispatch.test.cjs :: source-text-is-the-product",
@@ -99,7 +94,6 @@
"tests/bug-3784-gsd-settings-model-profile-ui-omits-adaptive.test.cjs :: source-text-is-the-product",
"tests/bug-3805-fast-md-log-to-state-schema.test.cjs :: source-text-is-the-product",
"tests/bug-3810-no-gsd-sdk-runtime-refs.test.cjs :: source-text-is-the-product",
"tests/bug-397-state-preserve-executor-authored.test.cjs :: reads runtime STATE.md written to temp dir — behavioral output test, not source-grep",
"tests/bug-444-resolver-local-claude-install.test.cjs :: structural/behavioral regression for the repo-local .claude/ install",
"tests/bug-474-clock-seam-date-determinism.test.cjs :: source-text-is-the-product",
"tests/bug-503-update-agent-antigravity-detection.test.cjs :: source-text-is-the-product",
@@ -116,8 +110,6 @@
"tests/bug-936-no-nested-spawner-wrap.test.cjs :: source-text-is-the-product",
"tests/bug-947-hermes-gsd-prefix.test.cjs :: source-text-is-the-product",
"tests/bug-950-quick-summary-status-complete.test.cjs :: source-text-is-the-product",
"tests/bug-967-verify-key-links-strict-paths.test.cjs :: <runtime-contract-is-the-product> the plan-md.md reference",
"tests/bug-967-verify-key-links-strict-paths.test.cjs :: <runtime-contract-is-the-product> the plan-md.md reference example IS the documented authoring surface for key_links; asserting it uses a file path (not an endpoint) directly tests the documented contract.",
"tests/bug-patterns-reference.test.cjs :: source-text-is-the-product",
"tests/chain-flag-plan-phase.test.cjs :: source-text-is-the-product",
"tests/changeset-cli.test.cjs :: reads a product workflow .md file (not CJS source) to verify",
@@ -162,7 +154,6 @@
"tests/enh-2430-learnings-consumption.test.cjs :: source-text-is-the-product",
"tests/enh-2433-todo-phase-linking.test.cjs :: source-text-is-the-product",
"tests/enh-2446-milestones-drift.test.cjs :: source-text-is-the-product",
"tests/enh-2447-roadmap-wave-deps.test.cjs :: source-text-is-the-product",
"tests/enh-2448-artifact-registry.test.cjs :: source-text-is-the-product",
"tests/enh-2500-codebase-mapper-arch-rich-format.test.cjs :: source-text-is-the-product",
"tests/enh-2789-description-budget.test.cjs :: source-text-is-the-product",
@@ -191,7 +182,6 @@
"tests/feat-22-surfacing-docs.test.cjs :: docs-parity",
"tests/feat-2840-issue-driven-orchestration-guide.test.cjs :: structural-IR parser for a docs guide. The .includes()",
"tests/feat-3039-help-tiered.test.cjs :: source-text-is-the-product",
"tests/feat-3167-ship-pr-body-sections.test.cjs :: source-text-is-the-product",
"tests/feat-3210-fallow-integration.test.cjs :: source-text-is-the-product",
"tests/feat-3210-fallow-integration.test.cjs :: source-text-is-the-product — code-review.md IS the workflow the orchestrator",
"tests/feat-3309-human-verify-mode.test.cjs :: source-text-is-the-product",

View File

@@ -3,14 +3,9 @@
"bug-131-release-tarball-smoke-explicit-home.test.cjs",
"bug-1367-claude-local-flat-command-layout.test.cjs",
"bug-14-progress-auto-flag-dropped.test.cjs",
"bug-167-query-meta-command.test.cjs",
"bug-1695-state-patch-clobbers-phase-name.test.cjs",
"bug-17-askuserquestion-option-cap.test.cjs",
"bug-170-workflow-fallback-install-hint.test.cjs",
"bug-1760-state-prune-noop-template-field.test.cjs",
"bug-1761-state-sync-wrong-progress.test.cjs",
"bug-1818-unknown-flags.test.cjs",
"bug-1826-phases-clear-confirm.test.cjs",
"bug-1829-inherit-model-profile.test.cjs",
"bug-1834-sh-hooks-installed.test.cjs",
"bug-1891-file-resolution.test.cjs",
@@ -26,8 +21,6 @@
"bug-214-phase-researcher-write-truncation-contract.test.cjs",
"bug-214-writer-agents-write-truncation-contract.test.cjs",
"bug-222-research-synthesizer-write-contract.test.cjs",
"bug-224-pick-stdout-capture.test.cjs",
"bug-2268-parallel-discuss.test.cjs",
"bug-2344-read-guard-claudecode-env.test.cjs",
"bug-2346-agent-read-loop-guards.test.cjs",
"bug-2351-intel-kilo-layout.test.cjs",
@@ -57,15 +50,10 @@
"bug-2557-gemini-local-hook-paths.test.cjs",
"bug-2559-stale-search-year.test.cjs",
"bug-260-worktree-path-guard.test.cjs",
"bug-2601-inherit-model-profile.test.cjs",
"bug-261-worktree-force-add-guard.test.cjs",
"bug-2630-state-frontmatter-milestone-switch.test.cjs",
"bug-2638-sub-repos-canonical-location.test.cjs",
"bug-2659-audit-open-crash.test.cjs",
"bug-2660-one-liner-extraction.test.cjs",
"bug-2661-roadmap-sync-parallel.test.cjs",
"bug-2686-review-fix-worktree.test.cjs",
"bug-2769-requirements-header-variants.test.cjs",
"bug-2770-annotate-deps-int-coerce.test.cjs",
"bug-2772-gitmodules-path-intersection.test.cjs",
"bug-2784-update-cache-clear-path.test.cjs",
@@ -78,10 +66,8 @@
"bug-2851-workflow-bare-gsd-tools.test.cjs",
"bug-2866-codex-strip-no-trailing-newline.test.cjs",
"bug-2876-skill-frontmatter-quote.test.cjs",
"bug-2911-audit-open-output-shape.test.cjs",
"bug-2912-progress-context-authority.test.cjs",
"bug-2916-handle-branching-default-base.test.cjs",
"bug-2942-detect-custom-skills.test.cjs",
"bug-2943-config-get-context-window-default.test.cjs",
"bug-2948-spike-wrap-up-dispatch.test.cjs",
"bug-2949-sketch-wrap-up-dispatch.test.cjs",
@@ -99,7 +85,6 @@
"bug-3054-stale-gsd-next-references.test.cjs",
"bug-3072-optional-sketch-findings-guard.test.cjs",
"bug-3083-resume-route-clear.test.cjs",
"bug-3086-git-create-tag-config-gate.test.cjs",
"bug-3087-planner-directive-language.test.cjs",
"bug-3096-ai-integration-phase-parallel-race.test.cjs",
"bug-3097-3099-executor-worktree-path-safety.test.cjs",
@@ -110,22 +95,15 @@
"bug-3129-validate-commit-git-bypass.test.cjs",
"bug-3130-update-npx-robust-invocation.test.cjs",
"bug-3135-capture-backlog-workflow.test.cjs",
"bug-3150-stats-json-decimal-phase-gaps.test.cjs",
"bug-3156-plan-phase-opencode-dispatch.test.cjs",
"bug-3163-codex-agents-md.test.cjs",
"bug-3168-task-to-agent-rename.test.cjs",
"bug-3195-quick-resurrection-guard.test.cjs",
"bug-3197-gsd-tools-config-whitelist.test.cjs",
"bug-321-config-defaults-clone-strategy.test.cjs",
"bug-3212-execute-phase-stall-safe-resume.test.cjs",
"bug-3227-config-set-model-overrides.test.cjs",
"bug-3236-capture-seed-one-shot.test.cjs",
"bug-3242-state-update-progress-trample.test.cjs",
"bug-3243-dotted-command-form.test.cjs",
"bug-3257-nested-plans-undercount.test.cjs",
"bug-3258-no-stale-gsd-intel-references.test.cjs",
"bug-3275-fmstr-non-string-scalars.test.cjs",
"bug-3286-state-write-routing.test.cjs",
"bug-3290-intel-updater-layout-block.test.cjs",
"bug-33-settings-model-profile-adaptive.test.cjs",
"bug-3320-planner-deep-work-rules.test.cjs",
@@ -141,25 +119,19 @@
"bug-3442-codex-legacy-hooks-json-migration.test.cjs",
"bug-3442-shim-projection-drift-guard.test.cjs",
"bug-3446-resume-continue-here-discovery.test.cjs",
"bug-3454-state-dollar-backreference-growth.test.cjs",
"bug-3489-complete-phase-idempotent.test.cjs",
"bug-3491-nested-git-worktree.test.cjs",
"bug-3509-path-spaces.test.cjs",
"bug-3516-reapply-patches-gsd-update-filter.test.cjs",
"bug-3521-quick-cleanup-cwd-pin.test.cjs",
"bug-3523-cjs-loadconfig-branching-strategy-warning.test.cjs",
"bug-3537-padded-id-against-unpadded-roadmap.test.cjs",
"bug-3541-installer-migration-prompt-user-resolution.test.cjs",
"bug-3542-executor-git-stash-prohibition.test.cjs",
"bug-3584-runtime-slash-emitters.test.cjs",
"bug-3584-runtime-slash-formatter.test.cjs",
"bug-3588-npm-audit-clean.test.cjs",
"bug-3599-roadmap-get-phase-project-code-prefix.test.cjs",
"bug-3605-stale-research-insert-phase-agent-refs.test.cjs",
"bug-3608-antigravity-update-runtime-classification.test.cjs",
"bug-3610-installer-migration-bundled-hooks-classification.test.cjs",
"bug-3628-bundled-hook-classifier-whitelist.test.cjs",
"bug-3631-router-raw-flag.test.cjs",
"bug-3657-verify-reapply-patches-pristine-drift.test.cjs",
"bug-3659-applysurface-prune-skill-dirs.test.cjs",
"bug-3668-workflow-runtime-resolution.test.cjs",
@@ -170,7 +142,6 @@
"bug-3683-command-cross-reference-invariant.test.cjs",
"bug-3683-workflow-colon-namespace-leak.test.cjs",
"bug-3689-resume-glob-nomatch.test.cjs",
"bug-3691-annotate-deps-plans-block-variants.test.cjs",
"bug-3706-ui-safety-gate-false-positives.test.cjs",
"bug-3707-locked-worktree-cleanup.test.cjs",
"bug-3727-code-review-fix-flag-dispatch.test.cjs",
@@ -181,17 +152,12 @@
"bug-3805-fast-md-log-to-state-schema.test.cjs",
"bug-3810-no-gsd-sdk-runtime-refs.test.cjs",
"bug-384-agents-runtime-aware.test.cjs",
"bug-397-state-preserve-executor-authored.test.cjs",
"bug-416-archive-dir-null.test.cjs",
"bug-444-resolver-local-claude-install.test.cjs",
"bug-447-gap-analysis-phase-req-ids.test.cjs",
"bug-474-clock-seam-date-determinism.test.cjs",
"bug-492-effort-manifest-fallback.test.cjs",
"bug-500-planned-phase-progress-corruption.test.cjs",
"bug-501-flat-phase-details-milestone-leak.test.cjs",
"bug-503-update-agent-antigravity-detection.test.cjs",
"bug-549-total-phases-overcounts-with-phase-section-heading.test.cjs",
"bug-557-details-summary-milestone-strip.test.cjs",
"bug-571-doc-writer-fix-mode-edit-only.test.cjs",
"bug-580-local-sh-hook-bash-wrapper.test.cjs",
"bug-619-codebase-drift-gate-shim.test.cjs",
@@ -205,20 +171,14 @@
"bug-687-agy-timeout.test.cjs",
"bug-730-milestone-phase-details-scope.test.cjs",
"bug-783-kilo-global-skills-base.test.cjs",
"bug-853-bg-dispatch-runtime-gating.test.cjs",
"bug-866-profile-pipeline-temp-root.test.cjs",
"bug-891-non-claude-runtime-home-fallback.test.cjs",
"bug-892-validate-checklist-roadmap-phases.test.cjs",
"bug-905-state-syncstatefrontmatter-preserve-scalars.test.cjs",
"bug-924-claude-flat-skill-layout.test.cjs",
"bug-925-context-monitor-hook-event-name.test.cjs",
"bug-936-no-nested-spawner-wrap.test.cjs",
"bug-941-managed-hooks-registry-manifest.test.cjs",
"bug-947-hermes-gsd-prefix.test.cjs",
"bug-948-state-noop-write-guard.test.cjs",
"bug-950-quick-summary-status-complete.test.cjs",
"bug-967-verify-key-links-strict-paths.test.cjs",
"bug-969-test-infra-flake-hardening.test.cjs",
"bug-974-graphify-budget-missing-value.test.cjs",
"bug-978-milestone-complete-force.test.cjs"
"bug-974-graphify-budget-missing-value.test.cjs"
]

View File

@@ -5,9 +5,7 @@
"files": [
"audit-command-cutover.test.cjs",
"audit-fix-command.test.cjs",
"bug-2659-audit-open-crash.test.cjs",
"bug-2836-audit-open-summary-uat-drift.test.cjs",
"bug-2911-audit-open-output-shape.test.cjs"
"bug-2836-audit-open-summary-uat-drift.test.cjs"
],
"issue": "192"
},
@@ -49,7 +47,6 @@
"milestone": {
"files": [
"bug-730-milestone-phase-details-scope.test.cjs",
"bug-978-milestone-complete-force.test.cjs",
"milestone-archive.test.cjs",
"milestone-helper.test.cjs",
"milestone-prefixed-convention.test.cjs",
@@ -60,7 +57,6 @@
},
"phase": {
"files": [
"fix-1437-phase-list-plans.test.cjs",
"bug-214-phase-researcher-write-truncation-contract.test.cjs",
"phase-dependency-levels.test.cjs",
"phase.test.cjs"
@@ -69,10 +65,7 @@
},
"roadmap": {
"files": [
"bug-2661-roadmap-sync-parallel.test.cjs",
"bug-3128-roadmap-plan-count-slug-layout.test.cjs",
"bug-3599-roadmap-get-phase-project-code-prefix.test.cjs",
"enh-2447-roadmap-wave-deps.test.cjs",
"roadmap-mode-field.test.cjs",
"roadmap-phase-fallback.test.cjs",
"roadmap.test.cjs"
@@ -99,17 +92,9 @@
"state": {
"files": [
"bug-1695-state-patch-clobbers-phase-name.test.cjs",
"bug-1760-state-prune-noop-template-field.test.cjs",
"bug-1761-state-sync-wrong-progress.test.cjs",
"bug-21-state-md-template-frontmatter.test.cjs",
"bug-2630-state-frontmatter-milestone-switch.test.cjs",
"bug-3127-state-begin-phase-idempotent.test.cjs",
"bug-3242-state-update-progress-trample.test.cjs",
"bug-3286-state-write-routing.test.cjs",
"bug-3454-state-dollar-backreference-growth.test.cjs",
"bug-397-state-preserve-executor-authored.test.cjs",
"bug-905-state-syncstatefrontmatter-preserve-scalars.test.cjs",
"bug-948-state-noop-write-guard.test.cjs",
"state-acquirestatelock-non-eexist.test.cjs",
"state-prune.test.cjs",
"state-rebuild-cli.test.cjs",
@@ -124,7 +109,6 @@
"bug-2994-verify-reapply-patches-installed-path.test.cjs",
"bug-3381-verify-work-workstream.test.cjs",
"bug-3657-verify-reapply-patches-pristine-drift.test.cjs",
"bug-967-verify-key-links-strict-paths.test.cjs",
"verify-health.test.cjs",
"verify-mvp-uat.test.cjs",
"verify-npm-publish.test.cjs",