Repository navigation
Gateway A/B R02 preregistration draft: FW effort medium vs max on li26 (not frozen, not run) - #445
seathatflowsinourveins wants to merge 15 commits into
Conversation
…oo's HTTP provider, draft Draft, not frozen, not run. Builds the R02 harness on upstream components: promptfoo 0.123.1's HTTP provider (one provider per arm, rendered session and idempotency keys, strict json_schema derived from the tiering schema, no sampling fields, maxRetries 0), li26's own prompt, parser and scorer as a promptfoo Python prompt function and assertion, an SSE transform that keeps the gateway's correlation id, a read-only six-column call_logs lookup by correlation id, and the paired filing bootstrap and samples permutation test in scipy 1.18.1 (Holm in statsmodels 0.15.0 recorded as not applied: one role). Effective effort is measured primarily from client-observed reasoning tokens; call_logs effort columns are a secondary check where non-NULL. plan.json records the 60-filing stratified subset (tests files private, sha256 only), the not-sent fields with pinned OmniRoute cites, the bounded wire check (2 gateway calls) and frozen_inputs hashes. Offline tests use synthetic fixtures only. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Hot-file protocol (docs/lanes.md): the eleven new R02 files are registered with host_receipts.register_file; component_matrix.py --write and new_host_grand_list.py --write regenerate their reports unchanged, and validate.py passes. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
…raft, not frozen) - Both arms send X-Correlation-Id with the same per-call template as Idempotency-Key; the configs are regenerated by build_r02.py. - analyze_r02.py rebuilds every call's sent id from evalId, testIdx, promptIdx and the repeat (testIdx minus the filing's smallest testIdx), refuses an echoed id that differs, joins call_logs on the sent id and counts unmatched calls by client-side outcome. - call_logs_by_correlation.py orders an id's rows by (timestamp, rowid), numbers them as attempts and marks the last as final; the six-column allowlist is unchanged. - transform_r02.js records rate-limit-class response headers and the gateway's dropped-upstream-header count in metadata.r02 (open question 3). - README and plan.json record the go-httpbin echo check (16/16, no gateway call), which resolves wire check (a), and the 2-call re-check (f): the gateway kept, returned and logged the caller id (4 of 6 gateway calls). Status stays draft-not-frozen-not-run. - Tests cover the header, the final-row rule and unmatched calls. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Updates the sha256 and byte counts of the nine R02 files changed in the previous commit. component_matrix.py --write and new_host_grand_list.py --write left their reports unchanged; scripts/validate.py passed. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
…is-json Repairs the eight findings of the GPT-6 review of the R02 draft (status stays draft-not-frozen-not-run): - analyze_r02.py voids the run on any integrity problem (status and decision invalid, no statistic, exit 2), enforces the frozen step grid, rosters, tests-file hashes, provider order and promptfoo/Node versions, takes the repeat from the schedule, uses one paired per-filing cost estimand that is supported only when every call returned usage, splits header and whole-call timeouts with their frozen values, reads time to response headers, takes strict-schema validity from promptfoo's is-json, joins call_logs through a settled snapshot and a terminal row fixed by the client's outcome, checks the pinned analysis environment and the gateway owner's read-backs, and compares labels_json as parsed JSON because promptfoo re-serializes it. - call_logs_by_correlation.py drops the rowid/timestamp attempt order and re-reads until two reads 30 s apart agree (exit 3 otherwise). - build_r02.py freezes the module closure (scripts/path_safety.py added), records the installed promptfoo build, and adds is-json to the configs. - plan.json records the run environment, cost leg, terminal-row rule, snapshot, analysis environment, gateway fingerprint precondition and results persistence; frozen_inputs regenerated. - Tests cover each finding, including native checks against the installed promptfoo 0.123.1 (runAssertions, EvalResult). Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Metrics (is-json validity, paired cost leg, time to response headers, split timeouts), the frozen schedule, what promptfoo persists, the terminal-row rule and settled snapshot, the decision rule with invalid first, the pinned analysis environment, the run commands with the frozen environment and the gateway owner's read-backs, new limitations, the review repair list and sources. Removes the arm A path inference drawn from header latency. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
…, observed call_logs snapshot, anchored config notes Repairs the four findings of the GPT-6 re-check of 4b7c58d (status stays draft-not-frozen-not-run): - P1: plan.json gateway_fingerprint.admissible declares each read-back field's admissible values as data (build, per-arm-model combos, no enabled reasoning-routing rule of any mode or scope, thinking budget passthrough, no connection default effort, compression off with the codex exclusion, upstream timeouts), with shapes and provenance. analyze_r02.py checks every read-back value against them with JSON Schema enum equality (ported from jsonschema 4.26.0); equality across the four read-backs stays supplementary. The analyzer holds no admissible value, so the gateway owner's 20128-vs-20129 A/B can reuse it with its own declaration. `analyze_r02.py readback` checks the owner's dry read-back before freezing. - P2: the 22-minute PROMPTFOO_EVAL_TIMEOUT_MS is an independent preregistered deadline; pre-stream waiting and retries count toward it, the gateway-guarantee claim is removed, and timeouts are a per-arm failure, never dropped or rerun. - P2: call_logs is an observed snapshot: late and permanently failed saves are named, settling is a heuristic, counts are lower bounds, terminal status is the observed one, and the report carries its scope. - P3: the wire-check notes are anchored to the config revisions they used (b2a6410, 9d03c1e), and the current two-assertion configs (f58a4a6) are recorded as having offline evidence only. - Tests: force-to-max and compression-on read-backs void the run, other inadmissible treatments, enum equality, a broken declaration, the dry read-back command, the deadline, the snapshot and the config revisions. frozen_inputs regenerated. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
…or reuse - The re-check's call_logs result says what the read observed (2 ids, one row each, no id with a second row, none unmatched) and that an observed snapshot does not show that no retry happened, in plan.json and README. - plan.json admissible_rule and the README note that a study whose arms need different values of a setting declares one field per gateway, since one field listing both gateways' values would admit the arms swapped; a test shows the per-gateway declaration works as data and the pooled one admits the swap. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
…n (hot-file step) Re-registers the eleven R02 files in manifests/evidence.json on top of main's manifest (docs/lanes.md hot-file protocol). The component matrix and new-host grand list regenerated unchanged. validate.py and host_receipts.py validate pass. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
…n condition The gateway owner reported that 20128's OAuth occupancy override serves some turns away from their pinned account and that no setting disables it. Checked at OmniRoute dd6e9607e: every chat request sets reserveOAuthSession: true (src/sse/handlers/chat.ts:1711), and the override moves a call to a same- or next-priority OAuth connection with more session availability (src/sse/services/auth.ts:2159-2176). Both arms run through it, so it is recorded as a shared condition in plan.json limitations and the README, with the owner's measured rates marked relayed. The owner's post-run report now also gives, per arm, the calls whose attempts were served by more than one account. No decision rule, integrity check or frozen input changes. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
…e record (hot-file step) Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
…'s dry read-back The gateway owner's dry read-back at 00a94b5 failed on omniroute_app_version and omniroute_build_sha. The declared source, /api/monitoring/health, gives both only through management auth even with login off (OmniRoute@dd6e9607e:src/app/api/monitoring/health/route.ts:122-123, 307-310), and the owner does not read the management credential. Checked at dd6e9607e: - version: GET /api/system/version `current` (src/app/api/system/version/route.ts:39, 67-72), the same APP_CONFIG.version, keyless only while login is off (src/shared/utils/apiAuth.ts:410-414); - build sha: readRunningBuildSha's resolution for the serving process (src/lib/monitoring/buildSha.ts:29-51). field_sources now names these sources. The residual records that the unit's private EnvironmentFile is not read, so an OMNIROUTE_BUILD_SHA or timeout override there is unknown, and that the process caches the build sha at its first read. The limitations now name the owner's count of six pooled Codex accounts and the account limit-policy cutoffs as a shared, time-varying condition. The owner's post-run report adds the cutoff times inside each half. The admissible values, rules and integrity checks are unchanged. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
…mendment (hot-file step) Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
|
Custody notice for #445 from session native-agent-stack-0c. No live owner found. This draft has had no comment or review since 2026-09-28T01:28Z, and no lane claims it in the coordination folder or on #608. It cannot run as written. Its arms and admissible gateway-fingerprint values are bound to OmniRoute build dd6e9607e and Plan:
The branch stays, because main cites 00a94b5 and bddb007. There will be no gateway call and no host change. Objection window: 2 hours from this comment. The user, the OmniRoute gateway owner (20128/20129) and the Codex token lane 01a0ffbf-211c in particular: object or claim R02 here, and it becomes a user decision instead. Claude session native-agent-stack-0c |
Date the end of the R02 freeze from the rebuild record's own account: 20128 ran 5fc47d970 at 81c9b6da since 2026-09-29 00:42Z, so it had left dd6e9607e by then. The 2026-09-30 rebuild is the first published record of the affinity patch, and part (ii) of the approved patch stays open. Cite the #445 PR description, an author report, for the review rounds, the ninth defect and the test runs, in place of a private file. Restate the owner line from the #445 timeline. Limit the no-run claim to the records, quote the plan's cost-independent adopt-max rule, and name the rebuild file in the roadmap update. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
#656) * docs: retire the gateway A/B R02 preregistration draft Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com> * chore: register the R02 retirement record and refresh reports Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com> * docs: repair the R02 retirement record after review Date the end of the R02 freeze from the rebuild record's own account: 20128 ran 5fc47d970 at 81c9b6da since 2026-09-29 00:42Z, so it had left dd6e9607e by then. The 2026-09-30 rebuild is the first published record of the affinity patch, and part (ii) of the approved patch stays open. Cite the #445 PR description, an author report, for the review rounds, the ninth defect and the test runs, in place of a private file. Restate the owner line from the #445 timeline. Limit the no-run claim to the records, quote the plan's cost-independent adopt-max rule, and name the rebuild file in the roadmap update. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * chore: re-register the repaired R02 retirement documents Re-register the retirement record, the routing README addendum and the roadmap update after the review repair. Both generators left the four reports byte-identical. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * docs: drop the first-published claims from the R02 retirement Main contradicts the three "first published" claims. PR #425 (f6e5a03, on main since 2026-09-28T22:57:18Z) already labels 045aa81f3 as 20128's build, and PR #531's stack row (0a41bf8) states the patch on 20128 about eleven minutes before the rebuild record (b4056a3). The record, the routing README addendum and the roadmap update now say only that the rebuild record has the patch running on 20128 in ae5539a56. Cite the PR #425 labels as a coordinator's labels on a source read (the repair round made no gateway request). Note that, read as the running build, they conflict with the rebuild record's account (:30-31, :135-136). Keep 2026-09-29 00:42Z and 2026-09-30 00:03:00Z as upper bounds only: the record neither asserts nor rules out an earlier date. Add 045aa81f3 and its git log -S hits to the [^rebuild] search statement. Narrow the 81c9b6da sentence to the basis, citing the roadmap :51 report of the gateway owner's rebuild in progress. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * chore: re-register the R02 retirement documents after the re-check Re-register the retirement record, the routing README addendum and the roadmap update after the re-check fixes. Only those three rows changed. Both generators left the four reports byte-identical. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * docs: record the overtaken R02 freeze as a failed condition with its rule Review thread on #656 (P1): the record documented the freeze conflict but named no failed condition or prevention rule. The roadmap's F-WK-3 record "goes in the rebuild's receipt PR" and lists "the user's R02 freeze release" (roadmap :185-188 at 9b0b8d6); the rebuild record, the published account that replaced the 81c9b6da package (:30-32), carries no release; the freeze held "with no end date" (decisions.json:33). Add a "Failed condition" paragraph: it assigns no fault, states the rule (search a host's recorded freezes and ordering conditions before a restart or build switch, and record each release in the switch's own record) and the recovery (record an overtaken freeze in fact, supply no release, carry open items forward). The anti-pattern log row (AGENTS.md:5, docs/harness-defaults.md:85) is outside this retirement's paths and is left to a foundation follow-up. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * chore: re-register the R02 retirement record after the failed-condition paragraph Registry only: the record's files[] row takes its new sha256 and bytes via host_receipts.register_file. The generated reports were re-run with --write and did not change. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * docs: qualify the after-R02 trigger as dormant while the retirement stands (root finding at 447f70b) Line 145 said the trigger can no longer occur, but the reopen conditions allow R02 to reopen, and a completed reopened run would satisfy the original after-scored-run predicate (decisions.json:38). Part (ii) of the occupancy patch stays open with its own acceptance gates. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * Re-register the R02 retirement record (hot-file protocol, last commit) Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * Restore main's registry before the last-commit re-registration (hot-file protocol) manifests/evidence.json returns to main 1a64e8f's copy so that the next commit, the branch's last, carries every owned registry row. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * Re-register the R02 retirement record (hot-file protocol, last commit) register_file on main 1a64e8f's registry for the three owned files: the omniroute-routing-20260928 README, the resolved ecosystem roadmap and the R02 retirement record. component_matrix and new_host_grand_list --write changed nothing. The tree equals the merge commit's tree. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * Roadmap: follow the file's same-date heading convention ("<date>, later, main <short sha>") The 2026-10-03 update merged after main's own 2026-10-03 section, so its heading takes the ", later," form the roadmap already uses for a second same-date update (2026-09-29, later, main 16f3c7f), with the short SHA. No anchor link in the repository targets the old heading. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * Hot-file protocol: reset manifests/evidence.json to the merge base before the final registry commit Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * Register this branch's files on the merge-base registry (hot-file protocol: every registry edit in the last commit) Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * Hot-file protocol: reset manifests/evidence.json to the merge base before the final registry commit Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * Register this branch's files on the merge-base registry (hot-file protocol: every registry edit in the last commit) Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> --------- Co-authored-by: Scout <scout@local> Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
|
Retired unmerged under the stale-PR custody of Claude session native-agent-stack-5f (formerly -0c). The dated retirement record merged in #656 as |
DRAFT preregistration: not frozen and not run. This is gateway A/B R02 for GPT-6 framework (FW) chat/completions effort through OmniRoute:
cx/gpt-6-astrawith noreasoning_effort, the gateway's default of medium;cx/gpt-6-astra-max, which gets max from the executor's built-in-maxsuffix alias.The two arms run on a frozen 60-filing subset of li26's 8-K extraction. The GPT-6 reviewer found the draft freeze-ready once the gateway owner's dry read-back passes; the freeze follows that read-back.
Scope
What this PR changes: it adds the R02 preregistration draft under
blueprints/convergence-practice/gateway-ab-r02-20260927/:plan.json;It also adds the offline tests
tests/test_gateway_ab_r02_20260927.py(80).Base commit:
37739d32(merged into the branch).Lane:
lane:foundation.Owned paths touched:
blueprints/convergence-practice/gateway-ab-r02-20260927/**;tests/test_gateway_ab_r02_20260927.py;manifests/evidence.json(registration only).SOTA sources
34f74d34):maxRetries: 0;testIdx(src/evaluator.ts:2674-2696);is-jsonwith the exact schema that was sent (dist/src/evaluator-DlYW7Rgb.js:2509-2545);PROMPTFOO_EVAL_TIMEOUT_MSandREQUEST_TIMEOUT_MS;dist/src/logger-ChlKG5Wv.js:1049-1057).dd6e9607e:-maxsuffix alias (open-sse/executors/codex.ts:1424-1431) and the no-effort fallback (:1439-1441);src/lib/reasoningRouting/policy.ts:380-404, 543-601);src/sse/services/model.ts:686-711);open-sse/handlers/chatCore.ts:1429-1449);callLogs.ts:867-896,attemptLogging.ts:618).stats.bootstrapwithpaired=True(scipy/stats/_resampling.py:300, 651-683) andpermutation_test(:1679), in the pinned analysis environment (Python 3.14, numpy 2.5.3, statsmodels 0.15.0).enumequality (jsonschema/_utils.py:106-153,_keywords.py:269-271), ported for the admissibility check.blueprints/convergence-practice/local-inference-latest-20260926/, Preregister the GPT-6 family routing test (astra/sol/luna x max/medium) on the frozen 8-K extraction task #359 and GPT-6 family tiering: record the frozen run's results (S1, gpt-6-sol at medium, for mechanical extraction) #397).Design
analyze_r02.pyexits 2).plan.jsongateway_fingerprint.admissible. Identical read-backs of the wrong treatment still void the run.Evidence-class table
uv run --offline --no-project --python 3.14 --with numpy==2.5.3 --with scipy==1.18.1 --with statsmodels==0.15.0 python -m unittest tests.test_gateway_ab_r02_20260927build_r02.py configs --check,frozen --checkandpromptfoo --check, each exit 09d03c1ea)dd6e9607e; the running build is the gateway owner's report)Local commands run
Independent review
All three rounds were GPT-6 (
gpt-6-astraat max) on one Codex thread, read-only, with no gateway, model or network call.Review of
fae72c37: not freeze-ready, 8 findings. They were repaired inf58a4a65and4b7c58de; the builder also found and fixed a ninth defect, promptfoo's compaction of JSON-looking vars.Re-check of
4b7c58de: not freeze-ready, 4 findings (P1, P2, P2, P3). They were repaired in2c584098andaf85abec.Focused re-check of
af85abec: all four resolved, both widened wordings accepted, and no new P0–P3 defect. Verdict: "freeze-ready pending the owner's dry read-back".Its sandbox lacked numpy and scipy, so it ran 76 tests and skipped the 4 statistical ones. All 80 pass above in the pinned environment.
Residuals recorded in
plan.jsonand the README:server.envcan override the timeouts;After the re-check (
884224e0, documentation only), the gateway owner reported 20128's OAuth occupancy override. At OmniRoutedd6e9607e, every chat request setsreserveOAuthSession: true(src/sse/handlers/chat.ts:1711), and the override moves a call to a more available peer connection (src/sse/services/auth.ts:2159-2176). No setting disables it.plan.jsonlimitationsand the README. The owner's measured rates are marked relayed.gateway_fingerprintblock is byte-identical to the re-checked one.Before freezing
plan.jsongateway_fingerprint.fieldsfrom 20128 into one sanitized JSON file, with no account or connection id, key or token;python3 blueprints/convergence-practice/gateway-ab-r02-20260927/analyze_r02.py readback <file>. Exit 0 means every field is admissible.build_r02.py frozen --update-plan, then set the status to frozen, update the tests and the README, and do the hot-file step.Decision record
The dated design record is
blueprints/convergence-practice/gateway-ab-r02-20260927/README.md, withplan.jsonas its machine-readable form. It records the alternatives (the arms, and why moving roles tocx/gpt-6-solis outside them) and the decision rule's overturn conditions.Checklist
Authorizationheader to the keyless loopback gateway.🤖 Generated with Claude Code