fix(config): remove core BlueBubbles schema#78612
Conversation
|
Codex review: needs maintainer review before merge. Summary Reproducibility: yes. The linked issue documents the sendTimeoutMs failure from the duplicate strict schema, and current main still visibly carries the duplicate BlueBubbles core schema; this review established the path by source inspection rather than running commands. Real behavior proof Next step before merge Security Review detailsBest possible solution: Resolve the merge conflicts, keep BlueBubbles validation plugin-owned, remove the duplicate core schema, and land the PR once exact-head validation is green. Do we have a high-confidence way to reproduce the issue? Yes. The linked issue documents the sendTimeoutMs failure from the duplicate strict schema, and current main still visibly carries the duplicate BlueBubbles core schema; this review established the path by source inspection rather than running commands. Is this the best way to solve the issue? Yes, functionally. Moving the allowFrom policy checks into the BlueBubbles plugin schema while deleting the core duplicate is the narrow maintainable fix; the remaining blocker is branch conflict resolution, not a code-design issue. Acceptance criteria:
What I checked:
Likely related people:
Remaining risk / open question:
Codex review notes: model gpt-5.5, reasoning high; reviewed against f2b01bb7b142. |
39eb3ab to
7cc8f44
Compare
7cc8f44 to
f8878ca
Compare
* fix(config): remove core BlueBubbles schema * fix(config): preserve BlueBubbles dmPolicy validation * fix(config): type BlueBubbles account refinement * chore(plugin-sdk): refresh API baseline * chore(plugin-sdk): refresh API baseline --------- Co-authored-by: Vincent Koc <vincentkoc@ieee.org>
* fix(config): remove core BlueBubbles schema * fix(config): preserve BlueBubbles dmPolicy validation * fix(config): type BlueBubbles account refinement * chore(plugin-sdk): refresh API baseline * chore(plugin-sdk): refresh API baseline --------- Co-authored-by: Vincent Koc <vincentkoc@ieee.org>
* fix(config): remove core BlueBubbles schema * fix(config): preserve BlueBubbles dmPolicy validation * fix(config): type BlueBubbles account refinement * chore(plugin-sdk): refresh API baseline * chore(plugin-sdk): refresh API baseline --------- Co-authored-by: Vincent Koc <vincentkoc@ieee.org>
* fix(config): remove core BlueBubbles schema * fix(config): preserve BlueBubbles dmPolicy validation * fix(config): type BlueBubbles account refinement * chore(plugin-sdk): refresh API baseline * chore(plugin-sdk): refresh API baseline --------- Co-authored-by: Vincent Koc <vincentkoc@ieee.org>
* fix(config): remove core BlueBubbles schema * fix(config): preserve BlueBubbles dmPolicy validation * fix(config): type BlueBubbles account refinement * chore(plugin-sdk): refresh API baseline * chore(plugin-sdk): refresh API baseline --------- Co-authored-by: Vincent Koc <vincentkoc@ieee.org>
* fix(config): remove core BlueBubbles schema * fix(config): preserve BlueBubbles dmPolicy validation * fix(config): type BlueBubbles account refinement * chore(plugin-sdk): refresh API baseline * chore(plugin-sdk): refresh API baseline --------- Co-authored-by: Vincent Koc <vincentkoc@ieee.org>
Summary
extensions/bluebubbles/src/config-schema.tsand a duplicate strict schema insrc/config/zod-schema.providers-core.ts.OpenClawSchema.safeParsewithmust NOT have additional properties, as seen withchannels.bluebubbles.sendTimeoutMsin Architecture: remove duplicate BlueBubbles schema in core (boundary violation) #69238.extensions/bluebubbles/channel-config-api.ts, and pointed the inherited-allowlist regression test at that plugin-owned schema.Change Type (select all)
Scope (select all touched areas)
Linked Issue/PR
Real behavior proof (required for external PRs)
channels.bluebubbles.sendTimeoutMsshould not be rejected by the duplicate core BlueBubbles schema.pnpm exec tsx -e 'import { OpenClawSchema } from "./src/config/zod-schema.ts"; import { validateConfigObjectRaw } from "./src/config/validation.ts"; const cfg={channels:{bluebubbles:{serverUrl:"http://localhost:1234",password:"secret",sendTimeoutMs:45000}}}; const core=OpenClawSchema.safeParse(cfg); console.log(JSON.stringify({core:core.success, raw:validateConfigObjectRaw(cfg,{validateBundledChannels:true}).ok}));'enrichGroupParticipantsFromContacts.sendTimeoutMsconfig through the plugin/generated validation path.openclaw config set channels.bluebubbles.sendTimeoutMs 45000failing withmust NOT have additional propertiesfrom the duplicate strict core schema.Root Cause (if applicable)
Regression Test Plan (if applicable)
src/config/config.allowlist-requires-allowfrom.test.tsextensions/bluebubbles/channel-config-api.ts, not a duplicate core schema.extensions/bluebubbles/src/setup-surface.test.tscovers BlueBubbles plugin schema behavior directly.User-visible / Behavior Changes
BlueBubbles plugin config fields are no longer blocked by a duplicate core-only schema before plugin/generated channel validation runs.
Diagram (if applicable)
Security Impact (required)
Yes/No) NoYes/No) NoYes/No) NoYes/No) NoYes/No) NoYes, explain risk + mitigation: N/ARepro + Verification
Environment
channels.bluebubbles.serverUrl,channels.bluebubbles.password,channels.bluebubbles.sendTimeoutMsSteps
channels.bluebubbles.sendTimeoutMsthroughOpenClawSchema.safeParse.validateConfigObjectRaw(..., { validateBundledChannels: true }).Expected
Actual
OpenClawSchema.safeParsereturnedcore: truefor the BlueBubblessendTimeoutMsrepro.ok: truewhen the generated-requiredenrichGroupParticipantsFromContactsfield was present.Evidence
Attach at least one:
Verification commands run:
Key output:
Human Verification (required)
What you personally verified (not just CI), and how:
sendTimeoutMs.Review Conversations
If a bot review conversation is addressed by this PR, resolve that conversation yourself. Do not leave bot review conversation cleanup for maintainers.
Compatibility / Migration
Yes/No) YesYes/No) NoYes/No) NoRisks and Mitigations
rgconfirmed the only remaining consumer was moved toextensions/bluebubbles/channel-config-api.ts; core and extension typechecks passed.