Skip to content

a11y semantics + macOS/standalone build fixes#12

Merged
PythonLuvr merged 1 commit into
mainfrom
salvage/a11y-and-build-fixes
Jun 2, 2026
Merged

a11y semantics + macOS/standalone build fixes#12
PythonLuvr merged 1 commit into
mainfrom
salvage/a11y-and-build-fixes

Conversation

@PythonLuvr
Copy link
Copy Markdown
Owner

Salvages the safe, English parts of #1. Verified: tsc --noEmit, eslint, npm run test:migration, npm run test:smoke, and npm run build (standalone server.js confirmed at bundle root).

a11y

  • lib/a11y: reusable prop factories (modalProps, chatLogProps, statusRegionProps, composerProps, ariaExpanded, ariaCurrent)
  • Chat message list as a role="log" aria-live region; streaming cursor as a status region; composer aria-label + aria-describedby + sr-only hint
  • role="dialog"/aria-modal on the settings, channel, invite, and onboarding modals
  • <nav aria-label> + aria-current on the server rail; aria-expanded on channel group toggles; search input aria-label
  • .sr-only utility; setAccessibilitySupportEnabled(true) after app ready

build

  • next.config: outputFileTracingRoot pins the trace root so standalone server.js lands at the bundle root (was misplaced when a home-dir lockfile made Next infer ~/ as the monorepo root)
  • electron/after-pack: resolve the macOS .app Resources dir so the standalone server is copied inside the bundle

Deliberately excluded from #1: the Spanish UI fork (lang="es" + es-only string table, no locale switch), the personal sync-upstream.sh, and the supervisor/sub-agent feature (had a Windows shell-injection path and used unverified claude --agent/--bare flags — worth resubmitting separately, tested and secured). The Hermes fix from #1 already landed via #2.

Co-authored-by: aitorf2 [email protected]

Salvages the safe, English parts of #1 (which also bundled a Spanish UI
fork, a personal sync script, and an unverified supervisor/sub-agent
feature — those are intentionally left out).

a11y:
- lib/a11y: reusable prop factories (modalProps, chatLogProps,
  statusRegionProps, composerProps, ariaExpanded, ariaCurrent)
- chat message list as a role="log" aria-live region; streaming cursor
  as a status region; composer aria-label + describedby + sr-only hint
- role="dialog"/aria-modal on settings, channel, invite, onboarding modals
- <nav aria-label> + aria-current on the server rail; aria-expanded on
  channel group toggles; search input aria-label
- .sr-only utility; setAccessibilitySupportEnabled(true) after app ready

build:
- next.config: outputFileTracingRoot pins the trace root so the
  standalone server.js lands at the bundle root (was misplaced when a
  home-dir lockfile made Next infer ~/ as the monorepo root)
- electron/after-pack: resolve the macOS .app Resources dir so the
  standalone server is copied inside the bundle

Co-authored-by: aitorf2 <[email protected]>
@PythonLuvr PythonLuvr merged commit eed2453 into main Jun 2, 2026
1 check failed
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.

1 participant