Expose paged channel action results#88993
Conversation
|
Codex review: needs real behavior proof before merge. Reviewed June 13, 2026, 12:20 AM ET / 04:20 UTC. Summary PR surface: Source +78, Tests +133. Total +211 across 2 files. Reproducibility: unclear. The review failed before ClawSweeper could establish a reproduction path. Review metrics: none identified. Stored data model Merge readiness Overall follows the weaker of proof and patch quality, so missing proof can cap an otherwise strong patch. Risk before merge
Maintainer options:
Next step before merge
Review detailsBest possible solution: Retry the Codex review after fixing the execution failure. Do we have a high-confidence way to reproduce the issue? Unclear. The review failed before ClawSweeper could establish a reproduction path. Is this the best way to solve the issue? Unclear. Retry the review first so ClawSweeper can evaluate the actual issue and fix direction. AGENTS.md: unclear because the file could not be read completely. Codex review notes: model internal, reasoning high; reviewed against 4a6666796f46. Label changesLabel changes:
Label justifications:
Evidence reviewedPR surface: Source +78, Tests +133. Total +211 across 2 files. View PR surface stats
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
|
4a479de to
1533e0f
Compare
1533e0f to
4acda7c
Compare
4acda7c to
ffb330a
Compare
…ction-results # Conflicts: # docs/.generated/plugin-sdk-api-baseline.sha256
# Conflicts: # docs/.generated/plugin-sdk-api-baseline.sha256
|
@clawsweeper re-review |
|
🦞🧹 I asked ClawSweeper to review this item again. Re-review progress:
|
|
@clawsweeper re-review Fresh local maintainer proof before this request:
Autoreview result: clean, no accepted/actionable findings. |
|
@clawsweeper re-review |
|
@clawsweeper re-review |
|
Land-ready verification completed on head Review:
Verification:
Live behavior:
Known gap: no full gateway/CLI end-to-end run on final head. The exact changed plugin action boundary has live Discord proof, and the final test-only delta has focused and remote-gate coverage. |
Summary
thread-listrawthreadsresult while adding normalized pagination metadata at the action boundary.complete,hasMore,returnedCount,source,query, andnextBeforefor archived thread pages when Discord reportshas_more.has_moreregression and the missing archive timestamp fallback in the Discord action runtime tests.Verification
PATH=/Users/jason/.nvm/versions/node/v24.14.0/bin:$PATH node scripts/run-vitest.mjs extensions/discord/src/actions/runtime.test.ts extensions/discord/src/send.messages.test.ts(97 passed)PATH=/Users/jason/.nvm/versions/node/v24.14.0/bin:$PATH node scripts/run-vitest.mjs src/agents/anthropic-transport-stream.test.ts src/agents/simple-completion-runtime.test.tsgit diff --check.agents/skills/autoreview/scripts/autoreview --mode branch --base upstream/main --codex-bin /Users/jason/.codex/openclaw-pr-autopilot/bin/codex-persist-sessions --model codex=kepler-alpha --thinking codex=high(clean; no accepted/actionable findings)<test-provider>, lease<test-lease>, Actions run<actions-run-url>; checked out<pr-ref>and rancorepack pnpm test:docker:npm-onboard-discord-channel-agent, resultnpm tarball onboard/channel/agent Docker E2E passed (discord).Real behavior proof
Behavior addressed: Discord archived thread-list actions expose truthful page completion plus a reusable
nextBeforecursor while preserving the prior rawthreadsprovider payload.Real environment tested: Exact PR head
1a2d7b4fec5f089d730acfd257602f82d4fc0648, with the local PR branch Discord action runtime calling the live Discord API for the configured<account-id>bot account in a test guild. Three disposable public threads were created in<channel-name>, archived, paged, and deleted.Exact steps or command run after this patch: Ran a redacted
node --import tsx --input-type=moduleproof script from the PR worktree. The script resolved only the configured Discord account token from the active runtime snapshot, installed that resolved snapshot in the proof process, called branchhandleDiscordActionto create and archive three disposable threads, requested archived threads withlimit: 2, requested the next page withbefore: firstPage.nextBefore, asserted thread identities and cursor equality, then deleted every proof thread infinally.Evidence after fix:
{ "headSha": "1a2d7b4fec5f089d730acfd257602f82d4fc0648", "environment": "local PR branch action runtime against live Discord API", "setup": { "created": 3, "archived": 3, "channel": "<channel-name>", "pageLimit": 2 }, "firstPage": { "complete": false, "hasMore": true, "returnedCount": 2, "source": "discord.threadList.archived", "query": { "guildId": "<guild-id>", "channelId": "<channel-id>", "includeArchived": true, "limit": 2 }, "nextBefore": "2026-06-12T20:45:07.612000+00:00", "lastArchiveTimestamp": "2026-06-12T20:45:07.612000+00:00", "rawHasMore": true, "items": ["<proof-thread-newest>", "<proof-thread-middle>"] }, "continuationPage": { "complete": true, "hasMore": false, "returnedCount": 1, "source": "discord.threadList.archived", "query": { "guildId": "<guild-id>", "channelId": "<channel-id>", "includeArchived": true, "before": "2026-06-12T20:45:07.612000+00:00", "limit": 2 }, "rawHasMore": false, "contains": "<proof-thread-oldest>" }, "assertions": { "cursorMatchesLastArchiveTimestamp": true, "continuationUsedNextBefore": true, "firstPageContainsNewestAndMiddleProofThreads": true, "continuationContainsOldestProofThread": true }, "cleanup": { "deleted": 3, "cleanupFailures": 0 } }Observed result after fix: The first live archived page returned two non-empty rows with Discord
has_more: true; the normalized result exposedcomplete: false,hasMore: true, and anextBeforeexactly equal to the last returned thread's archive timestamp. Passing that value back asbeforereturned the older proof thread and a complete final page. All three disposable threads were deleted successfully.What was not tested: A full PR-branch gateway/CLI end-to-end run. Discord
thread-listis gateway-owned, so a source-plugin override with the currently installed gateway still exercises the installed gateway action runtime. The live proof instead targets the exact changed plugin action boundary against Discord. No supported Mantis scenario covers Discord archived-thread pagination.