Repository navigation
Research runtime: GPT Researcher's effort rides on each alias, FAST stays -high (stacked on #759) - #774
Draft
seathatflowsinourveins wants to merge 6 commits into
Draft
Research runtime: GPT Researcher's effort rides on each alias, FAST stays -high (stacked on #759)#774seathatflowsinourveins wants to merge 6 commits into
seathatflowsinourveins wants to merge 6 commits into
Conversation
5 tasks done
seathatflowsinourveins
added a commit
that referenced
this pull request
Oct 6, 2026
… the PR 15167 dependency, -max alternative, owed re-measure The command center's verdict on 640a719 (ACK_AFTER; item task-ns2604-coop-20261006T055125Z). P2-1. The call-log API returns requestedModel under the provider id codex/, not the requested cx/ alias: OmniRoute@c1e30b76 src/lib/usage/callLogs.ts L221-231 and L479 rewrite only provider-node prefixes. Live rows for gptr-20261006T044527Z-3989681 read codex/gpt-6.1-sol-xhigh, provider codex. - gateway-effort-accept.py: ROUTES now holds the cx/ and codex/ spelling of each route (plain and -high as #723 adds them, plus -xhigh). It uses #723's stricter predicate (alias suffix equals the logged model; provider codex), so the two PRs differ only by the -xhigh entries. - Its test uses the observed row shape, with the mismatch and wrong- provider negatives. - The live session-joined acceptance run now exits 0 (join=session, high and xhigh). Main's script and this branch's first one exit 1 on the same session, and the new test rows fail against both. P2-2. The -xhigh route needs OmniRoute PR 15167. Main's plan gpt-gateway row (owners[75]) still installs the published [email protected], which answers HTTP 400 for cx/gpt-6.1-sol-xhigh (receipt C7). The amendment's dependency field and the research-harnesses plan notes now record that this lands after #723. P3: - The amendment lists the -max alternative, why it is out of the ruling's scope, and the comparison that would restore it. - It records the owed 24 h zero-downgrade re-measure after the reinstall. - Citations move to public pins (c1e30b76 for codex.ts and callLogs.ts, 0585aba55 for reasoningSuffix.ts L54-58) and the install lines (install.sh L911 and L930). - It qualifies NULL in the effort columns (encrypted-reasoning rows only), so the 12-row before-count is a lower bound. The wrapper and config bytes are unchanged (fbf0f46a, 8edd6747), so the observed run still describes them. Co-Authored-By: Claude Opus 5.5 <[email protected]>
seathatflowsinourveins
added a commit
that referenced
this pull request
Oct 6, 2026
…json (hot-file protocol, last commit) docs/lanes.md hot-file protocol, folded into a single last commit after the #774 review round. host_receipts.register_file re-registers integration-resolutions.json, install-plan.json, SOURCES.md, gateway-effort-accept.py and tests/test_new_wsl_client_config.py. component_matrix.py --write and new_host_grand_list.py --write left their reports unchanged. python3 scripts/validate.py passes. Co-Authored-By: Claude Opus 5.5 <[email protected]>
seathatflowsinourveins
force-pushed
the
claude/ns2604-gptr-effort-20261006
branch
from
October 6, 2026 06:02
640a719 to
e16ece0
Compare
…rces Run 20261005T222529Z-1387309 exited 0 with sources_count: 0 and a 105-word report. After a successful CLI exit the wrapper now reads upstream's own count, the frontmatter sources_count of the one report the CLI writes under outputs/ (cli.py L209-245, L225, L332-336 at 0957c301), and exits 3 when there is not exactly one report, no single sources_count in a closed frontmatter, or zero sources. The CLI's own status (124 from the watchdog) still passes through, and the run directory is always printed. The retriever stays duckduckgo. GPT Researcher v3.7.0 (identical to main) calls ddgs text() with region 'wt-wt' and the default 'auto' backend and exposes neither to configuration. ddgs 9.16.0 is the newest release, and the region was declined upstream (deedy5/ddgs#417; PR #474 unmerged). The zero-source run came from per-engine throttling of this host (probe: brave 429, duckduckgo 202, google and mojeek 403, yahoo alone with results), which no pin removes. The wt.wikipedia.org DNS error is only the error the aggregator records. Keyless scholarly retrievers measured off-topic (arxiv), empty (openalex) or 429 (semantic_scholar) and would mask a dead web search under the guard. SearXNG through the searx retriever remains the owed durable route. Tests: the stand-in CLI writes upstream-shaped frontmatter; new cases cover zero sources, uncountable reports and status pass-through. Co-Authored-By: Claude Opus 5.5 <[email protected]>
… "\n", fix the exit contract (#759 review) The command center's review of 93f3cbe (P3): - A query is written into the report frontmatter by cli.py's _yaml_quote (L220-222 at 0957c301), which escapes only backslashes and double quotes. A query with "\n" or "\r" could forge the sources_count line the guard reads, so the wrapper refuses it as a usage error (exit 2) before anything runs. - The guard now splits at "\n" only, as upstream joins the frontmatter (cli.py L245). str.splitlines() also broke at U+2028, which upstream leaves inside the query's line, so such a query could forge a count on a zero-source run. - The exit contract in the header: 2 is the wrapper's usage error, and the CLI's own status passes through unchanged (argparse's usage error is also 2; 124 from the watchdog; 125-127 when the timer or env cannot run). - sources_count counts URLs a run tried to read, not pages it read (skills/researcher.py L813-834, L911-913, L922-924, L1088-1098), so a count above 0 is necessary, not sufficient. The cause wording is now "probable": ddgs returns empty without raising both on a non-200 and on a 200 without hits. Tests: the stand-in CLI writes the run's own query through upstream's _yaml_quote. New cases cover line-break refusal, the U+2028 forgery and a CLI exit 2 passing through. The discriminating control runs this module against older wrappers in a mirror: ecfa112 fails 14 checks, 93f3cbe fails exactly the 4 new ones. Co-Authored-By: Claude Opus 5.5 <[email protected]>
…d body effort (FAST stays -high) The command center's ruling (item task-ns2604-coop-20261006T043449Z, section 4): FAST keeps cx/gpt-6.1-sol-high, per the decisions 2026-10-04-round2-plan-g4-config.md:66 and 2026-10-05-round2-adoption-repair.md:53. The effort each request sends must agree with its alias. Finding: the global LLM_KWARGS.reasoning_effort=xhigh reached all three roles. On the -high FAST alias the gateway's suffix outranks the body effort (codex.ts L1428-1433 in the running build omniroute-3.8.51-5f4b3d577-affinity-pr15167). call_logs held 12 GPT Researcher FAST rows in the 24 h before this change asking xhigh and going upstream as high. GPT Researcher v3.7.0 (0957c301) has no per-role kwargs: - config/variables/base.py L35 and L46 declare one LLM_KWARGS and one REASONING_EFFORT; - config.py L97 reads REASONING_EFFORT from the environment only; - utils/llm.py L86-87 and L103-104 send it only for listed OpenAI models and merge LLM_KWARGS into every call. So the alias suffix is the only per-role lever. - config: smart and strategic use openai:cx/gpt-6.1-sol-xhigh (the gateway parses -xhigh, reasoningSuffix.ts L54-58); FAST stays openai:cx/gpt-6.1-sol-high; LLM_KWARGS.reasoning_effort is removed. - wrapper preflight: the exact new models, and no reasoning_effort or reasoning key at any depth of LLM_KWARGS. - integration ledger: the dated amendment repair_round_4.research_configuration_amendment_2026_10_06 binds the new config bytes and chains to the 2026-10-05 record (superseded_by). It records one patched run: call_logs for gptr-20261006T044527Z-3989681 show 3 x -xhigh to xhigh and 1 x -high to high, with no body effort. - dated notes in both decision records, the plan row's notes and SOURCES.md. - gateway-effort-accept.py: accepts cx/gpt-6.1-sol-xhigh (xhigh); DeerFlow keeps the plain route. - tests: the configuration chain, the new preflight cases and the new route. A disarmed effort check fails exactly the two new preflight cases. Co-Authored-By: Claude Opus 5.5 <[email protected]>
… the PR 15167 dependency, -max alternative, owed re-measure The command center's verdict on 640a719 (ACK_AFTER; item task-ns2604-coop-20261006T055125Z). P2-1. The call-log API returns requestedModel under the provider id codex/, not the requested cx/ alias: OmniRoute@c1e30b76 src/lib/usage/callLogs.ts L221-231 and L479 rewrite only provider-node prefixes. Live rows for gptr-20261006T044527Z-3989681 read codex/gpt-6.1-sol-xhigh, provider codex. - gateway-effort-accept.py: ROUTES now holds the cx/ and codex/ spelling of each route (plain and -high as #723 adds them, plus -xhigh). It uses #723's stricter predicate (alias suffix equals the logged model; provider codex), so the two PRs differ only by the -xhigh entries. - Its test uses the observed row shape, with the mismatch and wrong- provider negatives. - The live session-joined acceptance run now exits 0 (join=session, high and xhigh). Main's script and this branch's first one exit 1 on the same session, and the new test rows fail against both. P2-2. The -xhigh route needs OmniRoute PR 15167. Main's plan gpt-gateway row (owners[75]) still installs the published [email protected], which answers HTTP 400 for cx/gpt-6.1-sol-xhigh (receipt C7). The amendment's dependency field and the research-harnesses plan notes now record that this lands after #723. P3: - The amendment lists the -max alternative, why it is out of the ruling's scope, and the comparison that would restore it. - It records the owed 24 h zero-downgrade re-measure after the reinstall. - Citations move to public pins (c1e30b76 for codex.ts and callLogs.ts, 0585aba55 for reasoningSuffix.ts L54-58) and the install lines (install.sh L911 and L930). - It qualifies NULL in the effort columns (encrypted-reasoning rows only), so the 12-row before-count is a lower bound. The wrapper and config bytes are unchanged (fbf0f46a, 8edd6747), so the observed run still describes them. Co-Authored-By: Claude Opus 5.5 <[email protected]>
…json (hot-file protocol, last commit) docs/lanes.md hot-file protocol, folded into a single last commit after the #774 review round. host_receipts.register_file re-registers integration-resolutions.json, install-plan.json, SOURCES.md, gateway-effort-accept.py and tests/test_new_wsl_client_config.py. component_matrix.py --write and new_host_grand_list.py --write left their reports unchanged. python3 scripts/validate.py passes. Co-Authored-By: Claude Opus 5.5 <[email protected]>
seathatflowsinourveins
force-pushed
the
claude/ns2604-gptr-effort-20261006
branch
from
October 6, 2026 10:46
e16ece0 to
19c574c
Compare
4 tasks done
8 tasks done
This branch has not been deployed
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Scope
What this PR changes: GPT Researcher's per-role reasoning effort now comes only from each model alias:
cx/gpt-6.1-sol-high;cx/gpt-6.1-sol-xhigh;LLM_KWARGS.reasoning_effortis removed, so no request asks for xhigh on the-highalias.The wrapper's preflight enforces this exact contract. A dated amendment in the integration ledger binds the new config bytes. The plan's gateway acceptance script reads the call-log API's actual spelling,
codex/….Merge order: this lands after Research runtime: fail closed when GPT Researcher reports zero sources #759 and Repair native install-plan acceptance after the hcom relaxation #723.
7d01a9bc, so Research runtime: fail closed when GPT Researcher reports zero sources #759's two commits appear in this diff until it lands. Then rebase and redo the re-registration in the last commit.-xhighroute needs OmniRoute PR 15167. Repair native install-plan acceptance after the hcom relaxation #723 moves the plan's gpt-gateway row to the5f4b3d577composition that carries it, while main's row still installs the published[email protected], which answers HTTP 400 forcx/gpt-6.1-sol-xhigh(receipt C7).gateway-effort-accept.py. This PR'sROUTESand predicate are Repair native install-plan acceptance after the hcom relaxation #723's plus the two-xhighentries, so whichever lands second resolves to this superset.Base commit:
7d01a9bc(Research runtime: fail closed when GPT Researcher reports zero sources #759's head, onmainecfa11276). Head:e16ece00.Lane:
lane:foundation.Owned paths touched:
tools/research/gpt-researcher.config.json,tools/research/gpt_researcher.sh;tests/test_research_entry.py,tests/test_new_wsl_client_config.py;evidence/artifacts/final-architecture-round2-20261004/integration-resolutions.json;evidence/artifacts/new-wsl-install-plan-20261002/{install-plan.json,SOURCES.md,config/gateway-effort-accept.py};docs/decisions/2026-10-04-round2-plan-g4-config.mdanddocs/decisions/2026-10-05-round2-adoption-repair.md;manifests/evidence.json, re-registration only, in the last commit.The co-op's fixwave-defects lane holds the plan files through Repair native install-plan acceptance after the hcom relaxation #723 (
2026-10-05-omniroute-gateway-composition.mdL44-45). Both PRs are the co-op's, so the overlap is settled by merge order, not a hand-off.The ruling. The command center's item
task-ns2604-coop-20261006T043449Z, section 4: FAST keeps-high, perdocs/decisions/2026-10-04-round2-plan-g4-config.md:66anddocs/decisions/2026-10-05-round2-adoption-repair.md:53. The effort each request sends must agree with its alias.The finding. In the 24 h before this change (2026-10-05T04:45:27Z to 2026-10-06T04:45:27Z), the gateway's
call_logsheld at least 12 rows whose requested and upstream efforts differed. All of them were GPT Researcher sessions (gptr-*) oncodex/gpt-6.1-sol-high: requested xhigh, upstream high. The count is a lower bound, because both effort columns are filled only for encrypted-reasoning rows.SOTA sources
gpt_researcher/config/variables/base.pyL35 and L46: oneLLM_KWARGSand oneREASONING_EFFORT;gpt_researcher/config/config.pyL97:REASONING_EFFORTis read from the environment only;config.pyL225-231: only high, medium or low are accepted;config.pyL205-222:parse_llmsplitsprovider:modelonly;gpt_researcher/utils/llm.pyL86-87: an effort is sent only forSUPPORT_REASONING_EFFORT_MODELS(llm_provider/generic/base.pyL77-90 lists no gpt-6.1 model);utils/llm.pyL103-104:LLM_KWARGSis merged into every call.@c1e30b76:open-sse/executors/codex.ts#L1401-L1408split the suffix.#L1428-L1433resolve the effort as forced, then the model suffix, thenreasoning.effort, thenreasoning_effort. The file is byte-identical at PR 15167's head0585aba55and in the running 21128 build5f4b3d577(docs/decisions/2026-10-05-omniroute-gateway-composition.mdL9-34).@0585aba55:open-sse/executors/codex/reasoningSuffix.ts#L54-L58parse the hyphen suffixes through xhigh. The v3.8.51 tag has the same loop at L52-56, but its live catalog rejectsgpt-6.1-sol-xhigh(composition decision L49-51 and L88-90;evidence/artifacts/omniroute-sol-max-20260930/checks/probe-gate-before-switch.json).@c1e30b76:open-sse/config/providers/registry/codex/index.ts#L9-L13(provider idcodex, aliascx) andopen-sse/services/model.ts#L484-L490.src/lib/usage/callLogs.ts#L221-L231,#L479: the call-log API rewrites only provider-node prefixes, so acx/request comes back ascodex/.callLogs.ts#L649-L668and migration188_call_logs_reasoning_encrypted.sql#L13-L14(identical at0585aba55):reasoning_effort_requestedis the client body's effort verbatim, andreasoning_effort_upstreamis the effort the gateway sent. Both are filled only when the reasoning is observed as encrypted (L661-668).LLM_KWARGSreaches every role;REASONING_EFFORT: environment-only, low/medium/high only, and never applied to gpt-6.1 models;-maxfor smart and strategic, which the PR 15167 build also serves: not taken. The ruling concerns agreement between effort and alias, not the level, and the recorded decisions keep smart/strategic at xhigh and give Sol/max to native Codex alone (docs/decisions/2026-10-04-final-architecture-round2.md:38;2026-10-05-round2-adoption-repair.md:52-54). This would be overturned by a paired research-quality A/B of-maxagainst-xhighon frozen queries, through promptfoo, showing better reports at acceptable latency and cost, followed by a dated decision that amends the native-Codex-only Sol/max rule.Evidence-class table
20261006T044527Z-3989681, no request asked for xhigh on a-highalias, and every request's upstream effort equals its alias suffixbash tools/research/gpt_researcher.sh "NTP leap smear guidance 2026"with wrapper sha256fbf0f46a42f1489193a0b190b284944b65ce0cecd975e85eb370a8bfccd23311and config8edd67475f0e7f80057a5dbefadfee3af558ceceba7ab4d48a5d4145157ab50b, byte-identical at this head. 04:45:27Z-04:51:31Z, exit 0,sources_count: 12. Gatewaycall_logsread with sqlite3mode=ro,session_tag = gptr-20261006T044527Z-3989681: 4 rows, table below. This covers that run only; the 24 h re-measure is owed after the reinstallpython3 evidence/artifacts/new-wsl-install-plan-20261002/config/gateway-effort-accept.py gptr-20261006T044527Z-3989681 2026-10-06T04:45:27Z 2026-10-06T04:51:31Zat 05:55:54Z: exit 0,join=session, expected effort high and xhigh. The API rows readrequestedModelcodex/gpt-6.1-sol-xhigh(3) andcodex/gpt-6.1-sol-high(1), providercodex. Control on the same live session: main's script (31eeb4c4…) and this branch's first one (1bf7c2bf…) exit 1tests.test_new_wsl_client_configRound2RepairIntegrationTests: 10 OK. Rows are shaped like the live ones; negatives cover an alias that differs from the model, provideropenaiand-max. Against main's and the first script, the test raises "unexpected model route" (exit 1)tests.test_research_entry: 11 OK. Controls: a mutant with the effort check disarmed fails exactly the 2 new effort cases; #759's wrapper against the new config fails 18 checks with 1 errorconfiguration_sha256,previous_configuration_sha256,superseded_by/amends, each changed and kept field);python3 scripts/validate.pyexit 0The
call_logsrows of run20261006T044527Z-3989681:requested_modelreasoning_effort_requested(body)reasoning_effort_upstreamcodex/gpt-6.1-sol-xhigh(smart, strategic)codex/gpt-6.1-sol-high(fast)"Requested" now means the alias. GPT Researcher sends no body effort, so
reasoning_effort_requestedis NULL on every row: these rows are encrypted-reasoning rows, the only kind for which the gateway fills both effort columns. The requested effort is the alias suffix, and the upstream effort equals it on all four rows. Before this change, FAST rows read requested xhigh, upstream high.The receipt is the run directory on this host (report sha256
bb76fc88da36a4b7338f7ca5d35602b307fa450460cc64d4c1bd130a6575c11b,config.jsonb91a6515…,wrapper-stdout.logf8a0cc08…) plus this stdout tail (home shortened to~):Local commands run
Decision record
The dated amendment
repair_round_4.research_configuration_amendment_2026_10_06inevidence/artifacts/final-architecture-round2-20261004/integration-resolutions.json, which pins the config hash. It holds the ruling, the finding, the changes, the per-role source review, the observation and its live acceptance check, the PR 15167 dependency (merge after #723), the-maxalternative with its overturn comparison, and the owed re-measure. Dated notes sit in both decision records, the plan row's notes andSOURCES.md.Host evidence
Not applicable.
Checklist
env -iand the keyless loopback placeholder; the gateway's database and call-log API were only read.manifests/evidence.jsonchanges only by re-registering this branch's five hash-listed files.After landing (after #759 and #723), and only at a quiet point agreed with the command center:
install.shL911 copies the wrapper and its config, and L930 copiesgateway-effort-accept.py. The shared main checkout is refreshed.call_logs, expecting zerogptr-*rows whose requested effort differs from upstream (itemtask-ns2604-coop-20261006T033237Z, section 2). Until the reinstall, installed copies keep sending the 2026-10-05 configuration.🤖 Generated with Claude Code