Skip to content

v1.91.60.0 fix(windows): setup degrades instead of dying on a CSO failure, detects Smart App Control, Consolas terminal font - #3079

Merged
capy-ai[bot] merged 15 commits into
mainfrom
capy/fixwave-C1-windows-setup-degrade
Oct 8, 2026
Merged

capy-ai[bot] merged 15 commits into
mainfrom
capy/fixwave-C1-windows-setup-degrade

Conversation

@garrytan

@garrytan garrytan commented Oct 8, 2026 •

Copy link
Copy Markdown
Owner

Fix wave PR C1: the Windows half of the wave's original PR C, split per the review gate. The install-footprint half follows as a separate stacked PR.

Optional /cso no longer kills Windows setup (#3071)

  • scripts/build.sh and ./setup treat a failed CSO build or publish as optional. setup says which step failed (probe / build / publish), gives the log path (bin/.gstack-cso-build.log), says what still works, and prints the retry command (bun run build:cso && ./setup). If a failed publish restored the earlier helper, setup says previous CSO kept: <revision>.
  • GSTACK_STRICT_BUILD=1 keeps the failure fatal. The free-tests, make-pdf-gate and windows-setup-e2e builds set it.
  • scripts/build-cso.sh writes bin/.gstack-cso-build-result (result, stage, reason, revision, installed revision, launcher usable, diagnostic). It also re-checks the publisher, clears its EXIT trap and sets execfail before the native publisher exec, so only the locked child cleans the stage. If the exec fails, the parent cleans up and records why. The root cause of the vanishing staged files is still unproven; TODOS.md tracks it.
  • The Windows probe and build prefer pwsh and fall back to powershell.exe. Unknown probe failures keep their exit status and first output line (windows-toolchain-probe) instead of being labeled windows-msvc-toolchain.

Smart App Control: detect and explain (#2595, #2124)

  • browse, find-browse, pdf and gstack-global-discover now answer --version before any side effect, like design already did. Before this, browse --version started a server.
  • bin/gstack-launch-probe.sh classifies each compiled binary as native, blocked (spawn error, exit 126/127, or an application-control message), broken (launched but exited non-zero) or missing.
  • On Windows, setup names each blocked binary and the skills that need it. It also cites Windows: Smart App Control blocks browse.exe; the CLI has no Node lane (the server does) #2595, says which shell setup ran from and whether WSL is installed, lists today's workarounds (WSL, or turning SAC off), says how to undo, and links a new troubleshooting section.
  • gstack-doctor: the browse row reports blocked at launch instead of passing, a new binaries row covers the other four binaries, and a new cso row reads the build-result record.
  • No shim or launcher. A bun run fallback would load the user's project .env/bunfig.toml and can't be called from the PowerShell tool. Code signing is in TODOS.md and needs a signing account.
  • Unverified: nobody has run this on a machine with Smart App Control on. The exact Windows error text comes from reporters' captures, so setup prints the raw first line beside its classification.

Sidebar terminal font (#2287)

  • @tomfluff's commit is cherry-picked with original authorship: Consolas and the Cascadia faces now come before the CJK fallbacks. A regression case is in browse/test/sidebar-ux.test.ts.

Validation

  • Full free suite (bun run test:ubicloud, CI-mirroring VM) on 4637fae: 17/17 shards pass; 26,543 pass, 88 skip, 0 fail.
  • The first full run, on the previous head, failed. That failure is retained; it showed a real regression and a ratchet hit, both fixed in 1187917 and 45f08ae. Shard 1's git spawns also hit ETIMEDOUT in redact-prepush-target and shared-libs-source-reads; both pass locally and on the rerun.
  • Cheap checks pass: credential scan (0 high), generated freshness (gen:skill-docs --host all, no diff), actionlint, shellcheck, typecheck, the typecheck:test ratchet, and the module-size, test-of-test, spawnSync-tripwire and parity checks. No skill templates changed.
  • Reproduced before and after on Linux: an injected CSO publish failure made build.sh and ./setup exit 86 on main; both now exit 0, with the bundle, stamp and record written. The same failure under GSTACK_STRICT_BUILD=1 exits 1.
  • Pending in CI: windows-setup-e2e (--version probe on all five binaries, strict and non-strict forced CSO failures) and windows-free-tests. Paid evals run in this PR's E2E Evals workflow; setup and build.sh are shared build inputs, so selection falls back to the full PR gate. No local paid run.

Fixes #3071
Refs #2595
Refs #2124
Carries #2287 (closed with credit after this merges)

Credits: @dviolante (#3071 report and diagnosis, including the PowerShell 5.1 crash and the pwsh fix), @tomfluff (#2287), and for the Smart App Control diagnosis @knetics9000 (#2595, #2596), @smartjelic-sys (#2595), @pstilwell90 (#2124), @cko32002 (#2265) and @salluexez (#2127).

Open in Capy

Paid eval measurement (diagnostic, ship-measure; verdicts unchanged)

Both cases were measured on the CI image ghcr.io/garrytan/gstack/ci:6dd41084… (Claude Code 2.1.292, Bun 1.4.2, --jobs 2).

Case Kind Measurement Observed Bar Decision Est. spend Actual spend
qa-quick rule baseline (head 4637fae, before #3081) observed 8/10 9/10 strict, 8/10 qualified BELOW (fix round) unknown $12.64
ship-exploratory-unavailable rule baseline (head b29f022) observed 10/10 9/10 strict, 8/10 qualified MEETS unknown $17.23
ship-managed-hook-refresh rule baseline (head e9a1efc) observed 10/10 9/10 strict, 8/10 qualified MEETS unknown $2.73
  • qa-quick: both reds were 300 s session timeouts; the 8 passes took 195–290 s. v1.91.52.0 fix(qa): annotations limits shape; qa-quick does less work in the same 300 s budget #3081 is the fix round at the cause (qa-quick headroom). It measured 10/10 there, and qa-quick passed in this PR's CI run on b29f022 (233 s). The two timed-out trials reported no cost, so actual spend is higher than recorded.

  • ship-exploratory-unavailable: the single CI red on b29f022 was a model miss: the receipt cited probe-…-8f4b-… where the observed probe was …-8f39-… (test/helpers/qa-callers-fixture.ts:440). In 10 trials on the unchanged head, all passed in 154–202 s at $1.61–$1.83 each.

  • ship-managed-hook-refresh: the single CI red on e9a1efc was a model miss. On its first guard run the model added an undeclared echo "PREDPUSH_PROMPTED_PLACEHOLDER" line, so the fixture denied that Bash call (test/helpers/ship-hook-actor.ts:66, failing the check at :108). In 10 trials on the unchanged head, all passed in 37–49 s at about $0.25–$0.32 each.

tomfluff and others added 12 commits October 8, 2026 06:08
… the CJK fallbacks

On Windows none of the Mac/Linux monospace fonts in the stack are
installed, so the first font that resolves is Malgun Gothic (the Windows
Korean UI font). xterm.js sizes its character cell from that font's
advance width, and Malgun Gothic advances Latin glyphs in a full-width
CJK cell — doubling every cell and rendering the whole terminal (and the
sidepanel mono UI) as spaced-out text.

Insert Consolas (present on every Windows install) and the Cascadia
faces ahead of the CJK fonts in both the xterm fontFamily and the
--font-mono CSS var. The CJK fonts stay last for actual CJK coverage.
No bundled font, no user install needed.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01GKj8Nr8T4GvryTcWBJRMyC
… effect

browse --version started a server and exited 1, pdf printed usage and
exited 1, gstack-global-discover rejected the flag, and find-browse ran
discovery. A launch probe for Smart App Control (#2595) needs one
side-effect-free command that exits 0 on a healthy build, so browse,
find-browse, make-pdf and gstack-global-discover now answer --version
first (design already did).

Co-authored-by: capy-ai[bot] <230910855+capy-ai[bot]@users.noreply.github.com>
… stacks (#2287)

Regression test for @tomfluff's fix: the xterm fontFamily and --font-mono
must list Consolas before Noto Sans Mono CJK KR and Malgun Gothic, or
Windows renders the sidebar terminal double-width.

Co-authored-by: capy-ai[bot] <230910855+capy-ai[bot]@users.noreply.github.com>
…trap across the native publisher exec (#3071)

scripts/build-cso.sh now writes bin/.gstack-cso-build-result: result,
failed stage (build or publish), reason, this revision, the revision of
the generation still installed, whether its launcher is usable, and the
diagnostic log. An 'interrupted' entry is written before each stage so a
killed run is visible. A failed publish that restores the old generation
records it as still installed.

Before exec'ing the native publisher, the parent re-checks the locker,
clears its EXIT trap and enables execfail: the locked child's own trap
owns the stage. On Git Bash an exec of a native program may not replace
the shell, so the parent's trap could otherwise delete the stage under
the running child (the vanishing files in #3071; root cause unproven).
If the exec itself fails the parent cleans the stage and records it.

The Windows build prefers PowerShell 7 (pwsh) over Windows PowerShell
5.1, which crashed outright on the reporter's machine.

Co-authored-by: capy-ai[bot] <230910855+capy-ai[bot]@users.noreply.github.com>
… setup (#3071)

CSO was optional at probe time but fatal at build time: scripts/build.sh
ran build-cso.sh under set -e before the browse server bundle and the
completion stamp, and setup exited when the CSO artifact set was
incomplete. A failed CSO step now prints 'CSO unavailable: the <stage>
step failed' with its log (bin/.gstack-cso-build.log) and retry, and the
build and setup finish. GSTACK_STRICT_BUILD=1 keeps it fatal; the free-tests,
make-pdf-gate and windows-setup-e2e builds set it, so regressions still
fail CI.

setup's summary reads the build-result record instead of the pre-build
availability flag: probe failures keep their prerequisite instruction;
build and publish failures name the stage, the diagnostic and
'bun run build:cso && ./setup', and a restored earlier helper is
reported as 'previous CSO kept: <revision>'. setup records probe
failures in the same file.

The Windows prerequisite probe prefers pwsh, and a probe that fails for
any reason other than a missing toolchain or a compile error keeps its
exit status and first output line (windows-toolchain-probe) instead of
being labeled windows-msvc-toolchain. Reported and diagnosed by
@dviolante.

Co-authored-by: capy-ai[bot] <230910855+capy-ai[bot]@users.noreply.github.com>
… gstack-doctor (#2595, #2124)

Smart App Control refuses the five unsigned binaries gstack compiles
locally, and Git Bash reports it as 'Permission denied', so setup's
[ -x ] gate passed and skills failed later. bin/gstack-launch-probe.sh
runs each binary's side-effect-free --version and classifies it:
native, blocked (spawn error, exit 126/127, or an application-control
message), broken (launched, exited non-zero) or missing. It shows the
raw first output line, since the exact Windows text is unverified.

On Windows, setup names each blocked binary and the skills that need it,
cites #2595, says which shell ran setup and whether WSL is installed,
gives today's workarounds (WSL, or turning Smart App Control off), how to
undo, and the new troubleshooting section. gstack-doctor's browse row now
says 'blocked at launch' instead of passing, a binaries row covers the
other four, and a cso row reads the build-result record.

windows-setup-e2e builds with GSTACK_STRICT_BUILD=1, checks all five
binaries answer --version, and adds two forced CSO failures: fatal under
strict mode, and a completed setup that reports the failure and a doctor
cso warning under GSTACK_STRICT_BUILD=0.

No shim or launcher: it could not be called from PowerShell and would
load the caller's project .env/bunfig. Signing is the follow-up in
TODOS.md. Diagnosis credit: @knetics9000 (#2595, #2596), @smartjelic-sys
(#2595), @pstilwell90 (#2124), @cko32002 (#2265), @salluexez (#2127).

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

README's Windows section says /cso failures no longer stop setup
(GSTACK_STRICT_BUILD=1 keeps them fatal), documents Smart App Control as
a known issue with today's workarounds (WSL, or turning it off) and the
Consolas fix. troubleshooting.md gains a Windows section for blocked
binaries and an entry for CSO build/publish failures. TODOS.md replaces
the Node CLI lane item with Windows code signing (needs a signing
account), the #3071 root-cause follow-up and SAC text verification.

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

Setup wrote bin/.gstack-cso-build-result for every probe-stage outcome,
so a run that built nothing still changed the source checkout's bin/
(caught by setup-codex-scope's unchanged-source checks). A missing
prerequisite now comes from the run's own probe, as before, and setup
only removes a stale record alongside the removed helper.
scripts/build-cso.sh remains the only writer. The doctor's cso row
reports 'native helper not built' with no record.

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

The standalone file read extension sources without importing product
code, which the test-of-test ratchet rejects; sidebar-ux already owns
the sidepanel.css structural checks.

Co-authored-by: capy-ai[bot] <230910855+capy-ai[bot]@users.noreply.github.com>
…lure, detects Smart App Control, Consolas terminal font

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

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

# Conflicts:
#	CHANGELOG.md
#	VERSION
#	agents-digest/gstack-AGENTS.md
#	package.json
@trunk-io

trunk-io Bot commented Oct 8, 2026 •

Copy link
Copy Markdown

😎 This pull request was merged.

@github-actions

github-actions Bot commented Oct 8, 2026 •

Copy link
Copy Markdown
Contributor

E2E Evals: ✅ PASS

[test:paid] VERDICT GREEN — lane gate/pr, attempt 1
  rule 107/107 · behavior 0/0 · judge 24/24 · quarantined 0 (0 failing the lane)
  SKIPPED 0 · INFRA 0 · INCOMPLETE 0 · unattributed 0 · ACTION REQUIRED 0
  wall 8m23s · cost $90.80 known + 53 of 131 trial(s) cost unknown

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

Profile: pr / mode full-fallback; selected behaviors: 107, judges: 24. Deferred to scheduled/release coverage: 136 behaviors and 0 changed prompt files. Deferred checks did not run and receive no PR-pass credit.

Derived dependents (scripts/pr-dependencies.ts):

  • bin/gstack-doctor: 19 case(s), 0 judge(s)
  • bin/gstack-global-discover.ts: 32 case(s), 2 judge(s)
  • bin/gstack-launch-probe.sh: 19 case(s), 0 judge(s)
  • extension/sidepanel-terminal.js: 3 case(s), 0 judge(s)
  • extension/sidepanel.css: 3 case(s), 0 judge(s)
  • make-pdf/src/cli.ts: 220 case(s), 24 judge(s)
  • scripts/build-cso.sh: 19 case(s), 0 judge(s)
  • scripts/build.sh: 225 case(s), 24 judge(s)
Rule and judge shards
Shard Automated result Manual/unscored Executed Reused Status Cost
e2e/skill-e2e-workflow 4/4 0 4 0 ✅ $3.1
e2e-safety-codex-consult/skill-e2e-safety-codex-consult 1/1 0 1 0 ✅ $0.91
e2e/skill-e2e-shared-libs-paths--shared-libs-review-path-eligibility 1/1 0 1 0 ✅ $3.59
e2e-ship-docsync/skill-e2e-ship-docsync--ship-docsync-stale-before 1/1 0 1 0 ✅ $0.99
e2e/skill-e2e-shared-libs--shared-libs-unsupported-git 1/1 0 1 0 ✅ $0.56
e2e/skill-e2e-shared-libs--shared-libs-review-lifecycle 1/1 0 1 0 ✅ $2.58
e2e-review-army/skill-e2e-review-army--review-army-migration-safety 1/1 0 1 0 ✅ $1.2
e2e/skill-e2e-shared-libs--shared-libs-read-only 1/1 0 1 0 ✅ $0.85
e2e/skill-e2e-ship-skip 1/1 0 1 0 ✅ $0.57
e2e-hermetic/skill-e2e-hermetic-canary 2/2 0 2 0 ✅ $0.02
e2e-ship-docsync/skill-e2e-ship-docsync--ship-docsync-completion 1/1 0 1 0 ✅ $3.61
e2e-qa-functional-fix/skill-e2e-qa-functional-fix 2/2 0 2 0 ✅ $3.04
e2e/skill-e2e-test-value 3/3 0 3 0 ✅ $2.83
e2e-retro/skill-e2e-retro 1/1 0 1 0 ✅ $1.15
e2e-qa-workflow/skill-e2e-qa-workflow--qa-only-no-fix 1/1 0 1 0 ✅ $1.86
e2e/skill-e2e-shared-libs--shared-libs-review-revalidation 1/1 0 1 0 ✅ $4.76
e2e-deploy/skill-e2e-deploy--land-and-deploy-workflow 1/1 0 1 0 ✅ $1.69
e2e-review/skill-e2e-review 2/2 0 2 0 ✅ $1.35
e2e-ship-docsync/skill-e2e-ship-docsync--ship-docsync-failure 1/1 0 1 0 ✅ $2.02
e2e-qa-callers/skill-e2e-qa-callers--ship-exploratory-late-input 1/1 0 1 0 ✅ $2.21
e2e-skillify/skill-e2e-skillify 3/3 0 3 0 ✅ $2.67
e2e-ship-docsync/skill-e2e-ship-docsync--ship-docsync-recovery 1/1 0 1 0 ✅ $1.04
llm-judge/skill-llm-eval 24/24 0 24 0 ✅ $1.44
e2e/skill-e2e-coverage-audit 2/2 0 2 0 ✅ $0.89
e2e-design/skill-e2e-design--design-review-detector-shim-dom 1/1 0 1 0 ✅ $0.63
e2e-ship-docsync/skill-e2e-ship-docsync--ship-docsync-missing-asset 1/1 0 1 0 ✅ $1.21
e2e-ship-docsync/skill-e2e-ship-docsync--ship-docsync-late-result 1/1 0 1 0 ✅ $1.01
e2e-deploy/skill-e2e-deploy--land-and-deploy-first-run 1/1 0 1 0 ✅ $1.12
e2e-design/skill-e2e-design--design-review-plugin-handoff 1/1 0 1 0 ✅ $0.56
e2e-docsync-spawned/skill-e2e-docsync-spawned 1/1 0 1 0 ✅ $1.21
e2e-review-army/skill-e2e-review-army--review-army-perf-n-plus-one 1/1 0 1 0 ✅ $1.03
e2e-deploy/skill-e2e-deploy--land-and-deploy-review-gate 1/1 0 1 0 ✅ $1.03
e2e/skill-e2e-shared-libs-paths--shared-libs-review-index-flags 1/1 0 1 0 ✅ $2.38
e2e-ship-docsync/skill-e2e-ship-docsync--ship-docsync-stale-after 1/1 0 1 0 ✅ $1.05
e2e-deploy/skill-e2e-deploy--benchmark-workflow 1/1 0 1 0 ✅ $0.82
e2e-qa-callers/skill-e2e-qa-callers--ship-exploratory-small-cli 1/1 0 1 0 ✅ $1.67
e2e/skill-e2e-plan--plan-review-report 1/1 0 1 0 ✅ $1.1
e2e-qa-callers/skill-e2e-qa-callers--ship-exploratory-unavailable 1/1 0 1 0 ✅ $1.72
e2e-review-army/skill-e2e-review-army--review-army-quality-score 1/1 0 1 0 ✅ $0.37
e2e/skill-e2e-ship-hook-consent 2/2 0 2 0 ✅ $0.71
e2e-qa-workflow/skill-e2e-qa-workflow--qa-quick 1/1 0 1 0 ✅ $1.33
e2e/skill-e2e-shared-libs-paths--shared-libs-review-prior-coverage 1/1 0 1 0 ✅ $2.33
e2e-qa-callers/skill-e2e-qa-callers--review-exploratory-small-cli 1/1 0 1 0 ✅ $1.94
e2e-qa-functional/skill-e2e-qa-functional 2/2 0 2 0 ✅ $2.5
e2e-cso/skill-e2e-cso 1/1 0 1 0 ✅ $1.4
e2e-qa-callers/skill-e2e-qa-callers--ship-exploratory-plan-checks 1/1 0 1 0 ✅ $1.83
e2e-ship-docsync/skill-e2e-ship-docsync--ship-docsync-current 1/1 0 1 0 ✅ $3.31
e2e-deploy/skill-e2e-deploy--setup-deploy-workflow 1/1 0 1 0 ✅ $0.45
e2e-review-army/skill-e2e-review-army--review-army-json-findings 1/1 0 1 0 ✅ $0.21
e2e-ship-docsync/skill-e2e-ship-docsync--ship-docsync-store 1/1 0 1 0 ✅ $3.03
e2e-third-party-actions/skill-e2e-third-party-actions 5/5 0 5 0 ✅ $1.18
e2e-plan-tune/skill-e2e-plan-tune 1/1 0 1 0 ✅ $0.54
e2e-review-attribution/skill-e2e-review-attribution 3/3 0 3 0 ✅ $0.92
e2e-session-intelligence/skill-e2e-session-intelligence 4/4 0 4 0 ✅ $0.74
e2e-triage/skill-e2e-triage 1/1 0 1 0 ✅ $0.24
e2e-safety-ship-evidence/skill-e2e-safety-ship-evidence 1/1 0 1 0 ✅ $0.55
e2e-ship-docsync/skill-e2e-ship-docsync--ship-docsync-timeout-unsettled 1/1 0 1 0 ✅ $0.57
e2e-ship-docsync/skill-e2e-ship-docsync--ship-docsync-launch-failure 1/1 0 1 0 ✅ $0.44
e2e-ship-docsync/skill-e2e-ship-docsync--ship-docsync-missing-marker 1/1 0 1 0 ✅ $0.51
e2e-browse/skill-e2e-bws 6/6 0 6 0 ✅ $0.85
e2e-learnings/skill-e2e-learnings 1/1 0 1 0 ✅ $0.33
e2e-safety-pair-agent/skill-e2e-safety-pair-agent 1/1 0 1 0 ✅ $0.28
e2e/skill-e2e-investigate-owned-completion 1/1 0 1 0 ✅ $0.2
e2e-design/skill-e2e-design--design-review-detector-shim 1/1 0 1 0 ✅ $0.35
e2e-qa-workflow/skill-e2e-qa-workflow--qa-bootstrap 1/1 0 1 0 ✅ $0.31
e2e-review-army/skill-e2e-review-army--review-army-delivery-audit 1/1 0 1 0 ✅ $0.33
e2e/skill-e2e-ship-hook-refresh 1/1 0 1 0 ✅ $0.32
e2e/skill-e2e-investigate-owned-termination 2/2 0 2 0 ✅ $0.51
e2e-deploy/skill-e2e-deploy--canary-workflow 1/1 0 1 0 ✅ $0.39
e2e-design/skill-e2e-design--plan-design-review-no-ui-scope 1/1 0 1 0 ✅ $0.36
Fail-closed reconciliation
       158s  test/skill-e2e-ship-docsync.test.ts#ship-docsync-stale-after
  slice 11  passed            161s  test/skill-e2e-deploy.test.ts#land-and-deploy-review-gate
  slice 11  passed            148s  test/skill-e2e-qa-callers.test.ts#ship-exploratory-small-cli
  slice 11  passed            165s  test/skill-e2e-shared-libs-paths.test.ts#shared-libs-review-index-flags
  slice 11  passed            102s  test/skill-e2e-deploy.test.ts#benchmark-workflow
  slice 11  passed            138s  test/skill-e2e-review-army.test.ts#review-army-perf-n-plus-one
  slice 12  passed            123s  test/skill-e2e-ship-docsync.test.ts#ship-docsync-late-result
  slice 12  passed             98s  test/skill-e2e-plan-ceo-plan-mode.test.ts
  slice 12  passed             99s  test/skill-e2e-docsync-spawned.test.ts
  slice 12  passed            100s  test/skill-e2e-ship-docsync.test.ts#ship-docsync-missing-asset
  slice 12  passed             80s  test/skill-e2e-plan-devex-plan-mode.test.ts
  slice 12  passed            146s  test/skill-e2e-deploy.test.ts#land-and-deploy-first-run
  slice 12  passed             82s  test/skill-e2e-design.test.ts#design-review-detector-shim-dom
  slice 12  passed             95s  test/skill-e2e-design.test.ts#design-review-plugin-handoff
  slice 13  passed             74s  test/skill-e2e-safety-ship-evidence.test.ts
  slice 13  passed             93s  test/skill-e2e-review-attribution.test.ts
  slice 13  passed             67s  test/skill-e2e-office-hours-auto-mode.test.ts
  slice 13  passed             59s  test/skill-e2e-bws.test.ts
  slice 13  passed             71s  test/skill-e2e-third-party-actions.test.ts
  slice 13  passed             68s  test/skill-e2e-plan-tune.test.ts
  slice 13  passed             25s  test/skill-e2e-triage.test.ts
  slice 13  passed             70s  test/skill-e2e-ship-docsync.test.ts#ship-docsync-timeout-unsettled
  slice 13  passed             58s  test/skill-e2e-ship-docsync.test.ts#ship-docsync-missing-marker
  slice 13  passed             47s  test/skill-e2e-ask-user-question-format-compliance.test.ts
  slice 13  passed             46s  test/skill-e2e-ship-docsync.test.ts#ship-docsync-launch-failure
  slice 13  passed             52s  test/skill-e2e-session-intelligence.test.ts
  slice 14  passed             43s  test/skill-e2e-investigate-owned-termination.test.ts
  slice 14  passed             42s  test/skill-e2e-design.test.ts#design-review-detector-shim
  slice 14  passed             55s  test/skill-e2e-deploy.test.ts#canary-workflow
  slice 14  passed             43s  test/skill-e2e-ship-hook-refresh.test.ts
  slice 14  passed             50s  test/skill-e2e-design.test.ts#plan-design-review-no-ui-scope
  slice 14  passed             32s  test/skill-e2e-review-army.test.ts#review-army-delivery-audit
  slice 14  passed             28s  test/skill-e2e-investigate-owned-completion.test.ts
  slice 14  passed             34s  test/skill-e2e-safety-pair-agent.test.ts
  slice 14  passed             51s  test/skill-e2e-qa-workflow.test.ts#qa-bootstrap
  slice 14  passed             32s  test/skill-e2e-learnings.test.ts
  slice 14  passed             34s  test/skill-e2e-diagram.test.ts
[test:paid] collector final outcomes: 121 executed, 0 reused; 121 passed, 0 failed, 0 manual accepted (unscored; no score-cache credit) (121 attempt records from 70 collectors; every record counts)
[test:paid] deselected testcases, zero credit (307):
[test:paid]    293  sibling case of a case shard (its own shard runs it)
[test:paid]      8  periodic-tier case (this lane runs gate)
[test:paid]      6  Bun hook placeholder of a skipped describe block (not a test)
[test:paid] VERDICT GREEN — lane gate/pr, attempt 1
  rule 107/107 · behavior 0/0 · judge 24/24 · quarantined 0 (0 failing the lane)
  SKIPPED 0 · INFRA 0 · INCOMPLETE 0 · unattributed 0 · ACTION REQUIRED 0
  wall 8m23s · cost $90.80 known + 53 of 131 trial(s) cost unknown
[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.

…ws-setup-degrade

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

# Conflicts:
#	CHANGELOG.md
#	VERSION
#	agents-digest/gstack-AGENTS.md
#	package.json
@github-actions github-actions Bot changed the title v1.91.43.0 fix(windows): setup degrades instead of dying on a CSO failure, detects Smart App Control, Consolas terminal font v1.91.53.0 fix(windows): setup degrades instead of dying on a CSO failure, detects Smart App Control, Consolas terminal font Oct 8, 2026
@capy-ai capy-ai Bot changed the title v1.91.53.0 fix(windows): setup degrades instead of dying on a CSO failure, detects Smart App Control, Consolas terminal font v1.91.57.0 fix(windows): setup degrades instead of dying on a CSO failure, detects Smart App Control, Consolas terminal font Oct 8, 2026
@github-actions github-actions Bot changed the title v1.91.57.0 fix(windows): setup degrades instead of dying on a CSO failure, detects Smart App Control, Consolas terminal font v1.91.53.0 fix(windows): setup degrades instead of dying on a CSO failure, detects Smart App Control, Consolas terminal font Oct 8, 2026
…ws-setup-degrade

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

# Conflicts:
#	CHANGELOG.md
#	VERSION
#	agents-digest/gstack-AGENTS.md
#	package.json
@github-actions github-actions Bot changed the title v1.91.53.0 fix(windows): setup degrades instead of dying on a CSO failure, detects Smart App Control, Consolas terminal font v1.91.57.0 fix(windows): setup degrades instead of dying on a CSO failure, detects Smart App Control, Consolas terminal font Oct 8, 2026
@capy-ai capy-ai Bot changed the title v1.91.57.0 fix(windows): setup degrades instead of dying on a CSO failure, detects Smart App Control, Consolas terminal font v1.91.60.0 fix(windows): setup degrades instead of dying on a CSO failure, detects Smart App Control, Consolas terminal font Oct 8, 2026
@github-actions github-actions Bot changed the title v1.91.60.0 fix(windows): setup degrades instead of dying on a CSO failure, detects Smart App Control, Consolas terminal font v1.91.57.0 fix(windows): setup degrades instead of dying on a CSO failure, detects Smart App Control, Consolas terminal font Oct 8, 2026
…ws-setup-degrade

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

# Conflicts:
#	CHANGELOG.md
#	VERSION
#	agents-digest/gstack-AGENTS.md
#	package.json
@github-actions github-actions Bot changed the title v1.91.57.0 fix(windows): setup degrades instead of dying on a CSO failure, detects Smart App Control, Consolas terminal font v1.91.60.0 fix(windows): setup degrades instead of dying on a CSO failure, detects Smart App Control, Consolas terminal font Oct 8, 2026
@capy-ai
capy-ai Bot merged commit 4dfd83b into main Oct 8, 2026
79 checks passed
garrytan added a commit that referenced this pull request Oct 8, 2026
…ll-footprint

C1 landed as #3079 (v1.91.60.0); C2 keeps v1.91.61.0 above it.

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

Copy link
Copy Markdown

Retested on v1.91.65.0 (b357b50) after #3079. Setup now completes and degrades correctly
("CSO unavailable: the native helper's publish step failed (exit 1)"), and pwsh is used for
the MSVC probe and build. Thanks.

The vanishing files still reproduce. bin/.gstack-cso-build-result:
result=failed, stage=publish, reason=exit 1, revision=1.91.65.0 (b357b50), launcher=no
Log tail: launcher-windows.c / publish-lock.c compile, then
"Staged CSO core is not one executable regular file."

Since #3079 clears the parent EXIT trap and sets execfail before the native publisher exec,
the parent cleanup trap is ruled out as the cause of the missing core, launcher and
generation files.

levi85 pushed a commit to levi85/gstack that referenced this pull request Oct 14, 2026
…lure, detects Smart App Control, Consolas terminal font (garrytan#3079)

* Fix spaced-out terminal text on Windows: put a Latin monospace before the CJK fallbacks

On Windows none of the Mac/Linux monospace fonts in the stack are
installed, so the first font that resolves is Malgun Gothic (the Windows
Korean UI font). xterm.js sizes its character cell from that font's
advance width, and Malgun Gothic advances Latin glyphs in a full-width
CJK cell — doubling every cell and rendering the whole terminal (and the
sidepanel mono UI) as spaced-out text.

Insert Consolas (present on every Windows install) and the Cascadia
faces ahead of the CJK fonts in both the xterm fontFamily and the
--font-mono CSS var. The CJK fonts stay last for actual CJK coverage.
No bundled font, no user install needed.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01GKj8Nr8T4GvryTcWBJRMyC

* fix(windows): every compiled binary answers --version before any side effect

browse --version started a server and exited 1, pdf printed usage and
exited 1, gstack-global-discover rejected the flag, and find-browse ran
discovery. A launch probe for Smart App Control (garrytan#2595) needs one
side-effect-free command that exits 0 on a healthy build, so browse,
find-browse, make-pdf and gstack-global-discover now answer --version
first (design already did).

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

* test(extension): pin Consolas ahead of the CJK fallbacks in both mono stacks (garrytan#2287)

Regression test for @tomfluff's fix: the xterm fontFamily and --font-mono
must list Consolas before Noto Sans Mono CJK KR and Malgun Gothic, or
Windows renders the sidebar terminal double-width.

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

* fix(cso): record each CSO build's outcome and stop arming the parent trap across the native publisher exec (garrytan#3071)

scripts/build-cso.sh now writes bin/.gstack-cso-build-result: result,
failed stage (build or publish), reason, this revision, the revision of
the generation still installed, whether its launcher is usable, and the
diagnostic log. An 'interrupted' entry is written before each stage so a
killed run is visible. A failed publish that restores the old generation
records it as still installed.

Before exec'ing the native publisher, the parent re-checks the locker,
clears its EXIT trap and enables execfail: the locked child's own trap
owns the stage. On Git Bash an exec of a native program may not replace
the shell, so the parent's trap could otherwise delete the stage under
the running child (the vanishing files in garrytan#3071; root cause unproven).
If the exec itself fails the parent cleans the stage and records it.

The Windows build prefers PowerShell 7 (pwsh) over Windows PowerShell
5.1, which crashed outright on the reporter's machine.

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

* fix(setup): an optional CSO build or publish failure no longer aborts setup (garrytan#3071)

CSO was optional at probe time but fatal at build time: scripts/build.sh
ran build-cso.sh under set -e before the browse server bundle and the
completion stamp, and setup exited when the CSO artifact set was
incomplete. A failed CSO step now prints 'CSO unavailable: the <stage>
step failed' with its log (bin/.gstack-cso-build.log) and retry, and the
build and setup finish. GSTACK_STRICT_BUILD=1 keeps it fatal; the free-tests,
make-pdf-gate and windows-setup-e2e builds set it, so regressions still
fail CI.

setup's summary reads the build-result record instead of the pre-build
availability flag: probe failures keep their prerequisite instruction;
build and publish failures name the stage, the diagnostic and
'bun run build:cso && ./setup', and a restored earlier helper is
reported as 'previous CSO kept: <revision>'. setup records probe
failures in the same file.

The Windows prerequisite probe prefers pwsh, and a probe that fails for
any reason other than a missing toolchain or a compile error keeps its
exit status and first output line (windows-toolchain-probe) instead of
being labeled windows-msvc-toolchain. Reported and diagnosed by
@dviolante.

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

* feat(windows): detect Smart App Control-blocked binaries in setup and gstack-doctor (garrytan#2595, garrytan#2124)

Smart App Control refuses the five unsigned binaries gstack compiles
locally, and Git Bash reports it as 'Permission denied', so setup's
[ -x ] gate passed and skills failed later. bin/gstack-launch-probe.sh
runs each binary's side-effect-free --version and classifies it:
native, blocked (spawn error, exit 126/127, or an application-control
message), broken (launched, exited non-zero) or missing. It shows the
raw first output line, since the exact Windows text is unverified.

On Windows, setup names each blocked binary and the skills that need it,
cites garrytan#2595, says which shell ran setup and whether WSL is installed,
gives today's workarounds (WSL, or turning Smart App Control off), how to
undo, and the new troubleshooting section. gstack-doctor's browse row now
says 'blocked at launch' instead of passing, a binaries row covers the
other four, and a cso row reads the build-result record.

windows-setup-e2e builds with GSTACK_STRICT_BUILD=1, checks all five
binaries answer --version, and adds two forced CSO failures: fatal under
strict mode, and a completed setup that reports the failure and a doctor
cso warning under GSTACK_STRICT_BUILD=0.

No shim or launcher: it could not be called from PowerShell and would
load the caller's project .env/bunfig. Signing is the follow-up in
TODOS.md. Diagnosis credit: @knetics9000 (garrytan#2595, garrytan#2596), @smartjelic-sys
(garrytan#2595), @pstilwell90 (garrytan#2124), @cko32002 (garrytan#2265), @salluexez (garrytan#2127).

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

* docs: Windows Smart App Control known issue, optional CSO failures, doctor rows

README's Windows section says /cso failures no longer stop setup
(GSTACK_STRICT_BUILD=1 keeps them fatal), documents Smart App Control as
a known issue with today's workarounds (WSL, or turning it off) and the
Consolas fix. troubleshooting.md gains a Windows section for blocked
binaries and an entry for CSO build/publish failures. TODOS.md replaces
the Node CLI lane item with Windows code signing (needs a signing
account), the garrytan#3071 root-cause follow-up and SAC text verification.

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

* fix(setup): never write the CSO build record into a source checkout that needed no build

Setup wrote bin/.gstack-cso-build-result for every probe-stage outcome,
so a run that built nothing still changed the source checkout's bin/
(caught by setup-codex-scope's unchanged-source checks). A missing
prerequisite now comes from the run's own probe, as before, and setup
only removes a stale record alongside the removed helper.
scripts/build-cso.sh remains the only writer. The doctor's cso row
reports 'native helper not built' with no record.

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

* test(extension): move the Consolas font-stack check into sidebar-ux (garrytan#2287)

The standalone file read extension sources without importing product
code, which the test-of-test ratchet rejects; sidebar-ux already owns
the sidepanel.css structural checks.

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

* v1.91.43.0 fix(windows): setup degrades instead of dying on a CSO failure, detects Smart App Control, Consolas terminal font

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

---------

Co-authored-by: Yotam <yotsurfing@gmail.com>
Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
Co-authored-by: capy-ai[bot] <230910855+capy-ai[bot]@users.noreply.github.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

3 participants