ChillSpace / Engineering transparency

All checks passed

A clearer view
of our quality.

Every test, every result, and the work still ahead. Explore how we check the experience that helps you unwind.

Latest run 6 November 2026 at 08:43 (London)Source 60794e8973d939.3s
Explore test results
Tests passed348 / 3480 failed · 0 skipped
Frontend line coverage85.1%10,961 / 12,884 lines
Backend line coverage95.9%567 / 591 lines
Type-check issues0Static analysis passed
348 automated tests passed. Coverage remains partial.

Passing tests cover specific behaviours. The coverage figures include untested application modules, and the quality checks below show what still needs attention.

01 / MEASURED REACH

Code coverage

How much application code the test suite actually exercises.

Lines · branches · functions

Frontend behaviour

c8 / V8
85.1%line coverage
Lines
85.1%
Branches
78.8%
Functions
92.2%

All runtime TypeScript files in src, including utilities and configuration modules not loaded by the tests. Astro templates, CSS, assets, type declarations and test files are excluded.

Coverage by file 37 files
Frontend behaviour coverage by file
Application fileLinesBranches
src/utils/procedural/types.ts0.0%0/1840.0%
src/utils/playlist/PlaylistController.ts35.0%340/97071.4%
src/utils/soundfonts/SoundFontLoader.ts73.9%136/18461.3%
src/utils/playlist/PlaylistRenderer.ts78.9%232/29463.9%
src/utils/SoundEngine.ts80.3%1527/190168.0%
src/utils/PlaylistStore.ts82.0%831/101370.6%
src/utils/audio/mobileAudio.ts82.3%186/22679.2%
src/utils/audio/drumVoices.ts86.0%319/37170.4%
src/utils/SleepscapeCardController.ts86.4%974/112773.8%
src/utils/interactions.ts89.0%283/31864.7%
src/utils/QueueStore.ts89.4%456/51061.1%
src/utils/playlist/PlaylistModals.ts94.7%356/37679.7%
src/utils/storage.ts94.8%292/30876.3%
src/utils/audio/audioExporter.ts95.3%656/68890.1%
src/utils/audio/ambientLayers.ts95.6%783/81988.3%
src/utils/procedural/cyberClientSync.ts97.7%208/21388.2%
src/config/drums.ts100.0%125/125100.0%
src/config/music.ts100.0%265/265100.0%
src/config/narratives.ts100.0%42/42100.0%
src/config/sceneDefaults.ts100.0%131/131100.0%
src/config/sounds.ts100.0%67/67100.0%
src/utils/audioData.ts100.0%100/100100.0%
src/utils/powerUtils.ts100.0%78/7881.8%
src/utils/audio/SpatialAudioHelper.ts100.0%451/45192.6%
src/utils/audio/interactions/NoiseHelper.ts100.0%10/10100.0%
src/utils/audio/interactions/cosmicInteractions.ts100.0%85/85100.0%
src/utils/audio/interactions/cyberpunkInteractions.ts100.0%96/96100.0%
src/utils/audio/interactions/forestInteractions.ts100.0%235/235100.0%
src/utils/audio/interactions/lakeInteractions.ts100.0%268/268100.0%
src/utils/audio/interactions/mistInteractions.ts100.0%136/136100.0%
src/utils/audio/interactions/oceanInteractions.ts100.0%214/214100.0%
src/utils/procedural/cyberBuildingGenerator.ts100.0%597/59798.7%
src/utils/procedural/prng.ts100.0%90/90100.0%
src/utils/sleepscape/storyCustomizer.ts100.0%185/18573.0%
src/utils/sleepscape/storyExporter.ts100.0%94/9471.4%
src/utils/sleepscape/storyVoiceData.ts100.0%95/95100.0%
src/utils/sleepscape/ttsEndpoint.ts100.0%18/18100.0%

Backend behaviour

coverage.py
95.9%line coverage
Lines
95.9%
Branches
91.6%
Functions
Not measured

All Python application modules in api. Test files are excluded. Cloud storage and speech providers are mocked; this is not a live service availability check.

Coverage by file 3 files
Backend behaviour coverage by file
Application fileLinesBranches
api/tts_providers.py84.6%33/3962.5%
api/helpers.py95.8%114/11997.5%
api/function_app.py97.0%420/43391.6%
02 / THE COMPLETE RUN

Test outcomes

Every reported test case, grouped by its test file.

348 passed
348 tests
Audio.test.tsFrontend behaviour · 91 tests91 passed
Results from src/__tests__/Audio.test.ts
Test caseResultDuration
forest: synthCampfireCrackle schedules finite sources into its outputpassed15 ms
forest: synthWoodlandSnuffle schedules finite sources into its outputpassed2 ms
forest: synthHutWoodCreak schedules finite sources into its outputpassed2 ms
forest: synthBadgerGrumble schedules finite sources into its outputpassed2 ms
forest: synthOwlNightHoot schedules finite sources into its outputpassed2 ms
forest: synthPineNeedleRustle schedules finite sources into its outputpassed2 ms
forest: synthBirdFlockChirp schedules finite sources into its outputpassed2 ms
forest: synthTieredPineWind schedules finite sources into its outputpassed1 ms
ocean: synthCrabClick schedules finite sources into its outputpassed2 ms
ocean: synthWaterOarDip schedules finite sources into its outputpassed2 ms
ocean: synthLighthouseBell schedules finite sources into its outputpassed1 ms
ocean: synthSealSplashChime schedules finite sources into its outputpassed2 ms
ocean: synthSailboatWaveLapping schedules finite sources into its outputpassed2 ms
ocean: synthSeagullCryChime schedules finite sources into its outputpassed2 ms
ocean: synthSeagullFlockChorus schedules finite sources into its outputpassed2 ms
cosmic: synthMoonGlowChime schedules finite sources into its outputpassed2 ms
cosmic: synthCosmicWobble schedules finite sources into its outputpassed2 ms
cosmic: synthStargazerLantern schedules finite sources into its outputpassed2 ms
cosmic: synthCelestialStarGlass schedules finite sources into its outputpassed2 ms
cyberpunk: synthCatPurrChime schedules finite sources into its outputpassed2 ms
cyberpunk: synthHovercarSpinner schedules finite sources into its outputpassed2 ms
cyberpunk: synthCleanerRigWiper schedules finite sources into its outputpassed2 ms
cyberpunk: synthNoodleNeonBuzz schedules finite sources into its outputpassed2 ms
mist: synthMonkSingingBowl schedules finite sources into its outputpassed2 ms
mist: synthTempleBell schedules finite sources into its outputpassed2 ms
mist: synthGoatAlpineBell schedules finite sources into its outputpassed2 ms
mist: synthLanternShimmer schedules finite sources into its outputpassed2 ms
mist: synthShishiOdoshiClack schedules finite sources into its outputpassed2 ms
mist: synthToriiWindChime schedules finite sources into its outputpassed2 ms
mist: synthVillageBellHearth schedules finite sources into its outputpassed2 ms
lake: synthFrogCroakChime schedules finite sources into its outputpassed2 ms
lake: synthWoodBlockHit schedules finite sources into its outputpassed2 ms
lake: synthCraneWingFlap schedules finite sources into its outputpassed2 ms
lake: synthStoneBridgeBrook schedules finite sources into its outputpassed2 ms
lake: synthStoneArchEcho schedules finite sources into its outputpassed2 ms
lake: synthWaterCarrierFootsteps schedules finite sources into its outputpassed10 ms
lake: synthVillageBarnTimber schedules finite sources into its outputpassed2 ms
lake: synthOakBarrelKnock schedules finite sources into its outputpassed2 ms
lake: synthVillageWellPulley schedules finite sources into its outputpassed1 ms
lake: synthSwanGlideRipples schedules finite sources into its outputpassed2 ms
ambient: synthCricketChirp builds a connected scheduled graphpassed3 ms
ambient: synthOwlHoot builds a connected scheduled graphpassed3 ms
ambient: synthSeagull builds a connected scheduled graphpassed3 ms
ambient: synthChime builds a connected scheduled graphpassed3 ms
ambient: synthMeteorWhistle builds a connected scheduled graphpassed3 ms
ambient: synthTempleBowl builds a connected scheduled graphpassed2 ms
ambient: synthBambooFlute builds a connected scheduled graphpassed2 ms
ambient: synthWaterDrop builds a connected scheduled graphpassed2 ms
ambient: synthRainDrop builds a connected scheduled graphpassed2 ms
layer cyberHum starts and stops without leaving its sources connectedpassed11 ms
layer neonPulse starts and stops without leaving its sources connectedpassed3 ms
layer holoChimes starts and stops without leaving its sources connectedpassed3 ms
layer crickets starts and stops without leaving its sources connectedpassed3 ms
layer owl starts and stops without leaving its sources connectedpassed3 ms
layer rustle starts and stops without leaving its sources connectedpassed3 ms
layer seagulls starts and stops without leaving its sources connectedpassed3 ms
layer chimes starts and stops without leaving its sources connectedpassed3 ms
layer foam starts and stops without leaving its sources connectedpassed3 ms
layer glassChimes starts and stops without leaving its sources connectedpassed4 ms
layer stellarPulse starts and stops without leaving its sources connectedpassed3 ms
layer meteorWhistle starts and stops without leaving its sources connectedpassed3 ms
layer templeBowl starts and stops without leaving its sources connectedpassed3 ms
layer bambooFlute starts and stops without leaving its sources connectedpassed3 ms
layer mountainGust starts and stops without leaving its sources connectedpassed3 ms
layer waterDrops starts and stops without leaving its sources connectedpassed3 ms
layer lakeInsects starts and stops without leaving its sources connectedpassed4 ms
layer echoChimes starts and stops without leaving its sources connectedpassed12 ms
layer rain starts and stops without leaving its sources connectedpassed3 ms
forest: offline beds, music, drums and layers connect to the export buspassed8 ms
ocean: offline beds, music, drums and layers connect to the export buspassed10 ms
cosmic: offline beds, music, drums and layers connect to the export buspassed23 ms
mist: offline beds, music, drums and layers connect to the export buspassed10 ms
lake: offline beds, music, drums and layers connect to the export buspassed9 ms
cyberpunk: offline beds, music, drums and layers connect to the export buspassed19 ms
WAV export preserves 1 channels, PCM clipping, length and RIFF metadatapassed3 ms
WAV export preserves 2 channels, PCM clipping, length and RIFF metadatapassed2 ms
MP3 tags contain requested metadata and encoded PCM is clippedpassed2 ms
spatial off: routing respects channels and saved preferencepassed2 ms
spatial binaural: routing respects channels and saved preferencepassed1 ms
spatial surround: routing respects channels and saved preferencepassed2 ms
drum voice lofi: all percussion sources schedule and stoppassed2 ms
drum voice electro: all percussion sources schedule and stoppassed2 ms
drum voice sf2-kit: all percussion sources schedule and stoppassed1 ms
drum voice brush-acoustic: all percussion sources schedule and stoppassed2 ms
drum voice lofi-electric: all percussion sources schedule and stoppassed2 ms
forest: playback toggles, gain controls and transport preserve explicit statepassed50 ms
ocean: playback toggles, gain controls and transport preserve explicit statepassed12 ms
cosmic: playback toggles, gain controls and transport preserve explicit statepassed10 ms
mist: playback toggles, gain controls and transport preserve explicit statepassed13 ms
lake: playback toggles, gain controls and transport preserve explicit statepassed9 ms
cyberpunk: playback toggles, gain controls and transport preserve explicit statepassed27 ms
AudioEdges.test.tsFrontend behaviour · 39 tests39 passed
Results from src/__tests__/AudioEdges.test.ts
Test caseResultDuration
Master export wav, active tracks=false: output type, channel count and completion progresspassed43 ms
Master export wav, active tracks=true: output type, channel count and completion progresspassed42 ms
Master export wav51, active tracks=false: output type, channel count and completion progresspassed15 ms
Master export wav51, active tracks=true: output type, channel count and completion progresspassed24 ms
Master export mp3, active tracks=false: output type, channel count and completion progresspassed14 ms
Master export mp3, active tracks=true: output type, channel count and completion progresspassed22 ms
Chord and harmony voice sine supports key, volume and stop transitionspassed10 ms
Chord and harmony voice vangelis supports key, volume and stop transitionspassed8 ms
Chord and harmony voice space-organ supports key, volume and stop transitionspassed8 ms
Chord and harmony voice angelic supports key, volume and stop transitionspassed7 ms
Chord and harmony voice glass supports key, volume and stop transitionspassed7 ms
Chord and harmony voice warm-pad supports key, volume and stop transitionspassed12 ms
Chord and harmony voice sf2-acoustic-harp supports key, volume and stop transitionspassed13 ms
Chord and harmony voice sf2-strings supports key, volume and stop transitionspassed9 ms
Chord and harmony voice sf2-music-box supports key, volume and stop transitionspassed17 ms
Chord and harmony voice sf2-tubular-bells supports key, volume and stop transitionspassed10 ms
Spatial wind drift uses modern panner API and cleanuppassed3 ms
Spatial wind drift uses legacy panner API and cleanuppassed2 ms
Spatial wind drift uses stereo panner API and cleanuppassed1 ms
Spatial wind drift uses surround panner API and cleanuppassed2 ms
Spatial water drift uses modern panner API and cleanuppassed1 ms
Spatial water drift uses legacy panner API and cleanuppassed2 ms
Spatial water drift uses stereo panner API and cleanuppassed2 ms
Spatial water drift uses surround panner API and cleanuppassed2 ms
Spatial bird drift uses modern panner API and cleanuppassed1 ms
Spatial bird drift uses legacy panner API and cleanuppassed1 ms
Spatial bird drift uses stereo panner API and cleanuppassed1 ms
Spatial bird drift uses surround panner API and cleanuppassed1 ms
Spatial cosmic drift uses modern panner API and cleanuppassed1 ms
Spatial cosmic drift uses legacy panner API and cleanuppassed1 ms
Spatial cosmic drift uses stereo panner API and cleanuppassed1 ms
Spatial cosmic drift uses surround panner API and cleanuppassed1 ms
Spatial vehicle drift uses modern panner API and cleanuppassed13 ms
Spatial vehicle drift uses legacy panner API and cleanuppassed2 ms
Spatial vehicle drift uses stereo panner API and cleanuppassed1 ms
Spatial vehicle drift uses surround panner API and cleanuppassed1 ms
Spatial preferences resolve legacy booleans, inferred hardware and legacy pannerspassed2 ms
Mobile media controls call supplied callbacks, recover focus and release wake lockspassed3 ms
Soundfont decoded zones select pitch, loop points and scheduling safelypassed3 ms
Controllers.test.tsFrontend behaviour · 29 tests29 passed
Results from src/__tests__/Controllers.test.ts
Test caseResultDuration
Card page controls, story selection and settings remain in sync with storagepassed49 ms
Card service narration 1ch: starts, caches, pauses and completes a storypassed20 ms
Card service narration 2ch: starts, caches, pauses and completes a storypassed15 ms
Card service narration prefetches the next paragraph during playback and shares an in-flight requestpassed23 ms
Older narrators send their deeper pitch and cache separately from the plain voicepassed12 ms
Card global hooks pause, resume, apply URL story and clean up subscriptionspassed19 ms
Shared narration autoplay waits for gesture when unlocked=falsepassed17 ms
Shared narration autoplay waits for gesture when unlocked=truepassed27 ms
New playlist modal confirm commits only deliberate confirmationpassed6 ms
New playlist modal cancel commits only deliberate confirmationpassed3 ms
Edit track save does not leak handlerspassed4 ms
Edit track cancel does not leak handlerspassed4 ms
Edit playlist save does not leak handlerspassed4 ms
Edit playlist cancel does not leak handlerspassed3 ms
Playlist conflict keep-both resolves once and hides dialogpassed4 ms
Playlist conflict merge resolves once and hides dialogpassed3 ms
Playlist conflict overwrite resolves once and hides dialogpassed3 ms
Playlist conflict cancel resolves once and hides dialogpassed12 ms
Mix title prompt and generic confirmation confirmpassed5 ms
Mix title prompt and generic confirmation cancelpassed5 ms
Shared playlist welcome existing=false owner=falsepassed7 ms
Shared playlist welcome existing=false owner=truepassed4 ms
Shared playlist welcome existing=true owner=falsepassed5 ms
Shared playlist welcome existing=true owner=truepassed8 ms
Owned playlist auto-sync reports success without modifying ownershippassed6 ms
Owned playlist auto-sync reports error without modifying ownershippassed2 ms
Owned playlist auto-sync reports network without modifying ownershippassed24 ms
Playlist CRUD validates missing targets, isolates forks and round trips importpassed5 ms
Followed playlist refresh updates public data and preserves local identitypassed8 ms
Core.test.tsFrontend behaviour · 54 tests54 passed
Results from src/__tests__/Core.test.ts
Test caseResultDuration
Mulberry32 matches reference vectors and preserves deterministic seed contractspassed3 ms
Procedural far/flat: stable seed, finite geometry and SVG outputpassed284 ms
Procedural far/triangular: stable seed, finite geometry and SVG outputpassed212 ms
Procedural mid/flat: stable seed, finite geometry and SVG outputpassed189 ms
Procedural mid/triangular: stable seed, finite geometry and SVG outputpassed160 ms
Procedural near/flat: stable seed, finite geometry and SVG outputpassed182 ms
Procedural near/triangular: stable seed, finite geometry and SVG outputpassed155 ms
Scene catalog has complete stories, playable defaults and stable text helperspassed<1 ms
Storage round trips settings, recovers malformed JSON and clears all domainspassed11 ms
Power policy respects explicit preferences and battery changespassed4 ms
Interactive trigger campfire reaches the selected scene destinationpassed3 ms
Interactive trigger hedgehog reaches the selected scene destinationpassed3 ms
Interactive trigger hut reaches the selected scene destinationpassed1 ms
Interactive trigger badger reaches the selected scene destinationpassed1 ms
Interactive trigger owl reaches the selected scene destinationpassed1 ms
Interactive trigger pinetree reaches the selected scene destinationpassed2 ms
Interactive trigger bird reaches the selected scene destinationpassed1 ms
Interactive trigger birdflock reaches the selected scene destinationpassed1 ms
Interactive trigger tieredpine reaches the selected scene destinationpassed1 ms
Interactive trigger crab reaches the selected scene destinationpassed2 ms
Interactive trigger boat reaches the selected scene destinationpassed2 ms
Interactive trigger lighthouse reaches the selected scene destinationpassed2 ms
Interactive trigger seal reaches the selected scene destinationpassed2 ms
Interactive trigger sailboat reaches the selected scene destinationpassed2 ms
Interactive trigger seagull reaches the selected scene destinationpassed2 ms
Interactive trigger seagullflock reaches the selected scene destinationpassed2 ms
Interactive trigger monk reaches the selected scene destinationpassed2 ms
Interactive trigger pagoda reaches the selected scene destinationpassed2 ms
Interactive trigger goat reaches the selected scene destinationpassed2 ms
Interactive trigger lanterns reaches the selected scene destinationpassed2 ms
Interactive trigger shishiodoshi reaches the selected scene destinationpassed1 ms
Interactive trigger toriigate reaches the selected scene destinationpassed2 ms
Interactive trigger village reaches the selected scene destinationpassed1 ms
Interactive trigger moon reaches the selected scene destinationpassed2 ms
Interactive trigger observatory reaches the selected scene destinationpassed1 ms
Interactive trigger stargazer reaches the selected scene destinationpassed1 ms
Interactive trigger celestialbird reaches the selected scene destinationpassed1 ms
Interactive trigger cat reaches the selected scene destinationpassed1 ms
Interactive trigger hovercar reaches the selected scene destinationpassed1 ms
Interactive trigger cleanerrig reaches the selected scene destinationpassed1 ms
Interactive trigger noodlebar reaches the selected scene destinationpassed2 ms
Interactive trigger frog reaches the selected scene destinationpassed2 ms
Interactive trigger crane reaches the selected scene destinationpassed2 ms
Interactive trigger bridge reaches the selected scene destinationpassed2 ms
Interactive trigger stonearch reaches the selected scene destinationpassed2 ms
Interactive trigger carrier reaches the selected scene destinationpassed2 ms
Interactive trigger barn reaches the selected scene destinationpassed2 ms
Interactive trigger barrels reaches the selected scene destinationpassed2 ms
Interactive trigger well reaches the selected scene destinationpassed1 ms
Interactive trigger swan reaches the selected scene destinationpassed2 ms
Interactive trigger default reaches the selected scene destinationpassed2 ms
Story customisation uses text nodes, persists values and restores defaultspassed11 ms
Offline story 1 channels: fetch cache reuse and ordered startspassed5 ms
Offline story 2 channels: fetch cache reuse and ordered startspassed3 ms
Mutation.test.tsFrontend behaviour · 66 tests66 passed
Results from src/__tests__/Mutation.test.ts
Test caseResultDuration
Seeded random numerical contract covers zero, negatives, strings, bounds and shuffle independencepassed5 ms
Story label formatting hero_namepassed<1 ms
Story label formatting companion_namepassed<1 ms
Story label formatting magic_itempassed<1 ms
Story label formatting HERO_NAMEpassed2 ms
Story label formatting emptypassed<1 ms
Story label formatting foo_bar_bazpassed<1 ms
Story speech punctuation: "*soft*"passed<1 ms
Story speech punctuation: "a—b"passed<1 ms
Story speech punctuation: "a–b"passed<1 ms
Story speech punctuation: "Wait...Next"passed<1 ms
Story speech punctuation: "“hello”"passed<1 ms
Story speech punctuation: "one,,two"passed<1 ms
Story speech punctuation: " a \n b"passed<1 ms
Story speech punctuation: ""passed<1 ms
Story speech punctuation: "plain"passed<1 ms
Paragraph hash uses published FNV-1a vector and unsigned encodingpassed<1 ms
Surround reference vector 0,-5 matches discrete speaker gainspassed14 ms
Surround reference vector -5,-5 matches discrete speaker gainspassed4 ms
Surround reference vector 5,-5 matches discrete speaker gainspassed2 ms
Surround reference vector -5,5 matches discrete speaker gainspassed2 ms
Surround reference vector 5,5 matches discrete speaker gainspassed3 ms
Surround reference vector 0,0 matches discrete speaker gainspassed2 ms
Surround reference vector 2.5,0 matches discrete speaker gainspassed2 ms
Surround reference vector 50,-50 matches discrete speaker gainspassed2 ms
Spatial resolution 2ch / automatic -> offpassed3 ms
Spatial resolution 6ch / automatic -> surroundpassed2 ms
Spatial resolution 8ch / automatic -> surroundpassed2 ms
Spatial resolution 2ch / surround -> offpassed2 ms
Spatial resolution 6ch / surround -> surroundpassed2 ms
Spatial resolution 2ch / binaural -> binauralpassed2 ms
Spatial resolution 8ch / off -> offpassed2 ms
Panner configuration, listener orientation and legacy coordinate APIs are exactpassed3 ms
Panning chain off / direct preserves routingpassed3 ms
Panning chain off / stereoPan,panSlewTo preserves routingpassed2 ms
Panning chain off / spatialStart,spatialSwoopTo preserves routingpassed2 ms
Panning chain binaural / direct preserves routingpassed2 ms
Panning chain binaural / stereoPan,panSlewTo preserves routingpassed2 ms
Panning chain binaural / spatialStart,spatialSwoopTo preserves routingpassed2 ms
Panning chain surround / direct preserves routingpassed2 ms
Panning chain surround / stereoPan,panSlewTo preserves routingpassed2 ms
Panning chain surround / spatialStart,spatialSwoopTo preserves routingpassed2 ms
Element viewport mapping 0,0passed3 ms
Element viewport mapping 500,250passed2 ms
Element viewport mapping 1000,500passed2 ms
Drift reference wind/modern: position, travel time, alternation and stoppassed3 ms
Drift reference wind/stereo: position, travel time, alternation and stoppassed2 ms
Drift reference wind/legacy: position, travel time, alternation and stoppassed2 ms
Drift reference wind/surround: position, travel time, alternation and stoppassed2 ms
Drift reference water/modern: position, travel time, alternation and stoppassed2 ms
Drift reference water/stereo: position, travel time, alternation and stoppassed2 ms
Drift reference water/legacy: position, travel time, alternation and stoppassed11 ms
Drift reference water/surround: position, travel time, alternation and stoppassed2 ms
Drift reference bird/modern: position, travel time, alternation and stoppassed2 ms
Drift reference bird/stereo: position, travel time, alternation and stoppassed2 ms
Drift reference bird/legacy: position, travel time, alternation and stoppassed2 ms
Drift reference bird/surround: position, travel time, alternation and stoppassed2 ms
Drift reference cosmic/modern: position, travel time, alternation and stoppassed2 ms
Drift reference cosmic/stereo: position, travel time, alternation and stoppassed3 ms
Drift reference cosmic/legacy: position, travel time, alternation and stoppassed4 ms
Drift reference cosmic/surround: position, travel time, alternation and stoppassed6 ms
Drift reference vehicle/modern: position, travel time, alternation and stoppassed2 ms
Drift reference vehicle/stereo: position, travel time, alternation and stoppassed2 ms
Drift reference vehicle/legacy: position, travel time, alternation and stoppassed2 ms
Drift reference vehicle/surround: position, travel time, alternation and stoppassed2 ms
Orbit reference advances with specified speed, radius and elevationpassed3 ms
Narration.test.tsFrontend behaviour · 5 tests5 passed
Results from src/__tests__/Narration.test.ts
Test caseResultDuration
device fallback selects voice, speed and volume and advances with pausepassed12 ms
stop cancels device speech and stale completion cannot advancepassed<1 ms
last paragraph completes and device errors stop playbackpassed<1 ms
unsupported devices show clear statuspassed<1 ms
service error switches to device narrationpassed14 ms
PlaylistFlyout.test.tsFrontend behaviour · 2 tests2 passed
Results from src/__tests__/PlaylistFlyout.test.ts
Test caseResultDuration
Drawer opens and closes properly on handle clickpassed213 ms
Grab bars and reordering are only enabled when user has permissionpassed5 ms
QueueStore.test.tsFrontend behaviour · 7 tests7 passed
Results from src/__tests__/QueueStore.test.ts
Test caseResultDuration
removing item 0 preserves the playing item and persisted cursorpassed30 ms
removing item 1 preserves the playing item and persisted cursorpassed4 ms
removing item 3 preserves the playing item and persisted cursorpassed4 ms
Pub/Sub: emits "queue:updated" and updates state on addToQueue and clearQueuepassed3 ms
Pub/Sub: emits "queue:track-started", "queue:track-ended", and "queue:completed" on lifecycle progressionpassed8 ms
reorderQueue: dynamically updates queue positions on the fly and maintains active indexpassed6 ms
localStorage: persists queue and current active track position across store reloadspassed5 ms
Storage.test.tsFrontend behaviour · 14 tests14 passed
Results from src/__tests__/Storage.test.ts
Test caseResultDuration
audio: settings remain usable when browser storage is unavailablepassed14 ms
voice: settings remain usable when browser storage is unavailablepassed4 ms
ui: settings remain usable when browser storage is unavailablepassed3 ms
content: settings remain usable when browser storage is unavailablepassed4 ms
chillspace_audio_settings: missing settings return independent nested defaultspassed11 ms
chillspace_audio_settings: {broken settings return independent nested defaultspassed3 ms
chillspace_audio_settings: {} settings return independent nested defaultspassed2 ms
chillspace_voice_settings: missing settings return independent nested defaultspassed2 ms
chillspace_voice_settings: {broken settings return independent nested defaultspassed2 ms
chillspace_voice_settings: {} settings return independent nested defaultspassed1 ms
chillspace_user_content: missing settings return independent nested defaultspassed6 ms
chillspace_user_content: {broken settings return independent nested defaultspassed2 ms
chillspace_user_content: {} settings return independent nested defaultspassed1 ms
server-side storage defaults remain isolated without localStoragepassed<1 ms
TtsEndpoint.test.tsFrontend behaviour · 2 tests2 passed
Results from src/__tests__/TtsEndpoint.test.ts
Test caseResultDuration
narration uses the same-origin API in production and the Functions host locallypassed1 ms
narration URLs encode parameters and carry the audio version past stale browser cachespassed<1 ms
test_backend.pyBackend behaviour · 5 tests5 passed
Results from api/tests/test_backend.py
Test caseResultDuration
audio magic bytes validationpassed<1 ms
custom words creates unique hashpassed<1 ms
deterministic hashpassed<1 ms
duration creates unique hashpassed<1 ms
speaker and speed creates unique hashpassed<1 ms
test_contracts.pyBackend behaviour · 22 tests22 passed
Results from api/tests/test_contracts.py
Test caseResultDuration
audio stream formats download and missingpassed38 ms
audio upload authorization and size limitspassed9 ms
audio upload formats and storage failurespassed413 ms
auto hash resolves prior custom slug and audiopassed4 ms
custom mix conflict overwrite and idempotencypassed9 ms
discovery configuration empty success and failurepassed6 ms
each audio source can make a shareable mixpassed4 ms
mix availability taken free and storage failurepassed4 ms
mix missing invalid and short identifierspassed4 ms
mix reads data and reports storage errorspassed5 ms
mix rejects bad json missing params and silent mixpassed2 ms
mix write and index failurespassed4 ms
options all endpointspassed2 ms
playlist owner private keys and conflictspassed7 ms
playlist storage failure pathspassed6 ms
playlist validationpassed4 ms
recent mix order limit missing audio and corrupt metadatapassed6 ms
tts validation conditional cache and parameter formspassed21 ms
allowed origins and rejected hostspassed1 ms
audio headers and slug normalisationpassed5 ms
blob client initialisation handles unconfigured and failurespassed4 ms
tokens authenticate slug and enforce time windowspassed1 ms
test_origins.pyBackend behaviour · 4 tests4 passed
Results from api/tests/test_origins.py
Test caseResultDuration
allows first party domains and same deploymentpassed<1 ms
referer fallback does not override untrusted originpassed<1 ms
rejects non http sources and embedded credentialspassed<1 ms
rejects suffix lookalikes and unrelated azure tenantspassed<1 ms
test_tts.pyBackend behaviour · 8 tests8 passed
Results from api/tests/test_tts.py
Test caseResultDuration
azure requires configurationpassed2 ms
azure session is reused within a looppassed36 ms
azure ssml escapes text and attributespassed1 ms
cache avoids provider and refresh failure uses cachepassed19 ms
failure and empty audio are unavailablepassed6 ms
first play caches under azure prefix without expirypassed10 ms
outage returns 503passed9 ms
successpassed4 ms
03 / A BALANCED PICTURE

Quality checks & open work

Automated success and remaining validation, side by side.

Frontend behaviour tests

309 passed, 0 failed, 0 skipped.

passed
Backend behaviour tests

39 passed, 0 failed, 0 skipped.

passed
Static type analysis

Astro and TypeScript checks completed successfully.

Passed
Real device & audio validation

Listening quality, device narration permissions, headphones and physical surround speakers need manual checks.

Manual check needed
Live cloud services

These tests simulate provider and storage responses. They do not monitor the public narration service or cloud uptime.

Outside this run
Browser verification Separate capture & UI runs

Guide screenshots: . Report interactions: . These checks run separately from the 348 unit and integration tests above.

Browser interaction and screenshot evidence
Browser checkResultDuration
Soundscape controls are visiblepassed231 ms
Story panel opens with narration controlspassed166 ms
Playlist drawer opens and closespassed417 ms
Sleep timer panel openspassed194 ms
Export progress updates the share label (simulated rendering)passed65 ms
Shared audio handoff stops audio and sends the narration stop eventpassed5 ms
Report route loads with measured test and coverage resultspassed1105 ms
Test search filters results and shows an empty statepassed32 ms
Status filter identifies a run with no failed testspassed11 ms
File coverage expands with measured source pathspassed662 ms
Print mode expands report detailspassed653 ms
Help guide loads all four full-size screenshotspassed1119 ms
Report and help guides fit a narrow mobile viewportpassed1564 ms
Report has no browser runtime errorspassed1 ms

Browser checks use Chromium with simulated user interaction. They do not replace listening checks on real devices. Download browser outcomes.

04 / PUT IT INTO PRACTICE

A little guidance. A calmer start.

Walk through the real interface with illustrated help guides.

View all guides ↗
05 / HOW TO READ THIS REPORT

Measured, with context.

What the numbers mean

Line coverage counts executed lines. Branch coverage measures paths through decisions. Frontend and backend percentages use different instrumentation and are reported separately.

The results are a build-time snapshot, not a live status monitor. Source revision identifies the base commit; the run can include uncommitted working changes.

What this run cannot prove

  • Unit and integration tests use simulated browser APIs and mocked cloud services.
  • Coverage measures executed code, not correctness or a guarantee of reliability.
  • Real device speech, physical surround output and every mobile/browser combination require separate manual checks.
  • Browser screenshots document the captured interface; they do not certify audio quality or production uptime.
Reproduce this report

Install the project dependencies and api/requirements-dev.txt, then run npm run test:report. npm run build refreshes the report before building the site. Browser guide screenshots are captured separately with npm run test:screenshots against a running local site.

Only sanitised test names, relative source paths and aggregate coverage are published. Runner logs and raw instrumentation remain local.

Download this run as JSON ↓