Skip to content

v1.91.149.0 feat(evals): Codex host for gate cases, sol weekly and Fable/Astra monthly census arms (GSTA-49 TM2) - #3292

Merged
capy-ai[bot] merged 10 commits into
mainfrom
capy/tm2-codex-host
Oct 19, 2026
Merged

capy-ai[bot] merged 10 commits into
mainfrom
capy/tm2-codex-host

Conversation

@garrytan

Copy link
Copy Markdown
Owner

Lane TM2 of GSTA-49. It lets gstack's paid E2E cases run on the Codex host, and puts the model tiers Garry asked for on the census schedules.

Garry's direction, 2026-10-18: test the best code model from each lab, gpt-6.1-sol and claude-opus-5-5. Drop the older frontier models, and run the most expensive ones (claude-fable-5-1 and gpt-6-astra) only monthly.

Codex host

  • Host switch. EVALS_HOST selects the host: claude (the default, unchanged) or codex. Each case carries host metadata in test/helpers/e2e-hosts.ts:

    • 52 gate cases run on Codex through the shared adapter;
    • 26 need per-file rework and are not ported here;
    • 29 are Claude-only (PTY, Agent SDK, skillify, hermetic canaries).

    On Codex, Claude-only cases are SKIPPED with a recorded reason. They never count as failed.

  • Runner (test/helpers/codex-host-runner.ts). Each case gets the full Codex runtime. The runner maps file-change events, applies sandbox settings, and passes a reasoning-effort setting (model default unless set). Codex events are rewritten into the Claude stream-json shape the existing checks read, and the runner supports native lifecycle hooks.

  • Real cost. codex-eval.ts no longer hard-codes cost_known: false. Cost now comes from turn.completed usage: input, cached input, cache-write input and output, priced from lib/pricing.ts. Plan, report and shard-reuse records carry the host; the fields are absent when the host is claude.

Model tiers (evals-periodic.yml, scripts/census-arms.ts)

  • Monday census: two arms. Claude runs the capture model, now Opus 5.5. Codex runs gpt-6.1-sol on the adapter cases.
  • Monthly cron 0 6 1 * *: census jobs only, with a Fable arm and an Astra arm. It uses a -monthly concurrency key and a census_arms dispatch input.
  • Unchanged: artifact names carry the arm, and a census-only run executes no periodic slice. The daily schema canary and evals.yml are untouched. Weekly periodic and marathon runs move to Opus 5.5 through TM1's capture default; nothing pins them otherwise.

Sol pilot

All 52 adapter cases ran once on gpt-6.1-sol, with no retries.

  • Result: 48 passed. The four failures look like model behavior:
    • document-release: the README was missing Feature C;
    • safety-pair-agent-block: the instruction block was not relayed byte for byte;
    • ship-coverage-value: weak_gaps was missing the ★-only path;
    • plan-review-report: hit the 600 s budget on its second run.
  • Cost: a measured run of the 52 cases costs $4.63, against $28.93 for the same cases on Fable (0.16×). The extrapolated full sol gate with the 26 rework cases is about $10.93.
  • Decision: whether to port those 26 waits until the weekly sol arm has a few weeks of data.

Gate-integrity edits

Five workflow tests now assert per arm instead of on one census manifest. No assertion was dropped.

Test Change
ci-native-evidence The census matrix uses include: gate_matrix, and run-id uniqueness is checked per arm × slice.
ci-paid-coordination executor.if is periodic_lane == 'true', so a census-only run executes no periodic slice.
evals-workflow-wiring The gate census gets its own test, which plans every arm through census-arms.ts.
paid-retry-supervision Plan and report paths are per arm, and reconcile runs per arm.
paid-shards The emit-plan path is /tmp/gate-census-plan/$arm/manifest.json.

No threshold, trial count or case kind changed. The harness manifest re-records the new runner as non-behavioral at version 6.

Checks

  • Focused tests: 344 pass across 14 files.
  • Type checks: bun run typecheck is clean, and typecheck:test reports no new diagnostics.
  • actionlint: exits 0.
  • Pregate preflight: passes against origin/main.
  • Remote free stage: 10,184 tests, 0 failed.
  • Load-sensitive tests: the three that flaked under load in a full Ubicloud run pass at default timeouts on the merged tree: docsync-fault-interface, qa-only-capability and the xvfb round trip.

Open in Capy

garrytan and others added 6 commits October 18, 2026 19:09
…s Fable (GSTA-49 TM1)

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>
…monthly census (GSTA-49 TM2)

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:
#	CHANGELOG.md
#	VERSION
#	agents-digest/gstack-AGENTS.md
#	package.json
#	scripts/harness-version.json
…the harness manifest after the main merge

Co-authored-by: capy-ai[bot] <230910855+capy-ai[bot]@users.noreply.github.com>
@github-actions github-actions Bot changed the title feat(evals): Codex host for gate cases, sol weekly and Fable/Astra monthly census arms (GSTA-49 TM2) v1.91.144.0 feat(evals): Codex host for gate cases, sol weekly and Fable/Astra monthly census arms (GSTA-49 TM2) Oct 19, 2026
@capy-ai
capy-ai Bot changed the base branch from capy/opus-55-is-the to main October 19, 2026 07:38
@trunk-io

trunk-io Bot commented Oct 19, 2026 •

Copy link
Copy Markdown

😎 This pull request was merged.

…request run fired)

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

github-actions Bot commented Oct 19, 2026 •

Copy link
Copy Markdown
Contributor

E2E Evals: ❌ FAIL

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

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

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):

  • scripts/harness-version.json: 246 case(s), 24 judge(s)
Rule and judge shards
Shard Automated result Manual/unscored Executed Reused Status Cost
e2e-deploy/skill-e2e-deploy--setup-deploy-workflow 1/1 0 1 0 ✅ $0.13
e2e/skill-e2e-coverage-audit 2/2 0 2 0 ✅ $0.24
llm-judge/skill-llm-eval 24/24 0 24 0 ✅ $1.44
e2e-ship-docsync/skill-e2e-ship-docsync--ship-docsync-current 1/1 0 1 0 ✅ $1.18
e2e-ship-docsync/skill-e2e-ship-docsync--ship-docsync-store 1/1 0 1 0 ✅ $0.88
e2e-ship-docsync/skill-e2e-ship-docsync--ship-docsync-completion 1/1 0 1 0 ✅ $1.1
e2e-qa-callers/skill-e2e-qa-callers--ship-exploratory-plan-checks 1/1 0 1 0 ✅ $0.79
e2e/skill-e2e-test-value 3/3 0 3 0 ✅ $0.73
e2e-qa-callers/skill-e2e-qa-callers--review-exploratory-small-cli 1/1 0 1 0 ✅ $0.77
e2e-qa-workflow/skill-e2e-qa-workflow--qa-only-no-fix 1/1 0 1 0 ✅ $0.55
e2e/skill-e2e-shared-libs--shared-libs-read-only 1/1 0 1 0 ✅ $0.24
e2e-docsync-spawned/skill-e2e-docsync-spawned 1/1 0 1 0 ✅ $0.42
e2e-deploy/skill-e2e-deploy--land-and-deploy-first-run 1/1 0 1 0 ✅ $0.35
e2e-deploy/skill-e2e-deploy--land-and-deploy-review-gate 1/1 0 1 0 ✅ $0.24
e2e-review-army/skill-e2e-review-army--review-army-migration-safety 1/1 0 1 0 ✅ $0.27
e2e-ship-docsync/skill-e2e-ship-docsync--ship-docsync-stale-after 1/1 0 1 0 ✅ $0.36
e2e-learnings/skill-e2e-learnings 1/1 0 1 0 ✅ $0.08
e2e-ship-docsync/skill-e2e-ship-docsync--ship-docsync-late-result 1/1 0 1 0 ✅ $0.36
e2e-review-army/skill-e2e-review-army--review-army-json-findings 1/1 0 1 0 ✅ $0.06
e2e-deploy/skill-e2e-deploy--benchmark-workflow 1/1 0 1 0 ✅ $0.19
e2e/skill-e2e-investigate-owned-completion 1/1 0 1 0 ✅ $0.07
e2e/skill-e2e-shared-libs-paths--shared-libs-review-index-flags 1/1 0 1 0 ✅ $1.05
e2e-qa-callers/skill-e2e-qa-callers--ship-exploratory-small-cli 1/1 0 1 0 ✅ $0.78
e2e-review-army/skill-e2e-review-army--review-army-perf-n-plus-one 1/1 0 1 0 ✅ $0.34
e2e-triage/skill-e2e-triage 1/1 0 1 0 ✅ $0.1
e2e-qa-workflow/skill-e2e-qa-workflow--qa-bootstrap 1/1 0 1 0 ✅ $0.08
e2e-third-party-actions/skill-e2e-third-party-actions 5/5 0 5 0 ✅ $0.44
e2e-design/skill-e2e-design--plan-design-review-no-ui-scope 1/1 0 1 0 ✅ $0.1
e2e-deploy/skill-e2e-deploy--canary-workflow 1/1 0 1 0 ✅ $0.11
e2e/skill-e2e-investigate-owned-termination 2/2 0 2 0 ✅ $0.18
e2e/skill-e2e-ship-hook-consent 2/2 0 2 0 ✅ $0.25
e2e-review-army/skill-e2e-review-army--review-army-delivery-audit 1/1 0 1 0 ✅ $0.13
e2e-ship-docsync/skill-e2e-ship-docsync--ship-docsync-timeout-unsettled 1/1 0 1 0 ✅ $0.17
e2e-session-intelligence/skill-e2e-session-intelligence 4/4 0 4 0 ✅ $0.3
e2e-design/skill-e2e-design--design-review-detector-shim 1/1 0 1 0 ✅ $0.12
e2e-plan-tune/skill-e2e-plan-tune 1/1 0 1 0 ✅ $0.13
e2e-safety-pair-agent/skill-e2e-safety-pair-agent 1/1 0 1 0 ✅ $0.11
e2e-ship-docsync/skill-e2e-ship-docsync--ship-docsync-launch-failure 1/1 0 1 0 ✅ $0.15
e2e/skill-e2e-ship-hook-refresh 1/1 0 1 0 ✅ $0.1
e2e-qa-callers/skill-e2e-qa-callers--ship-exploratory-unavailable 1/1 0 1 0 ✅ $0.67
e2e/skill-e2e-plan--plan-review-report 1/1 0 1 0 ✅ $1.41
e2e-retro/skill-e2e-retro 1/1 0 1 0 ✅ $0.32
e2e-qa-functional-fix/skill-e2e-qa-functional-fix 2/2 0 2 0 ✅ $1.07
e2e/skill-e2e-ship-skip 1/1 0 1 0 ✅ $0.24
e2e-qa-workflow/skill-e2e-qa-workflow--qa-quick 1/1 0 1 0 ✅ $0.6
e2e-ship-docsync/skill-e2e-ship-docsync--ship-docsync-stale-before 1/1 0 1 0 ✅ $0.37
e2e-review-attribution/skill-e2e-review-attribution 3/3 0 3 0 ✅ $0.31
e2e/skill-e2e-shared-libs-paths--shared-libs-review-prior-coverage 1/1 0 1 0 ✅ $0.94
e2e/skill-e2e-shared-libs--shared-libs-review-lifecycle 1/1 0 1 0 ✅ $0.84
e2e-safety-codex-consult/skill-e2e-safety-codex-consult 1/1 0 1 0 ✅ $0.28
e2e-deploy/skill-e2e-deploy--land-and-deploy-workflow 1/1 0 1 0 ✅ $0.65
e2e/skill-e2e-workflow 4/4 0 4 0 ✅ $0.91
e2e-review-army/skill-e2e-review-army--review-army-quality-score 1/1 0 1 0 ✅ $0.11
e2e-hermetic/skill-e2e-hermetic-canary 2/2 0 2 0 ✅ $0.02
e2e-browse/skill-e2e-bws 6/6 0 6 0 ✅ $0.29
e2e-ship-docsync/skill-e2e-ship-docsync--ship-docsync-missing-asset 1/1 0 1 0 ✅ $0.26
e2e-design/skill-e2e-design--design-review-plugin-handoff 1/1 0 1 0 ✅ $0.14
e2e-design/skill-e2e-design--design-review-detector-shim-dom 1/1 0 1 0 ✅ $0.22
e2e-safety-ship-evidence/skill-e2e-safety-ship-evidence 1/1 0 1 0 ✅ $0.11
e2e-ship-docsync/skill-e2e-ship-docsync--ship-docsync-missing-marker 1/1 0 1 0 ✅ $0.16
e2e/skill-e2e-shared-libs--shared-libs-unsupported-git 1/1 0 1 0 ✅ $0.18
e2e-ship-docsync/skill-e2e-ship-docsync--ship-docsync-recovery 1/1 0 1 0 ✅ $0.33
e2e-review/skill-e2e-review 2/2 0 2 0 ✅ $0.33
e2e/skill-e2e-shared-libs--shared-libs-review-revalidation 1/1 0 1 0 ✅ $1.85
e2e-qa-functional/skill-e2e-qa-functional 2/2 0 2 0 ✅ $0.83
e2e-cso/skill-e2e-cso 1/1 0 1 0 ✅ $0.39
e2e-qa-callers/skill-e2e-qa-callers--ship-exploratory-late-input 1/1 0 1 0 ✅ $0.86
e2e-skillify/skill-e2e-skillify 3/3 0 3 0 ✅ $0.72
e2e-ship-docsync/skill-e2e-ship-docsync--ship-docsync-failure 1/1 0 1 0 ✅ $0.56
e2e/skill-e2e-shared-libs-paths--shared-libs-review-path-eligibility 1/1 0 1 0 ✅ $1.41
Fail-closed reconciliation
-marker
  slice 13  passed             24s  test/skill-e2e-review-army.test.ts#review-army-quality-score
  slice 13  passed              6s  test/skill-e2e-hermetic-canary.test.ts
  slice 14  passed             48s  test/skill-e2e-third-party-actions.test.ts
  slice 14  passed             32s  test/skill-e2e-plan-tune.test.ts
  slice 14  passed             20s  test/skill-e2e-triage.test.ts
  slice 14  passed             33s  test/skill-e2e-ship-docsync.test.ts#ship-docsync-timeout-unsettled
  slice 14  passed             33s  test/skill-e2e-ask-user-question-format-compliance.test.ts
  slice 14  passed             25s  test/skill-e2e-ship-docsync.test.ts#ship-docsync-launch-failure
  slice 14  passed             29s  test/skill-e2e-session-intelligence.test.ts
  slice 14  passed             34s  test/skill-e2e-ship-hook-consent.test.ts
  slice 14  passed             26s  test/skill-e2e-investigate-owned-termination.test.ts
  slice 14  passed             23s  test/skill-e2e-design.test.ts#design-review-detector-shim
  slice 14  passed             23s  test/skill-e2e-deploy.test.ts#canary-workflow
  slice 14  passed             30s  test/skill-e2e-ship-hook-refresh.test.ts
  slice 14  passed             18s  test/skill-e2e-design.test.ts#plan-design-review-no-ui-scope
  slice 14  passed             26s  test/skill-e2e-review-army.test.ts#review-army-delivery-audit
  slice 14  passed             34s  test/skill-e2e-safety-pair-agent.test.ts
  slice 14  passed             25s  test/skill-e2e-qa-workflow.test.ts#qa-bootstrap
  slice 15  passed             17s  test/skill-e2e-learnings.test.ts
  slice 15  passed             14s  test/skill-e2e-diagram.test.ts
[test:paid] collector final outcomes: 121 executed, 0 reused; 121 passed, 0 failed, 0 manual accepted (unscored; no score-cache credit) (121 attempt records from 70 collectors; every record counts)
[test:paid] deselected testcases, zero credit (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 RED — lane gate/pr, attempt 1
  rule 107/108 · behavior 0/0 · judge 24/24 · quarantined 0 (0 failing the lane)
  SKIPPED 0 · INFRA 0 · INCOMPLETE 0 · unattributed 0 · ACTION REQUIRED 1
  wall 10m25s · cost $32.47 known + 54 of 132 trial(s) cost unknown
[test:paid] failures and split verdicts:
  ✗ plan-ceo-finding-floor  rule  FAIL  assertion — floor test FAILED: outcome=timeout elapsed=609738ms  · cause observer_timeout  [slice 6, attempt 1]  evidence: paid-slice-6-a1/shards/skill-e2e-plan-ceo-finding-floor (fetch: bun run eval:pass-rates --run 39293281037 --case plan-ceo-finding-floor)  after a repair: bun run scripts/test-paid-shards.ts --tier gate --case plan-ceo-finding-floor
[test:paid] exercised-path map (shadow, non-blocking): 6 MAP_GAP line(s) over 100 executed case(s) with recorded commands
  MAP_GAP document-release bin/gstack-banned-terms: non-blocking for this PR; the next census refresh widens the map (docs/TESTING_INTERNALS.md#exercised-path-map)
  MAP_GAP plan-review-report bin/gstack-plan-reality: non-blocking for this PR; the next census refresh widens the map (docs/TESTING_INTERNALS.md#exercised-path-map)
  MAP_GAP plan-review-report browse/dist/browse: non-blocking for this PR; the next census refresh widens the map (docs/TESTING_INTERNALS.md#exercised-path-map)
  MAP_GAP plan-review-report design/dist/design: non-blocking for this PR; the next census refresh widens the map (docs/TESTING_INTERNALS.md#exercised-path-map)
  MAP_GAP shared-libs-review-path-eligibility bin/gstack-approval-classes: non-blocking for this PR; the next census refresh widens the map (docs/TESTING_INTERNALS.md#exercised-path-map)
  MAP_GAP test-audit-report-only design/dist/design: non-blocking for this PR; the next census refresh widens the map (docs/TESTING_INTERNALS.md#exercised-path-map)

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.

Failures and split verdicts

✗ plan-ceo-finding-floor  rule  FAIL  assertion — floor test FAILED: outcome=timeout elapsed=609738ms  · cause observer_timeout  [slice 6, attempt 1]  evidence: paid-slice-6-a1/shards/skill-e2e-plan-ceo-finding-floor (fetch: bun run eval:pass-rates --run 39293281037 --case plan-ceo-finding-floor)  after a repair: bun run scripts/test-paid-shards.ts --tier gate --case plan-ceo-finding-floor

garrytan and others added 3 commits October 19, 2026 09:54
Co-authored-by: capy-ai[bot] <230910855+capy-ai[bot]@users.noreply.github.com>

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

# Conflicts:
#	CHANGELOG.md
#	scripts/harness-version.json
Co-authored-by: capy-ai[bot] <230910855+capy-ai[bot]@users.noreply.github.com>
@github-actions github-actions Bot changed the title v1.91.144.0 feat(evals): Codex host for gate cases, sol weekly and Fable/Astra monthly census arms (GSTA-49 TM2) v1.91.149.0 feat(evals): Codex host for gate cases, sol weekly and Fable/Astra monthly census arms (GSTA-49 TM2) Oct 19, 2026
@capy-ai

capy-ai Bot commented Oct 19, 2026

Copy link
Copy Markdown
Contributor

flaky: plan-ceo-finding-floor, failed in run 39293281037 (attempt 1, slice 6), passed on rerun 39293281037 (attempt 2, slice 6), logged for the daily flaky-fix pass

@capy-ai

capy-ai Bot commented Oct 19, 2026

Copy link
Copy Markdown
Contributor

Merging under Garry's flaky-test rule (2026-10-19: "you can just run the failed test again and note that it is flaky"). plan-ceo-finding-floor failed in attempt 1 of run 39293281037 and passed on the slice rerun (attempt 2). Every slice passed; slices-report stays bound to attempt 1 by design. Logged in the flaky ledger. — GStack Minder

@capy-ai
capy-ai Bot merged commit 9cf105c into main Oct 19, 2026
87 of 90 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant