Files
msd-core/gsd-core/references/gate-prompts.md
Tom Boucher cf15682d1c enhance(#3028): responsive Markdown separators instead of fixed-width rules (#3789)
* feat(#3028): responsive Markdown separators instead of fixed-width rules

Stage banners, checkpoints, completion and error panels used fixed-width
runs of box-drawing characters -- a 53-column heavy rule and a 62-column
double-line box. Those runs are ordinary text to a Markdown-rendering
host, so in a narrower pane they wrap and the border comes apart from
the heading it framed.

Shipped content now emits an ATX heading for a titled section and a
blank-line-delimited --- for a break between sections, both of which
adapt to the available width. The same convention is applied to the
three code sites that built these strings at runtime: the UAT
checkpoint renderer, the milestone-close audit report, and the TDD
review checkpoint table.

Removing the box also removes its only reason to exist -- the
east-asian-width padding helpers that kept its right border aligned
(checkpointBoxLine, displayWidth, isWideCodePoint, ZERO_WIDTH_MARK_RE,
CHECKPOINT_BOX_WIDTH). RTL directional isolation is unchanged.

The convention is specified in gsd-core/references/ui-brand.md and
enforced across all shipped content by tests/responsive-separators.test.cjs.

Refs #3028

* test(#3028): pin the heading form in checkpoint and audit-report assertions

These suites asserted the exact box borders and the 62-column padded
banner interior. With the box gone they assert the ### heading form,
the --- break and the bolded instruction line, and each now carries a
positive assertion that no box character remains -- which is what pins
the fix rather than merely tolerating it.

Language coverage is converted, not dropped: Japanese, Chinese, Korean,
Hindi and Arabic all still assert their rendered banner, and the Arabic
case still asserts the RTL directional isolates the box removal must
not disturb. Adds a case for a banner longer than the old inner width,
which previously produced a ragged border and now has none.

Refs #3028

* chore(#3028): acknowledge execute-plan.md growth from the checkpoint display spec

The checkpoint_protocol display spec described the drawn box; it now
describes the heading, the --- break and the bolded action prompt,
which costs 22 bytes (40111 -> 40133, 827 under the cap).

Appended to the existing #3370 fragment rather than filed as a new one:
a growth ack keys on the bare filename and #3370 already declares
execute-plan.md, so a second source naming it would be a hard
duplicate-key error. Same supersede-by-append route #3370 took for the
spent #2652 fragment.

Refs #3028

* docs(#3028): state the load-bearing half of the separator rule, and amend the zh-CN reference

Review found three things.

The rule as first written demanded a blank line above AND below every
---. Only the one above is load-bearing: it is what stops CommonMark
reading the rule as a setext underline for the line above. The one below
is cosmetic, because a thematic break is a leaf block. The rule now says
that, with the reason, instead of asserting a stricter form the content
does not keep.

The zh-CN reference had received the mechanical box-to-heading swap but
none of the prose behind it: it still claimed a 62-character checkpoint
width and still listed --- among forbidden mixed banner styles, so it
contradicted the convention it was translating. It now carries the
separator section, the setext reasoning, the unconditional-vs-per-runtime
rationale and a corrected anti-pattern list, in Chinese.

The user guide asserted that a heading is not a degradation anywhere.
That is an assertion, not a demonstration. It now says what was actually
traded away in a plain terminal, points at the recorded rationale, and
invites the report that would justify the capability flag instead.

Refs #3028

* chore(#3028): backfill changeset PR number

Refs #3028

---------

Co-authored-by: sim <sim@local>
2026-08-23 22:38:12 -04:00

4.0 KiB

Gate Prompt Patterns

Reusable prompt patterns for structured gate checks in workflows and agents.

For checkpoint format details, see gsd-core/references/ui-brand.md -- a checkpoint is a ### CHECKPOINT: {Type} heading followed by its content, then a --- break and the bolded action prompt. Never a fixed-width drawn border: it wraps in a narrow pane.

Rules

  • header must be max 12 characters
  • multiSelect is always false for gate checks
  • Always handle the "Other" case (user typed a freeform response instead of selecting)
  • Max 4 options per prompt -- if more are needed, use a 2-step flow

Pattern: approve-revise-abort

3-option gate for plan approval, gap-closure approval.

  • question: "Approve these {noun}?"
  • header: "Approve?"
  • options: Approve | Request changes | Abort

Pattern: yes-no

Simple 2-option confirmation for re-planning, rebuild, replace plans, commit.

  • question: "{Specific question about the action}"
  • header: "Confirm"
  • options: Yes | No

Pattern: stale-continue

2-option refresh gate for staleness warnings, timestamp freshness.

  • question: "{Artifact} may be outdated. Refresh or continue?"
  • header: "Stale"
  • options: Refresh | Continue anyway

Pattern: yes-no-pick

3-option selection for seed selection, item inclusion.

  • question: "Include {items} in planning?"
  • header: "Include?"
  • options: Yes, all | Let me pick | No

Pattern: multi-option-failure

4-option failure handler for build failures.

  • question: "Plan {id} failed. How should we proceed?"
  • header: "Failed"
  • options: Retry | Skip | Rollback | Abort

Pattern: multi-option-escalation

4-option escalation for review escalation (max retries exceeded).

  • question: "Phase {N} has failed verification {attempt} times. How should we proceed?"
  • header: "Escalate"
  • options: Accept gaps | Re-plan (via /gsd:plan-phase) | Debug (via /gsd:debug) | Retry

Pattern: multi-option-gaps

4-option gap handler for review gaps-found.

  • question: "{count} verification gaps need attention. How should we proceed?"
  • header: "Gaps"
  • options: Auto-fix | Override | Manual | Skip

Pattern: multi-option-priority

4-option priority selection for milestone gap priority.

  • question: "Which gaps should we address?"
  • header: "Priority"
  • options: Must-fix only | Must + should | Everything | Let me pick

Pattern: toggle-confirm

2-option confirmation for enabling/disabling boolean features.

  • question: "Enable {feature_name}?"
  • header: "Toggle"
  • options: Enable | Disable

Pattern: action-routing

Up to 4 suggested next actions with selection (status, resume workflows).

  • question: "What would you like to do next?"
  • header: "Next Step"
  • options: {primary action} | {alternative 1} | {alternative 2} | Something else
  • Note: Dynamically generate options from workflow state. Always include "Something else" as last option.

Pattern: scope-confirm

3-option confirmation for quick task scope validation.

  • question: "This task looks complex. Proceed as quick task or use full planning?"
  • header: "Scope"
  • options: Quick task | Full plan (via /gsd:plan-phase) | Revise

Pattern: depth-select

3-option depth selection for planning workflow preferences.

  • question: "How thorough should planning be?"
  • header: "Depth"
  • options: Quick (3-5 phases, skip research) | Standard (5-8 phases, default) | Comprehensive (8-12 phases, deep research)

Pattern: context-handling

3-option handler for existing CONTEXT.md in discuss workflow.

  • question: "Phase {N} already has a CONTEXT.md. How should we handle it?"
  • header: "Context"
  • options: Update it | View it | Skip

Pattern: gray-area-option

Dynamic template for presenting gray area choices in discuss workflow.

  • question: "{Gray area title}"
  • header: "Decision"
  • options: {Option 1} | {Option 2}
  • Note: Options generated at runtime. Present real choices only — do NOT include a "skip" or "you decide" option (the user ran discuss-phase to decide). An "Other" free-text escape hatch may be offered per modes/default.md, but never a "Let Claude decide" cop-out.