fix(doctor): preserve unknown web search records#83315
Conversation
|
Codex review: needs maintainer review before merge. Workflow note: Future ClawSweeper reviews update this same comment in place. How this review workflow works
Summary Reproducibility: yes. from source inspection: current main only preserves PR rating Rank-up moves:
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. Real behavior proof Next step before merge Security Review detailsBest possible solution: Land this PR or an equivalent narrow fix after maintainer review so doctor preserves extension-owned web-search records without weakening legacy-provider migration or prototype-key safety. Do we have a high-confidence way to reproduce the issue? Yes, from source inspection: current main only preserves Is this the best way to solve the issue? Yes. Updating both the migration normalization and the schema boundary is the narrow maintainable fix because the config type is already extensible, while known legacy provider records and blocked prototype keys remain explicitly guarded. Label justifications:
What I checked:
Likely related people:
Codex review notes: model gpt-5.5, reasoning high; reviewed against 6048cd43a5ab. |
|
Reviewed and fixed the prototype-key blocker from the prior ClawSweeper pass. Change in
Verification:
Note: WSL @clawsweeper re-review |
|
🦞🧹 I asked ClawSweeper to review this item again. Re-review progress:
|
|
@clawsweeper re-review Updated the patch and PR body after real Verification:
|
|
🦞🧹 I asked ClawSweeper to review this item again. Re-review progress:
|
6e8f873 to
1dec7e0
Compare
|
🦞🧹 I asked ClawSweeper to review this item again. Re-review progress:
|
|
ClawSweeper PR egg ✨ Hatched: 🥚 common Velvet Review Wisp Hatch commandComment Hatchability rules:
Rarity: 🥚 common. What is this egg doing here?
|
* fix(doctor): preserve unknown web search records * fix(doctor): filter dangerous web search keys * fix(config): preserve extensible web search settings * fix(config): keep legacy web search validation strict * fix(config): reject blocked web search keys
* fix(doctor): preserve unknown web search records * fix(doctor): filter dangerous web search keys * fix(config): preserve extensible web search settings * fix(config): keep legacy web search validation strict * fix(config): reject blocked web search keys
* fix(doctor): preserve unknown web search records * fix(doctor): filter dangerous web search keys * fix(config): preserve extensible web search settings * fix(config): keep legacy web search validation strict * fix(config): reject blocked web search keys
* fix(doctor): preserve unknown web search records * fix(doctor): filter dangerous web search keys * fix(config): preserve extensible web search settings * fix(config): keep legacy web search validation strict * fix(config): reject blocked web search keys
* fix(doctor): preserve unknown web search records * fix(doctor): filter dangerous web search keys * fix(config): preserve extensible web search settings * fix(config): keep legacy web search validation strict * fix(config): reject blocked web search keys
* fix(doctor): preserve unknown web search records * fix(doctor): filter dangerous web search keys * fix(config): preserve extensible web search settings * fix(config): keep legacy web search validation strict * fix(config): reject blocked web search keys
* fix(doctor): preserve unknown web search records * fix(doctor): filter dangerous web search keys * fix(config): preserve extensible web search settings * fix(config): keep legacy web search validation strict * fix(config): reject blocked web search keys
* fix(doctor): preserve unknown web search records * fix(doctor): filter dangerous web search keys * fix(config): preserve extensible web search settings * fix(config): keep legacy web search validation strict * fix(config): reject blocked web search keys
* fix(doctor): preserve unknown web search records * fix(doctor): filter dangerous web search keys * fix(config): preserve extensible web search settings * fix(config): keep legacy web search validation strict * fix(config): reject blocked web search keys
* fix(doctor): preserve unknown web search records * fix(doctor): filter dangerous web search keys * fix(config): preserve extensible web search settings * fix(config): keep legacy web search validation strict * fix(config): reject blocked web search keys
* fix(doctor): preserve unknown web search records * fix(doctor): filter dangerous web search keys * fix(config): preserve extensible web search settings * fix(config): keep legacy web search validation strict * fix(config): reject blocked web search keys
Summary
tools.web.searchentries during legacy web search migrationtools.web.searchvalidation with its extensible config type so doctor writes do not drop extension-owned settings, while still rejecting known legacy provider-scoped recordsapiKeyFixes #83287.
Real behavior proof
Behavior addressed: legacy web search migration should move known provider-owned settings while preserving unrelated extension-owned
tools.web.searchrecords.Real environment tested: WSL Ubuntu OpenClaw source checkout at PR head
154550b971d0on branchtmp-pr-83315-proof.Exact steps or command run after this patch:
OPENCLAW_CONFIG_PATH="$cfg" node --import tsx src/entry.ts doctor --fix --non-interactive --no-workspace-suggestions.Evidence after fix: the command below migrated the legacy Brave key while preserving unrelated record-valued search settings in the written config.
Observed result after fix:
doctor --fixmigrated the legacy global search key toplugins.entries.brave.config.webSearch.apiKey, removedtools.web.search.apiKey, and preserved bothtools.web.search.customSearchandtools.web.search.openaiCodexin the written config.What was not tested: a live web search call using the preserved custom provider record; this proof covers the on-disk doctor migration/write path.
Root Cause
Regression Test Plan
src/commands/doctor/shared/legacy-web-search-migrate.test.ts,src/config/web-search-codex-config.test.ts,src/config/config.web-search-provider.test.ts.tools.web.searchand survives validation.Validation
node node_modules/vitest/vitest.mjs run src/config/config.web-search-provider.test.ts src/config/web-search-codex-config.test.ts src/commands/doctor/shared/legacy-web-search-migrate.test.ts --reporter=dotin WSL: 3 files, 41 tests passed.node node_modules/@typescript/native-preview/bin/tsgo.js --noEmit --pretty false -p tsconfig.jsonin WSL.git diff --check.