Plan complete credential broker retirement - #198
Conversation
f4b1ba25 fix(ci): harden Electron signing credentials [risk:high] (#358) 83c8e364 docs: publish 0.90.0 changelog (#356) 96b73fbb chore: remove useless artifacts file [skip ci] 55b3e028 fix(sessions): stabilize child tab ordering (#326) c2cd3da6 feat(components): add Zen layout mode (#341) 65c2b0c4 Merge pull request #225 from ImSingee/feat/lody-mcp-worktree b6d9a6f2 Merge pull request #309 from jeffwcx/fix/mention-caret-ime ed13fa59 Merge pull request #340 from LodyAI/fix/electron-builder-keychain-password 1ff92abe fix(electron): authenticate temporary signing keychain [risk:high] 289bb7b4 feat(cli): add MCP session rename tools (#337) 8de7851e fix(components): collapse inline plan approval (#334) bf979598 chore: acp deb82d11 chore: update Feishu community group QR code (#331) 22af000a Merge pull request #173 from Innei/feat/electron-macos-sparkle-updater ef3becb1 chore: merge latest main into Sparkle updater d51546da fix(components): hide onboarding product preview on compact stages (#329) f3f090ae Merge pull request #144 from slashdevcorpse/fix/codex-goal-continuation-and-stop-steer e0657934 Merge pull request #257 from natsustan/feat/mobile-agent-settings 54d07d36 test(turn-diff-store): stabilize incremental GC batching 82d4dc72 chore: merge main into feat/mobile-agent-settings df9f950b Merge pull request #274 from sinxy-sai/codex/fix-markdown-bold-autolink-189 ff27503d fix(components): let expanded proposed plans flow without internal scroll (#315) f5649adb fix(components): right-align submenu chevrons (#313) 6aeeb8f8 fix: hide unknown Claude context usage (#308) 58b93eda fix(components): preserve mention caret during IME composition f8f9be10 refactor(components): deduplicate Markdown AST transforms e3e21294 refactor(components): share mdast child-replacement walker 94bede91 feat(components): show more outline hover-card lines (#303) 947affd0 Merge pull request #285 from MichaelYuhe/fix/mobile-settings-return-context f9347134 Merge pull request #299 from EYHN/feat/browser-blocks-19818375 cd42c044 Merge pull request #291 from EYHN/feat/svg 932c83df fix(cli): harden daemon startup and status (#287) 4e6b6495 docs: add Codex P0/P1 security-focused review rules (#295) db75b03a fix(electron): allow fake-IP proxy answers in the public browser b04d0dcd fix(components): wrap long mention chips in sent messages (#294) 410b1816 Merge pull request #292 from LodyAI/feat/217 a4d0f547 feat: support custom DeepSeek Harness endpoints (#293) 1361a1b6 refactor(components): share malformed GFM autolink repair 99723c25 fix(electron): close the current tab or hide the window on Cmd+W (#235) 54445965 fix(components): attach SVG images as files 870fad32 Merge branch 'LodyAI:main' into codex/fix-markdown-bold-autolink-189 ad787c9b feat(electron): wire Sparkle progress into the renderer banner b351290c feat(electron): switch macOS auto-update to Sparkle 91ffa378 fix(components): restore mobile settings source 896fd1e0 feat(site): add GitHub mark and early-bird deadline (#283) ba6f9009 fix(components): avoid quadratic autolink marker scans 72ec3c01 fix(components): preserve explicit markdown link destinations ad5104a8 docs: publish 0.89.4 changelog [risk:high] (#281) 3beeb8a0 chore: upgrade built-in Claude Code to 2.1.258 (#279) dabbf960 fix(cli): scope All Changes to local worktrees (#280) 376bf98a fix(electron): report update install failures instead of success (#278) f38ed4d3 fix(sessions): keep composer roles stable across turns (#269) 620fcfac fix(components): repair later valid bold URL closer 857e3095 fix(components): normalize mixed-case www links 88f54c35 fix(components): preserve triple-star emphasis dcbe49d6 fix(components): narrow Markdown punctuation checks a2fc9de7 fix(components): align escaped URL markers e3abc684 fix(components): validate URL strong closers 1d0a0281 fix(components): tighten malformed URL repair 079c7716 fix(components): respect escaped closing markers 9629ffaf fix(components): respect escaped bold markers 4e6968ce fix(components): preserve absolute www autolink destinations bbf83f49 fix(components): repair malformed bold URL autolinks c7d905bf fix(components): make desktop onboarding failures honest and recoverable (#214) 08a3e474 ci: consolidate PR contribution policy (#265) 9f93538c fix(components): localize PR repair prompts (#245) 84bb1c06 fix(components): align sidebar loading skeletons (#266) e0d958e1 fix: complete interactive Custom ACP authentication (#234) 27b56232 fix(acp): map pi, grok, and kimi to the skill dirs their engines scan (#218) d22f12bf fix: address responsive settings review feedback 2a2fcf12 feat(site-docs): point the landing secondary CTA at GitHub (#254) 284deb68 docs: correct changelog version to 0.89.3 [risk:high] (#256) 8ed4dab3 docs: add 0.90.0 changelog [risk:high] (#255) 7cabe456 fix(components): close the remaining render-feedback loops (#253) 9ac6a780 fix: remove unused React import e8d3421f fix(components): derive ACP run-config selection instead of reconciling it (#252) 8859029a feat(components): expose lightweight join surface (#238) 713bf290 feat(components): retry Codex capacity failures (#237) 6b022c1b fix: make provider usage layout container-aware 975e9e4f feat: streamline mobile agent settings 8064b1a0 docs: add 0.89.2 changelog [risk:high] (#250) 460cec05 fix(components): session tab pending-child follow-ups (#249) c22dc434 perf(components): cut session-switch input latency (#247) cac1e2a3 fix(components): take the session ?tab URL at its word (#248) c4b336ac fix(components): allow browsing registered project folders 1857d6e9 docs: add 0.89.1 changelog (#246) d6a23ed2 fix(components): stabilize session location tooltip refs (#241) 1b802d17 chore: bump acp-extension-codex after merge of #28 d0005ef9 feat: acp 970a5b66 docs(changelog): publish 0.89.0 release notes (#236) a36816ab Merge pull request #233 from wong2/fix/codex-resets-attribution-link a8f69fa9 fix(components): avoid void Trans placeholder dd10c9fe Merge pull request #231 from MichaelYuhe/codex/fix-mobile-workspace-settings-spacing 0749b4be Merge pull request #143 from clanzhang/fix/131-restore-input-focus-after-send 55c38e9e chore: kimi acp 2c78927f fix(electron): close the current tab or hide the window on Cmd+W 2cc10249 fix(components): link Codex reset attribution d706e3c6 fix(components): align mobile workspace settings b7b56327 Merge pull request #226 from ImSingee/fix/codex-reset-forecast-overlay 8c957eb0 Merge pull request #205 from Innei/feat/sidebar-project-actions-menu-restyle 5ce0c481 feat(docs): add local documentation search (#228) cef73e5b fix(components): restore blocked goal resume action (#230) 8a674e5b fix(components): inset the desktop workspace chrome out of the safe area (#210) a9067707 Merge pull request #227 from Innei/fix/macos-dev-dock-icon a025a354 fix(electron): set macOS development dock icon 43dda538 feat(components): render every agent's plan through one panel (#221) 60007048 fix(mcp): clarify child session workspace reuse a320b4c6 fix(components): show the waiting-for-approval hand on mobile tab rows (#222) 10051e26 feat(components): add folders per machine from Projects settings (#220) 9f7b81c1 fix(components): correct nested reset forecast overlay 1e40d143 fix(onboarding): give the tour a read-only repo stand-in (#216) 0e3a961a feat(components): put a plan-mode turn on one rail and one panel (#215) 50147494 fix(acp): support standard ACP authentication for registry agents (#208) cf5bf050 fix(components): restore desktop composer focus after successful send 2ddaac47 refactor(components): derive the active session tab from the router URL (#199) e8ab5812 fix(components): align the private status pill with the header launcher (#204) 2363d34b Merge pull request #186 from kovsu/fix/settings-section-corner-clip fe4e5aad feat(components): add local-project row actions and restyle menus 62fa9e2f Merge pull request #129 from 1-WEEK/fix/subsession-model-search-focus a56eaa83 fix(components): grow the Rename Chat field to fit a wrapped title (#202) 2d3b5d0c Merge pull request #169 from Innei/fix/electron-per-panel-window-drag e3cb9825 chore: upgrade built-in AI agent runtimes (#201) 4acff9a6 fix(cli): deliver MCP child-session completion notifications over the HTTP transport (#200) 73e4fc3e Merge pull request #192 from Pleasurecruise/feat/hmr e05486b5 Merge pull request #94 from xuxu777xu/fix/builtin-agent-opt-out 2b803307 fix: bind the workspace GitHub repository to CLI-created local sessions (#197) 872453e4 fix(components): preserve active tab on session reselect (#194) a0c2c77a fix: survive unsendable WebSocket close codes in the local preview proxy (#198) 460cb7d8 fix: publish the dispatch pointer for promoted queue turns (#166) 2b134aa1 fix: align child tab agent role selection (#181) 3f6af469 Merge pull request #190 from LodyAI/fix/mobile-auth-session-401 4185f738 feat(electron): add local hot reload workflow 95e4d02f fix(auth): recover rejected mobile sessions [risk:high] 4c91b8c2 refactor(shared): drop redundant fields from the builtin agent opt-out value d64a99b1 fix(electron): move window drag onto per-panel title bars 41c51a5e fix(settings): clip settings sections to their rounded corners 0c5bedbe feat: let onboarding choose or skip the first Agent (#182) 22f0708c feat: guide empty conversation sync states (#180) aac14534 fix: fill project settings modal height (#177) 7d626837 feat(electron): add hidden auto-launch option (#176) 6db6a72d Merge pull request #95 from ShobhanKarthish/fix/web-focus-input-shortcut 452aded9 Merge pull request #168 from Innei/codex/focus-scope-keyboard-navigation 853ca366 fix(components): keep the cancellation marker as the first write 9b8ea083 chore: split Electron window drag out of the keyboard navigation PR f5b16cfd fix(components): keep multi-tab clickable while solo titles drag the window 0ffacc5e feat: add scoped keyboard navigation 795b34cb chore: bump acp-extension-codex for slash goal continuation tests e4ac99c2 fix: force-direct Codex goal commands and bump acp-extension-codex a02e0b46 fix(components): prevent composer focus stealing when clicking model search in subsession tabs b90d719e fix(shared): own builtin agent opt-out from one place 75d54b37 fix(cli): keep removed builtin agent providers removed across restarts 4822079e fix: stop advertising ⌘L on web composer git-subtree-dir: vendor/lody git-subtree-split: f4b1ba259eb754cd954da776d8e7384a8c30f1c9
|
Superseded by #244, which implements this plan as a single release. The two-release split, the fleet-convergence gate (section 4) and the credential-custody audit (section 5) exist to protect enrolled brokers and deposited credentials. Both control planes hold zero of each, queried 2026-09-05:
Canary also reports no machine carrying a Two other parts of the plan are stale. Everything else in this document was followed, including the rule that |
…hid (#244) * broker: delete the credential broker, and keep the machine bearer it hid The broker is not a supported authentication mode. It enrolled hosted boxes automatically and it overrode a working native Codex login: `blitz-cred register` wrote `model_provider = "blitz"` into `.codex/config.toml`, and a box whose watcher was not running then answered HTTP 401. `plans/BROKER-RETIREMENT.md` (PR #198) planned this in two releases, behind a fleet-convergence gate and a credential-custody audit. Both control planes hold zero broker rows, verified today: prod `51bebbfa-…` and canary `8a3458ff-…` each report broker_boxes 0, broker_members 0, broker_keys 0, and canary reports no machine with a broker_box_id. Nothing is enrolled, so nothing needs draining and no broker disk holds a member's credential. One release does it. Deleted: `packages/broker` whole, the `register` and `watch` s6 services, the `blitz-register` boot script, both token helpers, the broker mint in the `claude` shim, the broker probes in `blitz-codex-session`, the register poke in cloud bootstrap, `core/registry.ts` and its four routes, the broker wire types, `BoxIdentity.isBroker`, the broker key cleanup in the destroy and orphan janitors, the broker CI job and the OCI publish. `/boxes/:id/feed` and the constant workspace environment route go with it. Both were compatibility surfaces for one caller, and that caller was the broker. Kept: `blitz-cred api-token`. Agent rules and the Git credential helper call it, and it is machine authentication rather than a broker feature. It moves to `packages/box/credential-helper` with the primitives it reaches, and keeps its name. Claude and Codex now read their own stores under HOME. Migration 0053 drops `broker_keys`, `broker_members` and `broker_boxes`, and rebuilds `machines` and `boxes` without the columns that referenced them. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01GocywGPN9b8DrcBXR9C4id * broker: the managed build carries a third copy of the core manifest Deleting a core/ file needs four hand-written edits in three files. blitzdev-emitter.test.ts is gated behind BLITZDEV_MANAGED=1, so a plain npm test does not reach it. Its list and its length now match the other two. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01GocywGPN9b8DrcBXR9C4id * box: the credential-refresh script needs its execute bit The new script shipped 0644. s6 answered `s6-applyuidgid: fatal: unable to exec /usr/local/libexec/blitz-credential-refresh: Permission denied`, and only the box image build saw it. Nothing else asserted the mode. rootfs-exec-bits.test.ts now checks every script under usr/local/bin and usr/local/libexec. s6-rc.d run and up files stay 0644 on purpose: s6 runs them through its own launcher. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01GocywGPN9b8DrcBXR9C4id --------- Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com>
What and why
Adds an implementation-ready plan to remove the credential broker after it overrode a valid native Codex login and caused workspace-wide 401s.
The plan separates load-bearing machine authentication from broker behavior, drains existing boxes safely, scrubs persisted Codex provider wiring, audits broker-only credentials, and then purges the daemon, registry, schema, image, and release plumbing.
This PR changes documentation only; it does not delete or disable production broker behavior.
Validation