Skip to content

Select safe capture improvements from PR 7 - #9

Merged
avitaldrel merged 1 commit into
mainfrom
codex/select-pr7-safe-parts
Jul 6, 2026
Merged

Select safe capture improvements from PR 7#9
avitaldrel merged 1 commit into
mainfrom
codex/select-pr7-safe-parts

Conversation

@avitaldrel

Copy link
Copy Markdown
Owner

Selectively lands the useful app/test parts from collaborator PR #7 without merging stale docs or BUGS-CLAUDE.md.\n\nIncluded:\n- Ground chat replies in menu provenance so photo menus are not described as found online or most current.\n- Add scanner framing metrics for too close, too far, and tilted guidance.\n- Add post-capture/upload photo quality feedback with a retake-last-photo flow.\n- Add a soft 0.5x camera zoom hint where supported.\n- Add unit tests for scanner metrics and photo quality verdicts.\n\nVerification:\n- npm test\n- npm run build\n- npm run a11y:audit against Vite preview on localhost:4173\n\nNot included:\n- BUGS-CLAUDE.md\n- stale AGENTS.md/FABLE doc state from the source branch\n\nReal-device camera and VoiceOver behavior still need confirmation on an iPhone/phone camera because local automated checks cannot verify hardware camera framing or true screen-reader behavior.

@vercel

vercel Bot commented Jul 6, 2026

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated (UTC)
menuvoice Ready Ready Preview, Comment Jul 6, 2026 5:42pm
menuvoice-site Ready Ready Preview, Comment Jul 6, 2026 5:42pm

@avitaldrel
avitaldrel merged commit 4af2c37 into main Jul 6, 2026
3 checks passed
@avitaldrel
avitaldrel deleted the codex/select-pr7-safe-parts branch July 6, 2026 17:43
ibrahim-khan12 added a commit that referenced this pull request Jul 21, 2026
…uard

Traced every call into the speech layer. speak() and createStreamingSpeech()
(the two functions that produce audible content) are imported only by
ConversationScreen.tsx across all 9 other screens. The other
window.speechSynthesis.speak() call sites, in audioUnlock.ts and
speech.ts's own unlockAudio(), are silent volume:0 empty-text utterances
used to prime the browser's speech engine for the mobile autoplay gate,
not spoken content. Earcons (lib/earcon.ts) are pure oscillator tones,
not speech. No live region duplicates another region's announcement on
the same screen.

Verified live: instrumented window.speechSynthesis.speak and Audio() in
the running app. Home, Settings, and the Saved-restaurants list produced
only silent priming calls (empty/space text, volume 0, empty-src or
silent-WAV audio). Opening a saved restaurant into Conversation produced
a real blob-URL audio play (OpenAI TTS), confirming the instrumentation
correctly detects genuine speech and that it fires only there.

Adds tests/speechScope.test.ts as the automated guard: it reads every
screen file and fails if any file other than ConversationScreen.tsx
imports speak or createStreamingSpeech, including a sanity check that
the detector catches a planted violation. This is the regression guard
the report asked for; future changes are caught here instead of needing
another manual trace.

Remaining: a real-device VoiceOver pass to confirm the audible experience
matches, same device-only caveat as bugs #14 and #15.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
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