fix(gateway): hot-reload browser profile config#93827
Conversation
f432504 to
a0e0f44
Compare
|
Codex review: needs changes before merge. Reviewed July 6, 2026, 11:32 AM ET / 15:32 UTC. Summary PR surface: Source +8, Tests +80. Total +88 across 5 files. Reproducibility: yes. Current main maps Review metrics: 1 noteworthy metric.
Root-cause cluster Members:
Proposal only: this assessment does not dispatch repair, suppress jobs, mutate sibling items, close, or merge anything. Merge readiness Overall follows the weaker of proof and patch quality, so missing proof can cap an otherwise strong patch. Rank-up moves:
Risk before merge
Maintainer options:
Copy recommended automerge instructionNext step before merge
Security Review findings
Review detailsBest possible solution: Merge the reload-policy fix with docs that distinguish Do we have a high-confidence way to reproduce the issue? Yes. Current main maps Is this the best way to solve the issue? Yes, with a docs follow-up. The PR fixes the owner boundary by adding plugin reload metadata plus specific-prefix matching, while preserving restart behavior for broader browser settings. Full review comments:
Overall correctness: patch is correct AGENTS.md: found and applied where relevant. Codex review notes: model internal, reasoning high; reviewed against 9606fe43231b. Label changesLabel changes:
Label justifications:
Evidence reviewedPR surface: Source +8, Tests +80. Total +88 across 5 files. View PR surface stats
Acceptance criteria:
What I checked:
Likely related people:
What the crustacean ranks mean
Shiny media proof means a screenshot, video, or linked artifact directly shows the changed behavior. Runtime, network, CSP, and security claims still need visible diagnostics. How this review workflow works
Review history (1 earlier review cycle)
|
|
@vincentkoc can you review when you get a chance? thanks! |
|
This pull request has been automatically marked as stale due to inactivity. |
a0e0f44 to
c4a504e
Compare
|
Land-ready proof for
Known proof gaps: none. |
|
Merged via squash.
|
* fix(gateway): hot-reload browser profile config * refactor(gateway): cache reload rule specificity * fix(gateway): pin reload policy to gateway registry --------- Co-authored-by: Peter Steinberger <steipete@gmail.com>
* fix(gateway): hot-reload browser profile config * refactor(gateway): cache reload rule specificity * fix(gateway): pin reload policy to gateway registry --------- Co-authored-by: Peter Steinberger <steipete@gmail.com>
Summary
What problem does this PR solve?
browser.profiles.*changes can hot-reload instead of forcing a gateway restart.browser.enabledandbrowser.defaultProfile, restart-scoped.Why does this matter now?
What is the intended outcome?
What is intentionally out of scope?
What does success look like?
browser.profiles.sandbox.cdpUrlresolves tohot.browser.enabledandbrowser.defaultProfilecontinue resolving torestart.What should reviewers focus on?
browser.profilesis the correct narrow hot-reload boundary.config.patchbehavior.Linked context
Which issue does this close?
Closes #43803
Which issues, PRs, or discussions are related?
Related #64204
Was this requested by a maintainer or owner?
queueable-fix,fix-shape-clear, andsource-repro.Real behavior proof (required for external PRs)
browserrestart rule, so profile-only changes could schedule a gateway restart instead of hot reload.gateway.reload.mode: "hot".node scripts/build-all.mjs.browser.profiles.sandbox.browser.profiles.sandbox.cdpUrlandbrowser.enabled.config.schema.lookup browser.profiles.sandbox.cdpUrl -> {"path":"browser.profiles.sandbox.cdpUrl","reloadKind":"hot"};config.schema.lookup browser.enabled -> {"path":"browser.enabled","reloadKind":"restart"};health -> {"ok":true,"loadedPlugins":["browser"]}.config.patchthrough a fully paired external client was not completed.config.patchwas blocked by the gateway pairing/scope-upgrade flow. The patch path is covered by the authenticated server-method regression test.browser.profiles.sandbox.cdpUrlreproduced as restart-scoped in the focused reload-plan regression before this patch. The authenticatedconfig.patchregression also reproduced a scheduled gateway restart for the same profile-only path before this patch.Tests and validation
Which commands did you run?
node scripts/test-projects.mjs src/gateway/config-reload.test.ts -- --testNamePattern "browser profile" --reporter=verbosenode scripts/test-projects.mjs src/gateway/server-methods/config.shared-auth.test.ts -- --testNamePattern "browser profile" --reporter=verbosenode scripts/test-projects.mjs extensions/browser/index.test.ts -- --testNamePattern "static browser metadata" --reporter=verbosenode scripts/test-projects.mjs src/gateway/config-reload.test.ts extensions/browser/index.test.ts src/gateway/server-methods/config.shared-auth.test.tsnode_modules/.bin/oxfmt --check src/gateway/config-reload-plan.ts src/gateway/config-reload.test.ts src/gateway/server-methods/config.shared-auth.test.ts extensions/browser/plugin-registration.ts extensions/browser/index.test.tsnode_modules/.bin/oxlint src/gateway/config-reload-plan.ts src/gateway/config-reload.test.ts src/gateway/server-methods/config.shared-auth.test.ts extensions/browser/plugin-registration.ts extensions/browser/index.test.tsgit diff --checknode scripts/build-all.mjsWhat regression coverage was added or updated?
browser.profiles.sandbox.cdpUrlplans as hot reload even when a broaderbrowserrestart rule exists.hotPrefixes: ["browser.profiles"].config.patchcoverage proving a browser profile-only change does not schedule a gateway SIGUSR1 restart in hot mode.What failed before this fix, if known?
browser.profiles.sandbox.cdpUrlstill producedrestartGateway: true.scheduleGatewaySigusr1Restartwas called for a browser profile-only patch.If no test was added, why not?
Risk checklist
Did user-visible behavior change? (
Yes/No)Yes
Did config, environment, or migration behavior change? (
Yes/No)Yes
Did security, auth, secrets, network, or tool execution behavior change? (
Yes/No)No
What is the highest-risk area?
How is that risk mitigated?
Current review state
What is the next action?
What is still waiting on author, maintainer, CI, or external proof?
Which bot or reviewer comments were addressed?