Skip to content

release(v8.4.2): hard-stop manual-brief /autopilot dead-end - #91

Merged
aimsise merged 1 commit into
mainfrom
release/v8.4.2
Jun 10, 2026
Merged

release(v8.4.2): hard-stop manual-brief /autopilot dead-end#91
aimsise merged 1 commit into
mainfrom
release/v8.4.2

Conversation

@aimsise

@aimsise aimsise commented Jun 10, 2026

Copy link
Copy Markdown
Owner

Summary

Fixes a manual-mode dead-end on the /autopilot path, surfaced by the follow-up #2 live /autopilot validation.

A brief created with chain: off (manual mode) intentionally never receives a per-ticket autopilot-policy.yaml — Step W-8 skips propagation by design ([POLICY-PROPAGATION] skipped: brief mode=manual, pinned by CT-MODE-12). The original "/create-ticket policy-copy is broken" framing was therefore a non-bug. The real defect was downstream: /autopilot Phase 1 step 3 used to [WARN] … only brief-level policy is in effect and continue, but the three per-ticket Policy guards (Pre-scout / Pre-impl / Pre-ship) read only the per-ticket policy with no brief-level fallback — so a manual brief aborted at the first guard on every ticket.

Changes

  • skills/autopilot/SKILL.md Phase 1 step 3 — manual-mode branch now hard-stops once at the entry with ERROR: Brief is in manual mode (chain: off); …, [AUTOPILOT-POLICY] gate=unexpected_error action=stop reason=brief_mode_manual, and ## Stop Reason tag: policy_gate_stop, directing the user to re-run /create-ticket with chain: on then re-run /autopilot. Parallel ## Error Handling entry added.
  • skills/brief/SKILL.md Step 3 (chain=off) guidance — now names the re-run-/create-ticket-with-chain: on prerequisite before advertising the /autopilot {slug} switch.
  • tests/test-skill-contracts.shCT-MODE-15 (autopilot hard-stop) + CT-MODE-16 (brief guidance).

Sibling audit (## Modifications)

The early hard-stop makes the three per-ticket Policy guards (SKILL.md:163/174/182) unreachable on the manual path, so they stay byte-identical (no fan-out). Step W-8's manual skip is spec-correct and untouched (CT-MODE-12); legacy mode=auto / mode=manual aliases preserved (CT-MODE-1/3/8). hooks/lib/detect-policy-gate-stop.sh keys on the generic [AUTOPILOT-POLICY]…action=stop marker, so reason=brief_mode_manual is honored with zero hook change.

Auto-re-propagating the policy inside /autopilot on a manual→auto switch (the smoother one-command switch) was deliberately deferred as a separate feature — it would relax the manual/auto contract.

Verification

  • bash tests/test-skill-contracts.sh826/826 (+CT-MODE-15, +CT-MODE-16)
  • bash tests/test-path-consistency.sh144/144
  • shellcheck -S warning tests/test-skill-contracts.sh — clean
  • plugin.json 8.4.2 == newest CHANGELOG [8.4.2] (CT-MODE-14), real ISO date (CT-MODE-13)

🤖 Generated with Claude Code

A brief created with chain: off (manual mode) intentionally never receives a
per-ticket autopilot-policy.yaml (Step W-8 skips propagation). /autopilot Phase 1
step 3 used to WARN-and-continue claiming "only brief-level policy is in effect",
but the three per-ticket Policy guards have no brief-level fallback, so every
ticket aborted at the first guard. /autopilot on a manual brief now hard-stops
once at the entry with reason=brief_mode_manual + policy_gate_stop and a directive
to re-run /create-ticket with chain: on, then re-run /autopilot. /brief Step 3
manual guidance names that re-propagation prerequisite before the switch.

Sibling audit (## Modifications): the early hard-stop makes the three per-ticket
Policy guards (SKILL.md:163/174/182) unreachable on the manual path, so they stay
byte-identical (no fan-out). Step W-8's manual skip is spec-correct and untouched
(CT-MODE-12); legacy mode=auto/mode=manual aliases preserved (CT-MODE-1/3/8). The
detector hooks/lib/detect-policy-gate-stop.sh keys on the generic
[AUTOPILOT-POLICY]...action=stop marker, so reason=brief_mode_manual is honored
with zero hook change. Auto-re-propagate-on-switch deferred as a separate feature.

CT-MODE-15 (autopilot hard-stop) + CT-MODE-16 (brief guidance) added.
test-skill-contracts 826/826, test-path-consistency 144/144, ShellCheck clean.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@aimsise
aimsise merged commit c6f489b into main Jun 10, 2026
2 checks passed
@aimsise
aimsise deleted the release/v8.4.2 branch June 10, 2026 19:11
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant