fix(ui): tolerate malformed cron payloads#76114
Conversation
|
Codex review: needs changes before merge. Summary Reproducibility: yes. A high-confidence source-level reproduction is to put a Cron row with a missing or non-object Next step before merge Security Review findings
Review detailsBest possible solution: Land this narrow UI-boundary hardening after adding valid changelog credit and keeping exact-head validation green, without moving stale persisted-row repair into startup core. Do we have a high-confidence way to reproduce the issue? Yes. A high-confidence source-level reproduction is to put a Cron row with a missing or non-object Is this the best way to solve the issue? Yes for the functional bug. A shared UI payload guard plus list-boundary filtering is the narrowest maintainable fix for stale malformed Cron rows, with only changelog attribution remaining. Full review comments:
Overall correctness: patch is correct Acceptance criteria:
What I checked:
Likely related people:
Remaining risk / open question:
Codex review notes: model gpt-5.5, reasoning high; reviewed against 33eebc29c31f. |
f32605b to
0da0eb0
Compare
0da0eb0 to
21354f0
Compare
Summary
cron.listrows that do not have a valid cron payload before they enter Control UI state.Bug / Behavior
Issue #55047 reports Control UI sidebar sections rendering blank after update, leaving only the section title. The live issue is still open. ClawSweeper linked the same failure class to #54439, where the browser console showed
Cannot read properties of undefined (reading 'kind')after navigating through sidebar sections.Current
origin/mainstill readjob.payload.kinddirectly in shared app render and Cron consumers. The prior focused fixes #54550 and #54552 were both closed unmerged, so there was no current-main resolution to close the issue against.Duplicate / Related Work
undefined.kindevidence.prtags, butprtags search textandprtags search similarboth returnedrequest failed (502)fromprtags.dutiful.dev, so duplicate curation writes are blocked by the backend right now. This PR records the duplicate relationship in the body and changelog instead of forcing a partial write.Closes #55047.
Closes #54439.
Supersedes #54550.
Supersedes #54552.
Security / Safety Review
Verification
pnpm test ui/src/ui/controllers/cron.test.ts ui/src/ui/views/cron.test.ts ui/src/ui/app-render.assistant-avatar.test.ts- 3 files, 50 tests passed.pnpm exec oxfmt --check --threads=1 CHANGELOG.md ui/src/ui/cron-payload.ts ui/src/ui/app-render.ts ui/src/ui/app-render.assistant-avatar.test.ts ui/src/ui/controllers/cron.ts ui/src/ui/controllers/cron.test.ts ui/src/ui/views/cron.ts ui/src/ui/views/cron.test.ts- passed.git diff --check- passed.pnpm changed:lanes --json- selected core prod + core tests for the touched UI files.pnpm check:changedontbx_01kqmj7edvfpgn7vem6rmchc6c- passed. Run: https://github.com/openclaw/openclaw/actions/runs/25254388916