Dings v3 behind client config switch dings.enabled (off by default) #69
Loading…
Reference in a new issue
No description provided.
Delete branch "void/dings-v3"
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?
What was heard: Meta heard v3 (per the Persona) and chose Nibu's proposal (3), the 8 kHz 5-bit smoothed sine; Nibu confirmed it as her voice for every event. Meta also reported a double hit in Void's voice; that is Aqua's to analyse and is not addressed here. I have heard nothing (no audio here). The switch is OFF by default.
What this is
devhas nodings.ts(git grep -il dings origin/devfinds only unrelated hits). So this PR first ports the hook from #36 (void/dings-hook,b3eb9d01, base main) onto dev, verbatim (src/app/features/dings/{dings,useDings}.ts, tests, theClientNonUIFeatureswiring, thevite.config.jscopy entry; one trivial conflict with thepublic/posescopy entry), then adds:dings: { enabled }(ClientConfig.dings,config.jsonships"enabled": false).dingsEnabled()is true only for exactlytrue. Off:useDingsfetches no manifest, creates no player (no gesture listeners), always returns false, so the stock notification sound plays - the existing behaviour. (Hook-level off path is not covered by a render test, there is no React test harness in the repo;dingsEnabledand the shipped config are tested.)minds.gamecult.org/aqua/dings-voices-70a9795/out):public/dings/manifest.json,neutral/*.ogg,senders/<voice>/*.ogg. 36 files, ~340 KB, committed because the manifest must be served frompublic/dings(vite copies it todist/public/dings). #36's design shipped no audio; drop the.oggfiles from this PR if you prefer them deployed out of band, the switch then simply finds no manifest and keeps the stock sound.senders/nibu/*is byte-identical toproposals/nibu3/*(sha256 prefixes 3833f504903f mention, ad4839400f2c dm, 6ec6fc893b94 message, aefb6ff79c42 invite; pinned by a test). Replaced the earlier proposal-1 files (2d1fd1f35d21, b0af3f0ed658, 3bcb80d86658, 0b19bf356192). Theproposals/folder andv2/are not copied.out/manifest.json) pointssenders/nibuat proposal 1 as a placeholder (its README says so); that source should be updated to (3) so it stops disagreeing with this PR.manifest.test.ts: switch default, manifest survivesparseManifestwhole, every path exists, sender/motif -> file mapping, Nibu issenders/nibuand byte-pinned to proposal 3, Ogg durations (message < 400 ms, nothing > 600 ms).Manifest vs code
{neutral:{motif:path}, senders:{localpart:{motif:path}}}neutral/x.ogg,senders/<v>/x.ogg, no..`.ogg48 kHz monosenders/<localpart>/<motif>.oggpublic/dings/README.md(#36) saiddings/<localpart>/<motif>.ogg: README corrected, code unchangedaqua eureka heimdall kiko libby nibu void weksagetMxIdLocalPart(sender)playDing('', 'invite')= neutral onlyDING_VOLUMEmessage 0.3, invite 0.7, mention/dm 1Not changed on the code side: the manifest is consistent with the parser, so nothing needed fixing.
Checks
vitest run, real node_modules): 46 files, 634 passed, 0 failed.config.jsonfailsprettier --checkon clean dev too (pre-existing).Unverified
Whether any clip sounds right (I cannot play audio; Meta's listening is the only hearing); real-browser autoplay and fetch under
BASE_URL; mxid localparts; themessage0.3 volume. Not merged, not deployed.🤖 Generated with Claude Code