Skip to main content

Air-quality release evidence

This is saved evidence from the canonical base release, verified on 30 August 2026 at 337bd463. It is not a fresh run against the current checkout, current upstream services or a production deployment. Optional providers have independent release status; a blocked provider remains blocked until its own evidence requirements are met.

Performance reference​

pnpm bench-air-quality runs the production canonical current, forecast, and station route handlers in process with a deterministic provider and warm MemoryUpstreamRuntime. It validates every HTTP-equivalent status and enforces the 2 MiB JSON ceiling. This is local reference evidence, not a shared-CI timing assertion.

Recorded 30 August 2026 on Node v24.18.0 and an Apple M1 Pro:

WorkloadSamples / concurrencyp50p95maxmax JSON
Cached current1,000 / 206.85 ms8.31 ms13.56 ms3,328 B
24-hour forecast100 / 1089.38 ms134.10 ms135.03 ms70,860 B
Station page100 / 106.33 ms7.74 ms7.75 ms1,147 B

At that checkpoint, the cached-current p95 gate below 250 ms and JSON ceiling of 2 MiB both passed. The benchmark tests cover nearest-rank percentile math, warm-up exclusion, exact concurrency, status rejection, and payload bounds.

Compatibility and source-policy evidence​

The checkpoint included these compatibility handlers, with their documented sunset headers:

  • OpenAQ: /api/integrations/overlay-air-quality/air-quality/stations
  • Open-Meteo: /api/integrations/weather-open-meteo-air-quality/aqi

Both emit Deprecation, Sunset, and canonical successor headers and increment the closed compatibility-use metric. Repository search on 30 August 2026 found no first-party runtime caller of either legacy path; only handlers, tests, OpenAPI, and migration documentation remain. Source-policy exclusions are applied before provider dispatch.

Accessibility and resilience​

The recorded automated component suites covered semantic disclosure controls, keyboard names, printed status alongside color, focus behavior, reduced-motion behavior, stale and partial states, retained snapshots after failure, aborted obsolete requests, strict-mode remounts, and lossless MapLibre style replacement. The recorded manual pass used the browser accessibility tree rather than claiming a VoiceOver/NVDA run that was not performed.

EnvironmentScenarioResult
T3 Code Nightly 0.0.37 / Chromium 146.0.7680.216, macOSKeyboard-only shell traversal and semantic names; 640×400 and 320×240 CSS viewports representing the reflow space available at 200% and 400% from 1280 px; dark scheme; API/map-style unavailablePass: controls remained keyboard reachable and named, both constrained viewports had no document-level horizontal overflow, dark colours applied, and the unavailable API/style produced a bounded degraded shell instead of a crash. The local API correctly refused startup because the checkout had no migrated database, so this run does not claim live-provider rendering.
Chromium accessibility tree plus focused Vitest/jsdom component suitesPlace disclosure names/status, non-colour status text, monitor legend, reduced motion, stale/partial/unavailable, slow/aborted requests, provider failure, retained snapshot, and style reloadPass: browser semantics were exposed for the reachable shell; the air-quality-specific states passed their deterministic component suites. This is semantic-tree inspection, not a claim that VoiceOver or NVDA was run.

At that checkpoint, forced-colour and reduced-motion media behavior was asserted in the focused UI suites because the collaborative browser exposes colour-scheme emulation but not those two media-feature emulations. No manual forced-colour/reduced-motion or screen-reader run was established.

Verification log​

The implementation was verified on 30 August 2026 at code revision 337bd463 (feat(air-quality): close release evidence and provider gates). This evidence record is the documentation-only follow-up to that revision.

CommandDurationExitResult
Focused air-quality Vitest suiteNot recorded041 files and 308 tests passed
Closeout-focused Vitest suiteNot recorded08 files and 74 tests passed
Policy-contract Vitest suiteNot recorded04 files and 37 tests passed
pnpm test187.34 s wall clock01,240 files passed, 10 skipped; 13,495 tests passed, 50 skipped
pnpm check-types36.05 s029 tasks passed across 133 workspaces
pnpm lint14.62 s0Passed; 20 existing Biome warnings and 216 existing translation warnings remain non-blocking
pnpm check:policy16.46 s0All policy checks passed, including the air-quality release gates
Translation checks6.09 s0Passed with the existing non-blocking warnings
OpenAPI checks5.81 s0Passed for 315 operations
pnpm check-dead-codeNot recorded0Passed
Documentation typecheck1.54 s0Passed
Documentation production build4.99 s0Passed
git diff --checkNot recorded0Passed

The exact root pnpm build built the API, data manager, operations agent, extension CLI, and transit runner, then failed in the web Turbopack PostCSS worker because the execution environment denied binding its local IPC port with EPERM. Re-running with elevated sandbox permissions produced the same environmental failure. No production code was changed to hide it. The supported pnpm -C apps/web exec next build --webpack fallback completed in 10.2 minutes, including TypeScript validation, all 30 static pages, and output tracing. pnpm -C apps/web build:sw and pnpm -C apps/web build:copy-assets also passed.