Skip to content

v1.91.289.0 feat: skill diet pilots for plan-design-review, office-hours and design-review (GSTA-134) - #3525

Merged
capy-ai[bot] merged 9 commits into
mainfrom
gsta134/skill-diet-pilots
Oct 28, 2026
Merged

capy-ai[bot] merged 9 commits into
mainfrom
gsta134/skill-diet-pilots

Conversation

@garrytan

@garrytan garrytan commented Oct 28, 2026 •

Copy link
Copy Markdown
Owner
{
  "schema_version": 1,
  "pr": 3525,
  "head": "84e53b7f85c22974a53f783e33938b23f53cdc88",
  "version": "1.91.284.0",
  "base": "main",
  "gate": {
    "remote_gate": {
      "pass": 18861,
      "fail": 0
    }
  },
  "session_kind": "unattended",
  "queue_mode": "stamp-at-merge",
  "pregate": "requires-remote cleared @ae8640b6b699 (1 checks, current for 84e53b7f85c2)",
  "requires_remote": [
    "free-tests.yml/macos-named-regressions: https://github.com/garrytan/gstack/actions/runs/40618722701",
    "windows-free-tests.yml/windows-free-shard: https://github.com/garrytan/gstack/actions/runs/40618725996",
    "pregate.json/remote_gate: remote-gate tree=ae8640b6b699 tests=18861"
  ],
  "issues": {
    "fixes": [],
    "refs": [],
    "flakes": []
  },
  "docs": {
    "status": "updated",
    "scope": "README.md, AGENTS.md, CLAUDE.md, CONTRIBUTING.md, ARCHITECTURE.md, BROWSER.md, NOTICE.md and docs/ (audits gsta134-docs-1 and gsta134-docs-2; attempt 1 updated docs/skills.md and ARCHITECTURE.md)"
  },
  "review_loop": {
    "passes": 3,
    "blocking_found": 1,
    "deferred": 0,
    "noted": 4,
    "fixed": 1,
    "scope": "frozen"
  }
}

What changed

The second opinion and visual design move to on-demand sections: office-hours loads them only when the founder asks for one

The second opinion and visual design move to on-demand sections: office-hours loads them only when the founder asks for one.

Before/after as text: The second opinion and visual design move to on-demand sections: office-hours loads them only when the founder asks for one
--- Before · office-hours/SKILL.md § Phase 3.5: Cross-Model Second Opinion (optional) at 10b77de · source text
+++ After · office-hours/SKILL.md § Phase 3.5: Cross-Model Second Opinion (optional) on this branch · source text
 ## Phase 3.5: Cross-Model Second Opinion (optional)
+Use AskUserQuestion: "Want a second opinion from an independent AI perspective? It reviews your problem statement, key answers, premises and landscape findings from a structured summary, without this conversation. Usually 2-5 minutes." A) Yes, get a second opinion. B) No, proceed to alternatives.
-**Provider preflight:**
 
+If B: skip Phase 3.5 and remember the second opinion did NOT run (the design doc, founder signals and Phase 4 depend on it).
+If A:
+> **STOP.** Before running the Phase 3.5 second opinion the user just accepted (provider preflight, cold-read prompt, dispatch and synthesis), Read `~/.claude/skills/gstack/office-hours/sections/second-opinion.md` and execute it
+> in full. Do not work from memory — that section is the source of truth for this step.
-```bash
-
-if ! _OUTSIDE_CFG=$("$HOME/.claude/skills/gstack/bin/gstack-config" get --stored codex_reviews) || [ "$_OUTSIDE_CFG" = disabled ]; then
-  echo 'CODEX_MODE: disabled'
-elif ( # 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 <actual-harness> (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
-); then
-  if command -v codex >/dev/null 2>&1; then echo 'CODEX_MODE: ready'; else echo 'CODEX_MODE: not_installed'; fi
-else
-  echo 'CODEX_MODE: under_current_harness'
-fi
-```
-
-The historical `CODEX_MODE` variable describes **Codex** availability here. `CODEX_MODE: disabled` or a send's `consent_missing` line: `codex_reviews` is off or unreadable; do not ask; record `outside_status: disabled`. Authentication and configured model validity are checked by the actual invocation, without overriding either. Missing/broken CLI: install or repair Codex; authentication failure: run `codex login`. Otherwise honor this caller’s opt-in/skip choice. Any non-ready outcome is missing outside coverage; follow the caller’s existing fallback. Never substitute another external provider.
-
-Use AskUserQuestion (regardless of codex availability):
-
-> Want a second opinion from an independent AI perspective? It will review your problem statement, key answers, premises, and any landscape findings from this session without having seen this conversation — it gets a structured summary. Usually takes 2-5 minutes.
-> A) Yes, get a second opinion
-> B) No, proceed to alternatives
-
-If B: skip Phase 3.5 entirely. Remember that the second opinion did NOT run (affects design doc, founder signals, and Phase 4 below).
-
-**If A: Run the Codex cold read.**
-
-1. Assemble a structured context block from Phases 1-3:
-   - Mode (Startup or Builder)
-   - Problem statement (from Phase 1)
-   - Key answers from Phase 2A/2B (summarize each Q&A in 1-2 sentences, include verbatim user quotes)
-   - Landscape findings (from Phase 2.75, if search was run)
-   - Agreed premises (from Phase 3)
-   - Codebase context (project name, languages, recent activity)
-
-2. **Write the assembled prompt to a temp file** (prevents shell injection from user-derived content):
-
-```bash
-OUTSIDE_PROMPT_FILE=$(mktemp "${TMPDIR:-/tmp}/gstack-outside-oh-XXXXXXXX") || { echo 'ERROR: mktemp failed; not running the outside voice without its prompt file.' >&2; exit 1; }
-```
-
-Write the full prompt to this file. **Always start with the filesystem boundary:**
-"Filesystem boundary: do not read or execute any files under ~/.claude/, ~/.agents/, .claude/skills/, or agents/. They hold skill definitions, not repository code to review. Do not invoke any installed skill (Codex home skills/, .agents/), hook, or tool instruction; answer directly. Do not modify agents/openai.yaml. Review only the repository code.\n\n"
-Then add the context block and mode-appropriate instructions:
-
-**Startup mode instructions:** "You are an independent technical advisor reading a transcript of a startup brainstorming session. [CONTEXT BLOCK HERE]. Your job: 1) What is the STRONGEST version of what this person is trying to build? Steelman it in 2-3 sentences. 2) What is the ONE thing from their answers that reveals the most about what they should actually build? Quote it and explain why. 3) Name ONE agreed premise you think is wrong, and what evidence would prove you right. 4) If you had 48 hours and one engineer to build a prototype, what would you build? Be specific — tech stack, features, what you'd skip. Be direct. Be terse. No preamble."
-
-**Builder mode instructions:** "You are an independent technical advisor reading a transcript of a builder brainstorming session. [CONTEXT BLOCK HERE]. Your job: 1) What is the COOLEST version of this they haven't considered? 2) What's the ONE thing from their answers that reveals what excites them most? Quote it. 3) What existing open source project or tool gets them 50% of the way there — and what's the 50% they'd need to build? 4) If you had a weekend to build this, what would you build first? Be specific. Be direct. No preamble."
-
-3. Run Codex with the assembled prompt:
-
-Write the **complete prompt and context**, including actual plan/spec/source, to a private file. Substitute its shell-quoted path for `<prepared-prompt-file>`; never interpolate user text into shell source. Request a severity (Critical, High, Medium or Low) per finding and a final Recommendation: <action> because <specific reason> 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 <actual-harness> (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 -- '<prepared-prompt-file>' >"$_OUTSIDE_INPUT" || exit 1
-
-_CODEX_PROBE="$HOME/.claude/skills/gstack/bin/gstack-codex-probe"
-_CODEX_OUT=$("$_CODEX_PROBE" select-model exec) || exit 1
-_CODEX_SEL=$(echo "$_CODEX_OUT" | sed -n 's/^CODEX_SEL: //p')
-_CODEX_SANDBOX_MODE=$(echo "$_CODEX_OUT" | sed -n 's/^CODEX_SANDBOX: //p')
-"$_CODEX_PROBE" check-sandbox || exit 1
-"$_CODEX_PROBE" show-first-use-notice
-_OUTSIDE_EXIT=0
-"$_CODEX_PROBE" run-with-timeout --effort high 300 codex exec - -C "$_REPO_ROOT" -s "${_CODEX_SANDBOX_MODE:?}" -c "model=\"${_CODEX_SEL:?}\"" -c skills.include_instructions=false -c 'web_search="cached"' --json -o "$_OUTSIDE_TMP/text" <"$_OUTSIDE_INPUT" >"$_OUTSIDE_TMP/events" 2>"$_OUTSIDE_TMP/stderr" || _OUTSIDE_EXIT=$?
-cat "$_OUTSIDE_TMP/text" 2>/dev/null || tail -n 20 "$_OUTSIDE_TMP/events"
-
-cat "$_OUTSIDE_TMP/stderr" >&2 || { [ "$_OUTSIDE_EXIT" -ne 0 ] || _OUTSIDE_EXIT=1; }
-_OUTSIDE_RC=0
-bun --no-env-file --config=/dev/null "$HOME/.claude/skills/gstack/lib/outside-review-result.ts" --label 'Codex outside review' --exit "$_OUTSIDE_EXIT" --stderr "$_OUTSIDE_TMP/stderr" --events "$_OUTSIDE_TMP/events" review "$_OUTSIDE_TMP/text" || _OUTSIDE_RC=$?
-case "$_OUTSIDE_RC" in
-  0|3) ;;
-  4) echo 'OUTSIDE_STATUS: unverified provider=codex host=claude'; exit 4 ;;
-  *) [ "$_OUTSIDE_EXIT" -ne 0 ] && exit "$_OUTSIDE_EXIT"; exit 1 ;;
-esac
-echo 'OUTSIDE_STATUS: completed provider=codex host=claude'
-```
-
-Use Bash `timeout: 360000`; 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`. P0/P1 findings block like native ones; `OUTSIDE_STATUS: unverified` is missing coverage. Use the caller's fallback; missing coverage is never clean/PASS. After either outcome, delete only your private prompt; scratch cleanup is automatic.
-
-**Error handling:** All errors are non-blocking — second opinion is a quality enhancement, not a prerequisite.
-- **Auth failure:** If stderr contains "auth", "login", "unauthorized", or "API key": "Codex authentication failed. Run \`codex login\` to authenticate." Fall back to the Claude subagent below.
-- **Timeout:** "Codex timed out after 5 minutes." Fall back to the Claude subagent below.
-- **Empty response:** "Codex returned no response." Fall back to the Claude subagent below.
-
-On any Codex error, fall back to the Claude subagent below.
-
-**If preflight is not ready (or Codex errored):**
-
-Dispatch via the Agent tool with `run_in_background: false` when available (subagents default to background since Claude Code v2.1.198; the findings must land before the workflow continues). A launch receipt means it went background: await its completion notice. The subagent has fresh context and no conversation bias — but it is the same harness; model identity stays unknown unless the runtime reports it; weigh its agreement accordingly.
-
-Subagent prompt: same mode-appropriate prompt as above (Startup or Builder variant).
-
-Present findings under a `SECOND OPINION (Claude subagent):` header.
-
-If the subagent fails or times out: "Second opinion unavailable. Continuing to Phase 4."
-
-Retain the historical review-log skill ID; add `"host":"claude","outside_provider":"codex","outside_status":"completed|unavailable|disabled|skipped","phase":"office-hours"`. 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. Under `GSTACK_CODEX_NO_SANDBOX=1` add `"codex_sandbox":"danger-full-access"`.
-
-4. **Presentation:**
-
-If Codex ran:
-```
-SECOND OPINION (Codex):
-════════════════════════════════════════════════════════════
-<full codex output, verbatim — do not truncate or summarize>
-════════════════════════════════════════════════════════════
-```
-
-If Claude subagent ran:
-```
-SECOND OPINION (Claude subagent):
-════════════════════════════════════════════════════════════
-<full subagent output, verbatim — do not truncate or summarize>
-════════════════════════════════════════════════════════════
-```
-
-5. **Cross-model synthesis:** After presenting the second opinion output, provide 3-5 bullet synthesis:
-   - Where Claude agrees with the second opinion
-   - Where Claude disagrees and why
-   - Whether the challenged premise changes Claude's recommendation
-
-6. **Premise revision check:** If Codex challenged an agreed premise, use AskUserQuestion:
-
-> Codex challenged premise #{N}: "{premise text}". Their argument: "{reasoning}".
-> A) Revise this premise based on Codex's input
-> B) Keep the original premise — proceed to alternatives
-
-If A: revise the premise and note the revision. If B: proceed (and note that the user defended this premise with reasoning — this is a founder signal if they articulate WHY they disagree, not just dismiss).
 
 ---

Test bootstrap loads at its only consumer: Phase 8e.5 reads sections/test-bootstrap.md when the repo has no test framework

Test bootstrap loads at its only consumer: Phase 8e.5 reads sections/test-bootstrap.md when the repo has no test framework.

Before/after as text: Test bootstrap loads at its only consumer: Phase 8e.5 reads sections/test-bootstrap.md when the repo has no test framework
--- Before · design-review/SKILL.md.tmpl § 8e.5. Regression Test (design-review variant) at 10b77de · source text
+++ After · design-review/SKILL.md.tmpl § 8e.5. Regression Test (design-review variant) on this branch · source text
@@ ⋯ 4 unchanged ⋯ @@
 
 For CSS-only fixes: skip entirely. CSS regressions are caught by re-running /design-review.
 
+If the fix involved JS behavior and no test command is known yet (none in CLAUDE.md or TESTING.md, none found earlier this run):
+
+{{SECTION:test-bootstrap}}
+
+Then follow the same procedure as /qa Phase 8e.5 (study existing
-If the fix involved JS behavior: follow the same procedure as /qa Phase 8e.5 (study existing
 test patterns, write a regression test encoding the exact bug condition, run it, commit if
 passes or defer if fails). Commit format: `test(design): regression test for FINDING-NNN`.

plan-design-review's designer intro keeps the rule (generate mockups when DESIGN_READY) and drops the command list and motivation

plan-design-review's designer intro keeps the rule (generate mockups when DESIGN_READY) and drops the command list and motivation.

Before/after as text: plan-design-review's designer intro keeps the rule (generate mockups when DESIGN_READY) and drops the command list and motivation
--- Before · plan-design-review/SKILL.md.tmpl § The gstack designer at 10b77de · source text
+++ After · plan-design-review/SKILL.md.tmpl § The gstack designer on this branch · source text
 ### The gstack designer
+When the plan has UI and DESIGN SETUP prints `DESIGN_READY`, generate mockups with the gstack designer
+without asking (Step 0.5): a text description of a screen does not settle the decision.
-Use the **gstack designer** by default to turn design briefs into real visual mockups.
-
-When the plan has UI and the designer is available, generate mockups without asking
-first: the user and implementer need to see the design before it is coded, and a text
-description of what a screen "could look like" doesn't settle the decision. Skip them
-only under the Step 0.5 conditions (no UI scope, designer unavailable, or the user asks).
-
-Commands: `generate` (single mockup), `variants` (multiple directions), `compare`
-(side-by-side review board), `iterate` (refine with feedback), `check` (cross-model
-quality gate via OpenAI vision), `evolve` (improve from screenshot).
-
-Setup is handled by the DESIGN SETUP section below. If `DESIGN_READY` is printed,
-the designer is available and you should use it.

Why

Garry picked option A1 on 2026-10-27: "pilot now with the upstream skill-diet on two or three large skills nobody is editing this week (design-review, office-hours, plan-design-review). Each slimmed skill ships only if it passes skill-diet's before/after test and gstack's own paid tests for that skill." All three skills passed both, so each run of them now loads 15 to 40 percent fewer bytes for the same or better task results.

Blast radius

The change touches the three skills' templates, their new sections/*.md files, and three resolvers in scripts/resolvers/design.ts (DESIGN_METHODOLOGY, DESIGN_SKETCH, DESIGN_MOCKUP) that only these skills render. Every other skill's regenerated output is byte-identical to main on every host (script ran: gen:skill-docs --host all plus diff -rq against a main worktree), so the 85 differing generated files all belong to the three skills; CODEX_SECOND_OPINION is untouched.

Approvals

Date Asked Exact words Outcome Covers Still pending
2026-10-27 Approve the plan "GSTA-134: skill-diet pilots on design-review, plan-design-review, office-hours" (autoplan run autoplan-20261027231318, 8 decisions) “rec with one change, by GStack Minder under Garry's A1. Decision 1 widening to DESIGN_METHODOLOGY, DESIGN_SKETCH and DESIGN_MOCKUP in scripts/resolvers/design.ts approved; prove every other skill's regenerated output is byte-identical; CODEX_SECOND_OPINION untouched. Decision 2…” (GStack Minder (under Garry's A1), relayed by agent:jam_01M5ZST52MVZ457DX4C7YVY4TE) approved the reviewed plan (sha256 2984716ad556), every recommendation taken none
2026-10-27 Approve the plan "GSTA-134: skill-diet pilots on design-review, plan-design-review, office-hours" (autoplan run autoplan-20261027231318, 3 decisions) “rec with one change, by GStack Minder under Garry's A1. Decision 1 widening to DESIGN_METHODOLOGY, DESIGN_SKETCH and DESIGN_MOCKUP in scripts/resolvers/design.ts approved; prove every other skill's regenerated output is byte-identical; CODEX_SECOND_OPINION untouched. Decision 2…” (GStack Minder (under Garry's A1), relayed by agent:jam_01M5ZST52MVZ457DX4C7YVY4TE) approved the reviewed plan (sha256 2984716ad556), every recommendation taken none
2026-10-28 Raise office-hours parity maxSizeRatio 1.1796 -> 1.1921 “Do it: raise office-hours' maxSizeRatio from 1.1796 to 1.1920 ... I'm deciding it as the merge-queue owner under Garry's standing approval of parity-cap re-pins.” (GStack Minder) approved PR 3525 carve-guards office-hours none

Source: gstack-approvals record for gsta134/skill-diet-pilots (display only; not an approval citation).

Summary

The three largest design-facing skills were dieted with the upstream skill-diet method. Blocks that only some runs use moved behind one-line "read when" pointers into on-demand sections, and prose the model already knows was cut; descriptions and triggers did not change. The size, context-budget and carve guards were re-pinned to the measured results, with one cap raised under an owner grant.

Numbers (Claude host, bytes; panel is Opus 5.5, 3 runs per arm; token medians are the lower median of successful runs):

Skill SKILL.md before → after Success before → after (no skill) Lower median tokens Blind judge
plan-design-review 66,063 → 56,209 (−14.9%) 25/33 → 25/33 (11/33) 210,252 → 197,581 (−6.0%) after 8 of 12
office-hours 73,248 → 43,885 (−40.1%) 26/27 → 27/27 (14/27) 170,197 → 124,941 (−26.6%) after 10, before 5
design-review 115,947 → 84,868 (−26.8%) 32/36 → 34/36 (14/33) 326,662 → 257,819 (−21.1%) after 9, before 5, 1 tie

Codex host: office-hours 81,152 → 48,074 and design-review 124,144 → 90,977. The 30% target was missed for plan-design-review and design-review; both still shipped because they passed the before/after test and the paid cases.

Paid cases (reused evidence, no new paid runs in /ship): plan-design-review at product head 7e2ad74 was all green (carve-section-loading-plan-design-review failed once and passed its one rerun, flaky). office-hours and design-review were run at b0fba22. office-hours is green except office-hours-brain-writeback, flaky (1/3, then 2/3 on its rerun; a fake-gbrain fixture defect). design-review's rule cases are green and both judges pass; design-review-detector-shim-dom skipped at b0fba22 (browse binary absent, zero executed), so it was rerun after bun run build:gates at 84e53b7: PASS 1/1, one executed. design-review-fix self-skips without Aside and executed zero cases, so it is not a pass. The final head differs from b0fba22 in design-review only by three checklist header digits (12→11, 8→6, 11→8); the fix-loop judge's extracted input (Phase 7 to Additional Rules) is byte-identical.

Gate integrity: test/fixtures/skill-md-size-allowlist.json deletes 15 pins and lowers 8, raising none. test/fixtures/context-budget.json moves only the three skills' keys. test/helpers/carve-guards.ts lowers maxSkeletonBytes and design-review's minUnionBytes and maxSizeRatio (ratios rounded up at 4 decimals). test/helpers/placeholder-allowlist.ts deletes the stale <affected-url> entry, because the allowlist's own staleness check failed after the design-review diet removed its only fence. The one raise is office-hours maxSizeRatio 1.1796 → 1.1921, granted by GStack Minder as merge-queue owner. The measured 156,286 / 131,110 = 1.19202 needs 1.1921 after rounding up; the grant text said 1.1920. Follow-up: let CODEX_SECOND_OPINION take a flag that omits its question when the skeleton asks it, then lower the cap.

Rule 25 trial merge with #3375 (c411341): conflicts in plan-design-review SKILL.md/SKILL.md.tmpl (take the diet side) and docs/skills.md (a #3375-vs-main conflict, not this PR's).

Test Coverage

Coverage gate: could not determine percentage — skipping (prose and gate-only change). The 12 contract test files for the moved blocks are green; tests repointed to the new sections are listed in the CHANGELOG.

Tests ran: remote gate 18861

Pre-Landing Review

One blocking finding: CI free-suite shard 13 failed in test/env-host-fence-conformance.test.ts (CEO-12) on a stale <affected-url> placeholder entry; fixed in 15fdefb, and that test now passes 25 of 25. No other finding met the blocking floor. Pass 3 re-checked the docs-audit fix (design-review checklist header counts), the docs edits and the CHANGELOG, and found nothing.

REVIEW_LOOP: passes=3 blocking_found=1 deferred=0 noted=4 fixed=1 scope=frozen

Gate edits: 14 listed, 14 read, 1 finding — 1 kept (reasons below), 0 restored, 0 open

  • kept: office-hours maxSizeRatio raise, test/helpers/carve-guards.ts: granted by the merge-queue owner (GStack Minder) under Garry's standing approval of parity-cap re-pins.

Outside review: openai/gpt-6.1-sol (medium), cross-family, 0 blocking findings. Its review record has no start token, so its freshness reads UNVERIFIED; that is missing freshness coverage, not a pass.

Review notes

Below the blocking floor; recorded here and not fixed in this PR (product prose is frozen for the paid evidence).

  • INFORMATIONAL test/helpers/touchfiles-data.ts:1604 judge 'design-review/SKILL.md fix loop' reads section files but touchfiles omit design-review/sections/**
  • INFORMATIONAL test/helpers/carve-guards.ts:281 expectedSections for office-hours and design-review omit the four new sections, so the static pointer guard does not cover them (pointers resolve today)
  • INFORMATIONAL test/helpers/carve-guards.ts:283 paid office-hours scenario demands the second opinion but requiredReads does not assert second-opinion.md was read (changing a paid case needs owner call)
  • INFORMATIONAL office-hours/sections/second-opinion.md.tmpl:1 'skip its AskUserQuestion' is singular while the section has a second AskUserQuestion (premise-revision consent)
  • INFORMATIONAL office-hours/SKILL.md.tmpl:233 office-hours offers the second opinion before checking the disabled-provider preference; a disabled send stays blocked
  • INFORMATIONAL test/helpers/carve-guards.ts plan-design-review minUnionBytes slack predates this PR
  • Fixed during /ship: docs/skills.md:447 report path (039e42d) and the design-review checklist header counts (f1496a2).
  • Decision trail: GSTA-134-decisions.tsv row 16 records the ask to GStack Minder for the ratio raise and row 17 the grant (approvals record a-7390cbb4c515). Rows 18-24 supersede or add to earlier rows after the cross-family trail review.

Exploratory QA

Not run: no runtime surface changed (skill prose and test gates only).

Design Review

No frontend files changed — design review skipped.

Eval Results

Reused paid evidence from the lead's runs, listed under Summary with their heads. Panel spend was $131.61 against a cap raised from $100 to $180. No paid evals ran during /ship.

Greptile Review

No Greptile comments.

Plan Completion

20 items: 10 done, 5 changed, 2 partial, 3 not done. Partial: the 30% target (plan-design-review −14.9%, design-review −26.8%) and design-review-fix not run (needs Aside). Changed: budget $100 → $180 (spent $131.61), the office-hours ratio 1.1921 vs grant text 1.1920, office-hours scored on 9 tasks, design-review rules restored as one sentence, and test repoints. Not done: reports/GSTA-134.md (owed by the lead); CHANGELOG, receipt and images are done in this run.

Verification Results

All five obligations held, none blocked or skipped: typecheck (exit 0), generated-docs freshness (pregate regen: skill-docs and ship-goldens fresh), credential scan (1061 added lines clean), module-size ratchet and skill size guard (green in the 13 focused gate files, 518 tests, and again in the remote gate), and the remote free gate (18861 tests, 0 failed on tree ae8640b6b699).

TODOS

No TODO items completed in this PR.

Documentation

Status: current — the re-audit (gsta134-docs-2) found no further corrections. Attempt 1's two factual edits are verified, and the checklist-count blocker is repaired in f1496a2.

Scope: base 10b77de..f1496a2 (29 files: the skill diets for /plan-design-review, /office-hours and /design-review, plus the design.ts resolver and test re-pins), plus the unstaged ARCHITECTURE.md, docs/skills.md and CHANGELOG.md. The authored templates, the new section templates, and the top-level and nested docs that reference these skills were checked.

Documentation health:

  • ARCHITECTURE.md — Updated in attempt 1: the {{UX_PRINCIPLES}} consumers are now /design-html and /design-shotgun only (verified).
  • docs/skills.md — Updated in attempt 1: the /design-review example report path is now ~/.gstack/projects/<slug>/designs/design-audit-<date>/ (verified against REPORT_DIR).
  • scripts/resolvers/design.ts → design-review/SKILL.md — checklist headers now count their bullets (Spacing & Layout 11, Responsive Design 6, Content & Microcopy 8). Repaired in f1496a2, no regeneration drift.
  • README.md — Current
  • CONTRIBUTING.md — Current
  • BROWSER.md — Current (the "80-item" approximation is kept)
  • NOTICE.md — Current
  • CHANGELOG.md — the parent's [Unreleased] entry; not modified by the audit
  • TODOS.md — not in scope

Coverage: no new public surface. Descriptions, triggers and commands are unchanged, and the new sections/*.md files are internal on-demand loads that each SKILL.md section index points to. Coverage: all shipped features have adequate documentation.

Diagram drift: none.

Debt: the "80-item audit" wording (docs/skills.md, BROWSER.md) is approximate: 83 counted bullets plus the AI-slop category. Revisit if the checklist shrinks further.

Test plan

  • gstack-pregate --stage tests --remote --spend-cap 2 --timeout 2700 --allow-repo-commands: 18861 tests, 0 failed on tree ae8640b6b699, $0.07 (one flaky pass on serial retry: test/plan-seed-submission.test.ts)
  • gstack-pregate --stage preflight --allow-repo-commands: pass (regen, secrets, strays, literals, timing, guards)
  • bun run typecheck: exit 0
  • bun test test/env-host-fence-conformance.test.ts test/generated-bash-placeholders.test.ts: 25 and 158 tests green, none failing
  • 13 focused gate files (carve guards, context budget, module size, parity, skill size, skill validation, touchfiles, fence conformance): 518 tests green, none failing
  • Free Tests and Windows Free Tests dispatched on 84e53b7 (PR conflicts with main in CHANGELOG.md only, so GitHub schedules no pull_request CI)

🤖 Generated with Claude Code

Open in Capy

garrytan and others added 4 commits October 28, 2026 00:03
SKILL.md 66,063 -> 56,209 B (claude host); review-sections.md 52,243 -> 50,183 B.
Cut model-known prose (cognitive patterns, verbose designer prose, duplicated
formatting rules); UX principles kept as a five-line Krug summary after the
blind judge showed wayfinding loss without it. Section layout unchanged:
autoplan's methodology snapshot requires review-sections.md as the only indexed
section.

Co-authored-by: capy-ai[bot] <230910855+capy-ai[bot]@users.noreply.github.com>
Moves the Phase 3.5 Codex second opinion and the Phase 4.25 visual design
(designer mockups / HTML sketch) out of the eager SKILL.md into on-demand
sections behind STOP pointers; the CODEX_SECOND_OPINION, DESIGN_MOCKUP and
DESIGN_SKETCH resolvers are untouched. Claude-host SKILL.md 73,248 -> 43,885
bytes. skill-diet before/after (Opus, 9 tasks x 3): success 26/27 -> 27/27,
median tokens per successful run 170,197 -> 124,941; blind judge after 10,
before 5 of 15. YC pitch, flattery and promo text unchanged (sections
byte-identical to main).

Co-authored-by: capy-ai[bot] <230910855+capy-ai[bot]@users.noreply.github.com>
Moves the outside voices and the test-framework bootstrap into on-demand
sections (the bootstrap now loads at Phase 8e.5, its only consumer: a
JS-behavior fix that needs a regression test with no known test command),
replaces the UX principles block with a Krug summary, and tightens the
DESIGN_METHODOLOGY prose (design-review is its only consumer). Shared
resolvers TEST_BOOTSTRAP and DESIGN_OUTSIDE_VOICES are untouched.
Claude-host SKILL.md 115,947 -> 84,869 bytes. skill-diet before/after
(Opus, 12 tasks x 3): success 32/36 -> 34/36, median tokens per successful
run 326,662 -> 257,819; blind judge after 9, before 5, tie 1.

Co-authored-by: capy-ai[bot] <230910855+capy-ai[bot]@users.noreply.github.com>
Every pin moves down except office-hours' parity maxSizeRatio (1.1796 ->
1.1921, GStack Minder's call as merge-queue owner): its union grew 1,662 B
because the second-opinion question now sits in the skeleton while the
untouched CODEX_SECOND_OPINION resolver keeps its own copy. design-review
leaves the size allowlist on every host.

Co-authored-by: capy-ai[bot] <230910855+capy-ai[bot]@users.noreply.github.com>
@trunk-io

trunk-io Bot commented Oct 28, 2026 •

Copy link
Copy Markdown

😎 This pull request was merged.

garrytan and others added 4 commits October 28, 2026 01:37
…w Phase 8d diet

Co-authored-by: capy-ai[bot] <230910855+capy-ai[bot]@users.noreply.github.com>
…the diet

Co-authored-by: capy-ai[bot] <230910855+capy-ai[bot]@users.noreply.github.com>
… skill diets

Co-authored-by: capy-ai[bot] <230910855+capy-ai[bot]@users.noreply.github.com>
Co-authored-by: capy-ai[bot] <230910855+capy-ai[bot]@users.noreply.github.com>
@capy-ai
capy-ai Bot marked this pull request as ready for review October 28, 2026 02:21
@github-actions

Copy link
Copy Markdown
Contributor

E2E Evals: ✅ PASS

[test:paid] VERDICT GREEN — lane gate/pr, attempt 1
  rule 2/2 · behavior 0/0 · judge 3/3 · quarantined 0 (0 failing the lane)
  SKIPPED 0 · INFRA 0 · INCOMPLETE 0 · unattributed 0 · ACTION REQUIRED 0
  wall 0m60s · cost $0.27 known + 1 of 5 trial(s) cost unknown

4 executed, 0 reused rule/judge records | 0 manual accepted (unscored; no score-cache credit) | $.27 rule/judge cost | reconcile exit: 0

Profile: pr / mode pr; selected behaviors: 2, judges: 3. Deferred to scheduled/release coverage: 51 behaviors and 4 changed prompt files. Deferred checks did not run and receive no PR-pass credit.

Rule and judge shards
Shard Automated result Manual/unscored Executed Reused Status Cost
e2e-design/skill-e2e-design--plan-design-review-no-ui-scope 1/1 0 1 0 ✅ $0.09
llm-judge/skill-llm-eval 3/3 0 3 0 ✅ $0.18
Fail-closed reconciliation
[test:paid] report: 1/1 slices, 3 planned shards, tier=gate, attempt 1
[test:paid] coverage: profile=pr mode=pr; selected E2E=2, judges=3
[test:paid] deferred: 51 broad behaviors, 4 changed prompts without quick live coverage; these are not PR passes
  slice 1  passed             54s  test/skill-llm-eval.test.ts
  slice 1  passed             39s  test/skill-e2e-office-hours-auto-mode.test.ts
  slice 1  passed             16s  test/skill-e2e-design.test.ts#plan-design-review-no-ui-scope
[test:paid] collector final outcomes: 4 executed, 0 reused; 4 passed, 0 failed, 0 manual accepted (unscored; no score-cache credit) (4 attempt records from 2 collectors; every record counts)
[test:paid] deselected testcases, zero credit (32):
[test:paid]     21  outside the run's case selection
[test:paid]     11  sibling case of a case shard (its own shard runs it)
[test:paid] VERDICT GREEN — lane gate/pr, attempt 1
  rule 2/2 · behavior 0/0 · judge 3/3 · quarantined 0 (0 failing the lane)
  SKIPPED 0 · INFRA 0 · INCOMPLETE 0 · unattributed 0 · ACTION REQUIRED 0
  wall 0m60s · cost $0.27 known + 1 of 5 trial(s) cost unknown
[test:paid] exercised-path map (shadow, non-blocking): 0 MAP_GAP line(s) over 1 executed case(s) with recorded commands
[test:paid] report: every planned shard accounted and passed

Sliced lane: planner → duration-packed executors → fail-closed report. Behavior cases run a pre-registered 3-trial panel (PASS at 2/3 with no contract violation); a PASS 2/3 is shown with its failed trial, never as a clean pass. Reused results retain their original provenance and expiry.

Dispatched narrow screen (gstack-ship-queue ready --screen) of merge commit 7461ed9cd3b74de1f0cea07f5222b1008037a9b5.

…lots

Co-authored-by: capy-ai[bot] <230910855+capy-ai[bot]@users.noreply.github.com>

# Conflicts:
#	CHANGELOG.md
@github-actions github-actions Bot changed the title feat: skill diet pilots for plan-design-review, office-hours and design-review (GSTA-134) v1.91.289.0 feat: skill diet pilots for plan-design-review, office-hours and design-review (GSTA-134) Oct 28, 2026
@capy-ai
capy-ai Bot merged commit a14c28a into main Oct 28, 2026
69 of 71 checks passed
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