Repository navigation
fix(feishu): fall back to post mode over table limit - #136382
Conversation
|
🦞👀 Pull request received. I will update this pull request when review starts. ClawSweeper review completeClawSweeper finished reviewing this revision. The review result is being finalized. |
|
Codex review: needs maintainer review before merge. Reviewed September 6, 2026, 5:23 PM ET / 21:23 UTC. ClawSweeper reviewWhat this changesThe Feishu plugin delivers generated replies exceeding five Markdown tables as posts while preserving active streaming cards and caller-supplied native cards. Merge readiness✅ Ready for maintainer review This remains a useful fix for documented Feishu delivery failures that current main still permits. Both prior blockers are addressed, and the supplied live API evidence supports the fallback boundary; no new blocking defect was found. Priority: P1 Review scores
Verification
How this fits togetherThe Feishu plugin turns agent replies and message actions into cards or rich-text posts. Its rendering decisions feed the Feishu API and determine whether users receive the reply. flowchart TD
A[Agent replies and message actions] --> B[Feishu rendering]
B --> C[Generated static card]
B --> D[Active streaming card]
C --> E{At most five tables}
E -->|Yes| F[Interactive card delivery]
E -->|No| G[Existing post fallback]
D --> H[Streaming updates]
Before mergeNone. Agent review detailsSecurityNone. PR surfaceSource +70, Tests +487. Total +557 across 8 files. View PR surface stats
Review metrics
Root-cause clusterRelationship: Members:
Proposal only: this assessment does not dispatch repair, suppress jobs, mutate sibling items, close, or merge anything. Technical reviewBest possible solution: Keep table-limit handling inside Feishu’s existing rendering flow, preserving valid cards and streaming while delivering otherwise rejected generated content through posts. Do we have a high-confidence way to reproduce the issue? Yes: a short reply containing six Markdown tables with static card rendering reaches unguarded card delivery on current main, matching the reported provider rejection. This review established the source path without executing it. Is this the best way to solve the issue? Yes: reusing the existing parser and post fallback is a focused repair, and separating static-card eligibility from streaming intent preserves the verified CardKit behavior. AGENTS.md: found and applied where relevant. Codex review notes: model internal, reasoning medium; reviewed against c1fbb4622ee2. LabelsLabel justifications:
EvidenceWhat I checked:
Likely related people:
Rating scale
Overall follows the weaker of proof and patch quality. Workflow
HistoryReview history (6 earlier review cycles)
|
29fb662 to
cf29a76
Compare
|
Addressed the CardKit-start fallback finding in cf29a76472. Over-limit content now re-applies static-card eligibility during streaming startup backoff, while unrelated concurrent streaming handoffs retain their existing card fallback. Added the six-table startup-failure regression; all 182 reply-dispatcher tests pass. @clawsweeper re-review |
|
CI retry request: the exact-head |
Port the table-limit guard from openclaw#86901 onto the current Feishu presentation and delivery architecture. Static cards containing more than five parsed Markdown tables now use the existing post fallback; streaming CardKit and caller-supplied native cards remain unchanged. Refs: openclaw#43690
Adapt the openclaw#86901 regression coverage to the current Feishu architecture and cover parser boundaries, outbound routing, presentation actions, reply dispatch, and streaming recovery. Also lock in the accepted font-wrapper behavior raised during the original review. Refs: openclaw#43690
Reapply static-card eligibility while CardKit startup is backed off so over-limit Markdown falls back to post delivery. Preserve the existing structured-card fallback for unrelated concurrent streaming handoff cases. Addresses ClawSweeper review on openclaw#136382.
d36f21e to
6459551
Compare
|
Merged via squash.
|
* commit '294df333c58f2da104eccffc623ccb3c4d43d4d8': (1802 commits) fix: clear stale diagnostics after Gateway changes (#140426) fix: keep plugin catalogs intact after discovery timeouts (#140441) perf(tui): prepare session picker rows once per overlay (#140462) refactor(config): reuse environment substitution for write-back (#140460) refactor(discord): remove retired auto-presence templates (#140463) fix(ui): finish roster refreshes during session activity (#140459) fix(setup): match prepared credentials to the model provider (#140461) fix: keep MiniMax discovery on the selected credential (#140438) refactor(tests): remove unused parent context cache reset (#140456) fix: avoid repeated xAI OAuth refresh during discovery (#140434) perf(routing): reuse prepared event session targets (#140454) fix(media): keep deferred audio and extraction providers discoverable (#139231) refactor(codex): remove redundant app-server forwarding (#140451) fix(test): avoid false native polling timeouts (#140119) test(gateway): retain saved source in reload fixtures (#140453) fix(gateway): reduce repeated model work when listing sessions (#140414) fix(feishu): fall back to post mode over table limit (#136382) fix: use the bundle-compatible Proxyline runtime under Bun (#140411) refactor(trace): reuse the canonical usage counter type (#140444) refactor(node-host): share execution policy result fields (#140446) ...
Route generated Feishu static cards containing more than five parsed Markdown tables through the existing post renderer while preserving supported static cards, active CardKit streams, native cards, and delivery receipts. Apply the shared parser-backed ceiling across outbound text, presentations, message actions, ordinary replies, and failed-stream recovery. Closes openclaw#43690 Co-authored-by: name5566 <name5566@gmail.com>
What problem this solves
Feishu rejects static interactive cards containing more than five table components with error
11310. OpenClaw could still route generated Markdown and presentation cards with six or more parsed tables to that rejected path, leaving users without the reply.Closes #43690.
What changed
Production diff:
+94/-24(+70net); test diff:+488/-1(+487net).Attribution
This is a current-
mainrescue and rework of the original implementation in #86901 by name5566. The first two commits retainname5566 <name5566@gmail.com>as the Git author, withltspaceas the GitHub-linked committer. The review follow-up is authored and committed byltspace.User impact
A response with up to five Markdown tables remains an interactive card. A response with six or more tables is delivered as a Feishu post instead of failing at the provider boundary, including when CardKit startup fails.
Evidence
presentation-card,outbound,channel, andreply-dispatcher.reply-dispatchertests passed, including six-table CardKit startup failure and existing concurrent handoff cases.pnpm tsgo:extensionspnpm exec oxfmt --checkon changed filespnpm exec oxlinton changed filesinteractive, accepted asom_x100b66b78c862cacb1b71ffd5af9070post, accepted asom_x100b66b78c9324a0b1b499d6025584e