Skip to content

[WRONG BRANCH] release: promote dev to preview for v2.40.0-preview.20260902 - #3260

Merged
lidge-jun merged 180 commits into
previewfrom
codex/promote-preview-24000902
Sep 2, 2026
Merged

[WRONG BRANCH] release: promote dev to preview for v2.40.0-preview.20260902#3260
lidge-jun merged 180 commits into
previewfrom
codex/promote-preview-24000902

Conversation

@lidge-jun

Copy link
Copy Markdown
Owner

Summary

Verification

  • Windows workflow_dispatch on the stack tip: shards 1/4, 2/4, 3/4 SUCCESS on four consecutive runs (33597649234, 33601508392, 33605723635, 33610501053); Linux ×4, macOS, keyring ×3, npm-global ×3 green on each and on the dev push run 33592329682.
  • Regression audit main..dev: four parallel read-only reviewers in devlog/_plan/260902_bug_label_drawdown/071_regaudit_landing.md (no regression found); Windows audit and repair in devlog/_plan/260902_windows_ci_release/.
  • User-authorized admin merge; the release dispatch is gated by release.yml's own push-event CI check on the promotion SHA.

Checklist

lidge-jun and others added 30 commits September 1, 2026 12:21
* docs(devlog): plan the v2.39.0 release train

* docs(devlog): record the five-lane v2.39.0 regression audit

* docs(devlog): close the v2.39.0 release train with the shipped outcome

* docs(devlog): name the server-auth flake follow-up

* docs(devlog): record the executed preview promotion

* docs(devlog): record the executed main promotion

* docs(devlog): record the executed publish
…3114)

* docs(devlog): record the 2026-08-31 non-priority-70 bug triage round

* docs(devlog): record the #3070 fix and the final CI state

* docs(devlog): record why #1527 was left open rather than half-fixed

* docs(devlog): record #3021 moving from unsolvable to fixed
The ordinary field-mask PATCH resolved the destination without the
allowBenchmarkAddresses opt-in that POST and the re-enable path already
use for the canonical built-in OpenAI forward provider. Under Clash/Mihomo
fake-IP DNS (chatgpt.com → 198.18.0.0/15) the same canonical provider that
was created successfully could never be patched: every context-overlay
PATCH was rejected with a benchmark-address destination error.

Pass the same exception on PATCH, computed the same way (name === "openai"
&& isCanonicalOpenAiForwardProvider(next)). The exception stays scoped to
the exact canonical transport seed: loopback, RFC1918, metadata, and mixed
dangerous DNS answers still fail closed, and non-canonical or OpenAI-like
custom providers gain nothing.

(cherry picked from commit f463e12)

Co-authored-by: Flowershangfromthebranches <152056395+Flowershangfromthebranches@users.noreply.github.com>
…er paths (rebase of #3104) (#3134)

* fix(service): give a Windows cold start room to bind, without loosening zero budget

Reimplements #3039 (author @ntdatt812), whose diagnosis and production logic
are both right.

confirmServiceServing had a fixed 20s deadline and returned as soon as the
clock passed it. A Windows cold start does NTFS ACL hardening and previous-
session journal recovery before the listener exists, so #3009 recorded a
service that bound a few seconds late and then stayed healthy -- reported as a
terminal failure with exit 1. The caller's fallback is to start a second proxy
against a port that is about to be taken, which is worse than waiting.

Windows now gets 45s, every other platform keeps 20s, and the loop knocks once
more after a short grace before calling it dead.

Two changes to #3039 as submitted:

- It relaxed `expect(probes).toBe(1)` to `toBeGreaterThanOrEqual(1)` in the
  zero-budget test. That assertion is what stops a future change from sleeping
  when the caller asked not to wait, and "at least one" passes against exactly
  the version it is meant to forbid. The `waited` guard already preserves the
  contract, so the original assertion is restored and the comment says why.
- Its Windows-budget test asserted only `toBeGreaterThan(linux)`, which accepts
  21s. The reported service bound past 20s, so the number is the contract: the
  test now pins 45_000 absolutely.

Mutation-checked, both restored afterwards:

  remove the `waited` guard -> 181 pass / 1 fail, the zero-budget test
  remove the grace probe     -> 181 pass / 1 fail, the #3009 test

Closes #3009.

* fix(service): forgive only what the code page mangled in a scheduler path

Reimplements #3067 (author @ntdatt812). The diagnosis is right and the
relocation is right: schtasks converts its XML through the console code page
before the bytes exist, so runFile reading as a buffer cannot help. A profile
named outside that page comes back as C:\Users\???\... and the exact
comparison rejected a registration this process had just created correctly,
so `ocx service install` rolled it back (#3064).

The remedy needed narrowing. #3067 compiles every unrepresentable run to
`[^\\/]*`, which forbids a path separator but allows arbitrary ASCII. A
segment that is ENTIRELY non-ASCII then has no anchors left, so

  C:\Users\<CJK>\.opencodex\service-launcher.vbs

matches

  C:\Users\Admin\.opencodex\service-launcher.vbs

and this process would adopt, repair, or delete another account's task. The
same hole applies to <UserId>, where MACHINE\<CJK> would match MACHINE\Admin.
Its tests use "Người", whose surviving Ng and i letters hide the case.

Here an unrepresentable run may match only a run of substitution characters --
'?' per character, U+FFFD, or nothing -- and every ASCII segment, including
every separator, is matched literally. A foreign account's path fails because
"admin" is not a run of substitutions.

Mutation-checked: widening the class back to `[^\\/]*` gives 186 pass /
1 fail, exactly "rejects another account's path that is merely the same shape".

Closes #3064.

* fix(service): bind scheduler recovery to exact SID

* fix(service): fail closed on ambiguous scheduler ownership

* test(service): lock scheduler ownership guards

* test(service): scope scheduler verification fixtures

* test(service): exercise scheduler ownership oracles
…l mid-fixture (#3139)

* docs(devlog): plan merge train round 3

Roadmap for landing the green PRs, retiring the superseded ones, and rebasing the rest, frozen at dev=132b557ad.

Includes the round-1 audit synthesis: three blockers folded (fork PRs are carried by cherry-pick rather than force-pushed, because enforce-pr-target.yml applies the readiness checklist to authors without push permission; #3039's closure withdrawn because #3104 prints the configured budget where #3039 printed the elapsed wait; the src/service.ts overlap is 330470e, not 0ef04e6) and two rebutted with evidence.

* docs(devlog): record wp1 — #3114 landed as abcda8e

* docs(devlog): record the wp2 security review for #3122

* docs(devlog): record wp3 — #3134 landed, #3128 flake premise corrected

* docs(devlog): record wp5 — #3077 closed, #3109/#3112 rebased

* docs(devlog): locate the websocket refresh flake, and correct the #3128 premise

* docs(devlog): prove the flake mechanism and correct its direction

* docs(devlog): mark the superseded flake explanation in the wp5 record

* test(auth): install the fake clock and fetch stub before startServer

startServer returns synchronously but arms an async pool-quota prime that outlives its return (src/server/index.ts:2054-2064). That prime calls getValidCodexToken, which can rotate the very credential these assertions read, and fetches a real host unless the stub is up.

Both fixtures installed Date.now and globalThis.fetch AFTER startServer, leaving a window two dynamic import() resolutions wide where the prime ran against the real clock and real fetch. On a warm local module cache it resolved before the fixture finished; on a loaded CI runner it did not, and seenAuth[0] was already the rotated token.

Measured rather than assumed: OPENCODEX_DEBUG_QUOTA=1 prints refreshed=1 on every run of both the fixed and unfixed trees, so the prime always fires. The fix does not suppress it -- it makes it run inside the fixture's controlled world.

The thread-affinity test at :2131 had the identical shape and is fixed too.
…soning_details contract (#3132)

* fix(minimax): align split-reasoning wire schema with the official reasoning_details contract

MiniMax M-series with reasoning_split returns thinking as a structured
reasoning_details array whose stream deltas repeat each segment's full
text-so-far, and the interleaved-thinking guide requires that array back
verbatim on the next turn. The adapter dropped reasoning_details entirely
and replayed a reasoning_content string, so streamed thinking never
surfaced and tool-use continuations lost the reasoning chain.

Add a reasoningDetailsModels registry knob (wired through derive/router
like reasoningSplitModels), prefix-diff cumulative reasoning_details
stream deltas with an incremental fallback, read the array as a
non-stream fallback, and serialize preserved reasoning as a single
reasoning.text segment for listed models. Both minimax and minimax-cn
opt in.

Evidence: platform.minimax.io/docs/guides/text-m3-function-call and
/docs/api-reference/text-openai-api (verified 2026-09-01).

Co-authored-by: Cursor <cursoragent@cursor.com>

* fix(minimax): gate reasoning_details parsing on the routed model

A nonempty reasoningDetailsModels list was enabling MiniMax snapshot
parsing for every openai-chat model on the provider. Carry the last
requested model into both parser paths and match with modelInList.

Also update the MiniMax #950 replay assertion: preserved reasoning now
serializes as reasoning_details, which is what made shard 4/4 red.

---------

Co-authored-by: Cursor <cursoragent@cursor.com>
Nine sites across three suites stood in for an exited process with a
hardcoded pid:

    const deadPid = process.pid === 4242 ? 4243 : 4242;

The code under test asks the kernel whether that owner is still alive, so
the pid is only dead until an unrelated process happens to hold it. Then
production answers correctly, the test reads that as a miss, and the
failure looks like a defect in the feature rather than in the fixture.

That is not hypothetical. On the macOS host where this was found, pid
4242 was `liveactivitiesd`, and five tests failed together on a clean
`dev` checkout: `periodic reclaim frees abandoned temps without any
continuation access`, both `doctor reclaim wiring (end to end)` cases,
and both `status reports stale process records end to end` cases. The
three files together went 186 pass / 5 fail before this change and 191
pass / 0 fail after it, with pid 4242 still held by `liveactivitiesd`
across both runs.

The probe already existed. `tests/responses-state.test.ts` did it inline
for one test, with a comment naming this exact hazard on a shared CI
runner, while four sites in the same file and four more in
`tests/cli-status-json.test.ts` and `tests/doctor.test.ts` kept the
assumption. This lifts that probe into `tests/helpers/dead-pid.ts` and
uses it at every site, so the knowledge lives in one place rather than in
a comment beside one of nine copies.

The helper throws rather than returning a sentinel: the inline version
needed `expect(deadPid).toBeGreaterThan(0)` at its call site, and a throw
gives every caller that guarantee without repeating the assertion. ESRCH
is the only accepted answer — a successful `kill(pid, 0)` means alive and
EPERM means alive but owned by somebody else.

Other `4242` literals in the suite are injected fixture data read through
mocked accessors, never probed against the kernel, and are left alone.

Verified on macOS: bun run typecheck clean, bun run privacy:scan passed,
bun run test 16514 pass / 0 fail across 998 files.


(cherry picked from commit d3c3e3a)

Co-authored-by: SEUNGWOO LEE <69357689+lifrary@users.noreply.github.com>
Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com>
Five landings, six closures, two rebases, and the flake that held the last PR.

Records what the round is evidence of rather than only what it did: three explanations were written for the websocket flake and two were wrong, both plausible enough to justify the same fix -- caught by activation evidence, not review. The '#3128 fixed that flake' citation was repeated across three PRs and taught reviewers to dismiss a red that was real.
* test(auth): seed the pool quota and credential after the clock is pinned

The websocket refresh test still failed on loaded CI runners after #3139, on
both macOS and Linux, and dev's own HEAD fails it too — so it was not something
any open branch introduced.

Two writes stamp real time when they run before the clock is pinned:
updateAccountQuota sets updatedAt: Date.now(), and saveCodexAccountCredential
sets replacedAt. Everything after the pin reads the pinned 2027 value, so the
gap is about 136 days against a 6-hour freshness window
(QUOTA_DISK_MAX_AGE_MS, src/codex/quota.ts:491). The seeded state reads as
stale no matter how fast the runner is, the startup pool-quota prime refreshes
the credential before the first turn is served, and seenAuth[0] is already the
new token — which is why the failure diff was always the first element.

#3139 pinned the clock and the fetch stub before startServer, closing the
window for the prime's own reads. It could not close a window for timestamps
written before either was in place. Both seeds now run after the pin.

Timing-dependent by nature: the mismatch does not reproduce locally either
before or after, so the evidence is the mechanism rather than a local
red-to-green. A 136-day gap against a 6-hour window is arithmetic, not a race.
Twelve consecutive local runs are clean.

* test(auth): restore the affinity test's quota seed after the pin

The previous commit removed `updateAccountQuota("pool-a", 10, 5)` from the
`expired thread affinity` test along with the websocket test's own seeds. That
seed belongs to the affinity test, and its comment kept pointing at a call that
was no longer there.

Restore it on the correct side of the clock pin. Note what the comment now
claims and what it does not: seeding after the pin is what keeps the startup
pool-quota prime quiet, because `primeCodexPoolQuotas` treats a missing entry
as stale exactly like an expired one (src/codex/auth-api.ts:1334). It is not a
race fix for `expect(upstreamRequests).toBe(3)` — `redirectCanonicalCodexTo`
only rewrites `/backend-api/codex`, while the prime's WHAM call goes to
`/backend-api/wham/usage` and never reaches the counted upstream.

Verified with `bun test tests/server-auth.test.ts`: 91 pass, 0 fail.

---------

Co-authored-by: jun <jun@lidge.dev>
…t, add identity allowlist, name session consumers and /v1/catalog admission
… file, protocol compat floor, contradictions closed
…ract

Rebased onto current dev and repaired the contract defects the review raised
on the previous head.

D1 - remove insecure-http-pairing. A reusable pairing grant crossing
non-loopback plaintext HTTP is captured verbatim by a passive observer, and
the config opt-in gating it could not bound the risk it recorded. The
"bootstrap over HTTP then upgrade" variant is rejected too: the plaintext hop
has no trust anchor, so an on-path attacker substitutes its own valid HTTPS
origin and the upgrade authenticates the attacker. remoteGui.allowInsecureHttp
is deleted and a persisted true is dropped with a warning.

D2 - /v1/catalog emits no ETag and never answers 304. The response varies by
key type and key id, so a shared strong validator lets a store revalidate one
identity's representation for another; private, no-cache does not prevent
storage, and the revalidation is what crosses identities. /api/catalog keeps
its validator because it is loopback-scoped and identity-invariant.

D3 - forward the browser Origin verbatim on every allowed session-authenticated
request, not only POST /opencodex-session. The session is origin-bound and
mutations enforce Origin/CSRF, so relayed writes were losing the evidence the
hub requires. Synthesizing an Origin is refused: the relay would attest to
something it never observed and the hub would validate the relay against itself.

D4 - compare candidate identities before probing during rotation recovery.
A crash after pendingOperation is persisted but before the token is replaced
leaves both files holding the old key, where both probe successfully; the old
"both accepted implies commit" rule read that as a completed rotation and lost
the new key permanently. Identical candidates now mean pre-replacement: never
commit, resume instead. Unconfirmed abort or restore retains evidence rather
than installing a guessed generation.

D5 - relayed session, bootstrap, and management responses are rewritten to
no-store with ETag and Last-Modified stripped. Preserving an upstream validator
reintroduced D2 one layer up, at exactly the position where an intermediary
cache is most likely to sit.

Also corrects the 000_research framing of the remote gui-session limitation.
It is a deliberate fail-closed restriction already visible in shipped code and
documented publicly, not an unreported weakness, so calling it a defect invited
the wrong reading of what belongs in a public devlog.
The previous commit closed D1 where the review pointed (040) but left the
enabling contract alive in three other documents: 010 still listed
insecure-http pairing as evidence rung 4, 050 still defined the client
--allow-insecure-http option plus an allowInsecureHttp field on the exchange
call, and 070 still named remoteGui.allowInsecureHttp as a Phase-2 key. A
contract that removes a path in one document and specifies it in three others
is not a fix; an implementer reading 050 would have built the option.

050's "both sides must opt in" rationale is also removed rather than reworded.
Requiring two opt-ins makes the choice deliberate, but deliberateness is not
the control that matters here: the grant is still readable by anything on the
path and the session it mints is still reusable. The client now refuses before
transmission instead of warning after it.

010 additionally records why the "don't over-harden" valve does not need this
path: tailscale serve terminates HTTPS for exactly that deployment, so rung 3
already covers the private-tailnet sole-operator case the valve was for.

P3-A3 is rewritten from "succeeds with explicit warning" to refusal in every
combination, including a tree still carrying the legacy CLI argument or a
persisted config key.
An adversarial review of dfae1da found four contract defects still live and
one bookkeeping error. All are repaired here.

D2 was fixed in Phase 1 but not in the phases that consume it. 030 still
described ETag/If-None-Match as "shared" between the two catalog routes, and
050/080 still specified a client that persists an ETag, sends If-None-Match,
and handles 304 — against a route that no longer emits a validator. An
implementer following Phase 3 would have rebuilt exactly what Phase 1 deleted.
The client now fetches unconditionally, and an unsolicited 304 is a protocol
error rather than a cache hit, since the client never issued a conditional
request.

D3 overcorrected. Saying Origin must never be omitted contradicted the Phase-2
predicate, which deliberately allows Origin-absent safe GET/HEAD reads. The
two rules are now separated: forwarding is verbatim whenever the browser sends
a value, while requiring Origin stays the hub predicate's decision. The relay
refuses only where it would otherwise have to invent a value. The owner test
row now names each mutation method plus both Origin-absent branches, instead
of testing only the pairing exchange.

D4 stated the new identity-comparison rule while leaving the old
"both accepted implies commit" rule intact three paragraphs above and in the
activation matrix, so the document contradicted itself on the exact point the
review raised. The obsolete text is replaced rather than supplemented. The
recovery outcome is also made executable: the new secret is returned once and
startup/status holds no management authority, so recovery cannot "resume"
anything — it stops with evidence intact, and the next rotate, which does carry
transient authority, confirms the stranded rotationId's abort before starting
over.

Bookkeeping: the earlier pass introduced a duplicate P2-A11 and appended three
P6 rows after the verification section instead of into the activation matrix.
The plaintext-bootstrap row is renumbered P2-A21 and the rotation rows are
folded into the matrix, replacing the stale uncertain-commit row.
lidge-jun and others added 17 commits September 2, 2026 10:58
…d native chain (#3240)

#3239 synthesized a DEFAULT_SUBAGENT_MODELS chain for an unreadable encrypted
spawn when the operator configured none. That chain fires in the first
fallback pass, before recoverEncryptedAgentTask, so with agentTaskRecovery
enabled the spawn was rerouted to native gpt-5.5 and recovery was skipped
along with its caller-auth, proxy-secret and token-validity gates.
tests/agent-task-recovery-security.test.ts went 13/13 -> 2/13 on dev.

Synthesize the chain only when recovery is not enabled. An operator who
enabled recovery chose to decrypt and stay routed; a configured chain keeps
its precedence either way.

Regression: recovery enabled + no chain + nativeFallbackOnly -> no fallback
(red without the guard); the 13 recovery security cases are green again.

Co-authored-by: jun <jun@lidge.dev>
Codexless's app-server sends originator=codexless_agent, which the encrypted
V2 recovery admission allowlist rejected, so its child tasks failed as
unreadable_encrypted_agent_task. Admit that originator. The issuer, client
id, token, account and proxy-secret checks after admission are unchanged.

Regression: the recovery request preserves originator=codexless_agent.

Source from #3229.

Co-authored-by: jun <jun@lidge.dev>
Co-authored-by: iamnomankazi <60215267+iamnomankazi@users.noreply.github.com>
…awns (#3239, #3240) (#3242)

* Revert "fix(subagents): let encrypted-task recovery run before the synthesized native chain (#3240)"

This reverts commit 7f00d0e.

* Revert "fix(subagents): auto-fallback encrypted V2 spawns to native Codex without a configured chain (#3239)"

This reverts commit 744d12d.

---------

Co-authored-by: jun <jun@lidge.dev>
…bel every row (#3222)

* docs(cursor): diff-level roadmap for unified Cursor model identity

One published row per Cursor base with thinking/fast/1M as dimensions, a Codex
Fast toggle that reaches Cursor's fast variant, and a global switch that exposes
-fast identities to clients without a toggle.

Docs-only work-phase (wp1) of a four-phase unit. Contains 000_plan (work-phase
map + measured current state + RUN verifier table), 001_current_state (why the
picker never reads CURSOR_CAPABILITIES, where Codex Fast dies for Cursor),
002_audit_round1 (10 blockers from two review lanes, all folded), and diff-level
decade docs 010/020/030 for the three implementation phases.

Notable audit findings folded before any code: provider-level supportsServiceTier
short-circuits before the per-model map; tierLogForRunTurn runs BEFORE runTurn so
telemetry must recompute the variant rather than rebuild a non-pure request;
usage/log.ts and usage/cost.ts read wireKind by string comparison and are
invisible to tsc.

Refs devlog/_plan/260902_cursor_unified_identity

* feat(cursor): derive the picker seed from the capability table and label every row

CURSOR_STATIC_MODELS was a hand-maintained list that drifted from
CURSOR_CAPABILITIES: cursorUmbrellaRows() existed but only tests called it, so
collapsing a variant changed routing without changing what Codex listed. The
seed now derives from that function plus two declared lists for ids with no
capability record, so the two can no longer disagree.

Cursor rows also showed raw slugs (cursor/kimi-k3) because routedDisplayName
passes a routed slug through unchanged and nothing carried Cursor's labels into
the provider config. ProviderRegistryEntry had no modelDisplayNames field at all;
the consumer (configuredModelDisplayName) already existed. Wire it through
providerConfigSeed and enrichProviderFromRegistry, the latter per-model so an
existing install picks up labels without losing an operator rename.

The row set is unchanged (54 ids, none added or dropped) - this is a refactor of
where rows come from, plus labels and three corrected windows (gemini 1048576,
gpt-5.5-extra 200000) where the capability table was approximating the seed.

Fixes the frozen row-count assertion that went red when claude-fable-5-1 was
seeded in 5fc7d07: it now derives the expected count instead of hard-coding it.

Refs devlog/_plan/260902_cursor_unified_identity/010_wp2_umbrella_seed.md

* docs(cursor): park wp2/wp4 residuals in a numbered doc

The roadmap named residuals in prose with no home (audit B14): effort ladders on
a listed fast id, claude-4-sonnet-1m staying a real row, fastMode carrying two
meanings, and the five pre-existing test failures that reproduce on a clean
stash of this branch.

Each records what would change the decision, so a later cycle does not rediscover
them as new findings.

Refs devlog/_plan/260902_cursor_unified_identity/040_residuals.md

* docs(cursor): record the measured -fast round-trip that proves audit B11

The reviewer's claim that a bare -fast suffix picks the wrong dimension was not
theoretical. Measured: claude-opus-5-fast resolves to claude-opus-5-high-fast
(clamped, and in the quarantined regular family) while the Codex toggle would
send claude-opus-5-thinking-max-fast. The mirror case is just as wrong -grok-4.6-thinking-fast degrades to a bare grok-4.6 with no effort and no fast
marker, because grok has no thinkingFast spec.

Either fixed suffix is wrong for half the table, which is why cursorFastIdFor
composes from the base's defaultVariant.

---------

Co-authored-by: jun <jun@lidge.dev>
…els list (#3230)

* feat(server): advertise api_types and capabilities on the raw /v1/models list

Cursor's local-agent runtime (the Private Inference build) enables its
reasoning-effort control only when a model row carries api_types and,
optionally, a capabilities object. Emit both on every row of the OpenAI-shape
list: api_types is constant (chat_completions, responses, anthropic_messages;
membership is load-bearing for Cursor's wire selector and guarded by a unit
test), capabilities carries context_length, supports_vision and the
reasoning_effort ladder when the catalog knows them.

Plain OpenAI clients, Grok Build and the Codex catalog branch ignore the new
keys. The combo e2e assertions that compared whole row literals now match on
the combo-relevant shape while keeping is_combo presence explicit.

* fix(server): include output_modalities so Cursor keeps enriched rows

Cursor's local-agent runtime drops any api_types row whose capabilities
lack output_modalities containing "text", which silently disabled the
effort control on every row. Emit output_modalities: ["text"] and mirror
input_modalities when the catalog knows them. Verified live in Cursor
Private Inference 3.18.25: the picker shows Low/Medium/High/Extra High for
gpt-5.6-sol and a High turn arrives as reasoning.effort=high on /v1/responses.

* fix(server): report the effective context window, not the provider cap

contextWindow is already narrowed by providerContextCaps; contextCap is the
raw operator knob and is set on every row of a capped provider even when the
cap did not bite, so preferring it over-reported models whose real window
sits below the cap. Freeze the shared api_types constant and copy it per row.

* fix(server): omit context_length when it floors to zero

positiveInt accepted 0.5 and then floored it to 0, which would emit an
invalid zero context length instead of omitting the field (CodeRabbit).

* feat(server): advertise the native long-context tier for Cursor Max Mode

Cursor's local-agent runtime shows a Context selector (default vs long
window, long marked as costing more) when a model row carries a long-context
threshold below its context_length. It reads that threshold only from
pricing.overrides[].min_prompt_tokens; a cost.long_context object fails its
row schema. For native GPT-5.6 rows advertise the family's 272k default and
922k opt-in pair through nativeOpenAiContextTier; routed rows have no
separate tier and stay unchanged.

* fix(catalog): drop the native long-context tier under any window lever below it

A per-model window override or provider window below the long window must
remove the tier the same way a provider cap does; otherwise the row keeps
advertising 922k while the effective window is smaller (CodeRabbit).

---------

Co-authored-by: jun <jun@lidge.dev>
* docs: Cursor Private Inference connector guide

Explain why regular Cursor needs a public tunnel (its backend calls the
custom base URL), how Cursor's local-agent build reaches opencodex on
loopback instead, the per-OS environment mechanics for a GUI-launched app
on macOS, Windows and Linux, which effort ladders Cursor exposes per model
id, and how to verify. The guide states that opencodex does not distribute
that build and links nothing to download.

* docs(cursor): explain Max Mode as the Context selector and effort max as unreachable

* devlog: Cursor local models schema unit (research, audits, live evidence)

---------

Co-authored-by: jun <jun@lidge.dev>
…3225)

Codex's Fast toggle is OpenAI's service_tier field, and Cursor has no such
field - its fast product is a different model variant
(claude-opus-5-thinking-high-fast) or a {id:fast} request parameter for Grok.
So a service_tier on a Cursor route was silently dropped, and no Cursor row
could advertise the toggle at all: FAST_WIRE_ADAPTERS is a closed set that
Cursor was not in.

Add a cursor-variant FastWire kind, declare it on the Cursor registry entry, and
have the request builder consume the tier DECISION (not the raw caller field, so
fastMode=false still suppresses a caller's request). A thinking umbrella pick
upgrades to thinkingFast rather than the regular-fast sibling, which is a
different product with a shorter ladder whose regular family is quarantined for
claude-opus-5.

Only the five bases that actually declare a fast variant advertise the tier, so
there is no dead toggle. That required one more fix: forwardCallerTier ignored
the wire's foreignCallerTiers declaration, so an unclassified cursor-variant
route projected 'unknown' support - enough for Codex to offer a toggle on
kimi-k3, which has no fast variant at all.

Telemetry recomputes the variant from the same pure inputs the builder uses.
Rebuilding the request there would be wrong twice over: tierLogForRunTurn runs
before runTurn, and createCursorRequest mints conversation ids.

Also widens the usage/log.ts wireKind allowlist, which silently returns null -
dropping the whole tier row - for a kind it does not recognise.

Refs devlog/_plan/260902_cursor_unified_identity/020_wp3_codex_fast_toggle.md

Co-authored-by: jun <jun@lidge.dev>
…sion audit (#3218)

* docs(devlog): open the bug/PR closeout stack roadmap

* docs(devlog): fold the A-gate import-boundary finding into phase 5

* docs(devlog): record the #3163 and #3166 landings

* docs(devlog): record why #2986 does not land in this train

* docs(devlog): close out the bug/PR closeout stack

* docs(devlog): record the final green CI verdict on dev

* docs(devlog): open the bug-label drawdown roadmap with audit corrections

* docs(devlog): record the Batch A landings and first rebase carry

* docs(devlog): record the Batch B rebase carries

* docs(devlog): record why the rebase service earned its keep

* docs(devlog): record the Batch C rebases and the one real review finding

* docs(devlog): record the #2999 scope boundary that survived execution

* docs(devlog): record Batch D - every bug PR closed

* docs(devlog): record what the PR half of the campaign cost

* docs(devlog): replan the remaining issues to one per cycle

* docs(devlog): carry the i3141 evidence into the replan

* docs(devlog): diagnose i3141 - fix predates the reported version

* docs(devlog): retire the second bundle

* docs(devlog): record the i3141 re-triage action and outcome

* docs(devlog): diagnose i3152 log table jitter

* docs(devlog): i3152 - measurement disproved the layout diagnosis

* docs(devlog): diagnose i3136 slashed-id price lookup

* docs(devlog): diagnose i3150 citation marker passthrough

* docs(devlog): diagnose i3155 capacity plan allowlist

* docs(devlog): i1419 stays open pending crash frames

* docs(devlog): record the i1419 re-triage ask

* docs(devlog): diagnose i2999 publication overwrite race

* docs(devlog): record the i2999 outcome and remaining scope

* docs(devlog): diagnose i2813 as a client-side reserve gate

* docs(devlog): diagnose i1527 residuals as trace-blocked

* docs(devlog): correct i1527 envelope-cap wording (192 blobs, HTTP 400)

* docs(devlog): plan p3193 loopback alpha-search reimplementation

* docs(devlog): record p3193 landing (#3205 -> 53c09a2)

* docs(devlog): plan the main->dev regression audit

* docs(devlog): pin regaudit counts, add tests-only/security passes and the exact-head dispatch

* docs(devlog): record regaudit reviewer verdicts

* docs(devlog): record the exact-head dev CI verdict and Windows classification

* docs(devlog): record the main control run proving the Windows failures predate the range

* docs(devlog): record the pass-1 recount and the #3217 root cause

* docs(devlog): plan i3217 (Spark functions-namespace flattening)

* docs(devlog): record i3217 landing (#3224 -> d23eab4)

* docs(devlog): regaudit2 recount and disposition table

* docs(devlog): regaudit2 CI verdict on d23eab4 and the four PR arrivals

* docs(devlog): plan p3226 (scoped namespace scrub)

* docs(devlog): p3226 audit finding and carry plan

* docs(devlog): record p3226 landing (#3234 -> b732b0d)

* docs(devlog): plan p3227 (combo zero-output incomplete failover)

* docs(devlog): record p3227 landing

* docs(devlog): plan p3228 (encrypted V2 spawn native fallback)

* docs(devlog): record p3228 landing

* docs(devlog): plan p3229 (Codexless originator in task recovery)

* docs(devlog): record p3229 landing and the #3239 regression repair

* docs(devlog): r3239 regression repair record

* docs(devlog): r3239 audit note

* docs(devlog): record p3232 (merged by maintainer)

* docs(devlog): p3232 verification result

* docs(devlog): regaudit3 recount and landing table

* docs(devlog): record the #3239/#3240 revert and correct the #3228 disposition

* docs(devlog): rv3239 revert record

* docs(devlog): rv3239 audit note

* docs(devlog): regaudit3 second-dispatch verdict

* docs(devlog): regaudit3 recount refreshed (#1419 closed by maintainer; count 4)

* docs(devlog): regaudit3 final CI verdict and c-7

---------

Co-authored-by: jun <jun@lidge.dev>
#3233)

* feat(cursor): expose -fast identities to clients without a Fast toggle

Codex has a Fast toggle, so its rows stay umbrella rows and the toggle picks the
dimension. Claude Code and other OpenAI-compatible clients have none - they can
only pick a listed id - so with fastMode on they are offered the fast identity
directly.

The listed id is composed from the base's defaultVariant, not a bare -fast
suffix. Measured: claude-opus-5-fast parses back as the REGULAR-fast sibling and
resolves to claude-opus-5-high-fast, a shorter ladder in the quarantined regular
family, which is a different wire from what the Codex toggle sends. The mirror
case is equally wrong: grok has no thinkingFast spec, so grok-4.6-thinking-fast
would fall back to the regular spec and emit a bare grok-4.6 with no effort and
no fast marker. Either fixed suffix is wrong for half the table.

A test asserts the two surfaces converge: for every fast-capable base, the listed
id and the toggled umbrella id resolve to the same wire.

Request-time promotion needed no new code. fastMode already produces a set tier
decision on a fast-capable route with no caller service_tier, and every non-Codex
inbound path replays through handleResponses, so PR2's builder already promotes a
client whose saved config still names the umbrella id.

Desktop 3P aliases and dashboard row ids are deliberately untouched: the former
are hashed from the model name, the latter are enable/disable keys.

Refs devlog/_plan/260902_cursor_unified_identity/030_wp4_global_fast_switch.md

* perf(cursor): resolve the fast-id helper once per request, not per model

The listing branches called await import() inside the row mapper, so a request
with N models paid N dynamic imports on a hot path. Hoist it to one resolution
per request; when the switch is off the value is null and the adapter module is
never loaded at all.

Raised in review of #3233.

---------

Co-authored-by: jun <jun@lidge.dev>
)

The three Cursor identity PRs are on dev. Records each merged head and squash
commit with the ancestry proof, and notes that --admin cleared only the review
requirement - every merged head had zero failing checks.

Also closes R5: the agent-task-recovery red was dev's own, and dev's #3242
(revert of #3239/#3240) fixed it. That file is 19/19 on the landed dev, so the
follow-up fix PR this unit was going to open is unnecessary.

Co-authored-by: jun <jun@lidge.dev>
…ard (#3247)

* feat(integrations): read-only Cursor Private Inference status route

GET /api/native-integrations/cursor reports which Cursor builds are installed
(product.json nameLong tells Private Inference from regular Cursor), the two
values to paste into Cursor's gateway form, whether a Cursor client has called
/v1/models since the proxy started, and which active models will show
Cursor's Reasoning and Context controls. Nothing is written to Cursor: its
settings live in a database the running app rewrites and its key in the OS
keychain. The last-seen recorder keeps a validated User-Agent and a timestamp
in memory only.

* fix(cursor): filter the prediction table by catalog visibility

The status route built its Model/Reasoning/Context prediction from the
unfiltered catalog, so a model disabled in opencodex still appeared in the
dashboard while the raw /v1/models list Cursor reads omitted it. Apply the
same filterCatalogVisibleModels pass; regression test drives both endpoints
with a disabled model.

* docs(skill): the Cursor status route reports both builds, not only Private Inference

---------

Co-authored-by: jun <jun@lidge.dev>
* feat(gui): Cursor integration tab with detection, gateway values, connection state

Adds a read-only Cursor tab to the Integrations page after Grok Build. The page
reads GET /api/native-integrations/cursor and shows which Cursor builds are
installed (Private Inference vs regular), the two gateway values Cursor's own
form wants with Copy buttons, whether a Cursor client has called the proxy
since start, and the model/reasoning/context table Cursor will render.

The overview grid gains a Cursor card whose 'applied' state means a Cursor
request was seen within 24h, since the proxy never writes into Cursor. The
DSH tab label shrinks to 'DSH' to make room on the strip; the full product
name stays on the API Keys page.

Nine locales carry the new keys; locale-parity and integrations-surfaces
tests updated, plus a new cursor-integration-page suite (12 tests).

* fix(gui): translate the Cursor tab in six locales, link the guide from the warning, test interactions

Reviewer findings on 9ebb4fce9:
- de/fr/ja/ru/tr/zh carried the English strings verbatim; key-set parity
  cannot see that. All non-brand Cursor keys are now translated and
  locale-parity gains a guard scoped to integrations.cursor.* for every
  locale, with the brand/cognate exceptions listed explicitly.
- The regular-Cursor warning promised a guide but linked none; the guide
  anchor now sits inside the notice.
- Tests asserted presence only: Copy now proves clipboard.writeText and the
  label flip, the API Keys button proves the hash change, and the polling
  test proves subscriber membership before and after unmount.

* fix(gui): scope the Turkish 'Model' cognate exception to tr; natural Japanese for the reasoning ladder

* test(gui): count the Cursor row in the overview totals and allowlist its brand labels in fr

CI shard 2 and gates caught two files outside the focused set: the overview
row-count expectations (four native rows became five) and the French
accidental-English guard, which needs the same four Cursor brand keys the
zh-TW and per-locale guards already list.

---------

Co-authored-by: jun <jun@lidge.dev>
* docs(cursor): describe the dashboard Cursor tab and mark it as a read-only surface

Adds a 'From the dashboard' section to the Cursor Private Inference guide
covering the four cards (installed builds, gateway values including the
credential-mode branch, connection via /v1/models + Cursor/ UA, model table)
and rewrites the integrations guide paragraph that said Cursor had no tab.
The 'not switches' section grows to five surfaces in en/fr/tr/zh-tw.

* docs(cursor): match the dashboard section to the shipped route

Reviewer findings: regular Cursor shows path only; Base URL comes from the
runtime port record, not the dashboard's request port; the seen recorder
accepts exactly Cursor/<version>; the prediction table follows catalog
visibility (now also true of the route).

* devlog(cursor): 040 publish plan for the three-PR stack

* devlog(cursor): 040 — restack after each squash, security lane, resolved heads

* devlog(cursor): 040 — security verdict gates PR 1, bypass comment before each admin merge

---------

Co-authored-by: jun <jun@lidge.dev>
…test teardown (#3257)

* devlog(windows): CI failure inventory and repair roadmap (000-040)

* devlog(windows): audit fixes — test filename, win32 platform seam in shutdown test, exact line cites

* fix(windows): server.stop drains the config-dir ACL flight it started

hardenConfigDir() spawns icacls.exe as a fire-and-forget flight (e5d5886).
The child holds the config directory open until it exits, and Windows locks
are mandatory, so removing the directory right after a clean server.stop()
returned EPERM/EBUSY — which is what every Windows CI shard has hit since
2026-08-30 in the account-store, auth-api and live-server fixtures.

flushConfigDirHardening(dir) is now a production function scoped to one
directory; startServer captures its config dir before loadConfig and the
composite stop() awaits the flight after the listeners close. Regression test
drives stop() with a held flight and proves it stays pending until release
(driven red before the fix).

* test(account-store): per-test scratch home, both icacls runners stubbed, retrying teardown

The fixed repo-local .tmp-codex-accounts-test meant one EPERM teardown poisoned
every later case (49/49 errors in run 33590540220 were hooks). The sync-only
icacls stub also no longer covered hardenConfigDir(), which uses the async
runner since e5d5886.

* test(windows): retrying scratch-home teardown across the live-server suites; per-test homes for auth-api and oauth-status

Fourteen suites removed their scratch home with a bare rmSync right after
server.stop(). Even with stop() now draining the ACL flight, antivirus and
indexer handles on a fresh temp dir are real on the hosted image, so every
teardown goes through removeTreeWithRetry (EPERM/EBUSY/ENOTEMPTY, bounded).
codex-auth-api and oauth-status-privacy also move off fixed repo-local dirs
and stub both icacls runners, the same shape as codex-account-store.

* fix(windows): drain the ACL flight even when an earlier shutdown release rejects

Reviewer P2: the flush sat after backgroundLifecycle/native-main release in
one finalizer, so a rejected release skipped it and the EPERM/EBUSY window
came back on the failure path. The flush now runs in finally; the original
rejection still propagates. Regression test mocks a throwing native release
and proves stop() stays pending until the flight settles (driven red).

---------

Co-authored-by: jun <jun@lidge.dev>
…wn codemod (#3258)

* fix(windows): fsync token and spill files through a writable handle; bump test spawns a real path

Windows rejects fsync on a read-only fd with EPERM. service-secrets opened
'r' for every backup/replace/restore, so all three token-ownership cases and
the connected-key-rotation child failed on windows-latest; spill-store did the
same on its exclusive-copy fallback. Both now open 'r+' (asserted via an
openSync spy, driven red).

tests/bump-dev-version used new URL(...).pathname, which is '/D:/a/...' on
Windows, so bun could not load the CLI and every case exited 1 — including the
malformed-input case, which read that as a correct rejection. fileURLToPath +
process.execPath, stderr in the failure message, and the specific rejection
text asserted.

* test(responses-state): hermetic platform lanes; release the ACL gate in finally

Generic spill/admission cases assert the synchronous lane, so they pin the
platform to linux; a Windows host routed them through queued async publication
and they read a resident where a stub was expected (~45 cases). Windows-lane
cases now inject both principal resolvers alongside the platform: on the
hosted runner the real PowerShell lookup failed with EACLIDENTITY before the
case reached its own seams. That failure happened outside the try/finally in
'prices the job-owned superseded generation', so the held icacls promise was
never released and the next case waited for it until Bun's 60 s ceiling.

spill-store.harden() now consults windowsSecretAclApplies() on both lanes so
the platform seam reaches the sync harden too.

* test(windows): stub icacls in service.test, settle async spills in issue-702, size the first child wait

Dispatch 33595585136 (first run with the ACL lifecycle fix): windows 1/4 fell
from ~120 failures to 8 and the account-store/auth-api cascades are gone.
What remained: service.test.ts hands a synthetic SID to a REAL icacls on a
Windows host (EICACLS on every saveConfig) — both runners are now stubbed at
file scope; issue-702 unlinked a spill that Windows had not yet published —
it awaits the publication first; native-profile-manager's crash case waited a
private 5 s for the first child boot of the shard — it now waits inside its
own 15 s budget and reports the child's stderr on timeout.

* test(responses-state): gate only spill hardens; copy fallback follows the platform seam

Dispatch 33595585136 shard 2 left two failures in this file. The shutdown
budget case gated EVERY async icacls call, and on a real Windows host the
snapshot flush hardens responses-state.json through the same runner, so
flushResponseState() sat behind the gate until the 30 s ACL deadline and the
case hit Bun's 60 s ceiling. Gated runners now pass non-spill targets through.

canUseExclusiveCopyFallback keyed on process.platform, so a case pinned to the
POSIX lane on Windows turned an injected link failure into a successful copy
and asserted a tombstone that never came; it now uses the same seam as harden().

* test(responses-state): win32 admission variants; assert the propagated shutdown rejection

Reviewer P2: pinning the admission suite to the sync lane left the Windows
async branch (runPendingResponseSpill post-write ceiling, failure tombstone)
without a case. Two win32 variants now cover it after the queue settles; the
write-failure variant scopes the injected failure to the oversized candidate
because the queued candidate counts against the RAM cap while it waits.
P3: the rejected-release regression now asserts the original error message.

* devlog(windows): 011 — dispatch rounds, reviewer verdicts, fuck-powershell cases

* test(native-main-refresh): yield to the event loop while waiting for the abort listener

The wait spun on Promise.resolve(), which keeps the microtask queue non-empty
and never lets a subprocess exit callback run. On Windows the exclusive claim
can harden its lock file through an async icacls child before it reaches the
abort listener, so the spin never ends. Dispatch 33597649234 shard 4 sat in
this file for eight minutes until the job ceiling with zero failures logged.

* test(server-stop): replace the 60 ms pending oracle with an observed listener close

Reviewer P3: the shutdown-drain regression assumed all earlier stop() stages
finished within 60 ms. It now polls until the listener refuses connections,
so 'still pending' can only mean the held ACL flight.

* test(windows): yield in the remaining claim-cancellation waits; retrying teardown in oauth-manual-code and provider-quota

Dispatch 33601508392 shard 4 hung again in responses-native-main-refresh —
the two WebSocket string-abort cases spun on Promise.resolve() like the one
fixed in 2bf189d. Both now yield to the event loop. Two more bare rmSync
teardowns (oauth-manual-code fixed dir, provider-quota temp homes) go through
removeTreeWithRetry.

* test(windows): freeze the spill ACL clocks in the shutdown-fallback cases; let the write-lock holder outlast a slow contender boot

Now that harden() follows the platform seam, the synchronous fallback harden
really runs on every host, and its 80 ms reserve raced a loaded Linux shard's
wall clock (run 33603770447 test 3/4). The three fallback cases inject the
same frozen clock the budget case already used.

codex-write-lock's holder used the helper's default 3 s ceiling; a windows-
latest contender took longer than that to boot, so the hold expired first and
the contender read 'acquired'. The ceiling is now 20 s — the release marker
still ends the hold immediately.

* test(oauth-manual-code): per-test scratch home with both icacls runners stubbed

The manual-code login test persisted its credential through the real icacls
on windows-latest and settled as 'OAuth authentication failed' (run
33603770447 shard 4). Same shape as codex-account-store / codex-auth-api:
this file is about the PKCE flow, not ACLs.

* test(retained-root): size the child marker wait inside the test budget

A bun --eval child reaches its marker in 8-11 s on windows-latest; the 10 s
default wait lost the race on run 33605898170 shard 1 while the same case
passed at 10.4-10.6 s on earlier runs.

* test(windows): route every recursive scratch-tree removal through removeTreeWithRetry

Mechanical codemod (script kept in .tmp): 870 rmSync(recursive) teardown sites
across 381 test files now use the bounded EPERM/EBUSY/ENOTEMPTY retry. Each
Windows dispatch so far surfaced one or two more bare rmSync sites (oauth-
reauth-bind, responses-native-main-refresh, provider-quota, ...); this closes
the class instead of chasing it a shard at a time. 18 sites in 8 files skipped
on purpose: mixed file/dir collections, existing custom retry helpers, and the
ACL fixture whose shape covers single files. tsc green; test:changed 14165
pass / 2 lab-fabric cases that pass in isolation.

* test: fail the listener-close poll closed; per-call marker deadlines inside each test budget

Reviewer P2s: the shutdown-drain oracle fell through after 200 attempts without
asserting the listener was closed, so a still-open listener could pass as
'pending on the ACL flight'; it now asserts refused. retained-root's 16 s
default exceeded the 15 s budget of its first caller, so Bun's timeout, not the
helper, would report a slow child; every caller now passes an explicit
deadline that fits its own budget.

* test(windows): stub icacls in oauth-reauth-bind; widen the startup child port wait

Dispatch 33610501053 shard 4: oauth-reauth-bind has no server, so nothing
drained the OAuth store's ACL flight before teardown and the icacls child
outlived the retry window; both runners are stubbed and the flight flushed.
native-profile-startup's child needed 17 s to reach its port file on the
loaded shard; the wait is now 18 s inside 20 s+ budgets.

* test(oauth-public-surface): stub icacls and flush the ACL flight in a server-less OAuth store test

---------

Co-authored-by: jun <jun@lidge.dev>
@lidge-jun
lidge-jun requested a review from Ingwannu as a code owner September 2, 2026 09:36
@chatgpt-codex-connector

chatgpt-codex-connector Bot commented Sep 2, 2026

Copy link
Copy Markdown

Codex Review Summary

This comment shows the latest Codex review activity on this pull request.

Review Status Commit Review trigger
📝 Code Review Completed 2026-09-02T09:37:55.328620Z 84b48d6 PR opened
ℹ️ 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" or "@codex security review".

Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings.

@coderabbitai

coderabbitai Bot commented Sep 2, 2026

Copy link
Copy Markdown
Contributor

Important

Review skipped

Too many files!

This PR contains 967 files, which is 667 over the limit of 300.

To get a review, reduce the PR to 300 files or fewer by splitting it into smaller PRs or changing its base branch.

Usage-priced reviews support at most 300 files.

⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: ASSERTIVE

Plan: Team

Run ID: 999e02d7-14a9-4462-ac4a-7a15fa084ddc

📥 Commits

Reviewing files that changed from the base of the PR and between 75f3895 and 84b48d6.

⛔ Files ignored due to path filters (8)
  • devlog/_plan/260827_remote_hub/assets/gui-p4-dashboard.png is excluded by !**/*.png
  • devlog/_plan/260902_cursor_integrations_tab/assets/cursor-overview-card.png is excluded by !**/*.png
  • devlog/_plan/260902_cursor_integrations_tab/assets/cursor-tab-detected.png is excluded by !**/*.png
  • devlog/_plan/260902_cursor_local_models_schema/011_effort_control.png is excluded by !**/*.png
  • devlog/_plan/260902_cursor_local_models_schema/012_effort_ladder.png is excluded by !**/*.png
  • devlog/_plan/260902_cursor_local_models_schema/013_high_turn.png is excluded by !**/*.png
  • devlog/_plan/260902_cursor_local_models_schema/031_context_selector.png is excluded by !**/*.png
  • devlog/_plan/260902_cursor_local_models_schema/032_context_options.png is excluded by !**/*.png
📒 Files selected for processing (967)
  • .github/workflows/dev-version-bump.yml
  • .github/workflows/release.yml
  • README.md
  • devlog/_plan/260827_remote_hub/000_research.md
  • devlog/_plan/260827_remote_hub/001_interview.md
  • devlog/_plan/260827_remote_hub/002_audit_r1_synthesis.md
  • devlog/_plan/260827_remote_hub/003_audit_r2_synthesis.md
  • devlog/_plan/260827_remote_hub/010_design.md
  • devlog/_plan/260827_remote_hub/020_roadmap.md
  • devlog/_plan/260827_remote_hub/030_phase1_protocol_catalog.md
  • devlog/_plan/260827_remote_hub/040_phase2_remote_session.md
  • devlog/_plan/260827_remote_hub/050_phase3_connect.md
  • devlog/_plan/260827_remote_hub/060_phase4_two_plane.md
  • devlog/_plan/260827_remote_hub/070_phase5_deploy.md
  • devlog/_plan/260827_remote_hub/080_phase6_hardening.md
  • devlog/_plan/260827_remote_hub/090_dogfood_record.md
  • devlog/_plan/260831_bug_triage_nonprio70/000_roadmap.md
  • devlog/_plan/260831_bug_triage_nonprio70/001_scan_verdicts.md
  • devlog/_plan/260831_bug_triage_nonprio70/002_audit_round1_synthesis.md
  • devlog/_plan/260831_bug_triage_nonprio70/003_audit_round2_synthesis.md
  • devlog/_plan/260831_bug_triage_nonprio70/004_audit_round3_synthesis.md
  • devlog/_plan/260831_bug_triage_nonprio70/070_outcome.md
  • devlog/_plan/260901_merge_train_round3/000_plan.md
  • devlog/_plan/260901_merge_train_round3/002_audit_round1_synthesis.md
  • devlog/_plan/260901_merge_train_round3/010_wp1_3114_docs_devlog.md
  • devlog/_plan/260901_merge_train_round3/011_wp1_outcome.md
  • devlog/_plan/260901_merge_train_round3/020_wp2_3122_provider_patch_fakeip.md
  • devlog/_plan/260901_merge_train_round3/021_wp2_security_review.md
  • devlog/_plan/260901_merge_train_round3/030_wp3_3104_service_and_closeouts.md
  • devlog/_plan/260901_merge_train_round3/031_wp3_outcome.md
  • devlog/_plan/260901_merge_train_round3/040_wp4_3042_pid_probe.md
  • devlog/_plan/260901_merge_train_round3/050_wp5_close_3077_rebase_3109_3112.md
  • devlog/_plan/260901_merge_train_round3/051_wp5_outcome.md
  • devlog/_plan/260901_merge_train_round3/060_wp7_websocket_refresh_flake.md
  • devlog/_plan/260901_release_train_2390/000_plan.md
  • devlog/_plan/260901_release_train_2390/010_wp1_regression_audit.md
  • devlog/_plan/260901_release_train_2390/020_wp2_preview_promotion.md
  • devlog/_plan/260901_release_train_2390/030_wp3_main_promotion.md
  • devlog/_plan/260901_release_train_2390/040_wp4_publish.md
  • devlog/_plan/260901_release_train_2390/050_audit_verdicts.md
  • devlog/_plan/260901_release_train_2390/070_outcome.md
  • devlog/_plan/260901_release_train_2390/080_post_release_repairs.md
  • devlog/_plan/260901_remote_hub_restack/000_research.md
  • devlog/_plan/260901_remote_hub_restack/002_audit_r1_synthesis.md
  • devlog/_plan/260901_remote_hub_restack/003_review_thread_ledger.md
  • devlog/_plan/260901_remote_hub_restack/010_wp1_design_contract.md
  • devlog/_plan/260901_remote_hub_restack/011_wp1_outcome.md
  • devlog/_plan/260901_remote_hub_restack/020_wp2_p1_protocol_catalog.md
  • devlog/_plan/260901_remote_hub_restack/021_wp2_outcome.md
  • devlog/_plan/260901_remote_hub_restack/030_wp3_p2_remote_session.md
  • devlog/_plan/260901_remote_hub_restack/031_wp3_outcome.md
  • devlog/_plan/260901_remote_hub_restack/040_wp4_p3_connect.md
  • devlog/_plan/260901_remote_hub_restack/041_wp4_outcome.md
  • devlog/_plan/260901_remote_hub_restack/050_wp5_p4_two_plane.md
  • devlog/_plan/260901_remote_hub_restack/051_wp5_outcome.md
  • devlog/_plan/260901_remote_hub_restack/060_wp6_p5_deploy.md
  • devlog/_plan/260901_remote_hub_restack/061_wp6_outcome.md
  • devlog/_plan/260901_remote_hub_restack/070_wp7_p6_hardening.md
  • devlog/_plan/260901_remote_hub_restack/071_wp7_outcome.md
  • devlog/_plan/260901_remote_hub_restack/072_stack_state.md
  • devlog/_plan/260901_remote_hub_restack/080_wp8_stack_integrity.md
  • devlog/_plan/260901_remote_hub_restack/081_wp8_ci_repairs.md
  • devlog/_plan/260901_remote_hub_restack/090_outcome.md
  • devlog/_plan/260901_remote_hub_restack/100_polish_audit.md
  • devlog/_plan/260901_remote_hub_restack/101_polish_outcome.md
  • devlog/_plan/260901_remote_hub_restack/102_axis_ledger.md
  • devlog/_plan/260901_remote_hub_restack/110_merge_train_plan.md
  • devlog/_plan/260901_remote_hub_restack/111_wp1_3147_outcome.md
  • devlog/_plan/260901_remote_hub_restack/112_wp2_order_reversal.md
  • devlog/_plan/260901_remote_hub_restack/120_merge_train_outcome.md
  • devlog/_plan/260901_remote_hub_restack/121_open_threads_after_merge.md
  • devlog/_plan/260901_remote_hub_restack/122_post_merge_verification.md
  • devlog/_plan/260901_remote_hub_restack/130_final_state.md
  • devlog/_plan/260901_remote_hub_restack/131_worktree_state.md
  • devlog/_plan/260901_remote_hub_restack/140_objective_closeout.md
  • devlog/_plan/260901_remote_hub_restack/141_review_fix_verification.md
  • devlog/_plan/260901_remote_hub_restack/150_unit_closed.md
  • devlog/_plan/260902_admin_merge_3190/000_plan.md
  • devlog/_plan/260902_admin_merge_3190/002_audit_round1.md
  • devlog/_plan/260902_admin_merge_3190/010_wp1_anonymize_home_paths.md
  • devlog/_plan/260902_admin_merge_3190/011_wp1_stale_check.md
  • devlog/_plan/260902_admin_merge_3190/020_wp2_rebase_merge_3190.md
  • devlog/_plan/260902_admin_merge_3190/021_wp2_cherry_pick.md
  • devlog/_plan/260902_admin_merge_3190/030_wp3_inventory_refresh.md
  • devlog/_plan/260902_admin_merge_3190/031_wp3_live_inventory.md
  • devlog/_plan/260902_bug_label_drawdown/000_plan.md
  • devlog/_plan/260902_bug_label_drawdown/010_phase1.md
  • devlog/_plan/260902_bug_label_drawdown/011_bd1_landing.md
  • devlog/_plan/260902_bug_label_drawdown/020_phase2.md
  • devlog/_plan/260902_bug_label_drawdown/021_bd2_landing.md
  • devlog/_plan/260902_bug_label_drawdown/030_phase3.md
  • devlog/_plan/260902_bug_label_drawdown/031_bd3_landing.md
  • devlog/_plan/260902_bug_label_drawdown/040_phase4.md
  • devlog/_plan/260902_bug_label_drawdown/041_bd4_landing.md
  • devlog/_plan/260902_bug_label_drawdown/050_bd5_replan.md
  • devlog/_plan/260902_bug_label_drawdown/050_phase5.md
  • devlog/_plan/260902_bug_label_drawdown/051_i3141.md
  • devlog/_plan/260902_bug_label_drawdown/052_i3152.md
  • devlog/_plan/260902_bug_label_drawdown/053_i3136.md
  • devlog/_plan/260902_bug_label_drawdown/054_i3150.md
  • devlog/_plan/260902_bug_label_drawdown/055_i3155.md
  • devlog/_plan/260902_bug_label_drawdown/056_i1419.md
  • devlog/_plan/260902_bug_label_drawdown/057_i2999.md
  • devlog/_plan/260902_bug_label_drawdown/058_i2813.md
  • devlog/_plan/260902_bug_label_drawdown/059_i1527.md
  • devlog/_plan/260902_bug_label_drawdown/060_phase6.md
  • devlog/_plan/260902_bug_label_drawdown/061_p3193.md
  • devlog/_plan/260902_bug_label_drawdown/062_p3193_landing.md
  • devlog/_plan/260902_bug_label_drawdown/063_i3217.md
  • devlog/_plan/260902_bug_label_drawdown/064_i3217_landing.md
  • devlog/_plan/260902_bug_label_drawdown/070_regaudit.md
  • devlog/_plan/260902_bug_label_drawdown/071_regaudit_landing.md
  • devlog/_plan/260902_bug_label_drawdown/072_regaudit2.md
  • devlog/_plan/260902_bug_label_drawdown/080_p3226.md
  • devlog/_plan/260902_bug_label_drawdown/081_p3226_landing.md
  • devlog/_plan/260902_bug_label_drawdown/082_p3227.md
  • devlog/_plan/260902_bug_label_drawdown/083_p3227_landing.md
  • devlog/_plan/260902_bug_label_drawdown/084_p3228.md
  • devlog/_plan/260902_bug_label_drawdown/085_p3228_landing.md
  • devlog/_plan/260902_bug_label_drawdown/086_p3229.md
  • devlog/_plan/260902_bug_label_drawdown/087_p3229_landing.md
  • devlog/_plan/260902_bug_label_drawdown/088_r3239.md
  • devlog/_plan/260902_bug_label_drawdown/089_p3232.md
  • devlog/_plan/260902_bug_label_drawdown/090_regaudit3.md
  • devlog/_plan/260902_bug_label_drawdown/091_rv3239.md
  • devlog/_plan/260902_bug_pr_closeout_stack/000_plan.md
  • devlog/_plan/260902_bug_pr_closeout_stack/010_phase1.md
  • devlog/_plan/260902_bug_pr_closeout_stack/011_wp1_landing.md
  • devlog/_plan/260902_bug_pr_closeout_stack/020_phase2.md
  • devlog/_plan/260902_bug_pr_closeout_stack/021_wp2_landing.md
  • devlog/_plan/260902_bug_pr_closeout_stack/030_phase3.md
  • devlog/_plan/260902_bug_pr_closeout_stack/031_wp3_disposition.md
  • devlog/_plan/260902_bug_pr_closeout_stack/040_phase4.md
  • devlog/_plan/260902_bug_pr_closeout_stack/050_phase5.md
  • devlog/_plan/260902_bug_pr_closeout_stack/060_phase6.md
  • devlog/_plan/260902_bug_pr_closeout_stack/070_closeout.md
  • devlog/_plan/260902_cursor_integrations_tab/000_research.md
  • devlog/_plan/260902_cursor_integrations_tab/005_audit_round1.md
  • devlog/_plan/260902_cursor_integrations_tab/006_roadmap_lock.md
  • devlog/_plan/260902_cursor_integrations_tab/007_audit_round1_reviewer.md
  • devlog/_plan/260902_cursor_integrations_tab/010_layer1_server_status.md
  • devlog/_plan/260902_cursor_integrations_tab/020_layer2_gui_tab.md
  • devlog/_plan/260902_cursor_integrations_tab/030_layer3_docs.md
  • devlog/_plan/260902_cursor_integrations_tab/040_publish_stack.md
  • devlog/_plan/260902_cursor_local_models_schema/000_research.md
  • devlog/_plan/260902_cursor_local_models_schema/005_audit_round1.md
  • devlog/_plan/260902_cursor_local_models_schema/010_layer1_models_capabilities.md
  • devlog/_plan/260902_cursor_local_models_schema/015_layer1_live_evidence.md
  • devlog/_plan/260902_cursor_local_models_schema/016_layer1_check.md
  • devlog/_plan/260902_cursor_local_models_schema/017_impl_review.md
  • devlog/_plan/260902_cursor_local_models_schema/020_layer2_docs_guide.md
  • devlog/_plan/260902_cursor_local_models_schema/021_pr_rollup.json
  • devlog/_plan/260902_cursor_local_models_schema/022_stack_closeout.md
  • devlog/_plan/260902_cursor_local_models_schema/030_max_mode_context_selector.md
  • devlog/_plan/260902_cursor_unified_identity/000_plan.md
  • devlog/_plan/260902_cursor_unified_identity/001_current_state.md
  • devlog/_plan/260902_cursor_unified_identity/002_audit_round1.md
  • devlog/_plan/260902_cursor_unified_identity/010_wp2_umbrella_seed.md
  • devlog/_plan/260902_cursor_unified_identity/020_wp3_codex_fast_toggle.md
  • devlog/_plan/260902_cursor_unified_identity/030_wp4_global_fast_switch.md
  • devlog/_plan/260902_cursor_unified_identity/040_residuals.md
  • devlog/_plan/260902_multiplatform_qa_and_gui/000_host_inventory.md
  • devlog/_plan/260902_multiplatform_qa_and_gui/001_qa_evidence_layout.md
  • devlog/_plan/260902_multiplatform_qa_and_gui/002_qa_verdicts.md
  • devlog/_plan/260902_multiplatform_qa_and_gui/010_wp2_gui_design.md
  • devlog/_plan/260902_multiplatform_qa_and_gui/011_wp2_outcome.md
  • devlog/_plan/260902_multiplatform_qa_and_gui/020_wp3_wp5_deploy_qa.md
  • devlog/_plan/260902_multiplatform_qa_and_gui/021_wp3_macmini_outcome.md
  • devlog/_plan/260902_multiplatform_qa_and_gui/022_wp4_linux_macbook_outcome.md
  • devlog/_plan/260902_multiplatform_qa_and_gui/023_wp5_windows_outcome.md
  • devlog/_plan/260902_multiplatform_qa_and_gui/090_outcome.md
  • devlog/_plan/260902_multiplatform_qa_and_gui/091_wp6_merge_outcome.md
  • devlog/_plan/260902_multiplatform_qa_and_gui/092_objective_closeout.md
  • devlog/_plan/260902_nonbug_adoption_backlog/000_scope.md
  • devlog/_plan/260902_nonbug_adoption_backlog/010_wp1_adaptive_reasoning_effort.md
  • devlog/_plan/260902_nonbug_adoption_backlog/011_wp1_audit_r1_synthesis.md
  • devlog/_plan/260902_nonbug_adoption_backlog/020_wp2_outbound_body_guard.md
  • devlog/_plan/260902_nonbug_adoption_backlog/021_wp2_audit_r1_synthesis.md
  • devlog/_plan/260902_nonbug_adoption_backlog/030_wp3_compaction_provider.md
  • devlog/_plan/260902_nonbug_adoption_backlog/031_wp3_audit_r1_synthesis.md
  • devlog/_plan/260902_nonbug_adoption_backlog/040_wp4_retain_models.md
  • devlog/_plan/260902_nonbug_adoption_backlog/041_wp4_audit_r1_synthesis.md
  • devlog/_plan/260902_nonbug_adoption_backlog/050_wp5_xai_imagine_carry.md
  • devlog/_plan/260902_nonbug_adoption_backlog/051_wp5_audit_r1_synthesis.md
  • devlog/_plan/260902_nonbug_adoption_backlog/060_wp6_authless_desktop.md
  • devlog/_plan/260902_nonbug_adoption_backlog/061_wp6_audit_r1_synthesis.md
  • devlog/_plan/260902_nonbug_adoption_backlog/070_wp7_shim_free_token.md
  • devlog/_plan/260902_nonbug_adoption_backlog/071_wp7_audit_r1_synthesis.md
  • devlog/_plan/260902_nonbug_adoption_backlog/080_wp8_windows_proxy_auto.md
  • devlog/_plan/260902_nonbug_adoption_backlog/081_wp8_audit_r1_synthesis.md
  • devlog/_plan/260902_nonbug_adoption_backlog/090_wp9_keychain_keys.md
  • devlog/_plan/260902_nonbug_adoption_backlog/091_wp9_audit_r1_synthesis.md
  • devlog/_plan/260902_nonbug_adoption_backlog/100_wp10_display_names_carry.md
  • devlog/_plan/260902_nonbug_adoption_backlog/101_wp10_audit_r1_synthesis.md
  • devlog/_plan/260902_nonbug_adoption_backlog/110_wp11_antigravity_account_quota.md
  • devlog/_plan/260902_nonbug_adoption_backlog/111_wp11_audit_r1_synthesis.md
  • devlog/_plan/260902_nonbug_adoption_backlog/120_wp12_oauth_pool_capability.md
  • devlog/_plan/260902_nonbug_adoption_backlog/121_wp12_audit_r1_synthesis.md
  • devlog/_plan/260902_nonbug_adoption_backlog/130_wp13_reset_credit_auto_redeem.md
  • devlog/_plan/260902_nonbug_adoption_backlog/131_wp13_audit_r1_synthesis.md
  • devlog/_plan/260902_nonbug_adoption_backlog/140_wp14_upstream_ws_carry.md
  • devlog/_plan/260902_nonbug_adoption_backlog/141_wp14_audit_r1_synthesis.md
  • devlog/_plan/260902_nonbug_adoption_backlog/150_wp15_plaintext_v2_disposition.md
  • devlog/_plan/260902_nonbug_adoption_backlog/151_wp15_audit_r1_synthesis.md
  • devlog/_plan/260902_windows_ci_release/000_inventory.md
  • devlog/_plan/260902_windows_ci_release/010_async_acl_lifecycle.md
  • devlog/_plan/260902_windows_ci_release/011_wp2_evidence.md
  • devlog/_plan/260902_windows_ci_release/020_fsync_spill_bump.md
  • devlog/_plan/260902_windows_ci_release/030_regression_audit.md
  • devlog/_plan/260902_windows_ci_release/040_promote_and_bump.md
  • docs-site/astro.config.mjs
  • docs-site/src/content/docs/fr/guides/codex-app-models.md
  • docs-site/src/content/docs/fr/guides/integrations.md
  • docs-site/src/content/docs/fr/guides/remote-hub.md
  • docs-site/src/content/docs/fr/guides/web-dashboard.md
  • docs-site/src/content/docs/fr/reference/cli/lifecycle.md
  • docs-site/src/content/docs/fr/reference/configuration/providers.md
  • docs-site/src/content/docs/fr/reference/configuration/server.md
  • docs-site/src/content/docs/fr/reference/management-api.md
  • docs-site/src/content/docs/guides/codex-app-models.md
  • docs-site/src/content/docs/guides/codex-integration.md
  • docs-site/src/content/docs/guides/combos.md
  • docs-site/src/content/docs/guides/cursor-private-inference.md
  • docs-site/src/content/docs/guides/image-bridge.md
  • docs-site/src/content/docs/guides/integrations.md
  • docs-site/src/content/docs/guides/remote-hub.md
  • docs-site/src/content/docs/guides/web-dashboard.md
  • docs-site/src/content/docs/ja/guides/codex-app-models.md
  • docs-site/src/content/docs/ja/guides/codex-integration.md
  • docs-site/src/content/docs/ja/guides/image-bridge.md
  • docs-site/src/content/docs/ja/guides/remote-hub.md
  • docs-site/src/content/docs/ja/guides/web-dashboard.md
  • docs-site/src/content/docs/ja/reference/cli/lifecycle.md
  • docs-site/src/content/docs/ja/reference/configuration/providers.md
  • docs-site/src/content/docs/ja/reference/configuration/server.md
  • docs-site/src/content/docs/ja/reference/management-api.md
  • docs-site/src/content/docs/ko/guides/codex-app-models.md
  • docs-site/src/content/docs/ko/guides/codex-integration.md
  • docs-site/src/content/docs/ko/guides/image-bridge.md
  • docs-site/src/content/docs/ko/guides/remote-hub.md
  • docs-site/src/content/docs/ko/guides/web-dashboard.md
  • docs-site/src/content/docs/ko/reference/cli/lifecycle.md
  • docs-site/src/content/docs/ko/reference/configuration/providers.md
  • docs-site/src/content/docs/ko/reference/configuration/server.md
  • docs-site/src/content/docs/ko/reference/management-api.md
  • docs-site/src/content/docs/reference/adapters.md
  • docs-site/src/content/docs/reference/architecture.md
  • docs-site/src/content/docs/reference/cli/lifecycle.md
  • docs-site/src/content/docs/reference/cli/providers-accounts.md
  • docs-site/src/content/docs/reference/configuration/providers.md
  • docs-site/src/content/docs/reference/configuration/routing.md
  • docs-site/src/content/docs/reference/configuration/server.md
  • docs-site/src/content/docs/reference/management-api.md
  • docs-site/src/content/docs/reference/proxy-formats.md
  • docs-site/src/content/docs/ru/guides/codex-app-models.md
  • docs-site/src/content/docs/ru/guides/codex-integration.md
  • docs-site/src/content/docs/ru/guides/image-bridge.md
  • docs-site/src/content/docs/ru/guides/remote-hub.md
  • docs-site/src/content/docs/ru/guides/web-dashboard.md
  • docs-site/src/content/docs/ru/reference/cli/lifecycle.md
  • docs-site/src/content/docs/ru/reference/configuration/providers.md
  • docs-site/src/content/docs/ru/reference/configuration/server.md
  • docs-site/src/content/docs/ru/reference/management-api.md
  • docs-site/src/content/docs/tr/guides/codex-app-models.md
  • docs-site/src/content/docs/tr/guides/integrations.md
  • docs-site/src/content/docs/tr/guides/remote-hub.md
  • docs-site/src/content/docs/tr/guides/web-dashboard.md
  • docs-site/src/content/docs/tr/reference/cli/lifecycle.md
  • docs-site/src/content/docs/tr/reference/configuration/providers.md
  • docs-site/src/content/docs/tr/reference/configuration/server.md
  • docs-site/src/content/docs/tr/reference/management-api.md
  • docs-site/src/content/docs/zh-cn/guides/codex-app-models.md
  • docs-site/src/content/docs/zh-cn/guides/codex-integration.md
  • docs-site/src/content/docs/zh-cn/guides/image-bridge.md
  • docs-site/src/content/docs/zh-cn/guides/remote-hub.md
  • docs-site/src/content/docs/zh-cn/guides/web-dashboard.md
  • docs-site/src/content/docs/zh-cn/reference/cli/lifecycle.md
  • docs-site/src/content/docs/zh-cn/reference/configuration/providers.md
  • docs-site/src/content/docs/zh-cn/reference/configuration/server.md
  • docs-site/src/content/docs/zh-cn/reference/management-api.md
  • docs-site/src/content/docs/zh-tw/guides/codex-app-models.md
  • docs-site/src/content/docs/zh-tw/guides/integrations.md
  • docs-site/src/content/docs/zh-tw/guides/remote-hub.md
  • docs-site/src/content/docs/zh-tw/guides/web-dashboard.md
  • docs-site/src/content/docs/zh-tw/reference/cli/lifecycle.md
  • docs-site/src/content/docs/zh-tw/reference/configuration/providers.md
  • docs-site/src/content/docs/zh-tw/reference/configuration/server.md
  • docs-site/src/content/docs/zh-tw/reference/management-api.md
  • docs/superpowers/plans/2026-08-26-discovered-model-display-names-core.md
  • docs/superpowers/specs/2026-08-26-discovered-model-display-names-design.md
  • gui/src/App.tsx
  • gui/src/api-targets.ts
  • gui/src/api.ts
  • gui/src/app-routing.ts
  • gui/src/combo-workspace-data.ts
  • gui/src/components/MemoryObservabilityCard.tsx
  • gui/src/components/apikeys-workspace/ApiKeysWorkspace.tsx
  • gui/src/components/combo-workspace-add-modal.tsx
  • gui/src/components/combo-workspace-controls.tsx
  • gui/src/components/combo-workspace-detail-panel.tsx
  • gui/src/components/integration-marks.ts
  • gui/src/components/provider-workspace/ProviderCapacityQuota.tsx
  • gui/src/components/storage-workspace/StorageWorkspace.tsx
  • gui/src/connect-pairing-transport.ts
  • gui/src/connect-pairing.ts
  • gui/src/i18n/de.ts
  • gui/src/i18n/en.ts
  • gui/src/i18n/fr.ts
  • gui/src/i18n/ja.ts
  • gui/src/i18n/ko.ts
  • gui/src/i18n/ru.ts
  • gui/src/i18n/tr.ts
  • gui/src/i18n/zh-TW.ts
  • gui/src/i18n/zh.ts
  • gui/src/pages/ApiKeys.tsx
  • gui/src/pages/Integrations.tsx
  • gui/src/pages/Startup.tsx
  • gui/src/pages/Storage.tsx
  • gui/src/pages/Usage.tsx
  • gui/src/pages/api-keys-utils.ts
  • gui/src/pages/dashboard-core-poll.ts
  • gui/src/pages/integrations/CursorIntegrationPage.tsx
  • gui/src/pages/integrations/IntegrationsOverview.tsx
  • gui/src/pages/integrations/cursor-api.ts
  • gui/src/pages/integrations/integration-tabs.ts
  • gui/src/pages/integrations/overview-clients.ts
  • gui/src/stop-proxy.ts
  • gui/src/styles-integrations.css
  • gui/src/styles-usage-workspace.css
  • gui/src/styles.css
  • gui/tests/api-auth-deadline.test.ts
  • gui/tests/api-auth-memory.test.ts
  • gui/tests/api-targets.test.ts
  • gui/tests/apikeys-actions.test.tsx
  • gui/tests/apikeys-layout.test.ts
  • gui/tests/app-sidebar-actions.test.ts
  • gui/tests/app-stop.test.ts
  • gui/tests/claude-toggle-race.test.tsx
  • gui/tests/claudecode-layout.test.ts
  • gui/tests/codex-stale-banner.test.ts
  • gui/tests/connect-pairing.test.ts
  • gui/tests/cursor-integration-page.test.tsx
  • gui/tests/dashboard-contracts.test.ts
  • gui/tests/fr-localization.test.ts
  • gui/tests/integrations-card-overflow.test.ts
  • gui/tests/integrations-overview-rows.test.ts
  • gui/tests/integrations-routing.test.ts
  • gui/tests/integrations-surfaces.test.tsx
  • gui/tests/locale-parity.test.ts
  • gui/tests/memory-observability-card.test.tsx
  • gui/tests/mobile-topbar-layout.test.ts
  • gui/tests/provider-capacity-shell.test.tsx
  • gui/tests/sidebar-codex-set.test.ts
  • gui/tests/usage-layout.test.ts
  • package.json
  • skills/ocx/SKILL.md
  • skills/ocx/references/01_management_surface.md
  • skills/ocx/references/05_remote_hub.md
  • src/adapters/cursor.ts
  • src/adapters/cursor/catalog.ts
  • src/adapters/cursor/discovery.ts
  • src/adapters/cursor/effort-map.ts
  • src/adapters/cursor/request-builder.ts
  • src/adapters/openai-chat.ts
  • src/adapters/openai-responses.ts
  • src/bridge.ts
  • src/claude/auth-mode.ts
  • src/claude/gateway-cache.ts
  • src/claude/model-info.ts
  • src/cli/access.ts
  • src/cli/account-extended.ts
  • src/cli/capabilities.ts
  • src/cli/claude-agent-startup-sync.ts
  • src/cli/claude.ts
  • src/cli/connect.ts
  • src/cli/dispatch.ts
  • src/cli/gui-pair-client.ts
  • src/cli/gui.ts
  • src/cli/help.ts
  • src/cli/index.ts
  • src/cli/models-runtime-subcommands.ts
  • src/cli/models-runtime.ts
  • src/cli/models.ts
  • src/cli/opencode.ts
  • src/cli/provider-runtime.ts
  • src/cli/registry.ts
  • src/cli/runtime-api.ts
  • src/cli/status.ts
  • src/cli/system-command.ts
  • src/client/connect.ts
  • src/client/hub-client.ts
  • src/client/hub-relay.ts
  • src/client/machine-api.ts
  • src/client/machine-auth.ts
  • src/client/machine-listener.ts
  • src/client/runtime.ts
  • src/client/state.ts
  • src/clients/config-export.ts
  • src/codex/auth-api.ts
  • src/codex/auth-context.ts
  • src/codex/catalog.ts
  • src/codex/catalog/aggregation.ts
  • src/codex/catalog/metadata.ts
  • src/codex/catalog/provider-fetch.ts
  • src/codex/desired-state.ts
  • src/codex/inject.ts
  • src/codex/journal.ts
  • src/codex/main-account.ts
  • src/codex/native-main-claim.ts
  • src/codex/native-residue.ts
  • src/codex/reset-credit-auto-redeem.ts
  • src/combos/request.ts
  • src/combos/types.ts
  • src/config.ts
  • src/config/paths.ts
  • src/config/provider-validation.ts
  • src/images/artifacts.ts
  • src/images/fulfill.ts
  • src/images/index.ts
  • src/images/plan.ts
  • src/images/synthetic-tool.ts
  • src/images/xai-client.ts
  • src/integrations/cursor-detect.ts
  • src/integrations/cursor-seen.ts
  • src/lib/errors.ts
  • src/lib/gui-pair-capability.ts
  • src/lib/lab-live-route-production.ts
  • src/lib/process-control.ts
  • src/lib/service-secrets.ts
  • src/lib/windows-system-proxy.ts
  • src/oauth/index.ts
  • src/oauth/pool-settings-capability.ts
  • src/providers/api-keys.ts
  • src/providers/codex-capacity.ts
  • src/providers/derive.ts
  • src/providers/fastwire.ts
  • src/providers/key-store.ts
  • src/providers/model-rename-migration.ts
  • src/providers/openai-sidecar.ts
  • src/providers/quota.ts
  • src/providers/registry.ts
  • src/reasoning-effort.ts
  • src/remote/protocol.ts
  • src/responses/citation-markers.ts
  • src/responses/parser.ts
  • src/responses/spill-store.ts
  • src/router.ts
  • src/server/auth-cors.ts
  • src/server/gui-session.ts
  • src/server/gui-static.ts
  • src/server/images.ts
  • src/server/index.ts
  • src/server/management-api.ts
  • src/server/management-auth.ts
  • src/server/management/agent-settings-routes.ts
  • src/server/management/api-key-rotation.ts
  • src/server/management/combo-routes.ts
  • src/server/management/config-routes.ts
  • src/server/management/context.ts
  • src/server/management/cursor-integration-routes.ts
  • src/server/management/logs-usage-routes.ts
  • src/server/management/model-routes.ts
  • src/server/management/model-rows.ts
  • src/server/management/oauth-account-routes.ts
  • src/server/management/provider-routes.ts
  • src/server/management/route-registry.ts
  • src/server/management/session-routes.ts
  • src/server/management/system-routes.ts
  • src/server/models-capabilities.ts
  • src/server/ports.ts
  • src/server/proxy-liveness.ts
  • src/server/request-log.ts
  • src/server/responses-self-named-namespace-scrub.ts
  • src/server/responses/agent-task-recovery.ts
  • src/server/responses/codex-auth-error.ts
  • src/server/responses/collaboration.ts
  • src/server/responses/combo-stream-preflight.ts
  • src/server/responses/compact.ts
  • src/server/responses/context-overflow.ts
  • src/server/responses/core.ts
  • src/server/responses/fetch-helpers.ts
  • src/server/responses/outbound-body-guard.ts
  • src/server/responses/ws-upstream.ts
  • src/server/system-env.ts
  • src/service.ts
  • src/types.ts
  • src/types/config.ts
  • src/types/provider.ts
  • src/types/request.ts
  • src/update/job.ts
  • src/usage/cost.ts
  • src/usage/expected-prices.ts
  • src/usage/log.ts
  • src/usage/summary.ts
  • structure/01_runtime.md
  • structure/02_config-and-codex-home.md
  • structure/03_catalog-and-subagents.md
  • structure/04_transports-and-sidecars.md
  • structure/05_gui-and-management-api.md
  • structure/06_docs-and-release.md
  • structure/08_openai-provider-tiers.md
  • structure/09_client-integrations.md
  • tests/account-import.test.ts
  • tests/account-pool-management-api.test.ts
  • tests/active-registry-admission.test.ts
  • tests/adapter-event-oauth-failover.test.ts
  • tests/agent-task-recovery-combo.test.ts
  • tests/agent-task-recovery-security.test.ts
  • tests/alibaba-region-backup.test.ts
  • tests/alibaba-region-migration.test.ts
  • tests/anthropic-account-pool.test.ts
  • tests/anthropic-hardening.test.ts
  • tests/anthropic-image-retry-e2e.test.ts
  • tests/api-catalog-route.test.ts
  • tests/api-codex-log-guard-compact.test.ts
  • tests/api-codex-log-guard-protection.test.ts
  • tests/api-codex-log-guard.test.ts
  • tests/api-debug.test.ts
  • tests/api-key-attribution.test.ts
  • tests/api-keys-routes.test.ts
  • tests/api-storage-cleanup.test.ts
  • tests/api-storage.test.ts
  • tests/api-usage.test.ts
  • tests/aside-client.test.ts
  • tests/assert-mergeable-review.test.ts
  • tests/azure-adapter.test.ts
  • tests/bearer-admission-routed-provider.test.ts
  • tests/bridge.test.ts
  • tests/build-release-changelog.test.ts
  • tests/bump-dev-version.test.ts
  • tests/bun-runtime.test.ts
  • tests/catalog-oauth-observation.test.ts
  • tests/catalog-retain-models.test.ts
  • tests/chat-completions-endpoint.test.ts
  • tests/citation-markers.test.ts
  • tests/claude-529-mapping.test.ts
  • tests/claude-agent-startup-sync.test.ts
  • tests/claude-agents-inject.test.ts
  • tests/claude-auth-mode.test.ts
  • tests/claude-cli.test.ts
  • tests/claude-desktop-1m.test.ts
  • tests/claude-desktop-cli.test.ts
  • tests/claude-desktop-config-path.test.ts
  • tests/claude-desktop-native-context.test.ts
  • tests/claude-dotenv-provenance-transport.test.ts
  • tests/claude-gateway-cache.test.ts
  • tests/claude-management-api.test.ts
  • tests/claude-messages-endpoint.test.ts
  • tests/claude-models-discovery.test.ts
  • tests/claude-native-passthrough.test.ts
  • tests/claude-shell-hook.test.ts
  • tests/claude-system-env-auto.test.ts
  • tests/cli-account-pool-verbs.test.ts
  • tests/cli-account.test.ts
  • tests/cli-capabilities.test.ts
  • tests/cli-config-command.test.ts
  • tests/cli-dispatch.test.ts
  • tests/cli-export-command.test.ts
  • tests/cli-headless-parity.test.ts
  • tests/cli-help.test.ts
  • tests/cli-management-auth.test.ts
  • tests/cli-models-reasoning.test.ts
  • tests/cli-models-runtime-dispatch.test.ts
  • tests/cli-models.test.ts
  • tests/cli-native-profile.test.ts
  • tests/cli-provider.test.ts
  • tests/cli-ready-subprocess.test.ts
  • tests/cli-ready.test.ts
  • tests/cli-registry.test.ts
  • tests/cli-restart-health.test.ts
  • tests/cli-restore-back.test.ts
  • tests/cli-start-journal-order.test.ts
  • tests/cli-status-json.test.ts
  • tests/cli-status-oauth-health.test.ts
  • tests/client-config-export-new-clients.test.ts
  • tests/client-config-export.test.ts
  • tests/client-config-new-clients.test.ts
  • tests/client-connect.test.ts
  • tests/client-export-modality-enum.test.ts
  • tests/client-hub-relay.test.ts
  • tests/client-machine-listener.test.ts
  • tests/codex-account-delete-atomicity.test.ts
  • tests/codex-account-store.test.ts
  • tests/codex-admission-primitives.test.ts
  • tests/codex-admission.test.ts
  • tests/codex-auth-api.test.ts
  • tests/codex-auth-collision.test.ts
  • tests/codex-auth-context.test.ts
  • tests/codex-catalog-admission.test.ts
  • tests/codex-catalog-restore.test.ts
  • tests/codex-catalog-sync-hardening.test.ts
  • tests/codex-catalog-write-serialization.test.ts
  • tests/codex-catalog-writer.test.ts
  • tests/codex-catalog.test.ts
  • tests/codex-cli-install-provenance.test.ts
  • tests/codex-cli-update-zero-effect.test.ts
  • tests/codex-composed-acceptance.test.ts
  • tests/codex-config-generation.test.ts
  • tests/codex-convergence-account-selectors.test.ts
  • tests/codex-convergence-contract.test.ts
  • tests/codex-cooldown-recovery.test.ts
  • tests/codex-coordinator-doctor.test.ts
  • tests/codex-desired-state.test.ts
  • tests/codex-envkey-admission-substitution.test.ts
  • tests/codex-features-cache.test.ts
  • tests/codex-filesystem-evidence.test.ts
  • tests/codex-history-job.test.ts
  • tests/codex-history-lock.test.ts
  • tests/codex-history-worker-boundary.test.ts
  • tests/codex-history-worker.test.ts
  • tests/codex-history-writer.test.ts
  • tests/codex-inject-integration.test.ts
  • tests/codex-inject-write-lock.test.ts
  • tests/codex-inject.test.ts
  • tests/codex-integration-record.test.ts
  • tests/codex-journal.test.ts
  • tests/codex-log-guard-coderabbit.test.ts
  • tests/codex-log-guard-inspect.test.ts
  • tests/codex-log-guard-lock.test.ts
  • tests/codex-log-guard-maintenance-coderabbit.test.ts
  • tests/codex-log-guard-maintenance.test.ts
  • tests/codex-log-guard-protection.test.ts
  • tests/codex-log-guard-status-zero-write.test.ts
  • tests/codex-main-account-refresh.test.ts
  • tests/codex-main-rotation.test.ts
  • tests/codex-model-entitlements.test.ts
  • tests/codex-models-cache-invalidate.test.ts
  • tests/codex-native-residue.test.ts
  • tests/codex-plan.test.ts
  • tests/codex-plugins-doctor.test.ts
  • tests/codex-pool-rotation.test.ts
  • tests/codex-prompt-adopt.test.ts
  • tests/codex-prompt-base-variants.test.ts
  • tests/codex-prompt-journal.test.ts
  • tests/codex-prompt-layers-read.test.ts
  • tests/codex-prompt-layers-write.test.ts
  • tests/codex-prompt-lock.test.ts
  • tests/codex-prompt-route.test.ts
  • tests/codex-prompt-text-probe.test.ts
  • tests/codex-quota-prime.test.ts
  • tests/codex-quota-rejection.test.ts
  • tests/codex-refresh.test.ts
  • tests/codex-reset-credit-auto-redeem.test.ts
  • tests/codex-restore-app-rewrite.test.ts
  • tests/codex-retained-root-serialization.test.ts
  • tests/codex-routing.test.ts
  • tests/codex-service-manager-probe-hardening.test.ts
  • tests/codex-service-manager-probe.test.ts
  • tests/codex-shim-autorestore.test.ts
  • tests/codex-shim-readiness.test.ts
  • tests/codex-shim.test.ts
  • tests/codex-spark-visibility.test.ts
  • tests/codex-sqlite-home.test.ts
  • tests/codex-sync-api.test.ts
  • tests/codex-transition-state-adoption.test.ts
  • tests/codex-transition-state-first-use-regression.test.ts
  • tests/codex-transition-state.test.ts
  • tests/codex-user-identity.test.ts
  • tests/codex-write-lock.test.ts
  • tests/combo-management-api.test.ts
  • tests/combo-stream-preflight.test.ts
  • tests/combo-workspace-data.test.ts
  • tests/combos.test.ts
  • tests/command-code-quota.test.ts
  • tests/config-load-degrade.test.ts
  • tests/config-mutation-lock.test.ts
  • tests/config-ownership-uninstall.test.ts
  • tests/config-user-edits.test.ts
  • tests/config.test.ts
  • tests/continuation-dedup.test.ts
  • tests/cost-cap-unknown-evidence.test.ts
  • tests/cost-scoring.test.ts
  • tests/credential-redirect-guard.test.ts
  • tests/cursor-discovery.test.ts
  • tests/cursor-display-names.test.ts
  • tests/cursor-effort-suffix.test.ts
  • tests/cursor-fast-listing.test.ts
  • tests/cursor-fast-tier.test.ts
  • tests/cursor-integration-status.test.ts
  • tests/cursor-local-models-schema.test.ts
  • tests/cursor-mcp-stdio.test.ts
  • tests/cursor-umbrella-rows.test.ts
  • tests/data-plane-admission-identity.test.ts
  • tests/deepseek-reasoning-replay-gaps.test.ts
  • tests/desktop-3p-guard.test.ts
  • tests/desktop-3p.test.ts
  • tests/doctor-oauth.test.ts
  • tests/doctor.test.ts
  • tests/dsh-writer-lock.test.ts
  • tests/effort-policy.test.ts
  • tests/empty-completion-core.test.ts
  • tests/fastwire-policy.test.ts
  • tests/forward-admission-separation.test.ts
  • tests/gcp-adc.test.ts
  • tests/generic-oauth-failover.test.ts
  • tests/github-copilot-account-origin.test.ts
  • tests/google-antigravity-oauth.test.ts
  • tests/google-antigravity-replay.test.ts
  • tests/google-models-listing.test.ts
  • tests/google-signature-history-roundtrip.test.ts
  • tests/grok-attribution.test.ts
  • tests/grok-config-inject.test.ts
  • tests/grok-effort-inject.test.ts
  • tests/grok-lifecycle.test.ts
  • tests/grok-management-api.test.ts
  • tests/grok-models-effort-list.test.ts
  • tests/grok-orphan-adoption.test.ts
  • tests/grok-selection.test.ts
  • tests/grok-status.test.ts
  • tests/grok-sync.test.ts
  • tests/gui-management-session.test.ts
  • tests/gui-pair-capability.test.ts
  • tests/gui-pair-client.test.ts
  • tests/gui-static.test.ts
  • tests/health-scoring.test.ts
  • tests/helpers/dead-pid.ts
  • tests/helpers/responses-state-never-settling-acl-child.ts
  • tests/helpers/responses-state-shutdown-budget-child.ts
  • tests/helpers/storage-policy-api.ts
  • tests/identity-neutralize.test.ts
  • tests/images/download-cap-default.test.ts
  • tests/images/gemini-inline.test.ts
  • tests/images/synthetic-tool.test.ts
  • tests/images/xai-client.test.ts
  • tests/images/z-fulfill.test.ts
  • tests/init-backup-cleanup.test.ts
  • tests/init-eof.test.ts
  • tests/injection-model-api.test.ts
  • tests/install-scripts.test.ts
  • tests/integrations-invariants.test.ts
  • tests/integrations-journal.test.ts
  • tests/integrations-state.test.ts
  • tests/integrations-writer.test.ts
  • tests/issue-452-empty-503.test.ts
  • tests/issue-702-expired-replay-state.test.ts
  • tests/issue-914-transport-attribution.test.ts
  • tests/key-failover.test.ts
  • tests/key-login-live-update.test.ts
  • tests/kimi-oauth-identity.test.ts
  • tests/kiro-account-quota.test.ts
  • tests/kiro-adapter.test.ts
  • tests/kiro-builder-id-profile.test.ts
  • tests/kiro-images.test.ts
  • tests/kiro-oauth.test.ts
  • tests/kiro-pool-rank.test.ts
  • tests/kiro-review-regressions.test.ts
  • tests/kiro-stream.test.ts
  • tests/lab-automation-coderabbit-regressions.test.ts
  • tests/lab-automation-final-coderabbit-regressions.test.ts
  • tests/lab-automation-ingwannu-regressions.test.ts
  • tests/lab-automation-management-http.test.ts
  • tests/lab-automation-review-regressions.test.ts
  • tests/lab-automation.test.ts
  • tests/lab-community-evidence.test.ts
  • tests/lab-community-filename-contract.test.ts
  • tests/lab-community-mutation-lock.test.ts
  • tests/lab-community-publisher-continuity.test.ts
  • tests/lab-evidence-ledger.test.ts
  • tests/lab-evidence-sanitization.test.ts
  • tests/lab-fabric-task.test.ts
  • tests/lab-installation-salt-cache.test.ts
  • tests/lab-ledger-mutation-lock.test.ts
  • tests/lab-live-probe.test.ts
  • tests/lab-live-receipt-integrity.test.ts
  • tests/lab-live-review-regressions.test.ts
  • tests/lab-live-sandbox.test.ts
  • tests/lab-passive-production-evidence.test.ts
  • tests/lab-passive-production-surfaces.test.ts
  • tests/lab-paths-security.test.ts
  • tests/lab-post-merge-hardening.test.ts
  • tests/lab-private-file-consumer-recovery.test.ts
  • tests/lab-private-file-durability.test.ts
  • tests/lab-public-artifact-policy.test.ts
  • tests/lab-public-coderabbit-regressions.test.ts
  • tests/lab-public-core-contract.test.ts
  • tests/lab-public-deep-review-regressions.test.ts
  • tests/lab-public-evidence.test.ts
  • tests/lab-public-export-transaction.test.ts
  • tests/lab-public-file-safety.test.ts
  • tests/lab-public-final-review-regressions.test.ts
  • tests/lab-public-lifecycle-hardening.test.ts
  • tests/lab-public-provenance-recovery.test.ts
  • tests/lab-public-review-fixes.test.ts
  • tests/lab-public-security-regressions.test.ts
  • tests/lab-public-surfaces.test.ts
  • tests/lab-public-wire-contract.test.ts
  • tests/lab-read-surfaces.test.ts
  • tests/local-token-detect.test.ts
  • tests/loopback-listener-admission.test.ts
  • tests/loopback-listener-integration.test.ts
  • tests/management-api-logs-metrics.test.ts
  • tests/management-client-config-route.test.ts
  • tests/management-integration-routes.test.ts
  • tests/management-provider-validation.test.ts
  • tests/minimax-reasoning-split.test.ts
  • tests/model-display-names-management-api.test.ts
  • tests/model-rename-migration.test.ts
  • tests/model-visibility-management-api.test.ts
  • tests/native-claude-desktop-toggle.test.ts
  • tests/native-codex-toggle.test.ts
  • tests/native-grok-toggle.test.ts
  • tests/native-main-auth-temp.test.ts
  • tests/native-main-claim.test.ts
  • tests/native-model-toggle.test.ts
  • tests/native-profile-crash-boundaries.test.ts
  • tests/native-profile-drain-server.test.ts
  • tests/native-profile-manager.test.ts
  • tests/native-profile-processes.test.ts
  • tests/native-profile-route-security.test.ts
  • tests/native-profile-startup.test.ts
  • tests/native-profile-store.test.ts
  • tests/nous-oauth.test.ts
  • tests/oauth-account-attribution.test.ts
  • tests/oauth-account-id-collision.test.ts
  • tests/oauth-accounts-api.test.ts
  • tests/oauth-health.test.ts
  • tests/oauth-login-cli-live-update.test.ts
  • tests/oauth-manual-code.test.ts
  • tests/oauth-provider-reconcile.test.ts
  • tests/oauth-public-surface.test.ts
  • tests/oauth-reauth-bind.test.ts
  • tests/oauth-refresh-generic-lock.test.ts
  • tests/oauth-refresh-lock-multiprocess.test.ts
  • tests/oauth-refresh.test.ts
  • tests/oauth-status-privacy.test.ts
  • tests/oauth-store-multi.test.ts
  • tests/oauth-upsert-preserves-api-key.test.ts
  • tests/ocx-run.test.ts
  • tests/omp-path-contract.test.ts
  • tests/openai-api-virtual-models.test.ts
  • tests/openai-chat-hardening.test.ts
  • tests/openai-chat-native-policy.test.ts
  • tests/openai-provider-option-e2e.test.ts
  • tests/openai-provider-option-startup.test.ts
  • tests/openai-provider-option-tooling.test.ts
  • tests/openai-responses-passthrough.test.ts
  • tests/opencode-cli.test.ts
  • tests/outbound-body-guard.test.ts
  • tests/owned-service-home.test.ts
  • tests/package-tree-integrity.test.ts
  • tests/pi-path-contract.test.ts
  • tests/policy-execution.test.ts
  • tests/ports.test.ts
  • tests/process-state.test.ts
  • tests/project-config-warnings.test.ts
  • tests/provider-account-quota-persistence.test.ts
  • tests/provider-account-quota.test.ts
  • tests/provider-api-keys.test.ts
  • tests/provider-capacity.test.ts
  • tests/provider-config-validation.test.ts
  • tests/provider-connection-test.test.ts
  • tests/provider-cost-overlay-config.test.ts
  • tests/provider-key-store.test.ts
  • tests/provider-outbound.test.ts
  • tests/provider-quota.test.ts
  • tests/provider-registry-parity.test.ts
  • tests/proxy-env.test.ts
  • tests/proxy-liveness.test.ts
  • tests/quota-401-recovery-runtime.test.ts
  • tests/quota-scoring.test.ts
  • tests/reasoning-replay-robustness.test.ts
  • tests/release-helper.test.ts
  • tests/remote-catalog.test.ts
  • tests/request-history-index.test.ts
  • tests/request-log.test.ts
  • tests/responses-account-label.test.ts
  • tests/responses-compaction-routing.test.ts
  • tests/responses-compaction.test.ts
  • tests/responses-context-overflow.test.ts
  • tests/responses-native-main-refresh.test.ts
  • tests/responses-opaque-blob-recovery.test.ts
  • tests/responses-parser.test.ts
  • tests/responses-pool-401-refresh.test.ts
  • tests/responses-self-named-namespace-scrub.test.ts
  • tests/responses-shadow-intercept.test.ts
  • tests/responses-snapshot-repair-server.test.ts
  • tests/responses-state-write-amplification.test.ts
  • tests/responses-state.test.ts
  • tests/restore-completes-shared-teardown.test.ts
  • tests/route-decision-trace.test.ts
  • tests/route-explainability.test.ts
  • tests/router.test.ts
  • tests/routing-analytics.test.ts
  • tests/routing-capability-catalog.test.ts
  • tests/routing-compatibility-boundaries.test.ts
  • tests/routing-compatibility.test.ts
  • tests/routing-profile.test.ts
  • tests/server-403-permission-e2e.test.ts
  • tests/server-auth.test.ts
  • tests/server-background-lifecycle.test.ts
  • tests/server-clickjacking-headers.test.ts
  • tests/server-combo-failover-e2e.test.ts
  • tests/server-images.test.ts
  • tests/server-key-failover-e2e.test.ts
  • tests/server-kiro-completion-e2e.test.ts
  • tests/server-kiro-oauth-401-replay.test.ts
  • tests/server-live.test.ts
  • tests/server-management-auth.test.ts
  • tests/server-opencode-go-goal-streaming.test.ts
  • tests/server-request-body-size.test.ts
  • tests/server-search.test.ts
  • tests/server-stop-config-hardening.test.ts
  • tests/server-xai-chat-reasoning-streaming.test.ts
  • tests/server-xai-header-parity.test.ts
  • tests/server-xai-oauth-401-replay.test.ts
  • tests/server-xai-responses-streaming.test.ts
  • tests/service-probe-docker.test.ts
  • tests/service-secrets.test.ts
  • tests/service.test.ts
  • tests/session-affinity.test.ts
  • tests/session-lane-recall-harness.test.ts
  • tests/settings-oauth-open-browser.test.ts
  • tests/settings-stream-mode.test.ts
  • tests/shutdown-launcher.test.ts
  • tests/sidebar-routes.test.ts
  • tests/sidecar-settings-vision-controls.test.ts
  • tests/sidecar-settings-vision-filter.test.ts
  • tests/sidecar-settings-web-search-stream.test.ts
  • tests/skill-ocx.test.ts
  • tests/stale-state-purge.test.ts
  • tests/star-deferral.test.ts
  • tests/state-store-sweeper.test.ts
  • tests/stop-deferred-teardown.test.ts
  • tests/storage-cleanup.test.ts
  • tests/storage-policy-config-race.test.ts
  • tests/storage-policy-job-responsive.test.ts
  • tests/storage-policy.test.ts
  • tests/storage-restore-job-responsive.test.ts
  • tests/storage-scanner.test.ts
  • tests/storage-worker-lifecycle.test.ts
  • tests/storage-worker-teardown-isolate.test.ts
  • tests/stream-aborted-marker.test.ts
  • tests/subagent-context-staleness.test.ts
  • tests/subagent-fallback-handle-responses.test.ts
  • tests/subagent-model-fallback-api.test.ts
  • tests/subagent-model-fallback.test.ts
  • tests/sync-client-integrations.test.ts
  • tests/system-env.test.ts
  • tests/terminal-continuation-owner-rotation.test.ts
  • tests/test-home-guard.test.ts
  • tests/test-runner.test.ts
  • tests/thought-signature-credential-scope.test.ts
  • tests/token-guardian.test.ts
  • tests/update-job.test.ts
  • tests/update-notify.test.ts
  • tests/update-npm-cache-preflight.test.ts
  • tests/update-stop-first.test.ts
  • tests/update-transactional.test.ts
  • tests/usage-cost.test.ts
  • tests/usage-debug.test.ts
  • tests/usage-failure-persistence.test.ts
  • tests/usage-log.test.ts
  • tests/usage-summary.test.ts
  • tests/usage-surfaces.test.ts
  • tests/user-cost-overlay-coderabbit-regressions.test.ts
  • tests/user-cost-overlay-live-reconcile.test.ts
  • tests/user-cost-overlay-provider-delete.test.ts
  • tests/vision-anthropic.test.ts
  • tests/vision-reasoning-contract.test.ts
  • tests/vision-routed.test.ts
  • tests/vision-sidecar-e2e.test.ts
  • tests/windows-scheduler-install-verification.test.ts
  • tests/windows-service-mutation-lock.test.ts
  • tests/windows-tray.test.ts
  • tests/winsw.test.ts
  • tests/ws-upstream.test.ts
  • tests/xai-refresh-lock.test.ts

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


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.

@lidge-jun

Copy link
Copy Markdown
Owner Author

Owner admin merge, user-authorized promotion. Tree = origin/dev a6ee24f + version line. enforce-target draft conversion is the known ALLOWED_BASES=[dev] behaviour for every promotion PR (#3001/#3037/#3072/#3073/#3260).

@lidge-jun
lidge-jun merged commit 7fd141f into preview Sep 2, 2026
10 checks passed
@lidge-jun
lidge-jun deleted the codex/promote-preview-24000902 branch September 2, 2026 09:36
@github-actions

github-actions Bot commented Sep 2, 2026

Copy link
Copy Markdown
Contributor

Deterministic PR hygiene checks passed.

@github-actions github-actions Bot changed the title release: promote dev to preview for v2.40.0-preview.20260902 [WRONG BRANCH] release: promote dev to preview for v2.40.0-preview.20260902 Sep 2, 2026
@github-actions

github-actions Bot commented Sep 2, 2026

Copy link
Copy Markdown
Contributor

⏳ DRAFT

  • wrong target branch (preview); retarget to dev. UI screenshot required.

What to do

  • Retarget this PR to dev — all contributions go to dev.
  • Add a screenshot of the UI change to the PR description.

Its title has been prefixed with [WRONG BRANCH].
Automatic draft conversion failed (token cannot change draft status). Please convert this pull request to a draft manually. The required enforce-target check will keep failing until every issue above is resolved.

@lidge-jun

Copy link
Copy Markdown
Owner Author

리뷰 · 우선순위 74 / 80

이 PR은 기여자 기능 PR이 아니다. 당시 dev 끝점 a6ee24f5b (패키지 버전 2.40.0) 를 preview 에 올려 v2.40.0-preview.20260902 채널을 내는 메인테이너 승격이다. 가지 이름은 codex/promote-preview-24000902 이고 base는 preview 다. 승격 tip 84b48d6c5 과 본문이 적은 a6ee24f5b 사이 제품 트리 차이는 package.json 버전 한 줄뿐이다. 2.40.02.40.0-preview.20260902. 본문이 말한 git diff --stat origin/dev HEAD → 1 file, 1 line 과 로컬 검증이 같다.

리뷰 시점의 현재 origin/dev272ff6b11 (fix(release): move dev to 2.41.0 after v2.40.0 (#3265)) 이다. 스냅샷 SHA는 바뀌지 않았다. 승격 tip 이후 dev 에 추가로 들어온 것은 두 커밋뿐이다. #3262 (release.ymlbump-dev-version 호출 잡이 contents: write + pull-requests: write 를 넘김) 와 #3265 (안정판 퍼블리시 뒤 dev2.41.0 으로 이동). 이 두 줄은 승격 당시 트리에 없었고, 미리보기 채널이 나간 뒤 릴리즈 기차가 고친 후속이다.

싣는 화물(이미 당시 dev 에 있던 것)의 헤드라인은 본문과 같다. Windows CI 원인 수리 #3257 (server.stop 이 config-dir ACL flight 를 drain) · #3258 (writable fsync · hermetic ACL 테스트 레인), Cursor Private Inference 탭·상태 라우트 #3247–#3249, Cursor fast/identity #3222–#3244, MiniMax reasoning_details 정렬, encrypted V2/subagent 복구, catalog 가시성 수정이다. 회귀 감사 기록은 devlog/_plan/260902_bug_label_drawdown/071_regaudit_landing.md 이고, Windows 감사·수리는 devlog/_plan/260902_windows_ci_release/ 에 있다. 이 PR이 새로 만든 제품 코드가 아니다.

봇이 제목에 [WRONG BRANCH] 를 붙이고 enforce-target 을 빨갛게 만든 것은 버그가 아니다. .github/workflows/enforce-pr-target.ymlALLOWED_BASES["dev"] 뿐이라 base=preview 인 승격은 설계상 실패한다. 선례는 #3001 · #3072 · #3073 이다. 작성자 댓글도 같은 말로 적혀 있다. 베이스를 dev 로 바꾸면 승격 의미가 사라진다. 화면 사진 요구도 이 승격에는 해당 없다. PR 게이트 봇이 초안 전환에 실패한 것도 토큰 권한 한계로 알려진 패턴이다.

실제로 이 PR은 2026-09-02 18:36 KST 에 admin merge 로 preview 에 들어갔다 (merge 7fd141f2a). 그 직후 #3264#3262 권한 수정을 preview 위에 cherry-pick 했고, 태그 v2.40.0-preview.20260902 는 그 tip (49812c9e8) 를 가리킨다. 이어서 main 안정 v2.40.0 (#3263) 과 dev 2.41.0 범프 (#3265) 까지 끝났다. 현재 채널 상태는 preview=2.40.0-preview.20260902 / main=2.40.0 / dev=2.41.0 이다. scripts/release.ts 503줄 규칙은 preview 가지에서 버전 문자열에 -preview. 가 없으면 거절한다. 이 가지 버전 줄은 이미 그 형태였다.

types.ts/config.ts 분할을 이유로 닫을 대상이 아니다. 중복 승격도 아니다. 미리보기 채널이 목적이다. 라벨은 바꾸지 않는다. 이 댓글은 이미 머지·태그까지 끝난 뒤의 사후 기록이다.

package.json 라인 3 - 2.40.0-preview.20260902. 당시 dev2.40.0 과 유일한 트리 차이다. 미리보기 접미 형태가 scripts/release.ts 규칙과 맞다.
경로 base preview / head 84b48d6c5 - a6ee24f5b 를 조상으로 두고 버전 한 줄만 올린 승격이다. 새 제품 코드를 얹지 않는다.
경로 GitHub Actions / enforce-target - 승격 PR을 기여자 PR로 본 자동 잠금이다. 베이스를 dev 로 바꾸지 마라. 화면 사진을 요구하지 마라.
경로 CI statusCheckRollup - 머지 직후 test/gates/macos 샤드가 CANCELLED 로 남았다. 본문이 인용한 Windows workflow_dispatch 연속 성공과 dev push 런이 실질 증거다. release.yml 은 승격 SHA 의 push-event CI 로 다시 게이트한다.
경로 #3264 / .github/workflows/release.yml - 승격만으로는 부족했다. bump-dev-version 호출 잡 권한이 previewrelease.yml 에도 있어야 v2.40.0 디스패치가 startup_failure 없이 돈다. 후속으로 이미 실렸다.
경로 현재 dev 272ff6b11 - 승격 tip 보다 #3262 · #3265 두 커밋만 앞선다. 재승격이나 재베이스는 필요 없다.

메인테이너의 판단이 필요한 지점

  • (사후) 봇이 붙인 [WRONG BRANCH] / enforce-target 빨강을 무시하고 base=preview 로 머지한 선택이 맞았는지. 선례 #3001 · #3072 와 같다
  • 다음 주기부터 승격 PR 을 열기 전에 #3262 권한 수정이 이미 preview / mainrelease.yml 에 있는지 확인할지
  • Actions 가 create-PR 을 못 만들어 #3265 를 손으로 연 저장소 설정을 고칠지(완전 무인 릴리즈) 말지
  • 이 PR 을 dev 로 다시 겨냥할지. 하지 말 것. 그러면 승격이 아니다
  • types/config 분할이나 중복을 이유로 닫을지. 해당 없음

너의 추천
이미 머지·태그·안정판·dev 2.41.0 범프까지 끝났으니 이 PR 에 추가 머지 작업은 없다. 베이스를 dev 로 바꾸라는 봇 안내를 따르지 않은 것이 맞다. 다음 미리보기 승격도 같은 패턴(ALLOWED_BASES 빨강 무시 · 버전 한 줄 · admin merge · release expected-sha)으로 가면 된다. 라벨은 바꾸지 않는다. types/config 분할 때문에 닫을 대상이 아니다.

이 댓글은 grok-bot이 작성했습니다

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.

4 participants