Add OpenAI GPT-Rosalind as the rosalind deep-research provider - #636
Merged
Conversation
GPT-Rosalind is served by the same Responses API as deep-research-client's `openai` provider, so the lane is `--provider openai --model $ROSALIND_MODEL` under a TraitMech-level provider name with its own `-deep-research-rosalind.md` namespace: an o3-deep-research report and a GPT-Rosalind report are different evidence and must never satisfy each other's resume check. - research_trait: `rosalind` (+ `gpt-rosalind`, `gpt_rosalind`) resolves to itself; provider_args() translates for the client; a dedicated ROSALIND_API_KEY overrides OPENAI_API_KEY for this lane only. - run_trait_graph_audit: provider-aware preflight (it demanded EDISON_API_KEY for every provider); resume and the orphan gate honour `pipeline_run: false`, which is what keeps the two hand-pasted Rosalind answers from suppressing a call or reading as orphans. - deep_research_provider + profile: triaged and credentialed on its own, weighted like falcon for causal_mechanism. - research_rosalind_canary + `just rosalind-canary`: unbilled preflight that lists the models the key may use and fails unless the requested id is among them (the model is trusted-access gated per org). Outside the vendored contract file on purpose. - render_trait_pages: rank rosalind after falcon. - Docs, .env.example, skill, and the two hand-supplied reports' front matter. No paid call was made; the API model id defaults to `gpt-rosalind` and is overridable via ROSALIND_MODEL until the canary confirms it. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01X8fGq86Bo7eeBoXMtiU1gg
This was referenced Sep 3, 2026
Open
Open
Open
- #638: research_trait refuses an existing report without --force; the sweep sets hand-supplied targets aside instead of queueing (and overwriting) them. - #639: the namespace test asserts the orphan-gate invariant, not "every rosalind file is hand-supplied", so the first real report stays green. - #640: a passthrough --model is rejected for rosalind (ROSALIND_MODEL only). - #641: ROSALIND_API_KEY is the lane's only credential in the runner, sweep preflight, triage, and canary; without it the child gets no OpenAI key. - #642: front matter is parsed as YAML over the whole head (BOM tolerant), shared as research_trait.front_matter/is_pipeline_report. - #643: the renderer excludes pipeline_run: false files; test added. - #644: sweep docs use `just trait-graph-sweep` so .env is loaded. - #645: canary gains --allow-unlisted and documents the request-shape gap. - #646: sweep preflight accepts EDISON_PLATFORM_API_KEY. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01X8fGq86Bo7eeBoXMtiU1gg
Contributor
Author
Adversarial review: findings filed and triagedEvery finding from the review pass was filed as an issue. Disposition for this PR: Fixed in this PR (second commit)
Deferred, left open
🤖 Generated with Claude Code |
OpenAI's 401 body repeats the key as `at-Jk6S****zMaI`; the full-string replace let that prefix and suffix through on the first live run. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01X8fGq86Bo7eeBoXMtiU1gg
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.
Summary
Adds OpenAI GPT-Rosalind as a TraitMech deep-research provider,
rosalind(aliases
gpt-rosalind,gpt_rosalind), for reviewing and constructing causalgraphs and their evidence.
GPT-Rosalind is served by the same Responses API as deep-research-client's
openaiprovider, so the lane is--provider openai --model $ROSALIND_MODELunder a TraitMech-level provider name and its own filename namespace,
<slug>-deep-research-rosalind.md. The namespace is deliberately separate from-openai: an o3-deep-research report and a GPT-Rosalind report are differentevidence and must never satisfy each other's resume check.
What changed
scripts/research_trait.py:rosalindprovider;provider_args()emits--provider openai --model …;research_env()lets a dedicatedROSALIND_API_KEYoverrideOPENAI_API_KEYfor this lane (ageneral-purpose key must not silently take the call);
research_env()nowaccepts an injected environ.
scripts/run_trait_graph_audit.py: provider-aware preflight (it used to demandEDISON_API_KEYfor every provider); resume and the orphan gate honour apipeline_run: falsefront-matter flag, which is what keeps the twohand-pasted Rosalind answers under
research/traits/ecology/from suppressinga
--provider rosalindcall or being reported as orphans.scripts/deep_research_provider.py+conf/deep_research_provider.yaml:rosalindtriaged and credentialed on its own, weighted likefalconforcausal_mechanism.scripts/research_rosalind_canary.py+just rosalind-canary: unbilledpreflight. Lists the models the credential may use and fails unless the
requested id is among them (the model is trusted-access gated per org), prints
any Rosalind ids it does see so
ROSALIND_MODELcan be corrected, then checksdeep-research-client discovers
openaiunder the env a real run gets.Lives outside
deep_research_contract.pybecause that file is vendored.scripts/render_trait_pages.py:RESEARCH_PROVIDERS = ("falcon", "rosalind")(no page changes: both existing Rosalind traits also have falcon reports).
docs/DEEP_RESEARCH_PROVIDERS.md, README, the research-causal-graphsskill,
.env.example; the two hand-supplied reports' front matter now says whypipeline_run: falseis load-bearing.Verified
just qcgreen, full pytest suite green (see the PR comments for counts).just research-trait ecology gut_associated --provider gpt-rosalind --dry-runemits
--provider openai --model gpt-rosalindand the-rosalind.mdpath.run_trait_graph_audit.py --provider rosalind --dry-run/--verify: 0 done,0 orphans (the two hand-supplied files are correctly excluded).
just rosalind-canaryruns and fails cleanly on the credential check on theauthoring machine (no Rosalind key was visible to the session).
Not verified (needs the key)
gpt-rosalind; the canary reports thereal ids and
ROSALIND_MODELoverrides. No paid call has been made.~/.secretsheldOPENAI_API_KEYat thestart of the session and only
CODEX_ACCESS_TOKENa few minutes later.The lane reads
ROSALIND_API_KEYfirst, thenOPENAI_API_KEY.🤖 Generated with Claude Code
https://claude.ai/code/session_01X8fGq86Bo7eeBoXMtiU1gg