Skip to content

feat(ui): dead-letter-queue table view (self-host dashboard) #2214

Description

@JSONbored

Build the read-only table slice of the dead-letter-queue management UI (#1208): a paginated DLQ table showing job ID, payload type, attempts, last error, created/died timestamps, consuming the existing GET /api/selfhost/queue/dead endpoint. This is the display half only — replay/purge actions are a separate bounty.

Deliverables

  • New DLQ route/panel under apps/gittensory-ui/src/routes/ rendering a paginated table (components/ui/pagination.tsx)
  • Columns: job ID, payload type, attempts, last error (truncated + expandable), created/died timestamps
  • Loading/empty/error via StateBoundary (state-views.tsx:215); horizontal scroll for narrow viewports
  • Fetch via useApiResource against GET /api/selfhost/queue/dead (bearer-gated per selfhost(dashboard): dead-letter queue management UI #1208)
  • Vitest test: populated page, empty queue, error, and multi-page pagination branches

References

  • apps/gittensory-ui/src/routes/app.audit.tsx
  • apps/gittensory-ui/src/components/ui/pagination.tsx
  • apps/gittensory-ui/src/components/site/state-views.tsx:215
  • apps/gittensory-ui/src/lib/api/use-api-resource.ts

Part of #1208.


📸 Required: before/after screenshots (this is a UI change)

Non-negotiable. PRs that change UI must include a before/after screenshot table. PRs without it are automatically closed — no exceptions.

Rules:

  • Show every page/feature you changed — before and after, one row each.
  • Use the markdown table below. Screenshots go inside the table only — no large full-size images pasted elsewhere in the PR.
  • Each cell is a clickable thumbnail (a small image linking to the full-size image) with a one-line caption underneath.
  • Upload screenshots to the PR by drag-and-drop (GitHub hosts them on its CDN). Do NOT commit image files to the repo.

Copy this and fill it in (replace FULL_IMAGE_URL with the URL GitHub gives you after you drop the image in):

| Page / Feature | Before | After |
|---|---|---|
| `/your-route` | [<img src="FULL_IMAGE_URL" width="260">](FULL_IMAGE_URL)<br><sub>before: short caption</sub> | [<img src="FULL_IMAGE_URL" width="260">](FULL_IMAGE_URL)<br><sub>after: short caption</sub> |


size: S · held for later release (gittensor:feature once activated)

Metadata

Metadata

Assignees

No one assigned

    Labels

    gittensor:featureGittensor-scored feature linked to a feature issue — scores a 0.25x multiplier.help wantedExtra attention is neededvisualUI/web visual work — owner-led, NOT for Gittensor contributors (extensions excepted)

    Projects

    No projects

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions