Skip to content

Plan complete credential broker retirement - #198

Draft
pythonlearner1025 wants to merge 2 commits into
mainfrom
plan/delete-credential-broker
Draft

Plan complete credential broker retirement#198
pythonlearner1025 wants to merge 2 commits into
mainfrom
plan/delete-credential-broker

Conversation

@pythonlearner1025

@pythonlearner1025 pythonlearner1025 commented Sep 2, 2026

Copy link
Copy Markdown
Member

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

  • npm run typecheck
  • npm run lint:gate
  • env -u FORCE_COLOR NO_COLOR=1 npm test
  • lint-baseline.json was not raised
  • No runtime payload or Go code changed

pythonlearner1025 added a commit that referenced this pull request Sep 4, 2026
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
@pythonlearner1025

Copy link
Copy Markdown
Member Author

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:

Database broker_boxes broker_members broker_keys
prod 51bebbfa-… 0 0 0
canary 8a3458ff-… 0 0 0

Canary also reports no machine carrying a broker_box_id. Nothing is enrolled, so there is nothing to drain and no broker disk holds a member credential.

Two other parts of the plan are stale. blitz-cred enroll was already deleted on 2026-09-04, so only api-token needed rescuing. And the product owner confirms there are no live boxes, so the section 3.4 boot repair is not built.

Everything else in this document was followed, including the rule that packages/broker also holds machine authentication and that it moves rather than dies.

pythonlearner1025 added a commit that referenced this pull request Sep 6, 2026
…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>
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.

1 participant