Omar Shahine
58575ed456
refactor(imessage): remove split-send coalescing ( #108436 )
...
Co-authored-by: Peter Steinberger <steipete@gmail.com >
Co-authored-by: Omar Shahine <10343873+omarshahine@users.noreply.github.com >
2026-07-23 00:26:41 -04:00
Peter Steinberger
099d6351b3
refactor(sessions): canonical lineage model — creation provenance, fork ancestry, generation chain, typed row contract ( #111861 )
...
* fix(sessions): preserve spawn/fork lineage across implicit daily/idle rollover
* refactor(sessions): canonical creation model with forkSource ancestry and generation chain
* feat(sessions): stamp creation provenance across all creation paths and emit created events
* refactor(gateway): lock lineage patching, split control from navigation, add typed session-row contract
* docs(gateway): document creation provenance stamping and lineage patch tightening
* fix(sessions): keep provenance proof-only on wire fallbacks and strip node-local lineage from cron continuations
* fix(gateway): never journal a created event for session adoption
* fix(gateway): keep post-create work on adoption while gating the created event
* fix(sessions): restore trusted ensure-main provenance and stamp navigation parent at spawn
* fix(sessions): allow parentSessionKey through the direct child spawn patch
* fix(ci): break type cycles, satisfy export scan, regenerate Swift protocol models
* refactor(sessions): replace createdBy with createdActor
* fix(protocol): export session row type
* fix(sessions): preserve proven creation provenance
* fix(sessions): close lineage creation gaps
* test(sessions): align atomic spawn lineage coverage
* test(sessions): widen transcript search reconcile wait
* fix(sessions): stamp reset-created rows
* test(sessions): keep reset provenance coverage focused
* fix(sessions): journal chat-created rows
* test(ci): anchor release skill reads to repo
* test(ci): avoid cached module paths
2026-07-22 22:54:31 -04:00
Peter Steinberger
cf2f591161
feat(sessions): permanent creator attribution, owner avatars, person filter, multi-user docs ( #112658 )
...
* feat(sessions): persist creator attribution
* feat(ui): add session creator filtering
* chore(sessions): refresh sqlite schema baseline
* docs(security): explain shared-agent trust
* fix(sessions): project catalog creator ownership
* fix(ui): restore startup JS budget headroom for creator attribution
2026-07-22 05:47:21 -07:00
Peter Steinberger
5808b72ed6
refactor(models): own compat in provider catalogs ( #112542 )
2026-07-22 02:14:29 -07:00
Peter Steinberger
d4f19bfd79
feat(sessions): first-class archived-session handling (tri-state filter, pruning exemption, inline archived UI) ( #112554 )
...
* feat(sessions): first-class archived-session handling
Archived sessions are now exempt from every automatic maintenance path
(age prune, entry cap, model-run prune, disk budget, cleanup repairs);
only explicit sessions.delete removes them. sessions.list gains an
additive tri-state archived filter (true | false | "all"). The sidebar
gets a persisted Active/Archived/All status filter with inline dimmed
archived rows, replacing the nav-away View-archived button; the Sessions
page toggle becomes the same tri-state with dimmed+badged rows in All
mode; the chat composer's archived notice becomes a full-width banner
with an Unarchive action.
* chore(protocol): regenerate Swift gateway models for tri-state archived filter
2026-07-22 01:28:53 -07:00
Dallin Romney
132d91e427
refactor(qa): make taxonomy coverage ids unique ( #110280 )
2026-07-22 16:28:44 +09:00
Peter Steinberger
3c4a1ec905
refactor(agents): move CLI backend adapters from config DSL to registerCliBackend plugins (review request) ( #112539 )
...
* refactor(agents): move CLI backend adapters into plugins
* test(agents): register CLI backend fixtures through plugins
2026-07-22 00:25:29 -07:00
Dallin Romney
3946bcc20c
fix(qa): run isolated Matrix evidence partitions in parallel ( #112465 )
...
* fix(qa): parallelize isolated Matrix evidence partitions
* refactor(qa): plan adapter instance concurrency
* fix(qa): let Docker assign Matrix harness ports
* refactor(qa): use instance isolation for Matrix concurrency
* test(ci): expect maturity concurrency six
* refactor(qa): remove Matrix harness manifest
2026-07-22 14:45:52 +09:00
Peter Steinberger
e81a2ce657
feat(ui): show chat run startup status ( #112339 )
...
* feat(ui): show chat run startup status
* refactor(agents): isolate run status emission
* chore(protocol): refresh startup status models
* refactor(swift): remove unused chat helpers
* test(swift): align retry and i18n fixtures
* fix(swift): restore outbox display helper
2026-07-21 21:25:23 -07:00
Peter Steinberger
edecdbd05e
refactor(config): config-surface reduction tranche 3 — product consolidations (review request) ( #111527 )
...
* refactor(config): consolidate media model lists
* refactor(config): unify memory configuration
* refactor(config): consolidate TTS ownership
* refactor(config): move typing policy to agents
* refactor(config): retire product-level config surfaces
* refactor(config): share scoped tool policy type
* chore(config): refresh generated baselines
* fix(config): honor agent typing overrides
* fix(config): migrate sibling config consumers
* refactor(infra): keep base64url decoder private
* fix(config): strip invalid legacy TTS values
* chore(config): refresh rebased baseline hash
* fix(doctor): route legacy messages.tts.realtime voice to talk during tts move
* refactor(config): polish final layout names
* refactor(config): freeze retired tuning defaults
* feat(config): add fast mode default symmetry
* refactor(config): key agent entries by id
* docs(config): update final layout reference
* test(config): cover final layout migrations
* chore(config): refresh final layout baselines
* fix(config): align final layout runtime readers
* fix(config): align remaining readers
* fix(config): stabilize final layout migrations
* fix(config): finalize config projection proof
* fix(config): address final layout review
* docs(release): preserve historical config names
* fix(config): complete keyed agent migration
* fix(config): close final migration gaps
* fix(config): finish full-branch review
* fix(config): complete runtime secret detection
* fix(config): close final review findings
* fix(config): finish canonical docs and heartbeat migration
* fix(config): integrate latest main after rebase
* refactor(env): isolate test-only controls
* refactor(env): isolate build and development controls
* refactor(env): collapse process identity indirection
* refactor(env): remove duplicate config and temp aliases
* docs(env): define the operator-facing allowlist
* ci(env): ratchet production variable count
* fix(env): remove stale provider helper import
* fix(env): make ratchet sorting explicit
* test(env): keep test seam in dead-code audit
* test(env): cover ratchet growth and boundary; document surface budgets
* docs(config): document tier-eval consolidations
* docs(config): clarify speech preference ownership
* test(memory): align retired tuning fixtures
* refactor(memory): freeze engine heuristics
* refactor(config): apply tier-eval tranche
* refactor(tts): move persona shaping to providers
* refactor(compaction): move prompt policy to providers
* test(config): align hookified prompt fixtures
* chore(deadcode): classify test-only exports
* chore(github): remove unused spawn helper
* chore(deadcode): classify queue diagnostics
* chore(deadcode): remove unused lane snapshot export
* chore(plugin-sdk): ratchet consolidated surface
* fix(config): integrate latest main after rebase
2026-07-21 20:28:43 -07:00
Peter Steinberger
6c3caa38ab
fix(ui): allow direct sessions in non-Git folders ( #112433 )
...
* fix(ui): allow direct sessions in non-Git folders
* test: align New Session fixtures with place picker
* fix(ui): preserve worktree intent on Git probe failures
* fix(types): keep worktree status alias internal
2026-07-21 19:36:53 -07:00
Peter Steinberger
c84921634d
fix(macos): require explicit consent for privacy-sensitive access ( #112321 )
...
* fix(macos): avoid passive Automation prompts
* fix(macos): keep Voice Wake recognition on device
* fix(macos): require consent for activity presence
* chore(apps): refresh native i18n inventory
* fix(macos): preserve presence clears across gateway versions
* fix(macos): prioritize activity privacy opt-out
* chore(apps): refresh native i18n inventory
* fix(macos): scrub legacy presence activity
* fix(macos): migrate permission status caller
* fix(macos): preserve unknown permission state
* fix(macos): refresh privacy change artifacts
* refactor(macos): remove stale presence helper
* fix(deps): patch URI and Jaeger advisories
* test(gateway): adopt pairing-bound node sessions
2026-07-21 15:28:13 -07:00
Sebastien Tardif
3b565eb345
fix(agents): do not label finish_reason error as LLM timeout ( #109313 )
...
* fix(agents): do not label finish_reason error as LLM timeout
Bare provider finish/stop reason `error` is a completed failure, not a
hang. Classify it as server_error so failover stays eligible, and keep
the provider signal in user-facing copy instead of rewriting to
"LLM request timed out." Abort/network/malformed finish reasons remain
timeout-like.
Fixes #109218 .
Signed-off-by: Sebastien Tardif <sebtardif@ncf.ca >
* test(agents): assert concrete finish_reason error copy
Avoid optional-string chaining that fails check-test-types (TS18048).
Signed-off-by: Sebastien Tardif <sebtardif@ncf.ca >
* fix(docs-sync): declare pruneOrphanLocaleDocs in .d.mts
Root test types import the export from docs-sync-publish.mjs, but the
declaration file omitted it after the recent docs-sync change on main.
Unblocks check-test-types for this PR and current main.
Signed-off-by: Sebastien Tardif <sebtardif@ncf.ca >
* fix(scripts): register finish-reason proof script for knip
* docs(agents): classify bare finish_reason error as server_error
Align model-failover docs with the #109218 classifier: provider-completed
bare error stop/finish reasons are server_error (500), not timeout.
Expand the controlled-provider proof to show stream map, failover status,
user copy, and model-fallback eligibility.
Signed-off-by: Sebastien Tardif <sebtardif@ncf.ca >
* fix(scripts): drop unrelated docs-sync .d.mts drift
check-guards fails: pruneOrphanLocaleDocs is declared in
docs-sync-publish.d.mts but not exported from the .mjs. That
declaration was not part of the finish_reason error fix; restore
the main contract.
Signed-off-by: Sebastien Tardif <sebtardif@ncf.ca >
* test(agents): cover finish reason error transport
---------
Signed-off-by: Sebastien Tardif <sebtardif@ncf.ca >
Co-authored-by: Altay <altay@hey.com >
2026-07-21 14:13:08 +03:00
Peter Steinberger
3d3fd97c7d
fix(ui): tighten Labs settings spacing ( #112038 )
2026-07-21 01:28:32 -07:00
Peter Steinberger
473f2aca33
fix(gateway): honor session title model routing ( #111757 )
...
Route automatic dashboard titles through the effective session model and auth profile while preserving explicit cross-provider utility ownership and the existing generic title fallback.
2026-07-20 02:19:57 -07:00
Peter Steinberger
200653bd60
fix(gateway): generate dashboard titles despite sender metadata ( #111613 )
...
* fix(gateway): keep sender identity out of session titles
* docs(changelog): note dashboard session title fix
* test(gateway): type dashboard sender fixture
* docs: keep session title release note in PR
2026-07-19 20:26:28 -07:00
Peter Steinberger
bcbbf28093
docs(plugin-sdk): migrate retained SDK contracts ( #111535 )
...
* refactor(plugin-sdk): finish retained public demotions
* test(plugin-sdk): tighten surface budgets
* fix(plugin-sdk): retain static tool metadata contract
* fix(plugin-sdk): keep retained exports pending
* fix(plugin-sdk): satisfy registry lint
* docs(plugin-sdk): document retained consumer seams
2026-07-19 15:00:45 -07:00
Peter Steinberger
c7e7ac2728
refactor: remove expired plugin compatibility surfaces ( #111451 )
...
* docs(secrets): remove retired web credential paths
* refactor(web): remove retired provider compatibility paths
* refactor(providers): delete retired compatibility routes
* refactor(secrets): remove retired credential aliases
* refactor(plugin-sdk): delete retired compatibility surfaces
* docs(plugin-sdk): remove retired migration guidance
* chore(plugin-sdk): refresh rebased surface budgets
* chore(plugin-sdk): refresh API removal baseline
* refactor(compat): migrate retired internal callers
* chore(plugin-sdk): refresh current-main baselines
* test(config): migrate plugin-owned secret assertions
* test(gateway): narrow plugin secret refs
* fix(plugin-sdk): preserve private boundary type identity
* chore(compat): remove stale sweep references
* chore(lint): lower max-lines budget
* refactor(secrets): remove unused web helper
* build(plugin-sdk): drop removed compat entries
* chore(plugin-sdk): refresh rebased API baseline
* chore(plugin-sdk): use Linux API baseline hash
* fix(plugin-sdk): preserve private bundled build entries
* fix(plugin-sdk): package private runtime facades
* fix(plugins): preserve external credential contracts
2026-07-19 11:04:48 -07:00
Peter Steinberger
783a5d21cf
refactor(config): purge numeric tuning knobs behind built-in defaults ( #111382 )
2026-07-19 07:35:45 -07:00
Peter Steinberger
ccea4ea440
fix(models): support nested policy wildcards ( #111350 )
2026-07-19 06:47:42 -07:00
Peter Steinberger
ef91ce5712
feat: keep reset session history searchable ( #111194 )
...
* feat(sessions): retain reset history in sqlite with physical disk budget
* fix(sessions): satisfy test-types, knip export scan, and docs map
* fix(sessions): align behavioral suites and flip proof with retained history, route-aware cleanup plans
2026-07-19 03:38:51 -07:00
Peter Steinberger
e23dde3de5
feat: disable automatic session resets by default ( #111140 )
...
* feat(config): disable automatic session resets by default
* fix(sessions): honor pending reset tombstones
* test(sessions): align reset coverage with disabled default
* fix(sessions): preserve explicit reset override fallback
* fix(sessions): inherit active mode in partial type resets
2026-07-18 21:50:48 -07:00
YangManBOBO
ed546bdcf5
fix(auth): expired OAuth credentials survive per-provider credential discovery and silently break background operations ( #110678 )
...
* fix(auth): reject expired OAuth credentials in provider credential discovery
* test(auth): verify expired first profile is skipped for same-provider validation
* fix(auth): prefer non-expired OAuth profile in per-provider credential map
* fix(auth): use canonical profile order in discovery
* docs(auth): document expired OAuth ordering
* test(auth): use synthetic credential fixtures
* test(auth): clarify resolved profile fixtures
* test(auth): keep profile result names consistent
* test(cli): relax ACP process deadlines under load
* style(cli): format ACP process timeout
---------
Co-authored-by: Peter Steinberger <steipete@gmail.com >
2026-07-18 20:13:34 -07:00
Peter Steinberger
d96a87e8e9
docs: document session automation contracts ( #111095 )
2026-07-18 18:10:14 -07:00
Peter Steinberger
4b7d6fa3bf
docs: align interactive client behavior ( #111047 )
2026-07-18 17:00:14 -07:00
Peter Steinberger
a5ec26fa3c
fix: prevent LINE channel reloads from hanging on stalled deliveries ( #110971 )
...
* fix(channels): bound ingress shutdown and document retention
* docs(channels): note ingress shutdown behavior
* chore: keep release notes in pull request
* docs: refresh documentation map
* fix(line): preserve deferred claims during shutdown
* fix(line): handle late abandonment failures
2026-07-18 23:25:33 +01:00
sheyanmin
ff3ed99cde
fix(usage-bar): validate meter width with strict integer parsing ( #110410 )
...
* fix(usage-bar): validate meter width with strict integer parsing
* fix(usage-bar): restore canonical meter width range [0, 100]
* fix(usage-bar): preserve bounded meter defaults
Co-authored-by: sheyanmin <she.yanmin@xydigit.com >
---------
Co-authored-by: Peter Steinberger <steipete@gmail.com >
2026-07-18 21:57:11 +01:00
Peter Steinberger
09a64f7ab0
feat(models): make per-agent allowlists explicit ( #110888 )
2026-07-18 21:42:05 +01:00
Peter Steinberger
6589788c02
docs: The main session concept page and shipped-sidebar updates ( #110905 )
...
* docs: add The main session concept page and cross-links
* docs: precise memory-priming wording on the main-session page
* docs: update Control UI sidebar description to the Home and zones model
2026-07-18 20:23:09 +01:00
Peter Steinberger
01a9e1d398
feat(memory): default cross-conversation recall for personal installs ( #110597 )
...
* feat(memory): default private recall for personal installs
* fix(memory): repair remember-across CI checks
2026-07-18 12:16:49 +01:00
Peter Steinberger
75b1ac12df
feat(onboarding): enable lean mode for local models ( #110596 )
2026-07-18 10:31:58 +01:00
Dave Morin
4b3ee5e7eb
feat: let agents remember across private conversations ( #100140 )
...
* feat(memory): remember across private conversations
Co-authored-by: Vincent Koc <25068+vincentkoc@users.noreply.github.com >
* chore(docs): regenerate config baseline
* fix(memory): restore recall configuration wiring
* fix(memory): scope recall transcript indexing
* test(memory): repair conversation recall fixtures
* test(memory): split session visibility coverage
* style(memory): format type imports
---------
Co-authored-by: Vincent Koc <25068+vincentkoc@users.noreply.github.com >
Co-authored-by: Peter Steinberger <steipete@gmail.com >
2026-07-18 08:21:43 +01:00
Peter Steinberger
746d257f05
feat: contract sessions-family tool outputs ( #110424 )
...
* feat(agents): contract sessions-family tool outputs
* refactor(agents): remove unused fast-mode exports
2026-07-18 06:43:12 +01:00
Peter Steinberger
1c225c855d
fix: CLI timeout warnings explain stopped work ( #110369 )
...
* fix: clarify CLI timeout failures
* docs: update timeout docs map
2026-07-18 06:18:11 +01:00
Peter Steinberger
bee40b9e8e
fix(messaging): align lifecycle follow-ups ( #110413 )
2026-07-18 06:14:24 +01:00
Peter Steinberger
d8f2645c2c
refactor(memory-wiki): move compiled cache to plugin state ( #110167 )
...
* feat(plugin-sdk): prepare memory prompts asynchronously
* refactor(memory-wiki): move compiled cache to plugin state
* fix(plugin-sdk): export memory prompt preparer type
* refactor(plugin-sdk): keep prompt preparer type private
* test(memory-wiki): isolate compiled cache state
* chore(memory-wiki): satisfy changed gates
* fix(memory): preserve prepared prompts across context engines
* docs(plugin-sdk): refresh API baseline
* fix(memory): revalidate prepared prompt ownership
* fix(codex): propagate sandboxed memory context
* test(memory-wiki): seed durable vault identity
* refactor(memory-wiki): keep cache lifecycle internal
* fix(memory-wiki): harden compiled cache publication
* style(memory-wiki): format cache lifecycle changes
* test(memory-wiki): support extension test lib target
* style(memory-wiki): remove redundant catch
* refactor(memory-wiki): keep vault generation helper private
2026-07-18 03:05:03 +01:00
mushuiyu886
8a234980ea
fix(usage-bar): bound numeric verb arguments ( #105297 )
...
* fix(usage-bar): bound numeric verb arguments
* fix(usage-bar): preserve supported fixed precision
* fix(usage-bar): validate fixed precision
Co-authored-by: 杨浩宇0668001029 <yang.haoyu@xydigit.com >
* docs: refresh generated docs map
---------
Co-authored-by: Peter Steinberger <steipete@gmail.com >
2026-07-18 02:32:02 +01:00
Peter Steinberger
3d1e8f9475
perf(agents): compose conversation tools in code mode ( #110098 )
2026-07-17 20:54:32 +01:00
Peter Steinberger
8020dd3e08
fix(reef): discover trusted peers as conversations ( #109905 )
...
* fix(reef): discover trusted peer conversations
* test(reef): document temporary state cleanup
* test(gateway): include conversation discovery in method order
* chore: leave changelog to release automation
* fix(gateway): preserve configured conversation discovery
* fix(gateway): validate turns before session binding
* fix(gateway): preserve directory conversation identity
2026-07-17 13:55:30 +01:00
Peter Steinberger
a2ec3f6904
refactor: separate external conversations from local sessions ( #109411 )
...
* feat: separate external conversations from sessions
* test: cover conversation tool authorization
* chore: refresh session schema baseline
* fix: persist effective conversation delivery text
* fix: bind conversation identity to delivery target
* fix: preserve pending conversation deliveries
* fix: make conversation delivery outcomes synchronous
* refactor: make conversation delivery durable
* fix: harden durable conversation retries
* fix: close durable conversation pre-send gaps
* fix: terminally reject invalid conversation deliveries
* refactor: route external conversations through gateway
* fix: namespace conversation delivery queue intents
* refactor: remove obsolete transcript replacement path
* test: prove conversation delivery v10 migration
* test: keep conversation action mock typed
* fix: clear conversation refactor CI gates
* test: align Reef delivery coverage
* chore: refresh Android conversation strings
* fix: harden external conversation state
* fix: close conversation race edges
* fix: preserve conversation delivery identity
* fix: replay durable conversation operations
* fix: unify agent schema at version 11
* chore: move release note context to PR
* fix: make required queue persistence force core delivery
* chore: refresh plugin SDK baseline
2026-07-17 00:09:51 -07:00
Peter Steinberger
e873a7f955
refactor(memory): move QMD coordination to SQLite ( #109636 )
...
* refactor(memory): move QMD coordination to SQLite
* chore: keep release notes in PR body
* chore: annotate lease SQLite primitive
2026-07-16 22:01:34 -07:00
Peter Steinberger
349f78776d
fix(models): refresh bundled provider catalogs ( #109410 )
...
* fix(models): refresh bundled provider catalogs
* docs(models): refresh generated docs map
* fix(xiaomi): keep provider helper private
* chore(release): defer catalog release note
2026-07-16 16:47:25 -07:00
Peter Steinberger
7a45a65827
fix: recover from temporary provider overloads ( #109354 )
...
* fix(auto-reply): retry provider overloads
* fix(auto-reply): type notice delivery errors
* fix(auto-reply): guard overload replay safety
* fix(auto-reply): close overload retry races
* test(auto-reply): inject operation abort signals
* docs: leave overload note to release automation
* test(auto-reply): cover capacity retry exhaustion
2026-07-16 15:13:44 -07:00
NianJiu
42ff5ec754
feat(kimi): add Kimi K3 support ( #109202 )
...
* feat(moonshot): add Kimi K3 support
* feat(kimi): add K3 subscription models
---------
Co-authored-by: NianJiuZst <180004567+NianJiuZst@users.noreply.github.com >
Co-authored-by: Peter Steinberger <steipete@gmail.com >
2026-07-16 11:41:12 -07:00
Peter Steinberger
2cd3ee43ee
refactor: store workspace setup state in SQLite ( #109147 )
...
* refactor(state): move workspace setup state to SQLite
* test(state): track workspace cleanup temp dirs
* fix(state): satisfy workspace migration gates
* docs(state): fix migration list indentation
* fix(state): verify sibling migration claims
* fix(state): remove obsolete claim probe
2026-07-16 10:28:36 -07:00
Yuval Dinodia
af05f64f01
fix(agents): preserve worktree-local ignored state during lossless cleanup ( #108401 )
...
* fix(worktrees): preserve provisioned cleanup state
Co-authored-by: yetval <yetvald@gmail.com >
* refactor(worktrees): break provisioned registry cycle
---------
Co-authored-by: Peter Steinberger <steipete@gmail.com >
2026-07-16 07:06:25 -07:00
Peter Steinberger
e2fed32131
fix(onboarding): explain how to get provider tokens and revive logged-out CLI candidates ( #108739 )
...
* fix(onboarding): explain how to obtain provider tokens in auth setup copy
* fix(onboarding): add per-CLI login remediation to detected candidate details
2026-07-16 01:12:15 -07:00
Dallin Romney
9a2f25c82b
refactor(qa): make channel drivers run-level ( #108602 )
2026-07-16 00:59:03 -07:00
Peter Steinberger
3c8269ca52
refactor(codex)!: fold the codex text provider into openai with a doctor migration
...
The live codex text provider was a redundant projection of the openai
catalog (exclusive provider ownership; the openai plugin's ChatGPT OAuth
discovery already serves gpt-5.6-* route-aware). Folding it:
- extensions/codex no longer registers a text provider, catalog entry, or
synthetic text auth; provider.ts/provider-catalog.ts/provider-discovery.ts
and the route-blind model-name heuristics are deleted; the narrow
post-harness reasoning fallback moves to an app-server-owned module
- openai thinking policy keys on explicit selected-route provenance
(api === openai-chatgpt-responses) instead of value-shape inference
- models.list gains an optional additive agentRuntime field (configured
intent); session agentHarnessId remains the execution proof
- doctor --fix migrates the shipped codex/* config shape end to end:
every model slot, provider-config merge with blocker-aware conflict
handling, sessions, cron payloads (two-phase: runtime policy persists
before cron refs rewrite), transcripts; migrated refs carry model-scoped
agentRuntime.id=codex preserving the shipped wizard semantics; auto
runtime policies normalize to codex with sibling fields preserved;
blocked provider conflicts retain the whole legacy namespace fail-closed
with an actionable warning
- the stale openai:default profile cleanup (#91352 ) was deliberately
deferred to a follow-up after review showed it needs per-agent identity
proofs; doctor keeps warning about unusable profiles
Fixes #105561
Fixes #84637
Fixes #90420
2026-07-16 03:06:43 +01:00
Dallin Romney
2d9b78fff7
refactor(qa): canonicalize live scenario coverage ( #108464 )
2026-07-15 16:50:41 -07:00