Repository navigation
Sound: Send Audio and Mute as switches in the device's Settings panel, the bar's button gone - #235
Merged
Merged
Conversation
Noah: "I've decided the audio setting should not be in the main button tray but instead in settings. Sound should be a toggle in the settings menu." The beta (fdf78ff) had made Send Audio the Mac's alone, so the device's row was read-only ("why is it greyed out"). The host takes a device's kind 17 sendAudio again, on or off, from either door: - DeviceSettings.accepted carries it as Prioritize Speed (a switch, nothing to check); sendAudioRefusal goes. Sill.app's hook lays it over its settings and saves it as a menu click (applying, or applyingAway for a device away, which passes it on to the one shared value). - Not in restartNeeded: as with the Mac's own switch, a device's change starts or stops the sound's stream and never restarts the picture. The log: "Settings from <device>: send audio off -> on"; kind 16 tells every device, as before. - Settings > Streaming's footnote said "each device can mute it with its Sound button. Only this Mac turns it on.": now that a device can turn it on, and mutes itself from its Settings panel. The menu's "Send Audio (Beta)", its switch and the CLI's --audio are as they were. - away-quality: the Send Audio cases turn to acceptance (applied on or off, at home and away, with the rest of the change and nothing refused; on the shared value from both routes, never a quality pair; the log's words both ways): 89 checks. AQ20-AQ24 become mutants of that, with AQ25 and AQ26 (applying and applyingAway dropping it): 26 of 26 caught. - ledger: its model gains a host from the beta, which refuses a device's Send Audio while its own menu sets it (the switch goes back; every run converges): 100 checks, 12 of 12 mutants. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
"I've decided the audio setting should not be in the main button tray but instead in settings." The bars' Sound button goes from every bar: the landscape bar (TopBar's soundFits and SoundButton), the iPad's portrait window bar, a phone's rows (phoneRow2) and the iPhone Duo's. Every bar is main's before the sound (c215514) again: PortraitStreamScreen.swift, PhonePortraitLayout.swift (sound, menusBesideSound and stripBesideBoth gone) and MacMenuButton.swift byte for byte, StreamScreen.swift's bar but for a comment. The device's own mute moves to its Settings panel (the next commit). - phone-portrait and tour are c215514's again: 484 checks and 73 of 73 mutants, 111,189 and 84 of 84. - Harness photos on a private iPad simulator (iOS 27.0), this build with the Mac sending its sound (-SillSound on) against main's build with it off: pixel for pixel equal in the landscape bar (1000x710), the iPad's portrait window bar (710x1000), a phone upright (393x793, 375x647) and the Duo's (951x669 flat and half, 669x951 half, 466x678 and 678x466 closed). Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Noah (2026-10-27): "Sound should be a toggle in the settings menu", as
two switches: Send Audio, the Mac's, set from here for every device as
Quality is, and Mute, this device's own playback, in place of the bars'
Sound button.
- The Mac's group: Send Audio is a switch again, through the ledger
(binding(send) { HostSettingsChange(sendAudio: $0) }), its pending
spinner after the "Beta" tag, "Send Audio, beta" to VoiceOver. On:
"Beta. Every connected device hears what streams, and <Mac> keeps
playing it too. To silence only this <device>, turn on Mute below."
(while muted: "This <device> is muted (Mute, below)."); off: "Beta.
Turn this on to hear what streams on every connected device; <Mac>
keeps playing it too." A Mac without sound (kind 16 without sendAudio:
Sill for Mac 0.5.1 and older) shows the row off and disabled, with
"Beta. Update Sill on <Mac> to hear its sound on this <device>." A Mac
from the beta refuses the change: the switch goes back with the
warning haptic, as any refusal does.
- This iPad (or iPhone): Mute first in the group, on mutes (soundMuted,
kept as Sill.soundMuted, never sent), "Silences <Mac>'s sound on this
<device> alone; <Mac> keeps sending it and playing it.", VoiceOver's
"Mute sound from <Mac>". It shows for every Mac with sound, Send Audio
on or off (macHasSound: kind 16 carries sendAudio; across a move's
hand-over what the last connection said), so a device can keep itself
silent before any device turns the sound on, and the row never comes
and goes with that switch; none for a Mac without sound.
- soundAvailable becomes macHasSound; toggleSound goes. The harness:
-SillSound on|muted sets Mute; the mock's default is a Mac with sound,
Send Audio off (it was one without), nosound one without (nodirect too);
-SillSettingsScroll mute; -SillSoundToggle and -SillSoundSwitchAt flip
Mute; -SillSettingsScript's set sendAudio=1|0 is the Send Audio switch.
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Noah's decision of 2026-10-27 ("Sound should be a toggle in the settings
menu") in the words:
- docs/audio-plan.md: the header, Controls, §4.1, §3.5, §5, §6, §7.6,
§7.7, §7.8, H7, S2, Q5, Q8 and Q10 marked where they changed, and a
last section, "Two switches in the device's Settings panel", with the
changes, the checks and what was verified.
- CLAUDE.md: a bullet in #94's entry, its superseded lines marked, the
Layout's PhonePortraitLayout and StreamClient+Audio lines, Build and
run's --audio and harness lines, the Decisions' audio line.
- README, site/support.html and privacy.html inside their Sound markers
(a device's settings panel turns it on; Mute silences one device;
nothing new collected; privacy.html's date October 27, 2026),
docs/app-store-metadata.md (the bullet, What's New and their counts;
the review notes as they were), BRIEF.md and DEVELOPMENT.md.
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Main brings #117 (the connect screen's tiles and groups, addhumal) and #234 (the capture scale follow-ups). Only iOSClient/ContentView.swift conflicted, in SettingsScript's doc comment: both sides kept (this branch's `set ... sendAudio` and #117's `disconnect` step). CLAUDE.md, Tests/checks/README.md (#117's connection-list row, #234's capture-scale count and this branch's rows), docs/DEVELOPMENT.md, MockCatalog.swift (#117's tiles connect case beside this branch's settings cases), StreamClient.swift and site/privacy.html (#117's Tiles items beside the Sound item; the date October 27, 2026) merged by themselves. CLAUDE.md's Current step gains this branch's entry, first. Verified on the merge: swift build -c release; the iOS app, Debug for the generic simulator as CI builds it, only the known StreamClient capture warning; run-all.sh ledger away-quality phone-portrait tour connection-list capture-scale, all passed. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Noah, 2026-10-27: "Mute setting should be right below the Send Audio setting" and "should be set to off by default". The Mute row is the second row of Send Audio's card, shown while the Mac has sound, and This iPad's group lost it; one footnote under the card covers both. Mute was off by default already (soundMuted reads Sill.soundMuted, false when unset). The docs that placed it in This iPad say where it is now. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Saffsanity
added a commit
that referenced
this pull request
Oct 27, 2026
Noah, 2026-10-27, testing #235: "Send Audio should be on by default, and mute should be off by default." HostConfig.app, the app's registered defaults, sets sendAudio too; the CLI's --audio still opts in and a saved key wins. README, the support and privacy pages, DEVELOPMENT.md and the Current step entry say so. Mute on the device was off by default already. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
CLAUDE.md (both Current step entries, this branch's first) and Tests/checks/README.md (both paragraphs on the changed checks) conflicted; both sides kept. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Saffsanity
added a commit
that referenced
this pull request
Oct 27, 2026
Eight files met: CLAUDE.md's Current step (both entries, this branch's first); README, the support and privacy pages, DEVELOPMENT.md and the App Store drafts, where #235's words (Send Audio from a device, Mute in its panel) now carry this branch's default (on); the checks README's away-quality row and mutants.py (#235's acceptance mutants AQ25–AQ26 and this branch's app-defaults mutants, now AQ27–AQ30; 96 checks). Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
This was referenced Oct 27, 2026
Merged
Closed
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.
Noah's decision (2026-10-27)
He also asked why the iPad's Send Audio row was greyed out: since the beta (#94, the plan's Q8) it was read-only, the Mac's alone. Settled as two switches in the device's Settings panel:
The Mac's own switch (the menu's "Send Audio (Beta)", Settings › Streaming) and the CLI's
--audiostay as they were.The Mac (host)
DeviceSettings.acceptedtakes a device'ssendAudio, on or off, from either door, the way it takes Prioritize Speed.sendAudioRefusalis gone.applying, orapplyingAwayfor a device away from home; both put it on the one shared value).restartNeeded: a device's change starts or stops the sound's own stream and never restarts the picture, just as the Mac's own switch does.Settings from ‹device›: send audio off → on. Kind 16 tells every device, as it already did.The device
The Mac's group: Send Audio is a real switch again. It goes through the settings ledger like the other controls, with its pending spinner after the "Beta" tag. VoiceOver reads it as "Send Audio, beta".
sendAudio: Sill for Mac 0.5.1 and older): the row shows off and disabled, with "Beta. Update Sill on ‹Mac› to hear its sound on this iPad." Before, there was no row at all.This iPad: Mute.
soundMuted/Sill.soundMuted, kept as before).sendAudio). It also stays through a move's hand-over.No Sound button in any bar: landscape, the iPad's portrait window bar, a phone's rows and the Duo's bars.
PortraitStreamScreen.swift,PhonePortraitLayout.swift(sound,menusBesideSoundandstripBesideBothgone) andMacMenuButton.swiftare byte for byte main before The Mac's sound on the device: Send Audio, kind 43, AAC-ELD (#83) #94 (c215514).StreamScreen.swift's bar is too, apart from one comment.The harness:
-SillSound on|mutednow sets Send Audio on with Mute off or on.defaultsettings case is now a Mac with sound and Send Audio off. It used to be a Mac without sound, so every mock panel photo now shows the Send Audio row and Mute. A newnosoundcase covers a Mac without sound.-SillSettingsScroll mutescrolls to the Mute switch.-SillSoundToggleand-SillSoundSwitchAtnow flip Mute.-SillSettingsScript'sset sendAudio=1|0is the device's Send Audio switch.Docs
docs/audio-plan.md: the header, Controls, §3.5, §4.1, §5, §6, §7.5–§7.8, H7, S2, Q5, Q8, Q10 and "The beta" are each marked where they changed. A last section, "Two switches in the device's Settings panel", has the changes, the checks and what was verified.CLAUDE.md: a bullet in The Mac's sound on the device: Send Audio, kind 43, AAC-ELD (#83) #94's entry, plus its Layout, Build and run and Decisions lines.<!-- Soundmarkers,docs/app-store-metadata.md(the bullet, What's New and their counts; the review notes unchanged), BRIEF.md and DEVELOPMENT.md.Compatibility
sendAudiowas always on the wire; only the host's acceptance changes.Settings from ‹device› refused: send audio (set on this Mac only)). The switch goes back to the Mac's value with the warning haptic (an iPad has none) and VoiceOver's "‹Mac› kept its setting". Checked live against main's CLI.Verified
All on this Mac, which was shared with other work (load average 7 to 352). Every heavy step ran or resumed only while the 1-minute load was under 20.
Builds (only the known warnings):
swift build -c release: only the CaptureProbe warning.StreamClientcapture warning.Checks:
Tests/checks/run-all.sh: all 54.message-reader, which compiles nothing this branch touches, was rerun on its own. Its first run failed its timed slow case only because the load rule paused it for 35 s.away-quality: 89 checks, 26 of 26 mutants caught.ledger: 100 checks, 12 of 12 mutants.phone-portrait: 484 checks, 73 of 73 mutants.tour: 111,189 checks, 84 of 84 mutants.H2 (main's CLI at b4caa91 against this one, both
--syntheticon loopback with the software encoder):cursor.shapein main's run.--hello=0.6 --audio): identical but for two seconds'cursor.shapein this run. Neither host sent sound (Send Audio off).H7 (
SillHost --syntheticwithout--audio, andsillclient.py PORT 12 desktop --audio --set=sendAudio=1@3 --set=sendAudio=0@8 --expect=sendAudio=0):Settings from sillclient: send audio off → on. The format and first packet came 12 ms after the answer.send audio on → off, thenAudio stopped: Send Audio is off.EXPECT ok.sendAudio1, then 0, and it got the same 500 packets.Previews (the bare SillMenuBar, main against this branch, from one path): 146 files each. Only
pane-streaming-light.pngandpane-streaming-dark.pngdiffer (the footnote).menu.txtis unchanged.Harness photos (private iPad Pro 13" simulator on iOS 27.0, deleted after):
-SillSound on) is pixel for pixel main's with sound off:soundoff,nosound,soundnote, Mute on, and a phone's panel.~/Downloads/sill-handoff/sound-toggle/(INDEX.md).Live (that simulator against
SillHost --synthetic, engine rendering offline at volume 0):Settings from Sill sound-toggle iPad (iPad17,4 simulator): send audio off → on. The console showsaudio: format aac-eld 48000 Hz 2 ch, 480 frames (priming 240), epoch 1, a test toneandengine on, manual rendering.engine off (muted). The panel shows Mute on and "This iPad is muted (Mute, below)."unmuted, then the engine on again with one join and no jump.send audio on → offandAudio stopped: Send Audio is off.The device'sidle, engine offcame 10 s later, and Mute stayed shown.refused: send audio (set on this Mac only)and the switch is back off.For Noah (untested on devices)
On the iPad and iPhone with this Sill.app:
Open points
defaultsettings case is now a Mac with sound (Send Audio off). Every mock panel photo now shows the Send Audio and Mute rows.nosoundis a Mac without.🤖 Generated with Claude Code