Raise app quality to A+: coverage, a11y, refactors, release security - #1
Open
domsteil wants to merge 1 commit into
Open
Raise app quality to A+: coverage, a11y, refactors, release security#1domsteil wants to merge 1 commit into
domsteil wants to merge 1 commit into
Conversation
Testing: add ~980 tests (1852 total, 166 files); line coverage 42.6% -> 77%, functions -> 79%. New coverage for all shared components, every feature module (settings/templates/webhooks/chat-playground/connections/agent-console), 9 hooks, OAuth main-process modules (was 0%), and lib internals. Raise vite.config.mts coverage thresholds to a 75/76/66/75 regression floor and document strategy in docs/TESTING.md. Bug fixes surfaced by the new tests: - telemetry sanitizeProperties matched sensitive keys against a lowercased key but listed 'apiKey' (capital K), so API keys shipped unredacted; now lowercase - agent-console log cache wiped itself on mount, breaking "Restore cached logs" - AccountSettings rendered literal "undefined" for a null tenant tier Architecture: decompose Dashboard.tsx (1220->354) and Voice.tsx (1110->~400) into src/features modules; behavior preserved. Accessibility: roles/aria-live for status + toasts, aria-labels on icon-only buttons, menu/dialog keyboard support, role=switch toggles, form label associations, keyboard hold-to-talk on the voice mic. Security/release: enable macOS notarization, set asar:true, fail v* tag CI builds without signing certs; dev store auto-generates a per-install key instead of plaintext fallback; document in SECURITY.md. Route all raw console.* in src/lib and src/stores through the structured logger. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Closes the gaps from the codebase review to take the app from B+ to A+. Suite is fully green: 1,852 tests across 166 files pass, with
tsc, electrontsc, and ESLint (--max-warnings 0) all clean, and a productionvite buildsucceeds.Testing
vite.config.mtsraised from 60/50 to a 75/76/66/75 regression floor.docs/TESTING.md(strategy + conventions) linked from CONTRIBUTING.Bugs surfaced and fixed by the new tests
sanitizePropertiesmatched its sensitive-key list against a lowercased key, but the list contained'apiKey'(capital K), so it never matched and API keys shipped to the telemetry endpoint unredacted. Now lowercase.AccountSettingsrendered the literal string "undefined" for a null tenant tier.Architecture
Dashboard.tsx(1,220 → 354 lines) andVoice.tsx(1,110 → ~400) intosrc/features/modules, matching the agent-console pattern. Behavior preserved (verified by existing tests + production build).Accessibility
politewithrole="alert"/status), aria-labels on icon-only buttons, menu/dialog keyboard support (Escape/arrows),role="switch"toggles, form label associations, keyboard hold-to-talk on the voice mic.Security / release
notarize: false), setasar: true, and release CI now failsv*tag builds without signing certs rather than shipping unsigned.userData/.store-key(owner-only) whenSTORE_ENCRYPTION_KEYis unset.console.*insrc/libandsrc/storesthrough the structured logger (redacts sensitive fields, silent in tests).SECURITY.md.Note
One test failed once under
--coverageduring the heavy parallel authoring phase and then passed on 6 consecutive runs (including 5 stress-runs of the most race-prone file). The failure correlated with peak machine load — likely awaitFordeadline exceeded under contention rather than a logic defect — but it could not be reproduced to root-cause definitively. Flagging it: if it recurs in CI, the stream-hook reconnection tests are the place to look.🤖 Generated with Claude Code