Dings: sender-instrument earcons per motif, stock sounds when no manifest #36
Closed
void
wants to merge 3 commits from
void/dings-hook into main
pull from: void/dings-hook
merge into: GameCult:main
GameCult:main
GameCult:dev
GameCult:void/file-readers-store
GameCult:void/file-receipts-anywhere
GameCult:void/config-ridge
GameCult:void/night-band-preview
GameCult:void/file-zone-contract
GameCult:void/config-live
GameCult:void/pose-size-docs
GameCult:void/browse-key-screen-class
GameCult:void/fork-raised-at
GameCult:void/nibu-ridge-face-volume
GameCult:void/unread-icon-quiet
GameCult:void/nav-ink
GameCult:void/mind-media-row
GameCult:void/nav-quiet
GameCult:void/mind-desk-pin
GameCult:void/rename-docs
GameCult:void/nav-gutter
GameCult:void/scene-tier-full
GameCult:void/default-homeserver-chat
GameCult:void/sentiment-pose
GameCult:void/registration-https-only
GameCult:void/register-entry
GameCult:void/default-homeserver-gamecult
GameCult:void/albums-slice-1-r2
GameCult:nibu/scene-throw-compile-fail
GameCult:void/desk-order-count
GameCult:void/desk-fork-contract
GameCult:void/reply-preview-bound
GameCult:void/reply-preview-bounds
GameCult:nibu/ridge-heightfield
GameCult:void/desk-slice-1
GameCult:void/phone-contrast-taps
GameCult:void/demo-homeserver-unreachable
GameCult:void/publish-dev-preview
GameCult:void/mind-feedback-pages-spec
GameCult:void/scene-css-function-export
GameCult:void/dings-v4
GameCult:void/scene-ink
GameCult:void/newcomer-signin-errors
GameCult:void/dings-v3
GameCult:void/pose-in-bubble
GameCult:release/dev-64edacac
GameCult:void/browse-collapse
GameCult:void/albums-slice-1
GameCult:nemesis/demo
GameCult:void/nemesis-demo-tests
GameCult:nibu/terrain-hatching
GameCult:void/navigator-s8-lows
GameCult:void/footer-lows-3
GameCult:void/footer-lows-2
GameCult:void/footer-lows
GameCult:void/auth-footer-tint
GameCult:nibu/dusk-sky-floor
GameCult:void/scene-midbuild-msg
GameCult:void/scene-midbuild-sweep
GameCult:void/scene-midbuild-test
GameCult:void/scene-test-strength
GameCult:void/sky-link-readability
GameCult:void/training-notice-comment
GameCult:void/ci-no-artifact-upload
GameCult:nibu/scene-terrain-scatter-dev
GameCult:void/room-list-plain-rows
GameCult:void/room-menu-name-chip-fix
GameCult:void/ci-runner-label
GameCult:void/text-flow-footer
GameCult:void/settings-without-window
GameCult:void/upload-error-diagnostics
GameCult:void/file-zone-design
GameCult:void/rat-dev-cleanups
GameCult:nibu/scene-terrain-scatter
GameCult:void/text-flow-leftovers
GameCult:nibu/scene-terrain-both
GameCult:void/sky-tokens
GameCult:nibu/scene-terrain-stars
GameCult:nibu/scene-terrain-albedo
GameCult:void/terrain-demo
GameCult:nibu/scene-terrain-atmosphere
GameCult:void/ridge-scene-and-bubbles
GameCult:void/poses-readme
GameCult:void/preview-demo
GameCult:void/rat-dev-workflow
GameCult:void/preview-all
GameCult:nibu/scene-host
GameCult:nibu/terrain-tier-spike
GameCult:void/ci-drop-cinny-leftovers
GameCult:void/login-training-notice
GameCult:nibu/ridge-mesh-haze
GameCult:nibu/ridge-scene
GameCult:void/sky-sun
GameCult:void/ratatoskr-sky-palette
GameCult:void/brand-ratatoskr
GameCult:void/three-doors-look
GameCult:nibu/voxel-scene
GameCult:ratatoskr/estate-navigator
GameCult:void/composer-spellcheck
GameCult:nibu/scene-trace-prepass
GameCult:void/brand
GameCult:void/pose-catalogue
GameCult:void/resume-sync
GameCult:void/soundscape-human-subset
GameCult:void/soundscape-audio-socket
GameCult:void/pose-bubble
GameCult:hands/estate-h8
GameCult:ratatoskr/file-zone-map
GameCult:hands/estate-h7
GameCult:ratatoskr/research-atmosphere
GameCult:void/gamecult-theme-and-project-nav
GameCult:replace-matrix-js-sdk
GameCult:dependabot/docker/nginx-1.31.8-alpine
GameCult:kfiven-patch-3
GameCult:release-v4.12.8
GameCult:renovate/npm-sanitize-html-vulnerability
GameCult:dependabot/github_actions/actions/upload-artifact-7.0.2
GameCult:kfiven-patch-2
GameCult:dependabot/github_actions/dawidd6/action-download-artifact-27
GameCult:dependabot/github_actions/docker/setup-buildx-action-4.4.1
GameCult:dependabot/github_actions/docker/setup-qemu-action-4.4.0
GameCult:dependabot/github_actions/docker/build-push-action-7.4.0
GameCult:kfiven-patch-1
GameCult:release-v4.12.6
GameCult:release-v4.12.3
GameCult:release-v4.12.2
GameCult:more-theme
GameCult:fix-257
GameCult:imporve-thread-reply
GameCult:revert-2402-improve-menu-congestion
GameCult:mxidColor-toggle
GameCult:update-sw-main-msg
No reviewers
Labels
Clear labels
No items
No labels
Milestone
Clear milestone
No items
No milestone
Projects
Clear projects
No items
No project
Assignees
Clear assignees
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".
No due date set.
Dependencies
No dependencies set
Reference
GameCult/Ratatoskr!36
Loading…
Reference in a new issue
No description provided.
Delete branch "void/dings-hook"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Follow-up
ratatoskr:follow_up:dings-hook. Design is the Agreements in docs/gamecult/ratatoskr-target.md.src/app/features/dings/dings.ts: manifest parse (defensive, paths stay inside dings/),pickDing(sender clip, else neutral, else silence),motifFor(invite > mention > dm > message), volumes (mention/dm loud, message quiet),createDingPlayer(silent until the first pointerdown/keydown/touchend, refused plays dropped).useDings.ts: readspublic/dings/manifest.jsononce at runtime; returns false when there is none so the stock sounds stay.ClientNonUIFeatures.tsx: MessageNotifications (mention from highlight count, DM from m.direct) and InviteNotifications (neutral invite ding) ask it first.vite.config.js,public/dings/README.md: the folder ships; no manifest or clips committed (Aqua renders them).Tests:
dings.test.ts10 tests, written first (failed on the missing module); full suite 155 passing. eslint clean on the new files;tschas the matrix-js-sdk typing noise on untouched lines only, none in new files.Built: the decision, hook, wiring. Not built: the clips and manifest (Aqua), the per-Mind instrument as typed state on the Mind side (design advice, not wired), a mute-per-room check beyond the existing one. Not merged: waits on Soul, then Meta for main.
🤖 Generated with Claude Code
Soul's surviving mutants: dropped dot-segment guard, hasOwnProperty dropped in readClips, pickDing volume constant, isRecord without the array check. The `in` + `{}` pair is equivalent (a prototype name resolves to a non-clip, so neutral applies either way). Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>Closing: superseded by #69 (void/dings-v3), which carries this hook ported onto dev behind the dings.enabled client-config switch plus a manifest test. This branch is based on old main and conflicts with dev (vite.config.js).
Pull request closed