Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
301 commits
Select commit Hold shift + click to select a range
3785915
fix(responses): carry incomplete reasons, terminal refusals, offline …
lidge-jun Oct 16, 2026
329d91b
feat(advisor): carry bounded retention and adaptive consultation (#71…
lidge-jun Oct 16, 2026
68fad32
feat(antigravity): preserve diagnostic per-model quota evidence (carr…
lidge-jun Oct 16, 2026
9e0ed51
feat(providers): carry opt-in API key round-robin and per-key pacing …
lidge-jun Oct 16, 2026
c03eafd
refactor(proxy): share opaque transport with desktop relay (#7120)
lcxhh521 Oct 16, 2026
6ccb47a
fix(combos): carry OAuth combo cooldown, account rotation and health …
lidge-jun Oct 16, 2026
a8d1bb8
feat(gui): carry Combo visibility, workspace panes, Windows picker an…
lidge-jun Oct 16, 2026
300e426
fix(claude): carry translated-lane server tools, refusal/cap/TTL fixe…
lidge-jun Oct 16, 2026
65ef8b3
feat(responses): carry compaction capabilities and reasoning retentio…
lidge-jun Oct 16, 2026
b3cd913
refactor: break config-facade import cycles (189 -> 59 static cyclic …
lcxhh521 Oct 16, 2026
7a42860
refactor(oauth): break the ChatGPT OAuth and auth-api import cycles (…
lcxhh521 Oct 16, 2026
4ed45e9
feat(cli): carry usage comparison, log history, restart and Codex con…
lidge-jun Oct 16, 2026
050bb44
fix(gui): restore keep-native-v1 qualifier placement (#7237)
lidge-jun Oct 16, 2026
5170724
fix(providers): charge API-key cooldown to the credential sent (#7240)
lidge-jun Oct 16, 2026
64ed834
test: fix Windows default-home isolation fixtures (#7242)
lidge-jun Oct 16, 2026
e498fde
fix(config): preserve legacy OpenCode Go configs after native wire pi…
lidge-jun Oct 16, 2026
a7d3be1
fix(ci): preserve import cycles through macOS path aliases (#7241)
lidge-jun Oct 16, 2026
d3cb552
fix(compact): preserve retained reasoning across native combo failove…
lidge-jun Oct 16, 2026
1f96e40
fix(claude): activate Windows picker after dormant startup (#7243)
lidge-jun Oct 16, 2026
0a568eb
fix(desktop): use Waker::noop for the Rust 1.99 clippy lint (#7246)
lidge-jun Oct 16, 2026
de315e7
fix(cli): preserve Codex opt-out and usage comparison ownership (#7244)
lidge-jun Oct 16, 2026
947b9b6
chore(release): open dev at 2.88.0 before releasing 2.87.0 (#7248)
github-actions[bot] Oct 16, 2026
d93965b
fix(ci): keep carry-attribution references whole at the window cap (#…
lidge-jun Oct 16, 2026
a02cecd
fix: carry account recovery, server-tool buffer, and usage correction…
lidge-jun Oct 16, 2026
520865e
fix(startup): skip unused native Codex ownership probes (#7184)
lidge-jun Oct 16, 2026
5d3a2fc
fix(claude): replay Anthropic server-tool exchanges on the translated…
lidge-jun Oct 16, 2026
2a3fd00
fix(google): stop leaked Gemini planning from spreading through repla…
lidge-jun Oct 16, 2026
97a12fd
docs(chatgpt): clarify the app-server shim transport limit (#7227)
Ingwannu Oct 17, 2026
7a29b53
fix(catalog): preserve OpenAI API display name overrides (#7259)
jdeurt Oct 17, 2026
f190fc4
fix(routing): price refused-then-served rows in routing analytics (#7…
vadymhimself Oct 17, 2026
43a3e39
fix(cli): preserve startup with IPv6 loopback disabled (#7262)
lidge-jun Oct 17, 2026
4b71bdb
fix(chat): return gateway request-history IDs (#7261)
lidge-jun Oct 17, 2026
bdb03fb
fix(responses): reclaim least recently used idle WebSocket at capacit…
YayoiNanoka Oct 17, 2026
0036a88
fix(opencode-zen): route Claude through Anthropic Messages (#7235)
norths7ar Oct 17, 2026
7761e04
fix(anthropic): recover rejected thinking without local prefix valida…
lidge-jun Oct 17, 2026
2a10a2b
chore(release): open dev at 2.89.0 before releasing 2.88.0 (#7263)
github-actions[bot] Oct 17, 2026
688b258
feat(compatibility): separate custom-tool grammar evidence from repre…
lidge-jun Oct 17, 2026
f443f49
fix(antigravity): show the Gemini 4 Argon quota group separately (#7283)
lidge-jun Oct 17, 2026
5f6a629
fix(vertex): honor project and location for API-key inference (#7266)
andrew05060414 Oct 17, 2026
d80dfcd
fix(google): preserve matched and orphan Vertex Argon tool images (#7…
Jossi02 Oct 17, 2026
c06ad25
feat(combos): let a combo set its catalog row description (#7229) (#7…
lidge-jun Oct 17, 2026
cb6a9a7
feat(responses): opt-in compression of outbound ChatGPT Responses req…
lidge-jun Oct 17, 2026
12760bb
feat(accounts): auto-pause repeated permanent account refusals (#7153)
lidge-jun Oct 17, 2026
649f36c
feat(providers): explicit single-model completion test (#7287)
lidge-jun Oct 17, 2026
db2cf95
feat(codex): opt-in OS desktop notification for low-quota protection …
lidge-jun Oct 17, 2026
d2c71eb
feat(combos): opt-in advisory quota signals for JEV decisions (P1) (#…
geunwoojun99 Oct 17, 2026
8640c2f
feat(messaging): add explicit enrolled Codex SSH peers (#6891)
phillipod Oct 18, 2026
d11f067
feat(anthropic): default prompt-cache TTL to 1h on first-party Anthro…
lidge-jun Oct 19, 2026
1c5e963
fix(service): never bake Claude first-party's own intercept proxy (#7…
scy7796 Oct 19, 2026
0a995db
fix(sidecar): map provider input overflow to context_length_exceeded …
lidge-jun Oct 19, 2026
421e4a6
ci(release): sign Windows binaries and MSI via SignPath (#7207) (#7356)
lidge-jun Oct 19, 2026
2339562
fix(responses): handle replayed hosted web-search history (#7250, #72…
lidge-jun Oct 19, 2026
cf1589f
chore(providers): remove opencode-free and migrate saved configs (#7351)
lidge-jun Oct 19, 2026
f7bdd8e
fix(combos): keep tool loops on one target and make failover history …
lidge-jun Oct 19, 2026
718692b
fix(combos): absorb community failover fixes (#7317, #7329, #7339, #7…
lidge-jun Oct 19, 2026
7ec6221
test(responses): register combo-tool-loop-pin in the core module inve…
lidge-jun Oct 19, 2026
cb669ee
test(windows): keep ACL subprocess work out of cache and registration…
lidge-jun Oct 19, 2026
ee3ad33
test(temp): let the final-EPERM quarantine see through Windows 8.3 TE…
lidge-jun Oct 19, 2026
955d8c2
test(combos): await the fallback lease release on both passthrough re…
lidge-jun Oct 19, 2026
c344c6c
test(temp): compare the default containment result through the native…
lidge-jun Oct 19, 2026
5250934
test(desktop): hold early client bytes in the socks5 egress fixture (…
lidge-jun Oct 19, 2026
93a9016
fix(launcher): scope an inherited transpiler cache to the Bun version…
lidge-jun Oct 19, 2026
7dfc141
fix(runtime): scope server children's transpiler cache and keep scopi…
lidge-jun Oct 19, 2026
52c326b
test(launcher): assert the scoped env and versioned bundled runtime i…
lidge-jun Oct 19, 2026
79fa97b
chore(release): open dev at 2.90.0 before releasing 2.89.0 (#7371)
github-actions[bot] Oct 19, 2026
c120eea
fix(responses): recover cold opaque state and harden replay, archive …
lidge-jun Oct 19, 2026
bddd61f
fix(responses): carry WS dispatch override, pooled key rotation, usag…
lidge-jun Oct 19, 2026
d3dafd3
fix(codex): renew pool credit evidence, recheck predicted-reset hard …
lidge-jun Oct 19, 2026
74463a2
fix(providers): carry Gemini, MiMo, DeepSeek, Mistral, opencode-go an…
lidge-jun Oct 19, 2026
dbb908f
fix(oauth): harden OAuth login/import, quota diagnostics, service/upd…
lidge-jun Oct 19, 2026
3069192
fix(providers): gate MiMo bare-call recovery on a terminal signal and…
lidge-jun Oct 19, 2026
1cf98c0
fix(providers): carry Mistral rate-limit recovery and OpenGateway too…
lidge-jun Oct 19, 2026
eb4bf96
fix(codex): pin Windows shim refresh identities on Linux and record t…
lidge-jun Oct 19, 2026
1202598
fix(codex): stop pool accounts from spending the native main account …
lidge-jun Oct 19, 2026
dc98a20
fix(responses): keep search replay ID allocation linear (#7419)
luvs01 Oct 21, 2026
6dbba75
fix(runtime): keep transpiler cache scopes within configured paths (#…
luvs01 Oct 21, 2026
9bc26b9
fix(claude-cli): keep model text out of inferred cooldowns (#7424)
luvs01 Oct 21, 2026
46a9e97
test: bound shell integration scenarios independently (#7449)
oliver-mee Oct 21, 2026
b8a9013
fix(kiro): read the whoami identity when kiro-cli appends its Profile…
martinbcg Oct 21, 2026
845ac6b
fix(responses): preserve upgrade-only reasoning inclusion (#7464)
luvs01 Oct 21, 2026
d82b217
chore(release): open dev at 2.91.0 before releasing 2.90.0 (#7475)
github-actions[bot] Oct 21, 2026
cf9965c
fix(deps): clear high-severity audit findings blocking the 2.90.0 rel…
lidge-jun Oct 21, 2026
5f8bf52
test: cover Claude CLI JSON schema contract (#7387)
adirwt852-cloud Oct 21, 2026
3883e1e
fix(test): arm the real-home write guard when bun test skips the prel…
lidge-jun Oct 21, 2026
9446471
test: make update recovery, messages cancellation, and CLI parity har…
lidge-jun Oct 21, 2026
cdcd39e
fix(auth): refuse Codex runtime AgentAssertion auth and scope dual_he…
lidge-jun Oct 21, 2026
561347c
fix(responses): handle Codex 0.164 request controls (#7473)
lidge-jun Oct 21, 2026
b50cc80
feat(management): passive GET /api/quota-pool (ocx.quota-pool/1 produ…
lidge-jun Oct 21, 2026
2945ebb
feat(readyz): advertise peer features from one registry (#7477)
lidge-jun Oct 21, 2026
072e7fe
test(update): let the test-scoped Windows ACL belt through the host-f…
lidge-jun Oct 21, 2026
7a9dc77
fix(chat): carry Anthropic thinking signatures through reasoning_deta…
lidge-jun Oct 21, 2026
d4ecea1
test(launcher): place PATH-Bun fixtures under a trusted ancestry (#7466)
lidge-jun Oct 21, 2026
79fa350
ci(windows): flag Windows-sensitive PRs for a lane=all dispatch (poli…
lidge-jun Oct 21, 2026
776b1dc
fix(quota-pool): adopt a concurrent winner's identity instead of refu…
lidge-jun Oct 21, 2026
7c08a29
feat(link): parity on apply — restart the Child runtime, record and r…
lidge-jun Oct 21, 2026
6bce298
feat(remote): name the serving Home in x-opencodex-served-by (OCX-2) …
lidge-jun Oct 21, 2026
5740cf0
fix(mistral): scope queue_full to the waiting identity; address #7474…
lidge-jun Oct 21, 2026
e1d15ac
feat(cli): mark provider list rows active when they serve (OCX-12) (#…
lidge-jun Oct 21, 2026
f20afd9
fix(link): refuse Windows Children with a Hub-mode pointer and explai…
lidge-jun Oct 21, 2026
a4f335c
feat(link): report each Child version and a compatibility verdict in …
lidge-jun Oct 21, 2026
bf4eb12
test(server): expect the platform's exit signal for a replacement tha…
lidge-jun Oct 22, 2026
e501371
test: make ten Windows-sensitive flaky tests deterministic (#7501)
lidge-jun Oct 22, 2026
fc034c8
feat(service): passive `ocx service status --json` and install-method…
lidge-jun Oct 22, 2026
0706074
ci(selector): flag process-signal code as Windows-sensitive (#7503)
lidge-jun Oct 22, 2026
1025acd
feat(fallback): OCX-11 fallback off per scope, with home_unreachable …
lidge-jun Oct 22, 2026
20d554f
chore(release): open dev at 2.92.0 before releasing 2.91.0 (#7532)
github-actions[bot] Oct 22, 2026
8d6e124
fix(chat): persist reserve helper refusal request IDs (#7511)
luvs01 Oct 22, 2026
943f63f
fix(routing): normalize analytics usage rows (#7510)
luvs01 Oct 22, 2026
299e8b6
fix(logs): preserve replay-refusal provenance through response finali…
norths7ar Oct 22, 2026
30e82f9
fix(retry): honor upstream no-retry verdict (#7538)
lidge-jun Oct 22, 2026
516aaaa
chore(providers): deprecate mimo-free (#7445)
heerey525 Oct 22, 2026
782655d
docs(devlog): record the 2.92.0 sweep wave plan (#7535)
lidge-jun Oct 22, 2026
0bdf334
fix(service): preserve unrelated authenticated loopback proxies (#7509)
luvs01 Oct 22, 2026
5f7f7db
fix(messaging): reject macOS ACL-exposed state (#7520)
luvs01 Oct 22, 2026
a0806af
fix(chat): finish with length when a Responses upstream reports incom…
lidge-jun Oct 22, 2026
c9ca685
fix(cli): use attested capabilities for local usage comparisons (#7514)
luvs01 Oct 22, 2026
ec8b8cf
fix(codex): distrust picker freshness without binding evidence (#7522)
luvs01 Oct 22, 2026
9164950
fix(jev): publish Antigravity family quota as decision evidence (carr…
lidge-jun Oct 22, 2026
880127d
docs(subagents): explain how spawn_agent fills its five model slots (…
chlwnsgurg Oct 22, 2026
2c0246e
feat(logs): support x-hermes-conversation-id for Hermes session corre…
lidge-jun Oct 22, 2026
c96145b
fix(windows): read the effective SID in-process so service install do…
lidge-jun Oct 22, 2026
c58e74e
fix(codex): bind CLI update plans to installation content and pre-dot…
lidge-jun Oct 22, 2026
f90d295
fix(antigravity): route models only to accounts whose roster serves t…
lidge-jun Oct 23, 2026
a4b0fa7
feat(vertex): resolve each API key's project with project "auto" (#7296)
chilung-cgu Oct 23, 2026
815af90
fix(providers): refresh dated Token Plan catalogue and metadata (#7555)
lidge-jun Oct 23, 2026
83af6f9
fix(link): keep retrying failed Home tunnels, report Child link readi…
lidge-jun Oct 23, 2026
1559b74
docs(site): show the SignPath attribution and code signing policy on …
lidge-jun Oct 23, 2026
f210595
docs(release): end release notes with the SignPath code signing attri…
lidge-jun Oct 23, 2026
0421ac2
feat(jev): opt-in session pin keeps a JEV combo session on its decide…
lidge-jun Oct 23, 2026
4e7ab9e
fix(responses): infer message phase for passthrough providers (#7554)
lidge-jun Oct 23, 2026
a9963bf
fix(providers): backfill Token Plan output limits on roster refresh (…
lidge-jun Oct 23, 2026
c51b0b4
fix(providers): fold developer role to system for moonshot (#7583) (#…
lidge-jun Oct 23, 2026
26415a9
fix(replay): isolate retained reasoning state by admitted caller (car…
lidge-jun Oct 23, 2026
da0929b
fix(codex): stop guardian refresh of grants persisted as revoked (#7597)
lidge-jun Oct 23, 2026
9dc40ce
fix(cli): keep the stored strategy when combo set replaces targets (#…
lidge-jun Oct 23, 2026
e033111
fix(catalog): send native ultra effort as max on the wire (#7590) (#7…
lidge-jun Oct 23, 2026
c7e93e2
feat(workbuddy): add subscription support (#7604)
terrytan95 Oct 23, 2026
3ddcf5b
fix(codex): keep npm Node cache within inspection lifetime (#7585)
luvs01 Oct 23, 2026
bef4f50
fix(desktop): revoke usage trials after identity verification fails (…
luvs01 Oct 23, 2026
e0cdd80
fix(codex): refuse uncertain prefix-local Node observations (#7577)
luvs01 Oct 23, 2026
c0d80ef
perf(sse): avoid rescanning and flattening fragmented SSE carry (carr…
lidge-jun Oct 23, 2026
ce11063
docs(cli): an existing JEV combo keeps its stored decision method (#7…
lidge-jun Oct 23, 2026
2307e04
fix(fallback): enforce hard-lock policy at first combo dispatch (#7588)
luvs01 Oct 23, 2026
e8549d4
feat(quota): read Abliteration credit balance from /v1/credits (#7581)
btorres0318 Oct 23, 2026
9a34e21
fix(responses): always send a title on url_citation and repair old hi…
inforanger Oct 23, 2026
7416f18
fix(deps): ship Bun 1.4.4 runtime to drop the compromised eMudhra roo…
LPFchan Oct 23, 2026
03bcf78
test(layout): move the Abliteration quota test to a shard so layout.j…
lidge-jun Oct 23, 2026
9534c0c
fix(coding-agent): launch native Windows CLIs and refuse empty-arg-dr…
lidge-jun Oct 23, 2026
c4d4bb2
docs(providers): qualify Qoder native executable precedence across PA…
lidge-jun Oct 23, 2026
306a88e
chore(release): open dev at 2.93.0 before releasing 2.92.0 (#7633)
github-actions[bot] Oct 23, 2026
93911e5
fix(deps): pin zod 4.6.6 and body-parser 2.4.0 for audit:high (#7642)
lidge-jun Oct 23, 2026
2494848
fix(deps): bump gui happy-dom to 21.0.4 for GHSA-834v-8h66-3h79 (#7644)
lidge-jun Oct 24, 2026
ceef488
test: settle Windows ACL work and owner locks before fixture removal …
lidge-jun Oct 24, 2026
43f872f
test: make codex-runtime, client-connect and loopback-listener tests …
lidge-jun Oct 24, 2026
bd5c2ea
test: keep cold first-exec and PowerShell start out of two timed case…
lidge-jun Oct 24, 2026
46f23ca
feat(usage): price and seed Kimi K3.1 Pro on Kimi Code and Moonshot (…
lidge-jun Oct 24, 2026
4731614
ci: run docker/keyring smoke and React Doctor on PRs only when their …
lidge-jun Oct 24, 2026
5253164
fix(qoder): provider-only catalog, replay-envelope refusal and isolat…
lidge-jun Oct 24, 2026
8066099
fix(codex): list pool accounts without a native home and expose safe …
lidge-jun Oct 24, 2026
e8ff1b2
docs: align localized Mistral and OpenGateway provider guidance (#7646)
lidge-jun Oct 24, 2026
e01c5a7
fix(command-code): rotate on insufficient-credit refusals (#7558)
lidge-jun Oct 24, 2026
a564487
fix(codex): calibrate Business Premium display capacity (#7557)
lidge-jun Oct 24, 2026
3decf65
fix(fallback): check the first hard-lock profile destination (#7589)
luvs01 Oct 24, 2026
af8cd35
fix(service): bind ownership lease release to its acquisition (#7543)
luvs01 Oct 24, 2026
c5ba1e1
test(server): isolate agent-task-recovery fixtures (#7613) (#7649)
lidge-jun Oct 24, 2026
a033a1a
fix(gui): cancel Remote Link sheet focus work (#7611) (#7650)
lidge-jun Oct 24, 2026
047c5dc
feat(gui): expose JEV session pin in Combo editor (#7664)
lidge-jun Oct 24, 2026
4e2940e
fix(deps): patch Hono and ip-address advisories and align qs (#7647)
lidge-jun Oct 24, 2026
71be051
fix(windows): resolve ACL principal natively without cold PowerShell …
lidge-jun Oct 24, 2026
e9df82c
fix(codex): preserve sync edits with canonical sandbox checks (#7659)
lidge-jun Oct 24, 2026
488d5f1
fix(link): keep a connected client's integrations across ocx stop; st…
lidge-jun Oct 24, 2026
68f2669
docs(getting-started): align Korean installation guide with Bun 1.4.4…
mvanhorn Oct 24, 2026
6426c42
fix(codex): keep a role's model when auto-assign finds an equal-price…
LilMGenius Oct 24, 2026
8aa8206
fix(codex): validate subagent limit boundaries before writes (#7276)
luvs01 Oct 24, 2026
8d7a35f
fix(chat): isolate Anthropic reasoning state from native passthrough …
luvs01 Oct 24, 2026
071b4d9
perf(eventstream): use Bun native CRC32 for Kiro frame validation (#7…
luvs01 Oct 24, 2026
0aeaf0c
fix(i18n): complete Turkish dashboard copy and documentation (#7565)
ardakrt Oct 24, 2026
9d74a73
docs: point ADR-7517 to its Qoder contract owner (#7686)
luvs01 Oct 24, 2026
d0a8443
perf(responses): avoid input Buffer copies in gzip requests (#7671)
luvs01 Oct 24, 2026
26598df
perf(streams): retain a bounded SSE field prefix during fragmented re…
luvs01 Oct 24, 2026
d891cac
fix(ci): wake the PR gate when attribution-approved is applied (#7698)
lidge-jun Oct 24, 2026
f0bf610
feat(providers): seed Kimi K3.1 Pro on the Moonshot API preset (#7695)
lidge-jun Oct 24, 2026
5ab431b
fix(kiro): fail over accounts when overage quota is exhausted (#7687)
martinbcg Oct 24, 2026
0929e6e
chore(test): align Bun runner with the 1.4.4 security baseline (#7627)
luvs01 Oct 25, 2026
79b4964
fix(codex): detect LazyCodex installed from the marketplace (#7692)
LilMGenius Oct 25, 2026
c2bcb52
fix(command-code): answer MODEL_NOT_IN_PLAN once as a model-scoped 40…
lidge-jun Oct 25, 2026
6269f5c
fix(ci): bind exception approval labels to the evaluated head (#7699)
lidge-jun Oct 25, 2026
f87a321
fix(runtime): release detached sweep hooks and preserve replacement t…
luvs01 Oct 25, 2026
5d995c9
perf(usage): bound timeline aggregation scratch memory and avoid argu…
luvs01 Oct 25, 2026
5b71daf
perf(codex): validate audit UTF-8 without round-trip Buffer copies (#…
luvs01 Oct 25, 2026
2296a7b
fix(remote-workspace): observe Pi prompt failures before acknowledgem…
luvs01 Oct 25, 2026
3d4d3e0
perf(eventstream): avoid quadratic copying of fragmented frames (#7673)
luvs01 Oct 25, 2026
323a5e1
perf(responses): coalesce queued thought-signature snapshot writes (#…
luvs01 Oct 25, 2026
ac65aa7
fix(quota): bound snapshot persistence under sustained updates (#7666)
luvs01 Oct 25, 2026
6728882
perf(history): skip unchanged partial-tail reads and SQLite metadata …
luvs01 Oct 25, 2026
c203c86
fix(routing): inspect hard-lock fallback without selecting candidates…
luvs01 Oct 25, 2026
6672cfb
fix(transport): honor backpressure in pinned HTTP responses (#7667)
luvs01 Oct 25, 2026
959a07a
feat(sync): ocx sync --expect-link / --expect-hub-key refuses a diffe…
lidge-jun Oct 25, 2026
a589dde
fix(ci): select Docker smoke for actual image build inputs (#7689)
luvs01 Oct 25, 2026
4049f40
fix(responses): preserve gateway citations during native compact (#7682)
luvs01 Oct 25, 2026
9b56622
perf(adapters): use native SHA-256 for tool identity digests (#7670)
luvs01 Oct 25, 2026
50afcec
perf(socks5): bound upload waiters and release completed read results…
luvs01 Oct 25, 2026
6fc3c88
feat(integrations): connect named Hermes profiles (#7674) (#7700)
lidge-jun Oct 25, 2026
7b0e4ab
fix(socks5): deliver partial response payloads promptly and release t…
luvs01 Oct 25, 2026
8ebe46b
perf(proxy): bound CONNECT header buffering and avoid repeated prefix…
luvs01 Oct 25, 2026
88f7a77
fix(protocols): account for Antigravity direct Chat IR (#7724)
luvs01 Oct 26, 2026
bf0d80c
fix(claude): classify legacy desktop aliases on cold launch (#7721)
luvs01 Oct 26, 2026
ef386eb
fix(scripts): detect diagnostic spawn timeout via exitedDueToTimeout …
luvs01 Oct 26, 2026
d056f84
test(server): isolate port reclaim fixture identity and clock (#7706)
luvs01 Oct 26, 2026
ea48448
fix(management): declare Hermes profile route (#7729)
luvs01 Oct 26, 2026
01ec325
fix(config): preserve disabled sidecars when targets retire (#7420)
luvs01 Oct 26, 2026
14fa422
fix(meta): preserve destinations when refreshing saved model rosters …
luvs01 Oct 26, 2026
0eb8cd0
fix(cursor): use Bun glob matching for native grep (#7630)
luvs01 Oct 26, 2026
8e18e60
test(launcher): copy only Node launcher modules into runtime selectio…
luvs01 Oct 26, 2026
88c17bc
fix(responses): notice a Codex WebSocket that dies after the response…
FredAmartey Oct 26, 2026
c2f3d8b
fix(codex): clamp native efforts to selected model ladder (#7731)
Plamyth Oct 26, 2026
8dd330a
fix(link): preserve literal SSH include names on Bun 1.4.4 (#7629)
luvs01 Oct 26, 2026
2971af8
feat(combos): add opt-in cooldown recovery with configurable interval…
artur-safonov Oct 26, 2026
415078c
test(cli): let the forged sibling-env start bind its own port (#7740)
lidge-jun Oct 26, 2026
833a804
fix(launcher): enforce the pinned Bun patch floor for PATH fallback (…
luvs01 Oct 26, 2026
852bf9d
fix(responses): bound closing handshakes for non-reused upstream WebS…
lidge-jun Oct 26, 2026
bada676
fix(desktop): bind usage trials to fresh package proof (#7709)
luvs01 Oct 26, 2026
1db7b61
fix(chat): fail unmet required client tool completions (#7463)
Ingwannu Oct 26, 2026
66e0892
fix(ci): verify installer signature before administrative extraction …
luvs01 Oct 26, 2026
dc49f32
fix(service): preserve Windows probe support across Node and Bun (#7722)
luvs01 Oct 26, 2026
3b4e04a
fix(test): bind and serialize queue lock ownership (#7508)
luvs01 Oct 26, 2026
2d8463a
fix(usage): retain Kiro prompt estimates in hosted tool paths (#7744)
lidge-jun Oct 26, 2026
820234b
fix(router): support Vercel JEV decisions and thinking model reasonin…
omar391 Oct 26, 2026
48b77ee
fix(update): join the Windows npm tree before stage cleanup (#7751)
lidge-jun Oct 26, 2026
8a3be77
fix(deepseek): restore official V4 Pro availability (#7591)
norths7ar Oct 26, 2026
daec176
fix(live): bound WebSocket close without releasing live ownership (#7…
luvs01 Oct 26, 2026
5c588f2
fix(runtime): bypass proxy environment for local stop requests (#7754)
lidge-jun Oct 26, 2026
9d15527
feat(codex): expose opt-in Flex tier for eligible routed models (#7534)
Transient-Onlooker Oct 26, 2026
162beb3
fix(anthropic): preserve cache prefixes during routed compaction (#7749)
lidge-jun Oct 26, 2026
609ce90
fix(minimax): move to GA MiniMax-M3.1-Flash and rename the retired pr…
lidge-jun Oct 26, 2026
b8ba848
feat(clients): connect Qoder CN and WorkBuddy desktop editions (#7665)
Flowershangfromthebranches Oct 26, 2026
816e84b
fix(combo): reject buffered required-tool false successes (#7741)
lidge-jun Oct 26, 2026
81ce595
fix(update): keep Codex routing for the restarted proxy during an upd…
lidge-jun Oct 26, 2026
a3e2214
fix(codex): renew credit evidence for namespace-bound Direct accounts…
Caledvwlch Oct 26, 2026
d610ccc
fix(reasoning): separate support, thinking toggles and effort control…
norths7ar Oct 26, 2026
9a61bd9
fix(codex): fence uncertain catalog entry identity (#7610)
luvs01 Oct 26, 2026
911ad9f
fix(live): keep sideband admission until the upstream closes after cl…
lidge-jun Oct 26, 2026
0f642c4
fix(codex): preserve credit recovery retry hints and scoped cooldowns…
Caledvwlch Oct 26, 2026
9e48f78
feat(providers): add AI Stupid Level API-key preset (#7623)
StudioPlatforms Oct 26, 2026
4111e93
fix(claude): drain parent ACL flights before intercept secret writes …
lidge-jun Oct 27, 2026
19b7f19
fix(config): skip optional hardening for non-directory homes (#7688)
luvs01 Oct 27, 2026
1de2b71
ci: run import-graph tests on pull requests and verify merged batches…
lidge-jun Oct 27, 2026
2606f6f
feat(models): add GPT-6.1 Terra alongside GPT-5.6 Terra (non-Cursor p…
lidge-jun Oct 27, 2026
36fd232
release: promote frozen tip 2606f6f922d6c897836f4aafc0910f46293e5786 …
lidge-jun Oct 27, 2026
748605e
release: 2.93.0-preview.20261027
lidge-jun Oct 27, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
4 changes: 2 additions & 2 deletions .github/actions/setup-project-bun/action.yml
Original file line number Diff line number Diff line change
Expand Up @@ -8,8 +8,8 @@ description: >-
# (#6713 run 37631558263: Linux 1/4, macOS 2/2, Windows 9/9). It moved from 1.4.0 to
# 1.4.3 for oven-sh/bun#44581: 1.4.0's Bun.spawnSync could lose a child's exit after
# finalizers ran inside an earlier call and spin past its own timeout (#4956).
# Rejoin only after the upstream runner crash is fixed and a green lane=all
# dispatch proves the unified version; then delete testRunnerBun and this role input.
# Both roles now default to the package's 1.4.4 security transition, retaining role validation.
# Promotion requires a green full cross-platform lane=all run on the exact candidate head.
inputs:
role:
description: Bun role to install (runtime or test-runner).
Expand Down
4 changes: 3 additions & 1 deletion .github/scripts/enforce-pr-target.test.cjs
Original file line number Diff line number Diff line change
Expand Up @@ -94,7 +94,9 @@ describe("enforce-pr-target workflow", () => {

it("writes exactly one consolidated comment via a single upsert helper", () => {
assert.match(workflow, /GATE_MARKER,/);
assert.match(workflow, /comment\.body\?\.includes\(GATE_MARKER\)/);
// The gate comment is the bot comment that starts with GATE_MARKER; a
// marker echoed inside another comment does not classify it.
assert.match(workflow, /comments\.find\(isGateComment\)/);
assert.match(workflow, /upsertGateComment/);
assert.match(workflow, /buildGateCommentBody/);
// No legacy two-comment write path remains.
Expand Down
11 changes: 10 additions & 1 deletion .github/scripts/pr-carry-attribution.cjs
Original file line number Diff line number Diff line change
Expand Up @@ -49,7 +49,16 @@ const SENTENCE_END_RE = /[.!?](?:\s|$)|\n/;
function carryWindow(text, from) {
const slice = text.slice(from, from + 80);
const end = slice.search(SENTENCE_END_RE);
return end === -1 ? slice : slice.slice(0, end);
if (end !== -1) return slice.slice(0, end);

// Finish only the number already started in this window (including a bare
// hash at the cap). The bounded suffix check and forward digit walk keep
// untrusted text linear and leave owner/repo qualifiers intact for REF_RE.
let to = from + slice.length;
if (/#\d*$/.test(slice)) {
while (to < text.length && text[to] >= "0" && text[to] <= "9") to++;
}
return text.slice(from, to);
}

const TRAILER_RE = /^[ \t]*co-authored-by:[ \t]*(.+)$/gim;
Expand Down
33 changes: 33 additions & 0 deletions .github/scripts/pr-carry-attribution.test.cjs
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ const { describe, it } = require("node:test");
const assert = require("node:assert/strict");
const {
assessCarryAttribution,
carryWindow,
referencedCarryNumbers,
} = require("./pr-carry-attribution.cjs");

Expand Down Expand Up @@ -291,6 +292,38 @@ describe("assessCarryAttribution", () => {
assert.deepEqual(failures[0].paths, ["#3193"]);
});

it("keeps the complete references from the #7223 subject", () => {
const subject = "carry Combo visibility, workspace panes, Windows picker and Gentle Shell (#7195, #6767";
assert.deepEqual([...referencedCarryNumbers(subject)], [7195, 6767]);
});

it("finishes a number or hash at the cap without admitting the next reference", () => {
for (const reference of ["#6767", "other/repo#6767"]) {
for (let included = 1; included <= 5; included++) {
const padding = " ".repeat(80 - reference.length + 5 - included);
const text = padding + reference + " #3192";
assert.equal(carryWindow(text, 0), padding + reference);
assert.deepEqual(
[...referencedCarryNumbers("carry" + text)],
reference.startsWith("#") ? [6767] : [],
);
}
}
});

it("excludes references starting at or beyond the cap and after a newline", () => {
for (const padding of [80, 81]) {
assert.deepEqual([...referencedCarryNumbers("carry" + " ".repeat(padding) + "#3192")], []);
}
assert.deepEqual([...referencedCarryNumbers("carry #3193\n#3192")], [3193]);
});

it("completes a long numeric suffix without scanning the following text", () => {
const digits = "7".repeat(100_000);
const text = " ".repeat(79) + "#" + digits;
assert.equal(carryWindow(text + " #3192", 0), text);
});

it("reads a trailer that only exists on a branch commit", () => {
assert.deepEqual(
assessCarryAttribution(
Expand Down
110 changes: 110 additions & 0 deletions .github/scripts/pr-hygiene.cjs
Original file line number Diff line number Diff line change
Expand Up @@ -292,6 +292,109 @@ const HYGIENE_GATE_LABELS = [
"attribution-approved",
];

/**
* Exception approvals vouch for one revision of the change. Each counts only
* while the head the hygiene workflow last recorded is still the head being
* evaluated and nothing has rewritten the branch since. Sponsorship
* (`maintainer-sponsored`) is about which surfaces change, not about one
* revision, so it is not head-bound.
*/
const HEAD_BOUND_APPROVAL_LABELS = [
"test-exception-approved",
"suppression-approved",
"generated-change-approved",
"dependency-change-approved",
"attribution-approved",
];

/** Issue events after which the head can point at an earlier commit again. */
const HEAD_REWRITE_EVENTS = ["head_ref_force_pushed", "head_ref_restored"];

const APPROVAL_RECORD_TOKEN = "pr-hygiene-approvals";
const APPROVAL_RECORD_LINE = /^<!-- pr-hygiene-approvals (\{.*\}) -->$/;
const FULL_SHA = /^(?:[0-9a-f]{40}|[0-9a-f]{64})$/;

function isRewriteCount(value) {
return Number.isSafeInteger(value) && value >= 0;
}

/**
* Read the head binding the hygiene workflow wrote as the last line of its
* own section. The token must occur exactly once in `source` and sit on that
* last line, so echoed text (a changed path can contain newlines) can only
* make the record unreadable, never stand in for it.
* @returns {{ head: string, headRewrites: number | null } | null}
*/
function parseApprovalRecord(source) {
if (typeof source !== "string") return null;
if (source.split(APPROVAL_RECORD_TOKEN).length !== 2) return null;
const lines = source.split("\n").map((line) => line.trim()).filter(Boolean);
const match = lines.at(-1)?.match(APPROVAL_RECORD_LINE);
if (!match) return null;
let value;
try {
value = JSON.parse(match[1]);
} catch {
return null;
}
if (value === null || typeof value !== "object" || Array.isArray(value)) return null;
if (Object.keys(value).sort().join(",") !== "head,headRewrites") return null;
if (typeof value.head !== "string" || !FULL_SHA.test(value.head)) return null;
if (value.headRewrites !== null && !isRewriteCount(value.headRewrites)) return null;
return { head: value.head, headRewrites: value.headRewrites };
}

/** `headRewrites` is null when the history read failed: nothing is confirmed. */
function formatApprovalRecord({ head, headRewrites }) {
const value = { head, headRewrites: isRewriteCount(headRewrites) ? headRewrites : null };
return "<!-- " + APPROVAL_RECORD_TOKEN + " " + JSON.stringify(value) + " -->";
}

function countHeadRewrites(events) {
return (events ?? []).filter((entry) => HEAD_REWRITE_EVENTS.includes(entry?.event)).length;
}

function presentHeadBoundApprovals(labels) {
return HEAD_BOUND_APPROVAL_LABELS.filter((label) => labels.includes(label));
}

/** True when a current rewrite count could still confirm an approval. */
function needsHeadRewriteCount({ labels = [], headSha, record = null, eventAction }) {
return (
eventAction !== "synchronize" &&
record !== null &&
record.head === headSha &&
isRewriteCount(record.headRewrites) &&
presentHeadBoundApprovals(labels).length > 0
);
}

/**
* Split the head-bound approvals on the pull request into the ones that still
* describe the evaluated head and the ones that do not. They are kept only
* when the last recorded evaluation saw this same head and the rewrite count,
* read before that evaluation's snapshot and again after this one's, has not
* changed. Without a rewrite, fast-forward pushes cannot bring the recorded
* head back, so the head has not moved since that evaluation, which removed
* every approval it could not confirm. A synchronize event, a missing record,
* or an unknown count confirms nothing.
* @returns {{ kept: string[], stale: string[] }}
*/
function reconcileHeadBoundApprovals({
labels = [],
headSha,
record = null,
eventAction,
headRewriteCount = null,
}) {
const present = presentHeadBoundApprovals(labels);
const current =
needsHeadRewriteCount({ labels, headSha, record, eventAction }) &&
isRewriteCount(headRewriteCount) &&
headRewriteCount === record.headRewrites;
return current ? { kept: present, stale: [] } : { kept: [], stale: present };
}

/**
* Combine patch-hygiene and sponsored-surface failures into one list so the
* hygiene workflow and the PR quality gate cannot disagree about Ready.
Expand Down Expand Up @@ -340,13 +443,20 @@ module.exports = {
addedLines,
assessHygiene,
collectDeterministicHygieneFailures,
countHeadRewrites,
formatApprovalRecord,
HEAD_BOUND_APPROVAL_LABELS,
HEAD_REWRITE_EVENTS,
HYGIENE_FAILURE_HINTS,
HYGIENE_GATE_LABELS,
hasEmptyCatch,
hasDeletions,
isBehaviorPath,
isGeneratedPath,
isTestPath,
needsHeadRewriteCount,
parseApprovalRecord,
reconcileHeadBoundApprovals,
resultLines,
resultLinesByHunk,
};
103 changes: 103 additions & 0 deletions .github/scripts/pr-hygiene.test.cjs
Original file line number Diff line number Diff line change
Expand Up @@ -6,9 +6,15 @@ const {
addedLines,
assessHygiene,
collectDeterministicHygieneFailures,
countHeadRewrites,
formatApprovalRecord,
HEAD_BOUND_APPROVAL_LABELS,
HYGIENE_FAILURE_HINTS,
HYGIENE_GATE_LABELS,
hasEmptyCatch,
needsHeadRewriteCount,
parseApprovalRecord,
reconcileHeadBoundApprovals,
resultLines,
resultLinesByHunk,
} = require("./pr-hygiene.cjs");
Expand Down Expand Up @@ -391,3 +397,100 @@ describe("pr-hygiene workflow trust boundary", () => {
);
});
});

describe("head-bound approvals", () => {
const HEAD = "c".repeat(40);
const OTHER = "d".repeat(40);
const record = (head, headRewrites) =>
"<!-- pr-hygiene-approvals " + JSON.stringify({ head, headRewrites }) + " -->";

it("covers exactly the exception approvals, not sponsorship", () => {
assert.deepEqual(
[...HEAD_BOUND_APPROVAL_LABELS].sort(),
HYGIENE_GATE_LABELS.filter(
(label) => label !== "intake: hygiene-blocked" && label !== "maintainer-sponsored",
).sort(),
);
});

it("round-trips a record, including an unknown rewrite count", () => {
const line = formatApprovalRecord({ head: HEAD, headRewrites: 2 });
assert.equal(line, record(HEAD, 2));
assert.deepEqual(parseApprovalRecord("status\n\n" + line), { head: HEAD, headRewrites: 2 });
assert.deepEqual(parseApprovalRecord(formatApprovalRecord({ head: HEAD, headRewrites: undefined })), {
head: HEAD,
headRewrites: null,
});
assert.deepEqual(parseApprovalRecord(record("e".repeat(64), 0)), { head: "e".repeat(64), headRewrites: 0 });
});

it("rejects anything but one well-formed record on the last line", () => {
for (const source of [
null,
"",
record(HEAD, 0) + "\nlater line",
record(HEAD, 0) + "\n" + record(HEAD, 0),
"mentions pr-hygiene-approvals elsewhere\n" + record(HEAD, 0),
"<!-- pr-hygiene-approvals {not json} -->",
"<!-- pr-hygiene-approvals " + JSON.stringify({ head: HEAD, headRewrites: 0, approvals: [] }) + " -->",
"<!-- pr-hygiene-approvals " + JSON.stringify({ head: HEAD }) + " -->",
"<!-- pr-hygiene-approvals [1] -->",
record("abc", 0),
record(HEAD.toUpperCase(), 0),
record(HEAD, -1),
record(HEAD, 1.5),
record(HEAD, "1"),
]) {
assert.equal(parseApprovalRecord(source), null, String(source));
}
});

it("counts only head rewrite events", () => {
assert.equal(
countHeadRewrites([
{ event: "head_ref_force_pushed" },
{ event: "labeled" },
{ event: "head_ref_restored" },
null,
]),
2,
);
assert.equal(countHeadRewrites(undefined), 0);
});

it("keeps approvals only under an unchanged head and rewrite count", () => {
const labels = ["test-exception-approved", "maintainer-sponsored"];
const base = { labels, headSha: HEAD, record: { head: HEAD, headRewrites: 1 }, eventAction: "edited" };
const kept = { kept: ["test-exception-approved"], stale: [] };
const stale = { kept: [], stale: ["test-exception-approved"] };
assert.deepEqual(reconcileHeadBoundApprovals({ ...base, headRewriteCount: 1 }), kept);
assert.deepEqual(reconcileHeadBoundApprovals({ ...base, headRewriteCount: 2 }), stale);
assert.deepEqual(reconcileHeadBoundApprovals({ ...base, headRewriteCount: null }), stale);
assert.deepEqual(reconcileHeadBoundApprovals({ ...base, headRewriteCount: 1, eventAction: "synchronize" }), stale);
assert.deepEqual(reconcileHeadBoundApprovals({ ...base, headRewriteCount: 1, headSha: OTHER }), stale);
assert.deepEqual(reconcileHeadBoundApprovals({ ...base, headRewriteCount: 1, record: null }), stale);
assert.deepEqual(
reconcileHeadBoundApprovals({ ...base, headRewriteCount: 1, record: { head: HEAD, headRewrites: null } }),
stale,
);
assert.deepEqual(
reconcileHeadBoundApprovals({ ...base, labels: ["maintainer-sponsored"], headRewriteCount: 1 }),
{ kept: [], stale: [] },
);
});

it("asks for a rewrite count only when one could confirm an approval", () => {
const base = {
labels: ["suppression-approved"],
headSha: HEAD,
record: { head: HEAD, headRewrites: 0 },
eventAction: "labeled",
};
assert.equal(needsHeadRewriteCount(base), true);
assert.equal(needsHeadRewriteCount({ ...base, labels: [] }), false);
assert.equal(needsHeadRewriteCount({ ...base, eventAction: "synchronize" }), false);
assert.equal(needsHeadRewriteCount({ ...base, headSha: OTHER }), false);
assert.equal(needsHeadRewriteCount({ ...base, record: null }), false);
assert.equal(needsHeadRewriteCount({ ...base, record: { head: HEAD, headRewrites: null } }), false);
});
});
Loading
Loading