> For the complete documentation index, see [llms.txt](https://faction-os.gitbook.io/faction-os-docs/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://faction-os.gitbook.io/faction-os-docs/.spec_system/archive/phases/phase_08/mobile_accessibility_certification_evidence.md).

# Phase 08 Mobile And Accessibility Certification Evidence

**Phase**: 08 - Release Hardening and Legacy Decommission **Session**: 06 - Mobile and Accessibility Certification Evidence **Status**: Complete **Created**: 2026-05-31 **Package**: apps/web

***

## Purpose

This artifact records release evidence criteria for the FactionOS web cockpit and public demo mobile/accessibility surfaces. It is a source-controlled evidence map for automated browser checks, focused component checks, retained screenshots, manual review slots, and residual risks.

This artifact does not claim formal WCAG certification, physical-device mobile certification, third-party audit completion, or production-hosted validation. Those claims require matching manual, lab, third-party, or deployed-target evidence that is not produced by this session.

***

## Evidence Boundary

| Evidence class                                | Covered here                                              | Claim allowed                                    |
| --------------------------------------------- | --------------------------------------------------------- | ------------------------------------------------ |
| Playwright app desktop                        | Yes, local Vite app with local or mocked services         | Local browser evidence only                      |
| Playwright app mobile                         | Yes, Pixel 7 emulation project                            | Local mobile-emulation browser evidence only     |
| Playwright public-demo desktop                | Yes, path-prefixed local static artifact                  | Local public-demo browser evidence only          |
| Playwright public-demo mobile                 | Yes, Pixel 7 emulation project                            | Local public-demo mobile-emulation evidence only |
| Vitest component checks                       | Yes, focused semantics and guardrail regressions          | Component-level regression evidence only         |
| Screenshot review                             | Slots recorded here; manual review status must be updated | Visual evidence only after review                |
| Manual keyboard/screen-reader/contrast review | Not performed by default                                  | No formal accessibility certification claim      |
| Physical-device lab review                    | Not performed by default                                  | No physical-device certification claim           |
| Production-hosted smoke                       | Owned by Session 05                                       | Do not cite this artifact as hosted validation   |

***

## Supported Viewport And Input Criteria

| Surface                                       | Desktop project       | Mobile project                    | Input criteria                                                                       |
| --------------------------------------------- | --------------------- | --------------------------------- | ------------------------------------------------------------------------------------ |
| Web cockpit shell                             | `app-desktop`         | `app-mobile`                      | Keyboard, pointer, touch emulation, visible focus                                    |
| Battlefield                                   | `app-desktop`         | `app-mobile`                      | Native hero buttons, Enter activation, readable state badges                         |
| Mission, roster, quest, orchestration rails   | `app-desktop`         | `app-mobile`                      | Scrollable regions, no horizontal overflow, stable empty/loading states              |
| Settings, replay, export, scan, notifications | `app-desktop`         | `app-mobile`                      | Named controls, focusable actions, local-only and fallback copy                      |
| Local erasure controls                        | `app-desktop`         | `app-mobile`                      | Confirmation state, duplicate-trigger guard, no trusted-erasure overclaim            |
| War Room                                      | `app-desktop`         | `app-mobile`                      | Diagnostics, room lifecycle, reconnect, remote context, no hosted-identity overclaim |
| Overlays                                      | `app-desktop`         | `app-mobile` where feasible       | Dialog names, close controls, focus return or visible close path                     |
| Public demo splash and cockpit                | `public-demo-desktop` | `public-demo-mobile`              | Splash entry, synthetic-copy limits, visible media equivalents                       |
| Public demo offline shell                     | `public-demo-desktop` | Desktop service-worker check only | Offline shell after one online visit                                                 |

Desktop evidence uses the root Playwright desktop viewport in `playwright.config.ts`. Mobile evidence uses the Playwright Pixel 7 device profile. This is not physical-device lab evidence.

***

## Automated Evidence Commands

Final Session 06 evidence used these focused commands:

```bash
npx vitest run apps/web/tests/MobileAccessibility.test.tsx
npx vitest run apps/web/tests/MobileAccessibility.test.tsx apps/web/tests/MissionHeatmap.test.tsx apps/web/tests/KeyboardShortcutsModal.test.tsx
npx biome check apps/web/tests/MobileAccessibility.test.tsx apps/web/tests/MissionHeatmap.test.tsx apps/web/tests/KeyboardShortcutsModal.test.tsx tests/e2e/support/browserGuards.ts tests/e2e/app.e2e.ts tests/e2e/public-demo.e2e.ts apps/web/src/components/KeyboardShortcutsModal.tsx apps/web/src/components/MissionHeatmap.tsx public-demo/index.html
npm run test:e2e -- --project=app-desktop --project=app-mobile tests/e2e/app.e2e.ts
npm run test:e2e -- --project=public-demo-desktop --project=public-demo-mobile tests/e2e/public-demo.e2e.ts
rg -n "[^[:ascii:]]" <changed evidence/docs/tests/components>
perl -0ne 'print "$ARGV has CR\n" if /\r/' <changed evidence/docs/tests/components>
perl -e 'for my $f (@ARGV) { open my $fh, "<", $f or die "$f: $!\n"; binmode $fh; next if -z $fh; seek $fh, -1, 2; read $fh, my $c, 1; print "$f missing final newline\n" if $c ne "\n"; }' <changed evidence/docs/tests/components>
rg -n "certif|WCAG|formal accessibility|physical device|production-hosted|hosted identity|trusted unified erasure|public replay|account-backed replay|full trusted" <changed evidence/docs/tests>
git diff --check
```

If a command cannot complete in the local environment, record the exact command, failure mode, and release implication in this artifact and in the session implementation notes.

## Automated Evidence Outcomes

| Command                                                                                                                                            | Final outcome                                                                         |
| -------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- |
| `npx vitest run apps/web/tests/MobileAccessibility.test.tsx`                                                                                       | Passed: 1 file, 8 tests.                                                              |
| `npx vitest run apps/web/tests/MobileAccessibility.test.tsx apps/web/tests/MissionHeatmap.test.tsx apps/web/tests/KeyboardShortcutsModal.test.tsx` | Passed: 3 files, 53 tests.                                                            |
| `npx vitest run apps/web/tests/MissionHeatmap.test.tsx`                                                                                            | Passed after ASCII cleanup: 1 file, 31 tests.                                         |
| `npx biome check ...` over changed web tests/components/public-demo files                                                                          | Passed: no fixes required in final run.                                               |
| `npm run test:e2e -- --project=app-desktop --project=app-mobile tests/e2e/app.e2e.ts`                                                              | Passed: 15 passed, 1 intended mobile skip.                                            |
| `npm run test:e2e -- --project=public-demo-desktop --project=public-demo-mobile tests/e2e/public-demo.e2e.ts`                                      | Passed: 14 passed, 2 intended mobile skips.                                           |
| ASCII check over changed evidence/docs/tests/components                                                                                            | Passed: no findings.                                                                  |
| CRLF and final-newline checks over changed evidence/docs/tests/components                                                                          | Passed: no findings.                                                                  |
| No-overclaim grep review                                                                                                                           | Passed review: hits were explicit no-claim, unsupported-claim, or boundary text only. |
| `git diff --check`                                                                                                                                 | Passed.                                                                               |

***

## Browser Guard Criteria

Session 06 browser evidence must verify:

* No unexpected page errors, console errors, failed local requests, or failed local assets.
* No privacy-sensitive diagnostics, visible text, screenshots, or failure output.
* No document-level horizontal overflow on desktop or mobile projects.
* No incoherent overlap among release-critical shell regions or overlay controls.
* Focused controls are in the viewport and expose a visible focus indicator.
* Release-critical interactive controls have accessible names.
* Visible text in marked release surfaces fits or wraps without clipping.
* Critical foreground/background text pairs meet the configured contrast floor where automated checks are feasible.
* Reduced-motion state keeps meaning visible without relying on animation.
* Public demo service-worker evidence remains separate from production-hosted validation.

***

## Screenshot Retention List

Retain Playwright attachments for these release views when the corresponding project runs:

| Surface                    | Expected attachment names                                                                         |
| -------------------------- | ------------------------------------------------------------------------------------------------- |
| App cockpit                | `app-desktop-cockpit`, `app-mobile-cockpit`                                                       |
| App battlefield            | `app-desktop-battlefield-board`, `app-mobile-battlefield-board`                                   |
| App media fallback         | `app-desktop-battlefield-fallback`, `app-mobile-battlefield-fallback`                             |
| App reduced motion         | `app-desktop-battlefield-reduced-motion`, `app-mobile-battlefield-reduced-motion`                 |
| App orchestration          | `app-desktop-orchestration-panel`, `app-mobile-orchestration-panel`                               |
| App release settings       | `app-desktop-release-settings-and-local-erasure`, `app-mobile-release-settings-and-local-erasure` |
| App replay/export/scan     | `app-desktop-release-replay-export-scan`, `app-mobile-release-replay-export-scan`                 |
| App War Room               | `app-desktop-war-room-*`, `app-mobile-war-room-*`                                                 |
| App overlays               | `app-desktop-release-overlays`, `app-mobile-release-overlays`                                     |
| Public demo splash         | `public-demo-desktop-splash`, `public-demo-mobile-splash`                                         |
| Public demo cockpit        | `public-demo-desktop-cockpit`, `public-demo-mobile-cockpit`                                       |
| Public demo battlefield    | `public-demo-desktop-battlefield-board`, `public-demo-mobile-battlefield-board`                   |
| Public demo reduced motion | `public-demo-desktop-demo-reduced-motion`, `public-demo-mobile-demo-reduced-motion`               |
| Public demo offline shell  | `public-demo-desktop-offline-shell`                                                               |

Screenshots must not include raw prompts, commands, file contents, tokens, local paths, room payloads, replay buffers, exports, logs, backups, scans, provider output, or quarantined historical material.

***

## Manual Review Slots

| Review item                                             | Status                          | Notes                                                                                                 |
| ------------------------------------------------------- | ------------------------------- | ----------------------------------------------------------------------------------------------------- |
| Screenshot visual review for no overlap and no clipping | Retained, not manually reviewed | Playwright attachments were retained under `test-results/e2e/`; no manual visual audit was performed. |
| Keyboard-only review across app release surfaces        | Not performed                   | Automated focus checks exist, but this is not a manual keyboard audit.                                |
| Screen-reader-label review                              | Not performed                   | Component and browser name checks are automated evidence only.                                        |
| Contrast review                                         | Not performed                   | Automated contrast-critical checks are focused and not a full contrast audit.                         |
| Physical-device mobile review                           | Not performed                   | Mobile evidence uses Playwright emulation only.                                                       |
| Third-party accessibility audit                         | Not performed                   | No formal certification claim is made.                                                                |

***

## Unsupported Claims

Do not use this artifact to claim:

* Formal WCAG certification, VPAT completion, or third-party accessibility audit completion.
* Physical-device mobile certification or mobile lab validation.
* Production-hosted app, public demo, Worker, dashboard, or account validation.
* Hosted identity, SSO, organization membership, account-backed authorization, or public collaboration safety.
* Hosted storage, public replay hosting, hosted deletion, account-backed retention, or takedown runtime.
* Analytics capture, tracking script runtime, dashboard, recorder, heatmap, or session replay.
* Web Push delivery, push subscription storage, Cloudflare Tunnel, remote access, hosted diagnostic agents, or real executors.
* Trusted unified erasure from local reset, browser cleanup, Worker leave/reset, or one-boundary deletion.

***

## Residual Risks

* Automated browser and component checks do not replace manual assistive-technology review.
* Pixel 7 emulation does not prove behavior on physical devices, browser vendor variants, or OS accessibility settings.
* Automated contrast checks can catch focused release-critical failures but are not a full contrast audit.
* Production-hosted smoke from Session 05 remains a separate evidence class.
* Session 08 must rerun the release candidate gate stack after Sessions 06 and 07 finish.

***

## Session 07 And 08 Handoff

* Session 07 should keep media release gates and legacy evidence decommission separate from this mobile/accessibility evidence.
* Session 08 should cite this artifact as local browser and component evidence only, then rerun release gates and update release readiness based on actual command outcomes.
* Any manual screenshot, keyboard, screen-reader, contrast, physical-device, or third-party audit performed after this session should be appended here with date, reviewer, method, and sanitized outcome.


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter, and the optional `goal` query parameter:

```
GET https://faction-os.gitbook.io/faction-os-docs/.spec_system/archive/phases/phase_08/mobile_accessibility_certification_evidence.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
