Files
msd-core/tests/test-timings.json
Tom Boucher c5e0371775 feat(#1951): reversibility tagging — gate one-way-door decisions (#2471)
* test(#1951): add failing-first tests for reversibility tagging

Red phase for issue #1951 (reversibility tagging: classify decisions by
undo cost, gate one-way doors behind a checkpoint:decision).

Tests assert, per the issue's acceptance criteria:
- discuss-phase CONTEXT.md template records a **Reversibility:** field with
  a rationale on captured decisions, and states it is optional
- gsd-planner @-references planner-reversibility.md and stays under the
  49152-char agent cap (LARGE_CAP, tests/agent-size-budget.test.cjs)
- a one-way rating inserts a checkpoint:decision before the dependent task;
  reversible inserts none; costly is flagged but never blocks
- the taxonomy defaults to reversible when unsure (checkpoint-fatigue guard)
  and inserting a checkpoint implies autonomous: false
- docs/reference/plan-md.md documents <reversibility> as optional with all
  three ratings
- --no-reversibility-gates parses to REVERSIBILITY_GATES=false, is injected
  into the planner prompt, and is advertised in the command argument-hint
  and help full mode (argument-hint parity)
- the override suppresses the gate but still persists the rating
- cmdVerifyPlanStructure accepts every rating and the absent case
  (additive-validator guarantee, behavioral via runGsdTools)
- parity: thinking-models-planning.md #4 adopts the canonical three-level
  taxonomy and the binary REVERSIBLE/IRREVERSIBLE vocabulary is gone
- no content loss from the planner extraction made to fit under the cap

Prose-contract assertions are Red until the implementation lands. The
behavioral validator assertions pass immediately — regression guards
proving the validator already accepts unknown optional tags.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>

* feat(#1951): reversibility tagging — gate one-way-door decisions

Classify planning decisions by what undoing them would cost, and give a
one-way door a human beat before the agent walks through it (issue #1951,
The Pragmatic Programmer Topic 15 'Reversibility'; Bezos's one-way/two-way
door framing).

Acceptance criteria met:
- discuss-phase records an optional reversibility rating with a rationale
  on <decisions> entries in the phase CONTEXT.md template. Unrated
  decisions are treated as reversible, so existing phases are unaffected.
- a one-way rating makes gsd-planner insert a checkpoint:decision before
  the task that implements the decision, reusing the existing checkpoint
  mechanism -- no new checkpoint machinery.
- reversible ratings trigger no checkpoint; costly ratings are flagged in
  the plan but never block.
- the rating persists on the task as the optional <reversibility rating=>
  element. cmdVerifyPlanStructure accepts every rating and the absent
  case; the structural validator does not reject unknown optional tags.
- --no-reversibility-gates (REVERSIBILITY_GATES=false) suppresses
  checkpoint insertion for intentionally-unattended runs while still
  recording ratings -- the override changes what stops the run, not what
  the plan remembers.

Single taxonomy, not two: references/thinking-models-planning.md #4
already shipped a binary REVERSIBLE/IRREVERSIBLE classification and is
loaded by both gsd-planner and gsd-plan-checker. It is rewritten onto the
canonical three-level vocabulary and now points at planner-reversibility.md
as the taxonomy owner, with a parity test that fails if the surfaces
diverge (DEFECT.GENERATIVE-FIX-DIVERGENCE).

agents/gsd-planner.md sat 47 chars under the 49152 LARGE_CAP, so the
checkpoint DO/DON'T guidance was relocated verbatim into
planner-antipatterns.md -- already @-referenced from the same section for
the same topic, so the planner still loads it and nothing was dropped. A
test guards the relocation against content loss.

Files: gsd-core/references/planner-reversibility.md (NEW, canonical
taxonomy + emission rules + anti-patterns), gsd-planner.md, plan-phase
workflow/command/help (flag wiring + parity), plan-md.md schema,
discuss-phase context template, CONTEXT.md glossary, INVENTORY + manifest,
size baselines, install goldens, plugin skills regen, changeset.

Closes #1951

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>

* fix(#1951): address orthogonal review findings

Two isolated reviewers (correctness + security), neither of which authored
the change. Every finding fixed:

Security — the rationale is untrusted input (ADR-1577). It originates in
conversation and flows CONTEXT.md -> planner -> PLAN.md -> executor, each
hop an LLM reading the previous hop's output, with no validation on the
path. planner-reversibility.md and the discuss-phase template now state
it is data and never instructions, and name the </reversibility>
early-termination hazard explicitly -- a rationale that closes its own
element injects sibling structure the executor reads as real tasks.
Four tests guard it.

Correctness 1 — nothing machine-enforced the feature's own promise: a task
rated one-way with no preceding checkpoint:decision validated as fully
clean, so a planner error silently reopened the gap this feature exists to
close. cmdVerifyPlanStructure now warns on an ungated one-way rating. A
warning, not an error: <reversibility> stays additive and the plan stays
valid. Four tests cover ungated (warns), gated (silent), still-valid, and
reversible/costly never flagged.

Correctness 2 — pass-always test. The --no-reversibility-gates parse test
substring-matched the whole workflow file, and plan-phase.md prose mentions
both tokens in one sentence, so it passed with the bash conditional
deleted: it was testing the documentation, not the parser. Now scoped to
the fenced bash blocks and matched as one physical line, with a negative
control confirming prose alone cannot satisfy it.

Correctness 3 — costly had no itemized emission rule, only one-way did, so
two agents could diverge on whether to tag costly at all.

Correctness 4 — template convention break: the example ratings were bare
while every sibling field uses [...] to signal substitution, inviting an
LLM to copy one-way/costly forward as boilerplate. Now bracketed.

Correctness 5 — latent false-green: .includes('reversible') also matches
inside irreversible/irreversibility, which appear in anti-pattern
prose, so a surface that dropped the real taxonomy entry would still pass.
Now word-boundary matched.

ADR-857 phase-6 ceiling — the first gsd-test run caught plan-phase.md
1216 bytes over its frozen 94519 ceiling (it had 49 bytes of headroom on
next). The ceiling may only rise for privileged host machinery, and
reversibility gating is optional-feature logic, so the wiring was slimmed
to its minimum and the explanatory prose moved to the reference files the
planner already loads. plan-phase.md is now 94400 bytes -- 119 under the
ceiling and 70 bytes SMALLER than on next, so the host loop shrank while
gaining the feature, which is what phase 6 ratchets toward. The tracer
contract (tests/tracer-bullet.test.cjs) is unchanged.

Lint — fixed an unnecessary non-null assertion in verify.cts and a
CRLF-fragile bare \n regex in the new test (DEFECT.WINDOWS-CRLF-TEST-
PORTABILITY, the #1658/#1668/#2206/#2449/#2450 class).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>

* test(#1951): checkpoint fixture must carry the common task elements

The gated-one-way fixture built a checkpoint:decision task from the
abbreviated skeleton in gsd-planner.md, which shows only the
checkpoint-specific elements (<decision>/<context>/<resume-signal>).
cmdVerifyPlanStructure requires <name> and <action> on EVERY task
regardless of type, so the fixture failed validation for reasons that had
nothing to do with reversibility:

  errors: ["Task missing <name> element", "Task 'unnamed' missing <action>"]

Caught by gsd-test on 14d14a39 (2 failures, both this fixture).

The canonical shape is in tests/verify.test.cjs:266 — a checkpoint task
carries <name>/<files>/<action>/<verify> like any other. Fixture corrected
to match. Verified behaviorally against the real gsd-tools CLI across all
four cases: gated one-way (valid, silent), ungated one-way (valid, warns),
costly (valid, silent), absent (valid, silent).

Not a product defect: the validator's every-task contract is intentional
and pre-existing, and docs/reference/plan-md.md scopes its required-element
list to type=auto/tracer only because those are the elements a planner must
author, not because checkpoints are exempt from <name>.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>

* chore(#1951): backfill changeset pr number to 2471

* fix(#1951): CodeQL incomplete-sanitization + prompt-injection scan collision

Both CI failures were real defects in code this PR added, not false
positives.

CodeQL js/incomplete-sanitization (high), reversibility-tagging.test.cjs:46 —
the namesRating helper built its regex with `rating.replace(/[-]/g, '\\-')`,
which escapes the hyphen but not backslash, so the escape was incomplete.
It was also unnecessary: `-` carries no special meaning outside a character
class. Replaced with a complete metacharacter escape (backslash included).
Word-boundary behavior verified unchanged across all three ratings — notably
that "irreversible" prose still does not satisfy a "reversible" match, which
is the false-green this helper exists to prevent.

Prompt injection scan — the checkpoint fixture used the human-verification
child element inside <verify>. That tag name is a fake-instruction-boundary
pattern in scripts/prompt-injection-scan.sh, and the scan runs over changed
files, so copying the shape from tests/verify.test.cjs (unflagged only
because it is not in this diff) tripped the gate. Switched to the documented
plain-prose <verify> form.

The first attempt at that fix failed the same gate a second time: the
comment explaining the collision quoted the offending tag literally. The
comment now names it in prose instead — the scanner does not care whether a
match is code or commentary, which is the whole point of the
DEFECT.PROMPT-INJECTION-SCAN-COLLISION note in CLAUDE.md.

Verified locally before push: scan reports 0 findings across 57 changed
files, eslint clean, and both fixtures still validate as designed (gated
one-way silent, ungated one-way warns, neither errors).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>

* test(#1951): record measured cost and halve gsd-tools spawns

The Windows shard 1/3 job timeout was traced to the sharding layer, not to
this PR's assertions — see #2472. Two contributing factors were this file's
own, and are fixed here.

1. tests/test-timings.json had no entry for reversibility-tagging.test.cjs,
   so scripts/run-tests.cjs weighted it at the table's median fallback
   (~315ms) for LPT chunk packing. It actually measures 5595ms — an 18x
   under-weight. Recorded the measured value from the green gsd-test run
   (max across the node22/node24 lanes, per gen-test-timings.cjs's
   convention). Only this one entry: a full regen churns 634 entries of
   run-to-run drift, and the table is explicitly advisory and un-gated, so
   a 637-line diff does not belong in a feature PR.

2. Each verifyPlan() spawns gsd-tools, which dominates this file's cost.
   Spawns cut from 9 to 6 with no coverage lost:
   - the ungated-one-way warning and its stays-valid assertion now share
     one plan instead of building the same plan twice;
   - the reversible/costly never-flagged-as-ungated test was strictly
     subsumed by the additive suite, which already runs those two ratings
     ungated and asserts no /reversibilit/ warning at all — and the gate
     warning's text contains both "reversibility" and "one-way", so the
     broader assertion catches it. It only re-spawned gsd-tools twice to
     prove the same thing.

Both are symptom fixes. The shard imbalance itself (19/11/10 minutes
against a 20-minute cap, from a cost-blind round-robin partition that also
reshuffles downstream files whenever one is inserted) is tracked in #2472.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>

* test(#1951): checkpoint fixture adopts the #2444 type-branched contract

Surfaced by rebasing onto next, which gained #2444 (branch plan-structure
validation on task type=checkpoint:*) while this PR was in review.

cmdVerifyPlanStructure no longer applies one required-element set to every
task. A checkpoint:decision now requires <name> + <resume-signal> +
<decision> + <options>, and is exempt from the <action>/<verify>/<done>/
<files> set that auto and tracer tasks carry. The gated-one-way fixture
predated that split and failed on the new requirement:

  errors: ["Task 'Task 0: Confirm the on-disk format' missing <options>"]

Fixture rewritten to mirror the checkpoint:decision contract exactly — real
<options> with two <option> children — rather than padding it with fields
checkpoints no longer need. That also drops the plain-prose <verify> the
earlier revision carried purely to dodge the prompt-injection scan; a
checkpoint task has no <verify> requirement at all, so the workaround is
moot.

Verified against the real gsd-tools CLI across all four cases: gated one-way
(valid, silent), ungated one-way (valid, warns), costly (valid, silent),
absent (valid, silent).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-21 10:44:55 -04:00

651 lines
27 KiB
JSON

{
"schema_version": 1,
"generated_by": "scripts/gen-test-timings.cjs",
"unit": "ms",
"sources": [
"test-events-linux-node22.jsonl",
"test-events-linux-node24.jsonl"
],
"file_count": 638,
"timings": {
"active-workstream-store.test.cjs": 102,
"active-workstream-store.unit.test.cjs": 332,
"adapter-declarative-equivalence.test.cjs": 31,
"adapter-imperative.test.cjs": 63,
"adr-15-progress-converge.test.cjs": 50,
"adr-218-release-version-validation.test.cjs": 62,
"adr-22-plan-drift-guard.test.cjs": 2737,
"adr-230-pr-target-policy.test.cjs": 117,
"adr-612-collision-characterization.test.cjs": 88,
"adr-index-gate.test.cjs": 4976,
"adr-parser.property.test.cjs": 1305,
"adr-parser.test.cjs": 34,
"adr-parser.unit.test.cjs": 380,
"adr857-contribution-merge.test.cjs": 90,
"adr857-core-without-capabilities.test.cjs": 4109,
"adr857-predicate-boundary.test.cjs": 100,
"affected-tests-lib.test.cjs": 175,
"agent-classification-parity.test.cjs": 92,
"agent-frontmatter.test.cjs": 526,
"agent-install-check.test.cjs": 91,
"agent-install-validation.test.cjs": 7395,
"agent-required-reading-consistency.test.cjs": 142,
"agent-size-budget.test.cjs": 111,
"agent-skills-awareness.test.cjs": 55,
"agent-skills-bootstrap.test.cjs": 315,
"agent-skills.test.cjs": 20045,
"ai-evals.test.cjs": 4637,
"allowlist-ratchet.test.cjs": 70,
"analyze-dependencies.test.cjs": 30,
"anti-pattern-enforcement.test.cjs": 59,
"antigravity-repo-grounding.test.cjs": 220,
"antigravity-reviewer.test.cjs": 58,
"antigravity-upgrades.test.cjs": 4908,
"api-coverage-gate-e2e.test.cjs": 4990,
"api-coverage.test.cjs": 597,
"artifacts.test.cjs": 246,
"ask-user-questions-fallback.test.cjs": 108,
"assumption-delta-checkpoint-e2e.test.cjs": 3823,
"assumption-delta.test.cjs": 1017,
"atomic-write-coverage.test.cjs": 72,
"audit-command-cutover.test.cjs": 4706,
"audit-fix-command.test.cjs": 159,
"augment-conversion.test.cjs": 83,
"augment-upgrades.test.cjs": 6978,
"autonomous-allowed-tools.test.cjs": 19,
"autonomous-converge.test.cjs": 41,
"autonomous-decomposition.test.cjs": 42,
"autonomous-interactive.test.cjs": 47,
"autonomous-to-flag.test.cjs": 44,
"autonomous-ui-steps.test.cjs": 74,
"backwards-compat-phase-id.test.cjs": 51,
"broken-windows.test.cjs": 9220,
"bugs-1656-1657.test.cjs": 192,
"capability-cli.test.cjs": 37059,
"capability-command-dispatch.test.cjs": 177,
"capability-consent.test.cjs": 6516,
"capability-consumption.test.cjs": 203,
"capability-ledger.test.cjs": 1050,
"capability-lifecycle.test.cjs": 5010,
"capability-loader.test.cjs": 667,
"capability-manifest-version.test.cjs": 266,
"capability-matrix-sync.test.cjs": 31,
"capability-precedence-parity.test.cjs": 94,
"capability-registry.test.cjs": 31553,
"capability-source.test.cjs": 944,
"capability-state.test.cjs": 6635,
"capability-trust.test.cjs": 232,
"capability-writer.test.cjs": 3085,
"chain-flag-plan-phase.test.cjs": 91,
"changeset-cli.test.cjs": 6838,
"changeset-github-release-notes.test.cjs": 814,
"changeset-lint.test.cjs": 1006,
"changeset-new.test.cjs": 170,
"changeset-parse.test.cjs": 122,
"changeset-render.test.cjs": 37,
"changeset-serialize.test.cjs": 87,
"check-env.test.cjs": 9927,
"check-gap-analysis-plan-post-e2e.test.cjs": 14298,
"check-glossary-refs.test.cjs": 1108,
"check-predicate.test.cjs": 306,
"check-tdd-review-checkpoint-e2e.test.cjs": 5647,
"check-ui-plan-gate.test.cjs": 127,
"check-ui-safety-gate.test.cjs": 1839,
"check-update-config-dir.test.cjs": 277,
"ci-rebase-check.test.cjs": 1643,
"ci-test-scope.test.cjs": 40081,
"cjs-command-router-adapter.test.cjs": 6540,
"claude-imperative-reference.test.cjs": 72,
"claude-md-path.test.cjs": 3670,
"claude-md.test.cjs": 7773,
"claude-orchestration-command-router.test.cjs": 2626,
"claude-orchestration.test.cjs": 464,
"claude-skills-migration.test.cjs": 214,
"cleanup-branch-pruning.test.cjs": 49,
"cli-exit.test.cjs": 719,
"cline-beforetool-upgrade.test.cjs": 66,
"cline-dispatch-degradation.test.cjs": 135,
"cline-imperative-reference.test.cjs": 101,
"cline-install.test.cjs": 3279,
"cline-model-override-upgrade.test.cjs": 51,
"cline-support.test.cjs": 40,
"clock-seam.test.cjs": 8384,
"close-phase-todos-stage-deletion.test.cjs": 24,
"clusters.test.cjs": 59,
"code-review-agent-skills.test.cjs": 32,
"code-review-command.test.cjs": 413,
"code-review-flags.test.cjs": 119,
"code-review-pipeline-regression.test.cjs": 150,
"code-review-summary-parser.test.cjs": 87,
"code-review.test.cjs": 2574,
"codebuddy-install.test.cjs": 2807,
"codebuddy-upgrades.test.cjs": 2532,
"codex-config.test.cjs": 108295,
"codex-declarative-reference.test.cjs": 110,
"command-arg-projection.test.cjs": 50,
"command-contract.test.cjs": 1023,
"command-routing-hub.test.cjs": 29430,
"commands.test.cjs": 70578,
"commit-docs-bypass.test.cjs": 2188,
"commit-files-deletion.test.cjs": 2583,
"commit-files-pathspec.test.cjs": 4154,
"concurrency-safety.test.cjs": 12250,
"config-field-docs.test.cjs": 1203,
"config-get-default.test.cjs": 18007,
"config-loader.test.cjs": 6320,
"config-schema.property.test.cjs": 5229,
"config.test.cjs": 114417,
"configuration-migrate-config.test.cjs": 1751,
"context-enrichment.test.cjs": 124,
"context-utilization.property.test.cjs": 203,
"context-utilization.test.cjs": 109,
"context7-plugin-grant-parity.test.cjs": 111,
"continuation-grammar-parity.test.cjs": 62,
"contributor-standards.test.cjs": 63,
"conventional-title.property.test.cjs": 265,
"conventional-title.test.cjs": 175,
"copilot-install.test.cjs": 44480,
"copilot-upgrades.test.cjs": 4816,
"core-utils.test.cjs": 247,
"coverage-metadata-parser.test.cjs": 10769,
"coverage-uat-routing.test.cjs": 1959,
"cross-ai-execution.test.cjs": 97,
"cursor-conversion.test.cjs": 79,
"cursor-dispatch-upgrade.test.cjs": 68,
"cursor-hook-bus-upgrade.test.cjs": 69,
"cursor-hooks.test.cjs": 407,
"cursor-imperative-reference.test.cjs": 164,
"cursor-reviewer.test.cjs": 165,
"debug-session-management.test.cjs": 105,
"debugger-bug-taxonomy.test.cjs": 103,
"debugger-fix-acceptance.test.cjs": 83,
"debugger-prevention.test.cjs": 109,
"debugger-rca-branching.test.cjs": 112,
"debugger-repro-hardening.test.cjs": 90,
"debugger-sbfl.test.cjs": 207,
"debugger-semantic-recall.test.cjs": 73,
"decisions.test.cjs": 10172,
"declarative-reference-antigravity.test.cjs": 1177,
"declarative-reference-augment.test.cjs": 1271,
"declarative-reference-codebuddy.test.cjs": 1354,
"declarative-reference-copilot.test.cjs": 1410,
"declarative-reference-windsurf.test.cjs": 1779,
"declarative-reference-zcode.test.cjs": 1756,
"defaults-json-fallback.test.cjs": 118,
"derive-progress.property.test.cjs": 207,
"discord-release-summary.test.cjs": 35,
"discuss-all-flag.test.cjs": 100,
"discuss-checkpoint.test.cjs": 69,
"discuss-mode.test.cjs": 84,
"discuss-phase-power.test.cjs": 214,
"dispatcher.test.cjs": 15150,
"docs-parity-live-registry.test.cjs": 585,
"docs-update.test.cjs": 7877,
"drift-detection.test.cjs": 8590,
"edge-probe-docs-fixtures.test.cjs": 95,
"edge-probe-planner-contract.test.cjs": 33,
"edge-probe-spec-phase-contract.test.cjs": 39,
"edge-probe.test.cjs": 1251,
"edit-phase.test.cjs": 159,
"effort-sync-installed-runtime.test.cjs": 2194,
"ensure-runtime-build.test.cjs": 6601,
"eslint-rules.test.cjs": 793,
"eval.property.test.cjs": 207,
"eval.test.cjs": 92,
"event.test.cjs": 162,
"execute-mvp-tdd-gate.test.cjs": 1420,
"execute-phase-active-flags.test.cjs": 199,
"execute-phase-step-5-5-deviation-doc.test.cjs": 321,
"execute-phase-wave.test.cjs": 1293,
"execute-phase-worktree-artifacts.test.cjs": 73,
"execute-wave-post-gate-pipeline-e2e.test.cjs": 9138,
"executor-mvp-tdd-section.test.cjs": 109,
"explore-command.test.cjs": 44,
"external-descriptor-confinement.test.cjs": 56,
"external-descriptor-loader-wiring.test.cjs": 261,
"external-job-waiting.test.cjs": 82,
"external-job.test.cjs": 179,
"extract-learnings.test.cjs": 102,
"extraction-discipline-consistency.test.cjs": 67,
"federated-config-key-removal.test.cjs": 137,
"federated-config-loadconfig.test.cjs": 915,
"federated-config.test.cjs": 206,
"few-shot-calibration.test.cjs": 68,
"fix-1941-quick-worktree-stale-base.test.cjs": 31,
"fix-2068-resolve-execution-dynamic-routing.test.cjs": 4537,
"fix-2136-clock-local-today.test.cjs": 746,
"fix-2138-ship-note-lost-on-merge.test.cjs": 27,
"fix-2194-review-timeout-guidance.test.cjs": 57,
"fix-2196-debug-agent-handoff.test.cjs": 51,
"fix-2257-debug-nonterminal-resume.test.cjs": 104,
"fix-2284-hermes-agent-delegate-task-projection.test.cjs": 7880,
"fix-2285-claude-orchestration-wiring.test.cjs": 3226,
"fix-2287-deferred-items-reader.test.cjs": 2854,
"fix-2289-context-monitor-event-allowlist.test.cjs": 4471,
"fix-2297-resolve-model-ids-runtime-scoping.test.cjs": 333,
"fix-2337-add-todo-severity.test.cjs": 29,
"fix-2358-review-temp-path-scoping.test.cjs": 117,
"fixture-builder.test.cjs": 198,
"forensics.test.cjs": 92,
"format-github-release-notes.test.cjs": 57,
"frontmatter-cli.test.cjs": 14617,
"frontmatter.property.test.cjs": 2347,
"frontmatter.test.cjs": 7786,
"frontmatter.unit.test.cjs": 438,
"gap-checker.property.test.cjs": 10443,
"gate-predicate-evaluator.test.cjs": 113,
"gates-taxonomy.test.cjs": 92,
"gemini-runtime-removed.test.cjs": 5019,
"gen-registry.test.cjs": 1299,
"getdirname-registry-derivation.test.cjs": 41,
"git-base-branch.test.cjs": 6663,
"global-config-home-fragment.test.cjs": 56,
"golden-install-parity.test.cjs": 22621,
"golden-install-tree.test.cjs": 24864,
"golden-parity-single-source.test.cjs": 56,
"graphify-auto-update.slow.test.cjs": 31613,
"graphify-command-cutover.test.cjs": 10275,
"graphify-graph-path.test.cjs": 681,
"graphify-query.test.cjs": 1101,
"graphify-visualization.test.cjs": 3720,
"graphify.test.cjs": 1175,
"gsd-check-update-worker-platform-gate.test.cjs": 1382,
"gsd-mcp-server-bin.test.cjs": 451,
"gsd-mcp-server.test.cjs": 1033,
"gsd-researcher-app-aware.test.cjs": 79,
"gsd-researcher-flow-diagram.test.cjs": 101,
"gsd-settings-advanced.test.cjs": 2641,
"gsd-statusline-git.property.test.cjs": 1600,
"gsd-statusline-state.property.test.cjs": 223,
"gsd-statusline.test.cjs": 6310,
"gsd-tools-path-refs.test.cjs": 298,
"gsd-workflow.structure.test.cjs": 128,
"gsd2-import.test.cjs": 3459,
"handshake-serialized.test.cjs": 93,
"hardcoded-paths.test.cjs": 497,
"health-validation.test.cjs": 13246,
"helpers-cleanup.test.cjs": 89,
"helpers-process-isolation.test.cjs": 38,
"hermes-dispatch-upgrade.test.cjs": 75,
"hermes-imperative-reference.test.cjs": 169,
"hermes-skills-migration.test.cjs": 139,
"hook-bus.test.cjs": 65,
"hook-validation.test.cjs": 87,
"hooks-opt-in.test.cjs": 6422,
"host-integration-descriptors.test.cjs": 310,
"host-integration-validator-parity.test.cjs": 150,
"host-integration.test.cjs": 343,
"hub-logger-integration.test.cjs": 293,
"import-command.test.cjs": 207,
"ingest-docs.test.cjs": 3456,
"init-manager.test.cjs": 20615,
"init.test.cjs": 64096,
"injection-blocking-config.test.cjs": 661,
"inline-plan-threshold.test.cjs": 815,
"install-minimal-hooks.test.cjs": 136334,
"install-nested-layout.test.cjs": 1852,
"install-path-detection.test.cjs": 5261,
"install-regressions.test.cjs": 30044,
"install-runtime-artifacts.test.cjs": 30370,
"install-update-marker.test.cjs": 137,
"install-write-confinement.test.cjs": 5239,
"install.test.cjs": 114366,
"installer-migration-authoring.test.cjs": 90,
"installer-migration-install.integration.test.cjs": 55927,
"installer-migration-prune-stale-pristine.test.cjs": 118,
"installer-migration-rename-gsd-core.test.cjs": 145,
"installer-migration-report.test.cjs": 273,
"installer-migrations.test.cjs": 4798,
"intel-command-cutover.test.cjs": 6280,
"intel.test.cjs": 6372,
"inventory-headings-countfree.test.cjs": 51,
"inventory-manifest-sync.test.cjs": 42,
"io.test.cjs": 2003,
"ios-scaffold-safety.test.cjs": 97,
"issue-1575-agent-descriptor-parity.test.cjs": 2781,
"issue-1855-marketplace-manifest.test.cjs": 146,
"issue-2045-third-party-skills-surface.test.cjs": 2049,
"issue-2517-runtime-aware-profiles.test.cjs": 1598,
"issue-2639-codex-toml-neutralization.test.cjs": 47,
"issue-429-comment-text-gate.test.cjs": 1232,
"issue-498-identity-drift-lint.test.cjs": 211,
"issue-498-package-identity.test.cjs": 99,
"issue-498-update-backup-runtime-dir.test.cjs": 50,
"issue-498-update-context.test.cjs": 791,
"issue-57-runtime-install-no-drift.test.cjs": 148,
"issue-607-cache-lineage.test.cjs": 109,
"issue-607-installer-dry-run.install.test.cjs": 866,
"issue-607-legacy-cleanup.test.cjs": 181,
"issue-69-surface-keeps-nested.test.cjs": 463,
"issue-766-plugin-manifest.test.cjs": 442,
"issue-787-cline-hooks-agents.test.cjs": 7503,
"issue-815-update-next-channel.test.cjs": 125,
"issue-844-manifest-version-sync.test.cjs": 290,
"issue-dedupe.test.cjs": 303,
"issue-version-gate.test.cjs": 238,
"kilo-imperative-reference.test.cjs": 168,
"kilo-upgrades.test.cjs": 11403,
"kimi-agent-converter.test.cjs": 7497,
"kimi-imperative-reference.test.cjs": 95,
"kimi-skill-converter.test.cjs": 44,
"kimi-tool-mapping.test.cjs": 77,
"kimi-upgrades.test.cjs": 7445,
"learnings.test.cjs": 1921,
"lint-docs-required.test.cjs": 127,
"lint-legacy-dir-name.test.cjs": 957,
"lint-pr-check-project-dir.test.cjs": 520,
"lint-regression-test-names.test.cjs": 2172,
"lint-resolution-provenance.test.cjs": 91,
"lint-skill-deps.test.cjs": 1579,
"lint-test-file-count.test.cjs": 1486,
"list-seeds.property.test.cjs": 184,
"list-seeds.test.cjs": 8729,
"locking-bugs-1909-1916-1925-1927.test.cjs": 3269,
"logger.test.cjs": 146,
"loop-hook-firing-spike.test.cjs": 70,
"loop-hooks-empty-points-e2e.test.cjs": 11918,
"loop-hooks-ship-pre-e2e.test.cjs": 3698,
"loop-hooks-verify-post-e2e.test.cjs": 5985,
"loop-host-contract.test.cjs": 246,
"loop-render-hooks.test.cjs": 6447,
"m8-writestatemd-scan-after-lock.test.cjs": 58,
"m9-statelock-write-error-orphan.test.cjs": 40,
"managed-hooks.test.cjs": 10224,
"markdown-sectionizer.test.cjs": 2010,
"markdown-table.test.cjs": 313,
"mcp-tool-inheritance.test.cjs": 217,
"mempalace-capture-headless-invocation.test.cjs": 50,
"methodology-artifact.test.cjs": 85,
"milestone-archive.test.cjs": 8439,
"milestone-helper.test.cjs": 70,
"milestone-prefixed-convention.test.cjs": 3208,
"milestone-summary.test.cjs": 1646,
"milestone.test.cjs": 30666,
"model-adapter.test.cjs": 31,
"model-alias-map.test.cjs": 25,
"model-catalog-runtime-defaults.test.cjs": 74,
"model-catalog-valid-tiers.test.cjs": 58,
"model-profiles.test.cjs": 2200,
"model-resolver.test.cjs": 35231,
"model-routing-spawn-threading.test.cjs": 235,
"multi-runtime-select.test.cjs": 97,
"mutation-matrix-ratchet.test.cjs": 373,
"mutation-matrix-stdin-eagain.test.cjs": 35,
"mvp-phase-command.test.cjs": 61,
"mvp-phase-integration.test.cjs": 2508,
"mvp-phase-spidr.test.cjs": 32,
"new-milestone-clear-phases.test.cjs": 10113,
"new-project-mvp-prompt.test.cjs": 103,
"next-decimal-roadmap-scan.test.cjs": 4986,
"next-safety-gates.test.cjs": 97,
"next-up-clear-order.test.cjs": 223,
"no-bare-npm-exec.rule.test.cjs": 262,
"no-crlf-fragile-split.rule.test.cjs": 361,
"no-dead-sdk-refs.test.cjs": 155,
"no-hardcoded-home-gsd-tools.test.cjs": 285,
"no-hardcoded-tmp.rule.test.cjs": 369,
"no-path-literal-in-assert.rule.test.cjs": 588,
"no-phantom-issue-refs.test.cjs": 890,
"no-posix-mode-bit-assert.rule.test.cjs": 384,
"no-unguarded-nonportable-exec.rule.test.cjs": 670,
"non-claude-runtimes-registry-derivation.test.cjs": 57,
"normalize-path-in-content.rule.test.cjs": 1379,
"normalize-test-command.test.cjs": 257,
"npm-integrity-gate.test.cjs": 4285,
"onboard-command.test.cjs": 10665,
"opencode-command-dir-plural.test.cjs": 14645,
"opencode-imperative-reference.test.cjs": 71,
"opencode-permissions.test.cjs": 42,
"opencode-plugin-adapter.test.cjs": 2776,
"opencode-review-reconstruction.property.test.cjs": 35,
"orphan-worktree-detection.test.cjs": 1618,
"orphaned-hooks.test.cjs": 70,
"package-legitimacy-gate.test.cjs": 378,
"package-legitimacy.property.test.cjs": 167,
"package-legitimacy.test.cjs": 294,
"package-manifest.test.cjs": 59,
"package-name-single-source.test.cjs": 143,
"parallel-dependent-plans.test.cjs": 100,
"path-replacement.test.cjs": 347,
"pattern-mapper.test.cjs": 3386,
"pause-work-improvements.test.cjs": 337,
"perf-315-loadconfig-subrepo-scan.test.cjs": 46,
"perf-316-state-lock-buffer-alloc.test.cjs": 516,
"perf-317-context-monitor-fs.test.cjs": 5249,
"perf-407-planning-lock-buffer-alloc.test.cjs": 80,
"phase-command-router.test.cjs": 2814,
"phase-dependency-levels.test.cjs": 86,
"phase-id-drift-guard.test.cjs": 505,
"phase-id.test.cjs": 500,
"phase-lifecycle.test.cjs": 105,
"phase-locator.test.cjs": 239,
"phase.test.cjs": 136772,
"phase6-capability-docs.test.cjs": 71,
"phase6-capstone-conformance.test.cjs": 3569,
"phase6-planning-capabilities.test.cjs": 60,
"phase6-review-capabilities.test.cjs": 135,
"phases-command-router.test.cjs": 1234,
"pi-extension-reachability.test.cjs": 1653,
"pi-imperative-reference.test.cjs": 48,
"pi-upgrades.test.cjs": 114,
"pick-flag.test.cjs": 4302,
"plan-bounce.test.cjs": 1329,
"plan-phase-drift-guard.test.cjs": 631,
"plan-phase-mvp-flag.test.cjs": 1426,
"plan-phase-ui-redirect.test.cjs": 232,
"plan-pre-hook-e2e.test.cjs": 7778,
"plan-review-convergence.test.cjs": 1818,
"planner-decomposition.test.cjs": 189,
"planner-language-regression.test.cjs": 1075,
"planner-mvp-mode.test.cjs": 194,
"planning-workspace.test.cjs": 6988,
"platform-guard.unit.test.cjs": 693,
"playwright-ui-verify.test.cjs": 68,
"policy-138-nyquist-config-default.test.cjs": 33,
"policy-160-route0-resume.test.cjs": 102,
"policy-lint-shallow-checkout.test.cjs": 67,
"policy-release-no-npm-self-upgrade.test.cjs": 62,
"policy-shell-pinning.test.cjs": 396,
"portability-rule-disable-ban.test.cjs": 24574,
"portability-vocab-drift.test.cjs": 1546,
"post-planning-gaps-2493.test.cjs": 21648,
"pr-template-policy.test.cjs": 175,
"precommit-alias-drift-hook.test.cjs": 352,
"precondition-element.test.cjs": 1141,
"prepush-enterprise-email-hook.test.cjs": 178,
"probe-core.property.test.cjs": 325,
"probe-core.test.cjs": 252,
"product-name-purity.test.cjs": 69,
"profile-output.test.cjs": 10693,
"profile-pipeline.test.cjs": 4712,
"progress-forensic.test.cjs": 432,
"progress-mvp-display.test.cjs": 50,
"prohibition-enforcement.property.test.cjs": 291,
"prohibition-enforcement.test.cjs": 54884,
"prohibition-probe.docs-fixtures.test.cjs": 82,
"prohibition-probe.planner-contract.test.cjs": 25,
"prohibition-probe.schema.test.cjs": 140,
"prohibition-probe.spec-phase-contract.test.cjs": 56,
"prohibition-probe.validators.test.cjs": 37,
"prohibition-probe.verify-tier.test.cjs": 620,
"project-instruction-file-parity.test.cjs": 5145,
"project-root.test.cjs": 114,
"prompt-budget-cli.test.cjs": 2758,
"prompt-budget.property.test.cjs": 1749,
"prompt-budget.test.cjs": 68,
"prompt-budget.unit.test.cjs": 408,
"prompt-injection-scan.security.test.cjs": 1318,
"prompt-thinning.test.cjs": 356,
"prune-orphaned-worktrees.test.cjs": 1375,
"quick-branching.test.cjs": 1315,
"quick-commit-boundary.test.cjs": 67,
"quick-research.test.cjs": 3543,
"quick-session-management.test.cjs": 49,
"qwen-imperative-reference.test.cjs": 101,
"qwen-skills-migration.test.cjs": 534,
"qwen-upgrades.test.cjs": 4761,
"reachability-check.test.cjs": 55,
"read-guard.test.cjs": 2465,
"read-injection-scanner.property.test.cjs": 20842,
"read-injection-scanner.security.test.cjs": 4662,
"reapply-patches.test.cjs": 178,
"reapply-verify-hunks.test.cjs": 4848,
"redaction.test.cjs": 61,
"refactor-1390-t3-characterization.test.cjs": 138,
"registry-schema.test.cjs": 378,
"release-coverage-scope.test.cjs": 31,
"release-finalize-syncs-next-version.test.cjs": 55,
"release-tarball-smoke-bin-invocation.test.cjs": 35,
"release-tarball-smoke-workflow.test.cjs": 59,
"release-tarball-smoke.install.test.cjs": 144419,
"repo-invariants.test.cjs": 21850,
"repo-layout.test.cjs": 101,
"representative-corpus.test.cjs": 4322,
"require-fs-op-fallback.rule.test.cjs": 430,
"require-userprofile-with-home.rule.test.cjs": 205,
"research-agent-profiles.test.cjs": 316,
"research-cli.test.cjs": 11909,
"research-provider.property.test.cjs": 262,
"research-provider.test.cjs": 144,
"research-store.property.test.cjs": 326,
"research-store.test.cjs": 405,
"resolution.test.cjs": 37,
"reversibility-tagging.test.cjs": 5595,
"review-default-reviewers-config.test.cjs": 6391,
"review-default-reviewers-resolution.test.cjs": 81,
"review-default-reviewers-workflow.test.cjs": 128,
"review-model-config.test.cjs": 9411,
"review-reviewer-instances-config.test.cjs": 1998,
"review-reviewer-instances.test.cjs": 84,
"review-reviewer-selection.test.cjs": 61,
"roadmap-command-router.test.cjs": 77,
"roadmap-mode-field.test.cjs": 2558,
"roadmap-parser.test.cjs": 33080,
"roadmap-phase-fallback.test.cjs": 3736,
"roadmap-upgrade.test.cjs": 957,
"roadmap.test.cjs": 55342,
"roadmapper-granularity.test.cjs": 5203,
"run-tests-harness.test.cjs": 161263,
"run-with-timeout.test.cjs": 18008,
"runtime-artifact-install-plan.test.cjs": 142,
"runtime-artifact-layout-descriptor-drive.test.cjs": 322,
"runtime-artifact-layout-install-profiles.test.cjs": 2604,
"runtime-artifact-layout-surface.test.cjs": 1754,
"runtime-artifact-layout.test.cjs": 3980,
"runtime-config-adapter-registry.test.cjs": 196,
"runtime-converters.test.cjs": 893,
"runtime-flags.test.cjs": 62,
"runtime-homes-descriptor-drive.test.cjs": 473,
"runtime-homes.property.test.cjs": 501,
"runtime-label-policy.test.cjs": 51,
"runtime-launcher-parity.test.cjs": 3251,
"runtime-name-policy.test.cjs": 255,
"scan-command.test.cjs": 91,
"schema-drift.test.cjs": 6347,
"sdk-removal-query-family-dispatch.test.cjs": 3029,
"sdk-smoke.test.cjs": 42,
"secret-scan-lint.security.test.cjs": 4752,
"secure-phase-single-writer.test.cjs": 52,
"secure-phase.test.cjs": 261,
"security-dead-exports.regression.test.cjs": 112,
"security-prompt-injection.security.test.cjs": 9359,
"security-scan.security.test.cjs": 11654,
"security.test.cjs": 1956,
"seed-scan-new-milestone.test.cjs": 54,
"semver-compare.test.cjs": 168,
"settings-integrations.test.cjs": 13052,
"settings-jsonc.test.cjs": 149,
"sh-hook-paths.test.cjs": 195,
"shell-command-projection-dispatch.test.cjs": 3711,
"shell-command-projection-path-sep.test.cjs": 173,
"skill-frontmatter-contract.test.cjs": 872,
"skill-manifest.test.cjs": 4312,
"slash-command-namespace.test.cjs": 4520,
"slurm-adapter.test.cjs": 112,
"smart-entry.unit.test.cjs": 3312,
"spawn-liveness-banner.test.cjs": 160,
"spec-section.test.cjs": 606,
"stale-bake-guard.test.cjs": 376,
"state-acquirestatelock-non-eexist.test.cjs": 126,
"state-command-cutover.test.cjs": 1467,
"state-io.test.cjs": 72,
"state-prune.test.cjs": 6401,
"state-rebuild-cli.test.cjs": 3801,
"state-rebuild.test.cjs": 85,
"state-transition.test.cjs": 455,
"state.test.cjs": 116217,
"stats-mvp-display.test.cjs": 1082,
"subagent-timeout.test.cjs": 6840,
"surface-empty-manifest-agents.test.cjs": 119,
"surface-md-paths.regression.test.cjs": 38,
"sync-next-version.test.cjs": 148,
"table-schema-drift-lint.test.cjs": 789,
"tdd-mode.test.cjs": 8685,
"teams-status.test.cjs": 3434,
"temp-subdir.test.cjs": 93,
"template.test.cjs": 5110,
"test-failure-reasons.test.cjs": 47,
"test-gate-watch-mode.test.cjs": 198,
"thinking-model-guidance.test.cjs": 296,
"thinking-partner.test.cjs": 716,
"thread-session-management.test.cjs": 114,
"trace-correlation.test.cjs": 74,
"tracer-bullet.test.cjs": 2778,
"trae-imperative-reference.test.cjs": 66,
"trae-upgrades.test.cjs": 4593,
"transition-verification-gate.test.cjs": 38,
"tsconfig-noemit.test.cjs": 6383,
"uat-predicate.test.cjs": 668,
"uat.test.cjs": 15879,
"ui-checker-adversarial-stance.test.cjs": 26,
"ui-consideration-probe-docs-fixtures.test.cjs": 88,
"ui-consideration-probe.test.cjs": 347,
"ui-review-next-guidance.test.cjs": 65,
"ui-safety-gate.test.cjs": 78,
"ultraplan-phase.test.cjs": 169,
"untrusted-input-isolation.test.cjs": 706,
"update-custom-backup.test.cjs": 8333,
"update-size-baseline.test.cjs": 115,
"validate-context.test.cjs": 4346,
"validate-registry.test.cjs": 1266,
"verification-overrides.test.cjs": 136,
"verification-status.test.cjs": 614,
"verifier-behavior-unverified.test.cjs": 116,
"verifier-deferred-items.test.cjs": 92,
"verifier-mvp-section.test.cjs": 72,
"verifier-spotcheck-test-discipline.test.cjs": 139,
"verify-health.test.cjs": 34751,
"verify-mvp-uat.test.cjs": 63,
"verify-npm-publish.test.cjs": 100,
"verify-test-quality.test.cjs": 532,
"verify-work-auto-transition.test.cjs": 78,
"verify.test.cjs": 26790,
"vscode-browser-no-node-api.test.cjs": 36,
"vscode-extension-reachability.test.cjs": 1838,
"vscode-ide-reference.test.cjs": 155,
"vscode-lm-tools.test.cjs": 1616,
"vscode-subagent-dispatch.test.cjs": 1866,
"windows-robustness.test.cjs": 234,
"windsurf-conversion.test.cjs": 133,
"windsurf-hooks-bridge.test.cjs": 5096,
"windsurf-install.test.cjs": 47,
"workflow-compat.test.cjs": 386,
"workflow-guard-registration.test.cjs": 375,
"workflow-maintainer-skip.test.cjs": 142,
"workflow-shell-pinning.test.cjs": 101,
"workflow-size-budget.test.cjs": 473,
"workflow-size.test.cjs": 196,
"workflow-step-tag-balance.test.cjs": 336,
"workspace.test.cjs": 7399,
"workstream-inventory.test.cjs": 73,
"workstream-name-policy.test.cjs": 61,
"workstream.test.cjs": 40951,
"worktree-base-ref.test.cjs": 202,
"worktree-baseref-install.test.cjs": 11950,
"worktree-cleanup.test.cjs": 1901,
"worktree-safety.test.cjs": 14332,
"worktree.test.cjs": 1409,
"write-set.test.cjs": 172
}
}