Skip to content

v1.91.116.0 feat: field list 2 wave B: gstack-ship-queue, approval classes, state-machine review, pregate timing check, update-check main moves - #3235

Merged
capy-ai[bot] merged 80 commits into
mainfrom
capy/fl2-wave-B
Oct 17, 2026
Merged

capy-ai[bot] merged 80 commits into
mainfrom
capy/fl2-wave-B

Conversation

@garrytan

@garrytan garrytan commented Oct 17, 2026 •

Copy link
Copy Markdown
Owner

Field list 2, wave B: the ship queue, approval classes, state-machine review, timing lint and update-check items from the approved plan (docs/designs/field-list-2-2026-10-16/PLAN.md). Targets main; stamped v1.91.116.0 on main c71d764 (v1.91.115.0, wave A #3234).

Shared merge queue: gstack-ship-queue (W1)

  • ready prints one READY block: head, STAMP_VERSION=unstamped, CI at that exact head, pregate and gate state. It refuses when the tree differs from the pushed head.
  • stamp --pr --version --expect-gated --expect-base checks every proof input, restamps through gstack-restamp, and journals each stage, so an identical retry resumes. It prints QUEUE_STAMP: … receipt=<sha256>, or QUEUE_STALE when the base moved.
  • The coordinator runs verify against the pushed PR head: it reruns the tree receipt, and recomputes a gate-ahead merge with git merge-tree, so a stamp claim is never taken on trust.
  • gate-ahead attempts each own a directory and worktree, and results are bound to the gated head, the predecessor and the command.
  • Ship policy gains gate_command, full_e2e and min_gstack_version. A gstack older than a key refuses with POLICY_GSTACK_TOO_OLD. Unknown keys stay fail-closed (round-2 finding), and validate prints each key's introducing version.
  • Fixed a restamp defect: gate-ahead dropped the lane's CHANGELOG entry when both PRs had taken the same tentative stamp (mergeChangelogs).
  • Acceptance fixture: a real gbrain stamp pair that the tree receipt judges same-modulo-stamps, with negative controls. See docs/ship-policy.md#run-a-shared-merge-queue.

Approval classes and the state-machine specialist (W2, W3)

  • gstack-approval-classes check reads .gstack/approval-classes.json from the base branch and reports APPROVAL_CLASS hits. gstack-ship-receipt write enforces citations of the form Approved by <owner> <date> via <ref> [for <class>@<digest12>]. A citation must be bound to the effects being shipped (round-2 High), checked through an APPROVED autoplan run, a maintainer's comment or review, or an explicit scope digest.
  • /review adds a state-machines specialist that builds a kind × action × resulting-row matrix. gstack-state-matrix check reports the gaps, and an untested cell is CRITICAL. The free regression uses a real capture on a fixture shaped like #6792.

Pregate timing check, update-check, #3215 (W4, W12, W10)

  • Pregate's 7th check, timing, flags wall-time bounds, CPU-time bounds and sleep-then-assert on added test lines. An escape needs gstack-timing-ok: <reason>. It warns rather than blocks; the measurements behind that are in docs/pregate.md#timing. /investigate gains a timing-flake playbook, and the review checklist gains the matching rule.
  • gstack-update-check now reports a moved main at an equal VERSION as UPGRADE_AVAILABLE <ver> <ver>+<n> <sha>, using the compare API through the receipted fetch and never running git fetch. The cache is bound to HEAD and upstream, and snooze is keyed by SHA.
  • fix(pregate): allow docs-only diffs without PREGATE_NO_LANE #3215's two commits ride here unchanged, authored by Cursor Agent, with an added reviewer-edge test. Per GStack Minder, fix(pregate): allow docs-only diffs without PREGATE_NO_LANE #3215 closes as superseded, with credit, when this merges.

Shared registries

Result codes and anchors are appended. B's release-path rows (ship queue, pregate timing, approval classes, state matrix) live in lib/result-codes-release.ts, which RESULT_CODES spreads in, so lib/result-codes.ts stays under the 800-line module ratchet. The new module is registered in the ratchet and in the selection-data list. The pregate-timing fixtures are registered as free-only. The gstack-upgrade context-budget ceiling is raised to its capture value under the ratchet protocol.

Gate edits (listed for review)

  • test/egress-receipt-wiring.test.ts: a reasoned scanner exemption for bin/gstack-state-matrix. Its only git fetch is the fix text inside an error message.
  • .github/workflows/evals-periodic.yml: max-parallel is raised from 36 to 38. The periodic plan grew by B's review-army-state-matrix and v1.91.114.0 feat(dx): score every error for an AI agent reader (agent-ready error contract + gstack-error-capture) #3226's DX case. The workflow comment asks for this, and test/evals-workflow-wiring.test.ts enforces it.
  • test/review-workflow-clarity.test.ts (from v1.91.111.0 fix(evals): four PR-gate background reds were a detector, an interface, a helper and a workflow-block defect #3231): signals are now matched with their full name (SCOPE_[A-Z_]+). A signal the scope block does not print must be printed by the helper its own selection line runs (gstack-state-matrix detect → SCOPE_STATE_MACHINE).
  • test/hermetic-skill-runtime.test.ts: the fixture writes the identity cache line that W12 introduced. A legacy one-line cache is refreshed once by design.
  • test/update-check-main-moved.test.ts (new in this PR): the prose assertion follows the trimmed gstack-upgrade wording.
  • test/plan-tune-cathedral.test.ts and test/timeline-stop-hook-slug.test.ts: their fixture copy lists include lib/result-codes-release.ts next to lib/result-codes.ts. .github/workflows/windows-pregate-e2e.yml adds it to its path filter.
  • test/state-matrix.test.ts (new in this PR): the gstack-slug call uses the test's own state root. It had written into the real ~/.gstack/slug-cache, which tripped home containment.
  • scripts/lib/windows-curation.ts: test/pregate-docs-lane-review.test.ts and test/pregate-remote-gbrain.test.ts (both new here) are curated out of the Windows subset. Like the other pregate fixture tests, they spawn bin/gstack-pregate through runBin, and Windows CreateProcess does not parse shebangs.
  • Arrived through wave A (v1.91.115.0 feat: field list 2 wave A: autoplan round cap and public export, eval-plan diagnostics and model rules, --for review-voice #3234, merged), listed here at GStack Minder's request: test/helpers/docsync-observer.ts accepts GSTACK_SESSION_KIND=spawned <skills>/bin/gstack-skill-start --help, with a regression test in test/docsync-lifecycle-interface.test.ts.

Validation

  • Head 6f8ef0b merges main c71d764 and is stamped v1.91.116.0. The stamp commit 7864483 has tree receipt TREE: same-modulo-stamps against its parent. Every later commit is a test or curation fix, listed above.
  • Full free suite on Ubicloud at 48f0cef: 17 shards and 28,942 tests pass, with no flaky retries and home containment clean. The two later commits change only the Windows curation list, and test/test-free-shards.test.ts and test/windows-native-workflows.test.ts pass on it.
  • CI at 6f8ef0b is all green: 69 checks, covering 21 free-suite shards, 6 Windows shards and 15 paid slices.
  • The paid gate is GREEN (run 38998005661): 108/108 rule cases and 24/24 judges, with nothing skipped, infra, incomplete or quarantined. It cost $92.36.
  • The /review delta on 7864483 found nothing at any level (P0 through P3 all zero), with a verdict on each gate edit. The scope-signal witness it called weaker now requires the helper's computed emission.

Open in Capy

garrytan and others added 21 commits October 16, 2026 23:10
…e install shows in every relayed trailer (field list 2 item 13, #2378)

Co-authored-by: capy-ai[bot] <230910855+capy-ai[bot]@users.noreply.github.com>
…ed after a wake is reclaimed; a skipped session-start upgrade ends fail behind, never ok (GBRA-105, GBRA-106)

Co-authored-by: capy-ai[bot] <230910855+capy-ai[bot]@users.noreply.github.com>
…p the lease), ps identity is timezone-independent, and reclaim never deletes a concurrent renewal

Co-authored-by: capy-ai[bot] <230910855+capy-ai[bot]@users.noreply.github.com>
…public export without machine paths, opt-in durable checkpoints (field list 2 W5-W7)

Co-authored-by: capy-ai[bot] <230910855+capy-ai[bot]@users.noreply.github.com>
…m rereads the record judged stale, so a renewal is never deleted or hidden

Co-authored-by: capy-ai[bot] <230910855+capy-ai[bot]@users.noreply.github.com>
… holder is dead or its pid reused, unlock removes only its own lock, touch exits 3 under a live holder

Co-authored-by: capy-ai[bot] <230910855+capy-ai[bot]@users.noreply.github.com>
…ore removing it; gstack-skill-start reports a lease the held lock kept out

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>
…mmand, reviewer prompt trailer (field list 2 W11)

Co-authored-by: capy-ai[bot] <230910855+capy-ai[bot]@users.noreply.github.com>
(cherry picked from commit 89bf556)
…existing install tests

Co-authored-by: capy-ai[bot] <230910855+capy-ai[bot]@users.noreply.github.com>
(cherry picked from commit 7f6c704)
…ane)

Co-authored-by: capy-ai[bot] <230910855+capy-ai[bot]@users.noreply.github.com>
(cherry picked from commit 2545d9a)
…ubagent paragraph (W11; ratchet protocol, capture value)

Co-authored-by: capy-ai[bot] <230910855+capy-ai[bot]@users.noreply.github.com>
…els.json lint (W9), WIP

Co-authored-by: capy-ai[bot] <230910855+capy-ai[bot]@users.noreply.github.com>
(cherry picked from commit b509096)
…chors, /eval-plan steps

Co-authored-by: capy-ai[bot] <230910855+capy-ai[bot]@users.noreply.github.com>
(cherry picked from commit 9335e45)
…pted flags

Co-authored-by: capy-ai[bot] <230910855+capy-ai[bot]@users.noreply.github.com>
(cherry picked from commit a7a974d)
…directory (#3233's launch contract)

Co-authored-by: capy-ai[bot] <230910855+capy-ai[bot]@users.noreply.github.com>
garrytan and others added 4 commits October 17, 2026 00:57
… product name, not the English idiom (paid run 38988927989 tpa-absent-linux false positive)

Co-authored-by: capy-ai[bot] <230910855+capy-ai[bot]@users.noreply.github.com>
…riting; a deferred close keeps earlier undecided findings; reopening CEO grants Eng its rerun (review of #3234)

Co-authored-by: capy-ai[bot] <230910855+capy-ai[bot]@users.noreply.github.com>
garrytan added a commit that referenced this pull request Oct 17, 2026
The timing check's git diff honored diff.external, textconv and
diff.noprefix, so a configured driver hid every added line and the check
passed. Run it with --no-ext-diff --no-textconv and explicit a/ b/
prefixes, and report a git diff that fails or does not finish as
incomplete (PREGATE_INCOMPLETE), which a warn downgrade does not soften.

Review of #3235, sibling of P1-4 (lib/pregate/checks/timing.ts:189).

Co-authored-by: capy-ai[bot] <230910855+capy-ai[bot]@users.noreply.github.com>
garrytan added a commit that referenced this pull request Oct 17, 2026
…licit tokens are authoritative, native diffs fail closed (review #3235 P1-2, P1-3, P1-4)

Co-authored-by: capy-ai[bot] <230910855+capy-ai[bot]@users.noreply.github.com>
garrytan added a commit that referenced this pull request Oct 17, 2026
…al and textconv (review #3235 P1-4)

Co-authored-by: capy-ai[bot] <230910855+capy-ai[bot]@users.noreply.github.com>
garrytan and others added 12 commits October 17, 2026 01:55
…an-budget's default estimate (test-of-test ratchet)

Co-authored-by: capy-ai[bot] <230910855+capy-ai[bot]@users.noreply.github.com>
… fetch hint, fit the periodic plan's 37 slices

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

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>

# Conflicts:
#	bin/gstack-doctor-components.sh
#	docs/troubleshooting.md
#	lib/autoplan-prompts.ts
#	lib/result-codes.ts
…IX launcher contract)

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>
Co-authored-by: capy-ai[bot] <230910855+capy-ai[bot]@users.noreply.github.com>
…the hermetic update-check fixture writes the identity cache

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

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

# Conflicts:
#	bin/gstack-doctor-components.sh
#	docs/troubleshooting.md
#	lib/result-codes.ts
…ase.ts (module-size ratchet); fit the periodic plan's 38 slices

Co-authored-by: capy-ai[bot] <230910855+capy-ai[bot]@users.noreply.github.com>
@capy-ai
capy-ai Bot changed the base branch from capy/fl2-wave-A to main October 17, 2026 02:40
@trunk-io

trunk-io Bot commented Oct 17, 2026 •

Copy link
Copy Markdown

😎 This pull request was merged.

@github-actions github-actions Bot changed the title feat: field list 2 wave B: gstack-ship-queue, approval classes, state-machine review, pregate timing check, update-check main moves v1.91.115.0 feat: field list 2 wave B: gstack-ship-queue, approval classes, state-machine review, pregate timing check, update-check main moves Oct 17, 2026
garrytan and others added 3 commits October 17, 2026 02:41
Co-authored-by: capy-ai[bot] <230910855+capy-ai[bot]@users.noreply.github.com>

# Conflicts:
#	docs/troubleshooting.md
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>
@github-actions github-actions Bot changed the title v1.91.115.0 feat: field list 2 wave B: gstack-ship-queue, approval classes, state-machine review, pregate timing check, update-check main moves v1.91.116.0 feat: field list 2 wave B: gstack-ship-queue, approval classes, state-machine review, pregate timing check, update-check main moves Oct 17, 2026
garrytan and others added 4 commits October 17, 2026 02:52
…result-codes.ts; the scope-signal check requires the helper's computed emission

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

Co-authored-by: capy-ai[bot] <230910855+capy-ai[bot]@users.noreply.github.com>
…et (runBin shebang, like the other pregate fixtures)

Co-authored-by: capy-ai[bot] <230910855+capy-ai[bot]@users.noreply.github.com>
…(runBin shebang, like pregate-remote)

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

Copy link
Copy Markdown
Contributor

E2E Evals: ✅ PASS

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

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

Profile: pr / mode dependents; selected behaviors: 108, judges: 24. Deferred to scheduled/release coverage: 139 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-approval-classes: 33 case(s), 1 judge(s)
  • bin/gstack-doctor-components.sh: 246 case(s), 24 judge(s)
  • bin/gstack-ship-policy: 246 case(s), 24 judge(s)
  • bin/gstack-ship-queue: 246 case(s), 24 judge(s)
  • bin/gstack-ship-receipt: 246 case(s), 24 judge(s)
  • bin/gstack-specialist-stats: 65 case(s), 2 judge(s)
  • bin/gstack-update-check: 246 case(s), 24 judge(s)
  • lib/approval-citations.ts: 246 case(s), 24 judge(s)
  • lib/approval-classes.ts: 246 case(s), 24 judge(s)
  • lib/changelog-check.ts: 246 case(s), 24 judge(s)
  • lib/headless-artifacts.ts: 246 case(s), 24 judge(s)
  • lib/pregate/checks/lanes.ts: 246 case(s), 24 judge(s)
  • lib/pregate/checks/timing.ts: 246 case(s), 24 judge(s)
  • lib/pregate/config.ts: 246 case(s), 24 judge(s)
  • lib/pregate/docs-lane.ts: 246 case(s), 24 judge(s)
  • lib/pregate/index.ts: 246 case(s), 24 judge(s)
  • lib/pregate/lane-selection.ts: 246 case(s), 24 judge(s)
  • lib/restamp.ts: 246 case(s), 24 judge(s)
  • lib/result-codes-release.ts: 247 case(s), 24 judge(s)
  • lib/result-codes.ts: 247 case(s), 24 judge(s)
  • lib/ship-policy.ts: 246 case(s), 24 judge(s)
  • lib/ship-queue-gate.ts: 246 case(s), 24 judge(s)
  • lib/ship-queue.ts: 246 case(s), 24 judge(s)
  • lib/ship-receipt.ts: 246 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.04
e2e-deploy/skill-e2e-deploy--land-and-deploy-workflow 1/1 0 1 0 ✅ $1.55
e2e-safety-codex-consult/skill-e2e-safety-codex-consult 1/1 0 1 0 ✅ $1.01
e2e-ship-docsync/skill-e2e-ship-docsync--ship-docsync-stale-before 1/1 0 1 0 ✅ $1.25
e2e-review-attribution/skill-e2e-review-attribution 3/3 0 3 0 ✅ $0.92
e2e/skill-e2e-shared-libs--shared-libs-review-lifecycle 1/1 0 1 0 ✅ $2.59
e2e-qa-workflow/skill-e2e-qa-workflow--qa-quick 1/1 0 1 0 ✅ $1.52
e2e/skill-e2e-shared-libs-paths--shared-libs-review-prior-coverage 1/1 0 1 0 ✅ $2.47
e2e/skill-e2e-ship-skip 1/1 0 1 0 ✅ $0.6
e2e-qa-callers/skill-e2e-qa-callers--review-exploratory-small-cli 1/1 0 1 0 ✅ $2.04
e2e/skill-e2e-test-value 3/3 0 3 0 ✅ $2.32
e2e-qa-workflow/skill-e2e-qa-workflow--qa-only-no-fix 1/1 0 1 0 ✅ $1.65
e2e-qa-callers/skill-e2e-qa-callers--ship-exploratory-plan-checks 1/1 0 1 0 ✅ $1.82
e2e/skill-e2e-shared-libs--shared-libs-review-revalidation 1/1 0 1 0 ✅ $4.88
e2e-ship-docsync/skill-e2e-ship-docsync--ship-docsync-recovery 1/1 0 1 0 ✅ $0.88
e2e-review/skill-e2e-review 2/2 0 2 0 ✅ $1.1
e2e-ship-docsync/skill-e2e-ship-docsync--ship-docsync-failure 1/1 0 1 0 ✅ $2.21
e2e-skillify/skill-e2e-skillify 3/3 0 3 0 ✅ $2.49
e2e/skill-e2e-shared-libs-paths--shared-libs-review-path-eligibility 1/1 0 1 0 ✅ $4.08
e2e-ship-docsync/skill-e2e-ship-docsync--ship-docsync-current 1/1 0 1 0 ✅ $3.47
llm-judge/skill-llm-eval 24/24 0 8 16 ✅ $0.48
e2e/skill-e2e-coverage-audit 2/2 0 2 0 ✅ $0.87
e2e-deploy/skill-e2e-deploy--setup-deploy-workflow 1/1 0 1 0 ✅ $0.31
e2e-review-army/skill-e2e-review-army--review-army-perf-n-plus-one 1/1 0 1 0 ✅ $1.07
e2e/skill-e2e-shared-libs-paths--shared-libs-review-index-flags 1/1 0 1 0 ✅ $2.56
e2e/skill-e2e-investigate-owned-completion 1/1 0 1 0 ✅ $0.2
e2e-ship-docsync/skill-e2e-ship-docsync--ship-docsync-late-result 1/1 0 1 0 ✅ $0.89
e2e-review-army/skill-e2e-review-army--review-army-json-findings 1/1 0 1 0 ✅ $0.23
e2e-deploy/skill-e2e-deploy--benchmark-workflow 1/1 0 1 0 ✅ $0.64
e2e-qa-callers/skill-e2e-qa-callers--ship-exploratory-small-cli 1/1 0 1 0 ✅ $2.01
e2e-learnings/skill-e2e-learnings 1/1 0 1 0 ✅ $0.37
e2e-deploy/skill-e2e-deploy--land-and-deploy-review-gate 1/1 0 1 0 ✅ $1.31
e2e-review-army/skill-e2e-review-army--review-army-migration-safety 1/1 0 1 0 ✅ $1.25
e2e/skill-e2e-shared-libs--shared-libs-read-only 1/1 0 1 0 ✅ $0.9
e2e-ship-docsync/skill-e2e-ship-docsync--ship-docsync-stale-after 1/1 0 1 0 ✅ $1.25
e2e-deploy/skill-e2e-deploy--land-and-deploy-first-run 1/1 0 1 0 ✅ $1.2
e2e-docsync-spawned/skill-e2e-docsync-spawned 1/1 0 1 0 ✅ $1.48
e2e-qa-functional-fix/skill-e2e-qa-functional-fix 2/2 0 2 0 ✅ $2.82
e2e/skill-e2e-plan--plan-review-report 1/1 0 1 0 ✅ $1.2
e2e-qa-callers/skill-e2e-qa-callers--ship-exploratory-unavailable 1/1 0 1 0 ✅ $1.74
e2e-retro/skill-e2e-retro 1/1 0 1 0 ✅ $1.19
e2e-qa-functional/skill-e2e-qa-functional 2/2 0 2 0 ✅ $2.23
e2e-qa-callers/skill-e2e-qa-callers--ship-exploratory-late-input 1/1 0 1 0 ✅ $2.16
e2e-cso/skill-e2e-cso 1/1 0 1 0 ✅ $1.77
e2e-ship-docsync/skill-e2e-ship-docsync--ship-docsync-store 1/1 0 1 0 ✅ $4.19
e2e-ship-docsync/skill-e2e-ship-docsync--ship-docsync-completion 1/1 0 1 0 ✅ $3.6
e2e-design/skill-e2e-design--design-review-detector-shim-dom 1/1 0 1 0 ✅ $0.66
e2e/skill-e2e-shared-libs--shared-libs-unsupported-git 1/1 0 1 0 ✅ $0.49
e2e-ship-docsync/skill-e2e-ship-docsync--ship-docsync-missing-asset 1/1 0 1 0 ✅ $1.28
e2e-review-army/skill-e2e-review-army--review-army-quality-score 1/1 0 1 0 ✅ $0.32
e2e-safety-ship-evidence/skill-e2e-safety-ship-evidence 1/1 0 1 0 ✅ $0.65
e2e-hermetic/skill-e2e-hermetic-canary 2/2 0 2 0 ✅ $0.03
e2e-design/skill-e2e-design--design-review-plugin-handoff 1/1 0 1 0 ✅ $0.45
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.93
e2e-third-party-actions/skill-e2e-third-party-actions 5/5 0 5 0 ✅ $1.19
e2e-plan-tune/skill-e2e-plan-tune 1/1 0 1 0 ✅ $0.48
e2e-session-intelligence/skill-e2e-session-intelligence 4/4 0 4 0 ✅ $0.76
e2e-safety-pair-agent/skill-e2e-safety-pair-agent 1/1 0 1 0 ✅ $0.31
e2e-design/skill-e2e-design--design-review-detector-shim 1/1 0 1 0 ✅ $0.38
e2e-qa-workflow/skill-e2e-qa-workflow--qa-bootstrap 1/1 0 1 0 ✅ $0.29
e2e-triage/skill-e2e-triage 1/1 0 1 0 ✅ $0.4
e2e/skill-e2e-ship-hook-consent 2/2 0 2 0 ✅ $0.67
e2e-review-army/skill-e2e-review-army--review-army-delivery-audit 1/1 0 1 0 ✅ $0.34
e2e-ship-docsync/skill-e2e-ship-docsync--ship-docsync-timeout-unsettled 1/1 0 1 0 ✅ $0.54
e2e/skill-e2e-ship-hook-refresh 1/1 0 1 0 ✅ $0.26
e2e/skill-e2e-investigate-owned-termination 2/2 0 2 0 ✅ $0.52
e2e-ship-docsync/skill-e2e-ship-docsync--ship-docsync-launch-failure 1/1 0 1 0 ✅ $0.45
e2e-deploy/skill-e2e-deploy--canary-workflow 1/1 0 1 0 ✅ $0.34
e2e-design/skill-e2e-design--plan-design-review-no-ui-scope 1/1 0 1 0 ✅ $0.3
Fail-closed reconciliation
s  test/skill-e2e-qa-callers.test.ts#ship-exploratory-small-cli
  slice 12  passed            164s  test/skill-e2e-shared-libs-paths.test.ts#shared-libs-review-index-flags
  slice 12  passed            122s  test/skill-e2e-ship-docsync.test.ts#ship-docsync-late-result
  slice 12  passed             84s  test/skill-e2e-deploy.test.ts#benchmark-workflow
  slice 12  passed            131s  test/skill-e2e-review-army.test.ts#review-army-perf-n-plus-one
  slice 12  passed            100s  test/skill-e2e-plan-ceo-plan-mode.test.ts
  slice 12  passed             40s  test/skill-e2e-investigate-owned-completion.test.ts
  slice 12  passed             29s  test/skill-e2e-review-army.test.ts#review-army-json-findings
  slice 13  passed            124s  test/skill-e2e-ship-docsync.test.ts#ship-docsync-missing-asset
  slice 13  passed             86s  test/skill-e2e-plan-devex-plan-mode.test.ts
  slice 13  passed            105s  test/skill-e2e-safety-ship-evidence.test.ts
  slice 13  passed            102s  test/skill-e2e-design.test.ts#design-review-detector-shim-dom
  slice 13  passed             80s  test/skill-e2e-shared-libs.test.ts#shared-libs-unsupported-git
  slice 13  passed             80s  test/skill-e2e-office-hours-auto-mode.test.ts
  slice 13  passed             62s  test/skill-e2e-design.test.ts#design-review-plugin-handoff
  slice 13  passed             66s  test/skill-e2e-bws.test.ts
  slice 13  passed             62s  test/skill-e2e-ship-docsync.test.ts#ship-docsync-missing-marker
  slice 13  passed             44s  test/skill-e2e-review-army.test.ts#review-army-quality-score
  slice 13  passed              8s  test/skill-e2e-hermetic-canary.test.ts
  slice 14  passed             64s  test/skill-e2e-third-party-actions.test.ts
  slice 14  passed             49s  test/skill-e2e-plan-tune.test.ts
  slice 14  passed             46s  test/skill-e2e-triage.test.ts
  slice 14  passed             73s  test/skill-e2e-ship-docsync.test.ts#ship-docsync-timeout-unsettled
  slice 14  passed             50s  test/skill-e2e-ask-user-question-format-compliance.test.ts
  slice 14  passed             51s  test/skill-e2e-ship-docsync.test.ts#ship-docsync-launch-failure
  slice 14  passed             49s  test/skill-e2e-session-intelligence.test.ts
  slice 14  passed             51s  test/skill-e2e-ship-hook-consent.test.ts
  slice 14  passed             47s  test/skill-e2e-investigate-owned-termination.test.ts
  slice 14  passed             45s  test/skill-e2e-design.test.ts#design-review-detector-shim
  slice 14  passed             43s  test/skill-e2e-deploy.test.ts#canary-workflow
  slice 14  passed             39s  test/skill-e2e-ship-hook-refresh.test.ts
  slice 14  passed             41s  test/skill-e2e-design.test.ts#plan-design-review-no-ui-scope
  slice 14  passed             34s  test/skill-e2e-review-army.test.ts#review-army-delivery-audit
  slice 14  passed             37s  test/skill-e2e-safety-pair-agent.test.ts
  slice 14  passed             39s  test/skill-e2e-qa-workflow.test.ts#qa-bootstrap
  slice 15  passed             26s  test/skill-e2e-learnings.test.ts
  slice 15  passed             31s  test/skill-e2e-diagram.test.ts
[test:paid] collector final outcomes: 105 executed, 16 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 (312):
[test:paid]    298  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 108/108 · behavior 0/0 · judge 24/24 · quarantined 0 (0 failing the lane)
  SKIPPED 0 · INFRA 0 · INCOMPLETE 0 · unattributed 0 · ACTION REQUIRED 0
  wall 8m43s · cost $92.36 known + 54 of 132 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.

@capy-ai
capy-ai Bot merged commit cadbd0a into main Oct 17, 2026
71 checks passed
garrytan added a commit that referenced this pull request Oct 17, 2026
…result-codes.ts stays at 796 of 800 lines); doctor fixture copies the release table; size pins follow #3235's review +1

Co-authored-by: capy-ai[bot] <230910855+capy-ai[bot]@users.noreply.github.com>
capy-ai Bot added a commit that referenced this pull request Oct 17, 2026
…SKILL.md size guard, planMode hosts (fix wave PR 5) (#3236)

* fix(pregate): recognise bats test files so lanes does not fail in bats repos (#3161)

gstack-pregate never treated a .bats file as a test, so in a repository whose
tests are bats files the lanes check failed every run with PREGATE_NO_LANE: a
.gstack/pregate.json dependency pointing at tests/foo.bats selected nothing, a
selection manifest printing .bats paths yielded 0 files, and a bats run that
executed no tests could not trip the zero-run rule.

Recognise .bats in the test-file pattern and in the manifest-output parser, and
read the bats TAP plan and pretty summary (as a last resort, after every
existing runner's summary) so a run that reports zero tests is a failure.

Fixes #3161.

Cherry-picked from #3177 (d355c11). Conflicts resolved as in the author's own
merges (b09476b, 444f4e7): lane-selection.ts keeps main's isTestFile-based
manifest parser, and lanes.ts carries the bats summary on main's supervised runner.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Co-authored-by: capy-ai[bot] <230910855+capy-ai[bot]@users.noreply.github.com>

* test(pregate): a nested .bats file is selected and run end to end (#3161)

Reviewer test for #3177: touched itself with no declaration, and through a
declared dependency; a failing nested bats run reports the bats counts.

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

* fix(pregate): a wtree failure is WTREE_UNAVAILABLE, not an unresolvable base (#3197)

The pregate consumers of the working-tree fingerprint (buildContext,
withFingerprint, verifyPregate) move to lib/script-invocation.ts's
{tree}|{error} form, and lib/regen.ts drops its string-returning wrapper.

- A fingerprint failure was reported as "policy source unavailable:
  origin/<base> is not a resolvable commit" with git fetch as the fix. It is
  now WTREE_UNAVAILABLE: a launch failure lists each Windows bash candidate
  with its rejection reason and names GSTACK_GIT_BASH; a gstack-wtree exit
  keeps the repair it printed (set TMPDIR to a writable directory).
- A fingerprint failing after a check is incomplete with that cause, not
  "working tree changed"; verify says the tree cannot be fingerprinted.
- #3190's gstack-config read (test_backend) goes through runScriptSync, so
  Windows reaches it through Git Bash. The tripwire learns the bin-constant
  shape that let it through.
- Under --json every context refusal is one envelope on stdout
  ({ok:false,status:'refused',code,detail,fix,docs}, exit 3); the run object
  carries ok and status too, and GSTACK_RESULT goes to stderr.

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

* ci(pregate): gstack-pregate joins the Windows pregate job; pregate tests return to the Windows lane (#3197)

- windows-pregate-e2e runs gstack-pregate run (preflight: regen, secrets
  through the gstack-redact bun bin, literals, guards) in both journeys, and
  asserts a missing GSTACK_GIT_BASH refuses with one WTREE_UNAVAILABLE --json
  envelope.
- test/helpers/pregate-fixture.ts and restamp-fixture.ts runBin launch bins
  through lib/script-invocation.ts (bun bins as Bun argv, bash bins through
  Git Bash on Windows), which removes the "shebang via CreateProcess" reason
  for the pregate tests; they move from KNOWN_WINDOWS_INCOMPATIBLE to
  KNOWN_WINDOWS_SAFE.

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

* doctor: list rescue refs and warn about CLAUDE.md skill lists

gstack-doctor's plain report gains two rows. 'rescue refs' lists each
refs/gstack/rescue/* commit in the install checkout, newest first, with its
date, a needs-manual-resolution label when the rescue held unmerged files, and
the shell-quoted inspect and delete commands bin/gstack-ff-update's banner
prints. 'CLAUDE.md' warns when a gstack section in ~/.claude/CLAUDE.md or the
project's CLAUDE.md enumerates skills (#3169) and prints the short block to
paste instead; docs/troubleshooting.md#claude-md-skill-list explains it.

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

* doctor: name the Windows bash gstack resolves and what chose it

On Windows (OSTYPE msys/cygwin) gstack-doctor adds a 'windows bash' row from
lib/script-invocation.ts resolveWindowsBash, run through the new thin
bin/gstack-windows-bash.ts with the bun on PATH: the resolved bash and the
override or discovery step that chose it, a warn when GSTACK_GIT_BASH and
GSTACK_BASH differ, and a fail carrying the BASH_UNAVAILABLE line (every
candidate with its rejection reason) when none qualifies. Tests inject the
platform (GSTACK_DOCTOR_PLATFORM) and the discovery inputs
(GSTACK_DOCTOR_BASH_PROBE) so the row runs on every OS.

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

* doctor --check: name the held-install recovery on Windows, not bin/gstack-upgrade

bin/gstack-upgrade compares a pwd -P path (/c/...) with git's toplevel
(C:/...) and refuses on every Git Bash install, so on Windows the revision
row's upgrade fix (REVISION_BELOW_MINIMUM, the Capy-wrapper variant and
REVISION_UNMET) names the held-install recovery forms from
docs/troubleshooting.md#auto-update-held-install-recovery instead: the Git
Bash form and the Windows PowerShell 5.1 form, each labelled by shell with the
install path quoted for that shell. Other platforms keep bin/gstack-upgrade.
A test pins both printed forms to the documented ones.

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

* fix(skills): omit the plan-mode section on hosts without plan mode (#3168)

generatePlanModeInfo now honours capabilities.planMode. Hosts that declare
planMode:false (codex, agy, hermes, openclaw, and define-host's default:
factory, kiro, slate, cursor, gbrain) no longer render the
'## Plan Mode Safe Operations' and '## Skill Invocation During Plan Mode'
preamble sections. Claude, copilot and opencode are unchanged.

The codex, factory and agy ship goldens are regenerated. The clarity test that
pinned the plan-mode entry-order prose on every host now pins it on planMode
hosts and asserts its absence elsewhere (intentional contract change).

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

* test(skills): guard generated SKILL.md size at 100,000 chars on every host (#3199)

A free test renders every host and fails when a generated SKILL.md exceeds
100,000 characters, naming host, skill, actual size, limit and the fix. The 89
current offenders are pinned at their exact size in
test/fixtures/skill-md-size-allowlist.json: growth past a pin fails, and a
shrink fails until the pin is lowered. The shared-preamble hoist is deferred
(owner Garry, revisit 2026-11-15).

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

* test(pregate): keep #3177's bats tests beside the nested-directory test

Moves #3177's bats describe block verbatim from test/pregate-selection.test.ts
into test/pregate-bats-nested.test.ts, so pregate-selection.test.ts is
unchanged on this branch and the in-flight field-list-2 pregate lane
(capy/fl2-L6-pregate, which edits that file's imports and adds cases) merges
without a conflict. No assertion changes.

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

* doctor --check: keep bin/gstack-upgrade as the Windows fix (path spelling fixed on main)

Reverts 37bac07. Plan item D named the held-install recovery forms on
Windows only until bin/gstack-upgrade stopped refusing Git Bash installs.
bin/gstack-upgrade:63-67 now compares with gstack_path_same from
bin/gstack-path-spelling.sh, pinned by test/gstack-upgrade-path-spelling.test.ts,
so bin/gstack-upgrade is the right fix on every platform again.

* test(skills): measure the size-guard pins on v1.91.109.0

#3225 (merged into this branch) grew 53 pinned skills: 3 characters each from
the Aside driver resolver, and about 340 more in plan-design-review and
plan-devex-review from the #3219 summary sections. The pins are this PR's
starting measurement, so they are taken on the merged base; no skill this PR
renders grew.

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

* ci(windows): only the pregate tests that pass on windows-latest join the lane

windows-free-tests run 38984824731 (this branch at 8ed6da4) ran the moved
files. gstack-regen and the new pregate-wtree-refusal passed. pregate-guards,
-remote, -regate, -invalidation, -selection and -bats-nested launched
gstack-pregate fine but fail on Linux-host expectations: their fixture lanes are
Linux workflow jobs, which a Windows host records as requires-remote
obligations. They go back to KNOWN_WINDOWS_INCOMPATIBLE with that reason
instead of "shebang via CreateProcess".

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

* windows curation: keep CI run ids out of reason prose (pii.phone false positive)

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

* skill-md size pins: follow #3231's review-army line (+21 chars on five inlining hosts)

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

* doctor test: drop the reverted Windows upgrade-fix wording from item D's describe

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

* skill-md size pins: follow #3226 (plan-devex-review +3324) and #3234 (autoplan +59)

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

* WTREE_UNAVAILABLE moves to lib/result-codes-release.ts (#3235 split; result-codes.ts stays at 796 of 800 lines); doctor fixture copies the release table; size pins follow #3235's review +1

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

* docs(changelog): fix wave PR 5 release notes

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

* v1.91.117.0 fix: fix wave PR 5 (pregate bats + WTREE_UNAVAILABLE, doctor rows, SKILL.md size guard, planMode hosts)

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

* fix(qa): an invalid-input probe breaks only the rule it tests

The paid gate's qa-functional-cli-report failed again on #3236 (run
39001107574): the agent probed the digits-only amount rule with -5, which
the positivity check rejected first, so the planted parseInt defect stayed
hidden and it reported no defect. The contract map's invalid-input row now
asks for each input to break only the rule it tests, so another check
cannot reject it first.

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

---------

Co-authored-by: harjothkhara <48686985+harjothkhara@users.noreply.github.com>
Co-authored-by: Claude Sonnet 5.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

Development

Successfully merging this pull request may close these issues.

2 participants