The environments the workspace's test matrices target. A baseline here means: CI and the walking-skeleton Playwright suites (YSD-1036/1037) run against it, and a regression on it blocks release. Anything not listed is UNSUPPORTED-UNTESTED — it may work, but no gate protects it, and support claims for it are forbidden until it joins this file with a matrix entry.
Desktop / OS#
| Tier | Target | Gate |
|---|---|---|
| Primary | Linux x86_64 (CI runners; the dev sandbox) | every suite |
| Primary | macOS 14+ (Apple Silicon) — developer workstations | local runs; CI on release branches |
| Secondary | Windows 11 via Chromium only | Playwright smoke on release branches |
Browser#
Grounded in the existing Playwright matrix
(apps/oshun/web/playwright.config.ts):
| Tier | Browser | Notes |
|---|---|---|
| Primary | Chromium (Desktop Chrome device profile) | full E2E + a11y suites |
| Primary | Mobile Chromium (Pixel 7 device profile) | studio responsive checks |
| Secondary | Firefox (latest ESR) | playback + annotation smoke |
| Secondary | WebKit (latest Playwright build) | playback + annotation smoke |
No Internet Explorer, no legacy Edge. Frame-accurate playback features
(YSD-8001+) require requestVideoFrameCallback; where a secondary browser lacks
it, the UI must present the honest degraded mode, and the matrix asserts the
degradation notice — not silent wrongness.
Hardware#
| Tier | Profile | Gate |
|---|---|---|
| Primary | 4-core x86_64, 8 GB RAM, no GPU | all CI suites (matches runners) |
| Primary | Apple Silicon 16 GB | local development |
| Deferred | GPU-accelerated analysis (RunPod) | Section 5 pipelines only; never assumed on-box |
The dev sandbox has NO GPU; anything requiring one must be a fail-loud gated seam, exactly like the existing wgpu/llvmpipe arrangement.
Media decoders#
| Tier | Format | Notes |
|---|---|---|
| Primary | H.264/AVC in MP4, AAC/PCM audio | proxy format for all playback tests |
| Primary | VP9/WebM | browser-native second source |
| Secondary | H.265/HEVC | decode only where the browser exposes it; capability-detected, never assumed |
| Prohibited in tests | lossy re-encodes of watermarked evidence | H.264 destroys watermarks — evidence fixtures ship lossless or synthetic |
Assistive technology#
This section used to run the two tables below together, and running them together is a category error worth naming: an accessibility snapshot is the tree the browser exposes, which is what a screen reader is HANDED rather than what it SAYS. Screen readers disagree with the tree and with each other about when a live region interrupts, what a role means on a given element, and whether a name computed from three sources is announced or swallowed. Asserting the tree proves the product handed over what it meant to hand over. So the automated checks are listed as automated checks.
Assistive technology proper. Machine-readable as
DECLARED_ASSISTIVE_TECHNOLOGIES in
libs/yemaya/study-workspace/src/accessibility/at-task-completion.ts; the two
must agree, and this table is the source.
| Tier | AT | Modality | Gate |
|---|---|---|---|
| Secondary | VoiceOver (macOS) | screen reader | manual task-completion session (YSD-16065); release checklist, not CI |
Automated checks under accessibility. Real and valuable, and none of them is a person using a tool, so none discharges a claim about assistive technology.
| Tier | Check | Gate |
|---|---|---|
| Primary | Keyboard-only operation | Playwright keyboard journey (YSD-1037) on every walking-skeleton flow |
| Primary | Screen reader semantics (ARIA tree asserted via Playwright accessibility snapshots) | YSD-1037 assertions |
| Baseline rule | 200% zoom + prefers-reduced-motion + forced-colors | a11y suite assertions |
Known gap, measured rather than asserted. Seven of the eight critical
journeys demand switch access, speech input, magnification or braille — pinning
an exact region is a pointer-precision task, and pointer precision is what a
switch and a voice do not have. The table above declares one screen reader, so
those journeys cannot be evaluated with anything the programme claims to
support, and keyboard-navigation, focus-visible and text-resize are
declared supported in the capability table with no drivable technology behind
them. Run npx tsx tools/yemaya-study/check-accessibility-evidence.ts for the
current list. Closing it is a decision about what to support, not a scheduling
problem.
Locale#
| Tier | Locale | Notes |
|---|---|---|
| Primary | en (US/GH English) | full suites |
| Primary | RTL smoke (ar pseudo-locale) | layout does not break; studio shell suite |
| Baseline rule | ICU message formatting via @oshun/i18n; no concatenated strings |
lint + review |
Study content itself is multilingual by contract (transcript language identity, cultural bounds); UI locale coverage expands with Section 16 localization items, and this file gains rows when it does.
Network#
| Tier | Profile | Gate |
|---|---|---|
| Primary | Unthrottled localhost | all suites |
| Primary | "Fast 3G" throttle (Playwright network conditions) | playback resilience + autosave/offline-queue tests |
| Primary | Offline transition mid-session | notebook offline queue (YSD-15007) and resumable upload (YSD-5001) tests |
| Baseline rule | every network feature states its behavior on disconnect; silent hangs are defects | test assertions |
Runtime#
- Node.js ≥ 22 (workspace engines field); CI and the sandbox run 24.x.
- PostgreSQL 16 + pgvector, Redis 7, MinIO (dev compose versions) — the authoritative-store integration suites (YSD-3010) pin these.