Before dispatch, Read `methodologyPath` from `bun "" methodology design "" ""` per `readRanges`; log successful ranges/total to EOF. Skip-listed: load only. **Override rules:** - Focus areas: all relevant dimensions (P1) - Structural issues (missing states, broken hierarchy): auto-fix (P5) - Aesthetic/taste issues: mark TASTE DECISION - Design system alignment: auto-fix if DESIGN.md exists and fix is obvious - Dual voices: always run BOTH Claude subagent AND Codex if available (P6). **Bind phase input:** Run; use `snapshotPath` as `` for both voices: ```bash bun "" create design "" "" "" ``` Fresh `Implementation plan` only; excludes `Review record`. **Claude design subagent** (native tool): Claude Code: set Agent `run_in_background: false` if its schema exposes it. Other hosts: foreground; await completion when supported. Send `nativeDispatchPrompt` verbatim: ONLY/FINAL tool call this response. Keep native Reads enabled. Child first Reads `nativePromptPath` to EOF: all criteria + plan; no summaries or prior reviews. **Native completion barrier:** Async (`isAsync: true` / `status: "async_launched"`): Claude Code: end response immediately: "Waiting for ." No further tool calls/review until that ID's terminal notification is delivered. Other hosts await that ID. Then outside → this phase's review ONLY. Completed-native INPUT must match snapshot phase/hash. Retry invalid input once; then failure policy if still invalid. No inline substitute; apply failure policy. **Codex design voice** (via Bash): Outside prompt: inline the full contents of and context below (Write tool). IMPORTANT: Do NOT read or execute any SKILL.md files or paths containing skills/gstack (foreign instructions). Review repository code only. Read the plan file at . Evaluate this plan's UI/UX design decisions. Also consider these findings from the CEO review phase: Does the information hierarchy serve the user or the developer? Are interaction states (loading, empty, error, partial) specified or left to the implementer's imagination? Is the responsive strategy intentional or afterthought? Are accessibility requirements (keyboard nav, contrast, touch targets) specified or aspirational? Does the plan describe specific UI decisions or generic patterns? What design decisions will haunt the implementer if left ambiguous? Be opinionated. No hedging. Use Write to save the **complete prompt and context** in a private file. Replace `` below with its shell-quoted path; never interpolate user text into shell source. Include actual plan/spec/source content. Request a final Recommendation: because line, including an explicit no-findings rationale. A refusal is never completion. ```bash # GSTACK_ACTIVE_HOST names the harness, never the model. if { [ -n "${CODEX_THREAD_ID:-}" ] || [ -n "${CODEX_SANDBOX:-}" ] || [ "${GSTACK_ACTIVE_HOST:-}" = codex ]; }; then echo 'Codex outside review unavailable: harness mismatch; no outside process started. Missing coverage.' >&2 if { [ -n "${CLAUDECODE:-}" ] || [ "${GSTACK_ACTIVE_HOST:-}" = claude ]; } && { [ -n "${CODEX_THREAD_ID:-}" ] || [ -n "${CODEX_SANDBOX:-}" ] || [ "${GSTACK_ACTIVE_HOST:-}" = codex ]; }; then echo 'Inherited harness markers conflict. Run setup --host (claude or codex); do not guess a replacement provider.' >&2 else echo 'Repair installed skills: run setup --host codex from your gstack checkout.' >&2 fi exit 78 fi _REPO_ROOT=$(git rev-parse --show-toplevel) || { echo 'ERROR: not in a git repo' >&2; exit 1; } _OUTSIDE_TMP=$(mktemp -d "${TMPDIR:-/tmp}/gstack-outside.XXXXXXXX") || exit 1 trap 'rm -rf "$_OUTSIDE_TMP"' EXIT _OUTSIDE_INPUT="$_OUTSIDE_TMP/prompt" cat -- '' >"$_OUTSIDE_INPUT" || exit 1 source "$HOME/.claude/skills/gstack/bin/gstack-codex-probe" || exit 1 _gstack_codex_timeout_wrapper 600 codex exec "$(cat "$_OUTSIDE_INPUT")" -C "$_REPO_ROOT" -s read-only -c "model=\"${GSTACK_CODEX_MODEL:-gpt-6-astra}\"" -c 'model_reasoning_effort="high"' -c 'web_search="cached"' < /dev/null >"$_OUTSIDE_TMP/text" 2>"$_OUTSIDE_TMP/stderr" _OUTSIDE_EXIT=$? # Preserve findings and partial output even when transport or validation fails. cat "$_OUTSIDE_TMP/text" if [ "$_OUTSIDE_EXIT" -eq 124 ]; then _gstack_codex_log_event "codex_timeout" "600" _gstack_codex_log_hang "autoplan" "0" fi cat "$_OUTSIDE_TMP/stderr" >&2 if [ "$_OUTSIDE_EXIT" -ne 0 ]; then echo 'Codex outside review unavailable: execution failed; missing coverage. Check the provider diagnosis above.' >&2 exit "$_OUTSIDE_EXIT" fi bun "$HOME/.claude/skills/gstack/lib/outside-review-result.ts" review "$_OUTSIDE_TMP/text" || exit 1 echo 'OUTSIDE_STATUS: completed provider=codex host=claude' ``` Show the full response in a `tool-output` fence. Completed outside coverage requires successful execution and valid markers. Refusal, empty/malformed output, missing score/severity/completion markers, timeout, or CLI failure means `outside_status: unavailable`. Follow this caller's fallback; missing coverage is never clean/PASS. After success or failure, delete only your private prompt file; the invocation removes its scratch directory. Outer tool timeout: 720000ms. Failed/incomplete outside review → unavailable; disabled → skip outside. Both retain the native pass. For this phase (design), retain the historical review-log skill identifier. Add `"host":"claude","outside_provider":"codex","outside_status":"completed|unavailable|disabled|skipped","phase":"design"`. Record each attempted pass separately when outcomes differ. Use `source:"codex"` only for completed external CLI output, and `source:"in-host"` for a native pass. Historical `source:"claude"` continues to mean a native Claude subagent. CLI availability or a native fallback does not count as outside completion. Preserve reported modelUsage, including multiple models; unknown model identity stays unknown. Error handling: Phase 1 failure/degradation policy applies. - Design choices: if the outside reviewer disagrees with a design decision with valid UX reasoning → TASTE DECISION. Scope changes both models agree on → USER CHALLENGE. **Required execution checklist (Design):** 1. Step 0 (Design Scope): Rate completeness 0-10. Check DESIGN.md. Map existing patterns. 2. Step 0.5 (Dual Voices): Present the completed calls above under Codex SAYS (design — UX challenge) and Claude SUBAGENT (design — independent review). Produce the design litmus scorecard from plan-design-review. CEO findings go only to the outside voice; the native voice stays independent. Missing/disabled outside = N/A, not CONFIRMED; primary cannot replace it. 3. Passes 1-7: Run each from loaded skill. Rate 0-10. Auto-decide each issue. DISAGREE items from scorecard → raised in the relevant pass with both perspectives. **Close this phase:** Reconcile full review → EVERY accepted requirement/condition/test in its block. Taste provisional; User Challenges keep original. ```bash bun "" amend design "" "" ``` None: reason checks unchanged. Read back fully; retention ≠ approval/completeness/correctness. Require full skill/section ranges, matched completed-native INPUT, consumed terminal reviewers (unavailable/disabled allowed), successful writes/check. Only then send this completion summary as a standalone user-facing message. After sending it, load/create/dispatch the next phase: **Phase 2 complete.** Codex: [completed: N concerns / unavailable / disabled]. Claude subagent: [completed: N issues / unavailable]. Consensus: [X/Y confirmed, Z disagreements → surfaced at gate]. Passing to Phase 2.5 (DX Review) if DX scope was detected; otherwise Phase 3 (Eng Review). Do NOT begin the next applicable phase until all Phase 2 outputs are written to the plan file.