<!-- brainstorm-anti-bypass-protocol:start -->
Anti-bypass protocol (load-bearing — especially Grok Build)
You are the exploration orchestrator. Whether entered via /go (default route) → /brainstorm or direct /brainstorm:
- FORBIDDEN: Product code (Write/Edit/Shell on implementation files). Brainstorm answers WHAT, not HOW.
- FORBIDDEN: Ending after spec/brainstorm doc without a lifecycle handoff — artifacts alone are not deliverables.
- REQUIRED (Grok Build): Invoke successors via slash commands —
/plan(default) or/one-shot(when requirements are already clear). Do not read their SKILL.md and improvise. - Harness adapter:
plugins/soleur/lib/harness.ts— Grok uses/plan,/one-shot; Claude uses Skill tool (soleur:plan,soleur:one-shot).
See plugins/soleur/lib/workflow-fidelity.ts (BRAINSTORM_CHILD_SKILLS) and go.md Step 2.1 (go-post-route block). <!-- brainstorm-anti-bypass-protocol:end -->
Brainstorm a Feature or Improvement
Note: The current year is 2026. Use this when dating brainstorm documents.
Brainstorming helps answer WHAT to build through collaborative dialogue. It precedes the soleur:plan skill, which answers HOW to build it.
Process knowledge: Load the brainstorm-techniques skill for detailed question techniques, approach exploration patterns, and YAGNI principles.
Feature Description
<feature_description> #$ARGUMENTS </feature_description>
If the feature description above is empty, ask the user: "What would you like to explore? Please describe the feature, problem, or improvement you're thinking about."
Do not proceed until you have a feature description from the user.
Execution Flow
Phase 0: Setup and Assess Requirements Clarity
Load project conventions:
# Load project conventions
if [[ -f "CLAUDE.md" ]]; then
cat CLAUDE.md
fi
Read CLAUDE.md if it exists - apply project conventions during brainstorming.
Branch safety check (defense-in-depth): Run git branch --show-current. If the result is main or master, and knowledge-base/ exists, create the worktree immediately (pulling Phase 3 forward) so that dialogue and file writes happen on a feature branch. Derive the feature name from the feature description (kebab-case). Run SOLEUR_SKILL_NAME=brainstorm SOLEUR_EXPECTED_DURATION_MIN=60 ${CLAUDE_PLUGIN_ROOT:-./plugins/soleur}/skills/git-worktree/scripts/worktree-manager.sh feature <name> (env vars wire a session lease that blocks sibling cleanup-merged from reaping this worktree), then cd .worktrees/feat-<name>, then immediately run bash ${CLAUDE_PLUGIN_ROOT:-../../plugins/soleur}/skills/git-worktree/scripts/worktree-manager.sh draft-pr from inside the worktree to push the branch and open a draft PR before any further work. Set WORKTREE_CREATED_EARLY=true so Phase 3 skips worktree creation AND skips the duplicate draft-pr step. If knowledge-base/ does not exist, abort with: "Error: brainstorm cannot run on main/master without knowledge-base/. Checkout a feature branch first." This check fires in all modes as defense-in-depth alongside PreToolUse hooks -- it fires even if hooks are unavailable (e.g., in CI). Why push immediately: an unpushed feature branch can be wiped by a concurrent session's cleanup-merged sweep — the Phase 3 race-window warning applies the same way at Phase 0, just with a longer exposure (Phase 0.1, 0.25, 0.5, 1.0, 1.1, 1.2, and 2 all happen before Phase 3 today). See knowledge-base/project/learnings/2026-04-21-concurrent-cleanup-merged-wipes-active-worktree.md.
Pre-worktree premise probe (stale "doesn't exist" / "blocked by" / "deferred from" / "after PR #N" claims). BEFORE pulling Phase 3 forward, if the feature description contains a #N reference AND gh issue view <N> --json body body contains literal text matching does not yet exist OR deferred from #?\d+ OR blocked by #?\d+ OR temporal-precondition framings (after|when|gated on|pending) PR #?\d+ ?(merges|lands|ships|is merged)?, probe each cited reference: try gh pr view <ref> --json state,mergedAt first (the cited #N is often a PR not an issue, and mergedAt is the load-bearing field — a PR can be CLOSED-not-merged), fall back to gh issue view <ref> --json state,closedByPullRequestsReferences on PR-lookup failure; AND git show origin/main:<named-artifact> (NOT bare-repo ls) for any artifact path cited in the issue body. The bare repo's working tree can lag origin/main and produce false-negative "missing" results for files that exist at the canonical ref — propagating into a wrong-premise re-framing. If git show fails, defer the artifact-existence check until after the worktree is created and re-grep from inside it. If ALL cited blockers are CLOSED / referenced PRs are MERGED and ALL named artifacts exist, the premise is stale — re-frame with the user BEFORE creating the worktree. Why: #3987 stale-claim case; #4078 bare-root false-negative for cited 2026-05-19-pr-h-trust-tier-external-classes-brainstorm.md; #4319 temporal-precondition miss where "After PR #4289 merges" framing wasn't matched by the status-verb regex and PR #4289 had already merged 2026-05-22T08:07Z by brainstorm time. See knowledge-base/project/learnings/2026-05-18-premise-validation-and-multi-clause-predicate-reading.md, knowledge-base/project/learnings/2026-05-21-brainstorm-premise-verification-call-site-granularity-and-adr-mutability.md, and knowledge-base/project/learnings/2026-05-22-brainstorm-precondition-pr-merge-gate.md. Forward-companion canary: the regex above is backward-looking; a forward reference to an unlinked companion ("Companion PR (creates X): to be linked", "seeded under a separate PR") is a distinct canary it misses — the companion is filed to land in parallel and on a fast repo routinely merges BEFORE the brainstorm runs. When an issue frames work as "create X" AND cites a not-yet-linked companion that creates X, run git show main:<X> + gh pr list --state all -L 200 --search "<X>" before accepting the greenfield framing; if X exists, the real scope is the remainder the issue tracks, not X. Why: #5754 — register domain-model.md already existed via companion PR #5773 (merged the prior day); greenfield framing would have re-built it. See knowledge-base/project/learnings/2026-07-01-brainstorm-companion-pr-to-be-linked-already-merged.md.
Plugin loader constraint: Before proposing namespace changes (bare commands, command-to-skill migration), verify plugin loader constraints -- bare namespace commands are not supported, and commands/skills have different frontmatter and argument handling.
Evaluate whether brainstorming is needed based on the feature description.
Clear requirements indicators:
- Specific acceptance criteria provided
- Referenced existing patterns to follow
- Described exact expected behavior
- Constrained, well-defined scope
If requirements are already clear: Use AskUserQuestion tool to suggest: "Your requirements seem clear enough to skip brainstorming. How would you like to proceed?"
Options:
- One-shot it - Use the Skill tool:
skill: soleur:one-shotfor full autonomous execution (plan, deepen, implement, review, resolve todos, browser test, feature video, PR). Best for simple, single-session tasks like bug fixes or small improvements. - Plan first - Use the Skill tool:
skill: soleur:planto create a plan before implementing - Brainstorm anyway - Continue exploring the idea
If one-shot is selected, pass the original feature description (including any issue references) to skill: soleur:one-shot and stop brainstorm execution. Note: this skips brainstorm capture (Phase 3.5), worktree creation (Phase 3), and spec/issue creation (Phase 3.6) -- the one-shot pipeline handles setup through the plan skill.
Phase 0.1: User-Impact Framing
Per AGENTS.md `hr-weigh-every-decision-against-target-use