From f339a8316782313a5fa9317d8f07cd0420afb11f Mon Sep 17 00:00:00 2001 From: Sebastien Taggart Date: Wed, 5 Aug 2026 18:24:57 -0400 Subject: [PATCH 1/2] Add START_APPROVAL_GATE and ISSUE_FULL_STRUCTURE dials to relax /start ceremony --- .agents/skills/setup/SKILL.md | 8 ++++---- .agents/skills/start/SKILL.md | 4 ++-- .claude/commands/setup.md | 8 ++++---- .claude/commands/start.md | 4 ++-- .codecannon.yaml | 2 ++ .cursor/rules/setup.mdc | 8 ++++---- .cursor/rules/start.mdc | 4 ++-- .gemini/skills/setup/SKILL.md | 8 ++++---- .gemini/skills/start/SKILL.md | 4 ++-- config.schema.yaml | 28 ++++++++++++++++++++++++++++ skills/github-agile/setup.md | 6 +++--- skills/github-agile/start.md | 21 ++++++++++++++++++++- templates/codecannon.yaml | 10 ++++++++++ 13 files changed, 87 insertions(+), 28 deletions(-) diff --git a/.agents/skills/setup/SKILL.md b/.agents/skills/setup/SKILL.md index 6e45964..ba7fb45 100644 --- a/.agents/skills/setup/SKILL.md +++ b/.agents/skills/setup/SKILL.md @@ -148,7 +148,7 @@ Ask the user: > "What level of process does this project need?" > -> **1. Lightweight** — Fast iteration. AI review is advisory, features merge to main, no QA workflow. +> **1. Lightweight** — Fast iteration. AI review is advisory, features merge to main, no QA workflow, and `/start` skips its approval gate and mandated issue structure. > > **2. Standard** — Integration branch with AI-gated review. QA and milestones available but not required. > @@ -171,7 +171,7 @@ Show every change before writing and ask "Apply these values to `.codecannon.yam | Profile | Values to write | Values left commented out | |---|---|---| -| **Lightweight** | `BRANCH_PROD`, `REVIEW_GATE: "advisory"` | `BRANCH_DEV`, `BRANCH_TEST`, `DEFAULT_REVIEWERS`, `TICKET_LABELS`, all QA labels | +| **Lightweight** | `BRANCH_PROD`, `REVIEW_GATE: "advisory"`, `START_APPROVAL_GATE: "false"`, `ISSUE_FULL_STRUCTURE: "false"` | `BRANCH_DEV`, `BRANCH_TEST`, `DEFAULT_REVIEWERS`, `TICKET_LABELS`, all QA labels | | **Standard** | `BRANCH_PROD`, `BRANCH_DEV`, `REVIEW_GATE: "ai"` | `BRANCH_TEST`, QA labels | | **Governed** | `BRANCH_PROD`, `BRANCH_DEV`, `REVIEW_GATE: "ai"`, `QA_READY_LABEL: "ready-for-qa"`, `QA_PASSED_LABEL: "qa-passed"`, `QA_FAILED_LABEL: "qa-failed"`, and `BRANCH_TEST` if applicable | — | | **Custom** | Nothing — tell the user to review the file manually | — | @@ -237,7 +237,7 @@ git show-ref --quiet --verify refs/remotes/origin/ git show-ref --quiet --verify refs/remotes/origin/ ``` -Confirm the setup is healthy and show a scannable summary — lay it out however reads clearly. Include the inferred profile, the core workflow values (`BRANCH_PROD`; `BRANCH_DEV` and `BRANCH_TEST`, each with whether it exists in the remote; `REVIEW_GATE`; `CHECK_CMD`; `MERGE_CMD`; and the configured adapters), and then each optional config value reported as set or unset: `DEFAULT_MILESTONE`, `DEFAULT_REVIEWERS`, `TICKET_LABELS` (with label count when set), `TICKET_LABEL_CREATION_ALLOWED`, the QA labels, `PLATFORM_COMPLIANCE_NOTES`, `CONVENTIONS_NOTES`, `SENSITIVE_AREAS_GATE` (`"true"` default / `"false"`), and `SENSITIVE_AREAS_CATEGORIES` (custom list / default 5-category list). +Confirm the setup is healthy and show a scannable summary — lay it out however reads clearly. Include the inferred profile, the core workflow values (`BRANCH_PROD`; `BRANCH_DEV` and `BRANCH_TEST`, each with whether it exists in the remote; `REVIEW_GATE`; `START_APPROVAL_GATE` (`"true"` default / `"false"`); `ISSUE_FULL_STRUCTURE` (`"true"` default / `"false"`); `CHECK_CMD`; `MERGE_CMD`; and the configured adapters), and then each optional config value reported as set or unset: `DEFAULT_MILESTONE`, `DEFAULT_REVIEWERS`, `TICKET_LABELS` (with label count when set), `TICKET_LABEL_CREATION_ALLOWED`, the QA labels, `PLATFORM_COMPLIANCE_NOTES`, `CONVENTIONS_NOTES`, `SENSITIVE_AREAS_GATE` (`"true"` default / `"false"`), and `SENSITIVE_AREAS_CATEGORIES` (custom list / default 5-category list). A value counts as "set" if it is present, uncommented, and non-empty in `.codecannon.yaml`. @@ -392,4 +392,4 @@ Add a note: `/start` can be used to create well-formed GitHub issues without wri - Never fetch more than 100 labels in a single command. `gh label list --limit 100` is the ceiling. - Do not skip any human gate in Phase 3, Phase 4, or Phase 5 — each write requires confirmation. - If the user skips a config value, do not ask again. Move on. - + diff --git a/.agents/skills/start/SKILL.md b/.agents/skills/start/SKILL.md index a275a43..16b5fb9 100644 --- a/.agents/skills/start/SKILL.md +++ b/.agents/skills/start/SKILL.md @@ -94,7 +94,7 @@ If on any other branch → proceed to Case A or Case B as determined by the `$AR Read the relevant code using your harness's native file-reading and search tools (read, grep/glob, and the like) rather than shell pipelines — hand-rolled `find … | xargs`, `grep ; awk`, or redirection shapes trigger permission prompts that cannot be permanently allowed. Then propose a concrete implementation approach, specific about which files change and how. -### Step 2 — HUMAN GATE +### Step 2 — Approach checkpoint Say exactly: @@ -340,4 +340,4 @@ When done, say: **"When you've verified locally, reply `yes` to submit, or say w - 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/setup.md b/.claude/commands/setup.md index ec3d9e0..33708cc 100644 --- a/.claude/commands/setup.md +++ b/.claude/commands/setup.md @@ -143,7 +143,7 @@ Ask the user: > "What level of process does this project need?" > -> **1. Lightweight** — Fast iteration. AI review is advisory, features merge to main, no QA workflow. +> **1. Lightweight** — Fast iteration. AI review is advisory, features merge to main, no QA workflow, and `/start` skips its approval gate and mandated issue structure. > > **2. Standard** — Integration branch with AI-gated review. QA and milestones available but not required. > @@ -166,7 +166,7 @@ Show every change before writing and ask "Apply these values to `.codecannon.yam | Profile | Values to write | Values left commented out | |---|---|---| -| **Lightweight** | `BRANCH_PROD`, `REVIEW_GATE: "advisory"` | `BRANCH_DEV`, `BRANCH_TEST`, `DEFAULT_REVIEWERS`, `TICKET_LABELS`, all QA labels | +| **Lightweight** | `BRANCH_PROD`, `REVIEW_GATE: "advisory"`, `START_APPROVAL_GATE: "false"`, `ISSUE_FULL_STRUCTURE: "false"` | `BRANCH_DEV`, `BRANCH_TEST`, `DEFAULT_REVIEWERS`, `TICKET_LABELS`, all QA labels | | **Standard** | `BRANCH_PROD`, `BRANCH_DEV`, `REVIEW_GATE: "ai"` | `BRANCH_TEST`, QA labels | | **Governed** | `BRANCH_PROD`, `BRANCH_DEV`, `REVIEW_GATE: "ai"`, `QA_READY_LABEL: "ready-for-qa"`, `QA_PASSED_LABEL: "qa-passed"`, `QA_FAILED_LABEL: "qa-failed"`, and `BRANCH_TEST` if applicable | — | | **Custom** | Nothing — tell the user to review the file manually | — | @@ -232,7 +232,7 @@ git show-ref --quiet --verify refs/remotes/origin/ git show-ref --quiet --verify refs/remotes/origin/ ``` -Confirm the setup is healthy and show a scannable summary — lay it out however reads clearly. Include the inferred profile, the core workflow values (`BRANCH_PROD`; `BRANCH_DEV` and `BRANCH_TEST`, each with whether it exists in the remote; `REVIEW_GATE`; `CHECK_CMD`; `MERGE_CMD`; and the configured adapters), and then each optional config value reported as set or unset: `DEFAULT_MILESTONE`, `DEFAULT_REVIEWERS`, `TICKET_LABELS` (with label count when set), `TICKET_LABEL_CREATION_ALLOWED`, the QA labels, `PLATFORM_COMPLIANCE_NOTES`, `CONVENTIONS_NOTES`, `SENSITIVE_AREAS_GATE` (`"true"` default / `"false"`), and `SENSITIVE_AREAS_CATEGORIES` (custom list / default 5-category list). +Confirm the setup is healthy and show a scannable summary — lay it out however reads clearly. Include the inferred profile, the core workflow values (`BRANCH_PROD`; `BRANCH_DEV` and `BRANCH_TEST`, each with whether it exists in the remote; `REVIEW_GATE`; `START_APPROVAL_GATE` (`"true"` default / `"false"`); `ISSUE_FULL_STRUCTURE` (`"true"` default / `"false"`); `CHECK_CMD`; `MERGE_CMD`; and the configured adapters), and then each optional config value reported as set or unset: `DEFAULT_MILESTONE`, `DEFAULT_REVIEWERS`, `TICKET_LABELS` (with label count when set), `TICKET_LABEL_CREATION_ALLOWED`, the QA labels, `PLATFORM_COMPLIANCE_NOTES`, `CONVENTIONS_NOTES`, `SENSITIVE_AREAS_GATE` (`"true"` default / `"false"`), and `SENSITIVE_AREAS_CATEGORIES` (custom list / default 5-category list). A value counts as "set" if it is present, uncommented, and non-empty in `.codecannon.yaml`. @@ -387,4 +387,4 @@ Add a note: `/start` can be used to create well-formed GitHub issues without wri - Never fetch more than 100 labels in a single command. `gh label list --limit 100` is the ceiling. - Do not skip any human gate in Phase 3, Phase 4, or Phase 5 — each write requires confirmation. - If the user skips a config value, do not ask again. Move on. - + diff --git a/.claude/commands/start.md b/.claude/commands/start.md index bc69cc3..79f0b8e 100644 --- a/.claude/commands/start.md +++ b/.claude/commands/start.md @@ -89,7 +89,7 @@ If on any other branch → proceed to Case A or Case B as determined by the `$AR Read the relevant code using your harness's native file-reading and search tools (read, grep/glob, and the like) rather than shell pipelines — hand-rolled `find … | xargs`, `grep ; awk`, or redirection shapes trigger permission prompts that cannot be permanently allowed. Then propose a concrete implementation approach, specific about which files change and how. -### Step 2 — HUMAN GATE +### Step 2 — Approach checkpoint Say exactly: @@ -335,4 +335,4 @@ When done, say: **"When you've verified locally, reply `yes` to submit, or say w - 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/.codecannon.yaml b/.codecannon.yaml index 8058b18..98144ca 100644 --- a/.codecannon.yaml +++ b/.codecannon.yaml @@ -26,6 +26,8 @@ config: BRANCH_TEST: "" REVIEW_GATE: "ai" REVIEW_EFFORT: "medium" + START_APPROVAL_GATE: "true" + ISSUE_FULL_STRUCTURE: "true" DEV_CMD: make dev ABANDON_CMD: make abandon CHECK_CMD: make check diff --git a/.cursor/rules/setup.mdc b/.cursor/rules/setup.mdc index 1e14f8f..53c9f10 100644 --- a/.cursor/rules/setup.mdc +++ b/.cursor/rules/setup.mdc @@ -149,7 +149,7 @@ Ask the user: > "What level of process does this project need?" > -> **1. Lightweight** — Fast iteration. AI review is advisory, features merge to main, no QA workflow. +> **1. Lightweight** — Fast iteration. AI review is advisory, features merge to main, no QA workflow, and `/start` skips its approval gate and mandated issue structure. > > **2. Standard** — Integration branch with AI-gated review. QA and milestones available but not required. > @@ -172,7 +172,7 @@ Show every change before writing and ask "Apply these values to `.codecannon.yam | Profile | Values to write | Values left commented out | |---|---|---| -| **Lightweight** | `BRANCH_PROD`, `REVIEW_GATE: "advisory"` | `BRANCH_DEV`, `BRANCH_TEST`, `DEFAULT_REVIEWERS`, `TICKET_LABELS`, all QA labels | +| **Lightweight** | `BRANCH_PROD`, `REVIEW_GATE: "advisory"`, `START_APPROVAL_GATE: "false"`, `ISSUE_FULL_STRUCTURE: "false"` | `BRANCH_DEV`, `BRANCH_TEST`, `DEFAULT_REVIEWERS`, `TICKET_LABELS`, all QA labels | | **Standard** | `BRANCH_PROD`, `BRANCH_DEV`, `REVIEW_GATE: "ai"` | `BRANCH_TEST`, QA labels | | **Governed** | `BRANCH_PROD`, `BRANCH_DEV`, `REVIEW_GATE: "ai"`, `QA_READY_LABEL: "ready-for-qa"`, `QA_PASSED_LABEL: "qa-passed"`, `QA_FAILED_LABEL: "qa-failed"`, and `BRANCH_TEST` if applicable | — | | **Custom** | Nothing — tell the user to review the file manually | — | @@ -238,7 +238,7 @@ git show-ref --quiet --verify refs/remotes/origin/ git show-ref --quiet --verify refs/remotes/origin/ ``` -Confirm the setup is healthy and show a scannable summary — lay it out however reads clearly. Include the inferred profile, the core workflow values (`BRANCH_PROD`; `BRANCH_DEV` and `BRANCH_TEST`, each with whether it exists in the remote; `REVIEW_GATE`; `CHECK_CMD`; `MERGE_CMD`; and the configured adapters), and then each optional config value reported as set or unset: `DEFAULT_MILESTONE`, `DEFAULT_REVIEWERS`, `TICKET_LABELS` (with label count when set), `TICKET_LABEL_CREATION_ALLOWED`, the QA labels, `PLATFORM_COMPLIANCE_NOTES`, `CONVENTIONS_NOTES`, `SENSITIVE_AREAS_GATE` (`"true"` default / `"false"`), and `SENSITIVE_AREAS_CATEGORIES` (custom list / default 5-category list). +Confirm the setup is healthy and show a scannable summary — lay it out however reads clearly. Include the inferred profile, the core workflow values (`BRANCH_PROD`; `BRANCH_DEV` and `BRANCH_TEST`, each with whether it exists in the remote; `REVIEW_GATE`; `START_APPROVAL_GATE` (`"true"` default / `"false"`); `ISSUE_FULL_STRUCTURE` (`"true"` default / `"false"`); `CHECK_CMD`; `MERGE_CMD`; and the configured adapters), and then each optional config value reported as set or unset: `DEFAULT_MILESTONE`, `DEFAULT_REVIEWERS`, `TICKET_LABELS` (with label count when set), `TICKET_LABEL_CREATION_ALLOWED`, the QA labels, `PLATFORM_COMPLIANCE_NOTES`, `CONVENTIONS_NOTES`, `SENSITIVE_AREAS_GATE` (`"true"` default / `"false"`), and `SENSITIVE_AREAS_CATEGORIES` (custom list / default 5-category list). A value counts as "set" if it is present, uncommented, and non-empty in `.codecannon.yaml`. @@ -393,4 +393,4 @@ Add a note: `/start` can be used to create well-formed GitHub issues without wri - Never fetch more than 100 labels in a single command. `gh label list --limit 100` is the ceiling. - Do not skip any human gate in Phase 3, Phase 4, or Phase 5 — each write requires confirmation. - If the user skips a config value, do not ask again. Move on. - + diff --git a/.cursor/rules/start.mdc b/.cursor/rules/start.mdc index f6f451c..e6d37a9 100644 --- a/.cursor/rules/start.mdc +++ b/.cursor/rules/start.mdc @@ -95,7 +95,7 @@ If on any other branch → proceed to Case A or Case B as determined by the `$AR Read the relevant code using your harness's native file-reading and search tools (read, grep/glob, and the like) rather than shell pipelines — hand-rolled `find … | xargs`, `grep ; awk`, or redirection shapes trigger permission prompts that cannot be permanently allowed. Then propose a concrete implementation approach, specific about which files change and how. -### Step 2 — HUMAN GATE +### Step 2 — Approach checkpoint Say exactly: @@ -341,4 +341,4 @@ When done, say: **"When you've verified locally, reply `yes` to submit, or say w - 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/setup/SKILL.md b/.gemini/skills/setup/SKILL.md index 010ea67..1999d9a 100644 --- a/.gemini/skills/setup/SKILL.md +++ b/.gemini/skills/setup/SKILL.md @@ -148,7 +148,7 @@ Ask the user: > "What level of process does this project need?" > -> **1. Lightweight** — Fast iteration. AI review is advisory, features merge to main, no QA workflow. +> **1. Lightweight** — Fast iteration. AI review is advisory, features merge to main, no QA workflow, and `/start` skips its approval gate and mandated issue structure. > > **2. Standard** — Integration branch with AI-gated review. QA and milestones available but not required. > @@ -171,7 +171,7 @@ Show every change before writing and ask "Apply these values to `.codecannon.yam | Profile | Values to write | Values left commented out | |---|---|---| -| **Lightweight** | `BRANCH_PROD`, `REVIEW_GATE: "advisory"` | `BRANCH_DEV`, `BRANCH_TEST`, `DEFAULT_REVIEWERS`, `TICKET_LABELS`, all QA labels | +| **Lightweight** | `BRANCH_PROD`, `REVIEW_GATE: "advisory"`, `START_APPROVAL_GATE: "false"`, `ISSUE_FULL_STRUCTURE: "false"` | `BRANCH_DEV`, `BRANCH_TEST`, `DEFAULT_REVIEWERS`, `TICKET_LABELS`, all QA labels | | **Standard** | `BRANCH_PROD`, `BRANCH_DEV`, `REVIEW_GATE: "ai"` | `BRANCH_TEST`, QA labels | | **Governed** | `BRANCH_PROD`, `BRANCH_DEV`, `REVIEW_GATE: "ai"`, `QA_READY_LABEL: "ready-for-qa"`, `QA_PASSED_LABEL: "qa-passed"`, `QA_FAILED_LABEL: "qa-failed"`, and `BRANCH_TEST` if applicable | — | | **Custom** | Nothing — tell the user to review the file manually | — | @@ -237,7 +237,7 @@ git show-ref --quiet --verify refs/remotes/origin/ git show-ref --quiet --verify refs/remotes/origin/ ``` -Confirm the setup is healthy and show a scannable summary — lay it out however reads clearly. Include the inferred profile, the core workflow values (`BRANCH_PROD`; `BRANCH_DEV` and `BRANCH_TEST`, each with whether it exists in the remote; `REVIEW_GATE`; `CHECK_CMD`; `MERGE_CMD`; and the configured adapters), and then each optional config value reported as set or unset: `DEFAULT_MILESTONE`, `DEFAULT_REVIEWERS`, `TICKET_LABELS` (with label count when set), `TICKET_LABEL_CREATION_ALLOWED`, the QA labels, `PLATFORM_COMPLIANCE_NOTES`, `CONVENTIONS_NOTES`, `SENSITIVE_AREAS_GATE` (`"true"` default / `"false"`), and `SENSITIVE_AREAS_CATEGORIES` (custom list / default 5-category list). +Confirm the setup is healthy and show a scannable summary — lay it out however reads clearly. Include the inferred profile, the core workflow values (`BRANCH_PROD`; `BRANCH_DEV` and `BRANCH_TEST`, each with whether it exists in the remote; `REVIEW_GATE`; `START_APPROVAL_GATE` (`"true"` default / `"false"`); `ISSUE_FULL_STRUCTURE` (`"true"` default / `"false"`); `CHECK_CMD`; `MERGE_CMD`; and the configured adapters), and then each optional config value reported as set or unset: `DEFAULT_MILESTONE`, `DEFAULT_REVIEWERS`, `TICKET_LABELS` (with label count when set), `TICKET_LABEL_CREATION_ALLOWED`, the QA labels, `PLATFORM_COMPLIANCE_NOTES`, `CONVENTIONS_NOTES`, `SENSITIVE_AREAS_GATE` (`"true"` default / `"false"`), and `SENSITIVE_AREAS_CATEGORIES` (custom list / default 5-category list). A value counts as "set" if it is present, uncommented, and non-empty in `.codecannon.yaml`. @@ -392,4 +392,4 @@ Add a note: `/start` can be used to create well-formed GitHub issues without wri - Never fetch more than 100 labels in a single command. `gh label list --limit 100` is the ceiling. - Do not skip any human gate in Phase 3, Phase 4, or Phase 5 — each write requires confirmation. - If the user skips a config value, do not ask again. Move on. - + diff --git a/.gemini/skills/start/SKILL.md b/.gemini/skills/start/SKILL.md index f248cef..de3caa3 100644 --- a/.gemini/skills/start/SKILL.md +++ b/.gemini/skills/start/SKILL.md @@ -94,7 +94,7 @@ If on any other branch → proceed to Case A or Case B as determined by the `$AR Read the relevant code using your harness's native file-reading and search tools (read, grep/glob, and the like) rather than shell pipelines — hand-rolled `find … | xargs`, `grep ; awk`, or redirection shapes trigger permission prompts that cannot be permanently allowed. Then propose a concrete implementation approach, specific about which files change and how. -### Step 2 — HUMAN GATE +### Step 2 — Approach checkpoint Say exactly: @@ -340,4 +340,4 @@ When done, say: **"When you've verified locally, reply `yes` to submit, or say w - 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/config.schema.yaml b/config.schema.yaml index 219f289..da5d2da 100644 --- a/config.schema.yaml +++ b/config.schema.yaml @@ -90,6 +90,34 @@ placeholders: category: workflow used_in: [submit-for-review] + START_APPROVAL_GATE: + description: > + Controls the human approval gates in /start. "true" (default): /start stops + and waits for the user to type `go` after proposing an approach (Case A) or + summarizing a resumed issue (Case B) before it creates the issue/branch and + writes code. "false": /start skips those gates — it states its approach for + the record and proceeds straight through to coding without stopping. Set to + "false" for solo, lower-ceremony projects where the stop-and-confirm step is + pure friction. The user can still interrupt at any point. Matched as a + case-insensitive string. + default: "true" + category: workflow + used_in: [start] + + ISSUE_FULL_STRUCTURE: + description: > + Controls how heavily /start documents the tickets it creates. "true" (default): + the issue body must use the full five-section template (Problem to Fix, Why it + Matters, General Approach, Complexity, Acceptance Criteria) and /start posts a + separate "Agent Implementation Notes" comment with the technical plan. "false": + /start writes a brief freeform issue body and skips the agent-notes comment — + the ticket still exists as a professional artifact, just without the mandated + structure. Set to "false" for solo, lower-ceremony projects. Matched as a + case-insensitive string. + default: "true" + category: workflow + used_in: [start] + DEV_CMD: description: "Start the local development server" default: "make dev" diff --git a/skills/github-agile/setup.md b/skills/github-agile/setup.md index fa636db..f7e2f27 100644 --- a/skills/github-agile/setup.md +++ b/skills/github-agile/setup.md @@ -146,7 +146,7 @@ Ask the user: > "What level of process does this project need?" > -> **1. Lightweight** — Fast iteration. AI review is advisory, features merge to main, no QA workflow. +> **1. Lightweight** — Fast iteration. AI review is advisory, features merge to main, no QA workflow, and `/start` skips its approval gate and mandated issue structure. > > **2. Standard** — Integration branch with AI-gated review. QA and milestones available but not required. > @@ -169,7 +169,7 @@ Show every change before writing and ask "Apply these values to `.codecannon.yam | Profile | Values to write | Values left commented out | |---|---|---| -| **Lightweight** | `BRANCH_PROD`, `REVIEW_GATE: "advisory"` | `BRANCH_DEV`, `BRANCH_TEST`, `DEFAULT_REVIEWERS`, `TICKET_LABELS`, all QA labels | +| **Lightweight** | `BRANCH_PROD`, `REVIEW_GATE: "advisory"`, `START_APPROVAL_GATE: "false"`, `ISSUE_FULL_STRUCTURE: "false"` | `BRANCH_DEV`, `BRANCH_TEST`, `DEFAULT_REVIEWERS`, `TICKET_LABELS`, all QA labels | | **Standard** | `BRANCH_PROD`, `BRANCH_DEV`, `REVIEW_GATE: "ai"` | `BRANCH_TEST`, QA labels | | **Governed** | `BRANCH_PROD`, `BRANCH_DEV`, `REVIEW_GATE: "ai"`, `QA_READY_LABEL: "ready-for-qa"`, `QA_PASSED_LABEL: "qa-passed"`, `QA_FAILED_LABEL: "qa-failed"`, and `BRANCH_TEST` if applicable | — | | **Custom** | Nothing — tell the user to review the file manually | — | @@ -235,7 +235,7 @@ git show-ref --quiet --verify refs/remotes/origin/ git show-ref --quiet --verify refs/remotes/origin/ ``` -Confirm the setup is healthy and show a scannable summary — lay it out however reads clearly. Include the inferred profile, the core workflow values (`BRANCH_PROD`; `BRANCH_DEV` and `BRANCH_TEST`, each with whether it exists in the remote; `REVIEW_GATE`; `CHECK_CMD`; `MERGE_CMD`; and the configured adapters), and then each optional config value reported as set or unset: `DEFAULT_MILESTONE`, `DEFAULT_REVIEWERS`, `TICKET_LABELS` (with label count when set), `TICKET_LABEL_CREATION_ALLOWED`, the QA labels, `PLATFORM_COMPLIANCE_NOTES`, `CONVENTIONS_NOTES`, `SENSITIVE_AREAS_GATE` (`"true"` default / `"false"`), and `SENSITIVE_AREAS_CATEGORIES` (custom list / default 5-category list). +Confirm the setup is healthy and show a scannable summary — lay it out however reads clearly. Include the inferred profile, the core workflow values (`BRANCH_PROD`; `BRANCH_DEV` and `BRANCH_TEST`, each with whether it exists in the remote; `REVIEW_GATE`; `START_APPROVAL_GATE` (`"true"` default / `"false"`); `ISSUE_FULL_STRUCTURE` (`"true"` default / `"false"`); `CHECK_CMD`; `MERGE_CMD`; and the configured adapters), and then each optional config value reported as set or unset: `DEFAULT_MILESTONE`, `DEFAULT_REVIEWERS`, `TICKET_LABELS` (with label count when set), `TICKET_LABEL_CREATION_ALLOWED`, the QA labels, `PLATFORM_COMPLIANCE_NOTES`, `CONVENTIONS_NOTES`, `SENSITIVE_AREAS_GATE` (`"true"` default / `"false"`), and `SENSITIVE_AREAS_CATEGORIES` (custom list / default 5-category list). A value counts as "set" if it is present, uncommented, and non-empty in `.codecannon.yaml`. diff --git a/skills/github-agile/start.md b/skills/github-agile/start.md index 104905e..93914a4 100644 --- a/skills/github-agile/start.md +++ b/skills/github-agile/start.md @@ -118,8 +118,9 @@ If on any other branch → proceed to Case A or Case B as determined by the `$AR Read the relevant code using your harness's native file-reading and search tools (read, grep/glob, and the like) rather than shell pipelines — hand-rolled `find … | xargs`, `grep ; awk`, or redirection shapes trigger permission prompts that cannot be permanently allowed. Then propose a concrete implementation approach, specific about which files change and how. -### Step 2 — HUMAN GATE +### Step 2 — Approach checkpoint +{{#if START_APPROVAL_GATE}} Say exactly: > **"Does this approach sound right? Type `go` to create a GitHub issue and branch, or share any questions/adjustments first. To delegate part of the work to another agent, run `/delegate ` before typing `go`."** @@ -129,6 +130,10 @@ Stop. Wait for the user to respond. The friendly text question is required regardless of harness mode. If your harness is currently in a preview / plan / dry-run mode where you cannot passively stop and wait (and must instead invoke the harness's own approval mechanism), still include the text question in your response. The harness's approval UI mediates the wait, but it is not a substitute for the question itself. Users expect to see the consistent text language across all modes; do not silently swap it for the harness's UI. Proceed only on unconditional approval. If the user's response includes conditions, questions, or adjustments, treat it as discussion — address their input and re-ask. If the user abandons ("never mind", "stop"), stop — nothing to clean up. +{{/if}} +{{#if !START_APPROVAL_GATE}} +This project runs `/start` without an approval gate. Do not stop to wait for a `go`. State your proposed approach in one or two sentences so it is on the record, then proceed directly to Step 3. The user can still interrupt to redirect or to delegate (`/delegate `) if they want to. +{{/if}} ### Step 3 — Create GitHub Issue @@ -161,6 +166,7 @@ Use the labels and milestone you already resolved in the Parsing section (before - **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. +{{#if ISSUE_FULL_STRUCTURE}} **Body structure (required sections, in this order):** ```markdown @@ -183,6 +189,12 @@ Use the labels and milestone you already resolved in the Parsing section (before ``` All five sections are required. Write for a non-developer audience — no code, no file paths. Acceptance Criteria must be concrete and verifiable (not vague goals). +{{/if}} +{{#if !ISSUE_FULL_STRUCTURE}} +**Body structure (lightweight):** + +Write a brief freeform body — a short paragraph or a few bullets covering what the change is and, if useful, a line of acceptance criteria. No mandated section headings. Keep it clear enough that a reader lands on the ticket and understands the intent, but do not pad it out to hit a template. +{{/if}} **Title rules:** - ✅ `Fix 'Contact Us' footer link pointing to 404 instead of /contact-us` @@ -192,6 +204,7 @@ After the command runs, note the issue number from the output URL (e.g. `https:/ Show the user: `Created issue #: ` +{{#if ISSUE_FULL_STRUCTURE}} Then immediately post agent implementation notes as a comment. Use your file-writing tool (not Bash) to create `<tmpdir>/issue_comment.md` (same temp directory from Step 3a): @@ -205,6 +218,7 @@ Then post it via the comment-posting script (do NOT use `gh issue comment` with ```bash python3 CodeCannon/skills/github-agile/scripts/post-issue-comment.py <number> <tmpdir>/issue_comment.md ``` +{{/if}} ### Step 4 — Create feature branch @@ -297,9 +311,14 @@ Tell the user: - What was previously done (from agent notes if present) - What appears to remain +{{#if START_APPROVAL_GATE}} Ask: **"Does this match your understanding? Type `go` to start coding, or share any questions/adjustments first. To delegate part of the work to another agent, run `/delegate <task description>` before typing `go`."** Proceed only on unconditional approval. If the user's response includes conditions, questions, or adjustments, treat it as discussion — address their input and re-ask. If the user wants a fresh start, restart as Case A. If the user abandons, stop — nothing to clean up. +{{/if}} +{{#if !START_APPROVAL_GATE}} +This project runs `/start` without an approval gate. Do not stop to wait for a `go` — proceed directly to Step 3. The user can still interrupt to redirect, to restart as Case A, or to delegate (`/delegate <task description>`) if they want to. +{{/if}} ### Step 3 — Investigation findings (conditional) diff --git a/templates/codecannon.yaml b/templates/codecannon.yaml index 5c8c86c..7100150 100644 --- a/templates/codecannon.yaml +++ b/templates/codecannon.yaml @@ -51,6 +51,16 @@ config: # is no native reviewer (those use REVIEW_AGENT_PROMPT inline). REVIEW_EFFORT: "medium" + # ── /start ceremony ────────────────────────────────────────────────────────── + # Two independent dials for how heavy /start feels. Both default to "true" (full + # ceremony). The Lightweight setup profile flips both to "false". + # START_APPROVAL_GATE "true": /start stops for a `go` before creating the issue/branch. + # "false": no stop — /start states its approach and proceeds straight to coding. + START_APPROVAL_GATE: "true" + # ISSUE_FULL_STRUCTURE "true": issues use the five-section template + agent-notes comment. + # "false": brief freeform issue body, no agent-notes comment. + ISSUE_FULL_STRUCTURE: "true" + # ── Workflow commands ──────────────────────────────────────────────────────── DEV_CMD: make dev ABANDON_CMD: make abandon From c4f0357934a43b457bf65a9a97017a149c8c100b Mon Sep 17 00:00:00 2001 From: Sebastien Taggart <sebastien.taggart@gmail.com> Date: Wed, 5 Aug 2026 18:32:50 -0400 Subject: [PATCH 2/2] Suppress Case B investigation-findings prompt when START_APPROVAL_GATE is off --- skills/github-agile/start.md | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/skills/github-agile/start.md b/skills/github-agile/start.md index 93914a4..7c9e3ea 100644 --- a/skills/github-agile/start.md +++ b/skills/github-agile/start.md @@ -324,6 +324,10 @@ This project runs `/start` without an approval gate. Do not stop to wait for a ` If the investigation in Steps 1–2 revealed anything that isn't already stated or implied by the issue body — a root cause correction, a related side-effect, a project-wide gotcha — present the findings. If the investigation simply confirmed the ticket, skip this step silently and proceed to Step 4. +{{#if !START_APPROVAL_GATE}} +This project runs `/start` without an approval gate — do not stop to prompt here. Default to skipping silently. If the investigation surfaced a genuine root-cause correction or project-wide gotcha worth preserving, post it as a comment without asking (create a temp dir with `make-workdir.py`, write `<tmpdir>/investigation_comment.md` with an `## Investigation Findings` bullet list, post via `post-issue-comment.py <number> <tmpdir>/investigation_comment.md`), then proceed to Step 4. Otherwise proceed directly to Step 4. +{{/if}} +{{#if START_APPROVAL_GATE}} Create a temp directory for this invocation: ```bash @@ -351,6 +355,7 @@ Present numbered findings: python3 CodeCannon/skills/github-agile/scripts/post-issue-comment.py <number> <tmpdir>/investigation_comment.md ``` - `skip` → proceed silently. +{{/if}} ### Step 4 — Check out branch