Docs Contributing

neoserver 0.1.2

Usability and accessibility

Run the console usability and accessibility release checks and record findings.

Automated tests are evidence, not a substitute for unfamiliar users or assistive-technology users. This checklist is the P1 human validation gate. Do not mark it passed from Playwright/axe alone.

What the automated suite covers

Keyboard interaction, accessible names/roles/states, error and status semantics, responsive behavior and axe checks run automatically in Chromium, Firefox and WebKit.

Human usability and actual screen-reader output are not covered by that suite, and a passing run neither passes nor waives this gate. Browser automation does not run VoiceOver/NVDA or establish spoken announcement timing, reading order in browse mode, novice comprehension, real-device usability, or WCAG conformance. Playwright WebKit is also not a qualification of Safari with VoiceOver. The session protocol below is retained for future independent testing; it is not a prerequisite for running the automated suite.

Run the production-build engineering checks without Docker or manual interaction from web/admin:

npm ci
npx playwright install chromium firefox webkit
npm test
npm run build
UI_TEST_BUILD=true npm run test:browser
UI_TEST_BUILD=true npx playwright test --config playwright.ui.config.ts --browser=firefox browser-tests/usability.spec.ts browser-tests/review-fixes.spec.ts
UI_TEST_BUILD=true npx playwright test --config playwright.ui.config.ts --browser=webkit browser-tests/usability.spec.ts browser-tests/review-fixes.spec.ts

These browser tests use disposable contract-checked API fixtures, not production credentials or catalogs. Real-backend onboarding and accessibility checks remain separate; use the fixture setup in development. Do not infer real-backend publication or authorization success from route mocks.

Recruit and run

Use at least three developers unfamiliar with neoserver: one API/backend developer, one GIS user and one frontend developer. Include a keyboard-only run and a screen-reader user (VoiceOver/Safari or NVDA/Firefox). Run against the exact release candidate, on disposable catalogs and keys, recording version/commit, OS/browser, theme and viewport. Obtain consent before recordings; exclude token entry, key dialogs and personal/source data from recordings.

Give each participant either the API tutorial or UI tutorial, then rotate paths with a fresh workspace. Do not explain internal terms before the task. Ask them to think aloud; record assistance rather than silently guiding them.

Task Success evidence Target
Start and sign in Recognizes JWT vs encryption key; reaches empty workspace list No hidden setup step
First publication Creates workspace, connects PostGIS or uploads sample, publishes private layer ≤10 minutes after server is ready, no facilitator help
See the data Finds Preview, fits extent, inspects a property Can explain what was verified
Connect a client Creates viewer key and reads a feature outside console session ≤5 minutes; no admin credential shared
Recover Fixes wrong database password, disabled service, then restricted layer role Can identify the relevant fix without reading source
Revoke access Revokes client key, confirms client fails while admin session works Understands impact and one-time-secret behavior
Resume tomorrow Restarts without reinitializing/deleting data; recovers expired token safely Existing publication survives

Record time to first successful request separately from image build/download time. Also capture wrong turns, error wording, terminology confusion, confidence, and any use of JSON when a normal form should suffice. Prioritize task blockers/security misunderstandings as P0; repeated confusion as P1; minor preference as P2.

Keyboard, screen reader and visual checks

Complete the same journey with keyboard only: visible focus, meaningful tab order, every dialog reachable, Escape/Cancel and focus restoration, validation associated with fields, no keyboard traps. Verify announcements for loading, connection failures, publication results and one-time secrets without exposing them in unrelated live regions. Check native selects, Radix menus, service switches, table actions and copy failure feedback.

In both light and dark themes, test 200% zoom and a 390px viewport. No loss of actions or horizontal page overflow; long code may scroll within its own region. Do not rely on map pixels alone to confirm a data request: Endpoints supplies an explicit status. Geographic visual interpretation still requires the map and should not be represented as screen-reader equivalent functionality.

Automated coverage: web/admin/e2e/onboarding.spec.ts creates a fresh workspace through the real UI, publishes a real layer, obtains a viewer key through the UI and requests data in a separate HTTP context; web/admin/browser-tests/onboarding.spec.ts covers guide, status/recovery and accessibility states. Existing e2e/a11y.spec.ts covers the route matrix. Use WCAG 2.2 AA as the review target, not a certification claim.

Findings log / sign-off

Date / candidate Participant / setup (anonymous) Task / time Problem / evidence Priority / owner Retested
2026-09-16 / working branch No human sessions; owner declined manual checking Not measured Automated engineering checks do not close the human/screen-reader gate P1 / release owner Not run

Release sign-off requires completed human sessions, no unresolved P0 task blockers, explicit disposition of P1 findings, and keyboard/screen-reader evidence attached to the candidate. Failed checks remain findings even if automated tests pass.

Adapted from neoserver’s source documentation . Maintained independently for this website.

Search documentation

Type to search guides and reference pages.