Skip to content

feat(dashboard): paginate /api/v1/overview and pass an accessibility review (issue #76) - #88

Merged
flo2517 merged 1 commit into
mainfrom
feat/issue-76-dashboard-pagination-accessibility
Aug 7, 2026
Merged

feat(dashboard): paginate /api/v1/overview and pass an accessibility review (issue #76)#88
flo2517 merged 1 commit into
mainfrom
feat/issue-76-dashboard-pagination-accessibility

Conversation

@flo2517

@flo2517 flo2517 commented Aug 7, 2026

Copy link
Copy Markdown
Owner

What

Two of #76's smaller, well-bounded items, tackled together since both touch the same overview panel and templates.

Pagination

  • GET /api/v1/overview accepts providers_limit/providers_offset and workloads_limit/workloads_offset query params (bounded: providers capped at 500, workloads at 200; both default to the exact prior hardcoded LIMIT/offset-0 behavior, so an existing caller that never sends these params sees no change).
  • ProvidersTotal/WorkloadsTotal are now true COUNT(*) values, not len(page) — previously a client had no way to tell "500 providers, that's everyone" from "500 providers, an unknown-size page of more".
  • Dashboard UI gained prev/next controls for the providers table, showing "X–Y sur Z".

Accessibility pass (WCAG-informed, not a full audit)

  • Skip-to-content link, landmark id on <main>.
  • Every warning/status region now carries role="alert"/role="status" with aria-live so a screen reader announces degraded-data states (the "partial", "unavailable" language ADR-011 already requires visually) without the user having to find it.
  • <caption class="sr-only"> on every data table, <th scope="col"> throughout (previously bare <th>).
  • <label> for the validator-score provider_id input (previously an unlabeled placeholder-only input).
  • Visible :focus-visible outlines and a :disabled state for buttons (previously only styled by browser default, or not at all for the new pagination buttons).

Not a full accessibility audit — no automated tooling (axe, Lighthouse) run in this sandbox; this is a manual pass against common WCAG failures visible in the existing markup, not a certified conformance pass.

Testing

  • New unit tests for boundedQueryInt/parseOverviewPagination (defaults, clamping, honoring explicit values).
  • A live-Postgres integration test proving loadOverview's LIMIT/OFFSET + COUNT(*) pairing actually pages non-overlapping rows in the right order against a real database.
  • gofmt, go vet, go build, and the full control-plane test suite (including every OPENINFRA_TEST_*-gated live-chain/Postgres/Redis test) ran clean.

This leaves #76 open: user/operator views, RBAC, secret-redaction audit, E2E tests, and the decentralized-hosting migration doc are still outstanding — RBAC and the full view model need a design pass before implementation given their size, per the issue's own note.

🤖 Generated with Claude Code

…review (issue #76)

Two of #76's smaller, well-bounded items, tackled together since both
touch the same overview panel and templates.

Pagination:
- GET /api/v1/overview accepts providers_limit/providers_offset and
  workloads_limit/workloads_offset query params (bounded: providers
  capped at 500, workloads at 200; both default to the exact prior
  hardcoded LIMIT/offset-0 behavior, so an existing caller that never
  sends these params sees no change).
- ProvidersTotal/WorkloadsTotal are now true COUNT(*) values, not
  len(page) -- previously a client had no way to tell "500 providers,
  that's everyone" from "500 providers, an unknown-size page of more".
- Dashboard UI gained prev/next controls for the providers table,
  showing "X–Y sur Z".

Accessibility pass (WCAG-informed, not a full audit):
- Skip-to-content link, landmark id on <main>.
- Every warning/status region now carries role="alert"/role="status"
  with aria-live so a screen reader announces degraded-data states
  (the "partial", "unavailable" language ADR-011 already requires
  visually) without the user having to find it.
- <caption class="sr-only"> on every data table, <th scope="col">
  throughout (previously bare <th>).
- <label> for the validator-score provider_id input (previously an
  unlabeled placeholder-only input).
- Visible :focus-visible outlines and a :disabled state for buttons
  (previously only styled by browser default, or not at all for the
  new pagination buttons).

Not a full accessibility audit -- no automated tooling (axe, Lighthouse)
run in this sandbox; this is a manual pass against common WCAG
failures visible in the existing markup, not a certified conformance
pass. Still leaves #76's E2E test suite and formal accessibility
tooling as open items.

Tested: new unit tests for boundedQueryInt/parseOverviewPagination
(defaults, clamping, honoring explicit values); a live-Postgres
integration test proving loadOverview's LIMIT/OFFSET + COUNT(*)
pairing actually pages non-overlapping rows in the right order against
a real database. gofmt, go vet, go build, and the full control-plane
test suite (including every OPENINFRA_TEST_*-gated live-chain/
Postgres/Redis test) ran clean.

Leaves #76 open: user/operator views, RBAC, secret-redaction audit,
E2E tests, and the decentralized-hosting migration doc are still
outstanding -- RBAC and the full view model need a design pass before
implementation given their size, per the issue's own note.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
@flo2517
flo2517 merged commit 7cc8f39 into main Aug 7, 2026
4 checks passed
@flo2517
flo2517 deleted the feat/issue-76-dashboard-pagination-accessibility branch August 7, 2026 12:19
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants