Repository navigation
feat(notifications): add a soft notification sound - #1536
Merged
Merged
Conversation
Adds `soft`, an original two-note chime (A4 -> E5) with a rounded, felt-mallet tone, everything above ~2.4 kHz rolled off, a smooth dark room tail and a slow attack, mastered at about -32 LUFS, as a quiet, gentle option alongside the bundled alert sounds. Co-authored-by: Hertz <6dc34705e5eaffade9f039764bf81185f09d3e096c0dedc2fed3b7ba7a549620@buzz.block.builderlab.xyz> Co-Authored-By: Claude Opus 5.5 <[email protected]> Signed-off-by: Joah Gerstenberg <[email protected]>
joahg
force-pushed
the
joah/chime-notification-sound
branch
from
October 22, 2026 05:04
04e8feb to
322231b
Compare
joahg
marked this pull request as ready for review
October 22, 2026 05:05
wesbillman
reviewed
Oct 26, 2026
wesbillman
left a comment
Collaborator
There was a problem hiding this comment.
🤖 Star Lord’s automated source review via Wes’s account: no actionable findings. The new sound reuses the existing picker, preference validation and playback paths without changing defaults. Reviewed head 322231b7e3e6f2ed1daee44778bf9cec6b6b5a52 against base 3d23acb496dd82dd17265927f748109f4a1c9a8b with Rocket, Mantis and Groot. Source-only: no tests or app/audio playback performed; preview, real-alert sound and loudness remain unverified, and the linked issue was inaccessible.
kazemek21
approved these changes
Oct 30, 2026
kazemek21
left a comment
Contributor
There was a problem hiding this comment.
Kyle reviewed this PR and the Nexus review-tracker notes and approved with no comments.
Posted by Codex (gpt-6.1-sol) on behalf of kylez
gilgtm
added a commit
that referenced
this pull request
Nov 4, 2026
* origin/main: (52 commits) feat(agents): give plugin agent types the Buzz side of a turn (#2364) feat(plugins): pin buzz://plugin-install links to a path and commit (#2315) feat(plugins): tint currentColor SVG page icons like host icons (#2314) feat(notifications): add a soft notification sound (#1536) feat(agents): let agents propose a profile picture (#2267) fix(plugins): default reminders and workflows off for fresh installs (#2291) Show all reactors in compact, separate emoji capsules (#2179) fix(panels): remember page split widths per workspace (#2264) feat(search): browse open channels from a Channels tab in search (#2164) perf(relay): page combined replay filters after a reconnect (#2308) fix(composer): make native Mac text shortcuts work past link chips (#2390) perf(relay): read creator proofs for many channels per filter (#2312) fix(channels): let published leave and delete confirm through access loss (#2357) fix(media): save native context menu media downloads and hide loopback links on macOS (#2131) fix(links): say why a message preview is unavailable, and preview unjoined public channels (#2136) test(browser): serve emoji artwork in the reaction hit-area journey (#2138) test(browser): click a reply link only after its row settles (#2358) fix(agents): restore delegated workflow mentions (#2399) feat(identity): always back up keys in managed builds (#2398) test(threads): render before checking the reader across activity resizes (#2389) ... Signed-off-by: Gil Birman <[email protected]> Co-authored-by: Claude <[email protected]> # Conflicts: # src/plugins/author.test.mjs
zandt-square
added a commit
to zandt-square/buzz-app
that referenced
this pull request
Nov 4, 2026
Co-authored-by: Fizz <fbf1920f313ab37ffa4c517e2437e247fe1423378e077eccc4e29f15625b9918@buzz.block.builderlab.xyz> * origin/main: fix(mermaid): cap diagram output size (block#2231) feat(agents): give plugin agent types the Buzz side of a turn (block#2364) feat(plugins): pin buzz://plugin-install links to a path and commit (block#2315) feat(plugins): tint currentColor SVG page icons like host icons (block#2314) feat(notifications): add a soft notification sound (block#1536) feat(agents): let agents propose a profile picture (block#2267) fix(plugins): default reminders and workflows off for fresh installs (block#2291) Signed-off-by: Zandt <[email protected]>
wpfleger96
added a commit
that referenced
this pull request
Nov 4, 2026
…w-tab * origin/main: (41 commits) [3/5] Add protection to the Claude harness plugin (#1878) fix(settings): keep the bottom padding on long sections (#2361) fix(mermaid): cap diagram output size (#2231) feat(agents): give plugin agent types the Buzz side of a turn (#2364) feat(plugins): pin buzz://plugin-install links to a path and commit (#2315) feat(plugins): tint currentColor SVG page icons like host icons (#2314) feat(notifications): add a soft notification sound (#1536) feat(agents): let agents propose a profile picture (#2267) fix(plugins): default reminders and workflows off for fresh installs (#2291) Show all reactors in compact, separate emoji capsules (#2179) fix(panels): remember page split widths per workspace (#2264) feat(search): browse open channels from a Channels tab in search (#2164) perf(relay): page combined replay filters after a reconnect (#2308) fix(composer): make native Mac text shortcuts work past link chips (#2390) perf(relay): read creator proofs for many channels per filter (#2312) fix(channels): let published leave and delete confirm through access loss (#2357) fix(media): save native context menu media downloads and hide loopback links on macOS (#2131) fix(links): say why a message preview is unavailable, and preview unjoined public channels (#2136) test(browser): serve emoji artwork in the reaction hit-area journey (#2138) test(browser): click a reply link only after its row settles (#2358) ... # Conflicts: # src/buzz-mcp/tools.ts
johnmatthewtennant
added a commit
that referenced
this pull request
Nov 4, 2026
Records main as a parent; 5560670 brought in its changes without one. Signed-off-by: John Tennant <[email protected]> Co-authored-by: Martha <73923046810b68ae182000e74ef7c444383a907df20f81f2ba1008870a6f45a1@buzz.block.builderlab.xyz> Co-Authored-By: Claude Opus 5.5 <[email protected]> * origin/main: feat(solo): let viewers join read-only spaces (#2301) [3/5] Add protection to the Claude harness plugin (#1878) fix(settings): keep the bottom padding on long sections (#2361) fix(mermaid): cap diagram output size (#2231) feat(agents): give plugin agent types the Buzz side of a turn (#2364) feat(plugins): pin buzz://plugin-install links to a path and commit (#2315) feat(plugins): tint currentColor SVG page icons like host icons (#2314) feat(notifications): add a soft notification sound (#1536) feat(agents): let agents propose a profile picture (#2267) fix(plugins): default reminders and workflows off for fresh installs (#2291) Show all reactors in compact, separate emoji capsules (#2179) fix(panels): remember page split widths per workspace (#2264) # Conflicts: # src/bundled/claude-code/manifest.json
johnmatthewtennant
added a commit
that referenced
this pull request
Nov 4, 2026
Co-authored-by: Martha <73923046810b68ae182000e74ef7c444383a907df20f81f2ba1008870a6f45a1@buzz.block.builderlab.xyz> Co-Authored-By: Claude Opus 5.5 <[email protected]> * origin/main: (96 commits) test(agents): refuse a real relay workflow mention in the harness kit (#2444) fix(agents): catch up every event watch on the kinds it watches (#1852) Keep local artifact collections current (#1507) feat(members): add several people to a chat in one write (#2010) feat(solo): let viewers join read-only spaces (#2301) [3/5] Add protection to the Claude harness plugin (#1878) fix(settings): keep the bottom padding on long sections (#2361) fix(mermaid): cap diagram output size (#2231) feat(agents): give plugin agent types the Buzz side of a turn (#2364) feat(plugins): pin buzz://plugin-install links to a path and commit (#2315) feat(plugins): tint currentColor SVG page icons like host icons (#2314) feat(notifications): add a soft notification sound (#1536) feat(agents): let agents propose a profile picture (#2267) fix(plugins): default reminders and workflows off for fresh installs (#2291) Show all reactors in compact, separate emoji capsules (#2179) fix(panels): remember page split widths per workspace (#2264) feat(search): browse open channels from a Channels tab in search (#2164) perf(relay): page combined replay filters after a reconnect (#2308) fix(composer): make native Mac text shortcuts work past link chips (#2390) perf(relay): read creator proofs for many channels per filter (#2312) ... Signed-off-by: John Tennant <[email protected]>
ravarora2
added a commit
that referenced
this pull request
Nov 4, 2026
…-mentions * origin/main: (57 commits) Keep local artifact collections current (#1507) feat(members): add several people to a chat in one write (#2010) feat(solo): let viewers join read-only spaces (#2301) [3/5] Add protection to the Claude harness plugin (#1878) fix(settings): keep the bottom padding on long sections (#2361) fix(mermaid): cap diagram output size (#2231) feat(agents): give plugin agent types the Buzz side of a turn (#2364) feat(plugins): pin buzz://plugin-install links to a path and commit (#2315) feat(plugins): tint currentColor SVG page icons like host icons (#2314) feat(notifications): add a soft notification sound (#1536) feat(agents): let agents propose a profile picture (#2267) fix(plugins): default reminders and workflows off for fresh installs (#2291) Show all reactors in compact, separate emoji capsules (#2179) fix(panels): remember page split widths per workspace (#2264) feat(search): browse open channels from a Channels tab in search (#2164) perf(relay): page combined replay filters after a reconnect (#2308) fix(composer): make native Mac text shortcuts work past link chips (#2390) perf(relay): read creator proofs for many channels per filter (#2312) fix(channels): let published leave and delete confirm through access loss (#2357) fix(media): save native context menu media downloads and hide loopback links on macOS (#2131) ... Signed-off-by: Ravneet Arora <[email protected]>
johnmatthewtennant
added a commit
that referenced
this pull request
Nov 4, 2026
…est-work-activity * origin/main: test(agents): refuse a real relay workflow mention in the harness kit (#2444) fix(agents): catch up every event watch on the kinds it watches (#1852) Keep local artifact collections current (#1507) feat(members): add several people to a chat in one write (#2010) feat(solo): let viewers join read-only spaces (#2301) [3/5] Add protection to the Claude harness plugin (#1878) fix(settings): keep the bottom padding on long sections (#2361) fix(mermaid): cap diagram output size (#2231) feat(agents): give plugin agent types the Buzz side of a turn (#2364) feat(plugins): pin buzz://plugin-install links to a path and commit (#2315) feat(plugins): tint currentColor SVG page icons like host icons (#2314) feat(notifications): add a soft notification sound (#1536)
matt2e
added a commit
that referenced
this pull request
Nov 12, 2026
…#3103) ## Summary A saved notification sound name this build does not bundle made `parseSounds` throw during restore. Restore then switched Desktop alerts off and Settings showed the "Notification choices weren't saved" toast. Its **Retry saving choices** button persisted `enabled: false`, so after a reload alerts stayed off with nothing explaining why. This is reachable today: `soft` (added in #1536) saved on a newer build and restored on an older one, and every downgrade from a build with #2877, which writes `buzz` into all four categories. The fix keeps the default sound for any category whose saved value is not a known name (unknown string, number, null, missing) and leaves storage untouched, so the saved name survives for a later upgrade until a notification setting is changed on this build. A `sounds` value that is not an object still throws, so genuinely corrupt data keeps the existing paused state. Production change is 4 lines in `src/features/notifications/preferences.ts`; `docs/notifications.md` describes the fallback. ## Why before #2877 #2877 adds `buzz` to `SOUND_NAMES` and makes it the default. Once it ships, any user who then runs an older build (rollback, a second machine behind on updates, or a beta/stable pair) hits this dead end on first launch. Landing this fallback first means the older builds in circulation at that point tolerate the new name. The tests seed `klaxon`, a name no build bundles, so they keep exercising the fallback after #2877 makes `buzz` valid. ## Tests Three new cases: - `preferences.test.ts`: parser case seeding an unknown string, a number, and null in different categories, asserting per-category fallback to the default and a frozen result. The malformed-shape rejection (`"ping"`, `null`, `[]` for `sounds`) moved into its own `it.each`. - `preferences.test.ts`: restore through `createNotificationPreferences` with a fake host, asserting `enabled` stays true, `error` is null, `setItem` is never called, and `update({})` writes `enabled: true`. - `NotificationSettings.test.tsx` (jsdom): seeds the payload a #2877 build writes and asserts Desktop alerts is checked, no **Retry saving choices** button exists, and Direct messages shows `DEFAULT_SOUND`. Evidence: - `vitest run src/features/notifications src/app/NotificationSettings.test.tsx`: 15 files, 212 passed. - Same tests with main's `preferences.ts` swapped in: exactly the 3 new tests fail with the original dead end. - `biome check --error-on-warnings` on changed files: clean. - `tsc --noEmit`: exit 0. ## Before / After Left: `main`, seeded with a sound name the build does not bundle. Desktop alerts is off, the "Notification choices weren't saved" toast is up, Retry saving choices rewrites storage to `enabled:false`, and after a reload the switch is still off with nothing explaining why. Right: this branch, same seed. Desktop alerts stays on, no toast, Direct messages shows the default sound, and the storage readout at the bottom keeps the saved name through the reload. https://github.com/user-attachments/assets/ee85a5dc-2178-4cf5-a7c5-0b22f7969ace 🤖 Generated with [Claude Code](https://claude.com/claude-code) Signed-off-by: mtoohey <[email protected]> Signed-off-by: Matt Toohey <[email protected]> Co-authored-by: Claude Fable 5.1 <[email protected]>
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
Adds
soft, a quiet, gentle alert sound, to the bundled notification sounds. You can pick it per category in Settings → Notifications.public/sounds/soft.mp3: an original two-note chime, A4 → E5. It has a rounded, felt-mallet tone: the 2nd–4th harmonics fade faster than the fundamental. Everything above about 2.4 kHz is rolled off, it ends in a smooth, dark room tail (convolution with a low-passed noise impulse, not comb filters), and it starts with a 25 ms raised-cosine fade-in. It's 0.95 s long, 48 kHz stereo at 192 kbps like the other clips, and mastered at about −32 LUFS (flutteris about −30,pingabout −17).public/sounds/soft.svg: a waveform glyph in the same 24-bar format as the other sounds.SOUND_NAMES: addssoftin alphabetical order.The sound was synthesized from scratch with a small stdlib-only Python script plus ffmpeg. It isn't sampled from or derived from any third-party asset. Joah chose it after several listening rounds.
Defaults and recommendations are unchanged.
Linear: AGNTOPS-663
Validation
vitest run src/features/notifications src/app/NotificationSettings.test.tsxat322231b7e: 14 files and 156 tests passed.vitest run, last run before the audio-only swap: 11,337 passed, 1 failed (browser-host/media-preparation.integration.test.mjs, the tiled HEIC dimensions test). That test is about image preparation, not sounds.softin Settings and hearing the preview and a real alert.🤖 Generated with Claude Code