Skip to content

feat(catalog): ship gpt-daybreak-blue-latest as a global native row - #1814

Merged
lidge-jun merged 1 commit into
devfrom
codex/compat-v2-daybreak
Aug 16, 2026
Merged

feat(catalog): ship gpt-daybreak-blue-latest as a global native row#1814
lidge-jun merged 1 commit into
devfrom
codex/compat-v2-daybreak

Conversation

@lidge-jun

Copy link
Copy Markdown
Owner

Summary

Ships gpt-daybreak-blue-latest as a global native catalog row. Owner decision.

The slug is entitlement-gated upstream: it is absent from codex-rs's bundled catalog (all
eight slugs checked) and reaches a client only through an authenticated /models response.
Because opencodex injects model_catalog_json, codex-rs builds a StaticModelsManager whose
refresh is a no-op — so an entitled account had no way to discover it on a clean install.
Adding the slug to NATIVE_OPENAI_MODELS closes that gap.

Capability is inherited from gpt-5.6-sol through the existing alias mechanism, so the row
carries multi_agent_version: "v2". The slug now sits in both NATIVE_OPENAI_MODELS and
NATIVE_OPENAI_CAPABILITY_ALIAS_MODELS; the maps consuming their union are keyed by slug so
it collapses to one entry, and row generation iterates NATIVE_OPENAI_MODELS alone, so
exactly one bare row and one row per account selector are emitted.

Accepted tradeoff, documented at the declaration: an unentitled account also sees the
row. Catalog sync still succeeds; selecting the model reaches the canonical OpenAI provider
and the backend answers 400, which is relayed (a bare pooled route may first retry one
alternate account on that exact body; a selector-qualified route is fixed and relays
immediately). disabledModels hides the row but is not a runtime routing denial.

Verification

  • bun x tsc --noEmit → exit 0.
  • Full suite on ssh lidge at this stack: 12561 pass / 13 skip / 0 fail.
  • Fixture reversals are deliberate, not incidental. Suites that used this slug as a stand-in
    for an unknown observation-only native move to gpt-future-unlisted, preserving the
    invariant they were written to prove. Management and Claude discovery now report the global
    bare identity instead of an account-qualified discovery row.
  • Every changed assertion is toHaveLength(1) rather than some(...), so a duplicate-row
    regression fails at these tests.

One finding is recorded honestly in the devlog: Daybreak now appears under neither
identity on the Anthropic discovery surface, because the global synthesized row is
visibility: "hide" and the account-qualified projection is no longer produced. That was
confirmed by printing the actual response rather than assuming, and is harmless since the
model routes through the native OpenAI path.

Checklist

  • Scope stays focused and avoids unrelated cleanup.
  • Docs or release notes were updated when needed.
  • Security-sensitive changes were reviewed for secrets, auth, and unsafe defaults.

Stack (merge bottom-up):

# PR Layer Review focus
4 codex/compat-v2-five-cap the five-model window doc + SoT sync
3 #1814 codex/compat-v2-daybreak ← you are here global native row + fixture reversals
2 #1813 codex/compat-v2-roster roster predicate
1 #1812 codex/compat-v2-docs upstream analysis, no code

Depends on #1813. Review this PR's diff only.

Owner decision. The slug is entitlement-gated upstream: it is absent from
codex-rs's bundled catalog and reaches a client only through an authenticated
/models response. Because opencodex injects model_catalog_json, codex-rs builds a
StaticModelsManager whose refresh is a no-op, so an entitled account had no way to
discover it on a clean install. Adding it to NATIVE_OPENAI_MODELS closes that gap.

Capability is inherited from gpt-5.6-sol through the existing alias mechanism, so
the row carries multi_agent_version v2. The slug now sits in BOTH
NATIVE_OPENAI_MODELS and NATIVE_OPENAI_CAPABILITY_ALIAS_MODELS; the maps consuming
their union are keyed by slug so it collapses to one entry, and row generation
iterates NATIVE_OPENAI_MODELS alone, so exactly one bare row and one row per
account selector are emitted. Tests assert that with toHaveLength(1) rather than
exists, so a duplicate-row regression fails here.

Accepted tradeoff, documented at the declaration: an UNENTITLED account also sees
the row. Catalog sync still succeeds; selecting the model reaches the canonical
OpenAI provider and the backend answers 400, which is relayed (a bare pooled route
may first retry one alternate account on that exact body; a selector-qualified
route is fixed and relays immediately). disabledModels hides the row but is not a
runtime routing denial.

Fixture updates follow from the reversal: suites that used this slug as a stand-in
for an UNKNOWN observation-only native move to gpt-future-unlisted, and the
management and Claude discovery surfaces now report the global bare identity.
@coderabbitai

coderabbitai Bot commented Aug 16, 2026

Copy link
Copy Markdown
Contributor

Important

Review skipped

Auto reviews are disabled on base/target branches other than the default branch.

🗂️ Base branches to auto review (2)
  • ^dev$
  • ^preview$

Please check the settings in the CodeRabbit UI or the .coderabbit.yaml file in this repository. To trigger a single review, invoke the @coderabbitai review command.

⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: ASSERTIVE

Plan: Pro Plus

Run ID: be535abf-8574-4cc8-8820-85d38b70f797

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • 🔍 Trigger review

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@github-actions

Copy link
Copy Markdown
Contributor

Deterministic PR hygiene checks passed.

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 926ca6cdda

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

export const NATIVE_OPENAI_MODELS = [
"gpt-5.5", "gpt-5.4", "gpt-5.4-mini", "gpt-5.3-codex-spark",
"gpt-5.6-sol", "gpt-5.6-terra", "gpt-5.6-luna",
NATIVE_DAYBREAK_BLUE_MODEL,

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P1 Badge Update the Daybreak model documentation

Adding this slug to the global native set directly contradicts docs-site/src/content/docs/guides/codex-app-models.md:26-27 and :42-46, which still state that Daybreak is observation-only, never creates a bare row, and requires an explicit customModels entry. Users will therefore configure an unnecessary duplicate route and misunderstand the entitlement-gated 400 behavior; update the English page and affected translations to document the globally seeded native row and its entitlement limitation.

AGENTS.md reference: src/AGENTS.md:L28-L28

Useful? React with 👍 / 👎.

lidge-jun added a commit that referenced this pull request Aug 16, 2026
Four layers on origin/dev, each its own PR whose base is the layer below:
#1812 (docs, base dev) -> #1813 (roster) -> #1814 (daybreak) -> #1815 (five-cap).

DEV-STACK-03 requires each layer to build and pass its own tests at its own tip,
so every layer was checked out separately on ssh lidge and given a full run:

  L1 docs     bba4b96  tsc 0  12575 pass / 0 fail
  L2 roster   df83829  tsc 0  12575 pass / 0 fail
  L3 daybreak 926ca6c  tsc 0  12576 pass / 0 fail
  L4 five-cap 9a75124  tsc 0  12576 pass / 0 fail

The +1 at L3 is the new test proving the global Daybreak row exists without an
observation.

The original C1 commit mixed the roster and Daybreak changes, so the split was done
per file. Diffing the L4 tip against the previously verified branch shows the only
difference is the two new documents, which proves no code was lost or altered while
re-slicing.

Also records an unintended observation: one push carried a main -> main
fast-forward. It was a pre-existing maintenance commit by another author already in
the local main, not this work, but it changed remote state so it is logged.
Subsequent pushes used explicit refs/heads/<branch>:refs/heads/<branch>.
@lidge-jun
lidge-jun changed the base branch from codex/compat-v2-roster to dev August 16, 2026 05:42
@lidge-jun
lidge-jun merged commit aa585e7 into dev Aug 16, 2026
26 checks passed
ntdatt812 pushed a commit to ntdatt812/opencodex that referenced this pull request Aug 16, 2026
All four layers merged bottom-up into dev:

  lidge-jun#1812 docs     05:42:04Z  ead6327
  lidge-jun#1813 roster   05:42:32Z  e516912
  lidge-jun#1814 daybreak 05:42:52Z  aa585e7
  lidge-jun#1815 five-cap 05:43:12Z  09bf1f1

Each upper PR was retargeted to dev only after the layer below it landed, so the
stack order was never violated.

The dev ruleset requires one approving review plus code-owner review, and the PR
author is the code owner, so self-approval is impossible. Merges used the admin
bypass the ruleset already defines (bypass_actors: RepositoryRole 5, bypass_mode
pull_request) via gh pr merge --admin. No new bypass was created. Before merging,
all four PRs were MERGEABLE with zero failing or pending checks; lidge-jun#1812's BLOCKED
state was REVIEW_REQUIRED, not a CI failure.

Post-merge verification on ssh lidge against origin/dev:

  bun x tsc --noEmit                      -> exit 0
  OCX_TEST_NO_QUEUE=1 bun scripts/test.ts -> 12576 pass / 0 fail

The landed code was read back from dev directly: isEligibleV2SubagentEntry returns
entry.multi_agent_version !== "disabled", NATIVE_DAYBREAK_BLUE_MODEL is in the
allowlist, the devlog unit has 19 documents, and structure/03 carries the five-cap
section. All four layer tips are ancestors of origin/dev.

G1b, G2, G12 and G14 remain open as C2/C3.
@lidge-jun
lidge-jun deleted the codex/compat-v2-daybreak branch August 17, 2026 10:52
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

enhancement New feature or request

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant