@opengsd/gsd-core 1.5.0-rc.2 → 1.5.0-rc.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (131) hide show
  1. package/.claude-plugin/plugin.json +1 -1
  2. package/agents/gsd-advisor-researcher.md +1 -1
  3. package/agents/gsd-assumptions-analyzer.md +1 -1
  4. package/agents/gsd-code-fixer.md +1 -1
  5. package/agents/gsd-code-reviewer.md +1 -1
  6. package/agents/gsd-codebase-mapper.md +1 -1
  7. package/agents/gsd-debugger.md +1 -1
  8. package/agents/gsd-doc-writer.md +1 -1
  9. package/agents/gsd-eval-auditor.md +1 -1
  10. package/agents/gsd-executor.md +1 -1
  11. package/agents/gsd-integration-checker.md +1 -1
  12. package/agents/gsd-mempalace-curator.md +47 -0
  13. package/agents/gsd-nyquist-auditor.md +1 -0
  14. package/agents/gsd-phase-researcher.md +1 -1
  15. package/agents/gsd-plan-checker.md +1 -1
  16. package/agents/gsd-planner.md +1 -1
  17. package/agents/gsd-project-researcher.md +1 -1
  18. package/agents/gsd-research-synthesizer.md +1 -1
  19. package/agents/gsd-roadmapper.md +55 -2
  20. package/agents/gsd-security-auditor.md +1 -0
  21. package/agents/gsd-ui-auditor.md +1 -1
  22. package/agents/gsd-ui-checker.md +1 -1
  23. package/agents/gsd-ui-researcher.md +1 -1
  24. package/agents/gsd-verifier.md +13 -2
  25. package/bin/install.js +61 -64
  26. package/commands/gsd/mempalace-capture.md +71 -0
  27. package/commands/gsd/mempalace-recall.md +102 -0
  28. package/commands/gsd/ns-context.md +4 -2
  29. package/commands/gsd/progress.md +2 -1
  30. package/gemini-extension.json +1 -1
  31. package/gsd-core/bin/gsd-tools.cjs +277 -95
  32. package/gsd-core/bin/lib/active-workstream-store.cjs +6 -0
  33. package/gsd-core/bin/lib/capability-activation.cjs +86 -0
  34. package/gsd-core/bin/lib/capability-registry.cjs +1468 -11
  35. package/gsd-core/bin/lib/capability-state.cjs +128 -21
  36. package/gsd-core/bin/lib/capability-writer.cjs +354 -0
  37. package/gsd-core/bin/lib/check-command-router.cjs +328 -1
  38. package/gsd-core/bin/lib/clusters.cjs +2 -0
  39. package/gsd-core/bin/lib/command-roster.cjs +19 -0
  40. package/gsd-core/bin/lib/commands.cjs +33 -10
  41. package/gsd-core/bin/lib/config-loader.cjs +7 -8
  42. package/gsd-core/bin/lib/config-schema.cjs +32 -3
  43. package/gsd-core/bin/lib/config.cjs +81 -26
  44. package/gsd-core/bin/lib/core.cjs +5 -2
  45. package/gsd-core/bin/lib/edge-probe.cjs +25 -2
  46. package/gsd-core/bin/lib/frontmatter.cjs +53 -1
  47. package/gsd-core/bin/lib/git-base-branch.cjs +194 -0
  48. package/gsd-core/bin/lib/init.cjs +36 -11
  49. package/gsd-core/bin/lib/install-profiles.cjs +57 -1
  50. package/gsd-core/bin/lib/installer-migration-report.cjs +1 -0
  51. package/gsd-core/bin/lib/loop-resolver.cjs +157 -16
  52. package/gsd-core/bin/lib/model-resolver.cjs +47 -5
  53. package/gsd-core/bin/lib/phase.cjs +99 -23
  54. package/gsd-core/bin/lib/plan-drift-guard.cjs +117 -0
  55. package/gsd-core/bin/lib/probe-core.cjs +117 -1
  56. package/gsd-core/bin/lib/profile-output.cjs +45 -4
  57. package/gsd-core/bin/lib/profile-pipeline-command-router.cjs +138 -0
  58. package/gsd-core/bin/lib/roadmap-parser.cjs +13 -3
  59. package/gsd-core/bin/lib/roadmap.cjs +97 -7
  60. package/gsd-core/bin/lib/runtime-artifact-conversion.cjs +1946 -0
  61. package/gsd-core/bin/lib/runtime-artifact-layout.cjs +54 -30
  62. package/gsd-core/bin/lib/runtime-config-adapter-registry.cjs +27 -19
  63. package/gsd-core/bin/lib/runtime-homes.cjs +26 -20
  64. package/gsd-core/bin/lib/state-command-router.cjs +15 -3
  65. package/gsd-core/bin/lib/state-document.cjs +46 -1
  66. package/gsd-core/bin/lib/state.cjs +461 -94
  67. package/gsd-core/bin/lib/verify.cjs +92 -8
  68. package/gsd-core/bin/lib/worktree-safety.cjs +2 -1
  69. package/gsd-core/bin/shared/config-defaults.manifest.json +1 -2
  70. package/gsd-core/bin/shared/config-schema.manifest.json +0 -18
  71. package/gsd-core/bin/shared/model-catalog.json +1 -0
  72. package/gsd-core/references/edge-probe.md +11 -0
  73. package/gsd-core/references/loop-hook-dispatch.md +61 -0
  74. package/gsd-core/references/prohibition-probe-fixtures/01-streak-reminder/expected.json +14 -0
  75. package/gsd-core/references/prohibition-probe-fixtures/02-clean-utility/expected.json +4 -0
  76. package/gsd-core/references/prohibition-probe-fixtures/03-multi-prohibition/expected.json +32 -0
  77. package/gsd-core/references/prohibition-probe.md +248 -0
  78. package/gsd-core/templates/config.json +1 -1
  79. package/gsd-core/templates/spec.md +14 -0
  80. package/gsd-core/workflows/audit-milestone.md +5 -3
  81. package/gsd-core/workflows/autonomous.md +10 -5
  82. package/gsd-core/workflows/code-review-fix.md +9 -7
  83. package/gsd-core/workflows/code-review.md +8 -6
  84. package/gsd-core/workflows/complete-milestone.md +1 -5
  85. package/gsd-core/workflows/discuss-phase.md +14 -0
  86. package/gsd-core/workflows/execute-phase.md +86 -146
  87. package/gsd-core/workflows/execute-plan.md +21 -6
  88. package/gsd-core/workflows/help/modes/full.md +7 -1
  89. package/gsd-core/workflows/new-project.md +3 -3
  90. package/gsd-core/workflows/next.md +50 -2
  91. package/gsd-core/workflows/pause-work.md +7 -1
  92. package/gsd-core/workflows/plan-phase.md +91 -221
  93. package/gsd-core/workflows/plan-review-convergence.md +14 -4
  94. package/gsd-core/workflows/pr-branch.md +4 -2
  95. package/gsd-core/workflows/profile-user.md +3 -1
  96. package/gsd-core/workflows/progress.md +58 -1
  97. package/gsd-core/workflows/quick.md +12 -8
  98. package/gsd-core/workflows/resume-project.md +17 -1
  99. package/gsd-core/workflows/review.md +19 -2
  100. package/gsd-core/workflows/secure-phase.md +4 -2
  101. package/gsd-core/workflows/settings-advanced.md +2 -0
  102. package/gsd-core/workflows/settings.md +27 -1
  103. package/gsd-core/workflows/ship.md +58 -5
  104. package/gsd-core/workflows/spec-phase.md +75 -0
  105. package/gsd-core/workflows/validate-phase.md +4 -2
  106. package/gsd-core/workflows/verify-phase.md +14 -4
  107. package/gsd-core/workflows/verify-work.md +27 -11
  108. package/hooks/dist/gsd-ensure-canonical-path.js +305 -0
  109. package/hooks/dist/gsd-statusline.js +1 -1
  110. package/hooks/dist/managed-hooks-registry.cjs +1 -0
  111. package/hooks/gsd-ensure-canonical-path.js +305 -0
  112. package/hooks/gsd-statusline.js +1 -1
  113. package/hooks/hooks.json +1 -0
  114. package/hooks/managed-hooks-registry.cjs +1 -0
  115. package/package.json +5 -4
  116. package/scripts/affected-tests-lib.cjs +16 -4
  117. package/scripts/build-hooks.js +7 -0
  118. package/scripts/changeset/new.cjs +17 -3
  119. package/scripts/fix-slash-commands.cjs +15 -3
  120. package/scripts/gen-capability-registry.cjs +373 -49
  121. package/scripts/gen-inventory-manifest.cjs +1 -4
  122. package/scripts/gen-loop-host-contract.cjs +55 -0
  123. package/scripts/issue-version-gate.cjs +140 -0
  124. package/scripts/lint-allow-test-rule-refs.allowlist.json +327 -0
  125. package/scripts/lint-allow-test-rule-refs.cjs +162 -0
  126. package/scripts/lint-test-file-count.allowlist.json +14 -0
  127. package/scripts/mutation-matrix.cjs +108 -7
  128. package/scripts/pr-target-policy.cjs +63 -0
  129. package/scripts/release-tarball-smoke.cjs +7 -1
  130. package/scripts/research-profiles.cjs +5 -5
  131. package/scripts/run-tests.cjs +178 -17
@@ -449,6 +449,58 @@ function main() {
449
449
  }
450
450
  }
451
451
 
452
+ // ─── Derived single-source-of-truth exports ───────────────────────────────────
453
+
454
+ /**
455
+ * Repo-relative paths to every host-loop workflow file, derived from STEP_WORKFLOWS.
456
+ * This is the ONLY canonical enumeration of host-loop files — all consumers (tests,
457
+ * registry generator, conformance gate) must derive from this rather than maintaining
458
+ * a separate hardcoded list.
459
+ */
460
+ const HOST_LOOP_FILES = STEP_WORKFLOWS.map((w) => 'gsd-core/workflows/' + w.file);
461
+
462
+ /**
463
+ * Pure function: scan a text string for `loop render-hooks <point>` call sites.
464
+ * Returns a Set of matched point strings.
465
+ *
466
+ * @param {string} text Content of a workflow file (or any text).
467
+ * @returns {Set<string>}
468
+ */
469
+ function scanWiredPoints(text) {
470
+ const re = /loop render-hooks\s+([a-z:]+)/g;
471
+ const result = new Set();
472
+ let m;
473
+ while ((m = re.exec(text)) !== null) {
474
+ result.add(m[1]);
475
+ }
476
+ return result;
477
+ }
478
+
479
+ /**
480
+ * Read every host-loop workflow file and return the union of all wired loop points
481
+ * (i.e. points that have a `loop render-hooks <point>` call site).
482
+ *
483
+ * @param {string} [repoRoot] Path to the repository root. Defaults to ROOT.
484
+ * @returns {Set<string>}
485
+ */
486
+ function getWiredLoopPoints(repoRoot) {
487
+ const resolvedRoot = repoRoot !== undefined ? repoRoot : ROOT;
488
+ const result = new Set();
489
+ for (const relPath of HOST_LOOP_FILES) {
490
+ const absPath = path.join(resolvedRoot, relPath);
491
+ let content;
492
+ try {
493
+ content = fs.readFileSync(absPath, 'utf8');
494
+ } catch (err) {
495
+ throw new Error('getWiredLoopPoints: cannot read host-loop file ' + absPath + ': ' + err.message);
496
+ }
497
+ for (const point of scanWiredPoints(content)) {
498
+ result.add(point);
499
+ }
500
+ }
501
+ return result;
502
+ }
503
+
452
504
  // ─── Exports (for tests) ─────────────────────────────────────────────────────
453
505
 
454
506
  module.exports = {
@@ -459,9 +511,12 @@ module.exports = {
459
511
  serializeContract,
460
512
  normalizeLineEndings,
461
513
  STEP_WORKFLOWS,
514
+ HOST_LOOP_FILES,
462
515
  CANONICAL_POINTS,
463
516
  EXPECTED_POINTS_BY_STEP,
464
517
  ROLE_TO_AGENT,
518
+ scanWiredPoints,
519
+ getWiredLoopPoints,
465
520
  };
466
521
 
467
522
  // ─── CLI entry point ──────────────────────────────────────────────────────────
@@ -0,0 +1,140 @@
1
+ #!/usr/bin/env node
2
+ 'use strict';
3
+
4
+ const { PACKAGE_NAME } = require('../gsd-core/bin/lib/package-identity.cjs');
5
+
6
+ /**
7
+ * Version gate for bug-report issues.
8
+ *
9
+ * GitHub Issue Forms enforce `required: true` only in the web form; issues
10
+ * filed via the REST API, `gh issue create`, or automated/AI reporters can
11
+ * omit the GSD Version field entirely. This module provides the pure logic
12
+ * for detecting bug reports missing a usable version so a workflow can
13
+ * auto-close them. See .github/workflows/version-gate.yml.
14
+ */
15
+
16
+ const BUG_LABEL = 'bug';
17
+ const NEEDS_VERSION_LABEL = 'needs-version';
18
+ const VERSION_GATE_MARKER = '<!-- gsd-version-gate -->';
19
+
20
+ // Labels that opt an issue out of the version gate.
21
+ const EXEMPT_LABELS = ['version-exempt'];
22
+
23
+ // Heading GitHub renders for the bug template's `label: GSD Version` field.
24
+ // Issue Forms render input labels as `### <label>`; matches the exact heading
25
+ // `### GSD Version` (any heading level) — bare `### Version` is NOT matched.
26
+ const VERSION_HEADING_RE = /^#{1,6}\s*GSD\s+Version\s*$/i;
27
+
28
+ // GitHub's placeholder for an empty optional form field.
29
+ const NO_RESPONSE_RE = /^_no response_$/i;
30
+
31
+ // A value "looks like a version" if it contains a semver-ish token
32
+ // (1.18, v1.4.1, 1.18.0-dev) or a git commit SHA (7-40 hex chars).
33
+ const SEMVER_TOKEN_RE = /\bv?\d+\.\d+(?:\.\d+)?(?:[-+.][0-9A-Za-z.-]+)?\b/;
34
+ const SHA_TOKEN_RE = /\b[0-9a-f]{7,40}\b/i;
35
+
36
+ function normalizeLabels(labels) {
37
+ if (!Array.isArray(labels)) return [];
38
+ return labels
39
+ .map((l) => (typeof l === 'string' ? l : l && l.name))
40
+ .filter(Boolean)
41
+ .map((l) => String(l).toLowerCase());
42
+ }
43
+
44
+ function hasExemptLabel(labels) {
45
+ const names = normalizeLabels(labels);
46
+ return names.some((l) => EXEMPT_LABELS.includes(l));
47
+ }
48
+
49
+ function isBugReport({ labels, body } = {}) {
50
+ const names = normalizeLabels(labels);
51
+ if (names.includes(BUG_LABEL)) return true;
52
+ // Labels are authoritative: if any label was applied and it isn't `bug`,
53
+ // this is not a bug report (e.g. an `enhancement`-labeled issue that happens
54
+ // to contain a version heading must not be gated). Only fall back to the
55
+ // bug-template's `### GSD Version` heading for fully unlabeled submissions
56
+ // (bare REST API / `gh issue create`).
57
+ if (names.length > 0) return false;
58
+ return hasVersionHeading(body);
59
+ }
60
+
61
+ function hasVersionHeading(body) {
62
+ if (!body) return false;
63
+ return String(body)
64
+ .split(/\r?\n/)
65
+ .some((line) => VERSION_HEADING_RE.test(line));
66
+ }
67
+
68
+ /**
69
+ * Extract the value beneath the "GSD Version" heading. Returns null when the
70
+ * section is absent, '' when the section is present but empty.
71
+ */
72
+ function extractVersion(body) {
73
+ if (!body) return null;
74
+ const lines = String(body).split(/\r?\n/);
75
+ let start = -1;
76
+ for (let i = 0; i < lines.length; i++) {
77
+ if (VERSION_HEADING_RE.test(lines[i])) {
78
+ start = i;
79
+ break;
80
+ }
81
+ }
82
+ if (start === -1) return null;
83
+ const collected = [];
84
+ for (let i = start + 1; i < lines.length; i++) {
85
+ if (/^#{1,6}\s/.test(lines[i])) break; // next section heading
86
+ collected.push(lines[i]);
87
+ }
88
+ return collected.join('\n').trim();
89
+ }
90
+
91
+ function isValidVersion(value) {
92
+ if (value == null) return false;
93
+ const v = String(value).trim();
94
+ if (!v) return false;
95
+ if (NO_RESPONSE_RE.test(v)) return false;
96
+ return SEMVER_TOKEN_RE.test(v) || SHA_TOKEN_RE.test(v);
97
+ }
98
+
99
+ /**
100
+ * Decide what to do with an issue. Returns { action: 'skip'|'close', reason }.
101
+ */
102
+ function evaluateVersionGate({ labels, body } = {}) {
103
+ if (hasExemptLabel(labels)) return { action: 'skip', reason: 'exempt-label' };
104
+ if (!isBugReport({ labels, body })) return { action: 'skip', reason: 'not-a-bug' };
105
+ const version = extractVersion(body);
106
+ if (isValidVersion(version)) return { action: 'skip', reason: 'valid-version' };
107
+ const reason = version == null ? 'missing-version' : 'invalid-version';
108
+ return { action: 'close', reason };
109
+ }
110
+
111
+ function renderCloseComment() {
112
+ return [
113
+ VERSION_GATE_MARKER,
114
+ 'Closing automatically — this bug report does not include a valid **GSD Version**.',
115
+ '',
116
+ 'A version is required to reproduce and triage bugs. Grab it with one of:',
117
+ '',
118
+ '```',
119
+ `npm list -g ${PACKAGE_NAME}`,
120
+ `npx ${PACKAGE_NAME} --version`,
121
+ '```',
122
+ '',
123
+ 'Then **edit this issue to add the version (e.g. `1.18.0`) and reopen it**, or comment with the version and a maintainer will reopen it. If a version genuinely does not apply, a maintainer can add the `version-exempt` label.',
124
+ ].join('\n');
125
+ }
126
+
127
+ module.exports = {
128
+ BUG_LABEL,
129
+ NEEDS_VERSION_LABEL,
130
+ VERSION_GATE_MARKER,
131
+ EXEMPT_LABELS,
132
+ normalizeLabels,
133
+ hasExemptLabel,
134
+ isBugReport,
135
+ hasVersionHeading,
136
+ extractVersion,
137
+ isValidVersion,
138
+ evaluateVersionGate,
139
+ renderCloseComment,
140
+ };
@@ -0,0 +1,327 @@
1
+ [
2
+ "tests/agent-classification-parity.test.cjs :: runtime-contract-is-the-product — docs/AGENTS.md section layout + docs/INVENTORY.md table ARE the classification surface being validated",
3
+ "tests/agent-frontmatter.test.cjs :: source-text-is-the-product",
4
+ "tests/agent-required-reading-consistency.test.cjs :: source-text-is-the-product",
5
+ "tests/agent-size-budget.test.cjs :: source-text-is-the-product",
6
+ "tests/agent-skills-awareness.test.cjs :: source-text-is-the-product",
7
+ "tests/ai-evals.test.cjs :: source-text-is-the-product",
8
+ "tests/analyze-dependencies.test.cjs :: source-text-is-the-product",
9
+ "tests/anti-pattern-enforcement.test.cjs :: source-text-is-the-product",
10
+ "tests/ask-user-questions-fallback.test.cjs :: source-text-is-the-product",
11
+ "tests/audit-fix-command.test.cjs :: source-text-is-the-product",
12
+ "tests/autonomous-allowed-tools.test.cjs :: source-text-is-the-product",
13
+ "tests/autonomous-converge.test.cjs :: source-text-is-the-product",
14
+ "tests/autonomous-decomposition.test.cjs :: source-text-is-the-product",
15
+ "tests/autonomous-interactive.test.cjs :: source-text-is-the-product",
16
+ "tests/autonomous-to-flag.test.cjs :: source-text-is-the-product",
17
+ "tests/bug-131-release-tarball-smoke-explicit-home.test.cjs :: integration-test-input",
18
+ "tests/bug-14-progress-auto-flag-dropped.test.cjs :: source-text-is-the-product",
19
+ "tests/bug-17-askuserquestion-option-cap.test.cjs :: source-text-is-the-product",
20
+ "tests/bug-170-workflow-fallback-install-hint.test.cjs :: workflow markdown is shipped product text; this test validates fallback hint literals across all workflow files",
21
+ "tests/bug-1891-file-resolution.test.cjs :: structural-implementation-guard",
22
+ "tests/bug-1924-preserve-user-artifacts.test.cjs :: source-text-is-the-product",
23
+ "tests/bug-1967-cache-invalidation.test.cjs :: source-text-is-the-product",
24
+ "tests/bug-211-launcher-home-fallback.test.cjs :: structural/behavioral regression for the ~/.claude fallback arm in",
25
+ "tests/bug-2136-sh-hook-version.test.cjs :: structural-regression-guard",
26
+ "tests/bug-214-phase-researcher-write-truncation-contract.test.cjs :: source-text-is-the-product",
27
+ "tests/bug-214-writer-agents-write-truncation-contract.test.cjs :: source-text-is-the-product",
28
+ "tests/bug-222-research-synthesizer-write-contract.test.cjs :: source-text-is-the-product",
29
+ "tests/bug-224-pick-stdout-capture.test.cjs :: structural-implementation-guard",
30
+ "tests/bug-2346-agent-read-loop-guards.test.cjs :: source-text-is-the-product",
31
+ "tests/bug-2388-plan-phase-no-branch-rename.test.cjs :: source-text-is-the-product",
32
+ "tests/bug-2396-makefile-test-priority.test.cjs :: source-text-is-the-product",
33
+ "tests/bug-2399-commit-docs-plan-phase.test.cjs :: source-text-is-the-product",
34
+ "tests/bug-2410-stream-checkpoint-heartbeats.test.cjs :: source-text-is-the-product",
35
+ "tests/bug-2419-project-researcher-agent.test.cjs :: source-text-is-the-product",
36
+ "tests/bug-2421-planner-grep-gate-hygiene.test.cjs :: source-text-is-the-product",
37
+ "tests/bug-2424-reapply-patches-baseline-detection.test.cjs :: source-text-is-the-product",
38
+ "tests/bug-2470-update-md-claude-path.test.cjs :: source-text-is-the-product",
39
+ "tests/bug-2492-context-coverage-gate.test.cjs :: source-text-is-the-product",
40
+ "tests/bug-2502-insert-phase-state-update.test.cjs :: source-text-is-the-product",
41
+ "tests/bug-2516-inherit-model-execute-phase.test.cjs :: source-text-is-the-product",
42
+ "tests/bug-2543-gsd-slash-namespace.test.cjs :: structural-regression-guard",
43
+ "tests/bug-2549-2550-2552-discuss-phase-context.test.cjs :: source-text-is-the-product",
44
+ "tests/bug-2559-stale-search-year.test.cjs :: source-text-is-the-product",
45
+ "tests/bug-2661-roadmap-sync-parallel.test.cjs :: source-text-is-the-product",
46
+ "tests/bug-2686-review-fix-worktree.test.cjs :: source-text-is-the-product",
47
+ "tests/bug-2698-crlf-install.test.cjs :: source-text-is-the-product",
48
+ "tests/bug-2770-annotate-deps-int-coerce.test.cjs :: source-text-is-the-product",
49
+ "tests/bug-2772-gitmodules-path-intersection.test.cjs :: source-text-is-the-product",
50
+ "tests/bug-2784-update-cache-clear-path.test.cjs :: structural-regression-guard",
51
+ "tests/bug-279-codex-agent-mapping.test.cjs :: source-text-is-the-product [adapter header contract in bin/install.js]",
52
+ "tests/bug-2808-skill-hyphen-name.test.cjs :: source-text-is-the-product",
53
+ "tests/bug-2831-opencode-home-path-prefix.test.cjs :: source-text-is-the-product",
54
+ "tests/bug-2839-review-fix-transactional-cleanup.test.cjs :: source-text-is-the-product",
55
+ "tests/bug-2948-spike-wrap-up-dispatch.test.cjs :: source-text-is-the-product",
56
+ "tests/bug-2949-sketch-wrap-up-dispatch.test.cjs :: source-text-is-the-product",
57
+ "tests/bug-2954-help-md-slash-command-stubs.test.cjs :: source-text-is-the-product",
58
+ "tests/bug-2973-profile-user-skills-path.test.cjs :: source-text-is-the-product. profile-user.md IS the",
59
+ "tests/bug-2990-code-fixer-worktree-branch.test.cjs :: source-text-is-the-product",
60
+ "tests/bug-3086-git-create-tag-config-gate.test.cjs :: workflow-markdown-is-the-runtime-contract",
61
+ "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",
62
+ "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",
63
+ "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",
64
+ "tests/bug-3126-global-skills-base-runtime-path.test.cjs :: last three tests read init.cjs source to verify delegation contract to runtime-homes.cjs — structural guard, no behavioral IR exposed",
65
+ "tests/bug-3127-state-begin-phase-idempotent.test.cjs :: reads runtime STATE.md written to temp dir — behavioral output test, not source-grep",
66
+ "tests/bug-3128-roadmap-plan-count-slug-layout.test.cjs :: reads roadmap.cjs source to verify isPlanFile pattern was adopted — structural contract prevents silent regression to old filter",
67
+ "tests/bug-3129-validate-commit-git-bypass.test.cjs :: reads hook shell script to verify delegation pattern — structural contract test, not source-grep",
68
+ "tests/bug-3130-update-npx-robust-invocation.test.cjs :: reads product workflow markdown (update.md) to verify structural invocation contract — not a source-grep test",
69
+ "tests/bug-3135-capture-backlog-workflow.test.cjs :: source-text-is-the-product — workflow and command .md files",
70
+ "tests/bug-3156-plan-phase-opencode-dispatch.test.cjs :: source-text-is-the-product",
71
+ "tests/bug-3168-task-to-agent-rename.test.cjs :: source-text-is-the-product",
72
+ "tests/bug-3236-capture-seed-one-shot.test.cjs :: source-text-is-the-product — workflow and command .md files",
73
+ "tests/bug-3258-no-stale-gsd-intel-references.test.cjs :: source-text-is-the-product — workflow, reference, and docs .md files",
74
+ "tests/bug-3290-intel-updater-layout-block.test.cjs :: source-text-is-the-product — agents/gsd-intel-updater.md IS",
75
+ "tests/bug-33-settings-model-profile-adaptive.test.cjs :: source-text-is-the-product",
76
+ "tests/bug-3381-verify-work-workstream.test.cjs :: source-text-is-the-product — verify-work.md is a runtime workflow contract.",
77
+ "tests/bug-3384-secondary-defects.test.cjs :: source-text-is-the-product",
78
+ "tests/bug-3418-progress-flag-routing.test.cjs :: source-text-is-the-product",
79
+ "tests/bug-3430-planner-phase-contract.test.cjs :: source-text-is-the-product",
80
+ "tests/bug-3431-debug-command-yaml.test.cjs :: source-text-is-the-product",
81
+ "tests/bug-3446-resume-continue-here-discovery.test.cjs :: source-text-is-the-product",
82
+ "tests/bug-3489-complete-phase-idempotent.test.cjs :: source-text-is-the-product",
83
+ "tests/bug-3491-nested-git-worktree.test.cjs :: source-text-is-the-product",
84
+ "tests/bug-3516-reapply-patches-gsd-update-filter.test.cjs :: source-text-is-the-product",
85
+ "tests/bug-3521-quick-cleanup-cwd-pin.test.cjs :: source-text-is-the-product",
86
+ "tests/bug-3523-cjs-loadconfig-branching-strategy-warning.test.cjs :: validates runtime CLI stdout/stderr warning behavior, not source grep",
87
+ "tests/bug-3542-executor-git-stash-prohibition.test.cjs :: source-text-is-the-product",
88
+ "tests/bug-3582-codex-skills-materialized.test.cjs :: source-text-is-the-product",
89
+ "tests/bug-3605-stale-research-insert-phase-agent-refs.test.cjs :: source-text-is-the-product",
90
+ "tests/bug-3628-bundled-hook-classifier-whitelist.test.cjs :: architectural-invariant",
91
+ "tests/bug-3657-verify-reapply-patches-pristine-drift.test.cjs :: source-text-is-the-product.",
92
+ "tests/bug-3657-verify-reapply-patches-pristine-drift.test.cjs :: source-text-is-the-product — Finding 2 reads reapply-patches.md to",
93
+ "tests/bug-3677-agent-colon-namespace-leak.test.cjs :: source-text-is-the-product",
94
+ "tests/bug-3678-executor-commit-docs-respect.test.cjs :: source-text-is-the-product",
95
+ "tests/bug-3683-command-colon-namespace-leak.test.cjs :: source-text-is-the-product",
96
+ "tests/bug-3683-command-cross-reference-invariant.test.cjs :: source-text-is-the-product",
97
+ "tests/bug-3683-workflow-colon-namespace-leak.test.cjs :: source-text-is-the-product",
98
+ "tests/bug-3689-resume-glob-nomatch.test.cjs :: source-text-is-the-product",
99
+ "tests/bug-3691-annotate-deps-plans-block-variants.test.cjs :: source-text-is-the-product",
100
+ "tests/bug-3706-ui-safety-gate-false-positives.test.cjs :: source-text-is-the-product",
101
+ "tests/bug-3707-locked-worktree-cleanup.test.cjs :: source-text-is-the-product",
102
+ "tests/bug-3727-code-review-fix-flag-dispatch.test.cjs :: source-text-is-the-product",
103
+ "tests/bug-378-update-check-scoped-name.test.cjs :: structural assertion on hook delegation; the behavior being",
104
+ "tests/bug-3784-gsd-settings-model-profile-ui-omits-adaptive.test.cjs :: source-text-is-the-product",
105
+ "tests/bug-3805-fast-md-log-to-state-schema.test.cjs :: source-text-is-the-product",
106
+ "tests/bug-3810-no-gsd-sdk-runtime-refs.test.cjs :: source-text-is-the-product",
107
+ "tests/bug-397-state-preserve-executor-authored.test.cjs :: reads runtime STATE.md written to temp dir — behavioral output test, not source-grep",
108
+ "tests/bug-444-resolver-local-claude-install.test.cjs :: structural/behavioral regression for the repo-local .claude/ install",
109
+ "tests/bug-474-clock-seam-date-determinism.test.cjs :: source-text-is-the-product",
110
+ "tests/bug-503-update-agent-antigravity-detection.test.cjs :: source-text-is-the-product",
111
+ "tests/bug-570-codex-leak-scanner.test.cjs :: source-text-is-the-product",
112
+ "tests/bug-571-doc-writer-fix-mode-edit-only.test.cjs :: source-text-is-the-product",
113
+ "tests/bug-619-codebase-drift-gate-shim.test.cjs :: source-text-is-the-product",
114
+ "tests/bug-621-plan-phase-gap-analysis-gsd-run.test.cjs :: source-text-is-the-product",
115
+ "tests/bug-622-graphify-optional-graph-html.test.cjs :: source-text-is-the-product",
116
+ "tests/bug-630-wave-cleanup-orchestrator-root.test.cjs :: source-text-is-the-product",
117
+ "tests/bug-637-workflow-no-hardcoded-home-tool.test.cjs :: source-text-is-the-product",
118
+ "tests/bug-685-windowshide-spawn.test.cjs :: source-text-is-the-product",
119
+ "tests/bug-687-agy-timeout.test.cjs :: source-text-is-the-product",
120
+ "tests/bug-704-codex-launcher-path-corruption.test.cjs :: source-text-is-the-product",
121
+ "tests/bug-851-codex-quick-adapter-agent-type-fallback.test.cjs :: source-text-is-the-product",
122
+ "tests/bug-891-non-claude-runtime-home-fallback.test.cjs :: structural/behavioral regression for non-Claude runtime-home",
123
+ "tests/bug-924-claude-flat-skill-layout.test.cjs :: source-text-is-the-product",
124
+ "tests/bug-936-no-nested-spawner-wrap.test.cjs :: source-text-is-the-product",
125
+ "tests/bug-947-hermes-gsd-prefix.test.cjs :: source-text-is-the-product",
126
+ "tests/bug-950-quick-summary-status-complete.test.cjs :: source-text-is-the-product",
127
+ "tests/bug-967-verify-key-links-strict-paths.test.cjs :: <runtime-contract-is-the-product> the plan-md.md reference",
128
+ "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.",
129
+ "tests/bug-983-trae-windsurf-claude-path-leak.test.cjs :: source-text-is-the-product",
130
+ "tests/bug-patterns-reference.test.cjs :: source-text-is-the-product",
131
+ "tests/chain-flag-plan-phase.test.cjs :: source-text-is-the-product",
132
+ "tests/changeset-cli.test.cjs :: reads a product workflow .md file (not CJS source) to verify",
133
+ "tests/check-update-config-dir.test.cjs :: structural-regression-guard",
134
+ "tests/ci-test-scope.test.cjs :: CLI usage banner presence is a user-facing contract.",
135
+ "tests/ci-test-scope.test.cjs :: CLI usage failure text is user-facing contract for this parser guard.",
136
+ "tests/claude-md.test.cjs :: source-text-is-the-product",
137
+ "tests/claude-skills-migration.test.cjs :: source-text-is-the-product",
138
+ "tests/cleanup-branch-pruning.test.cjs :: source-text-is-the-product",
139
+ "tests/cline-install.test.cjs :: source-text-is-the-product",
140
+ "tests/cline-support.test.cjs :: source-text-is-the-product",
141
+ "tests/clock-seam.test.cjs :: line 159 reads the STATE.md temp file written by readModifyWriteStateMd — this is a runtime output file assertion, not a source-grep; the API returns void so a file read-back is the only way to verify the transform was applied",
142
+ "tests/code-review-agent-skills.test.cjs :: source-text-is-the-product",
143
+ "tests/code-review-command.test.cjs :: source-text-is-the-product",
144
+ "tests/code-review-pipeline-regression.test.cjs :: source-text-is-the-product",
145
+ "tests/code-review.test.cjs :: source-text-is-the-product",
146
+ "tests/codebuddy-install.test.cjs :: source-text-is-the-product",
147
+ "tests/codex-config.test.cjs :: source-text-is-the-product",
148
+ "tests/command-contract.test.cjs :: source-text-is-the-product — commands/gsd/*.md files ARE the",
149
+ "tests/commands.test.cjs :: source-text-is-the-product",
150
+ "tests/concurrency-safety.test.cjs :: source-text-is-the-product",
151
+ "tests/config-field-docs.test.cjs :: docs-parity",
152
+ "tests/context-enrichment.test.cjs :: source-text-is-the-product",
153
+ "tests/contributor-standards.test.cjs :: source-text-is-the-product",
154
+ "tests/copilot-install.test.cjs :: integration-test-input",
155
+ "tests/core.test.cjs :: architectural-invariant",
156
+ "tests/core.test.cjs :: structural-regression-guard",
157
+ "tests/cursor-hooks.test.cjs :: source-text-is-the-product",
158
+ "tests/cursor-reviewer.test.cjs :: source-text-is-the-product",
159
+ "tests/debug-session-management.test.cjs :: source-text-is-the-product",
160
+ "tests/discuss-all-flag.test.cjs :: source-text-is-the-product",
161
+ "tests/discuss-checkpoint.test.cjs :: source-text-is-the-product",
162
+ "tests/discuss-mode.test.cjs :: structural-implementation-guard",
163
+ "tests/discuss-phase-power.test.cjs :: source-text-is-the-product",
164
+ "tests/docs-parity-live-registry.test.cjs :: source-text-is-the-product",
165
+ "tests/drift-detection.test.cjs :: source-text-is-the-product",
166
+ "tests/edge-probe-docs-fixtures.test.cjs :: runtime-contract-is-the-product — the rendered reference/SPEC/ADR vocab surfaces are the runtime contract; this pins their bijection to the code (docs-parity)",
167
+ "tests/edge-probe-planner-contract.test.cjs :: runtime-contract-is-the-product — plan-phase.md's planner prompt is the deployed runtime contract under assertion",
168
+ "tests/edge-probe-spec-phase-contract.test.cjs :: runtime-contract-is-the-product — spec-phase.md Step 5.5 is the deployed workflow runtime contract under assertion",
169
+ "tests/edit-phase.test.cjs :: source-text-is-the-product",
170
+ "tests/enh-2310-chunked-plan-phase.test.cjs :: source-text-is-the-product",
171
+ "tests/enh-2380-sync-skills.test.cjs :: source-text-is-the-product",
172
+ "tests/enh-2415-claude-md-link-mode.test.cjs :: source-text-is-the-product",
173
+ "tests/enh-2430-learnings-consumption.test.cjs :: source-text-is-the-product",
174
+ "tests/enh-2433-todo-phase-linking.test.cjs :: source-text-is-the-product",
175
+ "tests/enh-2446-milestones-drift.test.cjs :: source-text-is-the-product",
176
+ "tests/enh-2447-roadmap-wave-deps.test.cjs :: source-text-is-the-product",
177
+ "tests/enh-2448-artifact-registry.test.cjs :: source-text-is-the-product",
178
+ "tests/enh-2500-codebase-mapper-arch-rich-format.test.cjs :: source-text-is-the-product",
179
+ "tests/enh-2789-description-budget.test.cjs :: source-text-is-the-product",
180
+ "tests/enh-2790-skill-consolidation.test.cjs :: source-text-is-the-product",
181
+ "tests/enh-2792-namespace-skills.test.cjs :: source-text-is-the-product",
182
+ "tests/enh-3209-plan-phase-ingest-adr.test.cjs :: source-text-is-the-product",
183
+ "tests/enh-48-cwd-drift-guard-e2e.test.cjs :: integration-test-input",
184
+ "tests/enh-72-business-context.test.cjs :: source-text-is-the-product",
185
+ "tests/enh-769-context-fork-effort.install.test.cjs :: integration-test-input",
186
+ "tests/enh-770-claude-hook-events.test.cjs :: runtime-contract-is-the-product — hooks.json IS the",
187
+ "tests/enh-770-claude-hook-events.test.cjs :: runtime-contract-is-the-product — the hookEventName is",
188
+ "tests/enh-770-claude-hook-events.test.cjs :: runtime-contract-is-the-product — the stamp template token",
189
+ "tests/enh-770-claude-hook-events.test.cjs :: runtime-contract-is-the-product — the stdin-read and",
190
+ "tests/enh-773-codex-exec-automation-flags.test.cjs :: source-text-is-the-product",
191
+ "tests/enh-778-cross-runtime-command-enrichment.test.cjs :: source-text-is-the-product",
192
+ "tests/enh-789-codebuddy-commands.test.cjs :: source-text-is-the-product",
193
+ "tests/eslint-rules.test.cjs :: <source-grep reason> must still error",
194
+ "tests/eslint-rules.test.cjs :: pending migration",
195
+ "tests/eslint-rules.test.cjs :: source-text-is-the-product",
196
+ "tests/execute-phase-active-flags.test.cjs :: source-text-is-the-product",
197
+ "tests/execute-phase-step-5-5-deviation-doc.test.cjs :: source-text-is-the-product",
198
+ "tests/execute-phase-wave.test.cjs :: behavioral — calls gsd-tools and asserts structured output",
199
+ "tests/execute-phase-wave.test.cjs :: behavioral — exercises config-set validation, not source text",
200
+ "tests/execute-phase-wave.test.cjs :: behavioral — exercises gsd-tools wave-defaulting logic",
201
+ "tests/execute-phase-wave.test.cjs :: source-text-is-the-product",
202
+ "tests/execute-phase-worktree-artifacts.test.cjs :: source-text-is-the-product",
203
+ "tests/explore-command.test.cjs :: source-text-is-the-product",
204
+ "tests/extract-learnings.test.cjs :: source-text-is-the-product",
205
+ "tests/feat-22-surfacing-docs.test.cjs :: docs-parity",
206
+ "tests/feat-2840-issue-driven-orchestration-guide.test.cjs :: structural-IR parser for a docs guide. The .includes()",
207
+ "tests/feat-3039-help-tiered.test.cjs :: source-text-is-the-product",
208
+ "tests/feat-3167-ship-pr-body-sections.test.cjs :: source-text-is-the-product",
209
+ "tests/feat-3210-fallow-integration.test.cjs :: source-text-is-the-product",
210
+ "tests/feat-3210-fallow-integration.test.cjs :: source-text-is-the-product — code-review.md IS the workflow the orchestrator",
211
+ "tests/feat-3309-human-verify-mode.test.cjs :: source-text-is-the-product",
212
+ "tests/feat-443-effort-install-wiring.install.test.cjs :: integration-test-input",
213
+ "tests/feat-488-effort-sync.test.cjs :: structural-regression-guard — readFileSync asserts on installed agent .md files (the product under mutation) to verify dry-run safety and apply correctness; stderr.includes guards the CLI argument-rejection contract.",
214
+ "tests/fix-3722-execute-phase-human-needed-checkpoint.test.cjs :: source-text-is-the-product",
215
+ "tests/forensics.test.cjs :: source-text-is-the-product",
216
+ "tests/frontmatter-cli.test.cjs :: source-text-is-the-product",
217
+ "tests/gates-taxonomy.test.cjs :: source-text-is-the-product",
218
+ "tests/git-base-branch.test.cjs :: runtime-contract-is-the-product",
219
+ "tests/git-base-branch.test.cjs :: runtime-contract-is-the-product — the workflow .md content IS",
220
+ "tests/gsd-check-update-worker-platform-gate.test.cjs :: structural assertion on spawn-options shape; the behavior",
221
+ "tests/gsd-researcher-app-aware.test.cjs :: source-text-is-the-product",
222
+ "tests/gsd-researcher-flow-diagram.test.cjs :: source-text-is-the-product",
223
+ "tests/gsd-settings-advanced.test.cjs :: source-text-is-the-product",
224
+ "tests/gsd2-import.test.cjs :: source-text-is-the-product",
225
+ "tests/hermes-skills-migration.test.cjs :: source-text-is-the-product",
226
+ "tests/import-command.test.cjs :: source-text-is-the-product",
227
+ "tests/ingest-docs.test.cjs :: source-text-is-the-product",
228
+ "tests/inline-plan-threshold.test.cjs :: source-text-is-the-product",
229
+ "tests/install-minimal-hooks.test.cjs :: source-text-is-the-product",
230
+ "tests/install-nested-layout.test.cjs :: source-text-is-the-product",
231
+ "tests/install-runtime-artifacts.test.cjs :: source-text-is-the-product",
232
+ "tests/install.test.cjs :: runtime-contract-is-the-product",
233
+ "tests/install.test.cjs :: source-text-is-the-product",
234
+ "tests/intel.test.cjs :: source-text-is-the-product — agents/gsd-intel-updater.md IS the",
235
+ "tests/intel.test.cjs :: source-text-is-the-product — readFileSync assertions target API-SURFACE.md, which is the generated product of intelApiSurface; asserting on its text content is the only way to verify correct generation.",
236
+ "tests/inventory-headings-countfree.test.cjs :: runtime-contract-is-the-product — INVENTORY.md heading format is the shipped doc surface being locked",
237
+ "tests/ios-scaffold-safety.test.cjs :: source-text-is-the-product",
238
+ "tests/issue-2639-codex-toml-neutralization.test.cjs :: source-text-is-the-product",
239
+ "tests/issue-429-comment-text-gate.test.cjs :: source-text-is-the-product",
240
+ "tests/issue-498-package-identity.test.cjs :: architectural-invariant",
241
+ "tests/issue-498-update-backup-runtime-dir.test.cjs :: structural assertion on the deployed update.md backup bash;",
242
+ "tests/issue-57-runtime-install-no-drift.test.cjs :: delegation-presence guard. Catches wholesale removal of the registry",
243
+ "tests/issue-57-runtime-install-no-drift.test.cjs :: structural guard over bin/install.js source. Behavioral assertions",
244
+ "tests/issue-607-installer-dry-run.install.test.cjs :: integration-test-input",
245
+ "tests/issue-607-legacy-cleanup.test.cjs :: integration-test-input",
246
+ "tests/issue-787-cline-hooks-agents.test.cjs :: source-text-is-the-product",
247
+ "tests/issue-815-update-next-channel.test.cjs :: reads product workflow/command markdown to verify the --next RC channel contract — not a source-grep test",
248
+ "tests/locking-bugs-1909-1916-1925-1927.test.cjs :: architectural-invariant",
249
+ "tests/mcp-tool-inheritance.test.cjs :: source-text-is-the-product",
250
+ "tests/milestone-summary.test.cjs :: source-text-is-the-product",
251
+ "tests/milestone.test.cjs :: source-text-is-the-product",
252
+ "tests/milestone.test.cjs :: structural-regression-guard",
253
+ "tests/model-catalog-runtime-defaults.test.cjs :: source-text-is-the-product",
254
+ "tests/next-safety-gates.test.cjs :: source-text-is-the-product",
255
+ "tests/next-up-clear-order.test.cjs :: source-text-is-the-product",
256
+ "tests/no-hardcoded-home-gsd-tools.test.cjs :: source-text-is-the-product",
257
+ "tests/opencode-permissions.test.cjs :: architectural-invariant",
258
+ "tests/orphan-worktree-detection.test.cjs :: architectural-invariant",
259
+ "tests/orphaned-hooks.test.cjs :: structural-regression-guard",
260
+ "tests/package-legitimacy-gate.test.cjs :: source-text-is-the-product",
261
+ "tests/parallel-dependent-plans.test.cjs :: source-text-is-the-product",
262
+ "tests/path-replacement.test.cjs :: source-text-is-the-product",
263
+ "tests/phase-dependency-levels.test.cjs :: source-text-is-the-product",
264
+ "tests/phase.test.cjs :: source-text-is-the-product",
265
+ "tests/phase.test.cjs :: state-md-is-the-runtime-contract — regression tests for",
266
+ "tests/phase6-capability-docs.test.cjs :: source-text-is-the-product",
267
+ "tests/phase6-capstone-conformance.test.cjs :: source-text-is-the-product",
268
+ "tests/phase6-planning-capabilities.test.cjs :: source-text-is-the-product",
269
+ "tests/plan-bounce.test.cjs :: source-text-is-the-product",
270
+ "tests/plan-phase-drift-guard.test.cjs :: source-text-is-the-product",
271
+ "tests/plan-phase-ui-redirect.test.cjs :: source-text-is-the-product",
272
+ "tests/plan-review-convergence.test.cjs :: source-text-is-the-product",
273
+ "tests/planner-decomposition.test.cjs :: source-text-is-the-product",
274
+ "tests/planner-language-regression.test.cjs :: source-text-is-the-product",
275
+ "tests/playwright-ui-verify.test.cjs :: source-text-is-the-product",
276
+ "tests/policy-160-route0-resume.test.cjs :: source-text-is-the-product",
277
+ "tests/policy-release-no-npm-self-upgrade.test.cjs :: source-text-is-the-product",
278
+ "tests/product-name-purity.test.cjs :: source-text-is-the-product",
279
+ "tests/profile-output.test.cjs :: source-text-is-the-product",
280
+ "tests/progress-forensic.test.cjs :: source-text-is-the-product",
281
+ "tests/prompt-budget-cli.test.cjs :: prompt-content-is-the-product",
282
+ "tests/prompt-thinning.test.cjs :: source-text-is-the-product",
283
+ "tests/quick-session-management.test.cjs :: source-text-is-the-product",
284
+ "tests/qwen-skills-migration.test.cjs :: source-text-is-the-product",
285
+ "tests/read-guard.test.cjs :: source-text-is-the-product",
286
+ "tests/reapply-patches.test.cjs :: source-text-is-the-product",
287
+ "tests/reapply-verify-hunks.test.cjs :: source-text-is-the-product",
288
+ "tests/release-coverage-scope.test.cjs :: source-text-is-the-product",
289
+ "tests/release-tarball-smoke-workflow.test.cjs :: source-text-is-the-product",
290
+ "tests/release-tarball-smoke.install.test.cjs :: integration-test-input",
291
+ "tests/research-agent-profiles.test.cjs :: <runtime-contract-is-the-product> research agent .md content is the governed surface",
292
+ "tests/review-default-reviewers-workflow.test.cjs :: source-text-is-the-product",
293
+ "tests/roadmap.test.cjs :: source-text-is-the-product",
294
+ "tests/run-tests-harness.test.cjs :: run-tests.cjs is a CLI test harness whose only IR is its",
295
+ "tests/runtime-launcher-parity.test.cjs :: structural parity/drift guard — asserts literal presence/absence of the canonical gsd_run launcher and the retired $GSD_SDK / `/gsd-tools` tokens across workflow markdown; there is no typed IR for \"this source file does not contain substring X\".",
296
+ "tests/runtime-name-policy.test.cjs :: runtime-contract-is-the-product — FALLBACK_ALIASES source text IS the",
297
+ "tests/scan-command.test.cjs :: source-text-is-the-product",
298
+ "tests/secret-scan-lint.security.test.cjs :: source-text-is-the-product",
299
+ "tests/secure-phase.test.cjs :: source-text-is-the-product",
300
+ "tests/security-prompt-injection.security.test.cjs :: structural-regression-guard",
301
+ "tests/security-scan.security.test.cjs :: source-text-is-the-product",
302
+ "tests/seed-scan-new-milestone.test.cjs :: source-text-is-the-product",
303
+ "tests/settings-integrations.test.cjs :: source-text-is-the-product",
304
+ "tests/settings-jsonc.test.cjs :: structural-regression-guard",
305
+ "tests/skill-frontmatter-contract.test.cjs :: source-text-is-the-product",
306
+ "tests/spawn-liveness-banner.test.cjs :: source-text-is-the-product",
307
+ "tests/state-acquirestatelock-non-eexist.test.cjs :: architectural-invariant",
308
+ "tests/state.test.cjs :: source-text-is-the-product",
309
+ "tests/subagent-timeout.test.cjs :: source-text-is-the-product",
310
+ "tests/template.test.cjs :: source-text-is-the-product",
311
+ "tests/thinking-partner.test.cjs :: source-text-is-the-product",
312
+ "tests/thread-session-management.test.cjs :: source-text-is-the-product",
313
+ "tests/ultraplan-phase.test.cjs :: source-text-is-the-product",
314
+ "tests/verify-health.test.cjs :: source-text-is-the-product",
315
+ "tests/verify-test-quality.test.cjs :: source-text-is-the-product",
316
+ "tests/verify-work-auto-transition.test.cjs :: source-text-is-the-product",
317
+ "tests/windows-robustness.test.cjs :: source-text-is-the-product",
318
+ "tests/windows-test-parity-guard.test.cjs :: structural-regression-guard",
319
+ "tests/workflow-compat.test.cjs :: source-text-is-the-product",
320
+ "tests/workflow-guard-registration.test.cjs :: structural-regression-guard",
321
+ "tests/workflow-maintainer-skip.test.cjs :: source-text-is-the-product",
322
+ "tests/workflow-shell-pinning.test.cjs :: file-scope prefilter, not a test assertion — we need to",
323
+ "tests/workflow-size-budget.test.cjs :: source-text-is-the-product",
324
+ "tests/workspace.test.cjs :: source-text-is-the-product",
325
+ "tests/worktree-cleanup.test.cjs :: source-text-is-the-product",
326
+ "tests/worktree.test.cjs :: source-text-is-the-product"
327
+ ]