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. Read `snapshot.json` beside ``. Send its `nativeDispatchPrompt` verbatim as the Agent prompt: 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. Write the **complete prompt and context**, including actual plan/spec/source, to a private file. Substitute its shell-quoted path for ``; never interpolate user text into shell source. Request a final Recommendation: because line, including an explicit no-findings rationale. ```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 _OUTSIDE_PROMPT=$(cat "$_OUTSIDE_INPUT") || exit 1 _OUTSIDE_EXIT=0 _gstack_codex_timeout_wrapper 600 codex exec "$_OUTSIDE_PROMPT" -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" || { [ "$_OUTSIDE_EXIT" -ne 0 ] || _OUTSIDE_EXIT=1; } if [ "$_OUTSIDE_EXIT" -eq 124 ]; then _gstack_codex_log_event "codex_timeout" "600" || true _gstack_codex_log_hang "autoplan" "0" || true fi cat "$_OUTSIDE_TMP/stderr" >&2 || { [ "$_OUTSIDE_EXIT" -ne 0 ] || _OUTSIDE_EXIT=1; } 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. Require successful execution and valid markers. Refusal, empty/malformed output, missing score/severity/completion markers, timeout or CLI failure means `outside_status: unavailable`. Use the caller's fallback; missing coverage is never clean/PASS. After either outcome, delete only your private prompt; scratch cleanup is automatic. Outer tool timeout: 720000ms. Failed/incomplete outside review → unavailable; disabled → skip outside. Both retain the native pass. Retain the historical review-log skill ID; add `"host":"claude","outside_provider":"codex","outside_status":"completed|unavailable|disabled|skipped","phase":"design"`. Record differing attempt outcomes separately. `source:"codex"` requires completed CLI output; native uses `source:"in-host"` (historical `source:"claude"`: native Claude). Availability/native fallback is not outside completion. Preserve all reported modelUsage; 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:** The review work above ends here. Now load the shared close steps afresh, even if read earlier. Use phase `design`, checkpoint ``, and this phase's `methodologyPath`. Keep this checkpoint for this invocation; review exports do not replace it. > **STOP.** Before closing a review phase, after its reviews finish and before announcing completion or loading the next phase (read afresh at each exit), Read `~/.claude/skills/gstack/autoplan/sections/phase-close.md` and execute it > in full. Do not work from memory — that section is the source of truth for this step.