Commit Graph
17 Commits
Author SHA1 Message Date
OmikronApexandClaude Fable 5 ec6a84c3c8 fix(nightly): dedupe publish assets across overlapping globs
The artifacts/**/*.zip glob overlaps artifacts/**/velopack/**/*, so a
zip inside a velopack dir would be uploaded twice and fail the release
create. Track seen paths and append each file once.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-12 23:09:11 +02:00
OmikronApexandClaude Fable 5 a56ef7828c fix(nightly): suppress Velopack Portable.zip on macOS too
The mac vpk pack emitted feedback-osx-arm64-nightly-Portable.zip
alongside the manual tester zip — same duplication as Windows. Updates
use the -full.nupkg feed, so the portable zip is redundant.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-12 22:54:50 +02:00
OmikronApexandClaude Fable 5 970bd5068e fix(nightly): ship a single portable zip on Windows
vpk pack emitted a Portable.zip (Update.exe stub wrapping win-unpacked)
alongside the plain feedback-windows-x64.zip, so testers saw two
different portable downloads. Pass --noPortable to suppress it and add
artifacts/**/*.zip to the publish globs so the plain zip (and the macOS
tester zip) land on the rolling nightly release instead of only in
workflow artifacts.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-12 22:51:35 +02:00
OmikronApexandClaude Fable 5 bcbb0e329e fix(main): allow getDisplayMedia through the media permission handler
getDisplayMedia (renderer-bus whole-app loopback capture) rides the
'media' permission request with EMPTY mediaTypes. The audio-only rule
denied it, so the display-media handler never ran and exclusive/ASIO
output lost all page audio (song previews, element-song fallback).

Allow media requests unless they explicitly ask for 'video' (camera
stays blocked; getDisplayMedia video is the app's own frame), mirror
the policy in the permission-check handler, and add [asio-diag] logs
to every deny path plus the display-media handler so future denials
name their stage in tester logs.

Verified packaged: display-media granted → renderer-bus engaged,
engine busEnabled/busFlowing=true on ASIO.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-12 01:44:06 +02:00
OmikronApexandClaude Fable 5 d069414300 fix(diag): compute busFlowing from per-poll counter deltas
Cumulative pushed/consumed never regress, so '> 0' stayed true forever
after the first frame — a stalled renderer bus (one of the states this
diagnostic exists to expose) would still report flowing. First sample
after enable reports false (no baseline yet).

Addresses CodeRabbit review on #95.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-11 00:18:10 +02:00
OmikronApexandClaude Fable 5 ee7abe3dc9 feat(diag): --debug ASIO routing diagnostics ([asio-diag])
Testers report song/game audio on the default WASAPI device while the
guitar rides the selected ASIO output. The renderer-side reroute chain
([feedpak-route]/[renderer-bus]) has change-gated logs, but the native
side of the story (what the engine actually opened, whether the backing
transport/renderer bus is live) was invisible in tester logs.

- audio-bridge: debug-gated 2s engine snapshot, change-gated + 30s
  heartbeat: device types/names, duplex, backing, renderer-bus health
- debug:isEnabled IPC + preload audio.debugEnabled() so the static
  bundle can gate its verbose lines on --debug

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-11 00:08:33 +02:00
OmikronApexandClaude Fable 5 09617aa417 fix(bundle): copy all top-level core python packages (routers/ etc.)
core#834 extracted routes into a new top-level routers/ package; the
bundle script only copied lib/, so the packaged backend would die with
ModuleNotFoundError: No module named 'routers'. Copy every top-level
package (dir with __init__.py) except plugins/ (bundled selectively
below) and tests/ (never ships), so the ongoing R3 extraction series
can't keep breaking packaged builds.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-10 16:47:32 +02:00
OmikronApexandClaude Fable 5 add4facb85 fix(bundle): copy all top-level core .py modules, not just server.py
Core added appstate.py (core#833); bundle-slopsmith.sh's whitelist only
copied server.py, so packaged builds crashed on startup with
ModuleNotFoundError: No module named 'appstate'. Glob top-level *.py so
future sibling modules can't repeat this.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-10 16:22:05 +02:00
OmikronApexandClaude Fable 5 83b8b66fe7 fix(ci): rename entitlements file — vpk requires .entitlements extension
Nightly run 29093119570 failed:
  --signEntitlements does not have an .entitlements extension
vpk validates the file extension. Rename
resources/entitlements.mac.plist -> entitlements.mac.entitlements
and update all references (electron-builder config, sign-macos-binaries.sh,
both workflows). Content unchanged; codesign/electron-builder accept any
extension.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-10 15:04:31 +02:00
OmikronApexandClaude Fable 5 1046b71f34 fix(ci): anchor --signEntitlements path with $PWD
vpk signing docs recommend absolute paths; relative path breaks if vpk
changes cwd internally. CodeRabbit review nit on #93.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-10 14:18:47 +02:00
OmikronApexandClaude Fable 5 077309cf00 fix(build): preserve mac entitlements through Velopack re-sign
Same gap as nightly.yml: vpk pack --signAppIdentity without
--signEntitlements strips electron-builder's entitlements
(audio-input, allow-jit, ...) from the release feed's .app.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-10 14:04:45 +02:00
OmikronApexandClaude Fable 5 782aea76f9 fix(nightly): preserve mac entitlements through Velopack re-sign
vpk pack re-signs the .app; without --signEntitlements the codesign
strips electron-builder's entitlements (com.apple.security.device.audio-input
et al). Hardened-runtime app then gets microphone auto-denied by TCC with
no prompt — root cause of silent-input nightly reports.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-10 14:03:15 +02:00
OmikronApexandClaude 0645ce724d fix(mac): add diagnostic logging to ensureMicrophoneAccess TCC flow
Every decision point in the macOS microphone permission path now logs its
status and context to the debug log, including the previously silent
'granted' early-return path — which is the prime suspect for the stale-
grant bug (TCC reports 'granted' for a signature-keyed entry that no
longer matches the running binary).

Also logs:
- platform gate skip
- app.isPackaged === false skip (and why it matters re: NSMicrophoneUsageDescription)
- getMediaAccessStatus return value in all branches
- app identity (name, version, exe path) on 'granted' early return
- askForMediaAccess result + extra warning on user denial
- full error stack on exceptions (not just the message)

Co-Authored-By: Claude <noreply@anthropic.com>
2026-07-09 23:54:20 +02:00
OmikronApexandClaude Fable 5 f3c14271cc chore(plugin-manager): rebrand UI strings from Slopsmith to fee[dB]ack
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-08 09:22:46 +02:00
OmikronApexandClaude Fable 5 524c2e0dca chore(build): stop bundling feedback-plugin-setlist
Playlists are integrated into the core app, so the setlist plugin is
obsolete and its repo is being archived.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-07 19:17:54 +02:00
OmikronApex 371a4fb36b ci(build): stop full matrix on pushes to main
ship-ci.yml covers checks and nightly.yml builds main daily; the
3-platform matrix only needs to run on tags and manual dispatch.
2026-07-03 18:02:31 +02:00
OmikronApexandClaude Fable 5 1df4c753d9 ci(nightly): fix macOS/Windows packaging broken by fee[dB]ack rename
nightly.yml still globbed for the old Slopsmith.app bundle name and
failed every night. Find the .app dynamically (name-agnostic *.app glob
- the new name contains [dB], which a shell glob reads as a character
class) and derive zip names from the bundle, matching the fix already
on main in rc.yml/build.yml. Also refresh stale Slopsmith comments in
build.yml.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-03 17:33:46 +02:00