From ff6e9285308400701f789bb13f2b431988864f1b Mon Sep 17 00:00:00 2001 From: Tom Boucher Date: Wed, 8 Jul 2026 14:49:58 -0400 Subject: [PATCH] fix(#2086): normalize realpath temp root in golden parity manifest (macOS /private) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The claude LOCAL install resolves its config dir via realpath, which on macOS prepends /private to the temp root and embeds it in projected agents/commands/ workflows (@ references). buildParityManifest normalized only `root` (/var/folders/…), leaving the /private prefix on macOS while Linux has none — so the mac-generated claude-local fixture failed the Linux CI leg (198 files). Normalize the realpath form too; no-op for the global fixtures (literal --config-dir, never realpath-resolved). Regenerated claude-local.json now matches the Linux hashes. Co-Authored-By: Claude Opus 4.8 --- .../golden-install-parity/claude-local.json | 396 +++++++++--------- tests/golden-install-parity.test.cjs | 16 +- 2 files changed, 213 insertions(+), 199 deletions(-) diff --git a/tests/fixtures/golden-install-parity/claude-local.json b/tests/fixtures/golden-install-parity/claude-local.json index 6b39c5300..72a5c64bb 100644 --- a/tests/fixtures/golden-install-parity/claude-local.json +++ b/tests/fixtures/golden-install-parity/claude-local.json @@ -1,109 +1,109 @@ { ".gsd-profile": "0e716a5fef4e6dc1", - "agents/gsd-advisor-researcher.md": "4e1a8afe45ef8298", - "agents/gsd-ai-researcher.md": "1de9bb9c75e3d668", - "agents/gsd-assumptions-analyzer.md": "63c8bdab78b42128", - "agents/gsd-code-fixer.md": "341e9d4e5c081f0e", - "agents/gsd-code-reviewer.md": "65009b1743904fd3", - "agents/gsd-codebase-mapper.md": "6b58924e7ab595b6", - "agents/gsd-debug-session-manager.md": "df63cabbe4d062a0", - "agents/gsd-debugger.md": "f6874f2e4e74c6fe", - "agents/gsd-doc-classifier.md": "4f52b062005868ec", - "agents/gsd-doc-synthesizer.md": "4be3aac2095d021d", + "agents/gsd-advisor-researcher.md": "c81b55d567dcd99e", + "agents/gsd-ai-researcher.md": "27c7df941b01cc13", + "agents/gsd-assumptions-analyzer.md": "d796f8245bbe05d2", + "agents/gsd-code-fixer.md": "c6148e5511d02459", + "agents/gsd-code-reviewer.md": "e2c45baa8c0b5f6d", + "agents/gsd-codebase-mapper.md": "f96958e5f85b93fb", + "agents/gsd-debug-session-manager.md": "ec9ca0011a1aab75", + "agents/gsd-debugger.md": "9f35a91f8b3a918e", + "agents/gsd-doc-classifier.md": "a76778bdde1c7f72", + "agents/gsd-doc-synthesizer.md": "8b0b6fc187c9d353", "agents/gsd-doc-verifier.md": "4232dcf9076e3566", - "agents/gsd-doc-writer.md": "a8af8a58c28e06b2", - "agents/gsd-domain-researcher.md": "c5f1f069f3124844", - "agents/gsd-eval-auditor.md": "d8debe9e60c26574", - "agents/gsd-eval-planner.md": "8b2359a18a618b04", - "agents/gsd-executor.md": "abf1192f0ac098dc", - "agents/gsd-framework-selector.md": "a359da24df68f01c", - "agents/gsd-integration-checker.md": "1d2ca1591310bf70", - "agents/gsd-intel-updater.md": "ae95a5f8b73a465b", + "agents/gsd-doc-writer.md": "22264239fa0ee611", + "agents/gsd-domain-researcher.md": "f1e03df842ddfb95", + "agents/gsd-eval-auditor.md": "d0f45fff7370bb0b", + "agents/gsd-eval-planner.md": "9cc049b82897daa4", + "agents/gsd-executor.md": "bf1de739df0c9245", + "agents/gsd-framework-selector.md": "85005d716f9d98f7", + "agents/gsd-integration-checker.md": "17a8ee731986564d", + "agents/gsd-intel-updater.md": "4953a465db9dadc1", "agents/gsd-mempalace-curator.md": "77b53f1b155242b4", - "agents/gsd-nyquist-auditor.md": "06e42106449d17ac", + "agents/gsd-nyquist-auditor.md": "f86a28f5c164a0d3", "agents/gsd-pattern-mapper.md": "b45b5e106775bec1", - "agents/gsd-phase-researcher.md": "90f97c741075c907", - "agents/gsd-plan-checker.md": "63e7988a3d7db5cf", - "agents/gsd-planner.md": "0fb1385f2ea179f0", - "agents/gsd-project-researcher.md": "78d92594b3de6e51", - "agents/gsd-research-synthesizer.md": "635639f831464f95", - "agents/gsd-roadmapper.md": "90d11d44ac7d5121", - "agents/gsd-security-auditor.md": "c8eead1524c5a465", - "agents/gsd-ui-auditor.md": "94868774ac120a38", - "agents/gsd-ui-checker.md": "505ca13a25cb67df", - "agents/gsd-ui-researcher.md": "4596a60f979dc769", - "agents/gsd-user-profiler.md": "a5cd095688d6de25", - "agents/gsd-verifier.md": "7327f257ade6d00f", - "commands/gsd-add-tests.md": "993d9c16477b17bf", - "commands/gsd-ai-integration-phase.md": "bd8407401cc52092", - "commands/gsd-audit-fix.md": "0ce7dff55a550d96", - "commands/gsd-audit-milestone.md": "506d3d20f55d80ce", - "commands/gsd-audit-uat.md": "4aefa85d28437405", - "commands/gsd-autonomous.md": "ef5a492c9085b983", - "commands/gsd-capture.md": "61647c8baefcb116", - "commands/gsd-cleanup.md": "88e8c3d4b471a036", - "commands/gsd-code-review.md": "98a9c59ff3edb4ab", - "commands/gsd-complete-milestone.md": "7639dce1b9e755e4", - "commands/gsd-config.md": "b36340912b70c073", - "commands/gsd-debug.md": "e622240e54587e1b", - "commands/gsd-discuss-phase.md": "9eebccc3820ad37a", - "commands/gsd-docs-update.md": "a11bedfbfd0a56db", - "commands/gsd-eval-review.md": "dc602abbb7525761", - "commands/gsd-execute-phase.md": "f47b83e2110f7be8", - "commands/gsd-explore.md": "dbef734b08f7438a", - "commands/gsd-extract-learnings.md": "f3059f4e6e6b7b19", - "commands/gsd-fast.md": "be784c9f67ae3eab", - "commands/gsd-forensics.md": "36ec35a6a6f2cfd7", - "commands/gsd-graphify.md": "1b88285a888f69dd", - "commands/gsd-health.md": "f28dabf45c4ddd77", - "commands/gsd-help.md": "e48f4e1cf9ff3ad3", - "commands/gsd-import.md": "849c4a4bdfc05ebf", - "commands/gsd-inbox.md": "61eebdd7397efe7f", - "commands/gsd-ingest-docs.md": "10b1c8fee7ed7c1f", - "commands/gsd-manager.md": "0c5541f3db284fe3", - "commands/gsd-map-codebase.md": "9c32f13ade27d418", + "agents/gsd-phase-researcher.md": "4772d9eada32e8bd", + "agents/gsd-plan-checker.md": "75851b147f35354a", + "agents/gsd-planner.md": "9c9ffc56275b8ca2", + "agents/gsd-project-researcher.md": "d7f355894519f9fe", + "agents/gsd-research-synthesizer.md": "1c738df9932d325a", + "agents/gsd-roadmapper.md": "453e9471ad27c7ea", + "agents/gsd-security-auditor.md": "45bd98918cd3a004", + "agents/gsd-ui-auditor.md": "a0b09cc8e4645956", + "agents/gsd-ui-checker.md": "3a7be21f4daa1c05", + "agents/gsd-ui-researcher.md": "a739b0ded9c3ae23", + "agents/gsd-user-profiler.md": "d40584599906f3b7", + "agents/gsd-verifier.md": "628ef3a944a7a6eb", + "commands/gsd-add-tests.md": "057e3e440989e681", + "commands/gsd-ai-integration-phase.md": "998dc23188e131fb", + "commands/gsd-audit-fix.md": "ebdcc267a2bebaab", + "commands/gsd-audit-milestone.md": "319caced85c69ff3", + "commands/gsd-audit-uat.md": "99c9af1b2a2c600a", + "commands/gsd-autonomous.md": "c256989da0d3e736", + "commands/gsd-capture.md": "d3f4353483df3637", + "commands/gsd-cleanup.md": "110473269dabd608", + "commands/gsd-code-review.md": "d2f3160f3a1a790a", + "commands/gsd-complete-milestone.md": "561b8e6bf35ee6e9", + "commands/gsd-config.md": "24d7e8cb8237456e", + "commands/gsd-debug.md": "488ec45a06eb7afa", + "commands/gsd-discuss-phase.md": "e50613dc10e1bab5", + "commands/gsd-docs-update.md": "e314a24fd3926ace", + "commands/gsd-eval-review.md": "c636c832d9a7f5c0", + "commands/gsd-execute-phase.md": "a2c4ad3e635c280a", + "commands/gsd-explore.md": "6d5e1f5f14b2d380", + "commands/gsd-extract-learnings.md": "e43d320cb3ed1aaa", + "commands/gsd-fast.md": "5357a1cf3f363dd2", + "commands/gsd-forensics.md": "b816a6cd5ea304f8", + "commands/gsd-graphify.md": "a07ffe1827c512e1", + "commands/gsd-health.md": "253680291c74b8ed", + "commands/gsd-help.md": "eb2c387f97c59e66", + "commands/gsd-import.md": "bcd7c5018b6c96b2", + "commands/gsd-inbox.md": "e829f45bfe8b4ca5", + "commands/gsd-ingest-docs.md": "ded9013d0de7e77b", + "commands/gsd-manager.md": "72d5b31b88f77703", + "commands/gsd-map-codebase.md": "ecd69887996ae561", "commands/gsd-mempalace-capture.md": "2e49397072506fd9", "commands/gsd-mempalace-recall.md": "38716c0983a3ef9c", - "commands/gsd-milestone-summary.md": "a7fdafaaa3a665af", - "commands/gsd-mvp-phase.md": "fe9bf9df99007be1", - "commands/gsd-new-milestone.md": "d2f21e6e3d53b2e9", - "commands/gsd-new-project.md": "2129c259fa653b19", - "commands/gsd-next.md": "02d0abbd2f55a0a2", + "commands/gsd-milestone-summary.md": "908509042caf5beb", + "commands/gsd-mvp-phase.md": "1ef0d7c2871be49a", + "commands/gsd-new-milestone.md": "8ce4861325cd3862", + "commands/gsd-new-project.md": "d68b36481d09bfd4", + "commands/gsd-next.md": "e976ddf80b6cb425", "commands/gsd-ns-context.md": "011c44e7aa46e64a", "commands/gsd-ns-ideate.md": "edc5e543512dd48a", "commands/gsd-ns-manage.md": "0409d810e499357f", "commands/gsd-ns-project.md": "ff67e85bc6f7fc5a", "commands/gsd-ns-review.md": "3766ed10827882a0", "commands/gsd-ns-workflow.md": "c3b3c046a74ec0ee", - "commands/gsd-onboard.md": "2d98ea48454293b5", - "commands/gsd-pause-work.md": "bdfc8f46a674061a", - "commands/gsd-phase.md": "b211ba5969b4d69b", - "commands/gsd-plan-phase.md": "8113654accd5bee9", - "commands/gsd-plan-review-convergence.md": "3d496dbbba45190c", - "commands/gsd-pr-branch.md": "2346583e447a46d6", - "commands/gsd-profile-user.md": "8cc1a47fe685b60e", - "commands/gsd-progress.md": "0eddf50b039adc8e", - "commands/gsd-quick.md": "116941d841ecfb07", - "commands/gsd-resume-work.md": "330cd86844bd768b", + "commands/gsd-onboard.md": "d0d9405bc73899bd", + "commands/gsd-pause-work.md": "01dbaebfefacd252", + "commands/gsd-phase.md": "e8c226d2694692a5", + "commands/gsd-plan-phase.md": "518357828182dca7", + "commands/gsd-plan-review-convergence.md": "d5a85a50dcff2dd1", + "commands/gsd-pr-branch.md": "382c23a6a644c0e4", + "commands/gsd-profile-user.md": "adbc5b025b30e836", + "commands/gsd-progress.md": "75a6dc71b74c54c2", + "commands/gsd-quick.md": "fe2f6655e67a4223", + "commands/gsd-resume-work.md": "cb393bc9f46dcc15", "commands/gsd-review-backlog.md": "434ebe7b63c107e0", - "commands/gsd-review.md": "65b5225d8405f290", - "commands/gsd-secure-phase.md": "1ab3de7d982a7b9a", - "commands/gsd-settings.md": "13a4293f7fa58276", - "commands/gsd-ship.md": "551dc7f66e14a3de", - "commands/gsd-sketch.md": "0d01a055aa4b00ee", - "commands/gsd-spec-phase.md": "b3f6c26deba9172f", - "commands/gsd-spike.md": "7c102d63239f6678", - "commands/gsd-stats.md": "dc7c484c0fc2c177", - "commands/gsd-surface.md": "81c0c0d634ae0375", - "commands/gsd-thread.md": "4d9ac2986e090f5f", - "commands/gsd-ui-phase.md": "19ab8467a3f737a6", - "commands/gsd-ui-review.md": "5e0e6a377719a125", - "commands/gsd-ultraplan-phase.md": "29426afa8f6bcef3", - "commands/gsd-undo.md": "3a8299018ada31f6", - "commands/gsd-update.md": "22f2060ab482d569", - "commands/gsd-validate-phase.md": "079a0013bd14c1bd", - "commands/gsd-verify-work.md": "a7b07cc4547e7099", - "commands/gsd-workspace.md": "24b4c632d9773c11", + "commands/gsd-review.md": "e990b7adb72472f9", + "commands/gsd-secure-phase.md": "ca4c23a332ca6204", + "commands/gsd-settings.md": "ed3fe2f6c845226d", + "commands/gsd-ship.md": "35a93b86512a7dff", + "commands/gsd-sketch.md": "c35f09bf0698c0c9", + "commands/gsd-spec-phase.md": "383b4928c4df4bf1", + "commands/gsd-spike.md": "98d789db7ca53873", + "commands/gsd-stats.md": "a9c0e3f338bd61a5", + "commands/gsd-surface.md": "998bf327c3f4a001", + "commands/gsd-thread.md": "1b78c7b75b53ad4e", + "commands/gsd-ui-phase.md": "67a759b3973f961f", + "commands/gsd-ui-review.md": "9b4ecf2d40bdc476", + "commands/gsd-ultraplan-phase.md": "4b42890e7d7a0c30", + "commands/gsd-undo.md": "e3cf64bb9562a0d8", + "commands/gsd-update.md": "23342d312e49a125", + "commands/gsd-validate-phase.md": "36c1a57cf7e1e724", + "commands/gsd-verify-work.md": "246ac304c4dfde48", + "commands/gsd-workspace.md": "5928e93b8ab475ac", "commands/gsd-workstreams.md": "52ab9c585d3a00f3", "gsd-core/VERSION": "ef0deccd81a6723c", "gsd-core/bin/check-latest-version.cjs": "e4a224058c8f4d74", @@ -123,11 +123,11 @@ "gsd-core/references/ai-evals.md": "b5afa786b938671e", "gsd-core/references/ai-frameworks.md": "f827de93dde124eb", "gsd-core/references/api-coverage.md": "205a43c5fa7c221c", - "gsd-core/references/artifact-types.md": "08e3c3aa1f2ac11e", + "gsd-core/references/artifact-types.md": "251040866a3a1818", "gsd-core/references/autonomous-smart-discuss.md": "2fc710cde0ec7785", "gsd-core/references/checkpoints.md": "6aa620c6ca38bdf0", "gsd-core/references/common-bug-patterns.md": "780145be56352626", - "gsd-core/references/context-budget.md": "338acaf52853668c", + "gsd-core/references/context-budget.md": "6bfac08025ea3106", "gsd-core/references/continuation-format.md": "580287399ad3ba68", "gsd-core/references/debugger-philosophy.md": "0466f95a3d6bfcd3", "gsd-core/references/decimal-phase-calculation.md": "46b5ba045852c474", @@ -146,7 +146,7 @@ "gsd-core/references/edge-probe-fixtures/06-resolved-mixed/expected-coverage.json": "bc552c01939bf4f8", "gsd-core/references/edge-probe-fixtures/06-resolved-mixed/requirements.json": "30a78ee9ce3473ea", "gsd-core/references/edge-probe-fixtures/06-resolved-mixed/resolutions.json": "688ec62c13e08afe", - "gsd-core/references/edge-probe.md": "92e6574b30f5b765", + "gsd-core/references/edge-probe.md": "36f44960a5c1dc45", "gsd-core/references/execute-mvp-tdd.md": "a98a270a7ab126bc", "gsd-core/references/execute-phase-between-wave-reset.md": "3ad96ca0f7fee37e", "gsd-core/references/execute-phase-context-guard.md": "a5a1058d35806a8e", @@ -158,12 +158,12 @@ "gsd-core/references/gates.md": "7dc9fd3a3d6217c6", "gsd-core/references/git-integration.md": "5c70ef3203b7c9ce", "gsd-core/references/git-planning-commit.md": "f897a15ebfc3f5a7", - "gsd-core/references/gsd-run-resolver.md": "46173caac1d469d4", - "gsd-core/references/honest-verifier.md": "6e4b8293f644b3f1", + "gsd-core/references/gsd-run-resolver.md": "1541604e8301ff6d", + "gsd-core/references/honest-verifier.md": "809f3488bc5a79d0", "gsd-core/references/ios-scaffold.md": "5ef0cb7e0fac891f", "gsd-core/references/loop-hook-dispatch.md": "32e5dfb4dba76987", "gsd-core/references/mandatory-initial-read.md": "fe59abce693717cf", - "gsd-core/references/model-profile-resolution.md": "a2fa775cac3470fa", + "gsd-core/references/model-profile-resolution.md": "18e7cfd4ba0ca9bc", "gsd-core/references/model-profiles.md": "c249163663bbea53", "gsd-core/references/mvp-concepts.md": "3464783eaaef5c10", "gsd-core/references/phase-argument-parsing.md": "e5bbb985f3bc3e34", @@ -171,11 +171,11 @@ "gsd-core/references/planner-chunked.md": "79fe674221e738e6", "gsd-core/references/planner-gap-closure.md": "76bee257911413e7", "gsd-core/references/planner-graphify-auto-update.md": "1ed614dfba72f2a3", - "gsd-core/references/planner-guidance.md": "563d1a434304d5cc", + "gsd-core/references/planner-guidance.md": "782fa05092be3ffa", "gsd-core/references/planner-human-verify-mode.md": "56d05e841630b3f4", "gsd-core/references/planner-interface-context.md": "b28fa3da6ae739a8", - "gsd-core/references/planner-load-graph-context.md": "0126c6156a9d32a8", - "gsd-core/references/planner-mvp-mode.md": "f7fc3894770a73f8", + "gsd-core/references/planner-load-graph-context.md": "add55e135dd968da", + "gsd-core/references/planner-mvp-mode.md": "ffd7b9d0e402714e", "gsd-core/references/planner-reviews.md": "da39eace09a10743", "gsd-core/references/planner-revision.md": "86ba8a511f081f05", "gsd-core/references/planner-source-audit.md": "7de5bdb07232ce0b", @@ -183,7 +183,7 @@ "gsd-core/references/prohibition-probe-fixtures/01-streak-reminder/expected.json": "f10df472f2846cc6", "gsd-core/references/prohibition-probe-fixtures/02-clean-utility/expected.json": "31e8a781eeffe020", "gsd-core/references/prohibition-probe-fixtures/03-multi-prohibition/expected.json": "70a532a7cc1b6ae8", - "gsd-core/references/prohibition-probe.md": "7612bb55f00359bb", + "gsd-core/references/prohibition-probe.md": "2d3b728f8ef5cf6e", "gsd-core/references/project-skills-discovery.md": "c155e03dce8dc3c2", "gsd-core/references/questioning.md": "a8c988cab05f4651", "gsd-core/references/research-documentation-lookup.md": "c070007d1d72ab71", @@ -198,7 +198,7 @@ "gsd-core/references/sketch-theme-system.md": "33e2e96e450456f8", "gsd-core/references/sketch-tooling.md": "df6c4f24c1c27611", "gsd-core/references/sketch-variant-patterns.md": "66c197aa4fb52810", - "gsd-core/references/specless-probe-fallback.md": "d22e89615c846b72", + "gsd-core/references/specless-probe-fallback.md": "c0331cc8b7df24a8", "gsd-core/references/spidr-splitting.md": "074ac154c0e4f906", "gsd-core/references/tdd.md": "e4708ede157478b6", "gsd-core/references/thinking-models-debug.md": "2da61022b16c4e7c", @@ -213,7 +213,7 @@ "gsd-core/references/user-profiling.md": "b50416fe57c1b321", "gsd-core/references/user-story-template.md": "0cc50e06a144ff8a", "gsd-core/references/verification-overrides.md": "a3e2d5166d16a37b", - "gsd-core/references/verification-patterns.md": "57c67c5fd375fcb3", + "gsd-core/references/verification-patterns.md": "cfaf338f42b1111e", "gsd-core/references/verify-mvp-mode.md": "534bdc7f2432903a", "gsd-core/references/workstream-flag.md": "ca99ca79e716f0f5", "gsd-core/references/worktree-branch-check.md": "21d9c31bf6542b93", @@ -231,7 +231,7 @@ "gsd-core/templates/codebase/conventions.md": "c2e07698dad6b364", "gsd-core/templates/codebase/integrations.md": "39bd23c71eedd564", "gsd-core/templates/codebase/stack.md": "116e7e67dd87ddec", - "gsd-core/templates/codebase/structure.md": "b106ec2b588d2b51", + "gsd-core/templates/codebase/structure.md": "d34c1d0eb4f15ed6", "gsd-core/templates/codebase/testing.md": "76abff7f2050c9ea", "gsd-core/templates/config.json": "a4b783ef759a0f37", "gsd-core/templates/context.md": "69b01e7909ea3f66", @@ -243,7 +243,7 @@ "gsd-core/templates/discussion-log.md": "cac1b48ec0f4dcb8", "gsd-core/templates/milestone-archive.md": "591b6decdc0c0e51", "gsd-core/templates/milestone.md": "74d2f750ae9f4a9c", - "gsd-core/templates/phase-prompt.md": "d07f52e21f15f2ab", + "gsd-core/templates/phase-prompt.md": "974daa528c2ce3f1", "gsd-core/templates/planner-subagent-prompt.md": "6c9f1b23ee3dc05f", "gsd-core/templates/project.md": "ae1f68db042c2522", "gsd-core/templates/requirements.md": "a44de4c2f146e473", @@ -265,121 +265,121 @@ "gsd-core/templates/user-setup.md": "78b7d718b6e8d67c", "gsd-core/templates/verification-report.md": "dd5faa6254183731", "gsd-core/workflows/_runtime-launcher.snippet.sh": "bf2dd5d1debd5335", - "gsd-core/workflows/add-backlog.md": "450f70cb4ba4bf78", - "gsd-core/workflows/add-phase.md": "500274ecffbc2b12", - "gsd-core/workflows/add-tests.md": "575110e32af4eac3", - "gsd-core/workflows/add-todo.md": "4f68274dbf475704", - "gsd-core/workflows/ai-integration-phase.md": "1be55b37af12a639", + "gsd-core/workflows/add-backlog.md": "8d05775f367d1e48", + "gsd-core/workflows/add-phase.md": "7285e6e8894a41c5", + "gsd-core/workflows/add-tests.md": "8012263b2d27b83e", + "gsd-core/workflows/add-todo.md": "1fc850476cd8340d", + "gsd-core/workflows/ai-integration-phase.md": "3503f52a7356caf0", "gsd-core/workflows/analyze-dependencies.md": "77aff48f97fa6f1c", - "gsd-core/workflows/audit-fix.md": "bab7ebaee574e486", - "gsd-core/workflows/audit-milestone.md": "3b5667e761f97774", - "gsd-core/workflows/audit-uat.md": "470c4637eb53b4a3", - "gsd-core/workflows/autonomous.md": "275e66d559d76792", - "gsd-core/workflows/check-todos.md": "dd1504bb42b17021", - "gsd-core/workflows/cleanup.md": "e06b655e5e901031", - "gsd-core/workflows/code-review-fix.md": "c6d26d40e143acca", - "gsd-core/workflows/code-review.md": "1bb99932450e9ced", - "gsd-core/workflows/complete-milestone.md": "7f0346ab9b6ab2b4", - "gsd-core/workflows/debug.md": "722e00ef94fdb5c2", - "gsd-core/workflows/diagnose-issues.md": "17fa373be09a0b82", - "gsd-core/workflows/discovery-phase.md": "b9f80db0c22d723a", - "gsd-core/workflows/discuss-phase-assumptions.md": "e3693f4e1746bc13", + "gsd-core/workflows/audit-fix.md": "816c71b0ef2d8c1d", + "gsd-core/workflows/audit-milestone.md": "a35795246b955bdb", + "gsd-core/workflows/audit-uat.md": "1c4a02a8c1ab930f", + "gsd-core/workflows/autonomous.md": "6adf957e64518d15", + "gsd-core/workflows/check-todos.md": "8f2c6b27f18cc5e2", + "gsd-core/workflows/cleanup.md": "bfbab4b981d39544", + "gsd-core/workflows/code-review-fix.md": "78c716068ccdf820", + "gsd-core/workflows/code-review.md": "2d21452eb0449fdd", + "gsd-core/workflows/complete-milestone.md": "9962377cddee50d7", + "gsd-core/workflows/debug.md": "3354c726abbfd75b", + "gsd-core/workflows/diagnose-issues.md": "db6a599674efbc4d", + "gsd-core/workflows/discovery-phase.md": "a20dfb32adec51de", + "gsd-core/workflows/discuss-phase-assumptions.md": "35a3b2d1285565d8", "gsd-core/workflows/discuss-phase-power.md": "290c0d83d783f9f6", - "gsd-core/workflows/discuss-phase.md": "6f5c0280e386a12e", - "gsd-core/workflows/discuss-phase/modes/advisor.md": "93b4ff65a03a5487", + "gsd-core/workflows/discuss-phase.md": "ff2563dc378c5e5c", + "gsd-core/workflows/discuss-phase/modes/advisor.md": "f64ece6d53b6d432", "gsd-core/workflows/discuss-phase/modes/all.md": "fa70d79066562e54", "gsd-core/workflows/discuss-phase/modes/analyze.md": "da0788f3be7f8105", - "gsd-core/workflows/discuss-phase/modes/auto.md": "fe5daf7c8617e26b", + "gsd-core/workflows/discuss-phase/modes/auto.md": "d0d68b06bcd43bcf", "gsd-core/workflows/discuss-phase/modes/batch.md": "6946597770e2d448", - "gsd-core/workflows/discuss-phase/modes/chain.md": "2d1f9f2396f5d0f4", + "gsd-core/workflows/discuss-phase/modes/chain.md": "94548620da9708dd", "gsd-core/workflows/discuss-phase/modes/default.md": "67d1b67f61f03966", - "gsd-core/workflows/discuss-phase/modes/power.md": "7c10e13c60b73af0", + "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/discussion-log.md": "1bbd7703f11128e1", - "gsd-core/workflows/do.md": "e55fe97bac5d691f", - "gsd-core/workflows/docs-update.md": "fff626c2033d34d2", - "gsd-core/workflows/edit-phase.md": "67efb8a73213ea5a", - "gsd-core/workflows/eval-review.md": "db4b8795864f104e", - "gsd-core/workflows/execute-phase.md": "4ef4e55d34c9c605", - "gsd-core/workflows/execute-phase/steps/codebase-drift-gate.md": "839b0006c551f9fb", + "gsd-core/workflows/do.md": "149084d893a23024", + "gsd-core/workflows/docs-update.md": "cd753783ab95da00", + "gsd-core/workflows/edit-phase.md": "dbbb6191f5a8b65e", + "gsd-core/workflows/eval-review.md": "086a1f2b3c11462c", + "gsd-core/workflows/execute-phase.md": "d7d8ac751aa2915e", + "gsd-core/workflows/execute-phase/steps/codebase-drift-gate.md": "6d38bfd540030da4", "gsd-core/workflows/execute-phase/steps/per-plan-worktree-gate.md": "7ebb7d1af6082028", - "gsd-core/workflows/execute-phase/steps/post-merge-gate.md": "cfe19fe951583f3f", - "gsd-core/workflows/execute-phase/steps/regression-gate.md": "e40c5eb516a9e052", + "gsd-core/workflows/execute-phase/steps/post-merge-gate.md": "611b2be3bd133eb1", + "gsd-core/workflows/execute-phase/steps/regression-gate.md": "016ac9c7c02b1438", "gsd-core/workflows/execute-phase/steps/worktree-recovery-policy.md": "be84efbd71e1513e", - "gsd-core/workflows/execute-plan.md": "5d66d59ce03f88ba", - "gsd-core/workflows/explore.md": "eb4a623b5732303f", - "gsd-core/workflows/extract-learnings.md": "d1e0a14a9df00195", + "gsd-core/workflows/execute-plan.md": "f17623fd47e795dd", + "gsd-core/workflows/explore.md": "95e463d4bdd6dadd", + "gsd-core/workflows/extract-learnings.md": "fd75072c339b58bd", "gsd-core/workflows/fast.md": "54fe93778b45a7eb", - "gsd-core/workflows/forensics.md": "f66bb7b50dcc918a", - "gsd-core/workflows/graduation.md": "35ebdec95d86d45b", - "gsd-core/workflows/health.md": "bcc07e9610635d49", + "gsd-core/workflows/forensics.md": "857d7b064f4cca21", + "gsd-core/workflows/graduation.md": "ecf8da93e094fd2e", + "gsd-core/workflows/health.md": "551e63aa6f3df711", "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": "579577e8095f8fef", + "gsd-core/workflows/help/modes/full.md": "ce40e843f528e327", "gsd-core/workflows/help/modes/topic.md": "6e42db16f1568be9", - "gsd-core/workflows/import.md": "88e6ef80b6d1db63", + "gsd-core/workflows/import.md": "cc21f3da36403ed3", "gsd-core/workflows/inbox.md": "91aac6360e1a8672", - "gsd-core/workflows/ingest-docs.md": "59224a43a74f0f88", - "gsd-core/workflows/insert-phase.md": "653460de68191dd7", + "gsd-core/workflows/ingest-docs.md": "1d42ea1be30becc4", + "gsd-core/workflows/insert-phase.md": "ae977afd1509dc86", "gsd-core/workflows/list-phase-assumptions.md": "2a6b6a5acfb7742c", - "gsd-core/workflows/list-seeds.md": "c7026201e80f21ff", - "gsd-core/workflows/list-workspaces.md": "2c2f5e466cf97136", - "gsd-core/workflows/manager.md": "f0835592a5f4ca39", - "gsd-core/workflows/map-codebase.md": "a2c4e72aac41f477", - "gsd-core/workflows/milestone-summary.md": "4ad8a311ebf766a8", - "gsd-core/workflows/mvp-phase.md": "e459fa1351dbb663", - "gsd-core/workflows/new-milestone.md": "417bbc34f965997f", - "gsd-core/workflows/new-project.md": "4c7c381c8bc0bd98", - "gsd-core/workflows/new-workspace.md": "f907fed6831f3f32", - "gsd-core/workflows/next.md": "f2f2210290a02171", + "gsd-core/workflows/list-seeds.md": "7576156b91e9abee", + "gsd-core/workflows/list-workspaces.md": "90caeeb11cec0128", + "gsd-core/workflows/manager.md": "36559ff897e55c09", + "gsd-core/workflows/map-codebase.md": "b11ca99a885e93ef", + "gsd-core/workflows/milestone-summary.md": "99636900c216c8d2", + "gsd-core/workflows/mvp-phase.md": "254baac57e85dca7", + "gsd-core/workflows/new-milestone.md": "fcb63a8b13c02d6e", + "gsd-core/workflows/new-project.md": "26907d3cf3630ed0", + "gsd-core/workflows/new-workspace.md": "26615bf710f0a324", + "gsd-core/workflows/next.md": "1193222c5618d3db", "gsd-core/workflows/node-repair.md": "07a1628e5a1ff96b", - "gsd-core/workflows/note.md": "def2655cebe5c001", - "gsd-core/workflows/onboard.md": "9ae63d270f8fd7c0", - "gsd-core/workflows/pause-work.md": "9655ec327c5aa307", - "gsd-core/workflows/plan-milestone-gaps.md": "3be3a097114fdde6", - "gsd-core/workflows/plan-phase.md": "b1643a49267f3f01", + "gsd-core/workflows/note.md": "a2cc926854a5666c", + "gsd-core/workflows/onboard.md": "b86d78eef6c77e5b", + "gsd-core/workflows/pause-work.md": "da902807d2213204", + "gsd-core/workflows/plan-milestone-gaps.md": "7679fac068d1009d", + "gsd-core/workflows/plan-phase.md": "8e8331ca99bc8680", "gsd-core/workflows/plan-phase/steps/closed-phase-gate.md": "4099ef6d0868de60", - "gsd-core/workflows/plan-phase/steps/prd-express-path.md": "af3029d3c899f4f2", + "gsd-core/workflows/plan-phase/steps/prd-express-path.md": "b810f9f2374e23a5", "gsd-core/workflows/plan-phase/steps/windows-troubleshooting.md": "e9de7a96bbfff261", - "gsd-core/workflows/plan-review-convergence.md": "b09378bcc5571ca4", - "gsd-core/workflows/plant-seed.md": "4f51d8d267fd56a5", - "gsd-core/workflows/pr-branch.md": "8f6db372a275f7b1", - "gsd-core/workflows/profile-user.md": "aeb21d7386c4a41e", - "gsd-core/workflows/progress.md": "b482c9befd4af94a", - "gsd-core/workflows/quick.md": "668e7e8370ba9992", - "gsd-core/workflows/reapply-patches.md": "6466079b57163be0", - "gsd-core/workflows/remove-phase.md": "7cc144da60d95241", - "gsd-core/workflows/remove-workspace.md": "53e9575a8c4fb411", - "gsd-core/workflows/resume-project.md": "20de3d2834ee581a", - "gsd-core/workflows/review.md": "5ea70bc48614f68f", - "gsd-core/workflows/scan.md": "edba4c0bac5727a6", - "gsd-core/workflows/secure-phase.md": "265b3244a74a9bdd", + "gsd-core/workflows/plan-review-convergence.md": "1cabea77790fc16c", + "gsd-core/workflows/plant-seed.md": "fbe964fcdb244802", + "gsd-core/workflows/pr-branch.md": "513f6cff722eff2d", + "gsd-core/workflows/profile-user.md": "3b34dcb337d50f4b", + "gsd-core/workflows/progress.md": "2be3a57916eccf87", + "gsd-core/workflows/quick.md": "20f9dbfcd20b4b4b", + "gsd-core/workflows/reapply-patches.md": "44a96b52b975e9bb", + "gsd-core/workflows/remove-phase.md": "8effc8742d58a11a", + "gsd-core/workflows/remove-workspace.md": "10882656198d9075", + "gsd-core/workflows/resume-project.md": "af9761bcec0f6fe9", + "gsd-core/workflows/review.md": "34cb7ab671eb8684", + "gsd-core/workflows/scan.md": "75c670d08cee8680", + "gsd-core/workflows/secure-phase.md": "64ec4d06ca85720a", "gsd-core/workflows/session-report.md": "2e5b1205324ddefa", - "gsd-core/workflows/settings-advanced.md": "d148d5233169883f", - "gsd-core/workflows/settings-integrations.md": "b03bdf37b4f5310b", - "gsd-core/workflows/settings.md": "c24424577729f318", - "gsd-core/workflows/ship.md": "4d0fb3bb33f286f8", - "gsd-core/workflows/sketch-wrap-up.md": "47cb472ba0445c10", - "gsd-core/workflows/sketch.md": "d4de5174c8242425", - "gsd-core/workflows/smart-entry.md": "3fe82b4a6e67d0cf", - "gsd-core/workflows/spec-phase.md": "b35b7733e8ece267", - "gsd-core/workflows/spike-wrap-up.md": "496a6afc08c42a8d", - "gsd-core/workflows/spike.md": "3b2a826377c451ff", - "gsd-core/workflows/stats.md": "75618011901cebce", - "gsd-core/workflows/sync-skills.md": "452c01c7a05b238c", - "gsd-core/workflows/thread.md": "9d9cf44f7f6d788e", - "gsd-core/workflows/transition.md": "18f610382e9641f6", - "gsd-core/workflows/ui-phase.md": "4c8adbabd9f71a78", - "gsd-core/workflows/ui-review.md": "108e094e6aa085f6", - "gsd-core/workflows/ultraplan-phase.md": "e759430ce77b45db", - "gsd-core/workflows/undo.md": "e1eeffa679786c8a", - "gsd-core/workflows/update.md": "c276a4f628f4b948", - "gsd-core/workflows/validate-phase.md": "96c5ee354b72af56", - "gsd-core/workflows/verify-phase.md": "5ee79da8a9e787b3", - "gsd-core/workflows/verify-work.md": "25c8dd4c6ca6b5ae", + "gsd-core/workflows/settings-advanced.md": "2fc2738442f4f9de", + "gsd-core/workflows/settings-integrations.md": "dfe3672c4fabf139", + "gsd-core/workflows/settings.md": "ba138b058d91fd38", + "gsd-core/workflows/ship.md": "44af1c72d86e153b", + "gsd-core/workflows/sketch-wrap-up.md": "d52a5462bafda830", + "gsd-core/workflows/sketch.md": "dbe6acc4d976060c", + "gsd-core/workflows/smart-entry.md": "1850447c045f36d8", + "gsd-core/workflows/spec-phase.md": "e03fa9f1a44613dc", + "gsd-core/workflows/spike-wrap-up.md": "4bdfaf9d05c63e7c", + "gsd-core/workflows/spike.md": "1571a05457beea8d", + "gsd-core/workflows/stats.md": "3953356f476b5053", + "gsd-core/workflows/sync-skills.md": "5624d529dae1ad79", + "gsd-core/workflows/thread.md": "14a9d195572a198f", + "gsd-core/workflows/transition.md": "78a91b0154a93cf5", + "gsd-core/workflows/ui-phase.md": "57664a12509b455d", + "gsd-core/workflows/ui-review.md": "9c6005236e2067b5", + "gsd-core/workflows/ultraplan-phase.md": "b926ba7e4de0c76d", + "gsd-core/workflows/undo.md": "d759702f84e308fa", + "gsd-core/workflows/update.md": "2a59b4edf4a3c8c7", + "gsd-core/workflows/validate-phase.md": "83eeefeeca31c2b5", + "gsd-core/workflows/verify-phase.md": "6ae6f159be75dcdd", + "gsd-core/workflows/verify-work.md": "de14acdc8e925338", "hooks/gsd-check-update-worker.js": "a530efdb5fdc0da3", "hooks/gsd-check-update.js": "25cde66a12d6b886", "hooks/gsd-config-reload.js": "96546e0e8bb47904", diff --git a/tests/golden-install-parity.test.cjs b/tests/golden-install-parity.test.cjs index c7f9f7817..1742ab5ce 100644 --- a/tests/golden-install-parity.test.cjs +++ b/tests/golden-install-parity.test.cjs @@ -113,6 +113,17 @@ function buildParityManifest(configDir, root) { const allFiles = walk(configDir); const unsorted = {}; + // The claude LOCAL install resolves its config dir via realpath, which on macOS + // prepends `/private` to the temp root (`/var/folders/…` -> `/private/var/folders/…`) + // and embeds that resolved path in the projected agents/commands/workflows (`@…` + // references). On Linux the temp root has no `/private` symlink, so normalizing + // ONLY `root` left the `/private` prefix on macOS and produced platform-divergent + // hashes (#2086). Normalize the realpath form FIRST (it is the longer, `/private`- + // prefixed string) so both platforms collapse to ``. No-op for the global + // fixtures (global install uses the literal `--config-dir`, never realpath-resolved). + let realRoot = root; + try { realRoot = fs.realpathSync(root); } catch { /* root already gone / not resolvable */ } + for (const full of allFiles) { // Build POSIX-style relative path for cross-platform stability const rel = path.relative(configDir, full).split(path.sep).join('/'); @@ -125,7 +136,10 @@ function buildParityManifest(configDir, root) { // Normalize every occurrence of the temp root so hashes are stable across runs. // Also normalize the package version so the golden survives `npm version` bumps // (the rc release step bakes the new version into hook files before running tests). - const normalized = content.toString('utf8').split(root).join('').split(PKG_VERSION).join(''); + const normalized = content.toString('utf8') + .split(realRoot).join('') + .split(root).join('') + .split(PKG_VERSION).join(''); const hash = crypto.createHash('sha256').update(normalized).digest('hex').slice(0, 16); unsorted[rel] = hash; }