From 531ead7b45ee57aa8b94b972602b5bf26a2f7179 Mon Sep 17 00:00:00 2001 From: Clay Good Date: Mon, 27 Jul 2026 17:27:50 -0500 Subject: [PATCH] fix(templates): replace Claude-only AskUserQuestion instruction with neutral ask-the-user guidance The workflow skill/command templates told agents to use the AskUserQuestion tool, which only exists in Claude Code. The same templates generate skills and commands for every supported tool, so OpenCode (whose tool is named question), Factory Droid (whose native AskUser parser errors on the instruction), Codex, and the rest were instructed to use a tool they don't have. The guidance is now runtime-neutral, matching the TodoWrite fix in #1403. Fixes #920 Fixes #717 Co-Authored-By: Claude Fable 5 --- .changeset/generic-ask-user-guidance.md | 5 ++ skills/openspec-apply-change/SKILL.md | 2 +- skills/openspec-archive-change/SKILL.md | 6 +- skills/openspec-bulk-archive-change/SKILL.md | 4 +- skills/openspec-continue-change/SKILL.md | 2 +- skills/openspec-ff-change/SKILL.md | 4 +- skills/openspec-new-change/SKILL.md | 2 +- skills/openspec-propose/SKILL.md | 4 +- skills/openspec-sync-specs/SKILL.md | 2 +- skills/openspec-update-change/SKILL.md | 2 +- skills/openspec-verify-change/SKILL.md | 2 +- src/core/templates/workflows/apply-change.ts | 4 +- .../templates/workflows/archive-change.ts | 8 +-- .../workflows/bulk-archive-change.ts | 8 +-- .../templates/workflows/continue-change.ts | 4 +- src/core/templates/workflows/ff-change.ts | 8 +-- src/core/templates/workflows/new-change.ts | 4 +- src/core/templates/workflows/propose.ts | 8 +-- src/core/templates/workflows/sync-specs.ts | 4 +- src/core/templates/workflows/update-change.ts | 4 +- src/core/templates/workflows/verify-change.ts | 4 +- .../templates/skill-templates-parity.test.ts | 60 +++++++++---------- 22 files changed, 78 insertions(+), 73 deletions(-) create mode 100644 .changeset/generic-ask-user-guidance.md diff --git a/.changeset/generic-ask-user-guidance.md b/.changeset/generic-ask-user-guidance.md new file mode 100644 index 0000000000..c38544f519 --- /dev/null +++ b/.changeset/generic-ask-user-guidance.md @@ -0,0 +1,5 @@ +--- +'@fission-ai/openspec': patch +--- + +Workflow skills and commands no longer tell agents to use the Claude Code-only AskUserQuestion tool. The same templates are generated for every supported tool, and agents without that tool (OpenCode, Factory Droid, Codex, and others) errored or stalled on the instruction. The guidance is now runtime-neutral: agents are simply told to ask the user. diff --git a/skills/openspec-apply-change/SKILL.md b/skills/openspec-apply-change/SKILL.md index 00670c7c70..ba8546361a 100644 --- a/skills/openspec-apply-change/SKILL.md +++ b/skills/openspec-apply-change/SKILL.md @@ -22,7 +22,7 @@ Implement tasks from an OpenSpec change. If a name is provided, use it. Otherwise: - Infer from conversation context if the user mentioned a change - Auto-select if only one active change exists - - If ambiguous, run `openspec list --json` to get available changes and use the **AskUserQuestion tool** to let the user select + - If ambiguous, run `openspec list --json` to get available changes and ask the user to select one Always announce: "Using change: " and how to override (e.g., `/openspec-apply-change `). diff --git a/skills/openspec-archive-change/SKILL.md b/skills/openspec-archive-change/SKILL.md index d59d120730..4ed14cd037 100644 --- a/skills/openspec-archive-change/SKILL.md +++ b/skills/openspec-archive-change/SKILL.md @@ -19,7 +19,7 @@ Archive a completed change in the experimental workflow. 1. **If no change name provided, prompt for selection** - Run `openspec list --json` to get available changes. Use the **AskUserQuestion tool** to let the user select. + Run `openspec list --json` to get available changes. Ask the user to select one. Show only active changes (not already archived). Include the schema used for each change if available. @@ -64,7 +64,7 @@ Archive a completed change in the experimental workflow. **If any artifacts are neither `done` nor `skipped`** (skipped artifacts satisfy the requirement - the change declares skip_specs): - Display warning listing incomplete artifacts - - Use **AskUserQuestion tool** to confirm user wants to proceed + - Ask the user to confirm they want to proceed - Proceed if user confirms 3. **Check task completion status** @@ -75,7 +75,7 @@ Archive a completed change in the experimental workflow. **If incomplete tasks found:** - Display warning showing count of incomplete tasks - - Use **AskUserQuestion tool** to confirm user wants to proceed + - Ask the user to confirm they want to proceed - Proceed if user confirms **If no tasks file exists:** Proceed without task-related warning. diff --git a/skills/openspec-bulk-archive-change/SKILL.md b/skills/openspec-bulk-archive-change/SKILL.md index 335d80742a..8190004420 100644 --- a/skills/openspec-bulk-archive-change/SKILL.md +++ b/skills/openspec-bulk-archive-change/SKILL.md @@ -27,7 +27,7 @@ This skill allows you to batch-archive changes, handling spec conflicts intellig 2. **Prompt for change selection** - Use **AskUserQuestion tool** with multi-select to let user choose changes: + Ask the user to choose changes (multi-select): - Show each change with its schema - Include an option for "All changes" - Allow any number of selections (1+ works, 2+ is the typical use case) @@ -137,7 +137,7 @@ This skill allows you to batch-archive changes, handling spec conflicts intellig 7. **Confirm batch operation** - Use **AskUserQuestion tool** with a single confirmation: + Ask the user a single confirmation question: - "Archive N changes?" with options based on status - Options might include: diff --git a/skills/openspec-continue-change/SKILL.md b/skills/openspec-continue-change/SKILL.md index b86fc8a4ca..3928081e98 100644 --- a/skills/openspec-continue-change/SKILL.md +++ b/skills/openspec-continue-change/SKILL.md @@ -19,7 +19,7 @@ Continue working on a change by creating the next artifact. 1. **If no change name provided, prompt for selection** - Run `openspec list --json` to get available changes sorted by most recently modified. Then use the **AskUserQuestion tool** to let the user select which change to work on. + Run `openspec list --json` to get available changes sorted by most recently modified. Then ask the user to select which change to work on. Present the top 3-4 most recently modified changes as options, showing: - Change name diff --git a/skills/openspec-ff-change/SKILL.md b/skills/openspec-ff-change/SKILL.md index 24ce39c6ba..9e33d753b9 100644 --- a/skills/openspec-ff-change/SKILL.md +++ b/skills/openspec-ff-change/SKILL.md @@ -19,7 +19,7 @@ Fast-forward through artifact creation - generate everything needed to start imp 1. **If no clear input provided, ask what they want to build** - Use the **AskUserQuestion tool** (open-ended, no preset options) to ask: + Ask the user (open-ended, no preset options): > "What change do you want to work on? Describe what you want to build or fix." From their description, derive a kebab-case name (e.g., "add user authentication" → `add-user-auth`). @@ -77,7 +77,7 @@ Fast-forward through artifact creation - generate everything needed to start imp - Stop when every artifact in the required set is `done`, `skipped`, or was deliberately skipped c. **If an artifact requires user input** (unclear context): - - Use **AskUserQuestion tool** to clarify + - Ask the user to clarify - Then continue with creation 5. **Show final status** diff --git a/skills/openspec-new-change/SKILL.md b/skills/openspec-new-change/SKILL.md index bbc22d9e55..851814bc44 100644 --- a/skills/openspec-new-change/SKILL.md +++ b/skills/openspec-new-change/SKILL.md @@ -19,7 +19,7 @@ Start a new change using the experimental artifact-driven approach. 1. **If no clear input provided, ask what they want to build** - Use the **AskUserQuestion tool** (open-ended, no preset options) to ask: + Ask the user (open-ended, no preset options): > "What change do you want to work on? Describe what you want to build or fix." From their description, derive a kebab-case name (e.g., "add user authentication" → `add-user-auth`). diff --git a/skills/openspec-propose/SKILL.md b/skills/openspec-propose/SKILL.md index 6b8c7fe791..abc9bd9412 100644 --- a/skills/openspec-propose/SKILL.md +++ b/skills/openspec-propose/SKILL.md @@ -29,7 +29,7 @@ When ready to implement, run /openspec-apply-change 1. **If no clear input provided, ask what they want to build** - Use the **AskUserQuestion tool** (open-ended, no preset options) to ask: + Ask the user (open-ended, no preset options): > "What change do you want to work on? Describe what you want to build or fix." From their description, derive a kebab-case name (e.g., "add user authentication" → `add-user-auth`). @@ -87,7 +87,7 @@ When ready to implement, run /openspec-apply-change - Stop when every artifact in the required set is `done`, `skipped`, or was deliberately skipped c. **If an artifact requires user input** (unclear context): - - Use **AskUserQuestion tool** to clarify + - Ask the user to clarify - Then continue with creation 5. **Show final status** diff --git a/skills/openspec-sync-specs/SKILL.md b/skills/openspec-sync-specs/SKILL.md index bfbedac0c2..43e277a626 100644 --- a/skills/openspec-sync-specs/SKILL.md +++ b/skills/openspec-sync-specs/SKILL.md @@ -21,7 +21,7 @@ This is an **agent-driven** operation - you will read delta specs and directly e 1. **If no change name provided, prompt for selection** - Run `openspec list --json` to get available changes. Use the **AskUserQuestion tool** to let the user select. + Run `openspec list --json` to get available changes. Ask the user to select one. Show changes that have delta specs (under `specs/` directory). diff --git a/skills/openspec-update-change/SKILL.md b/skills/openspec-update-change/SKILL.md index b39170da77..e5bc061976 100644 --- a/skills/openspec-update-change/SKILL.md +++ b/skills/openspec-update-change/SKILL.md @@ -19,7 +19,7 @@ Revise a change's existing planning artifacts and keep them coherent. Never edit 1. **If no change name provided, prompt for selection** - Run `openspec list --json` to get available changes sorted by most recently modified. Then use the **AskUserQuestion tool** to let the user select which change to update. + Run `openspec list --json` to get available changes sorted by most recently modified. Then ask the user to select which change to update. Present the top 3-4 most recently modified changes as options, showing: - Change name diff --git a/skills/openspec-verify-change/SKILL.md b/skills/openspec-verify-change/SKILL.md index ffc44cf3fa..b7005a9646 100644 --- a/skills/openspec-verify-change/SKILL.md +++ b/skills/openspec-verify-change/SKILL.md @@ -19,7 +19,7 @@ Verify that an implementation matches the change artifacts (specs, tasks, design 1. **If no change name provided, prompt for selection** - Run `openspec list --json` to get available changes. Use the **AskUserQuestion tool** to let the user select. + Run `openspec list --json` to get available changes. Ask the user to select one. Show changes that have implementation tasks (tasks artifact exists). Include the schema used for each change if available. diff --git a/src/core/templates/workflows/apply-change.ts b/src/core/templates/workflows/apply-change.ts index 4dee0f32fa..d35cd59aef 100644 --- a/src/core/templates/workflows/apply-change.ts +++ b/src/core/templates/workflows/apply-change.ts @@ -24,7 +24,7 @@ ${STORE_SELECTION_GUIDANCE} If a name is provided, use it. Otherwise: - Infer from conversation context if the user mentioned a change - Auto-select if only one active change exists - - If ambiguous, run \`openspec list --json\` to get available changes and use the **AskUserQuestion tool** to let the user select + - If ambiguous, run \`openspec list --json\` to get available changes and ask the user to select one Always announce: "Using change: " and how to override (e.g., \`/opsx:apply \`). @@ -209,7 +209,7 @@ ${STORE_SELECTION_GUIDANCE} If a name is provided, use it. Otherwise: - Infer from conversation context if the user mentioned a change - Auto-select if only one active change exists - - If ambiguous, run \`openspec list --json\` to get available changes and use the **AskUserQuestion tool** to let the user select + - If ambiguous, run \`openspec list --json\` to get available changes and ask the user to select one Always announce: "Using change: " and how to override (e.g., \`/opsx:apply \`). diff --git a/src/core/templates/workflows/archive-change.ts b/src/core/templates/workflows/archive-change.ts index d406f78cc2..cc209148db 100644 --- a/src/core/templates/workflows/archive-change.ts +++ b/src/core/templates/workflows/archive-change.ts @@ -21,7 +21,7 @@ ${STORE_SELECTION_GUIDANCE} 1. **If no change name provided, prompt for selection** - Run \`openspec list --json\` to get available changes. Use the **AskUserQuestion tool** to let the user select. + Run \`openspec list --json\` to get available changes. Ask the user to select one. Show only active changes (not already archived). Include the schema used for each change if available. @@ -66,7 +66,7 @@ ${STORE_SELECTION_GUIDANCE} **If any artifacts are neither \`done\` nor \`skipped\`** (skipped artifacts satisfy the requirement - the change declares skip_specs): - Display warning listing incomplete artifacts - - Use **AskUserQuestion tool** to confirm user wants to proceed + - Ask the user to confirm they want to proceed - Proceed if user confirms 3. **Check task completion status** @@ -77,7 +77,7 @@ ${STORE_SELECTION_GUIDANCE} **If incomplete tasks found:** - Display warning showing count of incomplete tasks - - Use **AskUserQuestion tool** to confirm user wants to proceed + - Ask the user to confirm they want to proceed - Proceed if user confirms **If no tasks file exists:** Proceed without task-related warning. @@ -198,7 +198,7 @@ ${STORE_SELECTION_GUIDANCE} 1. **If no change name provided, prompt for selection** - Run \`openspec list --json\` to get available changes. Use the **AskUserQuestion tool** to let the user select. + Run \`openspec list --json\` to get available changes. Ask the user to select one. Show only active changes (not already archived). Include the schema used for each change if available. diff --git a/src/core/templates/workflows/bulk-archive-change.ts b/src/core/templates/workflows/bulk-archive-change.ts index c607367f67..3d0fe86ba0 100644 --- a/src/core/templates/workflows/bulk-archive-change.ts +++ b/src/core/templates/workflows/bulk-archive-change.ts @@ -29,7 +29,7 @@ ${STORE_SELECTION_GUIDANCE} 2. **Prompt for change selection** - Use **AskUserQuestion tool** with multi-select to let user choose changes: + Ask the user to choose changes (multi-select): - Show each change with its schema - Include an option for "All changes" - Allow any number of selections (1+ works, 2+ is the typical use case) @@ -139,7 +139,7 @@ ${STORE_SELECTION_GUIDANCE} 7. **Confirm batch operation** - Use **AskUserQuestion tool** with a single confirmation: + Ask the user a single confirmation question: - "Archive N changes?" with options based on status - Options might include: @@ -343,7 +343,7 @@ ${STORE_SELECTION_GUIDANCE} 2. **Prompt for change selection** - Use **AskUserQuestion tool** with multi-select to let user choose changes: + Ask the user to choose changes (multi-select): - Show each change with its schema - Include an option for "All changes" - Allow any number of selections (1+ works, 2+ is the typical use case) @@ -454,7 +454,7 @@ ${STORE_SELECTION_GUIDANCE} 7. **Confirm batch operation** - Use **AskUserQuestion tool** with a single confirmation: + Ask the user a single confirmation question: - "Archive N changes?" with options based on status - Options might include: diff --git a/src/core/templates/workflows/continue-change.ts b/src/core/templates/workflows/continue-change.ts index 8d4ae73e70..e2938ec8f9 100644 --- a/src/core/templates/workflows/continue-change.ts +++ b/src/core/templates/workflows/continue-change.ts @@ -21,7 +21,7 @@ ${STORE_SELECTION_GUIDANCE} 1. **If no change name provided, prompt for selection** - Run \`openspec list --json\` to get available changes sorted by most recently modified. Then use the **AskUserQuestion tool** to let the user select which change to work on. + Run \`openspec list --json\` to get available changes sorted by most recently modified. Then ask the user to select which change to work on. Present the top 3-4 most recently modified changes as options, showing: - Change name @@ -136,7 +136,7 @@ ${STORE_SELECTION_GUIDANCE} 1. **If no change name provided, prompt for selection** - Run \`openspec list --json\` to get available changes sorted by most recently modified. Then use the **AskUserQuestion tool** to let the user select which change to work on. + Run \`openspec list --json\` to get available changes sorted by most recently modified. Then ask the user to select which change to work on. Present the top 3-4 most recently modified changes as options, showing: - Change name diff --git a/src/core/templates/workflows/ff-change.ts b/src/core/templates/workflows/ff-change.ts index b656397ea5..1a3f036ba2 100644 --- a/src/core/templates/workflows/ff-change.ts +++ b/src/core/templates/workflows/ff-change.ts @@ -21,7 +21,7 @@ ${STORE_SELECTION_GUIDANCE} 1. **If no clear input provided, ask what they want to build** - Use the **AskUserQuestion tool** (open-ended, no preset options) to ask: + Ask the user (open-ended, no preset options): > "What change do you want to work on? Describe what you want to build or fix." From their description, derive a kebab-case name (e.g., "add user authentication" → \`add-user-auth\`). @@ -79,7 +79,7 @@ ${STORE_SELECTION_GUIDANCE} - Stop when every artifact in the required set is \`done\`, \`skipped\`, or was deliberately skipped c. **If an artifact requires user input** (unclear context): - - Use **AskUserQuestion tool** to clarify + - Ask the user to clarify - Then continue with creation 5. **Show final status** @@ -134,7 +134,7 @@ ${STORE_SELECTION_GUIDANCE} 1. **If no input provided, ask what they want to build** - Use the **AskUserQuestion tool** (open-ended, no preset options) to ask: + Ask the user (open-ended, no preset options): > "What change do you want to work on? Describe what you want to build or fix." From their description, derive a kebab-case name (e.g., "add user authentication" → \`add-user-auth\`). @@ -192,7 +192,7 @@ ${STORE_SELECTION_GUIDANCE} - Stop when every artifact in the required set is \`done\`, \`skipped\`, or was deliberately skipped c. **If an artifact requires user input** (unclear context): - - Use **AskUserQuestion tool** to clarify + - Ask the user to clarify - Then continue with creation 5. **Show final status** diff --git a/src/core/templates/workflows/new-change.ts b/src/core/templates/workflows/new-change.ts index d301fec42d..e45858abbc 100644 --- a/src/core/templates/workflows/new-change.ts +++ b/src/core/templates/workflows/new-change.ts @@ -21,7 +21,7 @@ ${STORE_SELECTION_GUIDANCE} 1. **If no clear input provided, ask what they want to build** - Use the **AskUserQuestion tool** (open-ended, no preset options) to ask: + Ask the user (open-ended, no preset options): > "What change do you want to work on? Describe what you want to build or fix." From their description, derive a kebab-case name (e.g., "add user authentication" → \`add-user-auth\`). @@ -98,7 +98,7 @@ ${STORE_SELECTION_GUIDANCE} 1. **If no input provided, ask what they want to build** - Use the **AskUserQuestion tool** (open-ended, no preset options) to ask: + Ask the user (open-ended, no preset options): > "What change do you want to work on? Describe what you want to build or fix." From their description, derive a kebab-case name (e.g., "add user authentication" → \`add-user-auth\`). diff --git a/src/core/templates/workflows/propose.ts b/src/core/templates/workflows/propose.ts index 81d0e66c72..f3258b81fb 100644 --- a/src/core/templates/workflows/propose.ts +++ b/src/core/templates/workflows/propose.ts @@ -31,7 +31,7 @@ ${STORE_SELECTION_GUIDANCE} 1. **If no clear input provided, ask what they want to build** - Use the **AskUserQuestion tool** (open-ended, no preset options) to ask: + Ask the user (open-ended, no preset options): > "What change do you want to work on? Describe what you want to build or fix." From their description, derive a kebab-case name (e.g., "add user authentication" → \`add-user-auth\`). @@ -89,7 +89,7 @@ ${STORE_SELECTION_GUIDANCE} - Stop when every artifact in the required set is \`done\`, \`skipped\`, or was deliberately skipped c. **If an artifact requires user input** (unclear context): - - Use **AskUserQuestion tool** to clarify + - Ask the user to clarify - Then continue with creation 5. **Show final status** @@ -154,7 +154,7 @@ ${STORE_SELECTION_GUIDANCE} 1. **If no input provided, ask what they want to build** - Use the **AskUserQuestion tool** (open-ended, no preset options) to ask: + Ask the user (open-ended, no preset options): > "What change do you want to work on? Describe what you want to build or fix." From their description, derive a kebab-case name (e.g., "add user authentication" → \`add-user-auth\`). @@ -212,7 +212,7 @@ ${STORE_SELECTION_GUIDANCE} - Stop when every artifact in the required set is \`done\`, \`skipped\`, or was deliberately skipped c. **If an artifact requires user input** (unclear context): - - Use **AskUserQuestion tool** to clarify + - Ask the user to clarify - Then continue with creation 5. **Show final status** diff --git a/src/core/templates/workflows/sync-specs.ts b/src/core/templates/workflows/sync-specs.ts index 6cfb25bd40..6bcd4c5f4c 100644 --- a/src/core/templates/workflows/sync-specs.ts +++ b/src/core/templates/workflows/sync-specs.ts @@ -23,7 +23,7 @@ ${STORE_SELECTION_GUIDANCE} 1. **If no change name provided, prompt for selection** - Run \`openspec list --json\` to get available changes. Use the **AskUserQuestion tool** to let the user select. + Run \`openspec list --json\` to get available changes. Ask the user to select one. Show changes that have delta specs (under \`specs/\` directory). @@ -230,7 +230,7 @@ ${STORE_SELECTION_GUIDANCE} 1. **If no change name provided, prompt for selection** - Run \`openspec list --json\` to get available changes. Use the **AskUserQuestion tool** to let the user select. + Run \`openspec list --json\` to get available changes. Ask the user to select one. Show changes that have delta specs (under \`specs/\` directory). diff --git a/src/core/templates/workflows/update-change.ts b/src/core/templates/workflows/update-change.ts index 551633deb7..25bee5dbae 100644 --- a/src/core/templates/workflows/update-change.ts +++ b/src/core/templates/workflows/update-change.ts @@ -21,7 +21,7 @@ ${STORE_SELECTION_GUIDANCE} 1. **If no change name provided, prompt for selection** - Run \`openspec list --json\` to get available changes sorted by most recently modified. Then use the **AskUserQuestion tool** to let the user select which change to update. + Run \`openspec list --json\` to get available changes sorted by most recently modified. Then ask the user to select which change to update. Present the top 3-4 most recently modified changes as options, showing: - Change name @@ -108,7 +108,7 @@ ${STORE_SELECTION_GUIDANCE} 1. **If no change name provided, prompt for selection** - Run \`openspec list --json\` to get available changes sorted by most recently modified. Then use the **AskUserQuestion tool** to let the user select which change to update. + Run \`openspec list --json\` to get available changes sorted by most recently modified. Then ask the user to select which change to update. Present the top 3-4 most recently modified changes as options, showing: - Change name diff --git a/src/core/templates/workflows/verify-change.ts b/src/core/templates/workflows/verify-change.ts index f19403b135..7be14e8cb6 100644 --- a/src/core/templates/workflows/verify-change.ts +++ b/src/core/templates/workflows/verify-change.ts @@ -21,7 +21,7 @@ ${STORE_SELECTION_GUIDANCE} 1. **If no change name provided, prompt for selection** - Run \`openspec list --json\` to get available changes. Use the **AskUserQuestion tool** to let the user select. + Run \`openspec list --json\` to get available changes. Ask the user to select one. Show changes that have implementation tasks (tasks artifact exists). Include the schema used for each change if available. @@ -193,7 +193,7 @@ ${STORE_SELECTION_GUIDANCE} 1. **If no change name provided, prompt for selection** - Run \`openspec list --json\` to get available changes. Use the **AskUserQuestion tool** to let the user select. + Run \`openspec list --json\` to get available changes. Ask the user to select one. Show changes that have implementation tasks (tasks artifact exists). Include the schema used for each change if available. diff --git a/test/core/templates/skill-templates-parity.test.ts b/test/core/templates/skill-templates-parity.test.ts index 4b2fa6a630..a28ab44431 100644 --- a/test/core/templates/skill-templates-parity.test.ts +++ b/test/core/templates/skill-templates-parity.test.ts @@ -38,45 +38,45 @@ import { STORE_SELECTION_GUIDANCE } from '../../../src/core/templates/workflows/ const EXPECTED_FUNCTION_HASHES: Record = { getExploreSkillTemplate: 'a7eb6fabdc05a5b90a4773ba93320a60edffea88e9b27985668a2959dcec2e3d', - getNewChangeSkillTemplate: '39663a6d2037e6697020393a66f6327506e3e3bc573b7a3556dcb7f9457dc51d', - getContinueChangeSkillTemplate: '5cc6cf74c055ae67b08373421d934ece65dacbccafbc7452ab5636df3eb9e862', - getApplyChangeSkillTemplate: '20e6a2c66ad418ae4791a95c2349c9bf2dd8517bebb362d5796947cb14f42277', - getFfChangeSkillTemplate: '097a9ff9533900f227cac0523289eae4e19f06a081e5f355a8374dbecf3ff55d', - getSyncSpecsSkillTemplate: '9089eee53ecb1ab4f36a8ff8c96330e7f262ff21f925dfd522c3bfc6cda34db4', + getNewChangeSkillTemplate: '195255b5a95449d817dd4df0782f4a97de4e52dc71b9a7ef82a18620c05876e5', + getContinueChangeSkillTemplate: 'a46f9bb438db67aefa6677167e923852a4b3ad018bade97f209ebf54c3d8f22a', + getApplyChangeSkillTemplate: '16083407be356fd62da24ae1adba0df101a09476ac1f9db5976962f22b5019e3', + getFfChangeSkillTemplate: '6c9f3147c1afd799240a1e72572aafb6aa57b8043ad781719f2a76370e1643e7', + getSyncSpecsSkillTemplate: '3a09496d8f62b80980365d14e51abfb3377d51a66a6572d018f15dd3a67cf34b', getOnboardSkillTemplate: 'f9988a9ef9ab7c09a16f64847902b2a082499f8a2d5c0533856cefb1d68f2318', getOpsxExploreCommandTemplate: 'eef1f8b4fd90ade6d70be46f0f8c3e6722f221fed175a6f9cf626287ef504a94', - getOpsxNewCommandTemplate: '57c600cce318d16b9b4308a18d0d983ea3c0673034e606a7cceec07b4c705e87', - getOpsxContinueCommandTemplate: '5c3968174001c20737ba39d2473ecec0f3b76591a80f7e2fc3974904d3da9dcd', - getOpsxApplyCommandTemplate: '5c84ed7270ebaf61769ae07cbf26e253baf4cc1aed8ba2354da49b10780fa0de', - getOpsxFfCommandTemplate: '264b514cc4849f91fb4414f639484c4181f1e5850d0d788ef276c851efa92859', - getArchiveChangeSkillTemplate: '92a5f76e9228608fb036a85a3131ee1470e92ea15d53833f54c3bdc4bc433b6e', - getBulkArchiveChangeSkillTemplate: '3498003721d312d80748edd4f64b30ec70609334c37ab84116322080f962a25b', - getOpsxSyncCommandTemplate: '1d7a758b3430eb8c2b22c4973e09a179c1d7ad3945d54e05df1409ff3e64d090', - getVerifyChangeSkillTemplate: 'cab4db01b5d2b1243d63d90c53747d8b39e488c60f76eba3fe8b994467f69267', - getOpsxArchiveCommandTemplate: '732d1e2f29306d9878ab4ab8d7111fa2cc590f67b84710d75052e672f86af23a', + getOpsxNewCommandTemplate: '62db91fcdf805f01d490a08aeb4b54d3a67401e69bb9005743e6be2eaf17a0bd', + getOpsxContinueCommandTemplate: 'caa3941931d97728bec0edb75d1d4693c2ba2d3d86467797ab4ce575cf238cdd', + getOpsxApplyCommandTemplate: '669e9ee8db829145c00d3cfd891e12601bd9619a6736fe3811f148d8a89adf4c', + getOpsxFfCommandTemplate: 'b4d83fdce399d85c1dd30bb99a4c94169a5c46bd8558af19010fddd9ccab8d1d', + getArchiveChangeSkillTemplate: '766ca5a0d8dfc3c52c02c8dbd99db3b24242a90455e7d1182dd0df3aaa30fcda', + getBulkArchiveChangeSkillTemplate: 'd853bfac7cf2082a5550947995e86ecec2888ef3a44341819ef0bdd2fcb35389', + getOpsxSyncCommandTemplate: '04f64520f9ef9c0c7728761122fe720b8682fa7af6edc708a7bc2fb7c9508a9e', + getVerifyChangeSkillTemplate: 'b781cd020721e321f45478d6c6a5952b8630d86e5c65de0111db2cde5dc00ec1', + getOpsxArchiveCommandTemplate: 'cb64b83eb3b1a9fad7a24ca39f30a1b8dc6e84feb533e9afe2561a3e2c60f577', getOpsxOnboardCommandTemplate: '16a68b8c9819e2a7bab013c3b49a3e49ea258b68c4e7f47f0d598e30815e0a80', - getOpsxBulkArchiveCommandTemplate: 'a53f05e903d64107b7c6115e843ef64d966707da34094c4b919a9be7dd966faa', - getOpsxVerifyCommandTemplate: 'f01c0c0cef53be0956de52363d955d4ace131b1b2d77adf902f35fead9a1486d', - getOpsxProposeSkillTemplate: '57fb556a060e2eb246b500922837af7573a6e100a6ed7dfaa7bd4ce0f5daffd3', - getOpsxProposeCommandTemplate: '434cae3ee20835725bb1d2ccb9698310a850c5b95ed669ea15fc7a0125371c59', + getOpsxBulkArchiveCommandTemplate: '41ca32026a8a4e81aead957118a1dd149d8a0135a252fa273e3633b95a8f22f3', + getOpsxVerifyCommandTemplate: 'dee56a5da91e94719b5fc778ec1d9d3c1712747bb4e29ecc061202b647854e86', + getOpsxProposeSkillTemplate: '9a41a07d50981485cb285d056423e3492240b94908b968ced2a09cd27fd55e49', + getOpsxProposeCommandTemplate: '900ef7f5be1157ab17e5cafdf2e0af01deb710e97e11ed35cc7b1ffca10af635', getFeedbackSkillTemplate: 'd7d83c5f7fc2b92fe8f4588a5bf2d9cb315e4c73ec19bcd5ef28270906319a0d', - getUpdateChangeSkillTemplate: 'd885847ea1af48a2ef41a08f6319888d058d50b81cf5511bda768cd4b59359ee', - getOpsxUpdateCommandTemplate: 'cf43a6bdcdc549180970ddde40893223493a55e171a39290731e0339df530975', + getUpdateChangeSkillTemplate: '6a5a269a7fdccbdbaf9edca56da45f07a8c844d07b9ca2c8588079730301bc5a', + getOpsxUpdateCommandTemplate: '08a36f63d16ab3edd95037fb2102fbf2f07d299ac11136ba5bd918988d085e0c', }; const EXPECTED_GENERATED_SKILL_CONTENT_HASHES: Record = { 'openspec-explore': 'c8de6033b2c78009647647c65a504e4ada1a3bdcee31aed38a4bf7d629513f6e', - 'openspec-new-change': 'd5b8909bea70a33b7a312b38ce204a91f40b6bb2bff12c4c06b3e11641b6a689', - 'openspec-continue-change': '02ec4de061ad6277866b877497a1e66142ba364e12b83dd7dedb838579ea88db', - 'openspec-apply-change': '5c8676a0e4285da265f39b5912522b4a4674083afadb50a5c0bc5286c065c98b', - 'openspec-ff-change': 'ff3bd3eac427a1e50071ad7c70f73b556cffa3db43e90da2726e96849c3fc886', - 'openspec-sync-specs': '46cb69d2aa56b4ff681a5dc826cc4b50cd2a1698134568923048868c97a3f19e', - 'openspec-archive-change': '07f613e50cb94d24ef2d66d55337b379e2f9f726ee8eca9cfe3902b5798b69c3', - 'openspec-bulk-archive-change': 'a2e7a5bc88b2189e080e10f54a1609b03d5ae6b75201e8aa7d07f1c1cf7cfcab', - 'openspec-verify-change': '57693d22940f06080c6cf8d590ac2f48240d4a5e9ce7074dacd0f8d3c9945afa', + 'openspec-new-change': '165543b5463487a5a4a4d1d1a78dbc4af3748dcde3a1a99759c8346598824c25', + 'openspec-continue-change': 'e6420944c45cdab0dd6e2148926ae56e712e811c16050eb67f52d27668338313', + 'openspec-apply-change': 'a5ec7351a8bbfe94a6d17fc901702603854dc33b603ad93d1fbe1c55140f0181', + 'openspec-ff-change': '15735c625d7478b20730b1f5a79d5906c97543a8439fbf4daac19ec133c8fdcb', + 'openspec-sync-specs': '521bfc32200d24a3dcff92e55bb337f8dda559e56bfd79d8cc011c586ff05bc7', + 'openspec-archive-change': '5fdf400749a37f7028ab88eeb4d85cab3fcf4a94b1754676a07bd5728847281c', + 'openspec-bulk-archive-change': 'a06c36cc663884f14a2c12a69d2bf7ed711c9b4d241c3ae8a85a549ec22994bc', + 'openspec-verify-change': 'a4128312a92585aaaaf0c0d23ad72234f02597c8d0cb6a82eb04362efe2e9fc5', 'openspec-onboard': '1d581c12d4928d751eb79de099e275dabe9c99fc15dc1f502abebd99ad7cb7d2', - 'openspec-propose': '4638400113946f4f1ee9f0bd0e965aafb200bd89b64ec7f5406ef5e948e8e218', - 'openspec-update-change': '4e6669540bc5332b72db7dd432625cc4b45234ae7674f9b46fcd1309b9697b0d', + 'openspec-propose': '1a9de3b47d395b57ec7114da6e52136cf36af1d24eafb13d606cf7a3d45d9ab6', + 'openspec-update-change': '65723f3e28eeab1b531f31ca9074b2606ac79642156c1438b0564b0034d2b147', }; // Intentionally excludes getFeedbackSkillTemplate: this list only models templates