diff --git a/.agents/skills/deploy/SKILL.md b/.agents/skills/deploy/SKILL.md index 48dadbe..4523b10 100644 --- a/.agents/skills/deploy/SKILL.md +++ b/.agents/skills/deploy/SKILL.md @@ -117,7 +117,19 @@ If the user chose a bump level, map their response to a command: | "major" | `make bump-major` | | A specific version e.g. "2.4.5" | `make set-version V= 2.4.5` | -These commands update the version manifest, create a git commit, and create a git tag. Do not create commits or tags manually. +These commands update the version manifest, create a git commit, and create a git tag. + +After the bump command runs, verify the tag was actually created: + +```bash +git tag -l "v" +``` + +If the tag is missing (some git configs like `tag.forceSignAnnotated = true` reject lightweight tags silently), create an annotated tag as a fallback: + +```bash +git tag -a "v" -m "v" +``` Push the version bump: ```bash @@ -253,4 +265,4 @@ After the command runs, note the release URL from the output. Tell the user: > "Released vX.Y.Z. Issues #N, #M closed automatically. GitHub Release vX.Y.Z created at ``. Run `make deploy-prod` to ship to production." - + diff --git a/.agents/skills/start/SKILL.md b/.agents/skills/start/SKILL.md index c8f0433..a1922d0 100644 --- a/.agents/skills/start/SKILL.md +++ b/.agents/skills/start/SKILL.md @@ -25,6 +25,8 @@ Otherwise → go to **Case A: New work**. > Skip this entirely if `$ARGUMENTS` triggered Case B. +> **Execution order:** Resolve labels and milestones **now**, before entering Case A Step 1. If milestone auto-detection requires a user prompt (2+ open milestones), that prompt happens here — not later during issue creation. By the time you reach Step 2's human gate, all metadata must already be resolved so that Step 3 can proceed without re-prompting. + The argument string may contain optional inline flags after the description. Parse as follows: 1. **Identify flags** — scan for the first token that starts with `--label`, `-l`, `--milestone`, or `-m`. Everything before it is the **description**. Everything from the first flag onward is **flags**. @@ -147,9 +149,9 @@ gh issue create \ > **IMPORTANT — never pass body content inline in the `gh` command.** Do not use `--body`, `--body-file -`, heredocs (`<` — is the only approach that works without prompts across Claude Code, Gemini CLI, Cursor, and Codex. -Resolve labels and milestone using the resolution steps in the Parsing section above: -- **Labels**: use the value from three-tier label resolution. If non-empty, add `--label ""` to the command. If empty (no flag, empty pool, creation not allowed), omit `--label` entirely. -- **Milestone**: use the value from three-tier milestone resolution. If non-empty, add `--milestone ""` to the command. If empty (no flag, no config default, no open milestones), omit `--milestone` entirely. +Use the labels and milestone you already resolved in the Parsing section (before Step 1). Do **not** re-run label or milestone resolution here — the values are final: +- **Labels**: if non-empty, add `--label ""` to the command. If empty, omit `--label` entirely. +- **Milestone**: if non-empty, add `--milestone ""` to the command. If empty, omit `--milestone` entirely. **Body structure (required sections, in this order):** @@ -313,4 +315,4 @@ When done, say: **"The code is ready for review. Please run `make dev` and test - The issue is assigned to `@me` at creation. If you are creating a ticket on someone else's behalf, remove the assignee after creation with `gh issue edit --remove-assignee @me`. - Apply resolved labels and milestone to every new issue. Label resolution order: per-invocation flag → pool selection from `bug, documentation, enhancement, chore` → omit `--label` entirely. Never apply a label outside `bug, documentation, enhancement, chore`. - Milestone resolution order: per-invocation flag → auto-detected from GitHub open milestones. Never prompt for a milestone more than once per invocation. - + diff --git a/.claude/commands/deploy.md b/.claude/commands/deploy.md index 54a296d..2217a29 100644 --- a/.claude/commands/deploy.md +++ b/.claude/commands/deploy.md @@ -112,7 +112,19 @@ If the user chose a bump level, map their response to a command: | "major" | `make bump-major` | | A specific version e.g. "2.4.5" | `make set-version V= 2.4.5` | -These commands update the version manifest, create a git commit, and create a git tag. Do not create commits or tags manually. +These commands update the version manifest, create a git commit, and create a git tag. + +After the bump command runs, verify the tag was actually created: + +```bash +git tag -l "v" +``` + +If the tag is missing (some git configs like `tag.forceSignAnnotated = true` reject lightweight tags silently), create an annotated tag as a fallback: + +```bash +git tag -a "v" -m "v" +``` Push the version bump: ```bash @@ -248,4 +260,4 @@ After the command runs, note the release URL from the output. Tell the user: > "Released vX.Y.Z. Issues #N, #M closed automatically. GitHub Release vX.Y.Z created at ``. Run `make deploy-prod` to ship to production." - + diff --git a/.claude/commands/start.md b/.claude/commands/start.md index ca98ac5..f81ce74 100644 --- a/.claude/commands/start.md +++ b/.claude/commands/start.md @@ -20,6 +20,8 @@ Otherwise → go to **Case A: New work**. > Skip this entirely if `$ARGUMENTS` triggered Case B. +> **Execution order:** Resolve labels and milestones **now**, before entering Case A Step 1. If milestone auto-detection requires a user prompt (2+ open milestones), that prompt happens here — not later during issue creation. By the time you reach Step 2's human gate, all metadata must already be resolved so that Step 3 can proceed without re-prompting. + The argument string may contain optional inline flags after the description. Parse as follows: 1. **Identify flags** — scan for the first token that starts with `--label`, `-l`, `--milestone`, or `-m`. Everything before it is the **description**. Everything from the first flag onward is **flags**. @@ -142,9 +144,9 @@ gh issue create \ > **IMPORTANT — never pass body content inline in the `gh` command.** Do not use `--body`, `--body-file -`, heredocs (`<` — is the only approach that works without prompts across Claude Code, Gemini CLI, Cursor, and Codex. -Resolve labels and milestone using the resolution steps in the Parsing section above: -- **Labels**: use the value from three-tier label resolution. If non-empty, add `--label ""` to the command. If empty (no flag, empty pool, creation not allowed), omit `--label` entirely. -- **Milestone**: use the value from three-tier milestone resolution. If non-empty, add `--milestone ""` to the command. If empty (no flag, no config default, no open milestones), omit `--milestone` entirely. +Use the labels and milestone you already resolved in the Parsing section (before Step 1). Do **not** re-run label or milestone resolution here — the values are final: +- **Labels**: if non-empty, add `--label ""` to the command. If empty, omit `--label` entirely. +- **Milestone**: if non-empty, add `--milestone ""` to the command. If empty, omit `--milestone` entirely. **Body structure (required sections, in this order):** @@ -308,4 +310,4 @@ When done, say: **"The code is ready for review. Please run `make dev` and test - The issue is assigned to `@me` at creation. If you are creating a ticket on someone else's behalf, remove the assignee after creation with `gh issue edit --remove-assignee @me`. - Apply resolved labels and milestone to every new issue. Label resolution order: per-invocation flag → pool selection from `bug, documentation, enhancement, chore` → omit `--label` entirely. Never apply a label outside `bug, documentation, enhancement, chore`. - Milestone resolution order: per-invocation flag → auto-detected from GitHub open milestones. Never prompt for a milestone more than once per invocation. - + diff --git a/.cursor/rules/deploy.mdc b/.cursor/rules/deploy.mdc index 4bfab50..a55d216 100644 --- a/.cursor/rules/deploy.mdc +++ b/.cursor/rules/deploy.mdc @@ -118,7 +118,19 @@ If the user chose a bump level, map their response to a command: | "major" | `make bump-major` | | A specific version e.g. "2.4.5" | `make set-version V= 2.4.5` | -These commands update the version manifest, create a git commit, and create a git tag. Do not create commits or tags manually. +These commands update the version manifest, create a git commit, and create a git tag. + +After the bump command runs, verify the tag was actually created: + +```bash +git tag -l "v" +``` + +If the tag is missing (some git configs like `tag.forceSignAnnotated = true` reject lightweight tags silently), create an annotated tag as a fallback: + +```bash +git tag -a "v" -m "v" +``` Push the version bump: ```bash @@ -254,4 +266,4 @@ After the command runs, note the release URL from the output. Tell the user: > "Released vX.Y.Z. Issues #N, #M closed automatically. GitHub Release vX.Y.Z created at ``. Run `make deploy-prod` to ship to production." - + diff --git a/.cursor/rules/start.mdc b/.cursor/rules/start.mdc index 858828e..2519980 100644 --- a/.cursor/rules/start.mdc +++ b/.cursor/rules/start.mdc @@ -26,6 +26,8 @@ Otherwise → go to **Case A: New work**. > Skip this entirely if `$ARGUMENTS` triggered Case B. +> **Execution order:** Resolve labels and milestones **now**, before entering Case A Step 1. If milestone auto-detection requires a user prompt (2+ open milestones), that prompt happens here — not later during issue creation. By the time you reach Step 2's human gate, all metadata must already be resolved so that Step 3 can proceed without re-prompting. + The argument string may contain optional inline flags after the description. Parse as follows: 1. **Identify flags** — scan for the first token that starts with `--label`, `-l`, `--milestone`, or `-m`. Everything before it is the **description**. Everything from the first flag onward is **flags**. @@ -148,9 +150,9 @@ gh issue create \ > **IMPORTANT — never pass body content inline in the `gh` command.** Do not use `--body`, `--body-file -`, heredocs (`<` — is the only approach that works without prompts across Claude Code, Gemini CLI, Cursor, and Codex. -Resolve labels and milestone using the resolution steps in the Parsing section above: -- **Labels**: use the value from three-tier label resolution. If non-empty, add `--label ""` to the command. If empty (no flag, empty pool, creation not allowed), omit `--label` entirely. -- **Milestone**: use the value from three-tier milestone resolution. If non-empty, add `--milestone ""` to the command. If empty (no flag, no config default, no open milestones), omit `--milestone` entirely. +Use the labels and milestone you already resolved in the Parsing section (before Step 1). Do **not** re-run label or milestone resolution here — the values are final: +- **Labels**: if non-empty, add `--label ""` to the command. If empty, omit `--label` entirely. +- **Milestone**: if non-empty, add `--milestone ""` to the command. If empty, omit `--milestone` entirely. **Body structure (required sections, in this order):** @@ -314,4 +316,4 @@ When done, say: **"The code is ready for review. Please run `make dev` and test - The issue is assigned to `@me` at creation. If you are creating a ticket on someone else's behalf, remove the assignee after creation with `gh issue edit --remove-assignee @me`. - Apply resolved labels and milestone to every new issue. Label resolution order: per-invocation flag → pool selection from `bug, documentation, enhancement, chore` → omit `--label` entirely. Never apply a label outside `bug, documentation, enhancement, chore`. - Milestone resolution order: per-invocation flag → auto-detected from GitHub open milestones. Never prompt for a milestone more than once per invocation. - + diff --git a/.gemini/skills/deploy/SKILL.md b/.gemini/skills/deploy/SKILL.md index 0671f7f..b24e427 100644 --- a/.gemini/skills/deploy/SKILL.md +++ b/.gemini/skills/deploy/SKILL.md @@ -117,7 +117,19 @@ If the user chose a bump level, map their response to a command: | "major" | `make bump-major` | | A specific version e.g. "2.4.5" | `make set-version V= 2.4.5` | -These commands update the version manifest, create a git commit, and create a git tag. Do not create commits or tags manually. +These commands update the version manifest, create a git commit, and create a git tag. + +After the bump command runs, verify the tag was actually created: + +```bash +git tag -l "v" +``` + +If the tag is missing (some git configs like `tag.forceSignAnnotated = true` reject lightweight tags silently), create an annotated tag as a fallback: + +```bash +git tag -a "v" -m "v" +``` Push the version bump: ```bash @@ -253,4 +265,4 @@ After the command runs, note the release URL from the output. Tell the user: > "Released vX.Y.Z. Issues #N, #M closed automatically. GitHub Release vX.Y.Z created at ``. Run `make deploy-prod` to ship to production." - + diff --git a/.gemini/skills/start/SKILL.md b/.gemini/skills/start/SKILL.md index 5008a87..697501b 100644 --- a/.gemini/skills/start/SKILL.md +++ b/.gemini/skills/start/SKILL.md @@ -25,6 +25,8 @@ Otherwise → go to **Case A: New work**. > Skip this entirely if `$ARGUMENTS` triggered Case B. +> **Execution order:** Resolve labels and milestones **now**, before entering Case A Step 1. If milestone auto-detection requires a user prompt (2+ open milestones), that prompt happens here — not later during issue creation. By the time you reach Step 2's human gate, all metadata must already be resolved so that Step 3 can proceed without re-prompting. + The argument string may contain optional inline flags after the description. Parse as follows: 1. **Identify flags** — scan for the first token that starts with `--label`, `-l`, `--milestone`, or `-m`. Everything before it is the **description**. Everything from the first flag onward is **flags**. @@ -147,9 +149,9 @@ gh issue create \ > **IMPORTANT — never pass body content inline in the `gh` command.** Do not use `--body`, `--body-file -`, heredocs (`<` — is the only approach that works without prompts across Claude Code, Gemini CLI, Cursor, and Codex. -Resolve labels and milestone using the resolution steps in the Parsing section above: -- **Labels**: use the value from three-tier label resolution. If non-empty, add `--label ""` to the command. If empty (no flag, empty pool, creation not allowed), omit `--label` entirely. -- **Milestone**: use the value from three-tier milestone resolution. If non-empty, add `--milestone ""` to the command. If empty (no flag, no config default, no open milestones), omit `--milestone` entirely. +Use the labels and milestone you already resolved in the Parsing section (before Step 1). Do **not** re-run label or milestone resolution here — the values are final: +- **Labels**: if non-empty, add `--label ""` to the command. If empty, omit `--label` entirely. +- **Milestone**: if non-empty, add `--milestone ""` to the command. If empty, omit `--milestone` entirely. **Body structure (required sections, in this order):** @@ -313,4 +315,4 @@ When done, say: **"The code is ready for review. Please run `make dev` and test - The issue is assigned to `@me` at creation. If you are creating a ticket on someone else's behalf, remove the assignee after creation with `gh issue edit --remove-assignee @me`. - Apply resolved labels and milestone to every new issue. Label resolution order: per-invocation flag → pool selection from `bug, documentation, enhancement, chore` → omit `--label` entirely. Never apply a label outside `bug, documentation, enhancement, chore`. - Milestone resolution order: per-invocation flag → auto-detected from GitHub open milestones. Never prompt for a milestone more than once per invocation. - + diff --git a/skills/deploy.md b/skills/deploy.md index ffdcd4b..b584b13 100644 --- a/skills/deploy.md +++ b/skills/deploy.md @@ -148,7 +148,19 @@ If the user chose a bump level, map their response to a command: | "major" | `{{BUMP_MAJOR_CMD}}` | | A specific version e.g. "2.4.5" | `{{SET_VERSION_CMD}} 2.4.5` | -These commands update the version manifest, create a git commit, and create a git tag. Do not create commits or tags manually. +These commands update the version manifest, create a git commit, and create a git tag. + +After the bump command runs, verify the tag was actually created: + +```bash +git tag -l "v" +``` + +If the tag is missing (some git configs like `tag.forceSignAnnotated = true` reject lightweight tags silently), create an annotated tag as a fallback: + +```bash +git tag -a "v" -m "v" +``` Push the version bump: ```bash diff --git a/skills/start.md b/skills/start.md index d2d15a1..98a1bc8 100644 --- a/skills/start.md +++ b/skills/start.md @@ -23,6 +23,8 @@ Otherwise → go to **Case A: New work**. > Skip this entirely if `$ARGUMENTS` triggered Case B. +> **Execution order:** Resolve labels and milestones **now**, before entering Case A Step 1. If milestone auto-detection requires a user prompt (2+ open milestones), that prompt happens here — not later during issue creation. By the time you reach Step 2's human gate, all metadata must already be resolved so that Step 3 can proceed without re-prompting. + The argument string may contain optional inline flags after the description. Parse as follows: 1. **Identify flags** — scan for the first token that starts with `--label`, `-l`, `--milestone`, or `-m`. Everything before it is the **description**. Everything from the first flag onward is **flags**. @@ -190,9 +192,9 @@ gh issue create \ > **IMPORTANT — never pass body content inline in the `gh` command.** Do not use `--body`, `--body-file -`, heredocs (`<` — is the only approach that works without prompts across Claude Code, Gemini CLI, Cursor, and Codex. -Resolve labels and milestone using the resolution steps in the Parsing section above: -- **Labels**: use the value from three-tier label resolution. If non-empty, add `--label ""` to the command. If empty (no flag, empty pool, creation not allowed), omit `--label` entirely. -- **Milestone**: use the value from three-tier milestone resolution. If non-empty, add `--milestone ""` to the command. If empty (no flag, no config default, no open milestones), omit `--milestone` entirely. +Use the labels and milestone you already resolved in the Parsing section (before Step 1). Do **not** re-run label or milestone resolution here — the values are final: +- **Labels**: if non-empty, add `--label ""` to the command. If empty, omit `--label` entirely. +- **Milestone**: if non-empty, add `--milestone ""` to the command. If empty, omit `--milestone` entirely. **Body structure (required sections, in this order):**