* 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>
This commit is contained in:
@@ -23,7 +23,7 @@
|
||||
"gsd-pattern-mapper.md": 12487,
|
||||
"gsd-phase-researcher.md": 40866,
|
||||
"gsd-plan-checker.md": 44780,
|
||||
"gsd-planner.md": 49294,
|
||||
"gsd-planner.md": 49327,
|
||||
"gsd-project-researcher.md": 22242,
|
||||
"gsd-research-synthesizer.md": 13847,
|
||||
"gsd-roadmapper.md": 22273,
|
||||
|
||||
@@ -25,7 +25,7 @@
|
||||
"agents/gsd-pattern-mapper.md": "e62ee90d39084802",
|
||||
"agents/gsd-phase-researcher.md": "cff1196c8e8bb4fa",
|
||||
"agents/gsd-plan-checker.md": "dd1e7cdc837d8f3e",
|
||||
"agents/gsd-planner.md": "e2ad6fa2952fe88f",
|
||||
"agents/gsd-planner.md": "c7ba1adfe2b1975d",
|
||||
"agents/gsd-project-researcher.md": "85de7f562872ee9b",
|
||||
"agents/gsd-research-synthesizer.md": "18a2e1b30ff7ae3a",
|
||||
"agents/gsd-roadmapper.md": "7a8465ac6d4dd29e",
|
||||
@@ -108,7 +108,7 @@
|
||||
"gsd-core/references/model-profiles.md": "6568ca29b6ee00d8",
|
||||
"gsd-core/references/mvp-concepts.md": "3464783eaaef5c10",
|
||||
"gsd-core/references/phase-argument-parsing.md": "e5bbb985f3bc3e34",
|
||||
"gsd-core/references/planner-antipatterns.md": "2459c40bfc8a0ea8",
|
||||
"gsd-core/references/planner-antipatterns.md": "88a0cd714d33fe34",
|
||||
"gsd-core/references/planner-chunked.md": "79fe674221e738e6",
|
||||
"gsd-core/references/planner-gap-closure.md": "76bee257911413e7",
|
||||
"gsd-core/references/planner-graphify-auto-update.md": "1ed614dfba72f2a3",
|
||||
@@ -118,6 +118,7 @@
|
||||
"gsd-core/references/planner-load-graph-context.md": "90cb2ecd1f3eb4d8",
|
||||
"gsd-core/references/planner-mvp-mode.md": "cdac9dde7cd8fa84",
|
||||
"gsd-core/references/planner-preconditions.md": "4511829607ec9107",
|
||||
"gsd-core/references/planner-reversibility.md": "74acbf4a873a01e4",
|
||||
"gsd-core/references/planner-reviews.md": "da39eace09a10743",
|
||||
"gsd-core/references/planner-revision.md": "86ba8a511f081f05",
|
||||
"gsd-core/references/planner-source-audit.md": "7de5bdb07232ce0b",
|
||||
@@ -145,7 +146,7 @@
|
||||
"gsd-core/references/tdd.md": "e4708ede157478b6",
|
||||
"gsd-core/references/thinking-models-debug.md": "2da61022b16c4e7c",
|
||||
"gsd-core/references/thinking-models-execution.md": "dcc650a8b5f3e049",
|
||||
"gsd-core/references/thinking-models-planning.md": "7e19462313fa028f",
|
||||
"gsd-core/references/thinking-models-planning.md": "2e476a78c8dab51b",
|
||||
"gsd-core/references/thinking-models-research.md": "5f6bf3f3b889c6e4",
|
||||
"gsd-core/references/thinking-models-verification.md": "a71a933d51ca3d8d",
|
||||
"gsd-core/references/thinking-partner.md": "827c1badf3e6df41",
|
||||
@@ -239,7 +240,7 @@
|
||||
"gsd-core/workflows/discuss-phase/modes/power.md": "96822b22c42d75e8",
|
||||
"gsd-core/workflows/discuss-phase/modes/text.md": "c384c22ffff4dc02",
|
||||
"gsd-core/workflows/discuss-phase/templates/checkpoint.json": "e3bc3dca49db59eb",
|
||||
"gsd-core/workflows/discuss-phase/templates/context.md": "9804674fccada405",
|
||||
"gsd-core/workflows/discuss-phase/templates/context.md": "da6bf5281bf7d2bf",
|
||||
"gsd-core/workflows/discuss-phase/templates/discussion-log.md": "2b56ec2868cbddb4",
|
||||
"gsd-core/workflows/do.md": "6be997df35e9e82b",
|
||||
"gsd-core/workflows/docs-update.md": "16acb903dbe2bcbe",
|
||||
@@ -261,7 +262,7 @@
|
||||
"gsd-core/workflows/help.md": "5d040504b9ab35e3",
|
||||
"gsd-core/workflows/help/modes/brief.md": "fa2675516b40e2e3",
|
||||
"gsd-core/workflows/help/modes/default.md": "be05e56b2c5ee2c0",
|
||||
"gsd-core/workflows/help/modes/full.md": "80d03a09b561766b",
|
||||
"gsd-core/workflows/help/modes/full.md": "e0f631355c010bdd",
|
||||
"gsd-core/workflows/help/modes/topic.md": "0bf9ab39d7044d69",
|
||||
"gsd-core/workflows/import.md": "7778705ca6c3bc23",
|
||||
"gsd-core/workflows/inbox.md": "923bf25e18a71698",
|
||||
@@ -283,7 +284,7 @@
|
||||
"gsd-core/workflows/onboard.md": "af12b0573b14ce7f",
|
||||
"gsd-core/workflows/pause-work.md": "564de32981a24337",
|
||||
"gsd-core/workflows/plan-milestone-gaps.md": "dd6a4b3a8b05ab6e",
|
||||
"gsd-core/workflows/plan-phase.md": "4488a41ec68c9da4",
|
||||
"gsd-core/workflows/plan-phase.md": "6d62f201811c1299",
|
||||
"gsd-core/workflows/plan-phase/steps/closed-phase-gate.md": "4099ef6d0868de60",
|
||||
"gsd-core/workflows/plan-phase/steps/prd-express-path.md": "ab0b22244c3389aa",
|
||||
"gsd-core/workflows/plan-phase/steps/windows-troubleshooting.md": "e9de7a96bbfff261",
|
||||
@@ -409,7 +410,7 @@
|
||||
"skills/gsd-onboard/SKILL.md": "1447665c64c8ade8",
|
||||
"skills/gsd-pause-work/SKILL.md": "9d3cc6bd70b03df1",
|
||||
"skills/gsd-phase/SKILL.md": "00676bbea61410bf",
|
||||
"skills/gsd-plan-phase/SKILL.md": "03a8f71d4385a50d",
|
||||
"skills/gsd-plan-phase/SKILL.md": "84e89f076dc6bef3",
|
||||
"skills/gsd-plan-review-convergence/SKILL.md": "79d264b132ca360d",
|
||||
"skills/gsd-pr-branch/SKILL.md": "5e050db73988f9a8",
|
||||
"skills/gsd-profile-user/SKILL.md": "10f2ff4be2e7d55f",
|
||||
|
||||
@@ -25,7 +25,7 @@
|
||||
"agents/gsd-pattern-mapper.md": "43c6021cf7caabfa",
|
||||
"agents/gsd-phase-researcher.md": "f1f6fd6a3e67c7a8",
|
||||
"agents/gsd-plan-checker.md": "bf1a4e636f2390de",
|
||||
"agents/gsd-planner.md": "86f6cfd300125965",
|
||||
"agents/gsd-planner.md": "f0195f37cafb303b",
|
||||
"agents/gsd-project-researcher.md": "4531b7cc8f5e5f7d",
|
||||
"agents/gsd-research-synthesizer.md": "4a4f68e6c75b133a",
|
||||
"agents/gsd-roadmapper.md": "bb2f57695dbab32c",
|
||||
@@ -79,7 +79,7 @@
|
||||
"commands/gsd-onboard.md": "1e8acf7be31834be",
|
||||
"commands/gsd-pause-work.md": "4fb032f72238fe33",
|
||||
"commands/gsd-phase.md": "4920d15d779329eb",
|
||||
"commands/gsd-plan-phase.md": "6b05898d574f3666",
|
||||
"commands/gsd-plan-phase.md": "e6c1bcd1da345fa5",
|
||||
"commands/gsd-plan-review-convergence.md": "4523045c95d4cd52",
|
||||
"commands/gsd-pr-branch.md": "e168fcd545d72d0d",
|
||||
"commands/gsd-profile-user.md": "ffd9c2feb4c69f11",
|
||||
@@ -179,7 +179,7 @@
|
||||
"gsd-core/references/model-profiles.md": "e067ad3df6770db1",
|
||||
"gsd-core/references/mvp-concepts.md": "72f7e8b1f8ae7118",
|
||||
"gsd-core/references/phase-argument-parsing.md": "e5bbb985f3bc3e34",
|
||||
"gsd-core/references/planner-antipatterns.md": "7ed54ec1e2cc54ac",
|
||||
"gsd-core/references/planner-antipatterns.md": "013ad54062399dad",
|
||||
"gsd-core/references/planner-chunked.md": "79fe674221e738e6",
|
||||
"gsd-core/references/planner-gap-closure.md": "76bee257911413e7",
|
||||
"gsd-core/references/planner-graphify-auto-update.md": "6aeffd9097e25e22",
|
||||
@@ -189,6 +189,7 @@
|
||||
"gsd-core/references/planner-load-graph-context.md": "ca7a7af3f35ae61b",
|
||||
"gsd-core/references/planner-mvp-mode.md": "cfd535c9c545e73e",
|
||||
"gsd-core/references/planner-preconditions.md": "4511829607ec9107",
|
||||
"gsd-core/references/planner-reversibility.md": "d75786c2d3e6ff5c",
|
||||
"gsd-core/references/planner-reviews.md": "dda0193a0fbd4947",
|
||||
"gsd-core/references/planner-revision.md": "86ba8a511f081f05",
|
||||
"gsd-core/references/planner-source-audit.md": "7de5bdb07232ce0b",
|
||||
@@ -216,7 +217,7 @@
|
||||
"gsd-core/references/tdd.md": "e4708ede157478b6",
|
||||
"gsd-core/references/thinking-models-debug.md": "2da61022b16c4e7c",
|
||||
"gsd-core/references/thinking-models-execution.md": "dcc650a8b5f3e049",
|
||||
"gsd-core/references/thinking-models-planning.md": "7e19462313fa028f",
|
||||
"gsd-core/references/thinking-models-planning.md": "ef519bff8c8bd572",
|
||||
"gsd-core/references/thinking-models-research.md": "5f6bf3f3b889c6e4",
|
||||
"gsd-core/references/thinking-models-verification.md": "a71a933d51ca3d8d",
|
||||
"gsd-core/references/thinking-partner.md": "41069529ef776e39",
|
||||
@@ -310,7 +311,7 @@
|
||||
"gsd-core/workflows/discuss-phase/modes/power.md": "fdc7a728eaaa2261",
|
||||
"gsd-core/workflows/discuss-phase/modes/text.md": "da6d45207da4a988",
|
||||
"gsd-core/workflows/discuss-phase/templates/checkpoint.json": "e3bc3dca49db59eb",
|
||||
"gsd-core/workflows/discuss-phase/templates/context.md": "6cd929e989fe2b0f",
|
||||
"gsd-core/workflows/discuss-phase/templates/context.md": "eeebda60636d1ad0",
|
||||
"gsd-core/workflows/discuss-phase/templates/discussion-log.md": "1bbd7703f11128e1",
|
||||
"gsd-core/workflows/do.md": "90df4f1fe248cdf3",
|
||||
"gsd-core/workflows/docs-update.md": "b5cdf1c35043cf7b",
|
||||
@@ -332,7 +333,7 @@
|
||||
"gsd-core/workflows/help.md": "5d040504b9ab35e3",
|
||||
"gsd-core/workflows/help/modes/brief.md": "924860e1f07defb0",
|
||||
"gsd-core/workflows/help/modes/default.md": "08a02976c0c5cc50",
|
||||
"gsd-core/workflows/help/modes/full.md": "110608f0352bb0a3",
|
||||
"gsd-core/workflows/help/modes/full.md": "d1bbc72fe912a70c",
|
||||
"gsd-core/workflows/help/modes/topic.md": "5c160093f3cbf35d",
|
||||
"gsd-core/workflows/import.md": "31a0f3a33154939f",
|
||||
"gsd-core/workflows/inbox.md": "a7d439981775bc29",
|
||||
@@ -354,7 +355,7 @@
|
||||
"gsd-core/workflows/onboard.md": "f29c4fbef3b473fd",
|
||||
"gsd-core/workflows/pause-work.md": "f2b33bba5593d422",
|
||||
"gsd-core/workflows/plan-milestone-gaps.md": "852f6d7c0c4299dc",
|
||||
"gsd-core/workflows/plan-phase.md": "32703b6b822f44c0",
|
||||
"gsd-core/workflows/plan-phase.md": "5453f154e344926e",
|
||||
"gsd-core/workflows/plan-phase/steps/closed-phase-gate.md": "b36f77ac7344a072",
|
||||
"gsd-core/workflows/plan-phase/steps/prd-express-path.md": "197c0590326371b2",
|
||||
"gsd-core/workflows/plan-phase/steps/windows-troubleshooting.md": "49f58c3f75be3eb5",
|
||||
@@ -500,7 +501,7 @@
|
||||
"skills/gsd-ns-workflow/skills/mvp-phase/SKILL.md": "f259f089a8d07a54",
|
||||
"skills/gsd-ns-workflow/skills/next/SKILL.md": "e7409245f1a0f9de",
|
||||
"skills/gsd-ns-workflow/skills/phase/SKILL.md": "fe5b26417ee466be",
|
||||
"skills/gsd-ns-workflow/skills/plan-phase/SKILL.md": "0dda686ce26d9171",
|
||||
"skills/gsd-ns-workflow/skills/plan-phase/SKILL.md": "3e0237a7433e99b0",
|
||||
"skills/gsd-ns-workflow/skills/plan-review-convergence/SKILL.md": "32b4344ec427afce",
|
||||
"skills/gsd-ns-workflow/skills/progress/SKILL.md": "68bda87136db9fb3",
|
||||
"skills/gsd-ns-workflow/skills/quick/SKILL.md": "014dec52d85dcb0e",
|
||||
|
||||
@@ -24,7 +24,7 @@
|
||||
"agents/gsd-pattern-mapper.md": "b45b5e106775bec1",
|
||||
"agents/gsd-phase-researcher.md": "4772d9eada32e8bd",
|
||||
"agents/gsd-plan-checker.md": "75851b147f35354a",
|
||||
"agents/gsd-planner.md": "44a04bdebe044114",
|
||||
"agents/gsd-planner.md": "352243b5b6c87c36",
|
||||
"agents/gsd-project-researcher.md": "d7f355894519f9fe",
|
||||
"agents/gsd-research-synthesizer.md": "1c738df9932d325a",
|
||||
"agents/gsd-roadmapper.md": "453e9471ad27c7ea",
|
||||
@@ -78,7 +78,7 @@
|
||||
"commands/gsd-onboard.md": "d0d9405bc73899bd",
|
||||
"commands/gsd-pause-work.md": "01dbaebfefacd252",
|
||||
"commands/gsd-phase.md": "e8c226d2694692a5",
|
||||
"commands/gsd-plan-phase.md": "7d14158eb377a248",
|
||||
"commands/gsd-plan-phase.md": "a893b7e30eaed754",
|
||||
"commands/gsd-plan-review-convergence.md": "cb6a8e074c0ab0cd",
|
||||
"commands/gsd-pr-branch.md": "382c23a6a644c0e4",
|
||||
"commands/gsd-profile-user.md": "adbc5b025b30e836",
|
||||
@@ -178,7 +178,7 @@
|
||||
"gsd-core/references/model-profiles.md": "c249163663bbea53",
|
||||
"gsd-core/references/mvp-concepts.md": "3464783eaaef5c10",
|
||||
"gsd-core/references/phase-argument-parsing.md": "e5bbb985f3bc3e34",
|
||||
"gsd-core/references/planner-antipatterns.md": "7ed54ec1e2cc54ac",
|
||||
"gsd-core/references/planner-antipatterns.md": "013ad54062399dad",
|
||||
"gsd-core/references/planner-chunked.md": "79fe674221e738e6",
|
||||
"gsd-core/references/planner-gap-closure.md": "76bee257911413e7",
|
||||
"gsd-core/references/planner-graphify-auto-update.md": "1ed614dfba72f2a3",
|
||||
@@ -188,6 +188,7 @@
|
||||
"gsd-core/references/planner-load-graph-context.md": "add55e135dd968da",
|
||||
"gsd-core/references/planner-mvp-mode.md": "98bcd2020c30cbd2",
|
||||
"gsd-core/references/planner-preconditions.md": "4511829607ec9107",
|
||||
"gsd-core/references/planner-reversibility.md": "74acbf4a873a01e4",
|
||||
"gsd-core/references/planner-reviews.md": "da39eace09a10743",
|
||||
"gsd-core/references/planner-revision.md": "86ba8a511f081f05",
|
||||
"gsd-core/references/planner-source-audit.md": "7de5bdb07232ce0b",
|
||||
@@ -215,7 +216,7 @@
|
||||
"gsd-core/references/tdd.md": "e4708ede157478b6",
|
||||
"gsd-core/references/thinking-models-debug.md": "2da61022b16c4e7c",
|
||||
"gsd-core/references/thinking-models-execution.md": "dcc650a8b5f3e049",
|
||||
"gsd-core/references/thinking-models-planning.md": "7e19462313fa028f",
|
||||
"gsd-core/references/thinking-models-planning.md": "ea15fb1a274ed7c4",
|
||||
"gsd-core/references/thinking-models-research.md": "5f6bf3f3b889c6e4",
|
||||
"gsd-core/references/thinking-models-verification.md": "a71a933d51ca3d8d",
|
||||
"gsd-core/references/thinking-partner.md": "827c1badf3e6df41",
|
||||
@@ -309,7 +310,7 @@
|
||||
"gsd-core/workflows/discuss-phase/modes/power.md": "dfcf239382e9bd67",
|
||||
"gsd-core/workflows/discuss-phase/modes/text.md": "b62c9085d4dc2963",
|
||||
"gsd-core/workflows/discuss-phase/templates/checkpoint.json": "e3bc3dca49db59eb",
|
||||
"gsd-core/workflows/discuss-phase/templates/context.md": "6cd929e989fe2b0f",
|
||||
"gsd-core/workflows/discuss-phase/templates/context.md": "eeebda60636d1ad0",
|
||||
"gsd-core/workflows/discuss-phase/templates/discussion-log.md": "1bbd7703f11128e1",
|
||||
"gsd-core/workflows/do.md": "0f7b639ff37660b5",
|
||||
"gsd-core/workflows/docs-update.md": "99908189254c0131",
|
||||
@@ -331,7 +332,7 @@
|
||||
"gsd-core/workflows/help.md": "5d040504b9ab35e3",
|
||||
"gsd-core/workflows/help/modes/brief.md": "fa2675516b40e2e3",
|
||||
"gsd-core/workflows/help/modes/default.md": "be05e56b2c5ee2c0",
|
||||
"gsd-core/workflows/help/modes/full.md": "2388596fd5bcbd07",
|
||||
"gsd-core/workflows/help/modes/full.md": "945d73a489286605",
|
||||
"gsd-core/workflows/help/modes/topic.md": "6e42db16f1568be9",
|
||||
"gsd-core/workflows/import.md": "5b78323f7538abb6",
|
||||
"gsd-core/workflows/inbox.md": "47e718a37c7a738f",
|
||||
@@ -353,7 +354,7 @@
|
||||
"gsd-core/workflows/onboard.md": "f7d0dbcfd94ab130",
|
||||
"gsd-core/workflows/pause-work.md": "da902807d2213204",
|
||||
"gsd-core/workflows/plan-milestone-gaps.md": "7679fac068d1009d",
|
||||
"gsd-core/workflows/plan-phase.md": "50fad2ee2017f9e9",
|
||||
"gsd-core/workflows/plan-phase.md": "56ac305f59d49bf7",
|
||||
"gsd-core/workflows/plan-phase/steps/closed-phase-gate.md": "4099ef6d0868de60",
|
||||
"gsd-core/workflows/plan-phase/steps/prd-express-path.md": "b810f9f2374e23a5",
|
||||
"gsd-core/workflows/plan-phase/steps/windows-troubleshooting.md": "e9de7a96bbfff261",
|
||||
|
||||
15
tests/fixtures/golden-install-parity/claude.json
vendored
15
tests/fixtures/golden-install-parity/claude.json
vendored
@@ -24,7 +24,7 @@
|
||||
"agents/gsd-pattern-mapper.md": "b45b5e106775bec1",
|
||||
"agents/gsd-phase-researcher.md": "85217c69c1ed2ac6",
|
||||
"agents/gsd-plan-checker.md": "c70134c61b969589",
|
||||
"agents/gsd-planner.md": "0ec11dd0d673f828",
|
||||
"agents/gsd-planner.md": "1ded63b1c2b85729",
|
||||
"agents/gsd-project-researcher.md": "f468e96f8339d1e0",
|
||||
"agents/gsd-research-synthesizer.md": "7be02e47f4fd901b",
|
||||
"agents/gsd-roadmapper.md": "8a7f1f1256a6aed5",
|
||||
@@ -107,7 +107,7 @@
|
||||
"gsd-core/references/model-profiles.md": "c249163663bbea53",
|
||||
"gsd-core/references/mvp-concepts.md": "3464783eaaef5c10",
|
||||
"gsd-core/references/phase-argument-parsing.md": "e5bbb985f3bc3e34",
|
||||
"gsd-core/references/planner-antipatterns.md": "7ed54ec1e2cc54ac",
|
||||
"gsd-core/references/planner-antipatterns.md": "013ad54062399dad",
|
||||
"gsd-core/references/planner-chunked.md": "79fe674221e738e6",
|
||||
"gsd-core/references/planner-gap-closure.md": "76bee257911413e7",
|
||||
"gsd-core/references/planner-graphify-auto-update.md": "1ed614dfba72f2a3",
|
||||
@@ -117,6 +117,7 @@
|
||||
"gsd-core/references/planner-load-graph-context.md": "ca7a7af3f35ae61b",
|
||||
"gsd-core/references/planner-mvp-mode.md": "cfd535c9c545e73e",
|
||||
"gsd-core/references/planner-preconditions.md": "4511829607ec9107",
|
||||
"gsd-core/references/planner-reversibility.md": "74acbf4a873a01e4",
|
||||
"gsd-core/references/planner-reviews.md": "da39eace09a10743",
|
||||
"gsd-core/references/planner-revision.md": "86ba8a511f081f05",
|
||||
"gsd-core/references/planner-source-audit.md": "7de5bdb07232ce0b",
|
||||
@@ -144,7 +145,7 @@
|
||||
"gsd-core/references/tdd.md": "e4708ede157478b6",
|
||||
"gsd-core/references/thinking-models-debug.md": "2da61022b16c4e7c",
|
||||
"gsd-core/references/thinking-models-execution.md": "dcc650a8b5f3e049",
|
||||
"gsd-core/references/thinking-models-planning.md": "7e19462313fa028f",
|
||||
"gsd-core/references/thinking-models-planning.md": "ef519bff8c8bd572",
|
||||
"gsd-core/references/thinking-models-research.md": "5f6bf3f3b889c6e4",
|
||||
"gsd-core/references/thinking-models-verification.md": "a71a933d51ca3d8d",
|
||||
"gsd-core/references/thinking-partner.md": "827c1badf3e6df41",
|
||||
@@ -238,7 +239,7 @@
|
||||
"gsd-core/workflows/discuss-phase/modes/power.md": "fdc7a728eaaa2261",
|
||||
"gsd-core/workflows/discuss-phase/modes/text.md": "b62c9085d4dc2963",
|
||||
"gsd-core/workflows/discuss-phase/templates/checkpoint.json": "e3bc3dca49db59eb",
|
||||
"gsd-core/workflows/discuss-phase/templates/context.md": "6cd929e989fe2b0f",
|
||||
"gsd-core/workflows/discuss-phase/templates/context.md": "eeebda60636d1ad0",
|
||||
"gsd-core/workflows/discuss-phase/templates/discussion-log.md": "1bbd7703f11128e1",
|
||||
"gsd-core/workflows/do.md": "97a456ceda9d4513",
|
||||
"gsd-core/workflows/docs-update.md": "e94d48c979be0211",
|
||||
@@ -260,7 +261,7 @@
|
||||
"gsd-core/workflows/help.md": "5d040504b9ab35e3",
|
||||
"gsd-core/workflows/help/modes/brief.md": "fa2675516b40e2e3",
|
||||
"gsd-core/workflows/help/modes/default.md": "be05e56b2c5ee2c0",
|
||||
"gsd-core/workflows/help/modes/full.md": "3d55c7266241f79d",
|
||||
"gsd-core/workflows/help/modes/full.md": "be0f1d8d79a53b49",
|
||||
"gsd-core/workflows/help/modes/topic.md": "6e42db16f1568be9",
|
||||
"gsd-core/workflows/import.md": "171471150be5a722",
|
||||
"gsd-core/workflows/inbox.md": "e47920b4495b019a",
|
||||
@@ -282,7 +283,7 @@
|
||||
"gsd-core/workflows/onboard.md": "0f0af11294d31715",
|
||||
"gsd-core/workflows/pause-work.md": "5716362557f44ce4",
|
||||
"gsd-core/workflows/plan-milestone-gaps.md": "1b43d12812f7bc1e",
|
||||
"gsd-core/workflows/plan-phase.md": "9a274b986f3a28e5",
|
||||
"gsd-core/workflows/plan-phase.md": "6d80183e2dfee9dd",
|
||||
"gsd-core/workflows/plan-phase/steps/closed-phase-gate.md": "4099ef6d0868de60",
|
||||
"gsd-core/workflows/plan-phase/steps/prd-express-path.md": "197c0590326371b2",
|
||||
"gsd-core/workflows/plan-phase/steps/windows-troubleshooting.md": "e9de7a96bbfff261",
|
||||
@@ -407,7 +408,7 @@
|
||||
"skills/gsd-onboard/SKILL.md": "46460b479b7524bf",
|
||||
"skills/gsd-pause-work/SKILL.md": "35e8a148e44f5361",
|
||||
"skills/gsd-phase/SKILL.md": "00be96e7ae36c6f0",
|
||||
"skills/gsd-plan-phase/SKILL.md": "f64953d1af7b0f34",
|
||||
"skills/gsd-plan-phase/SKILL.md": "295e3211497cb5a8",
|
||||
"skills/gsd-plan-review-convergence/SKILL.md": "53242a6abe90c405",
|
||||
"skills/gsd-pr-branch/SKILL.md": "c5e26f2c6dff1355",
|
||||
"skills/gsd-profile-user/SKILL.md": "894eb2850ecd2dde",
|
||||
|
||||
15
tests/fixtures/golden-install-parity/cline.json
vendored
15
tests/fixtures/golden-install-parity/cline.json
vendored
@@ -28,7 +28,7 @@
|
||||
"agents/gsd-pattern-mapper.md": "b526065fd2efa19c",
|
||||
"agents/gsd-phase-researcher.md": "c507db2ba66038f4",
|
||||
"agents/gsd-plan-checker.md": "a609245dbdc4ef2b",
|
||||
"agents/gsd-planner.md": "6f390cd0f07473a7",
|
||||
"agents/gsd-planner.md": "5249eb5808e67a6a",
|
||||
"agents/gsd-project-researcher.md": "049f816c6caa4316",
|
||||
"agents/gsd-research-synthesizer.md": "2f7dcbff50371d4c",
|
||||
"agents/gsd-roadmapper.md": "bbb23d3097911516",
|
||||
@@ -111,7 +111,7 @@
|
||||
"gsd-core/references/model-profiles.md": "1794ad3d9854129e",
|
||||
"gsd-core/references/mvp-concepts.md": "72f7e8b1f8ae7118",
|
||||
"gsd-core/references/phase-argument-parsing.md": "e5bbb985f3bc3e34",
|
||||
"gsd-core/references/planner-antipatterns.md": "7ed54ec1e2cc54ac",
|
||||
"gsd-core/references/planner-antipatterns.md": "013ad54062399dad",
|
||||
"gsd-core/references/planner-chunked.md": "79fe674221e738e6",
|
||||
"gsd-core/references/planner-gap-closure.md": "76bee257911413e7",
|
||||
"gsd-core/references/planner-graphify-auto-update.md": "6aeffd9097e25e22",
|
||||
@@ -121,6 +121,7 @@
|
||||
"gsd-core/references/planner-load-graph-context.md": "e469016f2d51b5bc",
|
||||
"gsd-core/references/planner-mvp-mode.md": "cfd535c9c545e73e",
|
||||
"gsd-core/references/planner-preconditions.md": "4511829607ec9107",
|
||||
"gsd-core/references/planner-reversibility.md": "d75786c2d3e6ff5c",
|
||||
"gsd-core/references/planner-reviews.md": "dda0193a0fbd4947",
|
||||
"gsd-core/references/planner-revision.md": "86ba8a511f081f05",
|
||||
"gsd-core/references/planner-source-audit.md": "7de5bdb07232ce0b",
|
||||
@@ -148,7 +149,7 @@
|
||||
"gsd-core/references/tdd.md": "e4708ede157478b6",
|
||||
"gsd-core/references/thinking-models-debug.md": "2da61022b16c4e7c",
|
||||
"gsd-core/references/thinking-models-execution.md": "dcc650a8b5f3e049",
|
||||
"gsd-core/references/thinking-models-planning.md": "7e19462313fa028f",
|
||||
"gsd-core/references/thinking-models-planning.md": "ef519bff8c8bd572",
|
||||
"gsd-core/references/thinking-models-research.md": "5f6bf3f3b889c6e4",
|
||||
"gsd-core/references/thinking-models-verification.md": "a71a933d51ca3d8d",
|
||||
"gsd-core/references/thinking-partner.md": "41069529ef776e39",
|
||||
@@ -242,7 +243,7 @@
|
||||
"gsd-core/workflows/discuss-phase/modes/power.md": "fdc7a728eaaa2261",
|
||||
"gsd-core/workflows/discuss-phase/modes/text.md": "e38583ffc6743580",
|
||||
"gsd-core/workflows/discuss-phase/templates/checkpoint.json": "e3bc3dca49db59eb",
|
||||
"gsd-core/workflows/discuss-phase/templates/context.md": "6cd929e989fe2b0f",
|
||||
"gsd-core/workflows/discuss-phase/templates/context.md": "eeebda60636d1ad0",
|
||||
"gsd-core/workflows/discuss-phase/templates/discussion-log.md": "1bbd7703f11128e1",
|
||||
"gsd-core/workflows/do.md": "6b3cad91b3bd1419",
|
||||
"gsd-core/workflows/docs-update.md": "4bcb3d9630d6bb10",
|
||||
@@ -264,7 +265,7 @@
|
||||
"gsd-core/workflows/help.md": "5d040504b9ab35e3",
|
||||
"gsd-core/workflows/help/modes/brief.md": "924860e1f07defb0",
|
||||
"gsd-core/workflows/help/modes/default.md": "86f7a14ad06e2f6f",
|
||||
"gsd-core/workflows/help/modes/full.md": "e4f1ae9d0902dda0",
|
||||
"gsd-core/workflows/help/modes/full.md": "60956d6dcc7b3533",
|
||||
"gsd-core/workflows/help/modes/topic.md": "5c160093f3cbf35d",
|
||||
"gsd-core/workflows/import.md": "d24be8c61759b593",
|
||||
"gsd-core/workflows/inbox.md": "2e584f45e52f26f5",
|
||||
@@ -286,7 +287,7 @@
|
||||
"gsd-core/workflows/onboard.md": "f29c4fbef3b473fd",
|
||||
"gsd-core/workflows/pause-work.md": "3530607514b0ac00",
|
||||
"gsd-core/workflows/plan-milestone-gaps.md": "bafdc6945cd2bd87",
|
||||
"gsd-core/workflows/plan-phase.md": "cdb95e556e63cb09",
|
||||
"gsd-core/workflows/plan-phase.md": "b571602c5d1fa051",
|
||||
"gsd-core/workflows/plan-phase/steps/closed-phase-gate.md": "b36f77ac7344a072",
|
||||
"gsd-core/workflows/plan-phase/steps/prd-express-path.md": "4b0a2cb0f4f28179",
|
||||
"gsd-core/workflows/plan-phase/steps/windows-troubleshooting.md": "090c31e22b1508fe",
|
||||
@@ -404,7 +405,7 @@
|
||||
"skills/gsd-ns-workflow/skills/mvp-phase/SKILL.md": "6c2beccceb46fda1",
|
||||
"skills/gsd-ns-workflow/skills/next/SKILL.md": "3856471d0f64bf09",
|
||||
"skills/gsd-ns-workflow/skills/phase/SKILL.md": "4e1363db6013a1e5",
|
||||
"skills/gsd-ns-workflow/skills/plan-phase/SKILL.md": "5796e8744314dcf5",
|
||||
"skills/gsd-ns-workflow/skills/plan-phase/SKILL.md": "90d3631e4ed4204f",
|
||||
"skills/gsd-ns-workflow/skills/plan-review-convergence/SKILL.md": "a7be67e1bd14b5fb",
|
||||
"skills/gsd-ns-workflow/skills/progress/SKILL.md": "493f467c22d55b6b",
|
||||
"skills/gsd-ns-workflow/skills/quick/SKILL.md": "605e596c680cbb1c",
|
||||
|
||||
@@ -25,7 +25,7 @@
|
||||
"agents/gsd-pattern-mapper.md": "92cfa2e6c2a06bf3",
|
||||
"agents/gsd-phase-researcher.md": "6338474da1a5d65e",
|
||||
"agents/gsd-plan-checker.md": "e704c083b02e8c35",
|
||||
"agents/gsd-planner.md": "50f9d7d12d8268af",
|
||||
"agents/gsd-planner.md": "4b0e9f592f31bc1d",
|
||||
"agents/gsd-project-researcher.md": "e43c59f7f1f2f37a",
|
||||
"agents/gsd-research-synthesizer.md": "87955470c3c129b2",
|
||||
"agents/gsd-roadmapper.md": "20b69eff61a7a9fa",
|
||||
@@ -79,7 +79,7 @@
|
||||
"commands/gsd-onboard.md": "63283b90aa671229",
|
||||
"commands/gsd-pause-work.md": "6caa75a7c2b4dd2d",
|
||||
"commands/gsd-phase.md": "e3ca4958ea20a935",
|
||||
"commands/gsd-plan-phase.md": "ad988a271bf20e9c",
|
||||
"commands/gsd-plan-phase.md": "4646767cfd0c240a",
|
||||
"commands/gsd-plan-review-convergence.md": "da885320edff822b",
|
||||
"commands/gsd-pr-branch.md": "f5be514b9f69eaf5",
|
||||
"commands/gsd-profile-user.md": "7a9289910719d828",
|
||||
@@ -179,7 +179,7 @@
|
||||
"gsd-core/references/model-profiles.md": "e067ad3df6770db1",
|
||||
"gsd-core/references/mvp-concepts.md": "72f7e8b1f8ae7118",
|
||||
"gsd-core/references/phase-argument-parsing.md": "e5bbb985f3bc3e34",
|
||||
"gsd-core/references/planner-antipatterns.md": "7ed54ec1e2cc54ac",
|
||||
"gsd-core/references/planner-antipatterns.md": "013ad54062399dad",
|
||||
"gsd-core/references/planner-chunked.md": "79fe674221e738e6",
|
||||
"gsd-core/references/planner-gap-closure.md": "76bee257911413e7",
|
||||
"gsd-core/references/planner-graphify-auto-update.md": "6aeffd9097e25e22",
|
||||
@@ -189,6 +189,7 @@
|
||||
"gsd-core/references/planner-load-graph-context.md": "ca7a7af3f35ae61b",
|
||||
"gsd-core/references/planner-mvp-mode.md": "cfd535c9c545e73e",
|
||||
"gsd-core/references/planner-preconditions.md": "4511829607ec9107",
|
||||
"gsd-core/references/planner-reversibility.md": "d75786c2d3e6ff5c",
|
||||
"gsd-core/references/planner-reviews.md": "dda0193a0fbd4947",
|
||||
"gsd-core/references/planner-revision.md": "86ba8a511f081f05",
|
||||
"gsd-core/references/planner-source-audit.md": "7de5bdb07232ce0b",
|
||||
@@ -216,7 +217,7 @@
|
||||
"gsd-core/references/tdd.md": "e4708ede157478b6",
|
||||
"gsd-core/references/thinking-models-debug.md": "2da61022b16c4e7c",
|
||||
"gsd-core/references/thinking-models-execution.md": "dcc650a8b5f3e049",
|
||||
"gsd-core/references/thinking-models-planning.md": "7e19462313fa028f",
|
||||
"gsd-core/references/thinking-models-planning.md": "ef519bff8c8bd572",
|
||||
"gsd-core/references/thinking-models-research.md": "5f6bf3f3b889c6e4",
|
||||
"gsd-core/references/thinking-models-verification.md": "a71a933d51ca3d8d",
|
||||
"gsd-core/references/thinking-partner.md": "41069529ef776e39",
|
||||
@@ -310,7 +311,7 @@
|
||||
"gsd-core/workflows/discuss-phase/modes/power.md": "fdc7a728eaaa2261",
|
||||
"gsd-core/workflows/discuss-phase/modes/text.md": "da6d45207da4a988",
|
||||
"gsd-core/workflows/discuss-phase/templates/checkpoint.json": "e3bc3dca49db59eb",
|
||||
"gsd-core/workflows/discuss-phase/templates/context.md": "6cd929e989fe2b0f",
|
||||
"gsd-core/workflows/discuss-phase/templates/context.md": "eeebda60636d1ad0",
|
||||
"gsd-core/workflows/discuss-phase/templates/discussion-log.md": "1bbd7703f11128e1",
|
||||
"gsd-core/workflows/do.md": "90df4f1fe248cdf3",
|
||||
"gsd-core/workflows/docs-update.md": "b5cdf1c35043cf7b",
|
||||
@@ -332,7 +333,7 @@
|
||||
"gsd-core/workflows/help.md": "5d040504b9ab35e3",
|
||||
"gsd-core/workflows/help/modes/brief.md": "924860e1f07defb0",
|
||||
"gsd-core/workflows/help/modes/default.md": "08a02976c0c5cc50",
|
||||
"gsd-core/workflows/help/modes/full.md": "5eefc87999cde1a6",
|
||||
"gsd-core/workflows/help/modes/full.md": "f2b14b5fb009d1ff",
|
||||
"gsd-core/workflows/help/modes/topic.md": "5c160093f3cbf35d",
|
||||
"gsd-core/workflows/import.md": "31a0f3a33154939f",
|
||||
"gsd-core/workflows/inbox.md": "a7d439981775bc29",
|
||||
@@ -354,7 +355,7 @@
|
||||
"gsd-core/workflows/onboard.md": "f29c4fbef3b473fd",
|
||||
"gsd-core/workflows/pause-work.md": "f2b33bba5593d422",
|
||||
"gsd-core/workflows/plan-milestone-gaps.md": "852f6d7c0c4299dc",
|
||||
"gsd-core/workflows/plan-phase.md": "ef07de99f05cb223",
|
||||
"gsd-core/workflows/plan-phase.md": "31d65fb2372cc25d",
|
||||
"gsd-core/workflows/plan-phase/steps/closed-phase-gate.md": "b36f77ac7344a072",
|
||||
"gsd-core/workflows/plan-phase/steps/prd-express-path.md": "197c0590326371b2",
|
||||
"gsd-core/workflows/plan-phase/steps/windows-troubleshooting.md": "49f58c3f75be3eb5",
|
||||
@@ -479,7 +480,7 @@
|
||||
"skills/gsd-onboard/SKILL.md": "6ad789a03124cd4f",
|
||||
"skills/gsd-pause-work/SKILL.md": "e2de20b7539e78d4",
|
||||
"skills/gsd-phase/SKILL.md": "f87211f779315ced",
|
||||
"skills/gsd-plan-phase/SKILL.md": "5f00d90224127bd5",
|
||||
"skills/gsd-plan-phase/SKILL.md": "ae3f6a76c08f7782",
|
||||
"skills/gsd-plan-review-convergence/SKILL.md": "1b1526f5d7a34306",
|
||||
"skills/gsd-pr-branch/SKILL.md": "87bb3306488565fb",
|
||||
"skills/gsd-profile-user/SKILL.md": "ee8e8547298006b8",
|
||||
|
||||
17
tests/fixtures/golden-install-parity/codex.json
vendored
17
tests/fixtures/golden-install-parity/codex.json
vendored
@@ -43,7 +43,7 @@
|
||||
".agents/skills/gsd-onboard/SKILL.md": "f42fc2edebeda671",
|
||||
".agents/skills/gsd-pause-work/SKILL.md": "b379469eed78a196",
|
||||
".agents/skills/gsd-phase/SKILL.md": "25477edc97a90c91",
|
||||
".agents/skills/gsd-plan-phase/SKILL.md": "0a7a22d226bcec30",
|
||||
".agents/skills/gsd-plan-phase/SKILL.md": "14b7a4f76825a5c2",
|
||||
".agents/skills/gsd-plan-review-convergence/SKILL.md": "c7d8a4db99e4f4b9",
|
||||
".agents/skills/gsd-pr-branch/SKILL.md": "6901da15e321913e",
|
||||
".agents/skills/gsd-profile-user/SKILL.md": "6259fabfb6afe7be",
|
||||
@@ -120,8 +120,8 @@
|
||||
"agents/gsd-phase-researcher.toml": "44a3d510cd0ce3bd",
|
||||
"agents/gsd-plan-checker.md": "e7f02c10ea788aee",
|
||||
"agents/gsd-plan-checker.toml": "6f8ceb421d0ad721",
|
||||
"agents/gsd-planner.md": "19969475e4e38175",
|
||||
"agents/gsd-planner.toml": "f5f4f3876767d323",
|
||||
"agents/gsd-planner.md": "ef417468fecb841f",
|
||||
"agents/gsd-planner.toml": "4c9feaf9e76d6655",
|
||||
"agents/gsd-project-researcher.md": "959f2e57c3d69ed8",
|
||||
"agents/gsd-project-researcher.toml": "f395e8e8c4baf1ed",
|
||||
"agents/gsd-research-synthesizer.md": "497f85adf53259ef",
|
||||
@@ -214,7 +214,7 @@
|
||||
"gsd-core/references/model-profiles.md": "bd90862f68007f2e",
|
||||
"gsd-core/references/mvp-concepts.md": "23201c8118fb074a",
|
||||
"gsd-core/references/phase-argument-parsing.md": "531176f66da49c98",
|
||||
"gsd-core/references/planner-antipatterns.md": "2459c40bfc8a0ea8",
|
||||
"gsd-core/references/planner-antipatterns.md": "88a0cd714d33fe34",
|
||||
"gsd-core/references/planner-chunked.md": "79fe674221e738e6",
|
||||
"gsd-core/references/planner-gap-closure.md": "76bee257911413e7",
|
||||
"gsd-core/references/planner-graphify-auto-update.md": "ccd62140264bed71",
|
||||
@@ -224,6 +224,7 @@
|
||||
"gsd-core/references/planner-load-graph-context.md": "ca7a7af3f35ae61b",
|
||||
"gsd-core/references/planner-mvp-mode.md": "cfd535c9c545e73e",
|
||||
"gsd-core/references/planner-preconditions.md": "4511829607ec9107",
|
||||
"gsd-core/references/planner-reversibility.md": "c23fee2f4c9bd9a9",
|
||||
"gsd-core/references/planner-reviews.md": "7889bfa28e82156b",
|
||||
"gsd-core/references/planner-revision.md": "2ebf1a714d1ec4bf",
|
||||
"gsd-core/references/planner-source-audit.md": "7de5bdb07232ce0b",
|
||||
@@ -251,7 +252,7 @@
|
||||
"gsd-core/references/tdd.md": "e4708ede157478b6",
|
||||
"gsd-core/references/thinking-models-debug.md": "2da61022b16c4e7c",
|
||||
"gsd-core/references/thinking-models-execution.md": "dcc650a8b5f3e049",
|
||||
"gsd-core/references/thinking-models-planning.md": "7e19462313fa028f",
|
||||
"gsd-core/references/thinking-models-planning.md": "ef519bff8c8bd572",
|
||||
"gsd-core/references/thinking-models-research.md": "5f6bf3f3b889c6e4",
|
||||
"gsd-core/references/thinking-models-verification.md": "a71a933d51ca3d8d",
|
||||
"gsd-core/references/thinking-partner.md": "347c33b2d5646c93",
|
||||
@@ -345,7 +346,7 @@
|
||||
"gsd-core/workflows/discuss-phase/modes/power.md": "55b61b7dc83a58b2",
|
||||
"gsd-core/workflows/discuss-phase/modes/text.md": "6e1c6f4d8fdd0be3",
|
||||
"gsd-core/workflows/discuss-phase/templates/checkpoint.json": "e3bc3dca49db59eb",
|
||||
"gsd-core/workflows/discuss-phase/templates/context.md": "9804674fccada405",
|
||||
"gsd-core/workflows/discuss-phase/templates/context.md": "da6bf5281bf7d2bf",
|
||||
"gsd-core/workflows/discuss-phase/templates/discussion-log.md": "2b56ec2868cbddb4",
|
||||
"gsd-core/workflows/do.md": "b30d5b8eca60ef79",
|
||||
"gsd-core/workflows/docs-update.md": "70ad463cdad599c9",
|
||||
@@ -367,7 +368,7 @@
|
||||
"gsd-core/workflows/help.md": "08e1349950c5602a",
|
||||
"gsd-core/workflows/help/modes/brief.md": "da44b130d1afe556",
|
||||
"gsd-core/workflows/help/modes/default.md": "4bb3082d28026eea",
|
||||
"gsd-core/workflows/help/modes/full.md": "9a512db0dce1a315",
|
||||
"gsd-core/workflows/help/modes/full.md": "cb714f34a3b15557",
|
||||
"gsd-core/workflows/help/modes/topic.md": "b7c7e4a8800bc3ea",
|
||||
"gsd-core/workflows/import.md": "5b0076b667b15c01",
|
||||
"gsd-core/workflows/inbox.md": "ddb6832b7e0ad46b",
|
||||
@@ -389,7 +390,7 @@
|
||||
"gsd-core/workflows/onboard.md": "f022a379ede13512",
|
||||
"gsd-core/workflows/pause-work.md": "a217770ecafcb2e0",
|
||||
"gsd-core/workflows/plan-milestone-gaps.md": "73d46f77c50a0690",
|
||||
"gsd-core/workflows/plan-phase.md": "422cea035ea5c515",
|
||||
"gsd-core/workflows/plan-phase.md": "7e435c998a22bc52",
|
||||
"gsd-core/workflows/plan-phase/steps/closed-phase-gate.md": "d838b87563feedf6",
|
||||
"gsd-core/workflows/plan-phase/steps/prd-express-path.md": "f10975692cbd036e",
|
||||
"gsd-core/workflows/plan-phase/steps/windows-troubleshooting.md": "f5edc589cab52a7b",
|
||||
|
||||
@@ -25,7 +25,7 @@
|
||||
"agents/gsd-pattern-mapper.agent.md": "b1f488b0fa6a2395",
|
||||
"agents/gsd-phase-researcher.agent.md": "03cfb510a766fe93",
|
||||
"agents/gsd-plan-checker.agent.md": "c50a5b008ddcbfad",
|
||||
"agents/gsd-planner.agent.md": "1721f5ace5c95434",
|
||||
"agents/gsd-planner.agent.md": "defa418d75a9b3e9",
|
||||
"agents/gsd-project-researcher.agent.md": "d73bdbe986ffa8a6",
|
||||
"agents/gsd-research-synthesizer.agent.md": "f03eed4aa89e47c5",
|
||||
"agents/gsd-roadmapper.agent.md": "322048cf8ddcb4e5",
|
||||
@@ -109,7 +109,7 @@
|
||||
"gsd-core/references/model-profiles.md": "6568ca29b6ee00d8",
|
||||
"gsd-core/references/mvp-concepts.md": "3464783eaaef5c10",
|
||||
"gsd-core/references/phase-argument-parsing.md": "e5bbb985f3bc3e34",
|
||||
"gsd-core/references/planner-antipatterns.md": "2459c40bfc8a0ea8",
|
||||
"gsd-core/references/planner-antipatterns.md": "88a0cd714d33fe34",
|
||||
"gsd-core/references/planner-chunked.md": "79fe674221e738e6",
|
||||
"gsd-core/references/planner-gap-closure.md": "76bee257911413e7",
|
||||
"gsd-core/references/planner-graphify-auto-update.md": "1ed614dfba72f2a3",
|
||||
@@ -119,6 +119,7 @@
|
||||
"gsd-core/references/planner-load-graph-context.md": "641b6c1ce4dd0c8c",
|
||||
"gsd-core/references/planner-mvp-mode.md": "355d8a9ff2b2b67e",
|
||||
"gsd-core/references/planner-preconditions.md": "4511829607ec9107",
|
||||
"gsd-core/references/planner-reversibility.md": "74acbf4a873a01e4",
|
||||
"gsd-core/references/planner-reviews.md": "da39eace09a10743",
|
||||
"gsd-core/references/planner-revision.md": "86ba8a511f081f05",
|
||||
"gsd-core/references/planner-source-audit.md": "7de5bdb07232ce0b",
|
||||
@@ -146,7 +147,7 @@
|
||||
"gsd-core/references/tdd.md": "e4708ede157478b6",
|
||||
"gsd-core/references/thinking-models-debug.md": "2da61022b16c4e7c",
|
||||
"gsd-core/references/thinking-models-execution.md": "dcc650a8b5f3e049",
|
||||
"gsd-core/references/thinking-models-planning.md": "7e19462313fa028f",
|
||||
"gsd-core/references/thinking-models-planning.md": "c37eebe8fbf89b1c",
|
||||
"gsd-core/references/thinking-models-research.md": "5f6bf3f3b889c6e4",
|
||||
"gsd-core/references/thinking-models-verification.md": "a71a933d51ca3d8d",
|
||||
"gsd-core/references/thinking-partner.md": "827c1badf3e6df41",
|
||||
@@ -240,7 +241,7 @@
|
||||
"gsd-core/workflows/discuss-phase/modes/power.md": "9c97731f22d7bce9",
|
||||
"gsd-core/workflows/discuss-phase/modes/text.md": "c384c22ffff4dc02",
|
||||
"gsd-core/workflows/discuss-phase/templates/checkpoint.json": "e3bc3dca49db59eb",
|
||||
"gsd-core/workflows/discuss-phase/templates/context.md": "9804674fccada405",
|
||||
"gsd-core/workflows/discuss-phase/templates/context.md": "da6bf5281bf7d2bf",
|
||||
"gsd-core/workflows/discuss-phase/templates/discussion-log.md": "2b56ec2868cbddb4",
|
||||
"gsd-core/workflows/do.md": "ba9dd204343ab48b",
|
||||
"gsd-core/workflows/docs-update.md": "fddba4a71268a33f",
|
||||
@@ -262,7 +263,7 @@
|
||||
"gsd-core/workflows/help.md": "5d040504b9ab35e3",
|
||||
"gsd-core/workflows/help/modes/brief.md": "fa2675516b40e2e3",
|
||||
"gsd-core/workflows/help/modes/default.md": "be05e56b2c5ee2c0",
|
||||
"gsd-core/workflows/help/modes/full.md": "fb46abb57e525863",
|
||||
"gsd-core/workflows/help/modes/full.md": "d06191d895d70380",
|
||||
"gsd-core/workflows/help/modes/topic.md": "0bf9ab39d7044d69",
|
||||
"gsd-core/workflows/import.md": "ae33f4683e7b69e9",
|
||||
"gsd-core/workflows/inbox.md": "2f4edb2681b84d9c",
|
||||
@@ -284,7 +285,7 @@
|
||||
"gsd-core/workflows/onboard.md": "357b7ae1367560dd",
|
||||
"gsd-core/workflows/pause-work.md": "9ce66367be6c40db",
|
||||
"gsd-core/workflows/plan-milestone-gaps.md": "5cf589802d08bdf3",
|
||||
"gsd-core/workflows/plan-phase.md": "27ea81d0be74a2ee",
|
||||
"gsd-core/workflows/plan-phase.md": "6f06400e21cc3515",
|
||||
"gsd-core/workflows/plan-phase/steps/closed-phase-gate.md": "4099ef6d0868de60",
|
||||
"gsd-core/workflows/plan-phase/steps/prd-express-path.md": "bb052483744f0a6d",
|
||||
"gsd-core/workflows/plan-phase/steps/windows-troubleshooting.md": "e9de7a96bbfff261",
|
||||
@@ -382,7 +383,7 @@
|
||||
"skills/gsd-onboard/SKILL.md": "4d325f3033df2d37",
|
||||
"skills/gsd-pause-work/SKILL.md": "4f0caa008a8001ff",
|
||||
"skills/gsd-phase/SKILL.md": "d38c7f9b1d0d2360",
|
||||
"skills/gsd-plan-phase/SKILL.md": "d1ba21e500bf62a8",
|
||||
"skills/gsd-plan-phase/SKILL.md": "19d47df062dfc220",
|
||||
"skills/gsd-plan-review-convergence/SKILL.md": "29e903e25047ebd1",
|
||||
"skills/gsd-pr-branch/SKILL.md": "9cd9740db385d95a",
|
||||
"skills/gsd-profile-user/SKILL.md": "052a8e17ecda40f1",
|
||||
|
||||
17
tests/fixtures/golden-install-parity/cursor.json
vendored
17
tests/fixtures/golden-install-parity/cursor.json
vendored
@@ -25,7 +25,7 @@
|
||||
"agents/gsd-pattern-mapper.md": "1229c215677f740d",
|
||||
"agents/gsd-phase-researcher.md": "982d59921bed463d",
|
||||
"agents/gsd-plan-checker.md": "ba51999876d40cf2",
|
||||
"agents/gsd-planner.md": "71c6e41403d6bc63",
|
||||
"agents/gsd-planner.md": "a39e021ed91064bc",
|
||||
"agents/gsd-project-researcher.md": "beeac940d3a10e76",
|
||||
"agents/gsd-research-synthesizer.md": "6315f016d55176f4",
|
||||
"agents/gsd-roadmapper.md": "d28e7d4bac46dde2",
|
||||
@@ -79,7 +79,7 @@
|
||||
"commands/gsd-onboard.md": "d9e52f558fc2b90f",
|
||||
"commands/gsd-pause-work.md": "59630f05f95fff68",
|
||||
"commands/gsd-phase.md": "9a073dcd0f934f90",
|
||||
"commands/gsd-plan-phase.md": "d9bdd3726e9c3dff",
|
||||
"commands/gsd-plan-phase.md": "a80206719884ab3b",
|
||||
"commands/gsd-plan-review-convergence.md": "ea3bec0ae494ecc8",
|
||||
"commands/gsd-pr-branch.md": "ef2eedb0ed4295da",
|
||||
"commands/gsd-profile-user.md": "0e99de36619c3b7d",
|
||||
@@ -179,7 +179,7 @@
|
||||
"gsd-core/references/model-profiles.md": "5452b2e19e19f77e",
|
||||
"gsd-core/references/mvp-concepts.md": "3464783eaaef5c10",
|
||||
"gsd-core/references/phase-argument-parsing.md": "e562947d1bf5c5a4",
|
||||
"gsd-core/references/planner-antipatterns.md": "7ed54ec1e2cc54ac",
|
||||
"gsd-core/references/planner-antipatterns.md": "013ad54062399dad",
|
||||
"gsd-core/references/planner-chunked.md": "79fe674221e738e6",
|
||||
"gsd-core/references/planner-gap-closure.md": "76bee257911413e7",
|
||||
"gsd-core/references/planner-graphify-auto-update.md": "1ed614dfba72f2a3",
|
||||
@@ -189,6 +189,7 @@
|
||||
"gsd-core/references/planner-load-graph-context.md": "ca7a7af3f35ae61b",
|
||||
"gsd-core/references/planner-mvp-mode.md": "cfd535c9c545e73e",
|
||||
"gsd-core/references/planner-preconditions.md": "4511829607ec9107",
|
||||
"gsd-core/references/planner-reversibility.md": "74acbf4a873a01e4",
|
||||
"gsd-core/references/planner-reviews.md": "da39eace09a10743",
|
||||
"gsd-core/references/planner-revision.md": "86ba8a511f081f05",
|
||||
"gsd-core/references/planner-source-audit.md": "7de5bdb07232ce0b",
|
||||
@@ -216,7 +217,7 @@
|
||||
"gsd-core/references/tdd.md": "e4708ede157478b6",
|
||||
"gsd-core/references/thinking-models-debug.md": "2da61022b16c4e7c",
|
||||
"gsd-core/references/thinking-models-execution.md": "dcc650a8b5f3e049",
|
||||
"gsd-core/references/thinking-models-planning.md": "7e19462313fa028f",
|
||||
"gsd-core/references/thinking-models-planning.md": "ef519bff8c8bd572",
|
||||
"gsd-core/references/thinking-models-research.md": "5f6bf3f3b889c6e4",
|
||||
"gsd-core/references/thinking-models-verification.md": "a71a933d51ca3d8d",
|
||||
"gsd-core/references/thinking-partner.md": "827c1badf3e6df41",
|
||||
@@ -310,7 +311,7 @@
|
||||
"gsd-core/workflows/discuss-phase/modes/power.md": "55b61b7dc83a58b2",
|
||||
"gsd-core/workflows/discuss-phase/modes/text.md": "adec29a0217b6664",
|
||||
"gsd-core/workflows/discuss-phase/templates/checkpoint.json": "e3bc3dca49db59eb",
|
||||
"gsd-core/workflows/discuss-phase/templates/context.md": "6cd929e989fe2b0f",
|
||||
"gsd-core/workflows/discuss-phase/templates/context.md": "eeebda60636d1ad0",
|
||||
"gsd-core/workflows/discuss-phase/templates/discussion-log.md": "cd5d01c9ef84ab73",
|
||||
"gsd-core/workflows/do.md": "53839c6429ae1234",
|
||||
"gsd-core/workflows/docs-update.md": "817776e1a5f87b39",
|
||||
@@ -332,7 +333,7 @@
|
||||
"gsd-core/workflows/help.md": "08e1349950c5602a",
|
||||
"gsd-core/workflows/help/modes/brief.md": "fa2675516b40e2e3",
|
||||
"gsd-core/workflows/help/modes/default.md": "b88ff431fffe40ae",
|
||||
"gsd-core/workflows/help/modes/full.md": "9ae8b1e8908c7ead",
|
||||
"gsd-core/workflows/help/modes/full.md": "186472a5e0c6c022",
|
||||
"gsd-core/workflows/help/modes/topic.md": "cee80e0adfa3b06c",
|
||||
"gsd-core/workflows/import.md": "5d6b58c9b6048e03",
|
||||
"gsd-core/workflows/inbox.md": "07404a616a95fe6c",
|
||||
@@ -354,7 +355,7 @@
|
||||
"gsd-core/workflows/onboard.md": "7d0c7449b84c7997",
|
||||
"gsd-core/workflows/pause-work.md": "5716362557f44ce4",
|
||||
"gsd-core/workflows/plan-milestone-gaps.md": "1b43d12812f7bc1e",
|
||||
"gsd-core/workflows/plan-phase.md": "74dd1ac212c945da",
|
||||
"gsd-core/workflows/plan-phase.md": "c06c9440118fe559",
|
||||
"gsd-core/workflows/plan-phase/steps/closed-phase-gate.md": "e06ccd4d4c0703fb",
|
||||
"gsd-core/workflows/plan-phase/steps/prd-express-path.md": "197c0590326371b2",
|
||||
"gsd-core/workflows/plan-phase/steps/windows-troubleshooting.md": "3bed01c3c906ac52",
|
||||
@@ -457,7 +458,7 @@
|
||||
"skills/gsd-onboard/SKILL.md": "c7f216749ba4c09c",
|
||||
"skills/gsd-pause-work/SKILL.md": "7d310e7329b7ae7d",
|
||||
"skills/gsd-phase/SKILL.md": "49fca93e5f2ccc70",
|
||||
"skills/gsd-plan-phase/SKILL.md": "c5e1a4ab2ede399a",
|
||||
"skills/gsd-plan-phase/SKILL.md": "848d571bd385a0f4",
|
||||
"skills/gsd-plan-review-convergence/SKILL.md": "3e13dd1bf82f74c0",
|
||||
"skills/gsd-pr-branch/SKILL.md": "a8f8838a6aa5e1dd",
|
||||
"skills/gsd-profile-user/SKILL.md": "3be8d50399836ef2",
|
||||
|
||||
15
tests/fixtures/golden-install-parity/hermes.json
vendored
15
tests/fixtures/golden-install-parity/hermes.json
vendored
@@ -25,7 +25,7 @@
|
||||
"agents/gsd-pattern-mapper.md": "cea092600aeb3978",
|
||||
"agents/gsd-phase-researcher.md": "2bd0402f33d757ca",
|
||||
"agents/gsd-plan-checker.md": "4b4e2b475bf5b5c3",
|
||||
"agents/gsd-planner.md": "5f5fa906f62643b6",
|
||||
"agents/gsd-planner.md": "07bd1760e8861253",
|
||||
"agents/gsd-project-researcher.md": "425a7df7f37a5c06",
|
||||
"agents/gsd-research-synthesizer.md": "9d31c87fc2c87ffa",
|
||||
"agents/gsd-roadmapper.md": "64dce5d5f9fa5654",
|
||||
@@ -108,7 +108,7 @@
|
||||
"gsd-core/references/model-profiles.md": "6012c3b53473f04f",
|
||||
"gsd-core/references/mvp-concepts.md": "3464783eaaef5c10",
|
||||
"gsd-core/references/phase-argument-parsing.md": "e5bbb985f3bc3e34",
|
||||
"gsd-core/references/planner-antipatterns.md": "7ed54ec1e2cc54ac",
|
||||
"gsd-core/references/planner-antipatterns.md": "013ad54062399dad",
|
||||
"gsd-core/references/planner-chunked.md": "79fe674221e738e6",
|
||||
"gsd-core/references/planner-gap-closure.md": "76bee257911413e7",
|
||||
"gsd-core/references/planner-graphify-auto-update.md": "1ed614dfba72f2a3",
|
||||
@@ -118,6 +118,7 @@
|
||||
"gsd-core/references/planner-load-graph-context.md": "8f598e08696843c0",
|
||||
"gsd-core/references/planner-mvp-mode.md": "cfd535c9c545e73e",
|
||||
"gsd-core/references/planner-preconditions.md": "4511829607ec9107",
|
||||
"gsd-core/references/planner-reversibility.md": "74acbf4a873a01e4",
|
||||
"gsd-core/references/planner-reviews.md": "da39eace09a10743",
|
||||
"gsd-core/references/planner-revision.md": "86ba8a511f081f05",
|
||||
"gsd-core/references/planner-source-audit.md": "7de5bdb07232ce0b",
|
||||
@@ -145,7 +146,7 @@
|
||||
"gsd-core/references/tdd.md": "e4708ede157478b6",
|
||||
"gsd-core/references/thinking-models-debug.md": "2da61022b16c4e7c",
|
||||
"gsd-core/references/thinking-models-execution.md": "dcc650a8b5f3e049",
|
||||
"gsd-core/references/thinking-models-planning.md": "7e19462313fa028f",
|
||||
"gsd-core/references/thinking-models-planning.md": "ef519bff8c8bd572",
|
||||
"gsd-core/references/thinking-models-research.md": "5f6bf3f3b889c6e4",
|
||||
"gsd-core/references/thinking-models-verification.md": "a71a933d51ca3d8d",
|
||||
"gsd-core/references/thinking-partner.md": "827c1badf3e6df41",
|
||||
@@ -239,7 +240,7 @@
|
||||
"gsd-core/workflows/discuss-phase/modes/power.md": "fdc7a728eaaa2261",
|
||||
"gsd-core/workflows/discuss-phase/modes/text.md": "e6d930e2b6769e49",
|
||||
"gsd-core/workflows/discuss-phase/templates/checkpoint.json": "e3bc3dca49db59eb",
|
||||
"gsd-core/workflows/discuss-phase/templates/context.md": "6cd929e989fe2b0f",
|
||||
"gsd-core/workflows/discuss-phase/templates/context.md": "eeebda60636d1ad0",
|
||||
"gsd-core/workflows/discuss-phase/templates/discussion-log.md": "1bbd7703f11128e1",
|
||||
"gsd-core/workflows/do.md": "b30d1efcb0297580",
|
||||
"gsd-core/workflows/docs-update.md": "de614d940b6f64ff",
|
||||
@@ -261,7 +262,7 @@
|
||||
"gsd-core/workflows/help.md": "5d040504b9ab35e3",
|
||||
"gsd-core/workflows/help/modes/brief.md": "fa2675516b40e2e3",
|
||||
"gsd-core/workflows/help/modes/default.md": "8874dac94eb68ae6",
|
||||
"gsd-core/workflows/help/modes/full.md": "a9351cf72f580a87",
|
||||
"gsd-core/workflows/help/modes/full.md": "4562e56c736127a1",
|
||||
"gsd-core/workflows/help/modes/topic.md": "6e42db16f1568be9",
|
||||
"gsd-core/workflows/import.md": "c1c19d52b9637113",
|
||||
"gsd-core/workflows/inbox.md": "20159d4f9a1fca7f",
|
||||
@@ -283,7 +284,7 @@
|
||||
"gsd-core/workflows/onboard.md": "0f0af11294d31715",
|
||||
"gsd-core/workflows/pause-work.md": "ae2d5789a95f70fe",
|
||||
"gsd-core/workflows/plan-milestone-gaps.md": "c86cdc1964256b98",
|
||||
"gsd-core/workflows/plan-phase.md": "6bafababd9a71291",
|
||||
"gsd-core/workflows/plan-phase.md": "9bad20e7f9ae09b1",
|
||||
"gsd-core/workflows/plan-phase/steps/closed-phase-gate.md": "4099ef6d0868de60",
|
||||
"gsd-core/workflows/plan-phase/steps/prd-express-path.md": "9607e6d03e93c1c2",
|
||||
"gsd-core/workflows/plan-phase/steps/windows-troubleshooting.md": "62f8e4f3b475fe5f",
|
||||
@@ -430,7 +431,7 @@
|
||||
"skills/gsd/gsd-ns-workflow/skills/mvp-phase/SKILL.md": "0804dfd4124526ba",
|
||||
"skills/gsd/gsd-ns-workflow/skills/next/SKILL.md": "1d30cf6061d15168",
|
||||
"skills/gsd/gsd-ns-workflow/skills/phase/SKILL.md": "610bd06d71198849",
|
||||
"skills/gsd/gsd-ns-workflow/skills/plan-phase/SKILL.md": "e564bd88707a0e69",
|
||||
"skills/gsd/gsd-ns-workflow/skills/plan-phase/SKILL.md": "20c30f2aa80a6145",
|
||||
"skills/gsd/gsd-ns-workflow/skills/plan-review-convergence/SKILL.md": "9f67e59967b3f5eb",
|
||||
"skills/gsd/gsd-ns-workflow/skills/progress/SKILL.md": "6ec0e4715dde7ee2",
|
||||
"skills/gsd/gsd-ns-workflow/skills/quick/SKILL.md": "65e377345e9c49a8",
|
||||
|
||||
17
tests/fixtures/golden-install-parity/kilo.json
vendored
17
tests/fixtures/golden-install-parity/kilo.json
vendored
@@ -25,7 +25,7 @@
|
||||
"agents/gsd-pattern-mapper.md": "6a5408fd11d70391",
|
||||
"agents/gsd-phase-researcher.md": "94818f28c498bb26",
|
||||
"agents/gsd-plan-checker.md": "56164206242c8caf",
|
||||
"agents/gsd-planner.md": "282aa34e2e8bc267",
|
||||
"agents/gsd-planner.md": "739c1b66005be087",
|
||||
"agents/gsd-project-researcher.md": "60573a38d3dfd9fe",
|
||||
"agents/gsd-research-synthesizer.md": "1f7cd286c5783c86",
|
||||
"agents/gsd-roadmapper.md": "277e0a3252553ab7",
|
||||
@@ -79,7 +79,7 @@
|
||||
"command/gsd-onboard.md": "3e87a21c9c04f0d7",
|
||||
"command/gsd-pause-work.md": "04e993b1c9f8322b",
|
||||
"command/gsd-phase.md": "8f0e98dc6c223229",
|
||||
"command/gsd-plan-phase.md": "8c39408407b6bf9f",
|
||||
"command/gsd-plan-phase.md": "7a7f244d9523bc55",
|
||||
"command/gsd-plan-review-convergence.md": "b957f86414b6c73f",
|
||||
"command/gsd-pr-branch.md": "68e724607de3c480",
|
||||
"command/gsd-profile-user.md": "9704158b2d79cad2",
|
||||
@@ -179,7 +179,7 @@
|
||||
"gsd-core/references/model-profiles.md": "6568ca29b6ee00d8",
|
||||
"gsd-core/references/mvp-concepts.md": "3464783eaaef5c10",
|
||||
"gsd-core/references/phase-argument-parsing.md": "e5bbb985f3bc3e34",
|
||||
"gsd-core/references/planner-antipatterns.md": "2459c40bfc8a0ea8",
|
||||
"gsd-core/references/planner-antipatterns.md": "88a0cd714d33fe34",
|
||||
"gsd-core/references/planner-chunked.md": "79fe674221e738e6",
|
||||
"gsd-core/references/planner-gap-closure.md": "76bee257911413e7",
|
||||
"gsd-core/references/planner-graphify-auto-update.md": "1ed614dfba72f2a3",
|
||||
@@ -189,6 +189,7 @@
|
||||
"gsd-core/references/planner-load-graph-context.md": "ca7a7af3f35ae61b",
|
||||
"gsd-core/references/planner-mvp-mode.md": "cfd535c9c545e73e",
|
||||
"gsd-core/references/planner-preconditions.md": "4511829607ec9107",
|
||||
"gsd-core/references/planner-reversibility.md": "74acbf4a873a01e4",
|
||||
"gsd-core/references/planner-reviews.md": "da39eace09a10743",
|
||||
"gsd-core/references/planner-revision.md": "86ba8a511f081f05",
|
||||
"gsd-core/references/planner-source-audit.md": "7de5bdb07232ce0b",
|
||||
@@ -216,7 +217,7 @@
|
||||
"gsd-core/references/tdd.md": "e4708ede157478b6",
|
||||
"gsd-core/references/thinking-models-debug.md": "2da61022b16c4e7c",
|
||||
"gsd-core/references/thinking-models-execution.md": "dcc650a8b5f3e049",
|
||||
"gsd-core/references/thinking-models-planning.md": "7e19462313fa028f",
|
||||
"gsd-core/references/thinking-models-planning.md": "ef519bff8c8bd572",
|
||||
"gsd-core/references/thinking-models-research.md": "5f6bf3f3b889c6e4",
|
||||
"gsd-core/references/thinking-models-verification.md": "a71a933d51ca3d8d",
|
||||
"gsd-core/references/thinking-partner.md": "827c1badf3e6df41",
|
||||
@@ -310,7 +311,7 @@
|
||||
"gsd-core/workflows/discuss-phase/modes/power.md": "fdc7a728eaaa2261",
|
||||
"gsd-core/workflows/discuss-phase/modes/text.md": "daf23a04b101ab38",
|
||||
"gsd-core/workflows/discuss-phase/templates/checkpoint.json": "e3bc3dca49db59eb",
|
||||
"gsd-core/workflows/discuss-phase/templates/context.md": "9804674fccada405",
|
||||
"gsd-core/workflows/discuss-phase/templates/context.md": "da6bf5281bf7d2bf",
|
||||
"gsd-core/workflows/discuss-phase/templates/discussion-log.md": "04e4feee14772275",
|
||||
"gsd-core/workflows/do.md": "ea068f5a797f2178",
|
||||
"gsd-core/workflows/docs-update.md": "6bca7d8fda0d1d54",
|
||||
@@ -332,7 +333,7 @@
|
||||
"gsd-core/workflows/help.md": "5d040504b9ab35e3",
|
||||
"gsd-core/workflows/help/modes/brief.md": "fa2675516b40e2e3",
|
||||
"gsd-core/workflows/help/modes/default.md": "be05e56b2c5ee2c0",
|
||||
"gsd-core/workflows/help/modes/full.md": "08101a965254f10e",
|
||||
"gsd-core/workflows/help/modes/full.md": "1c502caa8c65dfd3",
|
||||
"gsd-core/workflows/help/modes/topic.md": "0bf9ab39d7044d69",
|
||||
"gsd-core/workflows/import.md": "9e9e83e5549eaf0f",
|
||||
"gsd-core/workflows/inbox.md": "f2b38be09a2dee08",
|
||||
@@ -354,7 +355,7 @@
|
||||
"gsd-core/workflows/onboard.md": "c8d9795021d4fce6",
|
||||
"gsd-core/workflows/pause-work.md": "a6e5336c409fdc8b",
|
||||
"gsd-core/workflows/plan-milestone-gaps.md": "1b43d12812f7bc1e",
|
||||
"gsd-core/workflows/plan-phase.md": "d16b1c70ec0022a1",
|
||||
"gsd-core/workflows/plan-phase.md": "52ba4ad489bad757",
|
||||
"gsd-core/workflows/plan-phase/steps/closed-phase-gate.md": "4099ef6d0868de60",
|
||||
"gsd-core/workflows/plan-phase/steps/prd-express-path.md": "f10975692cbd036e",
|
||||
"gsd-core/workflows/plan-phase/steps/windows-troubleshooting.md": "e9de7a96bbfff261",
|
||||
@@ -481,7 +482,7 @@
|
||||
"skills/gsd-onboard/SKILL.md": "0e3cc902f44b41b8",
|
||||
"skills/gsd-pause-work/SKILL.md": "34366b18a392a717",
|
||||
"skills/gsd-phase/SKILL.md": "64a241d4f8665aa2",
|
||||
"skills/gsd-plan-phase/SKILL.md": "c95d9376440c4725",
|
||||
"skills/gsd-plan-phase/SKILL.md": "163fb90e26285762",
|
||||
"skills/gsd-plan-review-convergence/SKILL.md": "db311b1dbb0024d1",
|
||||
"skills/gsd-pr-branch/SKILL.md": "a80da6aa95efc50d",
|
||||
"skills/gsd-profile-user/SKILL.md": "4ac2c5ea45d17a9d",
|
||||
|
||||
15
tests/fixtures/golden-install-parity/kimi.json
vendored
15
tests/fixtures/golden-install-parity/kimi.json
vendored
@@ -79,7 +79,7 @@
|
||||
"agents/subagents/gsd-phase-researcher.yaml": "7633c8e82617e7cc",
|
||||
"agents/subagents/gsd-plan-checker.md": "bd302afc01ed40f0",
|
||||
"agents/subagents/gsd-plan-checker.yaml": "8295181071121db8",
|
||||
"agents/subagents/gsd-planner.md": "285c6a21227787f9",
|
||||
"agents/subagents/gsd-planner.md": "28172805a3e78163",
|
||||
"agents/subagents/gsd-planner.yaml": "2e83ee194bcd7fbd",
|
||||
"agents/subagents/gsd-project-researcher.md": "39bc2ec5a8b18283",
|
||||
"agents/subagents/gsd-project-researcher.yaml": "ce12586b0347e2dc",
|
||||
@@ -172,7 +172,7 @@
|
||||
"gsd-core/references/model-profiles.md": "e067ad3df6770db1",
|
||||
"gsd-core/references/mvp-concepts.md": "72f7e8b1f8ae7118",
|
||||
"gsd-core/references/phase-argument-parsing.md": "e5bbb985f3bc3e34",
|
||||
"gsd-core/references/planner-antipatterns.md": "7ed54ec1e2cc54ac",
|
||||
"gsd-core/references/planner-antipatterns.md": "013ad54062399dad",
|
||||
"gsd-core/references/planner-chunked.md": "79fe674221e738e6",
|
||||
"gsd-core/references/planner-gap-closure.md": "76bee257911413e7",
|
||||
"gsd-core/references/planner-graphify-auto-update.md": "6aeffd9097e25e22",
|
||||
@@ -182,6 +182,7 @@
|
||||
"gsd-core/references/planner-load-graph-context.md": "ca7a7af3f35ae61b",
|
||||
"gsd-core/references/planner-mvp-mode.md": "cfd535c9c545e73e",
|
||||
"gsd-core/references/planner-preconditions.md": "4511829607ec9107",
|
||||
"gsd-core/references/planner-reversibility.md": "d75786c2d3e6ff5c",
|
||||
"gsd-core/references/planner-reviews.md": "dda0193a0fbd4947",
|
||||
"gsd-core/references/planner-revision.md": "86ba8a511f081f05",
|
||||
"gsd-core/references/planner-source-audit.md": "7de5bdb07232ce0b",
|
||||
@@ -209,7 +210,7 @@
|
||||
"gsd-core/references/tdd.md": "e4708ede157478b6",
|
||||
"gsd-core/references/thinking-models-debug.md": "2da61022b16c4e7c",
|
||||
"gsd-core/references/thinking-models-execution.md": "dcc650a8b5f3e049",
|
||||
"gsd-core/references/thinking-models-planning.md": "7e19462313fa028f",
|
||||
"gsd-core/references/thinking-models-planning.md": "ef519bff8c8bd572",
|
||||
"gsd-core/references/thinking-models-research.md": "5f6bf3f3b889c6e4",
|
||||
"gsd-core/references/thinking-models-verification.md": "a71a933d51ca3d8d",
|
||||
"gsd-core/references/thinking-partner.md": "41069529ef776e39",
|
||||
@@ -303,7 +304,7 @@
|
||||
"gsd-core/workflows/discuss-phase/modes/power.md": "fdc7a728eaaa2261",
|
||||
"gsd-core/workflows/discuss-phase/modes/text.md": "da6d45207da4a988",
|
||||
"gsd-core/workflows/discuss-phase/templates/checkpoint.json": "e3bc3dca49db59eb",
|
||||
"gsd-core/workflows/discuss-phase/templates/context.md": "6cd929e989fe2b0f",
|
||||
"gsd-core/workflows/discuss-phase/templates/context.md": "eeebda60636d1ad0",
|
||||
"gsd-core/workflows/discuss-phase/templates/discussion-log.md": "1bbd7703f11128e1",
|
||||
"gsd-core/workflows/do.md": "90df4f1fe248cdf3",
|
||||
"gsd-core/workflows/docs-update.md": "b5cdf1c35043cf7b",
|
||||
@@ -325,7 +326,7 @@
|
||||
"gsd-core/workflows/help.md": "5d040504b9ab35e3",
|
||||
"gsd-core/workflows/help/modes/brief.md": "924860e1f07defb0",
|
||||
"gsd-core/workflows/help/modes/default.md": "08a02976c0c5cc50",
|
||||
"gsd-core/workflows/help/modes/full.md": "91e115f058b6d3cf",
|
||||
"gsd-core/workflows/help/modes/full.md": "4e99773be20a97e2",
|
||||
"gsd-core/workflows/help/modes/topic.md": "5c160093f3cbf35d",
|
||||
"gsd-core/workflows/import.md": "31a0f3a33154939f",
|
||||
"gsd-core/workflows/inbox.md": "a7d439981775bc29",
|
||||
@@ -347,7 +348,7 @@
|
||||
"gsd-core/workflows/onboard.md": "f29c4fbef3b473fd",
|
||||
"gsd-core/workflows/pause-work.md": "f2b33bba5593d422",
|
||||
"gsd-core/workflows/plan-milestone-gaps.md": "852f6d7c0c4299dc",
|
||||
"gsd-core/workflows/plan-phase.md": "a41a135a82c2f307",
|
||||
"gsd-core/workflows/plan-phase.md": "3d7655de200ce3f7",
|
||||
"gsd-core/workflows/plan-phase/steps/closed-phase-gate.md": "b36f77ac7344a072",
|
||||
"gsd-core/workflows/plan-phase/steps/prd-express-path.md": "197c0590326371b2",
|
||||
"gsd-core/workflows/plan-phase/steps/windows-troubleshooting.md": "49f58c3f75be3eb5",
|
||||
@@ -444,7 +445,7 @@
|
||||
"skills/gsd-onboard/SKILL.md": "fd66b3c5b9c6a871",
|
||||
"skills/gsd-pause-work/SKILL.md": "95017c70ae9dca0d",
|
||||
"skills/gsd-phase/SKILL.md": "31578c329cc2583e",
|
||||
"skills/gsd-plan-phase/SKILL.md": "83362394f648deeb",
|
||||
"skills/gsd-plan-phase/SKILL.md": "fc4464af5649282f",
|
||||
"skills/gsd-plan-review-convergence/SKILL.md": "fcac3c24e566438e",
|
||||
"skills/gsd-pr-branch/SKILL.md": "67f468db29ff2cf1",
|
||||
"skills/gsd-profile-user/SKILL.md": "19a1d3aba57f6c7c",
|
||||
|
||||
@@ -25,7 +25,7 @@
|
||||
"agents/gsd-pattern-mapper.md": "7c6d1d9817a9c1e7",
|
||||
"agents/gsd-phase-researcher.md": "9874110700b41f48",
|
||||
"agents/gsd-plan-checker.md": "28ca3dc43669894f",
|
||||
"agents/gsd-planner.md": "5234ac4f1afce5dc",
|
||||
"agents/gsd-planner.md": "b2ea0c457376ac3e",
|
||||
"agents/gsd-project-researcher.md": "dae210ae0b3c6e2b",
|
||||
"agents/gsd-research-synthesizer.md": "e02c6ad5d1b74171",
|
||||
"agents/gsd-roadmapper.md": "1658a40b20d8b575",
|
||||
@@ -79,7 +79,7 @@
|
||||
"commands/gsd-onboard.md": "3aafaeb5d3941efe",
|
||||
"commands/gsd-pause-work.md": "bb5bf91a2e3e480e",
|
||||
"commands/gsd-phase.md": "6bcda1539f949d5a",
|
||||
"commands/gsd-plan-phase.md": "4e19ddc0ca22fbf6",
|
||||
"commands/gsd-plan-phase.md": "cbb349ad7520db85",
|
||||
"commands/gsd-plan-review-convergence.md": "348d02775fd62977",
|
||||
"commands/gsd-pr-branch.md": "31fca4f1d6c4ee62",
|
||||
"commands/gsd-profile-user.md": "725c14ae7203b5b6",
|
||||
@@ -179,7 +179,7 @@
|
||||
"gsd-core/references/model-profiles.md": "6568ca29b6ee00d8",
|
||||
"gsd-core/references/mvp-concepts.md": "3464783eaaef5c10",
|
||||
"gsd-core/references/phase-argument-parsing.md": "e5bbb985f3bc3e34",
|
||||
"gsd-core/references/planner-antipatterns.md": "2459c40bfc8a0ea8",
|
||||
"gsd-core/references/planner-antipatterns.md": "88a0cd714d33fe34",
|
||||
"gsd-core/references/planner-chunked.md": "79fe674221e738e6",
|
||||
"gsd-core/references/planner-gap-closure.md": "76bee257911413e7",
|
||||
"gsd-core/references/planner-graphify-auto-update.md": "1ed614dfba72f2a3",
|
||||
@@ -189,6 +189,7 @@
|
||||
"gsd-core/references/planner-load-graph-context.md": "97f6e67b56c072c1",
|
||||
"gsd-core/references/planner-mvp-mode.md": "35d30284ea9110c0",
|
||||
"gsd-core/references/planner-preconditions.md": "4511829607ec9107",
|
||||
"gsd-core/references/planner-reversibility.md": "74acbf4a873a01e4",
|
||||
"gsd-core/references/planner-reviews.md": "da39eace09a10743",
|
||||
"gsd-core/references/planner-revision.md": "86ba8a511f081f05",
|
||||
"gsd-core/references/planner-source-audit.md": "7de5bdb07232ce0b",
|
||||
@@ -216,7 +217,7 @@
|
||||
"gsd-core/references/tdd.md": "e4708ede157478b6",
|
||||
"gsd-core/references/thinking-models-debug.md": "2da61022b16c4e7c",
|
||||
"gsd-core/references/thinking-models-execution.md": "dcc650a8b5f3e049",
|
||||
"gsd-core/references/thinking-models-planning.md": "7e19462313fa028f",
|
||||
"gsd-core/references/thinking-models-planning.md": "fc00fd23895d4535",
|
||||
"gsd-core/references/thinking-models-research.md": "5f6bf3f3b889c6e4",
|
||||
"gsd-core/references/thinking-models-verification.md": "a71a933d51ca3d8d",
|
||||
"gsd-core/references/thinking-partner.md": "827c1badf3e6df41",
|
||||
@@ -310,7 +311,7 @@
|
||||
"gsd-core/workflows/discuss-phase/modes/power.md": "799fc7e1283b568f",
|
||||
"gsd-core/workflows/discuss-phase/modes/text.md": "daf23a04b101ab38",
|
||||
"gsd-core/workflows/discuss-phase/templates/checkpoint.json": "e3bc3dca49db59eb",
|
||||
"gsd-core/workflows/discuss-phase/templates/context.md": "9804674fccada405",
|
||||
"gsd-core/workflows/discuss-phase/templates/context.md": "da6bf5281bf7d2bf",
|
||||
"gsd-core/workflows/discuss-phase/templates/discussion-log.md": "04e4feee14772275",
|
||||
"gsd-core/workflows/do.md": "532afe82bbf9f775",
|
||||
"gsd-core/workflows/docs-update.md": "4c7ea896438d9d45",
|
||||
@@ -332,7 +333,7 @@
|
||||
"gsd-core/workflows/help.md": "5d040504b9ab35e3",
|
||||
"gsd-core/workflows/help/modes/brief.md": "fa2675516b40e2e3",
|
||||
"gsd-core/workflows/help/modes/default.md": "be05e56b2c5ee2c0",
|
||||
"gsd-core/workflows/help/modes/full.md": "7e68200aeb086535",
|
||||
"gsd-core/workflows/help/modes/full.md": "a3705cc4e0360f1c",
|
||||
"gsd-core/workflows/help/modes/topic.md": "0bf9ab39d7044d69",
|
||||
"gsd-core/workflows/import.md": "15d09b825badf7ed",
|
||||
"gsd-core/workflows/inbox.md": "7e46f5d6b0694074",
|
||||
@@ -354,7 +355,7 @@
|
||||
"gsd-core/workflows/onboard.md": "ca3a59a2e36b829a",
|
||||
"gsd-core/workflows/pause-work.md": "70c72beca55c080a",
|
||||
"gsd-core/workflows/plan-milestone-gaps.md": "0a9dacd422cd9533",
|
||||
"gsd-core/workflows/plan-phase.md": "9dc1b4d1e7c0878f",
|
||||
"gsd-core/workflows/plan-phase.md": "47b59b9e6f022538",
|
||||
"gsd-core/workflows/plan-phase/steps/closed-phase-gate.md": "4099ef6d0868de60",
|
||||
"gsd-core/workflows/plan-phase/steps/prd-express-path.md": "3a09141de7f3dedb",
|
||||
"gsd-core/workflows/plan-phase/steps/windows-troubleshooting.md": "e9de7a96bbfff261",
|
||||
@@ -481,7 +482,7 @@
|
||||
"skills/gsd-onboard/SKILL.md": "ea0b1217e5ecae23",
|
||||
"skills/gsd-pause-work/SKILL.md": "c7e9ba4f242c4648",
|
||||
"skills/gsd-phase/SKILL.md": "ee78c0c56c814d84",
|
||||
"skills/gsd-plan-phase/SKILL.md": "4b65f0a9d7d42ec7",
|
||||
"skills/gsd-plan-phase/SKILL.md": "7490d949e7e14028",
|
||||
"skills/gsd-plan-review-convergence/SKILL.md": "8338cb7e018e3713",
|
||||
"skills/gsd-pr-branch/SKILL.md": "8fa5a8fa217fe913",
|
||||
"skills/gsd-profile-user/SKILL.md": "3e6155a64523d59f",
|
||||
|
||||
11
tests/fixtures/golden-install-parity/pi.json
vendored
11
tests/fixtures/golden-install-parity/pi.json
vendored
@@ -75,7 +75,7 @@
|
||||
"gsd-core/references/model-profiles.md": "e067ad3df6770db1",
|
||||
"gsd-core/references/mvp-concepts.md": "72f7e8b1f8ae7118",
|
||||
"gsd-core/references/phase-argument-parsing.md": "e5bbb985f3bc3e34",
|
||||
"gsd-core/references/planner-antipatterns.md": "7ed54ec1e2cc54ac",
|
||||
"gsd-core/references/planner-antipatterns.md": "013ad54062399dad",
|
||||
"gsd-core/references/planner-chunked.md": "79fe674221e738e6",
|
||||
"gsd-core/references/planner-gap-closure.md": "76bee257911413e7",
|
||||
"gsd-core/references/planner-graphify-auto-update.md": "6aeffd9097e25e22",
|
||||
@@ -85,6 +85,7 @@
|
||||
"gsd-core/references/planner-load-graph-context.md": "ca7a7af3f35ae61b",
|
||||
"gsd-core/references/planner-mvp-mode.md": "cfd535c9c545e73e",
|
||||
"gsd-core/references/planner-preconditions.md": "4511829607ec9107",
|
||||
"gsd-core/references/planner-reversibility.md": "d75786c2d3e6ff5c",
|
||||
"gsd-core/references/planner-reviews.md": "dda0193a0fbd4947",
|
||||
"gsd-core/references/planner-revision.md": "86ba8a511f081f05",
|
||||
"gsd-core/references/planner-source-audit.md": "7de5bdb07232ce0b",
|
||||
@@ -112,7 +113,7 @@
|
||||
"gsd-core/references/tdd.md": "e4708ede157478b6",
|
||||
"gsd-core/references/thinking-models-debug.md": "2da61022b16c4e7c",
|
||||
"gsd-core/references/thinking-models-execution.md": "dcc650a8b5f3e049",
|
||||
"gsd-core/references/thinking-models-planning.md": "7e19462313fa028f",
|
||||
"gsd-core/references/thinking-models-planning.md": "ef519bff8c8bd572",
|
||||
"gsd-core/references/thinking-models-research.md": "5f6bf3f3b889c6e4",
|
||||
"gsd-core/references/thinking-models-verification.md": "a71a933d51ca3d8d",
|
||||
"gsd-core/references/thinking-partner.md": "41069529ef776e39",
|
||||
@@ -206,7 +207,7 @@
|
||||
"gsd-core/workflows/discuss-phase/modes/power.md": "fdc7a728eaaa2261",
|
||||
"gsd-core/workflows/discuss-phase/modes/text.md": "da6d45207da4a988",
|
||||
"gsd-core/workflows/discuss-phase/templates/checkpoint.json": "e3bc3dca49db59eb",
|
||||
"gsd-core/workflows/discuss-phase/templates/context.md": "6cd929e989fe2b0f",
|
||||
"gsd-core/workflows/discuss-phase/templates/context.md": "eeebda60636d1ad0",
|
||||
"gsd-core/workflows/discuss-phase/templates/discussion-log.md": "1bbd7703f11128e1",
|
||||
"gsd-core/workflows/do.md": "90df4f1fe248cdf3",
|
||||
"gsd-core/workflows/docs-update.md": "b5cdf1c35043cf7b",
|
||||
@@ -228,7 +229,7 @@
|
||||
"gsd-core/workflows/help.md": "5d040504b9ab35e3",
|
||||
"gsd-core/workflows/help/modes/brief.md": "924860e1f07defb0",
|
||||
"gsd-core/workflows/help/modes/default.md": "08a02976c0c5cc50",
|
||||
"gsd-core/workflows/help/modes/full.md": "99d5387021de656f",
|
||||
"gsd-core/workflows/help/modes/full.md": "f44724d908fd6bd3",
|
||||
"gsd-core/workflows/help/modes/topic.md": "5c160093f3cbf35d",
|
||||
"gsd-core/workflows/import.md": "31a0f3a33154939f",
|
||||
"gsd-core/workflows/inbox.md": "a7d439981775bc29",
|
||||
@@ -250,7 +251,7 @@
|
||||
"gsd-core/workflows/onboard.md": "f29c4fbef3b473fd",
|
||||
"gsd-core/workflows/pause-work.md": "f2b33bba5593d422",
|
||||
"gsd-core/workflows/plan-milestone-gaps.md": "852f6d7c0c4299dc",
|
||||
"gsd-core/workflows/plan-phase.md": "2b7d29129452a804",
|
||||
"gsd-core/workflows/plan-phase.md": "3547ee091be19160",
|
||||
"gsd-core/workflows/plan-phase/steps/closed-phase-gate.md": "b36f77ac7344a072",
|
||||
"gsd-core/workflows/plan-phase/steps/prd-express-path.md": "197c0590326371b2",
|
||||
"gsd-core/workflows/plan-phase/steps/windows-troubleshooting.md": "49f58c3f75be3eb5",
|
||||
|
||||
15
tests/fixtures/golden-install-parity/qwen.json
vendored
15
tests/fixtures/golden-install-parity/qwen.json
vendored
@@ -25,7 +25,7 @@
|
||||
"agents/gsd-pattern-mapper.md": "83c66c7722e8b165",
|
||||
"agents/gsd-phase-researcher.md": "284e55a86ae46d7f",
|
||||
"agents/gsd-plan-checker.md": "c8a8fcc8ed38eff0",
|
||||
"agents/gsd-planner.md": "c38e99d7be01a728",
|
||||
"agents/gsd-planner.md": "e85ed2535f6a7624",
|
||||
"agents/gsd-project-researcher.md": "b5baac64a15c85e2",
|
||||
"agents/gsd-research-synthesizer.md": "6cd9b501dc97bd50",
|
||||
"agents/gsd-roadmapper.md": "c357a77ab919e9e5",
|
||||
@@ -108,7 +108,7 @@
|
||||
"gsd-core/references/model-profiles.md": "0b7e06ed2e4abac8",
|
||||
"gsd-core/references/mvp-concepts.md": "3464783eaaef5c10",
|
||||
"gsd-core/references/phase-argument-parsing.md": "e5bbb985f3bc3e34",
|
||||
"gsd-core/references/planner-antipatterns.md": "7ed54ec1e2cc54ac",
|
||||
"gsd-core/references/planner-antipatterns.md": "013ad54062399dad",
|
||||
"gsd-core/references/planner-chunked.md": "79fe674221e738e6",
|
||||
"gsd-core/references/planner-gap-closure.md": "76bee257911413e7",
|
||||
"gsd-core/references/planner-graphify-auto-update.md": "1ed614dfba72f2a3",
|
||||
@@ -118,6 +118,7 @@
|
||||
"gsd-core/references/planner-load-graph-context.md": "3f6f5ee62d86f72d",
|
||||
"gsd-core/references/planner-mvp-mode.md": "cfd535c9c545e73e",
|
||||
"gsd-core/references/planner-preconditions.md": "4511829607ec9107",
|
||||
"gsd-core/references/planner-reversibility.md": "74acbf4a873a01e4",
|
||||
"gsd-core/references/planner-reviews.md": "da39eace09a10743",
|
||||
"gsd-core/references/planner-revision.md": "86ba8a511f081f05",
|
||||
"gsd-core/references/planner-source-audit.md": "7de5bdb07232ce0b",
|
||||
@@ -145,7 +146,7 @@
|
||||
"gsd-core/references/tdd.md": "e4708ede157478b6",
|
||||
"gsd-core/references/thinking-models-debug.md": "2da61022b16c4e7c",
|
||||
"gsd-core/references/thinking-models-execution.md": "dcc650a8b5f3e049",
|
||||
"gsd-core/references/thinking-models-planning.md": "7e19462313fa028f",
|
||||
"gsd-core/references/thinking-models-planning.md": "ef519bff8c8bd572",
|
||||
"gsd-core/references/thinking-models-research.md": "5f6bf3f3b889c6e4",
|
||||
"gsd-core/references/thinking-models-verification.md": "a71a933d51ca3d8d",
|
||||
"gsd-core/references/thinking-partner.md": "827c1badf3e6df41",
|
||||
@@ -239,7 +240,7 @@
|
||||
"gsd-core/workflows/discuss-phase/modes/power.md": "fdc7a728eaaa2261",
|
||||
"gsd-core/workflows/discuss-phase/modes/text.md": "6914c661b95859ee",
|
||||
"gsd-core/workflows/discuss-phase/templates/checkpoint.json": "e3bc3dca49db59eb",
|
||||
"gsd-core/workflows/discuss-phase/templates/context.md": "6cd929e989fe2b0f",
|
||||
"gsd-core/workflows/discuss-phase/templates/context.md": "eeebda60636d1ad0",
|
||||
"gsd-core/workflows/discuss-phase/templates/discussion-log.md": "1bbd7703f11128e1",
|
||||
"gsd-core/workflows/do.md": "2e784b2d6a02ea94",
|
||||
"gsd-core/workflows/docs-update.md": "db6e70dddaf019ad",
|
||||
@@ -261,7 +262,7 @@
|
||||
"gsd-core/workflows/help.md": "5d040504b9ab35e3",
|
||||
"gsd-core/workflows/help/modes/brief.md": "fa2675516b40e2e3",
|
||||
"gsd-core/workflows/help/modes/default.md": "7ca77077085452f5",
|
||||
"gsd-core/workflows/help/modes/full.md": "6022991e0f56fd1d",
|
||||
"gsd-core/workflows/help/modes/full.md": "dfb0f1fd3d1f2a2e",
|
||||
"gsd-core/workflows/help/modes/topic.md": "6e42db16f1568be9",
|
||||
"gsd-core/workflows/import.md": "3bcc9194fffcd259",
|
||||
"gsd-core/workflows/inbox.md": "e8a5db7443c524d6",
|
||||
@@ -283,7 +284,7 @@
|
||||
"gsd-core/workflows/onboard.md": "0f0af11294d31715",
|
||||
"gsd-core/workflows/pause-work.md": "be33f84dc1d4822f",
|
||||
"gsd-core/workflows/plan-milestone-gaps.md": "d98e98486123eb97",
|
||||
"gsd-core/workflows/plan-phase.md": "9b436899cbc7bbca",
|
||||
"gsd-core/workflows/plan-phase.md": "61ab4c96566668da",
|
||||
"gsd-core/workflows/plan-phase/steps/closed-phase-gate.md": "4099ef6d0868de60",
|
||||
"gsd-core/workflows/plan-phase/steps/prd-express-path.md": "c22ff5ea46de665a",
|
||||
"gsd-core/workflows/plan-phase/steps/windows-troubleshooting.md": "d050d8d551ed1756",
|
||||
@@ -429,7 +430,7 @@
|
||||
"skills/gsd-ns-workflow/skills/mvp-phase/SKILL.md": "f9a1348c6c297579",
|
||||
"skills/gsd-ns-workflow/skills/next/SKILL.md": "13e394affe675498",
|
||||
"skills/gsd-ns-workflow/skills/phase/SKILL.md": "1ed640e5f06c7be6",
|
||||
"skills/gsd-ns-workflow/skills/plan-phase/SKILL.md": "ff46b5450c9c4313",
|
||||
"skills/gsd-ns-workflow/skills/plan-phase/SKILL.md": "1206a0878a082581",
|
||||
"skills/gsd-ns-workflow/skills/plan-review-convergence/SKILL.md": "53242a6abe90c405",
|
||||
"skills/gsd-ns-workflow/skills/progress/SKILL.md": "943538c4ac6bde19",
|
||||
"skills/gsd-ns-workflow/skills/quick/SKILL.md": "bd5e4cb79bc41611",
|
||||
|
||||
15
tests/fixtures/golden-install-parity/trae.json
vendored
15
tests/fixtures/golden-install-parity/trae.json
vendored
@@ -25,7 +25,7 @@
|
||||
"agents/gsd-pattern-mapper.md": "b5d7a4abb1baecb9",
|
||||
"agents/gsd-phase-researcher.md": "2256f1f82212c757",
|
||||
"agents/gsd-plan-checker.md": "523119bd5d6599fe",
|
||||
"agents/gsd-planner.md": "ddfd810f17d39eb6",
|
||||
"agents/gsd-planner.md": "dbec071e8a52ebd4",
|
||||
"agents/gsd-project-researcher.md": "ddf7794e81300032",
|
||||
"agents/gsd-research-synthesizer.md": "a124b00271748d07",
|
||||
"agents/gsd-roadmapper.md": "493ef92b42b12cf4",
|
||||
@@ -108,7 +108,7 @@
|
||||
"gsd-core/references/model-profiles.md": "b4527b0f255d193f",
|
||||
"gsd-core/references/mvp-concepts.md": "3464783eaaef5c10",
|
||||
"gsd-core/references/phase-argument-parsing.md": "e562947d1bf5c5a4",
|
||||
"gsd-core/references/planner-antipatterns.md": "7ed54ec1e2cc54ac",
|
||||
"gsd-core/references/planner-antipatterns.md": "013ad54062399dad",
|
||||
"gsd-core/references/planner-chunked.md": "79fe674221e738e6",
|
||||
"gsd-core/references/planner-gap-closure.md": "76bee257911413e7",
|
||||
"gsd-core/references/planner-graphify-auto-update.md": "1ed614dfba72f2a3",
|
||||
@@ -118,6 +118,7 @@
|
||||
"gsd-core/references/planner-load-graph-context.md": "9a9383599893ea7e",
|
||||
"gsd-core/references/planner-mvp-mode.md": "cfd535c9c545e73e",
|
||||
"gsd-core/references/planner-preconditions.md": "4511829607ec9107",
|
||||
"gsd-core/references/planner-reversibility.md": "74acbf4a873a01e4",
|
||||
"gsd-core/references/planner-reviews.md": "da39eace09a10743",
|
||||
"gsd-core/references/planner-revision.md": "86ba8a511f081f05",
|
||||
"gsd-core/references/planner-source-audit.md": "7de5bdb07232ce0b",
|
||||
@@ -145,7 +146,7 @@
|
||||
"gsd-core/references/tdd.md": "e4708ede157478b6",
|
||||
"gsd-core/references/thinking-models-debug.md": "2da61022b16c4e7c",
|
||||
"gsd-core/references/thinking-models-execution.md": "dcc650a8b5f3e049",
|
||||
"gsd-core/references/thinking-models-planning.md": "7e19462313fa028f",
|
||||
"gsd-core/references/thinking-models-planning.md": "ef519bff8c8bd572",
|
||||
"gsd-core/references/thinking-models-research.md": "5f6bf3f3b889c6e4",
|
||||
"gsd-core/references/thinking-models-verification.md": "a71a933d51ca3d8d",
|
||||
"gsd-core/references/thinking-partner.md": "827c1badf3e6df41",
|
||||
@@ -239,7 +240,7 @@
|
||||
"gsd-core/workflows/discuss-phase/modes/power.md": "55b61b7dc83a58b2",
|
||||
"gsd-core/workflows/discuss-phase/modes/text.md": "e1043e27b50a5e18",
|
||||
"gsd-core/workflows/discuss-phase/templates/checkpoint.json": "e3bc3dca49db59eb",
|
||||
"gsd-core/workflows/discuss-phase/templates/context.md": "6cd929e989fe2b0f",
|
||||
"gsd-core/workflows/discuss-phase/templates/context.md": "eeebda60636d1ad0",
|
||||
"gsd-core/workflows/discuss-phase/templates/discussion-log.md": "1bbd7703f11128e1",
|
||||
"gsd-core/workflows/do.md": "6b56aa4a44ca61fc",
|
||||
"gsd-core/workflows/docs-update.md": "141185e54648df02",
|
||||
@@ -261,7 +262,7 @@
|
||||
"gsd-core/workflows/help.md": "08e1349950c5602a",
|
||||
"gsd-core/workflows/help/modes/brief.md": "fa2675516b40e2e3",
|
||||
"gsd-core/workflows/help/modes/default.md": "ed7368e0d1b8644a",
|
||||
"gsd-core/workflows/help/modes/full.md": "01a34fdde96bf138",
|
||||
"gsd-core/workflows/help/modes/full.md": "bc2c13a06dbbc7bc",
|
||||
"gsd-core/workflows/help/modes/topic.md": "8a5344e56fa64ab9",
|
||||
"gsd-core/workflows/import.md": "9ebddd4142200a3e",
|
||||
"gsd-core/workflows/inbox.md": "1abe5a3114bbf1c3",
|
||||
@@ -283,7 +284,7 @@
|
||||
"gsd-core/workflows/onboard.md": "015695a7e9cf59bc",
|
||||
"gsd-core/workflows/pause-work.md": "c20d267e28ce92f0",
|
||||
"gsd-core/workflows/plan-milestone-gaps.md": "26db7b9329b7ddc8",
|
||||
"gsd-core/workflows/plan-phase.md": "5209ca67d77d19e3",
|
||||
"gsd-core/workflows/plan-phase.md": "77942a8f1cdc4e3f",
|
||||
"gsd-core/workflows/plan-phase/steps/closed-phase-gate.md": "e06ccd4d4c0703fb",
|
||||
"gsd-core/workflows/plan-phase/steps/prd-express-path.md": "778b73a8db6f7c32",
|
||||
"gsd-core/workflows/plan-phase/steps/windows-troubleshooting.md": "619946c879f33b9d",
|
||||
@@ -401,7 +402,7 @@
|
||||
"skills/gsd-ns-workflow/skills/mvp-phase/SKILL.md": "fef8178c9920c2dd",
|
||||
"skills/gsd-ns-workflow/skills/next/SKILL.md": "faadd9e2817e7324",
|
||||
"skills/gsd-ns-workflow/skills/phase/SKILL.md": "df3efcd61f7cc796",
|
||||
"skills/gsd-ns-workflow/skills/plan-phase/SKILL.md": "31962f06bc124c89",
|
||||
"skills/gsd-ns-workflow/skills/plan-phase/SKILL.md": "c6c607b03b043eb1",
|
||||
"skills/gsd-ns-workflow/skills/plan-review-convergence/SKILL.md": "b27aad9196476875",
|
||||
"skills/gsd-ns-workflow/skills/progress/SKILL.md": "37a37d2cdfba46ea",
|
||||
"skills/gsd-ns-workflow/skills/quick/SKILL.md": "6fd1b96274b23a9f",
|
||||
|
||||
@@ -25,7 +25,7 @@
|
||||
"agents/gsd-pattern-mapper.md": "ada0c169daa2f0ec",
|
||||
"agents/gsd-phase-researcher.md": "2a45ebde829555ec",
|
||||
"agents/gsd-plan-checker.md": "33fbf70b7b24eb1e",
|
||||
"agents/gsd-planner.md": "f98cfbc92bfff334",
|
||||
"agents/gsd-planner.md": "8b59834f86f84d31",
|
||||
"agents/gsd-project-researcher.md": "f6697b316b5995ba",
|
||||
"agents/gsd-research-synthesizer.md": "04036f38c1d373ea",
|
||||
"agents/gsd-roadmapper.md": "fb62e1e3de84b5f9",
|
||||
@@ -108,7 +108,7 @@
|
||||
"gsd-core/references/model-profiles.md": "09aa53e3f1764a41",
|
||||
"gsd-core/references/mvp-concepts.md": "3464783eaaef5c10",
|
||||
"gsd-core/references/phase-argument-parsing.md": "e562947d1bf5c5a4",
|
||||
"gsd-core/references/planner-antipatterns.md": "7ed54ec1e2cc54ac",
|
||||
"gsd-core/references/planner-antipatterns.md": "013ad54062399dad",
|
||||
"gsd-core/references/planner-chunked.md": "79fe674221e738e6",
|
||||
"gsd-core/references/planner-gap-closure.md": "76bee257911413e7",
|
||||
"gsd-core/references/planner-graphify-auto-update.md": "1ed614dfba72f2a3",
|
||||
@@ -118,6 +118,7 @@
|
||||
"gsd-core/references/planner-load-graph-context.md": "18d50b6d12db830e",
|
||||
"gsd-core/references/planner-mvp-mode.md": "cfd535c9c545e73e",
|
||||
"gsd-core/references/planner-preconditions.md": "4511829607ec9107",
|
||||
"gsd-core/references/planner-reversibility.md": "74acbf4a873a01e4",
|
||||
"gsd-core/references/planner-reviews.md": "da39eace09a10743",
|
||||
"gsd-core/references/planner-revision.md": "86ba8a511f081f05",
|
||||
"gsd-core/references/planner-source-audit.md": "7de5bdb07232ce0b",
|
||||
@@ -145,7 +146,7 @@
|
||||
"gsd-core/references/tdd.md": "e4708ede157478b6",
|
||||
"gsd-core/references/thinking-models-debug.md": "2da61022b16c4e7c",
|
||||
"gsd-core/references/thinking-models-execution.md": "dcc650a8b5f3e049",
|
||||
"gsd-core/references/thinking-models-planning.md": "7e19462313fa028f",
|
||||
"gsd-core/references/thinking-models-planning.md": "ef519bff8c8bd572",
|
||||
"gsd-core/references/thinking-models-research.md": "5f6bf3f3b889c6e4",
|
||||
"gsd-core/references/thinking-models-verification.md": "a71a933d51ca3d8d",
|
||||
"gsd-core/references/thinking-partner.md": "827c1badf3e6df41",
|
||||
@@ -239,7 +240,7 @@
|
||||
"gsd-core/workflows/discuss-phase/modes/power.md": "55b61b7dc83a58b2",
|
||||
"gsd-core/workflows/discuss-phase/modes/text.md": "aeb56fe7b95dd786",
|
||||
"gsd-core/workflows/discuss-phase/templates/checkpoint.json": "e3bc3dca49db59eb",
|
||||
"gsd-core/workflows/discuss-phase/templates/context.md": "6cd929e989fe2b0f",
|
||||
"gsd-core/workflows/discuss-phase/templates/context.md": "eeebda60636d1ad0",
|
||||
"gsd-core/workflows/discuss-phase/templates/discussion-log.md": "cd5d01c9ef84ab73",
|
||||
"gsd-core/workflows/do.md": "c2ee0bb845bc1cf1",
|
||||
"gsd-core/workflows/docs-update.md": "a7b78ce2f5404160",
|
||||
@@ -261,7 +262,7 @@
|
||||
"gsd-core/workflows/help.md": "08e1349950c5602a",
|
||||
"gsd-core/workflows/help/modes/brief.md": "fa2675516b40e2e3",
|
||||
"gsd-core/workflows/help/modes/default.md": "6a253f1756f74e95",
|
||||
"gsd-core/workflows/help/modes/full.md": "670392a80cbcbd7d",
|
||||
"gsd-core/workflows/help/modes/full.md": "fb22cd27f4478ee2",
|
||||
"gsd-core/workflows/help/modes/topic.md": "cee80e0adfa3b06c",
|
||||
"gsd-core/workflows/import.md": "3df83dccd78ae0a6",
|
||||
"gsd-core/workflows/inbox.md": "556b5a10c580ebad",
|
||||
@@ -283,7 +284,7 @@
|
||||
"gsd-core/workflows/onboard.md": "7d0c7449b84c7997",
|
||||
"gsd-core/workflows/pause-work.md": "93fcc1c845da6396",
|
||||
"gsd-core/workflows/plan-milestone-gaps.md": "7880866ee1caf923",
|
||||
"gsd-core/workflows/plan-phase.md": "870aff8ccfe7b1a4",
|
||||
"gsd-core/workflows/plan-phase.md": "3bd23960110db934",
|
||||
"gsd-core/workflows/plan-phase/steps/closed-phase-gate.md": "e06ccd4d4c0703fb",
|
||||
"gsd-core/workflows/plan-phase/steps/prd-express-path.md": "80b1ba493a9a967f",
|
||||
"gsd-core/workflows/plan-phase/steps/windows-troubleshooting.md": "3fed4740a91d0443",
|
||||
|
||||
17
tests/fixtures/golden-install-parity/zcode.json
vendored
17
tests/fixtures/golden-install-parity/zcode.json
vendored
@@ -25,7 +25,7 @@
|
||||
"agents/gsd-pattern-mapper.md": "68ecefd60811a669",
|
||||
"agents/gsd-phase-researcher.md": "2235f61764d8e969",
|
||||
"agents/gsd-plan-checker.md": "bb38f345d3d41edc",
|
||||
"agents/gsd-planner.md": "1e904e38cccc5dc4",
|
||||
"agents/gsd-planner.md": "4b7405292d3866ad",
|
||||
"agents/gsd-project-researcher.md": "f572892f138734ff",
|
||||
"agents/gsd-research-synthesizer.md": "29949bf3f049a8f1",
|
||||
"agents/gsd-roadmapper.md": "840ac933e3b094f9",
|
||||
@@ -79,7 +79,7 @@
|
||||
"commands/gsd-onboard.md": "a35340ce39334fc7",
|
||||
"commands/gsd-pause-work.md": "40a953fcddbedb5d",
|
||||
"commands/gsd-phase.md": "5dd3d40e3461a973",
|
||||
"commands/gsd-plan-phase.md": "d6ba79bf0ede5bcd",
|
||||
"commands/gsd-plan-phase.md": "8ab637314511ea88",
|
||||
"commands/gsd-plan-review-convergence.md": "f3aab422e0708dae",
|
||||
"commands/gsd-pr-branch.md": "ab1fcffe92129061",
|
||||
"commands/gsd-profile-user.md": "37c9ef202669bfd3",
|
||||
@@ -179,7 +179,7 @@
|
||||
"gsd-core/references/model-profiles.md": "e067ad3df6770db1",
|
||||
"gsd-core/references/mvp-concepts.md": "72f7e8b1f8ae7118",
|
||||
"gsd-core/references/phase-argument-parsing.md": "e5bbb985f3bc3e34",
|
||||
"gsd-core/references/planner-antipatterns.md": "7ed54ec1e2cc54ac",
|
||||
"gsd-core/references/planner-antipatterns.md": "013ad54062399dad",
|
||||
"gsd-core/references/planner-chunked.md": "79fe674221e738e6",
|
||||
"gsd-core/references/planner-gap-closure.md": "76bee257911413e7",
|
||||
"gsd-core/references/planner-graphify-auto-update.md": "6aeffd9097e25e22",
|
||||
@@ -189,6 +189,7 @@
|
||||
"gsd-core/references/planner-load-graph-context.md": "ca7a7af3f35ae61b",
|
||||
"gsd-core/references/planner-mvp-mode.md": "cfd535c9c545e73e",
|
||||
"gsd-core/references/planner-preconditions.md": "4511829607ec9107",
|
||||
"gsd-core/references/planner-reversibility.md": "d75786c2d3e6ff5c",
|
||||
"gsd-core/references/planner-reviews.md": "dda0193a0fbd4947",
|
||||
"gsd-core/references/planner-revision.md": "86ba8a511f081f05",
|
||||
"gsd-core/references/planner-source-audit.md": "7de5bdb07232ce0b",
|
||||
@@ -216,7 +217,7 @@
|
||||
"gsd-core/references/tdd.md": "e4708ede157478b6",
|
||||
"gsd-core/references/thinking-models-debug.md": "2da61022b16c4e7c",
|
||||
"gsd-core/references/thinking-models-execution.md": "dcc650a8b5f3e049",
|
||||
"gsd-core/references/thinking-models-planning.md": "7e19462313fa028f",
|
||||
"gsd-core/references/thinking-models-planning.md": "ef519bff8c8bd572",
|
||||
"gsd-core/references/thinking-models-research.md": "5f6bf3f3b889c6e4",
|
||||
"gsd-core/references/thinking-models-verification.md": "a71a933d51ca3d8d",
|
||||
"gsd-core/references/thinking-partner.md": "41069529ef776e39",
|
||||
@@ -310,7 +311,7 @@
|
||||
"gsd-core/workflows/discuss-phase/modes/power.md": "fdc7a728eaaa2261",
|
||||
"gsd-core/workflows/discuss-phase/modes/text.md": "da6d45207da4a988",
|
||||
"gsd-core/workflows/discuss-phase/templates/checkpoint.json": "e3bc3dca49db59eb",
|
||||
"gsd-core/workflows/discuss-phase/templates/context.md": "6cd929e989fe2b0f",
|
||||
"gsd-core/workflows/discuss-phase/templates/context.md": "eeebda60636d1ad0",
|
||||
"gsd-core/workflows/discuss-phase/templates/discussion-log.md": "1bbd7703f11128e1",
|
||||
"gsd-core/workflows/do.md": "90df4f1fe248cdf3",
|
||||
"gsd-core/workflows/docs-update.md": "b5cdf1c35043cf7b",
|
||||
@@ -332,7 +333,7 @@
|
||||
"gsd-core/workflows/help.md": "5d040504b9ab35e3",
|
||||
"gsd-core/workflows/help/modes/brief.md": "924860e1f07defb0",
|
||||
"gsd-core/workflows/help/modes/default.md": "08a02976c0c5cc50",
|
||||
"gsd-core/workflows/help/modes/full.md": "dda8f6d101b0870d",
|
||||
"gsd-core/workflows/help/modes/full.md": "6e01ecd0da6f1848",
|
||||
"gsd-core/workflows/help/modes/topic.md": "5c160093f3cbf35d",
|
||||
"gsd-core/workflows/import.md": "31a0f3a33154939f",
|
||||
"gsd-core/workflows/inbox.md": "a7d439981775bc29",
|
||||
@@ -354,7 +355,7 @@
|
||||
"gsd-core/workflows/onboard.md": "f29c4fbef3b473fd",
|
||||
"gsd-core/workflows/pause-work.md": "f2b33bba5593d422",
|
||||
"gsd-core/workflows/plan-milestone-gaps.md": "852f6d7c0c4299dc",
|
||||
"gsd-core/workflows/plan-phase.md": "f05af110cc6b0eb5",
|
||||
"gsd-core/workflows/plan-phase.md": "e7d0ef2b78660739",
|
||||
"gsd-core/workflows/plan-phase/steps/closed-phase-gate.md": "b36f77ac7344a072",
|
||||
"gsd-core/workflows/plan-phase/steps/prd-express-path.md": "197c0590326371b2",
|
||||
"gsd-core/workflows/plan-phase/steps/windows-troubleshooting.md": "49f58c3f75be3eb5",
|
||||
@@ -472,7 +473,7 @@
|
||||
"skills/gsd-ns-workflow/skills/mvp-phase/SKILL.md": "3455ea7562a447a2",
|
||||
"skills/gsd-ns-workflow/skills/next/SKILL.md": "63659cd48a0276f9",
|
||||
"skills/gsd-ns-workflow/skills/phase/SKILL.md": "b377b03d13db8573",
|
||||
"skills/gsd-ns-workflow/skills/plan-phase/SKILL.md": "4564f415845d6c15",
|
||||
"skills/gsd-ns-workflow/skills/plan-phase/SKILL.md": "a0b43b907671a98e",
|
||||
"skills/gsd-ns-workflow/skills/plan-review-convergence/SKILL.md": "84af9aa192ec349f",
|
||||
"skills/gsd-ns-workflow/skills/progress/SKILL.md": "fb24eab4a0e5f6a3",
|
||||
"skills/gsd-ns-workflow/skills/quick/SKILL.md": "48629fef2b9ac5b0",
|
||||
|
||||
1
tests/fixtures/install-tree/antigravity.json
vendored
1
tests/fixtures/install-tree/antigravity.json
vendored
@@ -118,6 +118,7 @@
|
||||
"gsd-core/references/planner-load-graph-context.md",
|
||||
"gsd-core/references/planner-mvp-mode.md",
|
||||
"gsd-core/references/planner-preconditions.md",
|
||||
"gsd-core/references/planner-reversibility.md",
|
||||
"gsd-core/references/planner-reviews.md",
|
||||
"gsd-core/references/planner-revision.md",
|
||||
"gsd-core/references/planner-source-audit.md",
|
||||
|
||||
1
tests/fixtures/install-tree/augment.json
vendored
1
tests/fixtures/install-tree/augment.json
vendored
@@ -189,6 +189,7 @@
|
||||
"gsd-core/references/planner-load-graph-context.md",
|
||||
"gsd-core/references/planner-mvp-mode.md",
|
||||
"gsd-core/references/planner-preconditions.md",
|
||||
"gsd-core/references/planner-reversibility.md",
|
||||
"gsd-core/references/planner-reviews.md",
|
||||
"gsd-core/references/planner-revision.md",
|
||||
"gsd-core/references/planner-source-audit.md",
|
||||
|
||||
@@ -188,6 +188,7 @@
|
||||
"gsd-core/references/planner-load-graph-context.md",
|
||||
"gsd-core/references/planner-mvp-mode.md",
|
||||
"gsd-core/references/planner-preconditions.md",
|
||||
"gsd-core/references/planner-reversibility.md",
|
||||
"gsd-core/references/planner-reviews.md",
|
||||
"gsd-core/references/planner-revision.md",
|
||||
"gsd-core/references/planner-source-audit.md",
|
||||
|
||||
1
tests/fixtures/install-tree/claude.json
vendored
1
tests/fixtures/install-tree/claude.json
vendored
@@ -117,6 +117,7 @@
|
||||
"gsd-core/references/planner-load-graph-context.md",
|
||||
"gsd-core/references/planner-mvp-mode.md",
|
||||
"gsd-core/references/planner-preconditions.md",
|
||||
"gsd-core/references/planner-reversibility.md",
|
||||
"gsd-core/references/planner-reviews.md",
|
||||
"gsd-core/references/planner-revision.md",
|
||||
"gsd-core/references/planner-source-audit.md",
|
||||
|
||||
1
tests/fixtures/install-tree/cline.json
vendored
1
tests/fixtures/install-tree/cline.json
vendored
@@ -121,6 +121,7 @@
|
||||
"gsd-core/references/planner-load-graph-context.md",
|
||||
"gsd-core/references/planner-mvp-mode.md",
|
||||
"gsd-core/references/planner-preconditions.md",
|
||||
"gsd-core/references/planner-reversibility.md",
|
||||
"gsd-core/references/planner-reviews.md",
|
||||
"gsd-core/references/planner-revision.md",
|
||||
"gsd-core/references/planner-source-audit.md",
|
||||
|
||||
1
tests/fixtures/install-tree/codebuddy.json
vendored
1
tests/fixtures/install-tree/codebuddy.json
vendored
@@ -189,6 +189,7 @@
|
||||
"gsd-core/references/planner-load-graph-context.md",
|
||||
"gsd-core/references/planner-mvp-mode.md",
|
||||
"gsd-core/references/planner-preconditions.md",
|
||||
"gsd-core/references/planner-reversibility.md",
|
||||
"gsd-core/references/planner-reviews.md",
|
||||
"gsd-core/references/planner-revision.md",
|
||||
"gsd-core/references/planner-source-audit.md",
|
||||
|
||||
1
tests/fixtures/install-tree/codex.json
vendored
1
tests/fixtures/install-tree/codex.json
vendored
@@ -224,6 +224,7 @@
|
||||
"gsd-core/references/planner-load-graph-context.md",
|
||||
"gsd-core/references/planner-mvp-mode.md",
|
||||
"gsd-core/references/planner-preconditions.md",
|
||||
"gsd-core/references/planner-reversibility.md",
|
||||
"gsd-core/references/planner-reviews.md",
|
||||
"gsd-core/references/planner-revision.md",
|
||||
"gsd-core/references/planner-source-audit.md",
|
||||
|
||||
1
tests/fixtures/install-tree/copilot.json
vendored
1
tests/fixtures/install-tree/copilot.json
vendored
@@ -119,6 +119,7 @@
|
||||
"gsd-core/references/planner-load-graph-context.md",
|
||||
"gsd-core/references/planner-mvp-mode.md",
|
||||
"gsd-core/references/planner-preconditions.md",
|
||||
"gsd-core/references/planner-reversibility.md",
|
||||
"gsd-core/references/planner-reviews.md",
|
||||
"gsd-core/references/planner-revision.md",
|
||||
"gsd-core/references/planner-source-audit.md",
|
||||
|
||||
1
tests/fixtures/install-tree/cursor.json
vendored
1
tests/fixtures/install-tree/cursor.json
vendored
@@ -189,6 +189,7 @@
|
||||
"gsd-core/references/planner-load-graph-context.md",
|
||||
"gsd-core/references/planner-mvp-mode.md",
|
||||
"gsd-core/references/planner-preconditions.md",
|
||||
"gsd-core/references/planner-reversibility.md",
|
||||
"gsd-core/references/planner-reviews.md",
|
||||
"gsd-core/references/planner-revision.md",
|
||||
"gsd-core/references/planner-source-audit.md",
|
||||
|
||||
1
tests/fixtures/install-tree/hermes.json
vendored
1
tests/fixtures/install-tree/hermes.json
vendored
@@ -118,6 +118,7 @@
|
||||
"gsd-core/references/planner-load-graph-context.md",
|
||||
"gsd-core/references/planner-mvp-mode.md",
|
||||
"gsd-core/references/planner-preconditions.md",
|
||||
"gsd-core/references/planner-reversibility.md",
|
||||
"gsd-core/references/planner-reviews.md",
|
||||
"gsd-core/references/planner-revision.md",
|
||||
"gsd-core/references/planner-source-audit.md",
|
||||
|
||||
1
tests/fixtures/install-tree/kilo.json
vendored
1
tests/fixtures/install-tree/kilo.json
vendored
@@ -189,6 +189,7 @@
|
||||
"gsd-core/references/planner-load-graph-context.md",
|
||||
"gsd-core/references/planner-mvp-mode.md",
|
||||
"gsd-core/references/planner-preconditions.md",
|
||||
"gsd-core/references/planner-reversibility.md",
|
||||
"gsd-core/references/planner-reviews.md",
|
||||
"gsd-core/references/planner-revision.md",
|
||||
"gsd-core/references/planner-source-audit.md",
|
||||
|
||||
1
tests/fixtures/install-tree/kimi.json
vendored
1
tests/fixtures/install-tree/kimi.json
vendored
@@ -182,6 +182,7 @@
|
||||
"gsd-core/references/planner-load-graph-context.md",
|
||||
"gsd-core/references/planner-mvp-mode.md",
|
||||
"gsd-core/references/planner-preconditions.md",
|
||||
"gsd-core/references/planner-reversibility.md",
|
||||
"gsd-core/references/planner-reviews.md",
|
||||
"gsd-core/references/planner-revision.md",
|
||||
"gsd-core/references/planner-source-audit.md",
|
||||
|
||||
1
tests/fixtures/install-tree/opencode.json
vendored
1
tests/fixtures/install-tree/opencode.json
vendored
@@ -189,6 +189,7 @@
|
||||
"gsd-core/references/planner-load-graph-context.md",
|
||||
"gsd-core/references/planner-mvp-mode.md",
|
||||
"gsd-core/references/planner-preconditions.md",
|
||||
"gsd-core/references/planner-reversibility.md",
|
||||
"gsd-core/references/planner-reviews.md",
|
||||
"gsd-core/references/planner-revision.md",
|
||||
"gsd-core/references/planner-source-audit.md",
|
||||
|
||||
1
tests/fixtures/install-tree/pi.json
vendored
1
tests/fixtures/install-tree/pi.json
vendored
@@ -85,6 +85,7 @@
|
||||
"gsd-core/references/planner-load-graph-context.md",
|
||||
"gsd-core/references/planner-mvp-mode.md",
|
||||
"gsd-core/references/planner-preconditions.md",
|
||||
"gsd-core/references/planner-reversibility.md",
|
||||
"gsd-core/references/planner-reviews.md",
|
||||
"gsd-core/references/planner-revision.md",
|
||||
"gsd-core/references/planner-source-audit.md",
|
||||
|
||||
1
tests/fixtures/install-tree/qwen.json
vendored
1
tests/fixtures/install-tree/qwen.json
vendored
@@ -118,6 +118,7 @@
|
||||
"gsd-core/references/planner-load-graph-context.md",
|
||||
"gsd-core/references/planner-mvp-mode.md",
|
||||
"gsd-core/references/planner-preconditions.md",
|
||||
"gsd-core/references/planner-reversibility.md",
|
||||
"gsd-core/references/planner-reviews.md",
|
||||
"gsd-core/references/planner-revision.md",
|
||||
"gsd-core/references/planner-source-audit.md",
|
||||
|
||||
1
tests/fixtures/install-tree/trae.json
vendored
1
tests/fixtures/install-tree/trae.json
vendored
@@ -118,6 +118,7 @@
|
||||
"gsd-core/references/planner-load-graph-context.md",
|
||||
"gsd-core/references/planner-mvp-mode.md",
|
||||
"gsd-core/references/planner-preconditions.md",
|
||||
"gsd-core/references/planner-reversibility.md",
|
||||
"gsd-core/references/planner-reviews.md",
|
||||
"gsd-core/references/planner-revision.md",
|
||||
"gsd-core/references/planner-source-audit.md",
|
||||
|
||||
1
tests/fixtures/install-tree/windsurf.json
vendored
1
tests/fixtures/install-tree/windsurf.json
vendored
@@ -118,6 +118,7 @@
|
||||
"gsd-core/references/planner-load-graph-context.md",
|
||||
"gsd-core/references/planner-mvp-mode.md",
|
||||
"gsd-core/references/planner-preconditions.md",
|
||||
"gsd-core/references/planner-reversibility.md",
|
||||
"gsd-core/references/planner-reviews.md",
|
||||
"gsd-core/references/planner-revision.md",
|
||||
"gsd-core/references/planner-source-audit.md",
|
||||
|
||||
1
tests/fixtures/install-tree/zcode.json
vendored
1
tests/fixtures/install-tree/zcode.json
vendored
@@ -189,6 +189,7 @@
|
||||
"gsd-core/references/planner-load-graph-context.md",
|
||||
"gsd-core/references/planner-mvp-mode.md",
|
||||
"gsd-core/references/planner-preconditions.md",
|
||||
"gsd-core/references/planner-reversibility.md",
|
||||
"gsd-core/references/planner-reviews.md",
|
||||
"gsd-core/references/planner-revision.md",
|
||||
"gsd-core/references/planner-source-audit.md",
|
||||
|
||||
577
tests/reversibility-tagging.test.cjs
Normal file
577
tests/reversibility-tagging.test.cjs
Normal file
@@ -0,0 +1,577 @@
|
||||
// allow-test-rule: source-text-is-the-product [#1951]
|
||||
// Agent .md, workflow .md, command .md, reference .md and docs/reference/*.md —
|
||||
// their text IS what the runtime loads, so asserting they document the
|
||||
// reversibility contract tests the deployed surface, not derived behavior.
|
||||
// Per the CONTRIBUTING.md exception matrix. The behavioral half
|
||||
// (cmdVerifyPlanStructure) asserts the structural validator stays additive.
|
||||
// Issue #1951.
|
||||
|
||||
'use strict';
|
||||
|
||||
const { describe, test } = require('node:test');
|
||||
const assert = require('node:assert/strict');
|
||||
const fs = require('node:fs');
|
||||
const path = require('node:path');
|
||||
const { runGsdTools, createTempProject, cleanup } = require('./helpers.cjs');
|
||||
|
||||
const ROOT = path.resolve(__dirname, '..');
|
||||
const PLANNER = path.join(ROOT, 'agents', 'gsd-planner.md');
|
||||
const PLAN_MD_DOC = path.join(ROOT, 'docs', 'reference', 'plan-md.md');
|
||||
const REVERSIBILITY_REF = path.join(ROOT, 'gsd-core', 'references', 'planner-reversibility.md');
|
||||
const ANTIPATTERNS_REF = path.join(ROOT, 'gsd-core', 'references', 'planner-antipatterns.md');
|
||||
const THINKING_MODELS = path.join(ROOT, 'gsd-core', 'references', 'thinking-models-planning.md');
|
||||
const PLAN_PHASE_WORKFLOW = path.join(ROOT, 'gsd-core', 'workflows', 'plan-phase.md');
|
||||
const PLAN_PHASE_CMD = path.join(ROOT, 'commands', 'gsd', 'plan-phase.md');
|
||||
const HELP_FULL = path.join(ROOT, 'gsd-core', 'workflows', 'help', 'modes', 'full.md');
|
||||
const DISCUSS_CONTEXT_TEMPLATE = path.join(
|
||||
ROOT, 'gsd-core', 'workflows', 'discuss-phase', 'templates', 'context.md',
|
||||
);
|
||||
|
||||
/** The canonical three-level taxonomy. Single source of truth for this suite. */
|
||||
const RATINGS = ['reversible', 'costly', 'one-way'];
|
||||
|
||||
/** Agent-file hard red line (tests/agent-size-budget.test.cjs LARGE_CAP). */
|
||||
const LARGE_CAP = 49152;
|
||||
|
||||
function read(file) {
|
||||
return fs.readFileSync(file, 'utf-8').replace(/\r\n/g, '\n').replace(/\r/g, '\n');
|
||||
}
|
||||
|
||||
/**
|
||||
* Word-boundary rating match. A plain `.includes('reversible')` also matches
|
||||
* inside "irreversible"/"irreversibility", which appear in anti-pattern prose —
|
||||
* so a surface that dropped the real taxonomy entry could still pass.
|
||||
*/
|
||||
function namesRating(text, rating) {
|
||||
// Escape every regex metacharacter, backslash included — a partial escape is
|
||||
// js/incomplete-sanitization (CodeQL, high). `-` needs no escaping outside a
|
||||
// character class, so the previous `-`-only replace was both incomplete and
|
||||
// unnecessary.
|
||||
const escaped = rating.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
|
||||
return new RegExp(`\\b${escaped}\\b`).test(text);
|
||||
}
|
||||
|
||||
/** The fenced ```bash blocks of a workflow file, so prose cannot satisfy a
|
||||
* test that claims to assert on the parser. */
|
||||
function bashBlocks(md) {
|
||||
return [...md.matchAll(/```bash\r?\n([\s\S]*?)```/g)].map((m) => m[1]);
|
||||
}
|
||||
|
||||
// ─── Acceptance #1: discuss-phase decisions carry a rating + rationale ───────
|
||||
|
||||
describe('#1951 discuss-phase: decisions carry a reversibility rating', () => {
|
||||
test('CONTEXT.md template documents a Reversibility field on decisions', () => {
|
||||
const tpl = read(DISCUSS_CONTEXT_TEMPLATE);
|
||||
assert.match(
|
||||
tpl,
|
||||
/\*\*Reversibility:\*\*/,
|
||||
'discuss-phase/templates/context.md must document a **Reversibility:** field on captured decisions',
|
||||
);
|
||||
});
|
||||
|
||||
test('template names all three ratings', () => {
|
||||
const tpl = read(DISCUSS_CONTEXT_TEMPLATE);
|
||||
for (const rating of RATINGS) {
|
||||
assert.ok(
|
||||
namesRating(tpl, rating),
|
||||
`context.md template must name the "${rating}" rating`,
|
||||
);
|
||||
}
|
||||
});
|
||||
|
||||
test('template pairs the rating with a rationale', () => {
|
||||
const tpl = read(DISCUSS_CONTEXT_TEMPLATE);
|
||||
assert.match(
|
||||
tpl,
|
||||
/\*\*Reversibility:\*\*[^\n]*rationale/i,
|
||||
'the rating must be recorded together with its rationale, not bare',
|
||||
);
|
||||
});
|
||||
|
||||
test('rating is optional — decisions without one stay valid (back-compat)', () => {
|
||||
const tpl = read(DISCUSS_CONTEXT_TEMPLATE);
|
||||
assert.match(
|
||||
tpl,
|
||||
/reversibilit\w*[^\n]*optional|optional[^\n]*reversibilit/i,
|
||||
'context.md template must state the reversibility field is optional',
|
||||
);
|
||||
});
|
||||
});
|
||||
|
||||
// ─── Acceptance #2 + #3: planner checkpoint-insertion rules ─────────────────
|
||||
|
||||
describe('#1951 gsd-planner: one-way inserts a checkpoint, reversible does not', () => {
|
||||
test('planner @-references the reversibility reference file', () => {
|
||||
assert.ok(
|
||||
read(PLANNER).includes('planner-reversibility.md'),
|
||||
'gsd-planner.md must @-reference planner-reversibility.md (progressive disclosure)',
|
||||
);
|
||||
});
|
||||
|
||||
test(`planner stays under the ${LARGE_CAP}-char agent cap`, () => {
|
||||
const planner = read(PLANNER);
|
||||
assert.ok(
|
||||
planner.length < LARGE_CAP,
|
||||
`gsd-planner.md is ${planner.length} chars, must be < ${LARGE_CAP} (LF-normalized). `
|
||||
+ 'Crossing the cap means EXTRACT to a reference file, not bump.',
|
||||
);
|
||||
});
|
||||
|
||||
test('planner states that a one-way decision inserts a checkpoint:decision', () => {
|
||||
const planner = read(PLANNER);
|
||||
assert.match(
|
||||
planner,
|
||||
/one-way[^\n]*checkpoint:decision|checkpoint:decision[^\n]*one-way/,
|
||||
'gsd-planner.md must state that a one-way rating inserts a checkpoint:decision',
|
||||
);
|
||||
});
|
||||
|
||||
test('reference file states the checkpoint precedes the dependent task', () => {
|
||||
const ref = read(REVERSIBILITY_REF);
|
||||
assert.match(
|
||||
ref,
|
||||
/before[^\n]*(dependent|the task)/i,
|
||||
'planner-reversibility.md must state the checkpoint is inserted BEFORE the dependent task',
|
||||
);
|
||||
});
|
||||
|
||||
test('reference file states reversible decisions insert no checkpoint', () => {
|
||||
const ref = read(REVERSIBILITY_REF);
|
||||
assert.match(
|
||||
ref,
|
||||
/reversible[^\n]*no checkpoint|no checkpoint[^\n]*reversible/i,
|
||||
'planner-reversibility.md must state reversible ratings do NOT trigger a checkpoint',
|
||||
);
|
||||
});
|
||||
|
||||
test('reference file states costly is flagged but not blocking', () => {
|
||||
const ref = read(REVERSIBILITY_REF);
|
||||
assert.match(
|
||||
ref,
|
||||
/costly[^\n]*(flag|visible)[^\n]*not (block|gat)/i,
|
||||
'planner-reversibility.md must state costly ratings are flagged in the plan but never block',
|
||||
);
|
||||
});
|
||||
|
||||
test('reference file requires autonomous:false when a checkpoint is inserted', () => {
|
||||
const ref = read(REVERSIBILITY_REF);
|
||||
assert.match(
|
||||
ref,
|
||||
/autonomous:\s*false/,
|
||||
'inserting a checkpoint flips the plan out of autonomous mode — the reference must say so',
|
||||
);
|
||||
});
|
||||
|
||||
test('reference file defaults to reversible when unsure (checkpoint-fatigue guard)', () => {
|
||||
const ref = read(REVERSIBILITY_REF);
|
||||
assert.match(
|
||||
ref,
|
||||
/default[^\n]*reversible|when (unsure|in doubt)[^\n]*reversible/i,
|
||||
'the taxonomy must default to reversible when unsure, or every decision becomes a gate',
|
||||
);
|
||||
});
|
||||
});
|
||||
|
||||
// ─── Acceptance #4: the rating is persisted to the plan ─────────────────────
|
||||
|
||||
describe('#1951 plan-md.md documents the <reversibility> element', () => {
|
||||
test('plan-md.md documents the element', () => {
|
||||
assert.match(
|
||||
read(PLAN_MD_DOC),
|
||||
/<reversibility/,
|
||||
'docs/reference/plan-md.md must document the <reversibility> task element',
|
||||
);
|
||||
});
|
||||
|
||||
test('plan-md.md documents all three ratings', () => {
|
||||
const doc = read(PLAN_MD_DOC);
|
||||
for (const rating of RATINGS) {
|
||||
assert.ok(
|
||||
namesRating(doc, rating),
|
||||
`plan-md.md must document the "${rating}" rating`,
|
||||
);
|
||||
}
|
||||
});
|
||||
|
||||
test('plan-md.md states the element is optional', () => {
|
||||
const doc = read(PLAN_MD_DOC);
|
||||
assert.match(
|
||||
doc,
|
||||
/<reversibility[\s\S]{0,600}?optional|optional[\s\S]{0,600}?<reversibility/,
|
||||
'plan-md.md must describe <reversibility> as an optional element',
|
||||
);
|
||||
});
|
||||
});
|
||||
|
||||
// ─── Acceptance #5: the override ────────────────────────────────────────────
|
||||
|
||||
describe('#1951 --no-reversibility-gates override', () => {
|
||||
// Asserted against the fenced bash blocks, NOT the whole file: the workflow's
|
||||
// own prose mentions `--no-reversibility-gates` and `REVERSIBILITY_GATES=false`
|
||||
// in one sentence, so a whole-file substring check would still pass with the
|
||||
// conditional deleted — it would be testing the documentation, not the parser.
|
||||
test('plan-phase workflow defaults REVERSIBILITY_GATES to true (in bash)', () => {
|
||||
assert.ok(
|
||||
bashBlocks(read(PLAN_PHASE_WORKFLOW)).some((b) => /^REVERSIBILITY_GATES=true$/m.test(b)),
|
||||
'a bash block in plan-phase.md must assign REVERSIBILITY_GATES=true',
|
||||
);
|
||||
});
|
||||
|
||||
test('plan-phase workflow parses --no-reversibility-gates to false (in bash)', () => {
|
||||
// One physical line: `if [[ ... --no-reversibility-gates ... ]]; then REVERSIBILITY_GATES=false; fi`
|
||||
const conditional = /^if \[\[.*--no-reversibility-gates.*\]\];\s*then\s+REVERSIBILITY_GATES=false;\s*fi\s*$/m;
|
||||
assert.ok(
|
||||
bashBlocks(read(PLAN_PHASE_WORKFLOW)).some((b) => conditional.test(b)),
|
||||
'a bash block in plan-phase.md must contain the --no-reversibility-gates -> '
|
||||
+ 'REVERSIBILITY_GATES=false conditional (prose mentioning both tokens is not the parser)',
|
||||
);
|
||||
});
|
||||
|
||||
test('plan-phase workflow injects REVERSIBILITY_GATES into the planner prompt', () => {
|
||||
assert.match(
|
||||
read(PLAN_PHASE_WORKFLOW),
|
||||
/\*\*REVERSIBILITY_GATES:\*\* \$\{REVERSIBILITY_GATES\}/,
|
||||
'plan-phase.md must inject **REVERSIBILITY_GATES:** ${REVERSIBILITY_GATES} into the planner prompt',
|
||||
);
|
||||
});
|
||||
|
||||
test('command argument-hint advertises the flag', () => {
|
||||
const md = read(PLAN_PHASE_CMD);
|
||||
const argHint = (md.match(/^argument-hint:.*$/m) || [''])[0];
|
||||
assert.ok(
|
||||
argHint.includes('--no-reversibility-gates'),
|
||||
'commands/gsd/plan-phase.md argument-hint must list --no-reversibility-gates',
|
||||
);
|
||||
});
|
||||
|
||||
test('command documents the flag in its flag list', () => {
|
||||
assert.match(
|
||||
read(PLAN_PHASE_CMD),
|
||||
/- `--no-reversibility-gates` —/,
|
||||
'commands/gsd/plan-phase.md must document --no-reversibility-gates in its flag list',
|
||||
);
|
||||
});
|
||||
|
||||
test('help full mode lists the flag (argument-hint ↔ help parity)', () => {
|
||||
assert.ok(
|
||||
read(HELP_FULL).includes('--no-reversibility-gates'),
|
||||
'workflows/help/modes/full.md must list --no-reversibility-gates',
|
||||
);
|
||||
});
|
||||
|
||||
test('override suppresses the gate but NOT the rating', () => {
|
||||
const ref = read(REVERSIBILITY_REF);
|
||||
assert.match(
|
||||
ref,
|
||||
/REVERSIBILITY_GATES=false[\s\S]{0,400}?(still|record|persist|emit)/i,
|
||||
'the override must suppress checkpoint insertion while still persisting the rating — '
|
||||
+ 'the signal survives an unattended run',
|
||||
);
|
||||
});
|
||||
});
|
||||
|
||||
// ─── Behavioral: the structural validator stays additive ────────────────────
|
||||
//
|
||||
// cmdVerifyPlanStructure checks for PRESENCE of required tags and must not
|
||||
// reject the new optional element. Covers every rating plus the absent case
|
||||
// (the enum-boundary analog: each valid value, and the omitted value).
|
||||
|
||||
function planWith({ reversibility = null, precedingCheckpoint = false } = {}) {
|
||||
const task = [];
|
||||
if (precedingCheckpoint) {
|
||||
task.push(
|
||||
// Per #2444, cmdVerifyPlanStructure branches on task type: a
|
||||
// checkpoint:decision requires <name> + <resume-signal> + <decision> +
|
||||
// <options>, and is exempt from the <action>/<verify>/<done>/<files> set
|
||||
// that auto/tracer tasks carry. This fixture mirrors that contract
|
||||
// exactly rather than padding it with fields checkpoints do not need.
|
||||
'<task type="checkpoint:decision" gate="blocking">',
|
||||
' <name>Task 0: Confirm the on-disk format</name>',
|
||||
' <decision>Pick the on-disk format</decision>',
|
||||
' <context>Later phases read this file.</context>',
|
||||
' <options>',
|
||||
' <option id="option-a">',
|
||||
' <name>Newline-delimited JSON</name>',
|
||||
' <pros>Streamable, appendable, greppable</pros>',
|
||||
' <cons>Larger on disk than a binary frame</cons>',
|
||||
' </option>',
|
||||
' <option id="option-b">',
|
||||
' <name>Length-prefixed binary</name>',
|
||||
' <pros>Compact, fast to seek</pros>',
|
||||
' <cons>Opaque to standard tooling</cons>',
|
||||
' </option>',
|
||||
' </options>',
|
||||
' <resume-signal>Select: option-a or option-b</resume-signal>',
|
||||
'</task>',
|
||||
'',
|
||||
);
|
||||
}
|
||||
task.push(
|
||||
'<task type="auto">',
|
||||
' <name>Task 1: Test</name>',
|
||||
);
|
||||
if (reversibility !== null) {
|
||||
task.push(` <reversibility rating="${reversibility}">rationale text</reversibility>`);
|
||||
}
|
||||
task.push(
|
||||
' <files>src/x.ts</files>',
|
||||
' <action>Do the thing.</action>',
|
||||
' <verify><automated>echo ok</automated></verify>',
|
||||
' <done>Done</done>',
|
||||
'</task>',
|
||||
'',
|
||||
);
|
||||
return [
|
||||
'---',
|
||||
'phase: 01-test',
|
||||
'plan: 01',
|
||||
'type: execute',
|
||||
'wave: 1',
|
||||
'depends_on: []',
|
||||
'files_modified: [src/x.ts]',
|
||||
// A plan containing any checkpoint must declare autonomous: false — the
|
||||
// validator already errors otherwise, and inserting a reversibility gate
|
||||
// is precisely what flips this field.
|
||||
`autonomous: ${precedingCheckpoint ? 'false' : 'true'}`,
|
||||
'must_haves:',
|
||||
' truths:',
|
||||
' - "something is true"',
|
||||
'---',
|
||||
'',
|
||||
'<tasks>',
|
||||
'',
|
||||
...task,
|
||||
'</tasks>',
|
||||
].join('\n');
|
||||
}
|
||||
|
||||
function verifyPlan(tmpDir, content) {
|
||||
const rel = path.join('.planning', 'phases', '01-test', '01-01-PLAN.md');
|
||||
fs.mkdirSync(path.join(tmpDir, '.planning', 'phases', '01-test'), { recursive: true });
|
||||
fs.writeFileSync(path.join(tmpDir, rel), content);
|
||||
const result = runGsdTools(`verify plan-structure ${rel}`, tmpDir);
|
||||
assert.ok(result.success, `verify plan-structure failed to run: ${result.error}`);
|
||||
return JSON.parse(result.output);
|
||||
}
|
||||
|
||||
describe('#1951 cmdVerifyPlanStructure accepts <reversibility> (additive)', () => {
|
||||
for (const rating of RATINGS) {
|
||||
test(`plan with rating="${rating}" passes structural validation`, (t) => {
|
||||
const tmp = createTempProject();
|
||||
t.after(() => cleanup(tmp));
|
||||
|
||||
// one-way needs its gate present, or the ungated-one-way warning fires
|
||||
// (that path is asserted separately below).
|
||||
const out = verifyPlan(tmp, planWith({
|
||||
reversibility: rating,
|
||||
precedingCheckpoint: rating === 'one-way',
|
||||
}));
|
||||
assert.strictEqual(
|
||||
out.valid, true,
|
||||
`plan with rating="${rating}" must be valid, errors: ${JSON.stringify(out.errors)}`,
|
||||
);
|
||||
assert.deepStrictEqual(out.errors, [], 'no validation path may reject a <reversibility> task');
|
||||
assert.ok(
|
||||
!(out.warnings || []).some((w) => /reversibilit/i.test(w)),
|
||||
`a well-formed rating="${rating}" task must not be flagged`,
|
||||
);
|
||||
});
|
||||
}
|
||||
|
||||
test('plan without <reversibility> still passes (back-compat)', (t) => {
|
||||
const tmp = createTempProject();
|
||||
t.after(() => cleanup(tmp));
|
||||
|
||||
const out = verifyPlan(tmp, planWith({ reversibility: null }));
|
||||
assert.strictEqual(
|
||||
out.valid, true,
|
||||
`plan without <reversibility> must be valid (back-compat), errors: ${JSON.stringify(out.errors)}`,
|
||||
);
|
||||
assert.ok(
|
||||
!(out.warnings || []).some((w) => /reversibilit/i.test(w)),
|
||||
'an unrated plan must not be flagged',
|
||||
);
|
||||
});
|
||||
});
|
||||
|
||||
// ─── The gate is machine-detectable, not prose-only ─────────────────────────
|
||||
//
|
||||
// The feature's whole promise is that a one-way door gets confirmed before it
|
||||
// is walked through. A planner that emits the rating but skips the checkpoint
|
||||
// silently reopens exactly the gap this feature closes, so the validator says
|
||||
// so. It warns rather than errors: <reversibility> stays additive and the plan
|
||||
// stays valid.
|
||||
|
||||
// Each verifyPlan() spawns gsd-tools, which is the dominant cost of this file
|
||||
// (measured 5.6s, the 18x-under-median entry that motivated adding it to
|
||||
// tests/test-timings.json). Assertions are grouped per distinct plan shape so
|
||||
// the suite spawns once per shape rather than once per assertion.
|
||||
describe('#1951 ungated one-way rating is flagged', () => {
|
||||
test('one-way with NO preceding checkpoint:decision warns, and stays valid', (t) => {
|
||||
const tmp = createTempProject();
|
||||
t.after(() => cleanup(tmp));
|
||||
|
||||
const out = verifyPlan(tmp, planWith({ reversibility: 'one-way', precedingCheckpoint: false }));
|
||||
assert.ok(
|
||||
(out.warnings || []).some((w) => /one-way/.test(w) && /checkpoint:decision/.test(w)),
|
||||
`an ungated one-way rating must warn; got warnings: ${JSON.stringify(out.warnings)}`,
|
||||
);
|
||||
assert.strictEqual(
|
||||
out.valid, true,
|
||||
`an ungated one-way rating must warn, never error; errors: ${JSON.stringify(out.errors)}`,
|
||||
);
|
||||
});
|
||||
|
||||
test('one-way WITH a preceding checkpoint:decision does not warn', (t) => {
|
||||
const tmp = createTempProject();
|
||||
t.after(() => cleanup(tmp));
|
||||
|
||||
const out = verifyPlan(tmp, planWith({ reversibility: 'one-way', precedingCheckpoint: true }));
|
||||
assert.ok(
|
||||
!(out.warnings || []).some((w) => /one-way/.test(w)),
|
||||
`a gated one-way rating must not warn; got warnings: ${JSON.stringify(out.warnings)}`,
|
||||
);
|
||||
});
|
||||
|
||||
// `reversible` and `costly` are covered by the additive suite above: those
|
||||
// ratings run there with precedingCheckpoint=false (ungated) and assert no
|
||||
// /reversibilit/ warning at all. The gate warning's text contains both
|
||||
// "reversibility" and "one-way", so that assertion strictly subsumes a
|
||||
// separate never-flagged-as-ungated check — which would only re-spawn
|
||||
// gsd-tools twice to prove the same thing.
|
||||
});
|
||||
|
||||
// ─── Parity: one taxonomy, not two ──────────────────────────────────────────
|
||||
//
|
||||
// DEFECT.GENERATIVE-FIX-DIVERGENCE. thinking-models-planning.md #4 shipped a
|
||||
// BINARY REVERSIBLE/IRREVERSIBLE classification before this feature existed.
|
||||
// Two overlapping taxonomies in files both loaded by gsd-planner is the exact
|
||||
// divergence class this guard exists to prevent.
|
||||
|
||||
describe('#1951 taxonomy parity: a single three-level vocabulary', () => {
|
||||
test('the Reversibility Test thinking model uses the canonical three ratings', () => {
|
||||
const tm = read(THINKING_MODELS);
|
||||
const section = (tm.match(/## \d+\. Reversibility Test[\s\S]*?(?=\n## |$)/) || [''])[0];
|
||||
assert.ok(section.length > 0, 'thinking-models-planning.md must retain a Reversibility Test model');
|
||||
for (const rating of RATINGS) {
|
||||
assert.ok(
|
||||
namesRating(section, rating),
|
||||
`the Reversibility Test model must use the canonical "${rating}" rating`,
|
||||
);
|
||||
}
|
||||
});
|
||||
|
||||
test('the legacy binary IRREVERSIBLE vocabulary is gone', () => {
|
||||
const section = (read(THINKING_MODELS).match(/## \d+\. Reversibility Test[\s\S]*?(?=\n## |$)/) || [''])[0];
|
||||
assert.ok(
|
||||
!/IRREVERSIBLE/.test(section),
|
||||
'the binary REVERSIBLE/IRREVERSIBLE vocabulary must be replaced by the three-level taxonomy, '
|
||||
+ 'not shipped alongside it',
|
||||
);
|
||||
});
|
||||
|
||||
test('thinking model points at the canonical taxonomy owner', () => {
|
||||
const section = (read(THINKING_MODELS).match(/## \d+\. Reversibility Test[\s\S]*?(?=\n## |$)/) || [''])[0];
|
||||
assert.ok(
|
||||
section.includes('planner-reversibility.md'),
|
||||
'the thinking model must point at planner-reversibility.md as the taxonomy owner',
|
||||
);
|
||||
});
|
||||
|
||||
test('plan-md.md and planner-reversibility.md agree on the canonical tag spelling', () => {
|
||||
assert.ok(read(PLAN_MD_DOC).includes('<reversibility'), 'plan-md.md must spell <reversibility');
|
||||
assert.ok(read(REVERSIBILITY_REF).includes('<reversibility'), 'planner-reversibility.md must spell <reversibility');
|
||||
});
|
||||
|
||||
test('every surface naming a rating uses the same three values', () => {
|
||||
const surfaces = {
|
||||
'planner-reversibility.md': read(REVERSIBILITY_REF),
|
||||
'plan-md.md': read(PLAN_MD_DOC),
|
||||
'context.md template': read(DISCUSS_CONTEXT_TEMPLATE),
|
||||
};
|
||||
for (const [name, text] of Object.entries(surfaces)) {
|
||||
for (const rating of RATINGS) {
|
||||
assert.ok(namesRating(text, rating), `${name} must name the "${rating}" rating`);
|
||||
}
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
// ─── Untrusted-input boundary on the rationale (ADR-1577) ───────────────────
|
||||
//
|
||||
// The rationale originates in conversation and flows CONTEXT.md -> planner ->
|
||||
// PLAN.md -> executor, each hop an LLM reading the previous hop's output. Both
|
||||
// authoring surfaces must say the text is data, and must name the closing-tag
|
||||
// hazard specifically — a rationale that terminates its own element injects
|
||||
// sibling structure the executor reads as real tasks.
|
||||
|
||||
describe('#1951 rationale is treated as untrusted data', () => {
|
||||
test('reference file forbids following directives inside a rationale', () => {
|
||||
const ref = read(REVERSIBILITY_REF);
|
||||
assert.match(
|
||||
ref,
|
||||
/never follow[^\n]*directives|rationale is data, never instructions/i,
|
||||
'planner-reversibility.md must state a rationale is data, not instructions to follow',
|
||||
);
|
||||
});
|
||||
|
||||
test('reference file names the closing-tag injection hazard', () => {
|
||||
const ref = read(REVERSIBILITY_REF);
|
||||
assert.ok(
|
||||
ref.includes('</reversibility>'),
|
||||
'planner-reversibility.md must name the </reversibility> early-termination hazard explicitly',
|
||||
);
|
||||
});
|
||||
|
||||
test('reference file cites the untrusted-input boundary standard', () => {
|
||||
const ref = read(REVERSIBILITY_REF);
|
||||
assert.match(
|
||||
ref,
|
||||
/ADR-1577|untrusted-input-boundary/,
|
||||
'the guidance must cite the repo standard (ADR-1577 / untrusted-input-boundary.md), not invent its own',
|
||||
);
|
||||
});
|
||||
|
||||
test('discuss-phase template carries the same boundary instruction', () => {
|
||||
const tpl = read(DISCUSS_CONTEXT_TEMPLATE);
|
||||
assert.match(
|
||||
tpl,
|
||||
/never as an instruction|as data, never/i,
|
||||
'context.md template must instruct the discuss agent to record the rationale as data',
|
||||
);
|
||||
assert.ok(
|
||||
tpl.includes('</reversibility>'),
|
||||
'context.md template must name the plan-tag stripping requirement explicitly',
|
||||
);
|
||||
});
|
||||
});
|
||||
|
||||
// ─── No content loss from the planner extraction ────────────────────────────
|
||||
//
|
||||
// Making room under the agent cap relocated the checkpoint DO/DON'T guidance
|
||||
// into planner-antipatterns.md (already @-referenced by gsd-planner.md, so the
|
||||
// planner still loads it). Guard that the relocation preserved the guidance
|
||||
// rather than dropping it.
|
||||
|
||||
describe('#1951 planner checkpoint guidance survived the extraction', () => {
|
||||
test('relocated DO/DON\'T guidance lives in planner-antipatterns.md', () => {
|
||||
const ref = read(ANTIPATTERNS_REF);
|
||||
for (const phrase of [
|
||||
'Automate everything before',
|
||||
'mix multiple verifications',
|
||||
'before automation completes',
|
||||
]) {
|
||||
assert.ok(
|
||||
ref.includes(phrase),
|
||||
`planner-antipatterns.md must carry the relocated guidance: "${phrase}"`,
|
||||
);
|
||||
}
|
||||
});
|
||||
|
||||
test('gsd-planner.md still reaches that guidance via its @-reference', () => {
|
||||
assert.ok(
|
||||
read(PLANNER).includes('planner-antipatterns.md'),
|
||||
'gsd-planner.md must keep the @-reference that loads the relocated guidance',
|
||||
);
|
||||
});
|
||||
});
|
||||
@@ -6,7 +6,7 @@
|
||||
"test-events-linux-node22.jsonl",
|
||||
"test-events-linux-node24.jsonl"
|
||||
],
|
||||
"file_count": 637,
|
||||
"file_count": 638,
|
||||
"timings": {
|
||||
"active-workstream-store.test.cjs": 102,
|
||||
"active-workstream-store.unit.test.cjs": 332,
|
||||
@@ -510,6 +510,7 @@
|
||||
"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,
|
||||
|
||||
@@ -53,7 +53,7 @@
|
||||
"onboard.md": 8877,
|
||||
"pause-work.md": 14441,
|
||||
"plan-milestone-gaps.md": 11809,
|
||||
"plan-phase.md": 94470,
|
||||
"plan-phase.md": 94400,
|
||||
"plan-review-convergence.md": 26285,
|
||||
"plant-seed.md": 12150,
|
||||
"pr-branch.md": 15963,
|
||||
|
||||
Reference in New Issue
Block a user