Merge branch 'next' into fix/2003-capability-state-runtime-flag

This commit is contained in:
Tom Boucher
2026-07-07 00:24:27 -04:00
committed by GitHub
101 changed files with 2166 additions and 335 deletions

View File

@@ -87,6 +87,7 @@
"gsd-core/references/gates.md": "7dc9fd3a3d6217c6",
"gsd-core/references/git-integration.md": "9e6076a137f9e156",
"gsd-core/references/git-planning-commit.md": "f897a15ebfc3f5a7",
"gsd-core/references/gsd-run-resolver.md": "c11c191ffad86a9f",
"gsd-core/references/honest-verifier.md": "a31a4bf42d82d5e9",
"gsd-core/references/ios-scaffold.md": "5ef0cb7e0fac891f",
"gsd-core/references/loop-hook-dispatch.md": "32e5dfb4dba76987",
@@ -172,7 +173,7 @@
"gsd-core/templates/milestone.md": "74d2f750ae9f4a9c",
"gsd-core/templates/phase-prompt.md": "31f627d456ab14b0",
"gsd-core/templates/planner-subagent-prompt.md": "6c9f1b23ee3dc05f",
"gsd-core/templates/project.md": "e4a3b331be081e62",
"gsd-core/templates/project.md": "fae14114f2b79b10",
"gsd-core/templates/requirements.md": "a44de4c2f146e473",
"gsd-core/templates/research-project/ARCHITECTURE.md": "746b9ef791d758b0",
"gsd-core/templates/research-project/FEATURES.md": "f2b800de5df91b0f",
@@ -225,7 +226,7 @@
"gsd-core/workflows/discuss-phase/templates/checkpoint.json": "e3bc3dca49db59eb",
"gsd-core/workflows/discuss-phase/templates/context.md": "9804674fccada405",
"gsd-core/workflows/discuss-phase/templates/discussion-log.md": "2b56ec2868cbddb4",
"gsd-core/workflows/do.md": "22adc4ed8589a015",
"gsd-core/workflows/do.md": "3eddf1cc9e04b685",
"gsd-core/workflows/docs-update.md": "8e986e26d0e6e1a0",
"gsd-core/workflows/edit-phase.md": "fc932e82ba1f585a",
"gsd-core/workflows/eval-review.md": "eb4040eaa5b8497f",
@@ -242,10 +243,10 @@
"gsd-core/workflows/graduation.md": "a9d8f15ba81a993f",
"gsd-core/workflows/health.md": "1ac4d567ee95acfb",
"gsd-core/workflows/help.md": "5d040504b9ab35e3",
"gsd-core/workflows/help/modes/brief.md": "2e923b3ed635d495",
"gsd-core/workflows/help/modes/default.md": "b544113eb9aa54fa",
"gsd-core/workflows/help/modes/full.md": "0e253248c1c2e063",
"gsd-core/workflows/help/modes/topic.md": "19a279fe91922d3b",
"gsd-core/workflows/help/modes/brief.md": "fa2675516b40e2e3",
"gsd-core/workflows/help/modes/default.md": "be05e56b2c5ee2c0",
"gsd-core/workflows/help/modes/full.md": "c8ffd141e28f5111",
"gsd-core/workflows/help/modes/topic.md": "0bf9ab39d7044d69",
"gsd-core/workflows/import.md": "41c62ae199209a68",
"gsd-core/workflows/inbox.md": "a448220c548f27bc",
"gsd-core/workflows/ingest-docs.md": "e2707f28f67d128b",
@@ -263,6 +264,7 @@
"gsd-core/workflows/next.md": "8beefb4335dd7c41",
"gsd-core/workflows/node-repair.md": "07a1628e5a1ff96b",
"gsd-core/workflows/note.md": "3ce09c0aa0a20599",
"gsd-core/workflows/onboard.md": "69d871aa53a1a859",
"gsd-core/workflows/pause-work.md": "564de32981a24337",
"gsd-core/workflows/plan-milestone-gaps.md": "dd6a4b3a8b05ab6e",
"gsd-core/workflows/plan-phase.md": "cb56e635fef4d3f3",
@@ -367,7 +369,7 @@
"skills/gsd-inbox/SKILL.md": "4ec0198966ac4f7d",
"skills/gsd-ingest-docs/SKILL.md": "f4e43968af317ed8",
"skills/gsd-manager/SKILL.md": "6e51785860784d8c",
"skills/gsd-map-codebase/SKILL.md": "e10431a9386c6aec",
"skills/gsd-map-codebase/SKILL.md": "552f914f43b2181c",
"skills/gsd-mempalace-capture/SKILL.md": "588ddf4fbf3ebe65",
"skills/gsd-mempalace-recall/SKILL.md": "2d95e385fee26dee",
"skills/gsd-milestone-summary/SKILL.md": "2955ab3e3a444ca3",
@@ -378,9 +380,10 @@
"skills/gsd-ns-context/SKILL.md": "e791bc60e4cf124e",
"skills/gsd-ns-ideate/SKILL.md": "b85f270e8415f595",
"skills/gsd-ns-manage/SKILL.md": "d55c53b5b0513033",
"skills/gsd-ns-project/SKILL.md": "64844073a6115c45",
"skills/gsd-ns-project/SKILL.md": "905eff81dbb98b38",
"skills/gsd-ns-review/SKILL.md": "2e30158e112d173c",
"skills/gsd-ns-workflow/SKILL.md": "529e21833a6a8831",
"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": "168046ccf9702532",

View File

@@ -62,7 +62,7 @@
"commands/gsd-inbox.md": "c218298db8b36e31",
"commands/gsd-ingest-docs.md": "6718b04c597a5428",
"commands/gsd-manager.md": "8f4ae79774902293",
"commands/gsd-map-codebase.md": "f3a06c4c7503f243",
"commands/gsd-map-codebase.md": "e4e170d4ef2d46c6",
"commands/gsd-mempalace-capture.md": "2e610f3ebe2eb5b4",
"commands/gsd-mempalace-recall.md": "38716c0983a3ef9c",
"commands/gsd-milestone-summary.md": "ff5e11e6b33d4b5e",
@@ -73,9 +73,10 @@
"commands/gsd-ns-context.md": "011c44e7aa46e64a",
"commands/gsd-ns-ideate.md": "edc5e543512dd48a",
"commands/gsd-ns-manage.md": "0409d810e499357f",
"commands/gsd-ns-project.md": "8dfd1b9a2ffe86ac",
"commands/gsd-ns-project.md": "ff67e85bc6f7fc5a",
"commands/gsd-ns-review.md": "3766ed10827882a0",
"commands/gsd-ns-workflow.md": "c3b3c046a74ec0ee",
"commands/gsd-onboard.md": "1e8acf7be31834be",
"commands/gsd-pause-work.md": "4fb032f72238fe33",
"commands/gsd-phase.md": "4920d15d779329eb",
"commands/gsd-plan-phase.md": "e74f3cb7a10cbb83",
@@ -157,6 +158,7 @@
"gsd-core/references/gates.md": "bd79c7f90c8cb8d7",
"gsd-core/references/git-integration.md": "77bf9dff38b2c9d4",
"gsd-core/references/git-planning-commit.md": "f897a15ebfc3f5a7",
"gsd-core/references/gsd-run-resolver.md": "e71eb728b84641b1",
"gsd-core/references/honest-verifier.md": "8815c9fc18c35719",
"gsd-core/references/ios-scaffold.md": "5ef0cb7e0fac891f",
"gsd-core/references/loop-hook-dispatch.md": "32e5dfb4dba76987",
@@ -242,7 +244,7 @@
"gsd-core/templates/milestone.md": "74d2f750ae9f4a9c",
"gsd-core/templates/phase-prompt.md": "b811bf951092df2f",
"gsd-core/templates/planner-subagent-prompt.md": "ebf29dbb27042370",
"gsd-core/templates/project.md": "ab4af6becca2bb23",
"gsd-core/templates/project.md": "4f311fb1b05b823b",
"gsd-core/templates/requirements.md": "a44de4c2f146e473",
"gsd-core/templates/research-project/ARCHITECTURE.md": "746b9ef791d758b0",
"gsd-core/templates/research-project/FEATURES.md": "f2b800de5df91b0f",
@@ -295,7 +297,7 @@
"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": "8f460af710c8f6a4",
"gsd-core/workflows/do.md": "7512dd1892f118a1",
"gsd-core/workflows/docs-update.md": "f35922d15b7061c9",
"gsd-core/workflows/edit-phase.md": "966a3eadd1bebc04",
"gsd-core/workflows/eval-review.md": "f898936e2cfe4130",
@@ -312,10 +314,10 @@
"gsd-core/workflows/graduation.md": "47f1594c88c08501",
"gsd-core/workflows/health.md": "107e3c72e76d9535",
"gsd-core/workflows/help.md": "5d040504b9ab35e3",
"gsd-core/workflows/help/modes/brief.md": "5fe077fbbdb5d9f7",
"gsd-core/workflows/help/modes/default.md": "cc8ef97de634c995",
"gsd-core/workflows/help/modes/full.md": "3ac1c1bb851da7a5",
"gsd-core/workflows/help/modes/topic.md": "6762e41e3291ae24",
"gsd-core/workflows/help/modes/brief.md": "924860e1f07defb0",
"gsd-core/workflows/help/modes/default.md": "08a02976c0c5cc50",
"gsd-core/workflows/help/modes/full.md": "fc307cb77544df1d",
"gsd-core/workflows/help/modes/topic.md": "5c160093f3cbf35d",
"gsd-core/workflows/import.md": "3d3fa603ceb8bc9f",
"gsd-core/workflows/inbox.md": "437f981ef9ae7b26",
"gsd-core/workflows/ingest-docs.md": "c859921c811ac11b",
@@ -333,6 +335,7 @@
"gsd-core/workflows/next.md": "13fb800f2472d970",
"gsd-core/workflows/node-repair.md": "07a1628e5a1ff96b",
"gsd-core/workflows/note.md": "5a99eb396c744619",
"gsd-core/workflows/onboard.md": "6f9e6c0b484271a9",
"gsd-core/workflows/pause-work.md": "f2b33bba5593d422",
"gsd-core/workflows/plan-milestone-gaps.md": "852f6d7c0c4299dc",
"gsd-core/workflows/plan-phase.md": "8b1209958c31ca2f",
@@ -414,7 +417,7 @@
"skills/gsd-ns-context/skills/docs-update/SKILL.md": "e7ab14a984f7462c",
"skills/gsd-ns-context/skills/extract-learnings/SKILL.md": "48846bf26ccaf0e7",
"skills/gsd-ns-context/skills/graphify/SKILL.md": "3d6341614add6ccd",
"skills/gsd-ns-context/skills/map-codebase/SKILL.md": "51d6b970dca3c28e",
"skills/gsd-ns-context/skills/map-codebase/SKILL.md": "2017007dcd69d153",
"skills/gsd-ns-context/skills/mempalace-capture/SKILL.md": "a7261b5ead71cc58",
"skills/gsd-ns-context/skills/mempalace-recall/SKILL.md": "646e59e76acd548f",
"skills/gsd-ns-ideate/SKILL.md": "d70360a5f7e8ac90",
@@ -442,7 +445,7 @@
"skills/gsd-ns-manage/skills/update/SKILL.md": "c8165b8085ba106a",
"skills/gsd-ns-manage/skills/workspace/SKILL.md": "98cc03aa8c735e9d",
"skills/gsd-ns-manage/skills/workstreams/SKILL.md": "94d00b5116523f36",
"skills/gsd-ns-project/SKILL.md": "4d7e3c3870536dc9",
"skills/gsd-ns-project/SKILL.md": "ae47130ec878de8c",
"skills/gsd-ns-project/skills/audit-milestone/SKILL.md": "6d4c77390c549fc7",
"skills/gsd-ns-project/skills/complete-milestone/SKILL.md": "0af489daf6fd3f16",
"skills/gsd-ns-project/skills/import/SKILL.md": "a3cfa7abc5ddd26d",
@@ -450,6 +453,7 @@
"skills/gsd-ns-project/skills/milestone-summary/SKILL.md": "18dc0c134cb62657",
"skills/gsd-ns-project/skills/new-milestone/SKILL.md": "a94ff34b09e17a98",
"skills/gsd-ns-project/skills/new-project/SKILL.md": "81f681f54ca61f90",
"skills/gsd-ns-project/skills/onboard/SKILL.md": "1f5b29c75a91be4f",
"skills/gsd-ns-project/skills/profile-user/SKILL.md": "68b015a40d386bff",
"skills/gsd-ns-project/skills/review-backlog/SKILL.md": "0f25310aa0cd48f6",
"skills/gsd-ns-review/SKILL.md": "d7567fd9a75a5c21",

View File

@@ -86,6 +86,7 @@
"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": "e71eb728b84641b1",
"gsd-core/references/honest-verifier.md": "8815c9fc18c35719",
"gsd-core/references/ios-scaffold.md": "5ef0cb7e0fac891f",
"gsd-core/references/loop-hook-dispatch.md": "32e5dfb4dba76987",
@@ -171,7 +172,7 @@
"gsd-core/templates/milestone.md": "74d2f750ae9f4a9c",
"gsd-core/templates/phase-prompt.md": "213ccd947451ff2b",
"gsd-core/templates/planner-subagent-prompt.md": "6c9f1b23ee3dc05f",
"gsd-core/templates/project.md": "1f687c7a88381080",
"gsd-core/templates/project.md": "ae1f68db042c2522",
"gsd-core/templates/requirements.md": "a44de4c2f146e473",
"gsd-core/templates/research-project/ARCHITECTURE.md": "746b9ef791d758b0",
"gsd-core/templates/research-project/FEATURES.md": "f2b800de5df91b0f",
@@ -224,7 +225,7 @@
"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": "56215b98e26448bc",
"gsd-core/workflows/do.md": "61b92fb4d0bf3975",
"gsd-core/workflows/docs-update.md": "63082608d3ae92be",
"gsd-core/workflows/edit-phase.md": "8323bfe10faa0c0a",
"gsd-core/workflows/eval-review.md": "f59e8329dae1e528",
@@ -241,10 +242,10 @@
"gsd-core/workflows/graduation.md": "47f1594c88c08501",
"gsd-core/workflows/health.md": "f934b1f1e9f3ae72",
"gsd-core/workflows/help.md": "5d040504b9ab35e3",
"gsd-core/workflows/help/modes/brief.md": "2e923b3ed635d495",
"gsd-core/workflows/help/modes/default.md": "b544113eb9aa54fa",
"gsd-core/workflows/help/modes/full.md": "93cbdf7e542115a1",
"gsd-core/workflows/help/modes/topic.md": "899d7168a485297f",
"gsd-core/workflows/help/modes/brief.md": "fa2675516b40e2e3",
"gsd-core/workflows/help/modes/default.md": "be05e56b2c5ee2c0",
"gsd-core/workflows/help/modes/full.md": "e2084c6766e32d6c",
"gsd-core/workflows/help/modes/topic.md": "6e42db16f1568be9",
"gsd-core/workflows/import.md": "6e8acff8c3918795",
"gsd-core/workflows/inbox.md": "91aac6360e1a8672",
"gsd-core/workflows/ingest-docs.md": "25832c784e8812e6",
@@ -262,6 +263,7 @@
"gsd-core/workflows/next.md": "ef30b829a6d5c5f6",
"gsd-core/workflows/node-repair.md": "07a1628e5a1ff96b",
"gsd-core/workflows/note.md": "42b66686b2c102cb",
"gsd-core/workflows/onboard.md": "3c50ed1f1fd07619",
"gsd-core/workflows/pause-work.md": "5716362557f44ce4",
"gsd-core/workflows/plan-milestone-gaps.md": "1b43d12812f7bc1e",
"gsd-core/workflows/plan-phase.md": "6978a15b5232b310",
@@ -366,7 +368,7 @@
"skills/gsd-inbox/SKILL.md": "d05a099c0be02c60",
"skills/gsd-ingest-docs/SKILL.md": "eb85e654917a503a",
"skills/gsd-manager/SKILL.md": "1370d93741e47828",
"skills/gsd-map-codebase/SKILL.md": "5009595dbde69739",
"skills/gsd-map-codebase/SKILL.md": "cf65e61890448285",
"skills/gsd-mempalace-capture/SKILL.md": "40a31ad049374297",
"skills/gsd-mempalace-recall/SKILL.md": "c3f412d5a64f3921",
"skills/gsd-milestone-summary/SKILL.md": "33d51a325d314f3a",
@@ -377,9 +379,10 @@
"skills/gsd-ns-context/SKILL.md": "3102e7ad9b60f182",
"skills/gsd-ns-ideate/SKILL.md": "c2c129408a046d22",
"skills/gsd-ns-manage/SKILL.md": "8d786e01fa28a7bb",
"skills/gsd-ns-project/SKILL.md": "cc0c4bd9feeab147",
"skills/gsd-ns-project/SKILL.md": "76c77b121ad68b6c",
"skills/gsd-ns-review/SKILL.md": "4111ea56e820479f",
"skills/gsd-ns-workflow/SKILL.md": "4282c40a5e6e8bbe",
"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": "0c9e87da048acfb7",

View File

@@ -90,6 +90,7 @@
"gsd-core/references/gates.md": "bd79c7f90c8cb8d7",
"gsd-core/references/git-integration.md": "f5403e1470e46e69",
"gsd-core/references/git-planning-commit.md": "f897a15ebfc3f5a7",
"gsd-core/references/gsd-run-resolver.md": "07544d9a957fc2ca",
"gsd-core/references/honest-verifier.md": "8815c9fc18c35719",
"gsd-core/references/ios-scaffold.md": "5ef0cb7e0fac891f",
"gsd-core/references/loop-hook-dispatch.md": "32e5dfb4dba76987",
@@ -175,7 +176,7 @@
"gsd-core/templates/milestone.md": "74d2f750ae9f4a9c",
"gsd-core/templates/phase-prompt.md": "b811bf951092df2f",
"gsd-core/templates/planner-subagent-prompt.md": "ebf29dbb27042370",
"gsd-core/templates/project.md": "ab4af6becca2bb23",
"gsd-core/templates/project.md": "4f311fb1b05b823b",
"gsd-core/templates/requirements.md": "a44de4c2f146e473",
"gsd-core/templates/research-project/ARCHITECTURE.md": "746b9ef791d758b0",
"gsd-core/templates/research-project/FEATURES.md": "f2b800de5df91b0f",
@@ -228,7 +229,7 @@
"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": "a35bbd09f381d940",
"gsd-core/workflows/do.md": "045a18f30efb1202",
"gsd-core/workflows/docs-update.md": "39f288623a8f6f32",
"gsd-core/workflows/edit-phase.md": "9c9fadc047c61d74",
"gsd-core/workflows/eval-review.md": "3e1d7829ed2ed494",
@@ -245,10 +246,10 @@
"gsd-core/workflows/graduation.md": "16fedecda36769eb",
"gsd-core/workflows/health.md": "788fad84fa42eb9f",
"gsd-core/workflows/help.md": "5d040504b9ab35e3",
"gsd-core/workflows/help/modes/brief.md": "5fe077fbbdb5d9f7",
"gsd-core/workflows/help/modes/default.md": "77c34f4a77dec02c",
"gsd-core/workflows/help/modes/full.md": "1bf502890828ada8",
"gsd-core/workflows/help/modes/topic.md": "6762e41e3291ae24",
"gsd-core/workflows/help/modes/brief.md": "924860e1f07defb0",
"gsd-core/workflows/help/modes/default.md": "86f7a14ad06e2f6f",
"gsd-core/workflows/help/modes/full.md": "efb266b8dbe60f51",
"gsd-core/workflows/help/modes/topic.md": "5c160093f3cbf35d",
"gsd-core/workflows/import.md": "96ec687c5cfe84ac",
"gsd-core/workflows/inbox.md": "437f981ef9ae7b26",
"gsd-core/workflows/ingest-docs.md": "7d0517356c9f2619",
@@ -266,6 +267,7 @@
"gsd-core/workflows/next.md": "3f8b61a35587a021",
"gsd-core/workflows/node-repair.md": "07a1628e5a1ff96b",
"gsd-core/workflows/note.md": "5a99eb396c744619",
"gsd-core/workflows/onboard.md": "6f9e6c0b484271a9",
"gsd-core/workflows/pause-work.md": "3530607514b0ac00",
"gsd-core/workflows/plan-milestone-gaps.md": "bafdc6945cd2bd87",
"gsd-core/workflows/plan-phase.md": "46db1a845f25a579",
@@ -325,7 +327,7 @@
"skills/gsd-ns-context/skills/docs-update/SKILL.md": "d150afd41a25ec08",
"skills/gsd-ns-context/skills/extract-learnings/SKILL.md": "d39269bea995fabc",
"skills/gsd-ns-context/skills/graphify/SKILL.md": "030050fcd08d129d",
"skills/gsd-ns-context/skills/map-codebase/SKILL.md": "19aec854da15f77b",
"skills/gsd-ns-context/skills/map-codebase/SKILL.md": "fa6a37402430af7d",
"skills/gsd-ns-context/skills/mempalace-capture/SKILL.md": "588ddf4fbf3ebe65",
"skills/gsd-ns-context/skills/mempalace-recall/SKILL.md": "2d95e385fee26dee",
"skills/gsd-ns-ideate/SKILL.md": "c10342345c01c91f",
@@ -353,7 +355,7 @@
"skills/gsd-ns-manage/skills/update/SKILL.md": "2666ab7786b69017",
"skills/gsd-ns-manage/skills/workspace/SKILL.md": "c2616b157ec2350b",
"skills/gsd-ns-manage/skills/workstreams/SKILL.md": "737841783c7fdd4f",
"skills/gsd-ns-project/SKILL.md": "5668e3a5e1d8896d",
"skills/gsd-ns-project/SKILL.md": "fac77a9e770fd655",
"skills/gsd-ns-project/skills/audit-milestone/SKILL.md": "739ed755ad84e58e",
"skills/gsd-ns-project/skills/complete-milestone/SKILL.md": "a69d534b385d6aaf",
"skills/gsd-ns-project/skills/import/SKILL.md": "bc9b615cb141d26f",
@@ -361,6 +363,7 @@
"skills/gsd-ns-project/skills/milestone-summary/SKILL.md": "e3636a5e9bbaab1f",
"skills/gsd-ns-project/skills/new-milestone/SKILL.md": "bc8989d97f3161ad",
"skills/gsd-ns-project/skills/new-project/SKILL.md": "ff0d57491df30624",
"skills/gsd-ns-project/skills/onboard/SKILL.md": "56c34282575926d4",
"skills/gsd-ns-project/skills/profile-user/SKILL.md": "0406eed4dbd9560c",
"skills/gsd-ns-project/skills/review-backlog/SKILL.md": "d8a150558cc9326a",
"skills/gsd-ns-review/SKILL.md": "c5afe33c212947dd",

View File

@@ -62,7 +62,7 @@
"commands/gsd-inbox.md": "eecfcfff57f89975",
"commands/gsd-ingest-docs.md": "ab3e58239c23d61d",
"commands/gsd-manager.md": "bfe9e261fa918876",
"commands/gsd-map-codebase.md": "9ed09a9a9ce48ffd",
"commands/gsd-map-codebase.md": "5093093d42240325",
"commands/gsd-mempalace-capture.md": "e9e00b0602e1d8b8",
"commands/gsd-mempalace-recall.md": "6efef238d8c62569",
"commands/gsd-milestone-summary.md": "e3a36fbd695a1833",
@@ -73,9 +73,10 @@
"commands/gsd-ns-context.md": "cc8954f405ae7916",
"commands/gsd-ns-ideate.md": "fd1dd80d705e6e36",
"commands/gsd-ns-manage.md": "5cc012d0be1caabb",
"commands/gsd-ns-project.md": "52e30c8d84bb1ee5",
"commands/gsd-ns-project.md": "76672fae61723e55",
"commands/gsd-ns-review.md": "a28dbfd4aba5f74b",
"commands/gsd-ns-workflow.md": "a1b874be9cf16caf",
"commands/gsd-onboard.md": "63283b90aa671229",
"commands/gsd-pause-work.md": "6caa75a7c2b4dd2d",
"commands/gsd-phase.md": "e3ca4958ea20a935",
"commands/gsd-plan-phase.md": "6de27d54ac191539",
@@ -157,6 +158,7 @@
"gsd-core/references/gates.md": "bd79c7f90c8cb8d7",
"gsd-core/references/git-integration.md": "77bf9dff38b2c9d4",
"gsd-core/references/git-planning-commit.md": "f897a15ebfc3f5a7",
"gsd-core/references/gsd-run-resolver.md": "e71eb728b84641b1",
"gsd-core/references/honest-verifier.md": "8815c9fc18c35719",
"gsd-core/references/ios-scaffold.md": "5ef0cb7e0fac891f",
"gsd-core/references/loop-hook-dispatch.md": "32e5dfb4dba76987",
@@ -242,7 +244,7 @@
"gsd-core/templates/milestone.md": "74d2f750ae9f4a9c",
"gsd-core/templates/phase-prompt.md": "b811bf951092df2f",
"gsd-core/templates/planner-subagent-prompt.md": "ebf29dbb27042370",
"gsd-core/templates/project.md": "ab4af6becca2bb23",
"gsd-core/templates/project.md": "4f311fb1b05b823b",
"gsd-core/templates/requirements.md": "a44de4c2f146e473",
"gsd-core/templates/research-project/ARCHITECTURE.md": "746b9ef791d758b0",
"gsd-core/templates/research-project/FEATURES.md": "f2b800de5df91b0f",
@@ -295,7 +297,7 @@
"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": "8f460af710c8f6a4",
"gsd-core/workflows/do.md": "7512dd1892f118a1",
"gsd-core/workflows/docs-update.md": "f35922d15b7061c9",
"gsd-core/workflows/edit-phase.md": "966a3eadd1bebc04",
"gsd-core/workflows/eval-review.md": "f898936e2cfe4130",
@@ -312,10 +314,10 @@
"gsd-core/workflows/graduation.md": "47f1594c88c08501",
"gsd-core/workflows/health.md": "107e3c72e76d9535",
"gsd-core/workflows/help.md": "5d040504b9ab35e3",
"gsd-core/workflows/help/modes/brief.md": "5fe077fbbdb5d9f7",
"gsd-core/workflows/help/modes/default.md": "cc8ef97de634c995",
"gsd-core/workflows/help/modes/full.md": "4c018bcc9ed4e55c",
"gsd-core/workflows/help/modes/topic.md": "6762e41e3291ae24",
"gsd-core/workflows/help/modes/brief.md": "924860e1f07defb0",
"gsd-core/workflows/help/modes/default.md": "08a02976c0c5cc50",
"gsd-core/workflows/help/modes/full.md": "3a19e96b69bcc33e",
"gsd-core/workflows/help/modes/topic.md": "5c160093f3cbf35d",
"gsd-core/workflows/import.md": "3d3fa603ceb8bc9f",
"gsd-core/workflows/inbox.md": "437f981ef9ae7b26",
"gsd-core/workflows/ingest-docs.md": "c859921c811ac11b",
@@ -333,6 +335,7 @@
"gsd-core/workflows/next.md": "13fb800f2472d970",
"gsd-core/workflows/node-repair.md": "07a1628e5a1ff96b",
"gsd-core/workflows/note.md": "5a99eb396c744619",
"gsd-core/workflows/onboard.md": "6f9e6c0b484271a9",
"gsd-core/workflows/pause-work.md": "f2b33bba5593d422",
"gsd-core/workflows/plan-milestone-gaps.md": "852f6d7c0c4299dc",
"gsd-core/workflows/plan-phase.md": "3e4debac4579684f",
@@ -437,7 +440,7 @@
"skills/gsd-inbox/SKILL.md": "0eb81a1b2e1835d3",
"skills/gsd-ingest-docs/SKILL.md": "2df55e0ec95d57d9",
"skills/gsd-manager/SKILL.md": "816db4d4ed618537",
"skills/gsd-map-codebase/SKILL.md": "00622b489483ba69",
"skills/gsd-map-codebase/SKILL.md": "b304ec25e9a95c93",
"skills/gsd-mempalace-capture/SKILL.md": "5f10d368835e062c",
"skills/gsd-mempalace-recall/SKILL.md": "70c8491f53f4161b",
"skills/gsd-milestone-summary/SKILL.md": "9eb030a1ac307fa1",
@@ -448,9 +451,10 @@
"skills/gsd-ns-context/SKILL.md": "305b9b6248e8cc95",
"skills/gsd-ns-ideate/SKILL.md": "c63a1aed61888b35",
"skills/gsd-ns-manage/SKILL.md": "6a5b711b5103c566",
"skills/gsd-ns-project/SKILL.md": "345ea11ccffd21b0",
"skills/gsd-ns-project/SKILL.md": "3711ce904d20ca66",
"skills/gsd-ns-review/SKILL.md": "98f1f3b3caf1a279",
"skills/gsd-ns-workflow/SKILL.md": "b77682820700300b",
"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": "6134e837750034ab",

View File

@@ -122,6 +122,7 @@
"gsd-core/references/gates.md": "11fd2bdf27df57a5",
"gsd-core/references/git-integration.md": "94715b69448bb818",
"gsd-core/references/git-planning-commit.md": "5aad099c51135a0f",
"gsd-core/references/gsd-run-resolver.md": "e71eb728b84641b1",
"gsd-core/references/honest-verifier.md": "8815c9fc18c35719",
"gsd-core/references/ios-scaffold.md": "5ef0cb7e0fac891f",
"gsd-core/references/loop-hook-dispatch.md": "32e5dfb4dba76987",
@@ -207,7 +208,7 @@
"gsd-core/templates/milestone.md": "74d2f750ae9f4a9c",
"gsd-core/templates/phase-prompt.md": "56c67fdc5d31b556",
"gsd-core/templates/planner-subagent-prompt.md": "a48a5a2ebd5a9f47",
"gsd-core/templates/project.md": "034a6501f348c5a5",
"gsd-core/templates/project.md": "c6005bd88a346a3e",
"gsd-core/templates/requirements.md": "a44de4c2f146e473",
"gsd-core/templates/research-project/ARCHITECTURE.md": "746b9ef791d758b0",
"gsd-core/templates/research-project/FEATURES.md": "f2b800de5df91b0f",
@@ -260,7 +261,7 @@
"gsd-core/workflows/discuss-phase/templates/checkpoint.json": "e3bc3dca49db59eb",
"gsd-core/workflows/discuss-phase/templates/context.md": "9804674fccada405",
"gsd-core/workflows/discuss-phase/templates/discussion-log.md": "2b56ec2868cbddb4",
"gsd-core/workflows/do.md": "8f3e77a9486bc57b",
"gsd-core/workflows/do.md": "feec00355f896a3d",
"gsd-core/workflows/docs-update.md": "e255317df939e302",
"gsd-core/workflows/edit-phase.md": "e592a4d85ce5380f",
"gsd-core/workflows/eval-review.md": "63d0d0670b54c244",
@@ -277,10 +278,10 @@
"gsd-core/workflows/graduation.md": "47f1594c88c08501",
"gsd-core/workflows/health.md": "5b835fc606fd3e9b",
"gsd-core/workflows/help.md": "08e1349950c5602a",
"gsd-core/workflows/help/modes/brief.md": "becceb85b25dca89",
"gsd-core/workflows/help/modes/default.md": "18c7dc50066f5cd6",
"gsd-core/workflows/help/modes/full.md": "8a7854a34df89bd8",
"gsd-core/workflows/help/modes/topic.md": "303613ba8b123b9f",
"gsd-core/workflows/help/modes/brief.md": "da44b130d1afe556",
"gsd-core/workflows/help/modes/default.md": "4bb3082d28026eea",
"gsd-core/workflows/help/modes/full.md": "01a1ec54df54da6e",
"gsd-core/workflows/help/modes/topic.md": "b7c7e4a8800bc3ea",
"gsd-core/workflows/import.md": "cb3c8f9d09edb434",
"gsd-core/workflows/inbox.md": "61b8b10e7a74b2e9",
"gsd-core/workflows/ingest-docs.md": "3cb763e0687d7ffa",
@@ -298,6 +299,7 @@
"gsd-core/workflows/next.md": "7097a9607a981086",
"gsd-core/workflows/node-repair.md": "07a1628e5a1ff96b",
"gsd-core/workflows/note.md": "664da466ab989f9d",
"gsd-core/workflows/onboard.md": "83c40ba7055b8b24",
"gsd-core/workflows/pause-work.md": "a217770ecafcb2e0",
"gsd-core/workflows/plan-milestone-gaps.md": "73d46f77c50a0690",
"gsd-core/workflows/plan-phase.md": "89ee3233c1aee273",
@@ -382,7 +384,7 @@
"skills/gsd-inbox/SKILL.md": "1315033595643485",
"skills/gsd-ingest-docs/SKILL.md": "5bd2838bf0b6dc1b",
"skills/gsd-manager/SKILL.md": "cb1cf56f5d3f66d6",
"skills/gsd-map-codebase/SKILL.md": "25d0b3adfc8b75dc",
"skills/gsd-map-codebase/SKILL.md": "cd27dc028718426b",
"skills/gsd-mempalace-capture/SKILL.md": "1a7fac4d53f607ab",
"skills/gsd-mempalace-recall/SKILL.md": "7205b02250e89f25",
"skills/gsd-milestone-summary/SKILL.md": "af84ecb400f23556",
@@ -393,9 +395,10 @@
"skills/gsd-ns-context/SKILL.md": "9b496da79789b3f9",
"skills/gsd-ns-ideate/SKILL.md": "84ca1cde06110981",
"skills/gsd-ns-manage/SKILL.md": "909dafa0cd19ba5a",
"skills/gsd-ns-project/SKILL.md": "fb8ad6c2223be3c3",
"skills/gsd-ns-project/SKILL.md": "936b6998d42520ac",
"skills/gsd-ns-review/SKILL.md": "022253010db0e072",
"skills/gsd-ns-workflow/SKILL.md": "cba075bc819b539e",
"skills/gsd-onboard/SKILL.md": "f42fc2edebeda671",
"skills/gsd-pause-work/SKILL.md": "b379469eed78a196",
"skills/gsd-phase/SKILL.md": "25477edc97a90c91",
"skills/gsd-plan-phase/SKILL.md": "19ead1acb151a868",

View File

@@ -88,6 +88,7 @@
"gsd-core/references/gates.md": "7dc9fd3a3d6217c6",
"gsd-core/references/git-integration.md": "657a93c539c16cab",
"gsd-core/references/git-planning-commit.md": "f897a15ebfc3f5a7",
"gsd-core/references/gsd-run-resolver.md": "fca7e30efb0afe3f",
"gsd-core/references/honest-verifier.md": "08b1e82f59c18078",
"gsd-core/references/ios-scaffold.md": "5ef0cb7e0fac891f",
"gsd-core/references/loop-hook-dispatch.md": "32e5dfb4dba76987",
@@ -173,7 +174,7 @@
"gsd-core/templates/milestone.md": "74d2f750ae9f4a9c",
"gsd-core/templates/phase-prompt.md": "e2b07376944c84e8",
"gsd-core/templates/planner-subagent-prompt.md": "6c9f1b23ee3dc05f",
"gsd-core/templates/project.md": "e4a3b331be081e62",
"gsd-core/templates/project.md": "fae14114f2b79b10",
"gsd-core/templates/requirements.md": "a44de4c2f146e473",
"gsd-core/templates/research-project/ARCHITECTURE.md": "746b9ef791d758b0",
"gsd-core/templates/research-project/FEATURES.md": "f2b800de5df91b0f",
@@ -226,7 +227,7 @@
"gsd-core/workflows/discuss-phase/templates/checkpoint.json": "e3bc3dca49db59eb",
"gsd-core/workflows/discuss-phase/templates/context.md": "9804674fccada405",
"gsd-core/workflows/discuss-phase/templates/discussion-log.md": "2b56ec2868cbddb4",
"gsd-core/workflows/do.md": "988a20dab90c60c5",
"gsd-core/workflows/do.md": "9b46119803df09a6",
"gsd-core/workflows/docs-update.md": "9292cfa3c52c434e",
"gsd-core/workflows/edit-phase.md": "8667c28b22b1599f",
"gsd-core/workflows/eval-review.md": "81c8e72ba3862856",
@@ -243,10 +244,10 @@
"gsd-core/workflows/graduation.md": "f013efc29096faf0",
"gsd-core/workflows/health.md": "f343fd32a0e398e4",
"gsd-core/workflows/help.md": "5d040504b9ab35e3",
"gsd-core/workflows/help/modes/brief.md": "2e923b3ed635d495",
"gsd-core/workflows/help/modes/default.md": "b544113eb9aa54fa",
"gsd-core/workflows/help/modes/full.md": "0e9381367d6257bd",
"gsd-core/workflows/help/modes/topic.md": "19a279fe91922d3b",
"gsd-core/workflows/help/modes/brief.md": "fa2675516b40e2e3",
"gsd-core/workflows/help/modes/default.md": "be05e56b2c5ee2c0",
"gsd-core/workflows/help/modes/full.md": "ce88d4eb6b301e09",
"gsd-core/workflows/help/modes/topic.md": "0bf9ab39d7044d69",
"gsd-core/workflows/import.md": "f4fa65e332b00f7e",
"gsd-core/workflows/inbox.md": "a448220c548f27bc",
"gsd-core/workflows/ingest-docs.md": "52be14d1a0713731",
@@ -264,6 +265,7 @@
"gsd-core/workflows/next.md": "81c08abb34b2da88",
"gsd-core/workflows/node-repair.md": "07a1628e5a1ff96b",
"gsd-core/workflows/note.md": "4a5ee74cf2fc1f54",
"gsd-core/workflows/onboard.md": "a62602c6f3fd538a",
"gsd-core/workflows/pause-work.md": "9ce66367be6c40db",
"gsd-core/workflows/plan-milestone-gaps.md": "5cf589802d08bdf3",
"gsd-core/workflows/plan-phase.md": "da462f812d1d0e61",
@@ -347,7 +349,7 @@
"skills/gsd-inbox/SKILL.md": "cb9ed3865b67c04f",
"skills/gsd-ingest-docs/SKILL.md": "10500de29525f6cf",
"skills/gsd-manager/SKILL.md": "9946975bec15e737",
"skills/gsd-map-codebase/SKILL.md": "75806f8189d8af49",
"skills/gsd-map-codebase/SKILL.md": "39e7fd6bcc561f9d",
"skills/gsd-mempalace-capture/SKILL.md": "f4511f69c14befb7",
"skills/gsd-mempalace-recall/SKILL.md": "89523db66f834b2f",
"skills/gsd-milestone-summary/SKILL.md": "5ca1dabfe0cd85f0",
@@ -358,9 +360,10 @@
"skills/gsd-ns-context/SKILL.md": "d61edde87ae53105",
"skills/gsd-ns-ideate/SKILL.md": "ca62cdf78ebe3585",
"skills/gsd-ns-manage/SKILL.md": "9b1b7f6d9b877fcd",
"skills/gsd-ns-project/SKILL.md": "f1a666fb76527e6b",
"skills/gsd-ns-project/SKILL.md": "597b8dde8702c22d",
"skills/gsd-ns-review/SKILL.md": "6405d0b1cf3f245d",
"skills/gsd-ns-workflow/SKILL.md": "243287d21663ba87",
"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": "d257bb9b1786039d",

View File

@@ -62,7 +62,7 @@
"commands/gsd-inbox.md": "e6bcee3f863d20db",
"commands/gsd-ingest-docs.md": "9e7f8757b9408c01",
"commands/gsd-manager.md": "f300b708a5487c76",
"commands/gsd-map-codebase.md": "cf50f4a600119c8a",
"commands/gsd-map-codebase.md": "12f705917eb202fb",
"commands/gsd-mempalace-capture.md": "b30bce634ac3136c",
"commands/gsd-mempalace-recall.md": "08c910285469a394",
"commands/gsd-milestone-summary.md": "adfad2cf43fc5aad",
@@ -73,9 +73,10 @@
"commands/gsd-ns-context.md": "b551dcc549c6a23f",
"commands/gsd-ns-ideate.md": "32f561de74b1bc7b",
"commands/gsd-ns-manage.md": "24445a84bd817c5b",
"commands/gsd-ns-project.md": "b39b509ac4161d28",
"commands/gsd-ns-project.md": "525f84d73f5c51e9",
"commands/gsd-ns-review.md": "c8550463fbab5e76",
"commands/gsd-ns-workflow.md": "2c1f1fde3c46bb40",
"commands/gsd-onboard.md": "d9e52f558fc2b90f",
"commands/gsd-pause-work.md": "59630f05f95fff68",
"commands/gsd-phase.md": "9a073dcd0f934f90",
"commands/gsd-plan-phase.md": "57de92131fcb16b8",
@@ -157,6 +158,7 @@
"gsd-core/references/gates.md": "7dc9fd3a3d6217c6",
"gsd-core/references/git-integration.md": "9840f521ad6612b5",
"gsd-core/references/git-planning-commit.md": "f897a15ebfc3f5a7",
"gsd-core/references/gsd-run-resolver.md": "e71eb728b84641b1",
"gsd-core/references/honest-verifier.md": "8815c9fc18c35719",
"gsd-core/references/ios-scaffold.md": "5ef0cb7e0fac891f",
"gsd-core/references/loop-hook-dispatch.md": "32e5dfb4dba76987",
@@ -242,7 +244,7 @@
"gsd-core/templates/milestone.md": "74d2f750ae9f4a9c",
"gsd-core/templates/phase-prompt.md": "213ccd947451ff2b",
"gsd-core/templates/planner-subagent-prompt.md": "6c9f1b23ee3dc05f",
"gsd-core/templates/project.md": "1f687c7a88381080",
"gsd-core/templates/project.md": "ae1f68db042c2522",
"gsd-core/templates/requirements.md": "a44de4c2f146e473",
"gsd-core/templates/research-project/ARCHITECTURE.md": "746b9ef791d758b0",
"gsd-core/templates/research-project/FEATURES.md": "f2b800de5df91b0f",
@@ -295,7 +297,7 @@
"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": "cd5d01c9ef84ab73",
"gsd-core/workflows/do.md": "dc0ddd1f8231d26b",
"gsd-core/workflows/do.md": "9da6a73980ef2a71",
"gsd-core/workflows/docs-update.md": "e86d7d7e2e3dac6d",
"gsd-core/workflows/edit-phase.md": "8323bfe10faa0c0a",
"gsd-core/workflows/eval-review.md": "a86279dd98dd5c03",
@@ -312,10 +314,10 @@
"gsd-core/workflows/graduation.md": "53a4a6fa3b4e6613",
"gsd-core/workflows/health.md": "e4d770484b5e7496",
"gsd-core/workflows/help.md": "08e1349950c5602a",
"gsd-core/workflows/help/modes/brief.md": "2e923b3ed635d495",
"gsd-core/workflows/help/modes/default.md": "37c5149aae232e61",
"gsd-core/workflows/help/modes/full.md": "ed31d1afcbd3591f",
"gsd-core/workflows/help/modes/topic.md": "177d351f7465787d",
"gsd-core/workflows/help/modes/brief.md": "fa2675516b40e2e3",
"gsd-core/workflows/help/modes/default.md": "b88ff431fffe40ae",
"gsd-core/workflows/help/modes/full.md": "a7a42d4340e8e00b",
"gsd-core/workflows/help/modes/topic.md": "cee80e0adfa3b06c",
"gsd-core/workflows/import.md": "5d5fb8e51f6a243a",
"gsd-core/workflows/inbox.md": "797c287852eb8957",
"gsd-core/workflows/ingest-docs.md": "c6759dbf17e79293",
@@ -333,6 +335,7 @@
"gsd-core/workflows/next.md": "174356dcfd7c6c32",
"gsd-core/workflows/node-repair.md": "07a1628e5a1ff96b",
"gsd-core/workflows/note.md": "1c1e466c764e3deb",
"gsd-core/workflows/onboard.md": "20c28136423d40ac",
"gsd-core/workflows/pause-work.md": "5716362557f44ce4",
"gsd-core/workflows/plan-milestone-gaps.md": "1b43d12812f7bc1e",
"gsd-core/workflows/plan-phase.md": "c90c001a92fc8a47",
@@ -417,7 +420,7 @@
"skills/gsd-inbox/SKILL.md": "f9b4ff17883ee7e4",
"skills/gsd-ingest-docs/SKILL.md": "01ed9183a00252ee",
"skills/gsd-manager/SKILL.md": "62cd9f671a39e8a4",
"skills/gsd-map-codebase/SKILL.md": "f529da27d3a30b09",
"skills/gsd-map-codebase/SKILL.md": "383559aca64201e8",
"skills/gsd-mempalace-capture/SKILL.md": "b308823dee547c65",
"skills/gsd-mempalace-recall/SKILL.md": "56f3037091a8bd9a",
"skills/gsd-milestone-summary/SKILL.md": "c5dbbc8edb97a7f7",
@@ -428,9 +431,10 @@
"skills/gsd-ns-context/SKILL.md": "dcf5711653d57354",
"skills/gsd-ns-ideate/SKILL.md": "0114f0bc5501c1e3",
"skills/gsd-ns-manage/SKILL.md": "f3232d05d5263f5b",
"skills/gsd-ns-project/SKILL.md": "9f737a544e8d3f31",
"skills/gsd-ns-project/SKILL.md": "81d802dd3ee2e1ff",
"skills/gsd-ns-review/SKILL.md": "8c686e92f293bfdd",
"skills/gsd-ns-workflow/SKILL.md": "c379192bd17d47d7",
"skills/gsd-onboard/SKILL.md": "cae1f9382469fa00",
"skills/gsd-pause-work/SKILL.md": "10e7531a2cb392ad",
"skills/gsd-phase/SKILL.md": "1a2c9b64c1af7ffc",
"skills/gsd-plan-phase/SKILL.md": "0784da05d41dcfe7",

View File

@@ -87,6 +87,7 @@
"gsd-core/references/gates.md": "7dc9fd3a3d6217c6",
"gsd-core/references/git-integration.md": "12d23fcbaa7fcf06",
"gsd-core/references/git-planning-commit.md": "f897a15ebfc3f5a7",
"gsd-core/references/gsd-run-resolver.md": "769d1472c989cd54",
"gsd-core/references/honest-verifier.md": "8815c9fc18c35719",
"gsd-core/references/ios-scaffold.md": "5ef0cb7e0fac891f",
"gsd-core/references/loop-hook-dispatch.md": "32e5dfb4dba76987",
@@ -172,7 +173,7 @@
"gsd-core/templates/milestone.md": "74d2f750ae9f4a9c",
"gsd-core/templates/phase-prompt.md": "213ccd947451ff2b",
"gsd-core/templates/planner-subagent-prompt.md": "6c9f1b23ee3dc05f",
"gsd-core/templates/project.md": "1f687c7a88381080",
"gsd-core/templates/project.md": "ae1f68db042c2522",
"gsd-core/templates/requirements.md": "a44de4c2f146e473",
"gsd-core/templates/research-project/ARCHITECTURE.md": "746b9ef791d758b0",
"gsd-core/templates/research-project/FEATURES.md": "f2b800de5df91b0f",
@@ -225,7 +226,7 @@
"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": "045e70c238db6faf",
"gsd-core/workflows/do.md": "e37540cc874fb782",
"gsd-core/workflows/docs-update.md": "4d6c06e611d83b6d",
"gsd-core/workflows/edit-phase.md": "7f27003f20e88fb8",
"gsd-core/workflows/eval-review.md": "f510e5762212dc6f",
@@ -242,10 +243,10 @@
"gsd-core/workflows/graduation.md": "d1fd52bbe41dcf34",
"gsd-core/workflows/health.md": "c622a5ad0d347d30",
"gsd-core/workflows/help.md": "5d040504b9ab35e3",
"gsd-core/workflows/help/modes/brief.md": "2e923b3ed635d495",
"gsd-core/workflows/help/modes/default.md": "bb6876c976996dbd",
"gsd-core/workflows/help/modes/full.md": "fdab4b3690bdd11d",
"gsd-core/workflows/help/modes/topic.md": "899d7168a485297f",
"gsd-core/workflows/help/modes/brief.md": "fa2675516b40e2e3",
"gsd-core/workflows/help/modes/default.md": "8874dac94eb68ae6",
"gsd-core/workflows/help/modes/full.md": "62779da88565d65a",
"gsd-core/workflows/help/modes/topic.md": "6e42db16f1568be9",
"gsd-core/workflows/import.md": "a441445515bc2dd5",
"gsd-core/workflows/inbox.md": "91aac6360e1a8672",
"gsd-core/workflows/ingest-docs.md": "ad496a4c423f1ab7",
@@ -263,6 +264,7 @@
"gsd-core/workflows/next.md": "8e1fa29751d96564",
"gsd-core/workflows/node-repair.md": "07a1628e5a1ff96b",
"gsd-core/workflows/note.md": "42b66686b2c102cb",
"gsd-core/workflows/onboard.md": "3c50ed1f1fd07619",
"gsd-core/workflows/pause-work.md": "ae2d5789a95f70fe",
"gsd-core/workflows/plan-milestone-gaps.md": "c86cdc1964256b98",
"gsd-core/workflows/plan-phase.md": "e995429805b69fdc",
@@ -345,7 +347,7 @@
"skills/gsd/gsd-ns-context/skills/docs-update/SKILL.md": "b059b3045d5daf5c",
"skills/gsd/gsd-ns-context/skills/extract-learnings/SKILL.md": "36e59d6e514dcaf0",
"skills/gsd/gsd-ns-context/skills/graphify/SKILL.md": "169eefd42c444cde",
"skills/gsd/gsd-ns-context/skills/map-codebase/SKILL.md": "6062ccca1a14b827",
"skills/gsd/gsd-ns-context/skills/map-codebase/SKILL.md": "9d36eee52586bb34",
"skills/gsd/gsd-ns-context/skills/mempalace-capture/SKILL.md": "3fa619f73834c436",
"skills/gsd/gsd-ns-context/skills/mempalace-recall/SKILL.md": "5d06922e0d7ab7d9",
"skills/gsd/gsd-ns-ideate/SKILL.md": "b36bb4700ed6723a",
@@ -373,7 +375,7 @@
"skills/gsd/gsd-ns-manage/skills/update/SKILL.md": "433a236998c305b0",
"skills/gsd/gsd-ns-manage/skills/workspace/SKILL.md": "d655afc6f16565ed",
"skills/gsd/gsd-ns-manage/skills/workstreams/SKILL.md": "6893312eaf14dab0",
"skills/gsd/gsd-ns-project/SKILL.md": "3ff43fdc0e4a6d02",
"skills/gsd/gsd-ns-project/SKILL.md": "6b3af15e7c4441c9",
"skills/gsd/gsd-ns-project/skills/audit-milestone/SKILL.md": "de0556f07d899e50",
"skills/gsd/gsd-ns-project/skills/complete-milestone/SKILL.md": "180cccc09bf99444",
"skills/gsd/gsd-ns-project/skills/import/SKILL.md": "bf781c7a0d83c2cd",
@@ -381,6 +383,7 @@
"skills/gsd/gsd-ns-project/skills/milestone-summary/SKILL.md": "c4bda5737f1137f8",
"skills/gsd/gsd-ns-project/skills/new-milestone/SKILL.md": "47586c1fc8aa0645",
"skills/gsd/gsd-ns-project/skills/new-project/SKILL.md": "8f22ba75717b3c88",
"skills/gsd/gsd-ns-project/skills/onboard/SKILL.md": "1d8d06ac1f27dacd",
"skills/gsd/gsd-ns-project/skills/profile-user/SKILL.md": "5a8e01bc7b873a20",
"skills/gsd/gsd-ns-project/skills/review-backlog/SKILL.md": "f3ef97da4e9b1d4c",
"skills/gsd/gsd-ns-review/SKILL.md": "23fbadeca640e2bd",

View File

@@ -62,7 +62,7 @@
"command/gsd-inbox.md": "1429fc7f556337c3",
"command/gsd-ingest-docs.md": "e655ecf1d4433ba9",
"command/gsd-manager.md": "1cdc133079833552",
"command/gsd-map-codebase.md": "186c8f79319abc1c",
"command/gsd-map-codebase.md": "704cb63214f51523",
"command/gsd-mempalace-capture.md": "a94ca275cbe7134c",
"command/gsd-mempalace-recall.md": "d358cdd89c935877",
"command/gsd-milestone-summary.md": "4ab29b777f62f0bb",
@@ -73,9 +73,10 @@
"command/gsd-ns-context.md": "9a2b55b64f2e1e4b",
"command/gsd-ns-ideate.md": "27e7fcdc69eeeb5f",
"command/gsd-ns-manage.md": "eded59052ca4b240",
"command/gsd-ns-project.md": "91417cf7b76581dd",
"command/gsd-ns-project.md": "c56395edb9bc7467",
"command/gsd-ns-review.md": "61fe33e28eb1b961",
"command/gsd-ns-workflow.md": "13c1ab91080c0cc3",
"command/gsd-onboard.md": "3e87a21c9c04f0d7",
"command/gsd-pause-work.md": "04e993b1c9f8322b",
"command/gsd-phase.md": "8f0e98dc6c223229",
"command/gsd-plan-phase.md": "b37e9a61f946c975",
@@ -157,6 +158,7 @@
"gsd-core/references/gates.md": "7dc9fd3a3d6217c6",
"gsd-core/references/git-integration.md": "fbdf814a3af9c051",
"gsd-core/references/git-planning-commit.md": "f897a15ebfc3f5a7",
"gsd-core/references/gsd-run-resolver.md": "e71eb728b84641b1",
"gsd-core/references/honest-verifier.md": "8815c9fc18c35719",
"gsd-core/references/ios-scaffold.md": "5ef0cb7e0fac891f",
"gsd-core/references/loop-hook-dispatch.md": "32e5dfb4dba76987",
@@ -242,7 +244,7 @@
"gsd-core/templates/milestone.md": "74d2f750ae9f4a9c",
"gsd-core/templates/phase-prompt.md": "2e6fd96c2cc26470",
"gsd-core/templates/planner-subagent-prompt.md": "6c9f1b23ee3dc05f",
"gsd-core/templates/project.md": "e4a3b331be081e62",
"gsd-core/templates/project.md": "fae14114f2b79b10",
"gsd-core/templates/requirements.md": "a44de4c2f146e473",
"gsd-core/templates/research-project/ARCHITECTURE.md": "746b9ef791d758b0",
"gsd-core/templates/research-project/FEATURES.md": "f2b800de5df91b0f",
@@ -295,7 +297,7 @@
"gsd-core/workflows/discuss-phase/templates/checkpoint.json": "e3bc3dca49db59eb",
"gsd-core/workflows/discuss-phase/templates/context.md": "9804674fccada405",
"gsd-core/workflows/discuss-phase/templates/discussion-log.md": "04e4feee14772275",
"gsd-core/workflows/do.md": "1e6102574016b150",
"gsd-core/workflows/do.md": "d9a889717e390f8d",
"gsd-core/workflows/docs-update.md": "79afaaf19fd527cc",
"gsd-core/workflows/edit-phase.md": "8323bfe10faa0c0a",
"gsd-core/workflows/eval-review.md": "926eda8bbee28b23",
@@ -312,10 +314,10 @@
"gsd-core/workflows/graduation.md": "5cc8638dabcbfd40",
"gsd-core/workflows/health.md": "064b3668d5d9569a",
"gsd-core/workflows/help.md": "5d040504b9ab35e3",
"gsd-core/workflows/help/modes/brief.md": "2e923b3ed635d495",
"gsd-core/workflows/help/modes/default.md": "b544113eb9aa54fa",
"gsd-core/workflows/help/modes/full.md": "051f9633f45558b4",
"gsd-core/workflows/help/modes/topic.md": "19a279fe91922d3b",
"gsd-core/workflows/help/modes/brief.md": "fa2675516b40e2e3",
"gsd-core/workflows/help/modes/default.md": "be05e56b2c5ee2c0",
"gsd-core/workflows/help/modes/full.md": "775f766dfafb72f9",
"gsd-core/workflows/help/modes/topic.md": "0bf9ab39d7044d69",
"gsd-core/workflows/import.md": "f8bbe6f2c0e08a78",
"gsd-core/workflows/inbox.md": "a073396097c89c01",
"gsd-core/workflows/ingest-docs.md": "29c1fe28bc93b345",
@@ -333,6 +335,7 @@
"gsd-core/workflows/next.md": "888297a0b21888ea",
"gsd-core/workflows/node-repair.md": "07a1628e5a1ff96b",
"gsd-core/workflows/note.md": "f8c2842a2217f776",
"gsd-core/workflows/onboard.md": "78b288089305dc46",
"gsd-core/workflows/pause-work.md": "a6e5336c409fdc8b",
"gsd-core/workflows/plan-milestone-gaps.md": "1b43d12812f7bc1e",
"gsd-core/workflows/plan-phase.md": "03e59f06885e200f",
@@ -438,7 +441,7 @@
"skills/gsd-inbox/SKILL.md": "34370c6138415209",
"skills/gsd-ingest-docs/SKILL.md": "f049f06a6ec7da43",
"skills/gsd-manager/SKILL.md": "a37ecdbe32952262",
"skills/gsd-map-codebase/SKILL.md": "e8c01704e8ada1d2",
"skills/gsd-map-codebase/SKILL.md": "e06d6ac1b7632cbe",
"skills/gsd-mempalace-capture/SKILL.md": "f960b7b1a8fdf89b",
"skills/gsd-mempalace-recall/SKILL.md": "2091c48e6e986e28",
"skills/gsd-milestone-summary/SKILL.md": "da645171ca2299d8",
@@ -449,9 +452,10 @@
"skills/gsd-ns-context/SKILL.md": "110fb2227bcde535",
"skills/gsd-ns-ideate/SKILL.md": "d093d59a8519decc",
"skills/gsd-ns-manage/SKILL.md": "2756981de613022e",
"skills/gsd-ns-project/SKILL.md": "757976d48e8b7a26",
"skills/gsd-ns-project/SKILL.md": "56d3d8a321d267f8",
"skills/gsd-ns-review/SKILL.md": "680bdd33c882b049",
"skills/gsd-ns-workflow/SKILL.md": "579b7f0dac74e1fb",
"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": "c73cba04a26f0bfe",

View File

@@ -123,6 +123,7 @@
"gsd-core/references/gates.md": "bd79c7f90c8cb8d7",
"gsd-core/references/git-integration.md": "77bf9dff38b2c9d4",
"gsd-core/references/git-planning-commit.md": "f897a15ebfc3f5a7",
"gsd-core/references/gsd-run-resolver.md": "e71eb728b84641b1",
"gsd-core/references/honest-verifier.md": "8815c9fc18c35719",
"gsd-core/references/ios-scaffold.md": "5ef0cb7e0fac891f",
"gsd-core/references/loop-hook-dispatch.md": "32e5dfb4dba76987",
@@ -208,7 +209,7 @@
"gsd-core/templates/milestone.md": "74d2f750ae9f4a9c",
"gsd-core/templates/phase-prompt.md": "b811bf951092df2f",
"gsd-core/templates/planner-subagent-prompt.md": "ebf29dbb27042370",
"gsd-core/templates/project.md": "ab4af6becca2bb23",
"gsd-core/templates/project.md": "4f311fb1b05b823b",
"gsd-core/templates/requirements.md": "a44de4c2f146e473",
"gsd-core/templates/research-project/ARCHITECTURE.md": "746b9ef791d758b0",
"gsd-core/templates/research-project/FEATURES.md": "f2b800de5df91b0f",
@@ -261,7 +262,7 @@
"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": "8f460af710c8f6a4",
"gsd-core/workflows/do.md": "7512dd1892f118a1",
"gsd-core/workflows/docs-update.md": "f35922d15b7061c9",
"gsd-core/workflows/edit-phase.md": "966a3eadd1bebc04",
"gsd-core/workflows/eval-review.md": "f898936e2cfe4130",
@@ -278,10 +279,10 @@
"gsd-core/workflows/graduation.md": "47f1594c88c08501",
"gsd-core/workflows/health.md": "107e3c72e76d9535",
"gsd-core/workflows/help.md": "5d040504b9ab35e3",
"gsd-core/workflows/help/modes/brief.md": "5fe077fbbdb5d9f7",
"gsd-core/workflows/help/modes/default.md": "cc8ef97de634c995",
"gsd-core/workflows/help/modes/full.md": "94c18706768e5a41",
"gsd-core/workflows/help/modes/topic.md": "6762e41e3291ae24",
"gsd-core/workflows/help/modes/brief.md": "924860e1f07defb0",
"gsd-core/workflows/help/modes/default.md": "08a02976c0c5cc50",
"gsd-core/workflows/help/modes/full.md": "ee47582c5d8d94a7",
"gsd-core/workflows/help/modes/topic.md": "5c160093f3cbf35d",
"gsd-core/workflows/import.md": "3d3fa603ceb8bc9f",
"gsd-core/workflows/inbox.md": "437f981ef9ae7b26",
"gsd-core/workflows/ingest-docs.md": "c859921c811ac11b",
@@ -299,6 +300,7 @@
"gsd-core/workflows/next.md": "13fb800f2472d970",
"gsd-core/workflows/node-repair.md": "07a1628e5a1ff96b",
"gsd-core/workflows/note.md": "5a99eb396c744619",
"gsd-core/workflows/onboard.md": "6f9e6c0b484271a9",
"gsd-core/workflows/pause-work.md": "f2b33bba5593d422",
"gsd-core/workflows/plan-milestone-gaps.md": "852f6d7c0c4299dc",
"gsd-core/workflows/plan-phase.md": "2f16f3cc05fc59f1",
@@ -381,7 +383,7 @@
"skills/gsd-inbox/SKILL.md": "955779a4b1df1c33",
"skills/gsd-ingest-docs/SKILL.md": "6366644e623ae9e4",
"skills/gsd-manager/SKILL.md": "8a11a1beb8e35a9c",
"skills/gsd-map-codebase/SKILL.md": "55dade835b0f4954",
"skills/gsd-map-codebase/SKILL.md": "73ab0afb2398de2c",
"skills/gsd-mempalace-capture/SKILL.md": "64a2ec493092d26e",
"skills/gsd-mempalace-recall/SKILL.md": "c6e0195e55cd934c",
"skills/gsd-milestone-summary/SKILL.md": "3ea93ccaa0d4d967",
@@ -392,9 +394,10 @@
"skills/gsd-ns-context/SKILL.md": "89f5bffe6702c0c5",
"skills/gsd-ns-ideate/SKILL.md": "e0c0420f6878906a",
"skills/gsd-ns-manage/SKILL.md": "b7fbe29e45e75f54",
"skills/gsd-ns-project/SKILL.md": "1292d4a6a4280ce9",
"skills/gsd-ns-project/SKILL.md": "fcb8a93ade9ecc72",
"skills/gsd-ns-review/SKILL.md": "2ff62330379f947f",
"skills/gsd-ns-workflow/SKILL.md": "86272fd655c206bc",
"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": "54798eddf30056b5",

View File

@@ -62,7 +62,7 @@
"command/gsd-inbox.md": "cc850bab897aed1f",
"command/gsd-ingest-docs.md": "b47c812c247e58a4",
"command/gsd-manager.md": "86ece154b34b6d1b",
"command/gsd-map-codebase.md": "1fb678f8a17a380e",
"command/gsd-map-codebase.md": "9aba6b4eed565912",
"command/gsd-mempalace-capture.md": "a94ca275cbe7134c",
"command/gsd-mempalace-recall.md": "d358cdd89c935877",
"command/gsd-milestone-summary.md": "86a827271bc647c5",
@@ -73,9 +73,10 @@
"command/gsd-ns-context.md": "9a2b55b64f2e1e4b",
"command/gsd-ns-ideate.md": "27e7fcdc69eeeb5f",
"command/gsd-ns-manage.md": "eded59052ca4b240",
"command/gsd-ns-project.md": "91417cf7b76581dd",
"command/gsd-ns-project.md": "c56395edb9bc7467",
"command/gsd-ns-review.md": "61fe33e28eb1b961",
"command/gsd-ns-workflow.md": "13c1ab91080c0cc3",
"command/gsd-onboard.md": "3aafaeb5d3941efe",
"command/gsd-pause-work.md": "bb5bf91a2e3e480e",
"command/gsd-phase.md": "6bcda1539f949d5a",
"command/gsd-plan-phase.md": "7ee44086b59862b9",
@@ -157,6 +158,7 @@
"gsd-core/references/gates.md": "7dc9fd3a3d6217c6",
"gsd-core/references/git-integration.md": "fbdf814a3af9c051",
"gsd-core/references/git-planning-commit.md": "f897a15ebfc3f5a7",
"gsd-core/references/gsd-run-resolver.md": "4e5af9905e4276e4",
"gsd-core/references/honest-verifier.md": "b67482409f896a10",
"gsd-core/references/ios-scaffold.md": "5ef0cb7e0fac891f",
"gsd-core/references/loop-hook-dispatch.md": "32e5dfb4dba76987",
@@ -242,7 +244,7 @@
"gsd-core/templates/milestone.md": "74d2f750ae9f4a9c",
"gsd-core/templates/phase-prompt.md": "ee8880432b4d1566",
"gsd-core/templates/planner-subagent-prompt.md": "6c9f1b23ee3dc05f",
"gsd-core/templates/project.md": "e4a3b331be081e62",
"gsd-core/templates/project.md": "fae14114f2b79b10",
"gsd-core/templates/requirements.md": "a44de4c2f146e473",
"gsd-core/templates/research-project/ARCHITECTURE.md": "746b9ef791d758b0",
"gsd-core/templates/research-project/FEATURES.md": "f2b800de5df91b0f",
@@ -295,7 +297,7 @@
"gsd-core/workflows/discuss-phase/templates/checkpoint.json": "e3bc3dca49db59eb",
"gsd-core/workflows/discuss-phase/templates/context.md": "9804674fccada405",
"gsd-core/workflows/discuss-phase/templates/discussion-log.md": "04e4feee14772275",
"gsd-core/workflows/do.md": "d72e76d9050b53f3",
"gsd-core/workflows/do.md": "85c4c8cb7aa8af87",
"gsd-core/workflows/docs-update.md": "850366c2ef8fb780",
"gsd-core/workflows/edit-phase.md": "1876c855fb0a0a39",
"gsd-core/workflows/eval-review.md": "5394694d29ad7543",
@@ -312,10 +314,10 @@
"gsd-core/workflows/graduation.md": "13080b5c24eec27d",
"gsd-core/workflows/health.md": "a91e0a8e5d20b2e9",
"gsd-core/workflows/help.md": "5d040504b9ab35e3",
"gsd-core/workflows/help/modes/brief.md": "2e923b3ed635d495",
"gsd-core/workflows/help/modes/default.md": "b544113eb9aa54fa",
"gsd-core/workflows/help/modes/full.md": "604993c20f4e4b20",
"gsd-core/workflows/help/modes/topic.md": "19a279fe91922d3b",
"gsd-core/workflows/help/modes/brief.md": "fa2675516b40e2e3",
"gsd-core/workflows/help/modes/default.md": "be05e56b2c5ee2c0",
"gsd-core/workflows/help/modes/full.md": "35598c0ed5f7356f",
"gsd-core/workflows/help/modes/topic.md": "0bf9ab39d7044d69",
"gsd-core/workflows/import.md": "67fbf389ab8e57b4",
"gsd-core/workflows/inbox.md": "a073396097c89c01",
"gsd-core/workflows/ingest-docs.md": "82370f93c45c8015",
@@ -333,6 +335,7 @@
"gsd-core/workflows/next.md": "6719a37b8ce2ac4f",
"gsd-core/workflows/node-repair.md": "07a1628e5a1ff96b",
"gsd-core/workflows/note.md": "0d1374f2a2257858",
"gsd-core/workflows/onboard.md": "102556e1715c01b9",
"gsd-core/workflows/pause-work.md": "70c72beca55c080a",
"gsd-core/workflows/plan-milestone-gaps.md": "0a9dacd422cd9533",
"gsd-core/workflows/plan-phase.md": "3c49d9f4061b2388",
@@ -439,7 +442,7 @@
"skills/gsd-inbox/SKILL.md": "3b2dd319d91dbab4",
"skills/gsd-ingest-docs/SKILL.md": "8f294b4894f782a5",
"skills/gsd-manager/SKILL.md": "cf40f237b4f20aa7",
"skills/gsd-map-codebase/SKILL.md": "6d74ea41e29ff035",
"skills/gsd-map-codebase/SKILL.md": "73f714297815f74c",
"skills/gsd-mempalace-capture/SKILL.md": "f960b7b1a8fdf89b",
"skills/gsd-mempalace-recall/SKILL.md": "2091c48e6e986e28",
"skills/gsd-milestone-summary/SKILL.md": "175366bb500b5e64",
@@ -450,9 +453,10 @@
"skills/gsd-ns-context/SKILL.md": "110fb2227bcde535",
"skills/gsd-ns-ideate/SKILL.md": "d093d59a8519decc",
"skills/gsd-ns-manage/SKILL.md": "2756981de613022e",
"skills/gsd-ns-project/SKILL.md": "757976d48e8b7a26",
"skills/gsd-ns-project/SKILL.md": "56d3d8a321d267f8",
"skills/gsd-ns-review/SKILL.md": "680bdd33c882b049",
"skills/gsd-ns-workflow/SKILL.md": "579b7f0dac74e1fb",
"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": "6abcc3a1568a6bb9",

View File

@@ -87,6 +87,7 @@
"gsd-core/references/gates.md": "7dc9fd3a3d6217c6",
"gsd-core/references/git-integration.md": "bd249d9024c39c0d",
"gsd-core/references/git-planning-commit.md": "f897a15ebfc3f5a7",
"gsd-core/references/gsd-run-resolver.md": "10575c928ff9230d",
"gsd-core/references/honest-verifier.md": "8815c9fc18c35719",
"gsd-core/references/ios-scaffold.md": "5ef0cb7e0fac891f",
"gsd-core/references/loop-hook-dispatch.md": "32e5dfb4dba76987",
@@ -172,7 +173,7 @@
"gsd-core/templates/milestone.md": "74d2f750ae9f4a9c",
"gsd-core/templates/phase-prompt.md": "213ccd947451ff2b",
"gsd-core/templates/planner-subagent-prompt.md": "6c9f1b23ee3dc05f",
"gsd-core/templates/project.md": "1f687c7a88381080",
"gsd-core/templates/project.md": "ae1f68db042c2522",
"gsd-core/templates/requirements.md": "a44de4c2f146e473",
"gsd-core/templates/research-project/ARCHITECTURE.md": "746b9ef791d758b0",
"gsd-core/templates/research-project/FEATURES.md": "f2b800de5df91b0f",
@@ -225,7 +226,7 @@
"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": "35862ba1f7230247",
"gsd-core/workflows/do.md": "68f2607de614157d",
"gsd-core/workflows/docs-update.md": "45d2f0d173c84e07",
"gsd-core/workflows/edit-phase.md": "0fb5e0123cfc6f36",
"gsd-core/workflows/eval-review.md": "6dee8a1e40ececd4",
@@ -242,10 +243,10 @@
"gsd-core/workflows/graduation.md": "40401655435beee3",
"gsd-core/workflows/health.md": "043de14edb6a9723",
"gsd-core/workflows/help.md": "5d040504b9ab35e3",
"gsd-core/workflows/help/modes/brief.md": "2e923b3ed635d495",
"gsd-core/workflows/help/modes/default.md": "cef457f954a9991e",
"gsd-core/workflows/help/modes/full.md": "1e1e826ba1da0bc5",
"gsd-core/workflows/help/modes/topic.md": "899d7168a485297f",
"gsd-core/workflows/help/modes/brief.md": "fa2675516b40e2e3",
"gsd-core/workflows/help/modes/default.md": "7ca77077085452f5",
"gsd-core/workflows/help/modes/full.md": "00c1433a639f6ed8",
"gsd-core/workflows/help/modes/topic.md": "6e42db16f1568be9",
"gsd-core/workflows/import.md": "e56c18a984396066",
"gsd-core/workflows/inbox.md": "91aac6360e1a8672",
"gsd-core/workflows/ingest-docs.md": "f291310a8a89dbd8",
@@ -263,6 +264,7 @@
"gsd-core/workflows/next.md": "c13515a80c20d37d",
"gsd-core/workflows/node-repair.md": "07a1628e5a1ff96b",
"gsd-core/workflows/note.md": "42b66686b2c102cb",
"gsd-core/workflows/onboard.md": "3c50ed1f1fd07619",
"gsd-core/workflows/pause-work.md": "be33f84dc1d4822f",
"gsd-core/workflows/plan-milestone-gaps.md": "d98e98486123eb97",
"gsd-core/workflows/plan-phase.md": "1cac08591d361397",
@@ -344,7 +346,7 @@
"skills/gsd-ns-context/skills/docs-update/SKILL.md": "3d41e81ec571de60",
"skills/gsd-ns-context/skills/extract-learnings/SKILL.md": "8d38e55e5f8b774b",
"skills/gsd-ns-context/skills/graphify/SKILL.md": "ac3661e6e576188b",
"skills/gsd-ns-context/skills/map-codebase/SKILL.md": "5009595dbde69739",
"skills/gsd-ns-context/skills/map-codebase/SKILL.md": "cf65e61890448285",
"skills/gsd-ns-context/skills/mempalace-capture/SKILL.md": "40a31ad049374297",
"skills/gsd-ns-context/skills/mempalace-recall/SKILL.md": "c3f412d5a64f3921",
"skills/gsd-ns-ideate/SKILL.md": "4a0d2691054b23e5",
@@ -372,7 +374,7 @@
"skills/gsd-ns-manage/skills/update/SKILL.md": "530b4206d729b56d",
"skills/gsd-ns-manage/skills/workspace/SKILL.md": "047c3f4247bc869e",
"skills/gsd-ns-manage/skills/workstreams/SKILL.md": "f4e54cb9b1ca0442",
"skills/gsd-ns-project/SKILL.md": "a58b3170197968be",
"skills/gsd-ns-project/SKILL.md": "5d7ec93b195555e7",
"skills/gsd-ns-project/skills/audit-milestone/SKILL.md": "edb6a0cc6305d724",
"skills/gsd-ns-project/skills/complete-milestone/SKILL.md": "f6799a5a713be7bb",
"skills/gsd-ns-project/skills/import/SKILL.md": "88f83921a85e536b",
@@ -380,6 +382,7 @@
"skills/gsd-ns-project/skills/milestone-summary/SKILL.md": "33d51a325d314f3a",
"skills/gsd-ns-project/skills/new-milestone/SKILL.md": "ac99ffb8a966fe9d",
"skills/gsd-ns-project/skills/new-project/SKILL.md": "9d5c27ebfa2c4746",
"skills/gsd-ns-project/skills/onboard/SKILL.md": "46460b479b7524bf",
"skills/gsd-ns-project/skills/profile-user/SKILL.md": "78ca46045e85223f",
"skills/gsd-ns-project/skills/review-backlog/SKILL.md": "1708aab6cb919223",
"skills/gsd-ns-review/SKILL.md": "7badceb8627d8154",

View File

@@ -87,6 +87,7 @@
"gsd-core/references/gates.md": "7dc9fd3a3d6217c6",
"gsd-core/references/git-integration.md": "1bd40c3f94d712b1",
"gsd-core/references/git-planning-commit.md": "f897a15ebfc3f5a7",
"gsd-core/references/gsd-run-resolver.md": "0534754c2758352a",
"gsd-core/references/honest-verifier.md": "8815c9fc18c35719",
"gsd-core/references/ios-scaffold.md": "5ef0cb7e0fac891f",
"gsd-core/references/loop-hook-dispatch.md": "32e5dfb4dba76987",
@@ -172,7 +173,7 @@
"gsd-core/templates/milestone.md": "74d2f750ae9f4a9c",
"gsd-core/templates/phase-prompt.md": "213ccd947451ff2b",
"gsd-core/templates/planner-subagent-prompt.md": "6c9f1b23ee3dc05f",
"gsd-core/templates/project.md": "1f687c7a88381080",
"gsd-core/templates/project.md": "ae1f68db042c2522",
"gsd-core/templates/requirements.md": "a44de4c2f146e473",
"gsd-core/templates/research-project/ARCHITECTURE.md": "746b9ef791d758b0",
"gsd-core/templates/research-project/FEATURES.md": "f2b800de5df91b0f",
@@ -225,7 +226,7 @@
"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": "f3328dbd4416f11a",
"gsd-core/workflows/do.md": "5131e8796ba9d99b",
"gsd-core/workflows/docs-update.md": "f13571f08e083356",
"gsd-core/workflows/edit-phase.md": "7facd0faa33c8cad",
"gsd-core/workflows/eval-review.md": "37d545d4f0db4927",
@@ -242,10 +243,10 @@
"gsd-core/workflows/graduation.md": "1ca877cda258a5de",
"gsd-core/workflows/health.md": "1f9fd2deea45896f",
"gsd-core/workflows/help.md": "08e1349950c5602a",
"gsd-core/workflows/help/modes/brief.md": "2e923b3ed635d495",
"gsd-core/workflows/help/modes/default.md": "1b3c315342701265",
"gsd-core/workflows/help/modes/full.md": "62c71f57f047999b",
"gsd-core/workflows/help/modes/topic.md": "229e3f3d85bda04b",
"gsd-core/workflows/help/modes/brief.md": "fa2675516b40e2e3",
"gsd-core/workflows/help/modes/default.md": "ed7368e0d1b8644a",
"gsd-core/workflows/help/modes/full.md": "b3287aa383806758",
"gsd-core/workflows/help/modes/topic.md": "8a5344e56fa64ab9",
"gsd-core/workflows/import.md": "31af58468db15daf",
"gsd-core/workflows/inbox.md": "e9ea37b2d46dc5b4",
"gsd-core/workflows/ingest-docs.md": "fba176ad3cc22f5f",
@@ -263,6 +264,7 @@
"gsd-core/workflows/next.md": "2163195861877de5",
"gsd-core/workflows/node-repair.md": "07a1628e5a1ff96b",
"gsd-core/workflows/note.md": "acc9130fb1e94f0b",
"gsd-core/workflows/onboard.md": "61f111302af0f404",
"gsd-core/workflows/pause-work.md": "c20d267e28ce92f0",
"gsd-core/workflows/plan-milestone-gaps.md": "26db7b9329b7ddc8",
"gsd-core/workflows/plan-phase.md": "fc7d25c0649e2fdf",
@@ -322,7 +324,7 @@
"skills/gsd-ns-context/skills/docs-update/SKILL.md": "52755343585b987b",
"skills/gsd-ns-context/skills/extract-learnings/SKILL.md": "d39269bea995fabc",
"skills/gsd-ns-context/skills/graphify/SKILL.md": "e0253aef14693a7e",
"skills/gsd-ns-context/skills/map-codebase/SKILL.md": "0910348701b1fc65",
"skills/gsd-ns-context/skills/map-codebase/SKILL.md": "2982436d8652f172",
"skills/gsd-ns-context/skills/mempalace-capture/SKILL.md": "36c486f14abe869a",
"skills/gsd-ns-context/skills/mempalace-recall/SKILL.md": "2d95e385fee26dee",
"skills/gsd-ns-ideate/SKILL.md": "c10342345c01c91f",
@@ -350,7 +352,7 @@
"skills/gsd-ns-manage/skills/update/SKILL.md": "2fc47bf059aa7b38",
"skills/gsd-ns-manage/skills/workspace/SKILL.md": "257d17b9d20274d8",
"skills/gsd-ns-manage/skills/workstreams/SKILL.md": "737841783c7fdd4f",
"skills/gsd-ns-project/SKILL.md": "5668e3a5e1d8896d",
"skills/gsd-ns-project/SKILL.md": "fac77a9e770fd655",
"skills/gsd-ns-project/skills/audit-milestone/SKILL.md": "0ccabc5556d65d56",
"skills/gsd-ns-project/skills/complete-milestone/SKILL.md": "a69d534b385d6aaf",
"skills/gsd-ns-project/skills/import/SKILL.md": "a11e630bfd8ae4de",
@@ -358,6 +360,7 @@
"skills/gsd-ns-project/skills/milestone-summary/SKILL.md": "9d408f56712ba948",
"skills/gsd-ns-project/skills/new-milestone/SKILL.md": "7cbc011130e8590c",
"skills/gsd-ns-project/skills/new-project/SKILL.md": "ff0d57491df30624",
"skills/gsd-ns-project/skills/onboard/SKILL.md": "ae4c7b799d9ffb09",
"skills/gsd-ns-project/skills/profile-user/SKILL.md": "4f526120cda2f6cc",
"skills/gsd-ns-project/skills/review-backlog/SKILL.md": "d8a150558cc9326a",
"skills/gsd-ns-review/SKILL.md": "c5afe33c212947dd",

View File

@@ -87,6 +87,7 @@
"gsd-core/references/gates.md": "7dc9fd3a3d6217c6",
"gsd-core/references/git-integration.md": "6ec36ea6b868655f",
"gsd-core/references/git-planning-commit.md": "f897a15ebfc3f5a7",
"gsd-core/references/gsd-run-resolver.md": "1bb6a410d6ebfb33",
"gsd-core/references/honest-verifier.md": "8815c9fc18c35719",
"gsd-core/references/ios-scaffold.md": "5ef0cb7e0fac891f",
"gsd-core/references/loop-hook-dispatch.md": "32e5dfb4dba76987",
@@ -172,7 +173,7 @@
"gsd-core/templates/milestone.md": "74d2f750ae9f4a9c",
"gsd-core/templates/phase-prompt.md": "213ccd947451ff2b",
"gsd-core/templates/planner-subagent-prompt.md": "6c9f1b23ee3dc05f",
"gsd-core/templates/project.md": "1f687c7a88381080",
"gsd-core/templates/project.md": "ae1f68db042c2522",
"gsd-core/templates/requirements.md": "a44de4c2f146e473",
"gsd-core/templates/research-project/ARCHITECTURE.md": "746b9ef791d758b0",
"gsd-core/templates/research-project/FEATURES.md": "f2b800de5df91b0f",
@@ -225,7 +226,7 @@
"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": "cd5d01c9ef84ab73",
"gsd-core/workflows/do.md": "a7ff800fdab468c7",
"gsd-core/workflows/do.md": "e2b848547e43c7a5",
"gsd-core/workflows/docs-update.md": "70f73cc8c27e0ca0",
"gsd-core/workflows/edit-phase.md": "c0ae7d0063f3e789",
"gsd-core/workflows/eval-review.md": "b28be79ef29f16fd",
@@ -242,10 +243,10 @@
"gsd-core/workflows/graduation.md": "a766039ff6ca653f",
"gsd-core/workflows/health.md": "7b19d6e2c0357c3e",
"gsd-core/workflows/help.md": "08e1349950c5602a",
"gsd-core/workflows/help/modes/brief.md": "2e923b3ed635d495",
"gsd-core/workflows/help/modes/default.md": "91509fe03bad9795",
"gsd-core/workflows/help/modes/full.md": "4c1a43f7095647e1",
"gsd-core/workflows/help/modes/topic.md": "177d351f7465787d",
"gsd-core/workflows/help/modes/brief.md": "fa2675516b40e2e3",
"gsd-core/workflows/help/modes/default.md": "6a253f1756f74e95",
"gsd-core/workflows/help/modes/full.md": "0cd464dcd077bbfc",
"gsd-core/workflows/help/modes/topic.md": "cee80e0adfa3b06c",
"gsd-core/workflows/import.md": "029cacf530aca86b",
"gsd-core/workflows/inbox.md": "797c287852eb8957",
"gsd-core/workflows/ingest-docs.md": "78ba04ca39f28e8d",
@@ -263,6 +264,7 @@
"gsd-core/workflows/next.md": "d48cea140a5153cb",
"gsd-core/workflows/node-repair.md": "07a1628e5a1ff96b",
"gsd-core/workflows/note.md": "1c1e466c764e3deb",
"gsd-core/workflows/onboard.md": "20c28136423d40ac",
"gsd-core/workflows/pause-work.md": "93fcc1c845da6396",
"gsd-core/workflows/plan-milestone-gaps.md": "7880866ee1caf923",
"gsd-core/workflows/plan-phase.md": "3e143f39514f8192",

View File

@@ -62,7 +62,7 @@
"commands/gsd-inbox.md": "da55c1408a6ee6cc",
"commands/gsd-ingest-docs.md": "7a3c21ae5d5d133a",
"commands/gsd-manager.md": "9f54653a7c589b00",
"commands/gsd-map-codebase.md": "8b605921868c03a3",
"commands/gsd-map-codebase.md": "709e9572953accc6",
"commands/gsd-mempalace-capture.md": "5d4556e444acbb90",
"commands/gsd-mempalace-recall.md": "5ac67fa4b7f2b03b",
"commands/gsd-milestone-summary.md": "f8fa9c357c08b74b",
@@ -73,9 +73,10 @@
"commands/gsd-ns-context.md": "011c44e7aa46e64a",
"commands/gsd-ns-ideate.md": "edc5e543512dd48a",
"commands/gsd-ns-manage.md": "0409d810e499357f",
"commands/gsd-ns-project.md": "8dfd1b9a2ffe86ac",
"commands/gsd-ns-project.md": "ff67e85bc6f7fc5a",
"commands/gsd-ns-review.md": "3766ed10827882a0",
"commands/gsd-ns-workflow.md": "c3b3c046a74ec0ee",
"commands/gsd-onboard.md": "a35340ce39334fc7",
"commands/gsd-pause-work.md": "40a953fcddbedb5d",
"commands/gsd-phase.md": "5dd3d40e3461a973",
"commands/gsd-plan-phase.md": "2fb6cc9c4caa6a36",
@@ -157,6 +158,7 @@
"gsd-core/references/gates.md": "bd79c7f90c8cb8d7",
"gsd-core/references/git-integration.md": "77bf9dff38b2c9d4",
"gsd-core/references/git-planning-commit.md": "f897a15ebfc3f5a7",
"gsd-core/references/gsd-run-resolver.md": "e71eb728b84641b1",
"gsd-core/references/honest-verifier.md": "8815c9fc18c35719",
"gsd-core/references/ios-scaffold.md": "5ef0cb7e0fac891f",
"gsd-core/references/loop-hook-dispatch.md": "32e5dfb4dba76987",
@@ -242,7 +244,7 @@
"gsd-core/templates/milestone.md": "74d2f750ae9f4a9c",
"gsd-core/templates/phase-prompt.md": "b811bf951092df2f",
"gsd-core/templates/planner-subagent-prompt.md": "ebf29dbb27042370",
"gsd-core/templates/project.md": "ab4af6becca2bb23",
"gsd-core/templates/project.md": "4f311fb1b05b823b",
"gsd-core/templates/requirements.md": "a44de4c2f146e473",
"gsd-core/templates/research-project/ARCHITECTURE.md": "746b9ef791d758b0",
"gsd-core/templates/research-project/FEATURES.md": "f2b800de5df91b0f",
@@ -295,7 +297,7 @@
"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": "8f460af710c8f6a4",
"gsd-core/workflows/do.md": "7512dd1892f118a1",
"gsd-core/workflows/docs-update.md": "f35922d15b7061c9",
"gsd-core/workflows/edit-phase.md": "966a3eadd1bebc04",
"gsd-core/workflows/eval-review.md": "f898936e2cfe4130",
@@ -312,10 +314,10 @@
"gsd-core/workflows/graduation.md": "47f1594c88c08501",
"gsd-core/workflows/health.md": "107e3c72e76d9535",
"gsd-core/workflows/help.md": "5d040504b9ab35e3",
"gsd-core/workflows/help/modes/brief.md": "5fe077fbbdb5d9f7",
"gsd-core/workflows/help/modes/default.md": "cc8ef97de634c995",
"gsd-core/workflows/help/modes/full.md": "96abbac7f3f10e32",
"gsd-core/workflows/help/modes/topic.md": "6762e41e3291ae24",
"gsd-core/workflows/help/modes/brief.md": "924860e1f07defb0",
"gsd-core/workflows/help/modes/default.md": "08a02976c0c5cc50",
"gsd-core/workflows/help/modes/full.md": "895b35f264530d24",
"gsd-core/workflows/help/modes/topic.md": "5c160093f3cbf35d",
"gsd-core/workflows/import.md": "3d3fa603ceb8bc9f",
"gsd-core/workflows/inbox.md": "437f981ef9ae7b26",
"gsd-core/workflows/ingest-docs.md": "c859921c811ac11b",
@@ -333,6 +335,7 @@
"gsd-core/workflows/next.md": "13fb800f2472d970",
"gsd-core/workflows/node-repair.md": "07a1628e5a1ff96b",
"gsd-core/workflows/note.md": "5a99eb396c744619",
"gsd-core/workflows/onboard.md": "6f9e6c0b484271a9",
"gsd-core/workflows/pause-work.md": "f2b33bba5593d422",
"gsd-core/workflows/plan-milestone-gaps.md": "852f6d7c0c4299dc",
"gsd-core/workflows/plan-phase.md": "a886ba9bdf4d0baf",
@@ -414,7 +417,7 @@
"skills/gsd-ns-context/skills/docs-update/SKILL.md": "8fb602920a333d73",
"skills/gsd-ns-context/skills/extract-learnings/SKILL.md": "6de7eeaaf4939e5d",
"skills/gsd-ns-context/skills/graphify/SKILL.md": "d54c2b44e8059299",
"skills/gsd-ns-context/skills/map-codebase/SKILL.md": "ce7f2382e4086b68",
"skills/gsd-ns-context/skills/map-codebase/SKILL.md": "f48d48b43e2cc4bd",
"skills/gsd-ns-context/skills/mempalace-capture/SKILL.md": "40a31ad049374297",
"skills/gsd-ns-context/skills/mempalace-recall/SKILL.md": "c3f412d5a64f3921",
"skills/gsd-ns-ideate/SKILL.md": "4a0d2691054b23e5",
@@ -442,7 +445,7 @@
"skills/gsd-ns-manage/skills/update/SKILL.md": "01ca0efbdb8f6efa",
"skills/gsd-ns-manage/skills/workspace/SKILL.md": "c6c07625a373e6a3",
"skills/gsd-ns-manage/skills/workstreams/SKILL.md": "f4e54cb9b1ca0442",
"skills/gsd-ns-project/SKILL.md": "a58b3170197968be",
"skills/gsd-ns-project/SKILL.md": "5d7ec93b195555e7",
"skills/gsd-ns-project/skills/audit-milestone/SKILL.md": "a6eb7edcfd23c7e4",
"skills/gsd-ns-project/skills/complete-milestone/SKILL.md": "d7f6202222d1b26e",
"skills/gsd-ns-project/skills/import/SKILL.md": "0a734021e0b86481",
@@ -450,6 +453,7 @@
"skills/gsd-ns-project/skills/milestone-summary/SKILL.md": "c77f6c8ce7c57db9",
"skills/gsd-ns-project/skills/new-milestone/SKILL.md": "3aad804c48d77474",
"skills/gsd-ns-project/skills/new-project/SKILL.md": "e3cfd1fdbc2c3406",
"skills/gsd-ns-project/skills/onboard/SKILL.md": "84519552f7396347",
"skills/gsd-ns-project/skills/profile-user/SKILL.md": "f57ad5e5c5899100",
"skills/gsd-ns-project/skills/review-backlog/SKILL.md": "1708aab6cb919223",
"skills/gsd-ns-review/SKILL.md": "7badceb8627d8154",

View File

@@ -1599,6 +1599,9 @@ describe('cmdInitNewProject', () => {
test('brownfield with codebase map does not need map', () => {
fs.writeFileSync(path.join(tmpDir, 'package.json'), '{"name":"test"}');
fs.mkdirSync(path.join(tmpDir, '.planning', 'codebase'), { recursive: true });
for (const name of ['STACK', 'ARCHITECTURE', 'STRUCTURE', 'CONVENTIONS', 'TESTING', 'INTEGRATIONS', 'CONCERNS']) {
fs.writeFileSync(path.join(tmpDir, '.planning', 'codebase', `${name}.md`), `# ${name}\n`);
}
const result = runGsdTools('init new-project', tmpDir);
assert.ok(result.success, `Command failed: ${result.error}`);

View File

@@ -0,0 +1,483 @@
// allow-test-rule: source-text-is-the-product (see #1990)
// Command/workflow markdown is deployed runtime product; source-text assertions
// below verify the installed command contract. CLI assertions exercise real
// gsd-tools behavior through the public command boundary.
const { describe, test, beforeEach, afterEach } = require('node:test');
const assert = require('node:assert/strict');
const fs = require('fs');
const path = require('path');
const { runGsdTools, cleanup } = require('./helpers.cjs');
const { createFixture } = require('./fixtures/index.cjs');
const ROOT = path.join(__dirname, '..');
const CMD_PATH = path.join(ROOT, 'commands', 'gsd', 'onboard.md');
const WF_PATH = path.join(ROOT, 'gsd-core', 'workflows', 'onboard.md');
describe('init onboard public CLI projection', () => {
let tmpDir;
beforeEach(() => {
tmpDir = createFixture({ planning: false, projectDoc: false });
});
afterEach(() => {
cleanup(tmpDir);
});
test('reports brownfield code, docs, and missing planning state', () => {
fs.mkdirSync(path.join(tmpDir, 'src'), { recursive: true });
fs.writeFileSync(path.join(tmpDir, 'src', 'server.ts'), 'export const server = true;\n');
fs.mkdirSync(path.join(tmpDir, 'docs', 'adr'), { recursive: true });
fs.writeFileSync(path.join(tmpDir, 'docs', 'adr', '0001-runtime.md'), '# ADR: Runtime\n');
const result = runGsdTools('init onboard --raw', tmpDir, { HOME: tmpDir });
assert.ok(result.success, `init onboard should succeed: ${result.error}`);
const parsed = JSON.parse(result.output);
assert.strictEqual(parsed.planning_exists, false);
assert.strictEqual(parsed.project_exists, false);
assert.strictEqual(parsed.has_existing_code, true);
assert.strictEqual(parsed.has_codebase_map, false);
assert.strictEqual(parsed.has_docs_candidates, true);
assert.strictEqual(parsed.doc_candidate_count, 1);
assert.deepStrictEqual(parsed.codebase_map_files_present, []);
assert.ok(parsed.doc_candidates.includes('docs/adr/0001-runtime.md'));
for (const file of ['STACK.md', 'ARCHITECTURE.md', 'STRUCTURE.md', 'CONVENTIONS.md', 'TESTING.md', 'INTEGRATIONS.md', 'CONCERNS.md']) {
assert.ok(parsed.missing_codebase_map_files.includes(file), `missing map files should include ${file}`);
}
assert.strictEqual(parsed.onboarding_summary_exists, false);
assert.strictEqual(parsed.text_mode, false);
});
test('detects planning docs in top-level ADR, PRD, and RFC folders', () => {
fs.mkdirSync(path.join(tmpDir, 'prd'), { recursive: true });
fs.writeFileSync(path.join(tmpDir, 'prd', 'product.md'), '# Product Requirements\n');
fs.mkdirSync(path.join(tmpDir, 'adr'), { recursive: true });
fs.writeFileSync(path.join(tmpDir, 'adr', 'decision.md'), '# Architecture Decision\n');
fs.mkdirSync(path.join(tmpDir, 'rfc'), { recursive: true });
fs.writeFileSync(path.join(tmpDir, 'rfc', 'proposal.md'), '# Request for Comments\n');
const result = runGsdTools('init onboard --raw', tmpDir, { HOME: tmpDir });
assert.ok(result.success, `init onboard should succeed: ${result.error}`);
const parsed = JSON.parse(result.output);
assert.strictEqual(parsed.has_docs_candidates, true);
assert.strictEqual(parsed.doc_candidate_count, 3);
assert.deepStrictEqual(parsed.doc_candidates, [
'adr/decision.md',
'prd/product.md',
'rfc/proposal.md',
]);
});
test('detects root-level planning docs without broad repo scan', () => {
fs.writeFileSync(path.join(tmpDir, 'PRD.md'), '# Product Requirements\n');
fs.writeFileSync(path.join(tmpDir, 'SPEC.md'), '# Specification\n');
fs.writeFileSync(path.join(tmpDir, 'RFC.md'), '# Request for Comments\n');
fs.writeFileSync(path.join(tmpDir, 'ADR.md'), '# Architecture Decision\n');
fs.writeFileSync(path.join(tmpDir, 'REQUIREMENTS.md'), '# Requirements\n');
fs.writeFileSync(path.join(tmpDir, '0001-decision.md'), '# Decision\n');
fs.mkdirSync(path.join(tmpDir, 'src'), { recursive: true });
fs.writeFileSync(path.join(tmpDir, 'src', 'PRD.md'), '# Nested Product Requirements\n');
const result = runGsdTools('init onboard --raw', tmpDir, { HOME: tmpDir });
assert.ok(result.success, `init onboard should succeed: ${result.error}`);
const parsed = JSON.parse(result.output);
assert.strictEqual(parsed.has_docs_candidates, true);
assert.strictEqual(parsed.doc_candidate_count, 6);
assert.deepStrictEqual(parsed.doc_candidates, [
'0001-decision.md',
'ADR.md',
'PRD.md',
'REQUIREMENTS.md',
'RFC.md',
'SPEC.md',
]);
});
test('forwards the --text flag into the public projection', () => {
const result = runGsdTools(['init', 'onboard', '--text', '--raw'], tmpDir, { HOME: tmpDir });
assert.ok(result.success, `init onboard should succeed: ${result.error}`);
const parsed = JSON.parse(result.output);
assert.strictEqual(parsed.text_mode, true);
});
test('reports complete codebase map and onboarding summary in existing planning', () => {
fs.mkdirSync(path.join(tmpDir, '.planning', 'codebase'), { recursive: true });
for (const name of ['STACK', 'ARCHITECTURE', 'STRUCTURE', 'CONVENTIONS', 'TESTING', 'INTEGRATIONS', 'CONCERNS']) {
fs.writeFileSync(path.join(tmpDir, '.planning', 'codebase', `${name}.md`), `# ${name}\n`);
}
fs.mkdirSync(path.join(tmpDir, '.planning', 'onboarding'), { recursive: true });
fs.writeFileSync(path.join(tmpDir, '.planning', 'onboarding', 'SUMMARY.md'), '# Onboarding Summary\n');
fs.writeFileSync(path.join(tmpDir, '.planning', 'PROJECT.md'), '# Project\n');
fs.writeFileSync(path.join(tmpDir, '.planning', 'REQUIREMENTS.md'), '# Requirements\n');
fs.writeFileSync(path.join(tmpDir, '.planning', 'ROADMAP.md'), '# Roadmap\n');
fs.writeFileSync(path.join(tmpDir, '.planning', 'STATE.md'), '# State\n');
fs.writeFileSync(path.join(tmpDir, '.planning', 'config.json'), JSON.stringify({ workflow: { text_mode: true } }));
const trackedFiles = [
path.join(tmpDir, '.planning', 'PROJECT.md'),
path.join(tmpDir, '.planning', 'ROADMAP.md'),
path.join(tmpDir, '.planning', 'STATE.md'),
path.join(tmpDir, '.planning', 'onboarding', 'SUMMARY.md'),
];
const before = new Map(trackedFiles.map(file => [file, fs.readFileSync(file, 'utf8')]));
const result = runGsdTools('init onboard --raw', tmpDir, { HOME: tmpDir });
assert.ok(result.success, `init onboard should succeed: ${result.error}`);
for (const file of trackedFiles) {
assert.strictEqual(fs.readFileSync(file, 'utf8'), before.get(file), `${path.basename(file)} must not be mutated by init onboard`);
}
const parsed = JSON.parse(result.output);
assert.strictEqual(parsed.planning_exists, true);
assert.strictEqual(parsed.project_exists, true);
assert.strictEqual(parsed.requirements_exists, true);
assert.strictEqual(parsed.roadmap_exists, true);
assert.strictEqual(parsed.state_exists, true);
assert.strictEqual(parsed.has_codebase_map, true);
assert.deepStrictEqual(parsed.missing_codebase_map_files, []);
assert.strictEqual(parsed.onboarding_summary_exists, true);
assert.strictEqual(parsed.onboarding_summary_path, '.planning/onboarding/SUMMARY.md');
assert.strictEqual(parsed.text_mode, true);
});
test('reports fast codebase map readiness and a complete-map handoff before new-project', () => {
fs.mkdirSync(path.join(tmpDir, '.planning', 'codebase'), { recursive: true });
for (const name of ['STACK', 'INTEGRATIONS', 'ARCHITECTURE', 'STRUCTURE']) {
fs.writeFileSync(path.join(tmpDir, '.planning', 'codebase', `${name}.md`), `# ${name}\n`);
}
fs.writeFileSync(path.join(tmpDir, 'package.json'), '{"name":"fixture"}\n');
const result = runGsdTools(['init', 'onboard', '--fast', '--raw'], tmpDir, { HOME: tmpDir });
assert.ok(result.success, `init onboard should succeed: ${result.error}`);
const parsed = JSON.parse(result.output);
assert.strictEqual(parsed.map_readiness, 'fast');
assert.strictEqual(parsed.has_codebase_map, false);
assert.strictEqual(parsed.has_fast_codebase_map, true);
assert.strictEqual(parsed.needs_codebase_map, true);
assert.strictEqual(parsed.needs_fast_codebase_map, false);
assert.strictEqual(parsed.next_action.kind, 'complete-map-before-new-project');
assert.strictEqual(parsed.next_action.command, '/gsd-map-codebase');
assert.match(parsed.next_action.reason, /complete codebase map/i);
assert.deepStrictEqual(parsed.fast_codebase_map_files_required, [
'STACK.md',
'INTEGRATIONS.md',
'ARCHITECTURE.md',
'STRUCTURE.md',
]);
assert.deepStrictEqual(parsed.missing_fast_codebase_map_files, []);
});
test('routes fast mapped repositories with planning docs to complete map before ingest', () => {
fs.mkdirSync(path.join(tmpDir, '.planning', 'codebase'), { recursive: true });
for (const name of ['STACK', 'INTEGRATIONS', 'ARCHITECTURE', 'STRUCTURE']) {
fs.writeFileSync(path.join(tmpDir, '.planning', 'codebase', `${name}.md`), `# ${name}\n`);
}
fs.writeFileSync(path.join(tmpDir, 'package.json'), '{"name":"fixture"}\n');
fs.mkdirSync(path.join(tmpDir, 'docs', 'adr'), { recursive: true });
fs.writeFileSync(path.join(tmpDir, 'docs', 'adr', '0001-runtime.md'), '# ADR: Runtime\n');
const result = runGsdTools(['init', 'onboard', '--fast', '--raw'], tmpDir, { HOME: tmpDir });
assert.ok(result.success, `init onboard should succeed: ${result.error}`);
const parsed = JSON.parse(result.output);
assert.strictEqual(parsed.next_action.kind, 'complete-map-before-new-project');
assert.strictEqual(parsed.next_action.command, '/gsd-map-codebase');
});
test('routes planning artifacts without PROJECT.md to partial planning', () => {
fs.mkdirSync(path.join(tmpDir, '.planning'), { recursive: true });
fs.writeFileSync(path.join(tmpDir, '.planning', 'REQUIREMENTS.md'), '# Requirements\n');
fs.writeFileSync(path.join(tmpDir, '.planning', 'ROADMAP.md'), '# Roadmap\n');
fs.writeFileSync(path.join(tmpDir, '.planning', 'STATE.md'), '# State\n');
const result = runGsdTools('init onboard --raw', tmpDir, { HOME: tmpDir });
assert.ok(result.success, `init onboard should succeed: ${result.error}`);
const parsed = JSON.parse(result.output);
assert.strictEqual(parsed.next_action.kind, 'partial-planning');
assert.deepStrictEqual(parsed.next_action.missing, ['PROJECT.md']);
});
test('fast mode leaves a fully set-up project at write-summary instead of the complete-map gate (regression #1990: fast map gate misroute)', () => {
fs.mkdirSync(path.join(tmpDir, '.planning', 'codebase'), { recursive: true });
for (const name of ['STACK', 'INTEGRATIONS', 'ARCHITECTURE', 'STRUCTURE']) {
fs.writeFileSync(path.join(tmpDir, '.planning', 'codebase', `${name}.md`), `# ${name}\n`);
}
fs.writeFileSync(path.join(tmpDir, 'package.json'), '{"name":"fixture"}\n');
for (const name of ['PROJECT', 'REQUIREMENTS', 'ROADMAP', 'STATE']) {
fs.writeFileSync(path.join(tmpDir, '.planning', `${name}.md`), `# ${name}\n`);
}
const result = runGsdTools(['init', 'onboard', '--fast', '--raw'], tmpDir, { HOME: tmpDir });
assert.ok(result.success, `init onboard should succeed: ${result.error}`);
const parsed = JSON.parse(result.output);
assert.strictEqual(parsed.map_readiness, 'fast');
assert.strictEqual(parsed.project_exists, true);
// Once project setup is complete, a fast map must not misroute back to the
// pre-new-project complete-map handoff; onboarding advances to the summary.
assert.strictEqual(parsed.next_action.kind, 'write-summary');
assert.strictEqual(parsed.next_action.summary_path, '.planning/onboarding/SUMMARY.md');
});
test('fast mode routes incomplete planning to partial-planning before the complete-map gate (regression #1990: fast map gate misroute)', () => {
fs.mkdirSync(path.join(tmpDir, '.planning', 'codebase'), { recursive: true });
for (const name of ['STACK', 'INTEGRATIONS', 'ARCHITECTURE', 'STRUCTURE']) {
fs.writeFileSync(path.join(tmpDir, '.planning', 'codebase', `${name}.md`), `# ${name}\n`);
}
fs.writeFileSync(path.join(tmpDir, 'package.json'), '{"name":"fixture"}\n');
fs.writeFileSync(path.join(tmpDir, '.planning', 'PROJECT.md'), '# Project\n');
fs.writeFileSync(path.join(tmpDir, '.planning', 'ROADMAP.md'), '# Roadmap\n');
fs.writeFileSync(path.join(tmpDir, '.planning', 'STATE.md'), '# State\n');
const result = runGsdTools(['init', 'onboard', '--fast', '--raw'], tmpDir, { HOME: tmpDir });
assert.ok(result.success, `init onboard should succeed: ${result.error}`);
const parsed = JSON.parse(result.output);
assert.strictEqual(parsed.map_readiness, 'fast');
// Incomplete planning must surface before the fast-map complete-map handoff.
assert.strictEqual(parsed.next_action.kind, 'partial-planning');
assert.deepStrictEqual(parsed.next_action.missing, ['REQUIREMENTS.md']);
});
test('projects the next action for code, docs, greenfield, partial planning, and summary states', () => {
fs.mkdirSync(path.join(tmpDir, 'src'), { recursive: true });
fs.writeFileSync(path.join(tmpDir, 'src', 'server.ts'), 'export const server = true;\n');
let result = runGsdTools('init onboard --raw', tmpDir, { HOME: tmpDir });
assert.ok(result.success, `init onboard should succeed: ${result.error}`);
assert.deepStrictEqual(JSON.parse(result.output).next_action, {
kind: 'map-codebase',
command: '/gsd-map-codebase',
reason: 'Existing code was detected, but the required .planning/codebase/ map is missing.',
});
cleanup(tmpDir);
tmpDir = createFixture({ planning: false, projectDoc: false });
fs.mkdirSync(path.join(tmpDir, 'docs', 'adr'), { recursive: true });
fs.writeFileSync(path.join(tmpDir, 'docs', 'adr', '0001-runtime.md'), '# ADR: Runtime\n');
result = runGsdTools('init onboard --raw', tmpDir, { HOME: tmpDir });
assert.ok(result.success, `init onboard should succeed: ${result.error}`);
assert.deepStrictEqual(JSON.parse(result.output).next_action, {
kind: 'ingest-docs',
command: '/gsd-ingest-docs',
reason: 'Detected existing ADR/PRD/SPEC/RFC document(s) before project setup.',
});
cleanup(tmpDir);
tmpDir = createFixture({ planning: false, projectDoc: false });
result = runGsdTools('init onboard --raw', tmpDir, { HOME: tmpDir });
assert.ok(result.success, `init onboard should succeed: ${result.error}`);
assert.deepStrictEqual(JSON.parse(result.output).next_action, {
kind: 'new-project',
command: '/gsd-new-project',
reason: 'No existing code or planning docs were detected.',
});
cleanup(tmpDir);
tmpDir = createFixture({ planning: false, projectDoc: false });
fs.mkdirSync(path.join(tmpDir, '.planning'), { recursive: true });
fs.writeFileSync(path.join(tmpDir, '.planning', 'PROJECT.md'), '# Project\n');
fs.writeFileSync(path.join(tmpDir, '.planning', 'ROADMAP.md'), '# Roadmap\n');
fs.writeFileSync(path.join(tmpDir, '.planning', 'STATE.md'), '# State\n');
result = runGsdTools('init onboard --raw', tmpDir, { HOME: tmpDir });
assert.ok(result.success, `init onboard should succeed: ${result.error}`);
const partial = JSON.parse(result.output);
assert.strictEqual(partial.next_action.kind, 'partial-planning');
assert.deepStrictEqual(partial.next_action.missing, ['REQUIREMENTS.md']);
fs.mkdirSync(path.join(tmpDir, '.planning', 'codebase'), { recursive: true });
for (const name of ['STACK', 'ARCHITECTURE', 'STRUCTURE', 'CONVENTIONS', 'TESTING', 'INTEGRATIONS', 'CONCERNS']) {
fs.writeFileSync(path.join(tmpDir, '.planning', 'codebase', `${name}.md`), `# ${name}\n`);
}
fs.writeFileSync(path.join(tmpDir, '.planning', 'REQUIREMENTS.md'), '# Requirements\n');
result = runGsdTools('init onboard --raw', tmpDir, { HOME: tmpDir });
assert.ok(result.success, `init onboard should succeed: ${result.error}`);
assert.deepStrictEqual(JSON.parse(result.output).next_action, {
kind: 'write-summary',
summary_path: '.planning/onboarding/SUMMARY.md',
reason: 'Onboarding summary is missing.',
});
fs.mkdirSync(path.join(tmpDir, '.planning', 'onboarding'), { recursive: true });
fs.writeFileSync(path.join(tmpDir, '.planning', 'onboarding', 'SUMMARY.md'), '# Onboarding Summary\n');
result = runGsdTools('init onboard --raw', tmpDir, { HOME: tmpDir });
assert.ok(result.success, `init onboard should succeed: ${result.error}`);
assert.deepStrictEqual(JSON.parse(result.output).next_action, {
kind: 'ready',
reason: 'Onboarding summary already exists.',
});
});
test('reports missing requirements in otherwise existing planning', () => {
fs.mkdirSync(path.join(tmpDir, '.planning'), { recursive: true });
fs.writeFileSync(path.join(tmpDir, '.planning', 'PROJECT.md'), '# Project\n');
fs.writeFileSync(path.join(tmpDir, '.planning', 'ROADMAP.md'), '# Roadmap\n');
fs.writeFileSync(path.join(tmpDir, '.planning', 'STATE.md'), '# State\n');
const result = runGsdTools('init onboard --raw', tmpDir, { HOME: tmpDir });
assert.ok(result.success, `init onboard should succeed: ${result.error}`);
const parsed = JSON.parse(result.output);
assert.strictEqual(parsed.project_exists, true);
assert.strictEqual(parsed.requirements_exists, false);
assert.strictEqual(parsed.roadmap_exists, true);
assert.strictEqual(parsed.state_exists, true);
});
test('ignores generated and vendor directories when detecting existing code', () => {
fs.mkdirSync(path.join(tmpDir, 'node_modules', 'pkg'), { recursive: true });
fs.writeFileSync(path.join(tmpDir, 'node_modules', 'pkg', 'index.ts'), 'export const ignored = true;\n');
fs.mkdirSync(path.join(tmpDir, 'dist'), { recursive: true });
fs.writeFileSync(path.join(tmpDir, 'dist', 'bundle.js'), 'console.log("ignored");\n');
const result = runGsdTools('init onboard --raw', tmpDir, { HOME: tmpDir });
assert.ok(result.success, `init onboard should succeed: ${result.error}`);
const parsed = JSON.parse(result.output);
assert.strictEqual(parsed.has_existing_code, false);
assert.strictEqual(parsed.has_package_file, false);
assert.strictEqual(parsed.is_brownfield, false);
assert.strictEqual(parsed.needs_codebase_map, false);
});
test('treats package manifests as brownfield even without source files', () => {
fs.writeFileSync(path.join(tmpDir, 'package.json'), '{"name":"fixture"}\n');
const result = runGsdTools('init onboard --raw', tmpDir, { HOME: tmpDir });
assert.ok(result.success, `init onboard should succeed: ${result.error}`);
const parsed = JSON.parse(result.output);
assert.strictEqual(parsed.has_existing_code, false);
assert.strictEqual(parsed.has_package_file, true);
assert.strictEqual(parsed.is_brownfield, true);
assert.strictEqual(parsed.needs_codebase_map, true);
});
test('formats onboard handoff commands for the resolved runtime', () => {
fs.writeFileSync(path.join(tmpDir, 'package.json'), '{"name":"fixture"}\n');
const result = runGsdTools(['init', 'onboard', '--raw'], tmpDir, {
HOME: tmpDir,
GSD_RUNTIME: 'codex',
});
assert.ok(result.success, `init onboard should succeed: ${result.error}`);
const parsed = JSON.parse(result.output);
assert.strictEqual(parsed.next_action.kind, 'map-codebase');
assert.strictEqual(parsed.next_action.command, '$gsd-map-codebase');
assert.deepStrictEqual(parsed.handoff_commands, {
map_codebase: '$gsd-map-codebase',
map_codebase_fast: '$gsd-map-codebase --fast',
ingest_docs: '$gsd-ingest-docs',
manager: '$gsd-manager',
new_project: '$gsd-new-project',
onboard: '$gsd-onboard',
});
});
test('dotted query init.onboard matches direct init onboard', () => {
fs.writeFileSync(path.join(tmpDir, 'package.json'), '{"name":"fixture"}\n');
const direct = runGsdTools(['init', 'onboard', '--raw'], tmpDir, { HOME: tmpDir });
const query = runGsdTools(['query', 'init.onboard', '--raw'], tmpDir, { HOME: tmpDir });
assert.equal(direct.success, true, direct.error || direct.output);
assert.equal(query.success, true, query.error || query.output);
assert.deepStrictEqual(JSON.parse(query.output), JSON.parse(direct.output));
});
});
describe('/gsd:onboard command contract', () => {
test('command file declares the onboard command and loads its workflow', () => {
const content = fs.readFileSync(CMD_PATH, 'utf8');
assert.match(content, /^name:\s*gsd:onboard$/m);
assert.match(content, /^description:\s*.*(?:existing codebase|brownfield|onboard).*$/mi);
assert.match(content, /^\s*- AskUserQuestion$/m);
assert.match(content, /^\s*- Agent$/m);
assert.ok(content.includes('@~/.claude/gsd-core/workflows/onboard.md'));
assert.ok(content.includes('@~/.claude/gsd-core/references/ui-brand.md'));
assert.ok(content.includes('@~/.claude/gsd-core/references/gate-prompts.md'));
});
test('workflow renders the init projection without owning the route state machine', () => {
const content = fs.readFileSync(WF_PATH, 'utf8');
assert.ok(content.includes('@~/.claude/gsd-core/references/gsd-run-resolver.md'));
assert.ok(
!content.includes('_GSD_SHIM_NAME="gsd-tools.cjs"'),
'workflow must reference the shared resolver instead of inlining it',
);
assert.match(content, /init onboard --fast --raw/);
assert.match(content, /init onboard --raw/);
assert.match(content, /next_action\.kind/);
assert.match(content, /map_readiness/);
assert.match(content, /codebase_map_summary_status/);
assert.match(content, /ONBOARDING_ROOT=\{git_worktree_root \|\| _GSD_RUNTIME_ROOT\}/);
for (const action of [
'map-codebase',
'ingest-docs',
'complete-map-before-new-project',
'new-project',
'partial-planning',
'write-summary',
'ready',
]) {
assert.ok(content.includes(`next_action.kind == "${action}"`), `workflow must render ${action}`);
}
assert.ok(content.includes('AskUserQuestion'), 'workflow must still support interactive choices');
assert.ok(content.includes('--text'), 'workflow must document text-mode fallback');
assert.ok(
content.includes('Exit. If the user skips mapping:'),
'skip mapping must hand off explicitly instead of falling through to summary creation',
);
const partialPlanningSkipGuard =
'If `(project_exists || requirements_exists || roadmap_exists || state_exists) && (!project_exists || !requirements_exists || !roadmap_exists || !state_exists)`, route the skip to the partial planning guard instead:';
const docsIngestSkipGuard =
'If `has_docs_candidates && !project_exists`, route the skip to docs ingest instead:';
assert.ok(
content.includes(partialPlanningSkipGuard),
'skip mapping must preserve the partial-planning guard when incomplete planning artifacts are present',
);
assert.ok(
content.includes(docsIngestSkipGuard),
'skip mapping must preserve the docs-ingest gate when planning docs are present',
);
assert.ok(
content.indexOf(partialPlanningSkipGuard) < content.indexOf(docsIngestSkipGuard),
'skip mapping must check partial planning before docs ingest',
);
assert.ok(
content.includes('{handoff_commands.ingest_docs}'),
'skip mapping docs-preserving handoff must use the projected docs ingest command',
);
assert.ok(
content.includes('Skipping codebase mapping may give {handoff_commands.new_project} weaker context.'),
'skip mapping must warn about weaker context',
);
assert.ok(
content.includes('Exit. If the user skips docs ingest, print:'),
'skip docs ingest must hand off explicitly instead of falling through to summary creation',
);
assert.ok(
content.includes('Skipping docs ingest may omit existing ADR/PRD/SPEC/RFC context from {handoff_commands.new_project}.'),
'skip docs ingest must warn about omitted docs context',
);
assert.match(content, /do not overwrite/i, 'workflow must protect existing summary/planning');
assert.match(content, /query commit "docs: create onboarding summary" --files \.planning\/onboarding\/SUMMARY\.md/);
assert.ok(!content.includes('execute-phase'), 'onboarding must not execute implementation phases');
assert.ok(!content.includes('gsd:ship'), 'onboarding must not ship work');
assert.ok(content.includes('Next recommended command: {handoff_commands.manager}'));
assert.ok(!content.includes('/gsd:ingest-docs'), 'skip handoffs must not hard-code legacy ingest command');
assert.ok(!content.includes('/gsd:new-project'), 'skip handoffs must not hard-code legacy new-project command');
});
});

View File

@@ -380,6 +380,14 @@ describe('resolveProfile', () => {
}
});
test('standard profile includes the onboard manager handoff dependency', () => {
const manifest = loadSkillsManifest(REAL_COMMANDS_DIR);
const result = resolveProfile({ modes: ['standard'], manifest });
assert.ok(result.skills instanceof Set);
assert.ok(result.skills.has('onboard'), 'standard profile should include onboard');
assert.ok(result.skills.has('manager'), 'onboard handoff must install gsd-manager');
});
test('resolves full profile — returns sentinel', () => {
const manifest = loadSkillsManifest(REAL_COMMANDS_DIR);
const result = resolveProfile({ modes: ['full'], manifest });

View File

@@ -136,6 +136,22 @@ function collectAgentFiles() {
return results;
}
/**
* A workflow/agent file "delegates to the shared resolver" when it pulls the
* canonical gsd_run preamble in from gsd-core/references/gsd-run-resolver.md via
* an @-include instead of inlining the snippet (see onboard.md / issue #1990).
*
* Such files are exempt from the inline-preamble parity checks (B / G / H and the
* runtime-home propagation checks): they intentionally do NOT inline the preamble
* — onboard-command.test.cjs even asserts the absence of the inline form. Their
* resolver correctness is guaranteed transitively by:
* (1) onboard-command.test.cjs asserting the @-include is present, and
* (2) the "resolver reference stays byte-equal to the snippet" guard (B2) below.
*/
function delegatesToResolverReference(content) {
return content.includes('references/gsd-run-resolver.md');
}
describe('runtime-launcher-parity (#373)', () => {
// ─── (A) No retired GSD_SDK token ────────────────────────────────────────
test('(A) no GSD_SDK token in any workflow .md file', () => {
@@ -170,6 +186,9 @@ describe('runtime-launcher-parity (#373)', () => {
for (const f of files) {
const rel = path.relative(WORKFLOWS_DIR, f);
const content = fs.readFileSync(f, 'utf8');
// Files that delegate to the shared resolver reference (@-include) do not
// inline the preamble — exempt them (see delegatesToResolverReference / (B2)).
if (delegatesToResolverReference(content)) continue;
const blocks = extractShellBlocks(content);
// Collect all block lines in document order for flat analysis
@@ -226,6 +245,30 @@ describe('runtime-launcher-parity (#373)', () => {
);
});
// ─── (B2) Shared resolver reference stays byte-equal to the snippet ───────
// Workflows may delegate to gsd-core/references/gsd-run-resolver.md instead of
// inlining the preamble (see delegatesToResolverReference). That delegation is
// only safe if the reference's bash block is byte-equal to the canonical
// snippet — otherwise a delegating workflow (e.g. onboard.md) would silently
// ship a drifted resolver. This guard replaces the inline-preamble checks for
// those files.
test('(B2) references/gsd-run-resolver.md preamble is byte-equal to the canonical snippet', () => {
const preambleStr = expectedPreamble().join('\n');
const refPath = path.join(__dirname, '..', 'gsd-core', 'references', 'gsd-run-resolver.md');
const refContent = fs.readFileSync(refPath, 'utf8');
const refPreamble = extractShellBlocks(refContent)
.map((b) => b.lines.join('\n'))
.join('\n')
.trim();
assert.equal(
refPreamble,
preambleStr,
'gsd-core/references/gsd-run-resolver.md must contain the canonical gsd_run preamble ' +
'byte-equal to _runtime-launcher.snippet.sh. Re-copy the snippet into the reference so ' +
'workflows that delegate to it via @-include ship the current resolver.',
);
});
// ─── (C) Space-safe behavioral test ──────────────────────────────────────
test('(C) gsd_run works with a RUNTIME_DIR path containing spaces', () => {
// Create temp dir whose path contains a space
@@ -402,6 +445,7 @@ describe('runtime-launcher-parity (#373)', () => {
const content = fs.readFileSync(f, 'utf8');
const blocks = extractShellBlocks(content);
const allBlockLines = blocks.flatMap((b) => b.lines);
if (delegatesToResolverReference(content)) continue;
const fileHasGsdRun = allBlockLines.some((l) => /\bgsd_run\b/.test(l));
if (!fileHasGsdRun) continue;
const allContent = allBlockLines.join('\n');
@@ -433,6 +477,7 @@ describe('runtime-launcher-parity (#373)', () => {
const content = fs.readFileSync(f, 'utf8');
const blocks = extractShellBlocks(content);
const allBlockLines = blocks.flatMap((b) => b.lines);
if (delegatesToResolverReference(content)) continue;
const fileHasGsdRun = allBlockLines.some((l) => /\bgsd_run\b/.test(l));
if (!fileHasGsdRun) continue;
if (!allBlockLines.join('\n').includes(CODEX_HOME_PROBE)) {
@@ -1346,6 +1391,7 @@ describe('bug-891: non-Claude runtime home fallback arms', () => {
const content = fs.readFileSync(f, 'utf8');
const blocks = extractShellBlocks(content);
const allBlockLines = blocks.flatMap((b) => b.lines);
if (delegatesToResolverReference(content)) continue;
const fileHasGsdRun = allBlockLines.some((l) => /\bgsd_run\b/.test(l));
if (!fileHasGsdRun) continue;
const allContent = allBlockLines.join('\n');

View File

@@ -476,6 +476,8 @@ const KNOWN_SKILLS = new Set([
'mvp-phase.md',
'new-milestone.md',
'new-project.md',
// #1990 brownfield onboarding entry command; sibling of new-project, routed under ns-project.
'onboard.md',
// `next.md` was legitimately reclaimed (#1787): the old workflow-advance
// command stays absorbed into `progress.md --next`, while the current
// `/gsd:next` is a different state-aware smart-entry launcher.

View File

@@ -20,7 +20,7 @@
"discuss-phase-assumptions.md": 27028,
"discuss-phase-power.md": 11273,
"discuss-phase.md": 31986,
"do.md": 10112,
"do.md": 10353,
"docs-update.md": 55706,
"edit-phase.md": 12927,
"eval-review.md": 9967,
@@ -50,6 +50,7 @@
"next.md": 20138,
"node-repair.md": 4173,
"note.md": 6563,
"onboard.md": 8590,
"pause-work.md": 14441,
"plan-milestone-gaps.md": 11809,
"plan-phase.md": 90455,