channel-forward-parity

$npx mdskill add vercel-labs/vercel-openclaw/channel-forward-parity

Audit webhook routes for delivery parity and stale URL refresh.

  • Ensures terminal paths log and lastForward records update correctly.
  • Integrates with Slack, Telegram, Discord, WhatsApp, and summary routes.
  • Classifies failures and refreshes sandbox port URLs automatically.
  • Outputs structured tables with correlation coverage evidence.
SKILL.md
.github/skills/channel-forward-parityView on GitHub ↗
---
name: channel-forward-parity
description: "Webhook route parity audit for channel delivery changes: ensure terminal paths log, record lastForward, classify failures, and refresh stale sandbox port URLs."
---

# Channel Forward Parity

Use this before modifying any channel webhook route or the shared drain-channel workflow.

## Source Files To Audit

- `src/server/channels/last-forward.ts`
- `src/server/workflows/channels/drain-channel-workflow.ts`
- `src/app/api/channels/slack/webhook/route.ts`
- `src/app/api/channels/telegram/webhook/route.ts`
- `src/app/api/channels/discord/webhook/route.ts`
- `src/app/api/channels/whatsapp/webhook/route.ts`
- `src/app/api/channels/summary/route.ts`
- `src/server/admin/why-not-ready.ts`

## Required Output

Produce a table:

| Channel | Branch | Logs event | Updates lastForward | Classification | Stale URL refresh | Evidence |
|---|---|---|---|---|---|---|

Also include correlation coverage:

| Channel | Branch | requestId/deliveryId propagated | workflowRunId propagated | Logs event | Updates lastForward | Classification | Stale URL refresh | Evidence |
|---|---|---|---|---|---|---|---|---|

## Rules

- Every delivery attempt must update `lastForward`.
- Every skip/reject branch must log a structured reason.
- Workflow forwarding already records `lastForward`; do not double-record above it.
- Treat route-ready, native-accepted, and user-visible-reply separately.
- Do not add info-level logs on hot polling paths unless operationally necessary; ring-buffer eviction hides evidence.
- Never add `export const runtime = "nodejs"` to route handlers.
- For workflow handoff branches, verify that `channels.<ch>_workflow_started`, `channels.forward_attempt`, and `channels.forward_outcome` can be correlated by requestId/deliveryId and workflowRunId when available.
- If `npx workflow` cannot inspect the run, parity evidence must fall back to Vercel logs plus `/api/admin/logs`.
- Do not accept "workflow started" as proof of native acceptance; require forward attempt/outcome or user-visible reply evidence.
- Do not accept `npx sandbox` failure as sandbox-unreachable until the app admin SSH/exec fallback has been attempted or marked unavailable.
- Verify project targeting before trusting `vercel`, `npx workflow`, or `npx sandbox` output. If `.vercel/project.json` points at a different release, require explicit project/team/deployment targeting evidence.

## Current Audit Seeds

- Check Slack fast-path fetch-exception branches for `recordChannelLastForward` coverage.
- Check Telegram unauthorized, invalid JSON, and dedup branches for structured logs where operator evidence is needed.
- Check WhatsApp duplicate/skip branches for structured logs and clear classifications.
- Check every `sandbox-not-listening` branch for exactly one stale-port refresh per request.
More from vercel-labs/vercel-openclaw