Skip to content

feat(ship): add HITL confirmation gate on gate2 green verdict (#55)#56

Merged
JFK merged 2 commits intomainfrom
55-feat/feat-ship-add-hitl-confirmation-gate-on-g
Apr 12, 2026
Merged

feat(ship): add HITL confirmation gate on gate2 green verdict (#55)#56
JFK merged 2 commits intomainfrom
55-feat/feat-ship-add-hitl-confirmation-gate-on-g

Conversation

@JFK
Copy link
Copy Markdown
Owner

@JFK JFK commented Apr 12, 2026

Closes #55

Summary

  • Add HITL confirmation gate on gate2 green verdict in ship.md step 9
  • New config option gate2.green_continue_requires_confirm (default true)
  • When true, green path pauses with 3-option AskUserQuestion before push+PR
  • Feedback path re-presents the question after response (no auto-continue on model judgment)

Implementation notes

  • ship.md step 9: green bullet updated to check config and dispatch to step 9a
  • ship.md step 9a: new sub-step with Considerations block + AskUserQuestion (Yes/No/Feedback)
  • config.md: added gate2.green_continue_requires_confirm: true to built-in defaults alongside existing gate2.yellow_continue_requires_confirm
  • Fires on DRY_RUN too (matches start.md step 18 pattern)
  • Pattern follows start.md step 18 (gate1 green HITL) and propose.md step 11 (pre-filing HITL)

Pre-PR review summary

  • gate2 mode: advisor-only (no binary gate configured)
  • audit: skipped
  • binary_gate: (none)
  • cso: green
  • qa-lead: green
  • cto: green
  • gate1: green via /ask
  • review provider: copilot

Full reviews are saved in the plugin cache:

  • ~/.claude/cache/gh-issue-driven/55-feat-feat-ship-add-hitl-confirmation-gate-on-g.gate1.md
  • ~/.claude/cache/gh-issue-driven/55-feat-feat-ship-add-hitl-confirmation-gate-on-g.gate2.md

🤖 Generated via /gh-issue-driven:ship

Add gate2.green_continue_requires_confirm config option (default true).
When true, ship.md step 9 pauses on green verdict with AskUserQuestion
showing per-reviewer summary: "Yes, ship it" / "No, abort" / "I have
feedback". Feedback path re-presents the question after response — the
operator always gets the final Yes/No choice.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Copilot AI review requested due to automatic review settings April 12, 2026 09:03
Copy link
Copy Markdown
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Adds a human-in-the-loop (HITL) confirmation pause when Gate2 returns a green verdict in /gh-issue-driven:ship, controlled by a new config default.

Changes:

  • Update ship.md step 9 to route green verdicts through a new step 9a confirmation gate (configurable).
  • Add gate2.green_continue_requires_confirm (default true) to built-in config defaults.

Reviewed changes

Copilot reviewed 2 out of 2 changed files in this pull request and generated 3 comments.

File Description
commands/ship.md Adds step 9a to print a Gate2 considerations summary and prompt the operator (Yes/No/Feedback) before continuing on green.
commands/config.md Extends built-in defaults with gate2.green_continue_requires_confirm: true.

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

commands/ship.md Outdated

When `lang != "en"`, produce the question text and option labels in the language specified by `lang`.

This step also runs when `DRY_RUN` is `true` — the operator still sees the gate2 summary and confirms intent, even though step 11 (push) and step 12 (PR creation) will be skipped. This matches `start.md` step 18's behavior where the HITL fires regardless of dry-run.
Copy link

Copilot AI Apr 12, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The note about DRY_RUN behavior is referencing start.md step 18, but start.md step 18 explicitly skips when DRY_RUN is true (see start.md step 18a). Either update the reference, or adjust the described behavior so the cross-doc claim is accurate.

Suggested change
This step also runs when `DRY_RUN` is `true` — the operator still sees the gate2 summary and confirms intent, even though step 11 (push) and step 12 (PR creation) will be skipped. This matches `start.md` step 18's behavior where the HITL fires regardless of dry-run.
This step also runs when `DRY_RUN` is `true` — the operator still sees the gate2 summary and confirms intent, even though step 11 (push) and step 12 (PR creation) will be skipped.

Copilot uses AI. Check for mistakes.
Comment on lines 171 to 180
"gate2": {
"binary_gate": null,
"advisors": [
"/claude-c-suite:cso",
"/claude-c-suite:qa-lead",
"/claude-c-suite:cto"
],
"yellow_continue_requires_confirm": true,
"green_continue_requires_confirm": true,
"run_tests_before_gate2": false
Copy link

Copilot AI Apr 12, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

gate2.green_continue_requires_confirm is added to the built-in defaults here, but there’s no corresponding entry under “Notes on specific keys” explaining what it does, when to disable it (e.g. CI/non-interactive), and how it interacts with DRY_RUN/the gate2 verdict flow. Please document this key alongside the existing gate2 notes so operators can discover it without reading ship.md.

Copilot uses AI. Check for mistakes.
Comment on lines +314 to 316
- **green** → if `gate2.green_continue_requires_confirm` is `true` (default), proceed to step 9a (which prints the summary and asks the operator). If `false`, continue silently to step 10.
- **yellow** → print the per-reviewer summary table, then ask via AskUserQuestion: "Gate2 returned yellow. Continue with PR creation?" with options "Yes, ship it" / "No, abort". On abort, save state with `phase=gated` and exit cleanly.
- **red** → if `FORCE` is true, log a loud warning and continue. Otherwise abort with the per-reviewer findings printed.
Copy link

Copilot AI Apr 12, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Step 9 now makes the green-path confirmation configurable (gate2.green_continue_requires_confirm), but the yellow path still unconditionally prompts even though the defaults include gate2.yellow_continue_requires_confirm. This creates an ambiguous contract between config.md and ship.md. Either (a) make ship.md’s yellow handling honor gate2.yellow_continue_requires_confirm, or (b) document that yellow is always confirmed and remove/clarify the config key to avoid a “config option that does nothing.”

Copilot uses AI. Check for mistakes.
Address Copilot review: start.md step 18a skips on DRY_RUN, so claiming
the ship.md step 9a DRY_RUN behavior 'matches start.md step 18' was
inaccurate. Removed the cross-reference; the DRY_RUN behavior stands on
its own merit.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Copy link
Copy Markdown
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 2 out of 2 changed files in this pull request and generated no new comments.


💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

@JFK JFK merged commit 61c3ebd into main Apr 12, 2026
5 checks passed
@JFK JFK deleted the 55-feat/feat-ship-add-hitl-confirmation-gate-on-g branch April 12, 2026 09:55
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.

feat(ship): add HITL confirmation gate on gate2 green verdict before push+PR

2 participants