Commit Graph
410 Commits
Author SHA1 Message Date
garrytanandcapy-ai[bot] aa8a1195b4 fix(ship-queue): full_e2e needs bound gate evidence in ready and verify, CI reads every check-run page and commit status, next: quotes its paths (review #3235 P1-1, P1-5, P2-1)
Co-authored-by: capy-ai[bot] <230910855+capy-ai[bot]@users.noreply.github.com>
2026-10-17 01:22:58 +00:00
garrytanandcapy-ai[bot] 9671522f80 test(fixtures): register the pregate-timing fixtures as free-only (W4)
Co-authored-by: capy-ai[bot] <230910855+capy-ai[bot]@users.noreply.github.com>
2026-10-17 01:22:58 +00:00
garrytan 037ca1dad9 test(state-matrix): cover state-machines NEVER_GATE in gstack-specialist-stats
Co-authored-by: capy-ai[bot] <230910855+capy-ai[bot]@users.noreply.github.com>
(cherry picked from commit 859063d56f)
2026-10-17 01:22:58 +00:00
garrytan e8ffadf364 test(free-fixtures): register the state-matrix-6792 fixture
Co-authored-by: capy-ai[bot] <230910855+capy-ai[bot]@users.noreply.github.com>
(cherry picked from commit 1bacef296d)
2026-10-17 01:22:58 +00:00
garrytan aead737bd3 fix(review-army): keep the --simplification force flag pinned; approval test timeouts
Co-authored-by: capy-ai[bot] <230910855+capy-ai[bot]@users.noreply.github.com>
(cherry picked from commit 789d392bce)
2026-10-17 01:22:58 +00:00
garrytan 37abc15414 feat(review): state-machines specialist and gstack-state-matrix round-trip check with a captured #6792 regression (W3)
Co-authored-by: capy-ai[bot] <230910855+capy-ai[bot]@users.noreply.github.com>
(cherry picked from commit 1a634979c6)
2026-10-17 01:22:58 +00:00
garrytan 2129eace44 feat(approval-classes): tests, docs, /review and /ship wiring (W2)
Co-authored-by: capy-ai[bot] <230910855+capy-ai[bot]@users.noreply.github.com>
(cherry picked from commit 269bd5b8b5)
2026-10-17 01:22:58 +00:00
garrytanandcapy-ai[bot] b36c48aec9 test(context-budget): gstack-upgrade eager ceiling for the W12 equal-version upgrade question (ratchet protocol, capture value)
Co-authored-by: capy-ai[bot] <230910855+capy-ai[bot]@users.noreply.github.com>
2026-10-17 01:22:58 +00:00
garrytan 9ff541ad89 test(pregate): the ship receipt counts the timing check (7 checks)
Co-authored-by: capy-ai[bot] <230910855+capy-ai[bot]@users.noreply.github.com>
(cherry picked from commit cb03ef67e7)
2026-10-17 01:22:58 +00:00
garrytan 4218823614 test(pregate): requires-remote on a gbrain-shaped repo (ci:ubicloud, UBI_OWNER) (W10)
A base pregate.json with gbrain's dependencies and remote_gate
"bun run ci:ubicloud" (a package script whose stub needs UBICLOUD_API_KEY,
names VMs from UBI_OWNER and prints PREGATE_REMOTE). Under 8 cores the test
tier is one obligation naming the command; --remote passes the caller's
UBI_OWNER and key through and clears it on the report; without the key the
gate's own error shows and the obligation stays uncleared. #3190's path
needed no change.

Co-authored-by: capy-ai[bot] <230910855+capy-ai[bot]@users.noreply.github.com>
(cherry picked from commit 4d69ff02df)
2026-10-17 01:22:58 +00:00
garrytan 534b5fa51b test(pregate): reviewer edges for the docs/no-tests empty lane (#3215)
Co-authored-by: capy-ai[bot] <230910855+capy-ai[bot]@users.noreply.github.com>
(cherry picked from commit 2fb3fa8613)
2026-10-17 01:22:58 +00:00
Cursor Agent 08164b50b5 fix(pregate): keep test-read markdown on its test lane
Unmarked Markdown that no test depends on is a docs/no-tests empty lane.
A file a test reads, including a fixture, still selects that test through
the import graph. Unmapped source and unreferenced test-tree files still
fail closed.

Co-authored-by: Nick <surlymo@apache.org>
(cherry picked from commit 7aabbddf3d)
2026-10-17 01:22:58 +00:00
Cursor Agent 801195f4e3 fix(pregate): treat planning and evidence markdown as an empty lane
A docs-only diff with no .gstack/pregate.json failed lanes as
PREGATE_NO_LANE. Planning and evidence Markdown is now a docs/no-tests
empty lane. Unmapped source files still fail closed.

Co-authored-by: Nick <surlymo@apache.org>
(cherry picked from commit e8793e59e8)
2026-10-17 01:22:58 +00:00
garrytan 83d9c9717f feat(update-check): an equal VERSION with a moved main is an upgrade, via the compare API (W12)
When VERSION matches but ls-remote's main SHA differs from this checkout's
HEAD, bin/gstack-update-check asks the GitHub compare API (status, ahead_by)
through the existing receipted curl and prints
UPGRADE_AVAILABLE <ver> <ver>+<n> <sha>; a diverged or unreadable compare is
CHECK_FAILED (unknown), and behind/identical is up to date. Never fetches.

The cache gains an IDENTITY line (head, compared remote SHA, upstream): an
outcome replays only for the same HEAD and upstream, a same-remote refresh
reuses it without another compare, and a git checkout ignores a legacy
one-line cache (non-git installs keep the one-line format). The snooze is
keyed by the SHA. gstack-upgrade's question, snooze note and What's New step
handle the four-field line; gstack-skill-end reports it.

Co-authored-by: capy-ai[bot] <230910855+capy-ai[bot]@users.noreply.github.com>
(cherry picked from commit 421e66d2a4)
2026-10-17 01:22:57 +00:00
garrytan ed973840d3 feat(pregate): timing check flags elapsed-time bounds and sleep-then-assert in added test lines (W4)
lib/pregate/checks/timing.ts prints TIMING_ASSERTION: <file>:<line> <pattern>
and a TIMING_ASSERTIONS summary; gstack-timing-ok: <reason> in any comment
syntax on the line or the line above escapes one. It warns
(PREGATE_TIMING_ASSERTION): measured on gstack (9 of 47 test-touching
commits, 263 hits in the tree) and gbrain (37 of 95 commits; 31 of 38 sites
of the five timing-flake fixes), blocking would stop a fifth to two fifths
of test changes. Adds the /review checklist rule and the /investigate
timing-flake playbook.

Co-authored-by: capy-ai[bot] <230910855+capy-ai[bot]@users.noreply.github.com>
(cherry picked from commit a3b86b10b2)
2026-10-17 01:22:57 +00:00
garrytan 67f636a4d3 test(ship-queue): receipt digest contract names lib/ship-queue.ts for its pregate lane
Co-authored-by: capy-ai[bot] <230910855+capy-ai[bot]@users.noreply.github.com>
(cherry picked from commit 501637c258)
2026-10-17 01:22:57 +00:00
garrytan 71dbe62251 test(fixtures): register the gbrain stamp-pair fixture as free-only
Co-authored-by: capy-ai[bot] <230910855+capy-ai[bot]@users.noreply.github.com>
(cherry picked from commit 563a07aa03)
2026-10-17 01:22:57 +00:00
garrytan da67a3cd2b fix(ship): shared-queue pointer rides the show-effective ship: line (ship skeleton has 2 bytes of parity headroom)
Co-authored-by: capy-ai[bot] <230910855+capy-ai[bot]@users.noreply.github.com>
(cherry picked from commit 5b33d4a015)
2026-10-17 01:22:57 +00:00
garrytan d22290a6ef test(ship-queue): stamp journal and resume, verify from a separate clone, gate-ahead attempts, ready
Co-authored-by: capy-ai[bot] <230910855+capy-ai[bot]@users.noreply.github.com>
(cherry picked from commit ade554087b)
2026-10-17 01:22:57 +00:00
garrytan 90e5f82757 feat(ship-policy): gate_command, full_e2e and min_gstack_version; unknown keys stay fail-closed; validate prints introducing versions
Co-authored-by: capy-ai[bot] <230910855+capy-ai[bot]@users.noreply.github.com>
(cherry picked from commit 878a7123d7)
2026-10-17 01:22:57 +00:00
garrytan 03810c92d3 test(tree-receipt): a real gbrain stamp pair is same-modulo-stamps under gbrain committed policy (W1 acceptance)
Co-authored-by: capy-ai[bot] <230910855+capy-ai[bot]@users.noreply.github.com>
(cherry picked from commit 6cf53f9fed)
2026-10-17 01:22:57 +00:00
garrytan 3411c5eb52 fix(restamp): gate-ahead keeps the lane CHANGELOG entry when both PRs took the same tentative stamp (GBRA-102 diagnosis fixture)
Co-authored-by: capy-ai[bot] <230910855+capy-ai[bot]@users.noreply.github.com>
(cherry picked from commit 43c75a6bb6)
2026-10-17 01:22:57 +00:00
garrytan b736a1ffa8 Merge remote-tracking branch 'origin/capy/fl2-F1' into capy/fl2-wave-A 2026-10-17 01:16:27 +00:00
garrytan c7a2983957 Merge remote-tracking branch 'origin/main' into capy/fl2-F1 2026-10-17 01:15:05 +00:00
Garry Tanandcapy-ai[bot] 299e051010 v1.91.112.0 fix(cso): --paths scopes an audit and reports every skipped path (no more hand-trimmed copies) (#3230)
* fix(cso): --paths scopes an audit and reports every skipped path

A repo over the 64 MiB cap was audited on hand-trimmed copies, so the
verdict read assessed over partial input. --paths records out-of-scope
files unread as snapshot-inputs gaps (coverage partial), keeps --diff
fail-closed, and carries the scope through submit, recheck and replay.
Field list 2 item 12; related #2993.

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

* fix(cso): close /review findings on --paths scoping

- Comparison mode hashes out-of-scope files in bounded 1 MiB chunks and
  re-hashes them in both stability passes instead of reading whole files.
- --diff --paths refuses every changed path outside the scope except host
  dependency trees, including credential and agent configuration.
- --paths prefixes that report persistence would rewrite are refused.
- In-scope gaps sort first; out-of-scope files and deletions share the
  skipped tier and are dropped from transformations.
- History is limited to --paths, reported as partial, and history queries
  on out-of-scope paths are refused.
- A --diff recheck refused for out-of-scope changes says to start a new audit.

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

* docs(cso): troubleshooting names --paths for the source cap

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

* docs(changelog): /cso --paths entry

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

* v1.91.112.0 fix(cso): --paths scopes an audit and reports every skipped path (#3230)

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>
2026-10-17 01:14:35 +00:00
garrytan afb75569b2 Merge remote-tracking branch 'origin/capy/fl2-F1' into capy/fl2-wave-A 2026-10-17 01:13:45 +00:00
garrytanandcapy-ai[bot] a1f0d08ccd fix(autoplan): export refuses artifact paths outside the run before writing; 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>
2026-10-17 01:13:45 +00:00
garrytanandcapy-ai[bot] 32e1067be3 test(third-party-actions): the Aside drive-offer detector matches the 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>
2026-10-17 01:13:41 +00:00
garrytan 641916c650 Merge remote-tracking branch 'origin/main' into capy/fl2-F1 2026-10-17 00:57:01 +00:00
Garry Tanandcapy-ai[bot] f592d67826 v1.91.111.0 fix(evals): four PR-gate background reds were a detector, an interface, a helper and a workflow-block defect (#3231)
* fix(evals): three PR-gate background reds were a detector, an interface and a helper defect

- docsync-fault-eval: a conditional mention (until/unless/once/when/before/if) of
  'Documentation is current' is not a false current claim; replay corpus for
  ship-docsync-launch-failure from PR run 38336400566 with derived refusals.
- gstack-skill-start/gstack-skill-end: --help prints usage and exits before any
  side effect (it used to start a session); the docsync interface admits the
  lifecycle helpers' own --help; captured run 38969924945 replays clean.
- qa deadline policy: listing the owned qa-reports/screenshots directory is
  bookkeeping (qa-only-no-fix, run 38969924945).

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

* test(evals): the launch-failure corpus is a row in the docsync corpus test that owns docsync-fault-eval

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

* test(evals): register the launch-failure corpus and docsync-store capture in their contracts

The B1 corpus contract wants its own detector-corpus-<case> replay test, so the
launch-failure corpus keeps one, listed in the test-of-test baseline beside its
sibling corpora; FREE_FIXTURES names both new fixtures' free consumers.

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

* fix(review-army): the scope block prints the SCOPE_* signals specialist selection reads

The Detect stack and scope block sourced gstack-diff-scope silently, so an
agent that needed SCOPE_FRONTEND to pick specialists appended its own echo and
left the declared caller interface (ship-exploratory-plan-checks red in run
38981523623). The block now lists the sourced signals itself.

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

* v1.91.111.0 fix(evals): four PR-gate background reds were a detector, an interface, a helper and a workflow-block defect

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>
2026-10-17 00:56:33 +00:00
garrytanandcapy-ai[bot] 68e15d9692 test(review-voice): the launch line points at the verdict's bun-only directory (#3233's launch contract)
Co-authored-by: capy-ai[bot] <230910855+capy-ai[bot]@users.noreply.github.com>
2026-10-17 00:54:24 +00:00
garrytan e0e9fa0435 Merge remote-tracking branch 'origin/capy/fl2-F1' into capy/fl2-wave-A 2026-10-17 00:48:15 +00:00
garrytan 9ef3fe966b test(eval-plan): eval-plan/SKILL.md names only defined codes and accepted flags
Co-authored-by: capy-ai[bot] <230910855+capy-ai[bot]@users.noreply.github.com>
(cherry picked from commit a7a974d268)
2026-10-17 00:48:05 +00:00
garrytan 0fd0977e91 feat(eval-plan): W8/W9 tests, docs/eval-models.md, troubleshooting anchors, /eval-plan steps
Co-authored-by: capy-ai[bot] <230910855+capy-ai[bot]@users.noreply.github.com>
(cherry picked from commit 9335e45de2)
2026-10-17 00:48:05 +00:00
garrytan 3f7a78c0cf Merge remote-tracking branch 'origin/main' into capy/fl2-F1 2026-10-17 00:42:05 +00:00
Garry Tanandcapy-ai[bot] 83f15043ac v1.91.110.0 fix(capy): install the project's pinned Node; launch Bun through a bun-only directory (#3233)
* fix(capy): install and launch the project's pinned Node; launch Bun through a bun-only directory

gbrain pins node 24.18.0 in CI while the Capy image ships 24.21.0 in
/usr/local/bin, so a full install still ended with fail pins (GBRA-117).
The installer now resolves the project's exact Node pins the way it resolves
Bun's (required non-CI pins, CI pins in different jobs as alternatives): the
node first on PATH, then gstack's store copy and nvm's copy of each wanted
version, then any other node on PATH. With no match, install mode downloads the
pinned release into <state root>/runtimes/node and checks it against
SHASUMS256.txt. The resolution is recorded in the install verdict
(node_path, node_version, node_rule), and --check reuses it.

The launch PATH no longer prepends a shared bin directory. When the resolved
Bun was /usr/local/bin/bun, the image's node there shadowed every other node
(GBRA-122). A store Bun still launches from its own version directory; any
other Bun, and a Node the launch needs, launch through a gstack-owned
directory of symlinks beside the verdict. The pregate's lanes use the
recorded launch directory.

The doctor's pins row names the node it read and, for a Node mismatch, the
installer command that installs the pinned Node (or nvm install <v> off
Capy).

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

* chore: v1.91.109.0

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

* test(egress): exempt the Node installer's two release downloads with their reason

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

* chore: restamp v1.91.110.0 (1.91.109.0 is #3225's slot)

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

* test(doctor): make the Node pin case platform-neutral (an any-lane CI pin, bash's spelling of the stub path)

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>
2026-10-17 00:41:41 +00:00
garrytanandcapy-ai[bot] 30aabd2a1c test(context-budget): capy skill eager ceiling for the review-voice subagent paragraph (W11; ratchet protocol, capture value)
Co-authored-by: capy-ai[bot] <230910855+capy-ai[bot]@users.noreply.github.com>
2026-10-17 00:41:38 +00:00
garrytan b5363161d7 test: the DRIVER template names the reviewer trailer relay (pregate lane)
Co-authored-by: capy-ai[bot] <230910855+capy-ai[bot]@users.noreply.github.com>
(cherry picked from commit 2545d9a6d2)
2026-10-17 00:37:57 +00:00
garrytan 60da139bf8 test: pin review-voice row, helpers row and the no-Drive fallback in existing install tests
Co-authored-by: capy-ai[bot] <230910855+capy-ai[bot]@users.noreply.github.com>
(cherry picked from commit 7f6c70459a)
2026-10-17 00:37:57 +00:00
garrytan 2314b6f679 feat(capy): --for review-voice install profile, no-Drive bootstrap command, 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 89bf556c11)
2026-10-17 00:37:57 +00:00
garrytan e83c1efa2f Merge remote-tracking branch 'origin/capy/fl2-F1' into capy/fl2-wave-A 2026-10-17 00:37:33 +00:00
garrytanandcapy-ai[bot] 1529da1192 fix(lease): breakers serialize on .lock.break and reread the lock before 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>
2026-10-17 00:16:21 +00:00
garrytan 47d1ddfa2f Merge remote-tracking branch 'origin/main' into capy/fl2-F1 2026-10-17 00:07:58 +00:00
86091dd7f5 v1.91.109.0 fix: wave 5 — pregate secrets false negatives (#3211), Windows gstack-upgrade, env.kv schema keys (#3208), browse rule 3 (#3216), review summaries (#3219), CSO flake (#3207) (#3225)
* fix(upgrade): accept a Git Bash checkout whose toplevel Git spells C:/…

bin/gstack-upgrade compared `git rev-parse --show-toplevel` (C:/x from Git
for Windows) with `pwd -P` (/c/x in Git Bash) as strings, so every Windows
Git Bash install was refused as "not a gstack checkout", and the doctor's
recovery line points at this command. Compare the two through
gstack_path_same (bin/gstack-path-spelling.sh); a tree nested inside another
repository is still refused.

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

* fix(redact): a catalog field named <schema word>_key is not a credential (#3208)

env.kv accepted every separated name ending in _key, so a catalog entry
`"input_key": "expected_media_rate_bits_per_second_ingress"` failed
pregate's never-downgradable secrets check as MEDIUM env.kv [secret]. The
camelCase twins (cacheKey, sortKey, partitionKey, idempotencyKey) were already
rejected for having no credential prefix; the snake/kebab/dotted forms of
those data-model words now are too. ALL-CAPS env names (INPUT_KEY=) and
credential-word names (signing_key, stripe_key, input_secret) still fire.

Reported by @brentyates-swx.

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

* test(cso): build the git-hardening fixture repo once per file

Each test built its fixture repo with five /usr/bin/git spawns inside
its own 5 s budget. On macOS that binary is the Xcode shim, and on a cold
runner those spawns cost far more than the code under test: in run
38800592772 the first test timed out at 5 s before readGitMetadata got
past its first lstat, and afterEach then tore the fixture down under it.

Build the repo once in beforeAll, under the same 30 s bound each fixture
spawn already declares, and give every test a fresh copy. The assertions
and the code under test are unchanged, and each test keeps its full 5 s
for the code under test.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* fix(browse): rule 3 treats wizard steps as writes and reads back sets before saving (#3216)

On a non-local target a wizard or dialog step (Next, Step N, a menu item
that opens a dialog) now counts as mutating until its handler or network
effect shows otherwise, and its Cancel proves nothing. Before any Save or
Submit, every programmatic set is read back and the flow stops on a
mismatch. The cookbook's silent-failures list adds the skip-path
precondition probe. Redundant clauses in rules 2, 3, 7, 8, 9, 10 and
READY are tightened so the shared setup grows by 3 bytes and every
browsing skill stays under its parity cap.

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

* fix(plan-design-review): keep the Completion Summary out of the regenerated report (#3219)

The design review saved its Completion Summary inside the terminal
GSTACK REVIEW REPORT section, which the next plan review deletes from
its heading to the next "## " heading. The summary, deferred list and
unresolved decisions now go in their own "## Design Review Completion
Summary" section above the report, and the template says everything
under the report heading is regenerated by the next review.

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

* fix(redact): exempt a schema field only when its name and value both say so (#3208)

Review (GPT-6.1 Sol outside voice): the name-only exemption also silenced
real secrets, e.g. Azure's cosmosdb_primary_key and any longer name such as
api_cache_key. Now the whole name must be one data-model word plus _key
(primary/secondary dropped) and the value two or more lowercase identifier
words; an entropic value, a longer name or a credential name still fires in
.env, YAML, JSON and TOML.

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

* test(upgrade): the Git shim delegates with the unshimmed PATH

A PATH-searching git wrapper found the shim again and recursed until the
test timed out. The shim now restores the host PATH before running git.

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

* fix(pregate): secrets scans each file with its type and never reads an emptied diff as clean (#3211)

addedLines() flattened every file into one added.txt, so gstack-redact never
saw a .ts path and the #3048 source-expression exemption never ran: TS
properties such as `token: credentials.token,` failed the gate as MEDIUM
env.kv. Two false negatives predate this wave: the `+++` header filter
dropped added content lines that begin with "++", and `git diff` honoured
diff.external/textconv, so an external driver that prints nothing made a
branch carrying a real AWS key pass with "no added lines".

Added lines are now parsed hunk-aware per file (the pre-push hook's rules),
with --no-ext-diff --no-textconv, and each file is scanned as
<tmp>/<i>/<basename> so its type survives; findings name the file.

Reported by @brentyates-swx.

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

* fix(plan-devex-review): keep the DX Scorecard out of the regenerated report (#3219)

The DX Scorecard had the same placement gap as the design Completion
Summary: with no rule, it could land inside GSTACK REVIEW REPORT, which the
next plan review deletes. It now goes in its own "## DX Review Scorecard"
section above the report.

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

* v1.91.109.0 fix: wave 5 — pregate secrets false negatives (#3211), Windows gstack-upgrade, env.kv schema keys (#3208), browse rule 3 (#3216), review summaries (#3219)

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: Scott Gigante <scott@gethubflow.ai>
Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-17 00:06:43 +00:00
garrytanandcapy-ai[bot] 4168d4fe51 fix(lease): the directory lock names its holder; broken only when the 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>
2026-10-17 00:05:51 +00:00
garrytanandcapy-ai[bot] ad3f839fc0 fix(lease): one directory lock for publish, prune and reclaim; reclaim 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>
2026-10-16 23:51:37 +00:00
garrytanandcapy-ai[bot] e1a3e81d17 feat(autoplan): enforced round cap and spend budget, deferred close, 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>
2026-10-16 23:47:05 +00:00
garrytanandcapy-ai[bot] c982493cda fix(lease): stale needs proof (unreadable or malformed identities keep 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>
2026-10-16 23:40:33 +00:00
garrytan 78fbd0ba32 Merge remote-tracking branch 'origin/main' into capy/fl2-F1 2026-10-16 23:26:27 +00:00
Garry Tanandcapy-ai[bot] b0f1e65e0d v1.91.108.0 fix(evals): census repair — the late-input and simplification fixtures stop inviting their own failures (#3153) (#3200)
* fix(qa-callers): the caller scheduling contract no longer calls a probe read-only discovery (#3153)

Census 38212265208 (main @ e23f7b807, 2026-10-12) failed ship-exploratory-late-input:
"probe preceded resource read: exploratory / system-functional / system-functional".
The native events show capture 001 issued in the same provider response as the
Reads of ship/sections/plan-completion.md and ship/sections/review-army.md, before
the Step 9 section (which holds the "never batch a probe with a Read" STOP) returned
and before any QA section was read. The Oct 7 capture (mtb1007a) is the same class.

Diagnosis: fixture defect, not product prose. /ship's prose never names the QA
capture helper (only qa/sections/exploratory.md does); the fixture prompt supplies
it up front, and the fixture's appended scheduling contract (7697fb2, 2026-10-06)
told the session to batch "Reads and read-only discovery" while its never-group list
omitted Read-result dependencies. The case passed on Oct 3 and Oct 5, before that
contract, and failed on Oct 7 and Oct 12 after it.

Repair: the contract defines read-only discovery (captures, guard starts/runs and
diagnostic-client runs are probes, never discovery), which removes the fixture's own
invitation to batch them. It deliberately does not restate the product's Step 9 STOP:
the case exists to detect that STOP being lost. The detector (callerProbeReadErrors)
is unchanged.

Test: the Oct 12 native tool order is replayed inline (no new fixture file, so the
paid-runner global inputs stay untouched) with a reordered negative control, and the
actual runner callback's contract is checked. Fails on 47d639a at
the discovery-definition assertion; passes after.

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

* fix(review-army): the simplification case drops its false premise and stages only its section (#3153)

Census 38212265208's pass-rate gate flagged review-army-simplification at
159 s of its 180 s session budget (88.1%, above the 85% cap; main-only panel
142/91/146 s). The three Oct 12 transcripts show where the time went:

- the prompt claimed "the diff is over 100 lines", but the fixture diff is 68;
  every trial reconciled that (scope tool, specialist stats, force-include
  reasoning, coverage-gap prose in the report and final message);
- each session read the whole extracted review-SKILL.md and the 18.7 KB
  checklist, and grepped for a "## Step 4.5" heading the carved fixture no
  longer has;
- the report was unbounded (30-45 s of output composition); trial 3 also
  dispatched a subagent and re-verified its findings.

Repair (fixture work only, budget unchanged at 180 s / 20 turns): the case uses
the same stageReviewArmySession/reviewArmyScope staging as perf-n-plus-one and
consensus (recorded scope, stats, learnings and diff; only review-army.md and
simplification.md staged), selects the specialist with the real
/review --simplification force flag, applies the checklist in-session as the
original prompt asked, and bounds the report to 30 lines with a brief final
acknowledgement. The planted-structure and disavowed-frame assertions are
unchanged.

Test: review-army-budget.test.ts drives the actual registered callback with a
mocked runner (pass control plus two negative controls); it fails on 47d639a
("Expected to contain: DIFF_LINES: 68") and passes after.

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

* docs(evals): record the #3153 census diagnoses (review-army-simplification headroom, ship-exploratory-late-input) (#3153)

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

* chore(release): tentative v1.91.108.0 stamp and CHANGELOG for the #3153 census repair (#3153)

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>
2026-10-16 23:24:55 +00:00