mirror of
https://github.com/garrytan/gstack.git
synced 2026-11-05 16:34:00 +01:00
b8ea0547721db3a469dfaee2ccec1272615625bf
538
Commits
| Author | SHA1 | Message | Date | |
|---|---|---|---|---|
|
|
b8ea054772 |
Merge remote-tracking branch 'origin/main' into garrytan/reliability-followups-oct4
# Conflicts: # CHANGELOG.md # VERSION # agents-digest/gstack-AGENTS.md # package.json |
||
|
|
e7c11039ea |
eval policy v3: judge panels gate on the per-dimension median of 3 samples
A judge dimension now passes when at least 2 of its 3 samples meet the unchanged threshold (judgePanelMedian); any other sample count or a non-numeric sample fails closed. Thresholds, sample count, judge model and prompts are unchanged; panel logs show every sample and the mean, and name the median as the gate. Applies to the skill-llm-eval panels, the workflow-judge cache, the auq-matrix substance panel and the calibration replicas. EVAL_POLICY 2 -> 3 and HARNESS_VERSION 1 -> 2 (verdicts change), so every case starts a new pass-rate series. Replays the captured panels from jobs 112032744416 and 112049856586 as replayed evidence. |
||
|
|
5885157a90 |
v1.91.29.0 fix(cso): native runtime qualification passes for Node, Bun, Python and Rails (#3044)
* fix(cso): unblock native runtime qualification (v1.91.28.0) Fixes the qualify-native failures from main run 37345275258: - re-bind promotion evidence for staged runtimes in cold-start tests - give npm a distinct empty global config (npm 11 refuses double-loading) - export /archives and /work through tmpfs-backed local volumes (docker cp cannot read tmpfs), with exec on /work - keep the offline seed process alive - end broker/forwarder tunnels explicitly under Bun - batch gem fetch per platform - wait for run-app's source copy before Rails db:prepare and tests - fix the Python cold fixture and add bin/rails to the Rails cold fixture * fix(cso): bounded 900 s ceiling for preparation dependency commands - PREPARATION_COMMAND_TIMEOUT_MS (900 s) applies only to acquisition and offline dependency commands; everything else keeps COMMAND_TIMEOUT_MS (300 s), and both are cut to the journey deadline - prepared-tree export refusals fail with PREPARED_EXPORT_REJECTED and the helper's fixed reason or errno, never target paths, with no retry - free tests pin the ceiling, its callers, and the rejection parser * Take v1.91.29.0 (1.91.28.0 is claimed by #3032 and #3033) * cso-diff-mode accepts every correct name for the unauthenticated webhook finding |
||
|
|
a5450908e7 |
fix(plan-eng): explicit spawned sessions follow the spawned rule at the scope gate; one announcement rule
A missing tool still sends the prose menu whatever the session type, but a session the caller or host explicitly marks spawned selects the menu's Recommendation without prose or BLOCKED. The pre-load announcement sentence now states Step 0's single check. |
||
|
|
628d78e68d | fix(plan-eng): keep the startup steps in their pinned order | ||
|
|
26dc71d586 |
fix(skills): resolve judge-cited ambiguities in /qa and /plan-eng-review
- tasks JSONL keeps the raw branch as GIT_BRANCH instead of overwriting gstack-slug's sanitized BRANCH used for artifact names - the Codex outside-voice block runs for ready or unverified, matching its routing rule - plan-eng startup names the preamble's own setup prompts; the cross-project question waits for Step 0 - /qa 8c: a fix that applies but leaves the finding reproducing gets one revised fix, else it is reverted; browser verification names its before screenshot; the exploratory loop drops its duplicate 3-step summary |
||
|
|
1536f7f6b0 | test: register the split-overflow wording replay as a free fixture | ||
|
|
bd741148f6 | v1.91.30.0: move past #3044's claimed 1.91.29.0 | ||
|
|
7d0c29e05a | Merge remote-tracking branch 'origin/main' into garrytan/reliability-followups-oct4 | ||
|
|
1a579bbf29 |
test(plan-ceo): split-overflow candidate identity is the one E1-E5 token
The skill fixes no header or question wording, and shape-matching kept missing new forms (header 'D1.1 Slack' with 'SCOPE-E1:', 'D1.1 E1 Slack', 'E1 Slack DM bot ...:', a misspelled 'Mattermst'). Identity is now exactly one E1-E5 token across the header and the question's first line, with no other candidate's platform named. Options rules, judge, call floor and include/defer/cut validation are unchanged. Replays all 31 measured runs; the quoted-row controls now quote a second ledger id. |
||
|
|
0ff760f5f8 |
test(plan-ceo): split-overflow progress detector accepts the skill's candidate wording
Collection never ended when the model wrote 'E1 Slack:' / 'E1-SLACK:' or labels like 'Include in this quarter' / 'Defer with flip trigger', so the session ran the whole review (930-1464 s) and failed on its extra findings or the case deadline (6 of 21 runs). The candidate check now accepts a platform-bound E-id and the action is the bucket's leading verb, as the skill names them (Include/Defer/Cut/Hold). The semantic judge, call floor and include/defer/cut validation are unchanged. Replays the captured CI 37374526437, t2, t9 and t15 menus with negative controls. |
||
|
|
c285d88b90 |
Promote qualified CSO scanner catalog (#3042)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> |
||
|
|
a2bcbab319 |
fix(cso): helper JSON keeps run URLs only in the validated workflow slot
The shared redactor now treats GitHub Actions run ids as CI metadata
(
|
||
|
|
f16e734b84 | docs(changelog): office-hours review loop changes in v1.91.28.0 | ||
|
|
ce3913c1ea |
fix(office-hours): parent fixes only blocking findings; callers may set --max-rounds
Between rounds the parent edits for blocking findings only; minor findings stay recorded. gstack-office-hours-review takes --max-rounds 1|2|3 (default 3) on every command; reaching it stops at MAX_ITERATIONS. The marathon fixture sets 2 rounds so round 1 (full) and round 2 (delta) run live. |
||
|
|
d0646c1627 | test(office-hours): preservation judge accepts COMPLETED with recorded minor findings | ||
|
|
b0351491e2 |
fix(office-hours): rounds 2 and 3 are delta re-reviews of the captured design diff
prepare saves each reviewed design as round-N.design.md and gives later reviewers the exact line diff since the previous round. A new later-round blocking finding must cite (changed_text) an excerpt of a changed line; seal, check and the validators verify it against the snapshots and fail closed when a citation or snapshot is missing. Other new observations are minor. Severity, anti-downgrade and CONVERGENCE rules are unchanged. |
||
|
|
69a71f5da2 |
fix(office-hours): only blocking findings send a design back for another review round
Review findings carry severity blocking|minor (verdict schema v2). PASS when no blocking findings remain; minor findings are recorded in Reviewer Concerns and the Spec Review table, never a reason for another round. CONVERGENCE needs a persisting blocking prior. A persisting or unverified blocking prior cannot be relabeled minor. The 3-round cap is unchanged. |
||
|
|
209a61dcd3 |
fix(office-hours): reviewer returns a hash-bound receipt instead of echoing its verdict
The spec reviewer now Writes its verdict once, seals it with gstack-office-hours-review seal (validates the saved JSON and prints OFFICE_HOURS_VERDICT round=N sha256=<hash> path=<verdict>), and returns only that line. check --receipt recomputes the hash and fails closed on a missing, malformed, stale-round, wrong-path or mismatched receipt. The saved file stays the sole findings inventory; validators bind the receipt to the saved bytes and the judge reads those bytes. |
||
|
|
43e2b89369 |
Merge remote-tracking branch 'origin/main' into garrytan/reliability-followups-oct4
# Conflicts: # CHANGELOG.md # VERSION # agents-digest/gstack-AGENTS.md # package.json |
||
|
|
119b8c438a |
fix: --case runs a single-case file whole
A session option naming the case (testName: 'office-hours-section-loading') made caseSelection pick test-name mode, whose filter matched no Bun test, so every trial would run hollow. A file that registers only this case now runs whole before any name match is tried. |
||
|
|
10315cf44d |
v1.91.27.0 fix(cso): runtime staging can finish and a qualified scanner catalog can ship (#3041)
* v1.91.27.0 fix(cso): package-level signed SBOMs and staged probes in the verifier container * Qualified scanner catalogs persist scan outcomes; catalog-state tests hold for either state; SBOM tests live with their owner |
||
|
|
1d081e346c |
Bun 1.4.2 everywhere CI and setup pin the tested version
Bun 1.4.0 on Windows aborts about 3% of free-suite shards with native bad-handle errors (main too; #3037); the same head on 1.4.2 had none in 180 shard runs. Every current 1.4.0 pin moves together, as bun-version-drift requires: setup-bun in every workflow (CSO orchestration included), the eval image (sha256 from bun-v1.4.2's SHASUMS256.txt, re-hashed locally), GitLab, the Ubicloud free-suite setup, gstack-bun-version.sh's tested version, engines.bun and @types/bun, the install hint in generated skills, the Dia and cookie native-qualification pins, and docs and tests that state the current pin. Recorded 1.4.0 observations, fixtures, CHANGELOG history and the CSO images' oven/bun:1.3.10 base stay. |
||
|
|
732ed4ae69 |
Merge remote-tracking branch 'origin/main' into garrytan/reliability-followups-oct4
# Conflicts: # CHANGELOG.md # VERSION # agents-digest/gstack-AGENTS.md # package.json |
||
|
|
857466ff8b |
v1.91.25.0 feat(cso): private two-architecture release scoring + self-checking runtime release gates (#3036)
* v1.91.23.0 feat(cso): private two-architecture release scoring and self-checking runtime release gates
* Keep the Linux-only native-evidence and requalification tests out of the Windows lane
* Skip the two Linux-release-only checks on Windows in-file instead of growing the shard list
* fix(cso): opaque producer inputs and receipts; requalification triggers independent of cwd
Producer inputs are {schemaVersion: 2, cellRef, skill, source, execution} and
receipts bind cellRef + inputHash; collection rebuilds the cell from the
matrix, so a cell VM never learns its case or variant. requalificationTriggers
resolves Bun's cwd-relative metafile inputs against the repository root.
* test(evals): bound the review judge's thinking; guarded browser cleanup is not a probe
review/SKILL.md workflow: the ~64k-token bundle let default-effort thinking
spend all 8192 output tokens without an answer in CI. Medium effort with a
64k streaming cap kept 24/24 measured samples under 5k tokens and 63 s with
the same gating scores (as ship already does).
qa-only-no-fix: the fixture prompt routes browser cleanup through the deadline
guard, but the checkpoint detector treated every guarded run as a probe that
needs a checkpoint. A child that only closes the tab with the supplied browse
binary, after the last probe, is cleanup; anything else stays a probe. The
captured CI transcript (run 37252022510) now passes and new scenarios pin
the negative controls.
* test(evals): keep the review judge at default effort; only lift its output cap
Truncation was the defect: thinking and the answer share max_tokens, and the
~64k-token review bundle once spent all 8192. The registration keeps default
effort and response format and gets ship's 64k streaming cap; the guard test
pins exactly that.
|
||
|
|
8ba14433a1 | test: name the in-flight file and the native error when bun dies before its summary (#3037) | ||
|
|
5fce3cdc02 |
fix: --case no longer deadlocks importing the running CLI
runCaseDiagnosis loaded runPaidShards with a dynamic import of scripts/test-paid-shards.ts; when that file is the entry it is still in its top-level await, so the import never resolved and `--case` hung after its first line (on main since #3031, found by the per-case measurement runs). The CLI now passes its runner in; library callers keep the lazy import. |
||
|
|
c95210d4c5 |
test: record the plan-design corpus test in the test-of-test baseline
#3031's ratchet now counts tests that slice a paid test file's source; the B1 plan-design-review-plan-mode replay corpus reads test/skill-e2e-design.test.ts like its sibling corpora already listed. |
||
|
|
0647fd2c32 |
Merge remote-tracking branch 'origin/main' into garrytan/reliability-followups-oct4
# Conflicts: # .github/workflows/evals-periodic.yml # CHANGELOG.md # CONTRIBUTING.md # TODOS.md # docs/TESTING_INTERNALS.md # scripts/eval-flake-rank.ts # scripts/lib/paid-report.ts # scripts/paid-test-durations.json # scripts/test-paid-shards.ts # test/eng-finding-retry-budget.test.ts # test/fixtures/module-size-ratchet.json # test/helpers/carve-guards.ts # test/helpers/touchfiles-data.ts # test/paid-retry-supervision.test.ts # test/qa-probe-gates.test.ts # test/review-workflow-clarity.test.ts # test/ship-control-flow.test.ts |
||
|
|
55fbe77195 |
v1.91.24.0 test: audit wave — PR evals keep finished work, honest ceilings, EVAL_POLICY v2, faster free suite (#3031)
* chore(scripts): retire hollow and legacy paid package scripts behind one-release stubs (W8a, DX-4, CEO-31) test:codex*, test:evals*, test:e2e*, test:gate, test:periodic, eval:bg, eval:bg:all, eval:flake-rank, eval:watch and test:audit now print their replacement and exit 1 via scripts/retired-command.ts. CONTRIBUTING.md carries the same table; test/retired-commands.test.ts pins both. Eval CLI empty-state hints point at eval:bg:pr. * chore: delete dead update-readme-throughput, eval-watch, orphan fixtures and QA_FUNCTIONAL_INPUTS (W8b, CEO-24) Retired with named behavior: - update-readme-throughput.ts + readme-throughput test: replaced a README anchor that no longer exists from a JSON file that was never produced; the script was a no-op. Guarantee withdrawn (nothing to protect). - eval-watch.ts + its dashboard tests: rendered ~/.gstack-dev/e2e-live.json and _partial-e2e.json, written only by unsharded runs, so it showed nothing for every supported (sharded) entry point. Guarantee withdrawn; live progress is the gstack-detach log or gh run watch. Manual-review rendering stays covered by eval-list and eval-summary tests. - Orphan fixtures (autoplan-pending-artifact-ae.json, autoplan-existing-app/, autoplan-sign-in-ui/, parity baselines v1.47.0.0/v1.57.7.0/v1.69.1.0): no test, touchfile or script reads them; superseded baselines stay in git history. - QA_FUNCTIONAL_INPUTS: exported, never imported. * refactor(test-free): delete dead WORKER_HOSTILE list and buildShardArgs parallel mode Neither had a production caller: full-suite mode runs shard processes, so the worker quarantine was inert and --parallel was never passed (W8b). * docs(test-value): narrow prompt-byte contract to machine-read tokens (D2) Define prompt-byte contract as machine-read tokens (markers, field names, command lines, enum values, file paths, security-boundary strings) and add a sentence-pin glossary entry: convert to structural checks or delete when a behavioral eval covers the behavior. * test(ratchet): count free tests that slice a paid test's source A free test that binds readFileSync(<paid test file>) and cuts it with .slice() tests the paid harness's code out of context even when it imports a lib/ symbol. Record the 15 existing files with reasons; new ones fail with fix text. Self-test covers positive and negative shapes. * test(browse): un-quarantine compare-board; all 16 board tests pass headless (W8d, CEO-24) The GSTACK_COMPARE_BOARD_TESTS opt-in hid a headless mismatch that no longer reproduces: all 16 tests pass on Bun 1.4.0 with the bundled headless Chromium, solo, repeated, and beside other in-process browser files. Protected behavior (the comparison-board DOM contract the plan-design-review/office-hours/design-consultation feedback loop polls) is checked on every free run again. * test: replace silent existsSync early returns with explicit skips or assertions (W8d) - browse/test/build.test.ts: server-node.mjs checks skip only when the bundle is absent and GSTACK_EXPECT_BINARIES is unset; the free CI lane and test:ubicloud build it and set the flag, so a dropped build step fails with the build command instead of passing with no assertions. - gstack-update-check: VERSION is tracked; the guard could only hide a bug. - gen-skill-docs host leakage/frontmatter checks assert the host tree exists (the module-level render always produces it). - cso-docker staged-runtime test uses test.skipIf so reports show it as skipped, not passed. * test(ship): convert ship-workflow-clarity sentence pins to structural checks Add test/helpers/prompt-structure.ts (between, expectTokens, expectAbsent, expectOrdered, expectMentions) with fix text on failure. ship-workflow-clarity now pins headings, step order and machine-read tokens (commands, fields, enum and status strings); safety rules are meaning-level keyword checks. Wording is judged by the 'ship/SKILL.md workflow' judge in skill-llm-eval. Sentence pins: 90 -> 0. * ci: add platform-qualification lane for opt-in ML, gitleaks and Swift tests (W8d, CEO-24) security-bench + security-live-playwright L4 (SECURITY_BENCH), the real gitleaks 8.30.1 memory-ingest cases (GSTACK_TEST_GITLEAKS) and the DebugBridge Swift build invariants (GSTACK_TEST_SWIFT) self-skip in every lane today. No scheduled lane has their prerequisites, so per CEO-24 they move to an owned dispatch + quarterly workflow instead of being deleted. Each job was run locally (ML 10 pass, gitleaks 130 pass; Swift needs macOS). test/platform-qualification-workflow.test.ts pins gate variable, job and file together. * fix(scripts): capture-baseline and preflight-agent-sdk no longer act on --help or typos (W8e) capture-baseline parses its flags strictly: --help prints usage, an unknown or valueless flag exits 2, and only a valid invocation writes a fixture (--help used to write test/fixtures/parity-baseline-current.json). preflight-agent-sdk gains --help, rejects unknown flags, and runs the live SDK query (API spend) only with --live. * test(evals): register the three keyless periodic paid files with case ids (W1b) skill-e2e-auq-consistency, skill-e2e-auq-verbose-vs-carved-ab and codex-e2e-recommendation-substance now carry touchfiles, a periodic tier and kind rule (one trial, unchanged), so editing one selects its own case instead of restoring the full PR gate. The verbose A/B case also registers the vendored pre-cut fixture it reads, and review-army-migration-safety registers the SQL fixture it reads. * feat(evals): narrow PR fallback for free-only inputs (W1a, CEO-13/20, ENG-13) The PR profile now exempts the duration seeds, every free-lane workflow (explicit list; inventory test fails on an unclassified workflow, .yaml and workflow_call included), scripts/ubicloud/** and fixtures declared in the explicit FREE_FIXTURES map. Each remaining unknown file carries a label and fix (needs touchfile entry / add to FREE_ONLY_PR_FILES / real unknown dependency). evals.yml itself still restores the full gate. * ci: delete ci-image.yml; the eval workflows already build and push the same content-hash tag (W8f) evals.yml, evals-periodic.yml and evals-marathon.yml each compute the identical hashFiles() tag and build/push it (with :buildcache and :latest) when missing, so ci-image's push trigger and weekly cron were no-ops (30-day median 0.5 min, 36/36 success). ci-image-tag-binding now pins the three eval workflows. * ci(evals): key periodic/marathon concurrency on ref+event; branch periodic dispatch skips the gate census (W2a, ENG-9, CEO-04) * refactor(paid): drop ~160 unused imports; leaf paid-types/paid-select modules break the paid-* import cycle (W8c) * ci(quality-gate): per-PR concurrency, free runner, drop unscoped bun audit (W2a, W8f) - Concurrency keys on pull_request.number || run_id, so back-to-back main pushes no longer cancel each other's credential scan. - ubuntu-24.04 instead of a billed 8-vCPU Ubicloud runner for a ~1 min job. - bun audit --audit-level=critical ran on every PR regardless of diff, so a newly published advisory turned unrelated PRs red, with its own ignore policy. dependency-review (lockfile PRs, fail >= high) and the weekly OSV sweep remain the dependency gates. * chore(test-free): refresh the free duration seed from the audit's Ubicloud recording Adds the 19 files merged after the last refresh, including the 115 s claude-overlay-setup that packed as ~1 s and doubled a shard (W6a). The seed is re-recorded on the final tree at the end of this wave. * ci: move tiny ubicloud-standard-2 jobs to free ubuntu-24.04 runners (W8f) actionlint, skill-docs, dependency-review, version-gate and pr-title-sync are sub-minute jobs; GitHub-hosted runners are free for this public repo. * feat(test-free): pessimistic unseeded packing, seed growth ratchet and CI health summary - Unseeded files pack at the seed's p99 instead of p75 (W6a). - --ci-plan warns in the job summary past 5 unseeded files; --ci-verify lists shards that outran their prediction by 1.5x (and 30 s) plus every flaky pass absorbed by the serial retry (W6a, W7a job summary). - test/free-seed-ratchet.test.ts fails when a seeded file over 60 s is not on scripts/free-test-seed-allowlist.json, when an entry is stale, and when the allowlist grows versus its merge-base copy unless the new entry is an annotated exception with a todo (CEO-10, DX-7). free-plan runs it with full history so the shrink check is real in the required lane. - Every message names the fix command and docs anchor (DX-6). * feat(evals): state PR coverage mode, counts, reuse and fallback files in the summary and comment (CEO-13) * test: make the tracked-tree skill-doc freshness check local-only; tidy skill-docs header (W8f) Every free CI shard regenerates the tracked SKILL.md files before running tests, so the --dry-run freshness assertion compared the regenerated tree with itself and could not fail there. It now skips under GitHub Actions; skill-docs.yml's git diff --exit-code is CI's freshness gate. Removes a stale concurrency comment in skill-docs.yml. * ci(free-tests): install zsh so the bash+zsh portability arms run (W6f) ~42 zsh-arm tests (aside-probe-shell, qa-browser-preservation, generated-docs-fences) skipped in CI because zsh is not in the runner image. All 141 tests in those files pass with zsh present. * feat(evals): executors write negative receipts at the execution boundary (CEO-25, ENG-6) A completed single-trial rule/judge shard that did not pass now writes its negative receipt beside the pass receipts in the slice artifact, so a cancelled run's FAIL still blocks an older PASS when its report never runs. Receipts merge negatives first and order by (run attempt, completedAt); a same-second FAIL/PASS tie resolves to FAIL. The runner call site is a one-line hunk in scripts/test-paid-shards.ts. * docs(cso): state that contained runtime/scanner execution is unavailable today The scanner catalog is empty while its build inputs await review and the runtime catalog holds no qualified profile until the private evaluator exists, so /cso runs static assessment only. AGENTS.md, README and docs/cso-release-qualification.md now say so; docs/cso-scanners.md already did. * test(helpers): expectMentions splits on sentence ends only Clauses joined by ';' or ':' are one rule; splitting there made a reworded rule fail for punctuation. * test(plan-ceo): convert skill-ceo-section-ordering sentence pins Safety and authority rules (never/do not/stop/only/without/wait/approval) are meaning-level expectMentions checks; other sentence pins are dropped. Headings, labels, option rows, placeholders and machine-read lines (auto-decide annotation, Mode:/approved decisions format, STATUS/SOURCE fields, CROSS-MODEL marker, gstack-ceo-mode-handoff) stay as tokens; ordering checks unchanged. Behavior is covered by the periodic PTY case in skill-e2e-plan-ceo-review-section-loading.test.ts. Sentence pins: 210 -> 23. * test(helpers): expectMentions treats wrapped lines as one sentence Templates hard-wrap prose; only sentence ends and blank lines separate rules. * test(gen-skill-docs): convert sentence pins to meaning checks or drop them Safety/authority sentences become expectMentions keyword checks; other English sentences are dropped (wording is judged by the per-skill workflow judges in skill-llm-eval and the E2E cases in touchfiles-data). Commands, config keys, markers (PLAN MODE EXCEPTION, NO UNRESOLVED DECISIONS, Gate outcome), field names and alternation-based meaning regexes stay. Removed the now-empty 'contains opt-in AskUserQuestion text' test (only pinned a sentence; the resolver's AskUserQuestion wiring is covered by the codex second-opinion tests in the same describe). Lane E's existsSync hunks are untouched. Sentence pins: 216 -> 65 (remaining lines carry machine tokens). * ci(windows): shard the Windows lane via --ci-plan/--ci-run/--ci-verify; move native campaigns to native-qualification.yml - windows-free-tests.yml: a Linux plan job curates and packs the Windows-safe files into 6 shards, one strict serial shard per windows-latest job, and a Linux aggregate verifies exact coverage and every result (8.1 min on one runner today). --windows-only now combines with the CI modes; the plan binds the curated file set (W6e). - Every Windows plan and --list run prints the curated count with its top exclusion reasons in the job summary; a free ratchet fails when the curated subset drops below its floor, with the fix (W6e). - The four Dia/cookie diagnostic dispatch campaigns move to the dispatch-only native-qualification.yml with one exclusive `mode` choice input, so their red dispatch runs no longer read as a red PR lane (W8f). Their workflow pins move to test/windows-native-workflows.test.ts; the boolean-exclusivity guard is replaced by the choice input. * feat(paid): per-slice CI job ceilings and an in-process slice deadline with not_run/hung outcomes and checkpoints (W2c, ENG-2) * fix(pass-rates): segment trial history strictly by EVAL_POLICY version Reader-compatibility floor for EVAL_POLICY v2 (ENG-14/CEO-35/DX-12). Only trials under the reader's own policy version feed labels and alarms; older policy trials stay visible but are never scored or used as a drift baseline; trials from a newer policy are ignored with a printed count and fix text. Reverting the later v2 writer commits leaves a reader that cannot pool v2 records into v1 series (the pre-PR reader at |
||
|
|
061bb9b00c |
review/ship: use main's post-expiry smoke sentence; v1.91.24.0
GSTA-23's measurement on the review workflow judge: main's 'Post-expiry smoke rechecks are not-run.' passed 10/10; the C2 wording passed 6/10 and the '..., even in 4c.' variant failed in PR run 37248650879. qa-probe-gates pins main's sentence before step 4c. |
||
|
|
f3d8d6115a |
Merge remote-tracking branch 'origin/main' into garrytan/reliability-followups-oct4
# Conflicts: # CHANGELOG.md # VERSION # agents-digest/gstack-AGENTS.md # package.json |
||
|
|
f97aefe654 |
v1.91.22.0 feat(cso): reviewed, attested scanner build inputs + fixes so scanner qualification can pass (#3035)
* v1.91.22.0 feat(cso): reviewed, attested scanner build inputs + scanner qualification fixes * Regenerate agents digest for v1.91.22.0 |
||
|
|
f8dc64031e |
test: qa-quick sets a caller probe limit and drains past its session budget
C2 raised Browser Quick's native budget to 180 s. qa-quick is the only gate case on the native budget, and its wall went 194 s (main periodic, pre-C2) -> 254 s and 274 s (this PR's runs) -> 300 s session timeout (run 37242691913): the agent now probes every navigation target with a checkpoint, then needs ~80 s to report. Like qa-only-no-fix, the eval now sets a caller probe limit (30 s), scopes the fixture, and gives bun's outer timeout the session drain margin instead of racing the 300 s session. The product's 180 s budget and the session budget are unchanged. Diagnostic rerun passed in 195 s. |
||
|
|
adc683e349 |
test: retro-base-branch fixture uses main and a shallow report path
PR run 37241493377: the agent wrote retro-output.md one directory above the requested <tmp>/retro-base/retro-output.md (it dropped the retro-base segment), so the report check found nothing. The fixture also ran plain git init, which makes master on CI's git while the prompt says the repo is on main; the agent logged that mismatch as a learning. Init on main and use the temp dir itself as the repo. Diagnostic rerun passed (18 turns, 203s). |
||
|
|
da29f66ad5 |
fix: gstack-docs-candidate --help works; docs gate red lines name the denying tool failure
PR run 37239016858 ship-docsync-completion: the parent ran 'gstack-docs-candidate --help' (the helper's usage error points at --help, which failed). That undeclared command made docsToolFailures non-empty, which denied the atomic-replacement proof of the child's legitimate native Edit, so the red line blamed the Edit's temp file. A replay of the capture proves the atomic replace once --help is declared. - the helper prints its usage for --help/-h and exits 0 - the fixture interface and command grammar admit the helper's bare --help - the atomic-proof denial names its check and the tool failures behind it (deny labels renumbered to their lines) - replay with negative controls (undeclared command, temp left behind, renamed elsewhere); diagnostic rerun of ship-docsync-completion passed |
||
|
|
12a5187705 |
test: keep docsync-authority in the Windows profile
The replay test's literal helper path tripped the Windows curator's shebang-spawn pattern, dropping the whole file from the Windows profile (test-free-shards invariant). The snapshot --out case is already covered by docsync-command-grammar, so it is removed here, and the Linux-path replay skips on win32. |
||
|
|
9e5bba2cbe |
test: replay run 37237194905's late-result capture through the docs authority detector
The only failure was call 20's write to a mistyped shard root (3GanyY for 3GanyU), which the model disclosed; the detector is correct and the A1 post-snapshot --out under the fixture home stays permitted. Named red recorded in TODOS. |
||
|
|
c245d1bc22 |
fix: CI run/job ids are not phone numbers; context-recovery fixture gets the full runtime bin
pii.phone.e164 redacted the run id in the published eval report's fetch command (--run 37235771700), breaking the command it prints. Digit-only spans in a run/job flag, gh run argument, actions/runs/ or /job/ URL segment, or run_id/job_id key are now exempt; the same digits elsewhere still report. context-recovery-artifacts: the fixture's ./bin/ lacked gstack-skill-start and gstack-context-recovery (the preamble's runtime scripts since v1.71), so the agent spent its 10 turns hunting for them and hit error_max_turns with no final message (run 37235771700, 11 turns). Link the whole runtime bin; diagnostic rerun passed in 6 turns. |
||
|
|
0bddbd0947 |
test: settle nav-guard commands before asserting; make two new tests Windows-safe
navigation-guard: Bun's expect(promise).rejects slows each Playwright round-trip to ~1s while it waits (50 page.evaluate: 43ms plain vs 46.6s inside the matcher), so the click's 5s timeout expired before the guard saw the link-local request (CI: 'click: Timeout 5000ms exceeded ... waiting for scheduled navigations'). Settle the command first, then assert on the refusal; a source check keeps it so. env-host-runtime-assets: PROBE_FILES now matches either path separator. detector-corpus ship-docsync-late-result: JSON-escape the <ROOT> substitution so a Windows temp path's backslashes do not break JSON.parse. |
||
|
|
32c187b47e | v1.91.21.0: move off v1.91.20.0 (claimed by #3031) | ||
|
|
0d5016ca8a |
B1: shared-libs corpus labels its git path and covers the supported shape
Every census entry was recorded in CI's eval image (git 2.43), where gstack-safe-git falls back because --no-lazy-fetch is rejected; each entry now says so (git_path: fallback). Two synthetic supported-path entries (HEAD and a history citation in the brief, as git >= 2.44 produces) keep the 37193478719 pass and the 37195203538 refusal, and a test asserts both shapes are covered and the actor reads no git-path-specific text. |
||
|
|
d2016ea872 |
B1: batching counter reads a target declared mid-line; replay corpus
GSTA-23's census 37228573062 failed plan-eng-multi-finding-batching with reviewCount=0 after 975 s although D1-D10 were asked one per finding, each with its saved decision-ledger record. The report wrote 'Report destination requested by the user. Review target (fixed): `PLAN.md` ...' and the counter read target fields only at a line start, so no brief inherited the plan identity. A target field may now open any sentence of its line; a mid-sentence mention or another file still gives no identity. Floor (3), budget and kind unchanged. Corpus: 9 earlier passing censuses, the red (now credited at D5), and a derived batching refusal; 975 s noted in the headroom diagnosis. |
||
|
|
51c6b16042 | regen: qa and qa-only exploratory sections (PROBE_DIR wording) | ||
|
|
748cabfe49 |
E3: reap the recorded Chromium only after the daemon has exited
With the PID now recorded (E3), browse stop reaped Chromium while the daemon was still shutting down; the daemon read that as a crash, exited 1 and left its state file (chromium-profile-isolation's headless stop test failed 3/3 locally, passes on base). The CLI waits up to 5 s for the daemon to exit before reaping a survivor. |
||
|
|
adbe317243 |
test: ship docs freshness pin checks meaning after A1's wording trim
The snapshot still hashes selected release paths (--select narrows them), generated outputs and docs; the pin now checks that instead of the pre-trim sentence. |
||
|
|
7dad05c324 | test: paid file count and periodic floor include the two new periodic cases | ||
|
|
ce73af0137 | C2: keep PROBE_DIR 'owned' (qa-functional-prompt pins it); qa measured 93,311 | ||
|
|
e36e622add |
test: qa-only fixture keeps its caller-set 30 s deadline
The qa-only-no-fix fixture tells the model to start the guard with 30 s (a caller limit), so its deadline assertion's default stays 30 000 ms; the product's Browser Quick default (180 s) does not apply to it. Reverts the helper and its test to their base. |
||
|
|
c74c3df073 |
E6: a block that reads a SKILL.md is not a missing install
The first live codex-multiblock-live run passed its real check (the /learn block found the install and printed the seeded learning) but the oracle flagged a sed of the learn SKILL.md, whose prelude source quotes the 'gstack: no install found (tried $_r)' text. Only an emitted line that starts with the message and names a real root counts now; free replay negative added. |