Gamescope rewrites GAMESCOPE_FOCUSED_WINDOW (same window) after an IME
commit. The focus guard treated any PropertyNotify on the root focus
properties as a focus change, so every paced delivery stopped after its
first chunk. Re-read the property and fail only when it names a
different window; real X focus moves still fail via FocusOut, and every
check still re-validates both properties and X input focus.
Diagnosed from delivery-debug.log on Frame:
sent offset=0 bytes=24
focus invalid: GAMESCOPE_FOCUSED_WINDOW changed
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Advanced debugging now also records paced-delivery metadata (byte
offsets, lease/send errors, finish results and the exact focus-guard
check that failed) to an owner-private delivery-debug.log. No transcript
text is logged. Diagnoses later chunks being dropped after the first.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
README now covers install, launch, controls, troubleshooting, privacy and
update/uninstall for users. Validation status, version format, CLI and full
control semantics move to docs/development.md. TODO records the
v0.1.202609251524 release and the owner's fresh curl | sh install.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The native-only notice read as an error in the attended flow, where the
runtime step follows; the model message still asked for manual paths
although the app finds the XDG model store itself.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Supersedes the unpublished v0.1.202609251506 tag, whose release build script failed to
configure SDL3.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
SDL refuses to configure without X11/Wayland development files unless
SDL_UNIX_CONSOLE_BUILD is set; joystick/camera are not used.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- scripts/build-release.sh WORKDIR VERSION fetches SHA-256-pinned SDL3
3.2.16 and OpenVR SDK 2.15.6, builds audio-only SDL3 and FrameYap, runs
the tests, then stages and packages an external-runtime archive.
- RELEASE_VERSION (set in a tagged release commit) makes the attended
installer ask only y/n: install this release from GitHub, the speech
model, the CPU runtime. Flag-driven binary installs default to it.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- A bare terminal invocation reads answers from the real terminal (/dev/tty
when stdin is the curl pipe); piped data is never used as an answer and
nothing prompts without a controlling terminal.
- After the install choices it asks y/n separately for the speech model
download and the pip runtime install, runs the chosen steps in order and
stops at the first failure; equivalent flag commands are printed.
- Opens with a one-line note that the user can Ctrl+C and read the script.
- Drops the OpenVR autolaunch and --without-model questions from attended
mode; the KDE desktop entry is the launch path. Flags are unchanged.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Creates a user-local venv under $XDG_DATA_HOME/frameyap/runtimes from the
invoking python3 (3.10-3.13), installs CPU torch==2.8.0 from PyTorch's CPU
index and moondream==2.4.0 from PyPI (binary wheels only, pip --isolated,
Torch constrained), verifies imports and no CUDA, then sets python= in
paths.conf and removes superseded managed runtimes. Requires --yes; has a
read-only --print-plan/--json. A failure removes only the new venv.
Offline tests mock pip; a real run passed on x86-64 Python 3.12. ARM64 Frame
install is still pending.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- Drop the fixed 'Type adds a space' hint; a Bindings failure note now
replaces the page count instead.
- Grow the transcript card to six lines, closing the empty band above the
footer; move pagination down.
- Header: right-aligned clock/date, L/HMD/R battery readouts from OpenVR
battery properties (headset falls back to the Linux system battery);
missing readings are hidden.
- Status line chip shows Buttons ready/paused from IsDashboardVisible().
- Type (A or button) with nothing to review queues Enter alone; the button
is labelled Enter in that state.
Offline and native x86-64 builds pass; not yet deployed to Frame.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Reads the device's own battery from /sys/class/power_supply, skipping
peripheral (scope=Device) supplies and implausible values. Offline tested
against a fake power_supply tree.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>