release(v10.0.0)!: /brief defaults to chain=off (autonomous build is opt-in) - #98
Merged
Conversation
…opt-in)
BREAKING: a bare `/brief <idea>` now defaults to chain=off — it writes the brief
+ autopilot-policy.yaml and stops with the Step 3 manual guidance, instead of
auto-chaining into /create-ticket -> /autopilot (and, since v9.0.0, spawning N
wave-parallel ticket-executor worktrees that commit and open PRs). The autonomous
build pipeline is now an explicit opt-in.
Migration: to restore the prior idea-to-PR behavior, run `/brief <idea> chain=on`.
Everything downstream of an explicit chain=on is byte-identical to v9.0.x (same
handoff, same chained uc=on / parallel=on defaults). The `mode=auto|manual` alias
is retained and unchanged (mode=auto == chain=on); only the both-keys-omitted
default flips. Read-time resolution of pre-v6.0.0 key-less briefs stays chain=on
(auto) — deliberately asymmetric with the new write-time default.
- skills/brief/SKILL.md: flip the both-keys-omitted default to chain=off across
Argument Parsing, the mode-independence guard, the frontmatter-derivation notes,
and the Finalization Step 2 gating; preserve every mode= alias literal and the
uc/parallel resolution. A bare invocation deterministically takes the Step 3
manual path (no auto-kick.yaml, next_recommended_auto: "").
- README.md: opening pitch, argument signature, ultracode/wave-parallel default
notes, mode table, execution-chains block, and hero-diagram caption now present
chain=off as the default and chain=on as the full-automation opt-in.
- docs/gen-brief-chain-flow.py + regenerated brief-chain-flow{,-dark}.png: entry
box relabeled `/brief "<idea>" chain=on (opt-in)`.
- tests/test-skill-contracts.sh: +CT-MODE-18 pins the chain=off default and
drift-guards (negative clause) against the pre-v10.0.0 chain=on default returning.
- create-ticket intentionally unchanged; mode= alias intentionally retained.
Verification: test-skill-contracts 915/915, test-brief-lightening 12/12,
path-consistency 145/145, run-all ALL PASSED, shellcheck --severity=warning clean.
Reviewed via an adversarial multi-agent pass (verdict: clean, 0 confirmed findings).
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Mw2bH4wbEPeebXsvSG6rWe
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
TL;DR
Breaking (v10.0.0):
/briefno longer auto-builds by default. A bare/brief <idea>now defaults tochain=off— it writes the brief (plus itsautopilot-policy.yamlrescue file) and stops with manual next-steps, instead of chaining straight through/create-ticket→/autopilotto commits and PRs (and, since v9.0.0, spawning N wave-parallelticket-executorworktrees). The autonomous build pipeline is now an explicit opt-in: passchain=on.Rationale: an argument-less
/briefreads as "write a brief," but it triggered an implicit, hard-to-reverse, outward-facing pipeline — a poor default, and v9.0.0 widened its blast radius (N× concurrent worktrees + token spend). Making the gateway decision opt-in (while keeping full power —uc/parallelstill defaulton— once you opt in) is the safer, least-surprise default.Migration
Everything downstream of an explicit
chain=onis byte-identical to v9.0.x (same/create-ticket→/autopilothandoff, same chaineduc=on/parallel=ondefaults). Themode=auto|manuallegacy alias is retained and unchanged (mode=auto≡chain=on); only the both-keys-omitted default flips. Read-time resolution of pre-v6.0.0 key-less briefs stayschain=on(auto), deliberately asymmetric with the new write-time default.What changed (8 files)
skills/brief/SKILL.mdchain=off(Argument Parsing, mode-independence guard, frontmatter derivation, Finalization Step 2 gating). Everymode=alias literal +uc/parallelresolution preserved. Bare invocation deterministically takes the Step 3 manual path (noauto-kick.yaml,next_recommended_auto: "").README.mdchain=offdefault +chain=onopt-in.docs/gen-brief-chain-flow.py+ regeneratedbrief-chain-flow{,-dark}.png/brief "<idea>" chain=on (opt-in).tests/test-skill-contracts.shchain=offdefault and drift-guards (negative clause) against the pre-v10.0.0chain=ondefault returning.CHANGELOG.md/.claude-plugin/plugin.json## [10.0.0] — 2026-06-28(BREAKING CHANGES + migration + Verification) /"version": "10.0.0".Intentionally unchanged:
create-ticket(its manual-briefnext_recommended_autolands on the existing v8.4.2 graceful, non-looping hard-stop); themode=alias (its removal is a separate breaking change, deferred).Verification
tests/test-skill-contracts.sh: 915 / 915 (+1 = CT-MODE-18;CT-MODE-1..9mode=-alias tests andCT-PARALLEL-1/7stay green).tests/test-brief-lightening.sh12/12 ·tests/test-path-consistency.sh145/145 ·tests/run-all.shALL PASSED ·shellcheck --severity=warningclean · CT-DECONTAM-1 clean · ac-evaluator twin byte-identity preserved (no agent edits).See
CHANGELOG.md## [10.0.0].🤖 Generated with Claude Code
https://claude.ai/code/session_01Mw2bH4wbEPeebXsvSG6rWe