Back to Drone Zone — deep field
SOURCE / PINNED RELEASE

Made of little things.

Drone Zone — deep field

Release
578f277a8be1
Author-recorded commit
a96742b428de…
License
LICENSE
Author’s source reference
nostr://npub1n8ga89w8h6tvwamxusfyzexw8gjy84yxu9rxgnmk955cxtml4ujswzxydd/wss%3A%2F%2Fgit.napplet.soy%2F/n-9753e6cf3ec

Archive hash verified: f7f3bf8ff3482551. The source-to-build association is the author’s claim; it has not been independently rebuilt.

docs/verification.md
# Verification — 2026-09-15

## Current refinement — start radio automatically

- Successful station lookup immediately creates one shell-owned live session with `autoplay: true`. No napplet Play click or duplicate play command is sent. A failed lookup can be retried; refreshing an existing paused session preserves the pause.
- `pnpm verify`: passed (14 guidance tests, type-check, single-file build). `pnpm test:conformance`: 5 passed, 0 failed, 5 evidence-dependent skips for manifest, wire and lifecycle.
- `node tests/browser-smoke.mjs`: passed. Added no-click startup, duplicate-command prevention, pause/refresh/resume, denied and browser-blocked autoplay, station lookup recovery, missing-MEDIA link fallback and late-session teardown. All prior visual/interaction checks pass at 200×160, 320×560, 900×600 and 2400×1200 in both themes.
- Real soyLI 0.8.1 preview reported “Live transmission · 256 kbps” without any preceding click; pause, paused station refresh, resume and volume passed with no page errors. This confirms host-reported playback, not physical speaker output. Browser autoplay policy may still require the host's sound-activation control on another browser/profile.
- Final artifact: 4,821,957 bytes; SHA-256 `196770786f9b775d944cd9c2c23370f7e2002626bf6a9bdebcf6ee9e35e04668`.
- Fresh selected video: `preview-autoplay.webm`, silent VP8, 960×600, 8.960 seconds, 1,138,018 bytes; SHA-256 `da8f83a65893c19fc531f7764d97968ecc279a95e844ec13b90856077c3b0676`. Recorded through soyLI against this exact artifact; decoded first/last frames inspected, with active radio, tour, home and zoom. The selected cover remains `preview-clean-grills.png`.
- No new dependency, hard requirement, direct network access or host implementation.

## Initial release assets

- Cover: `preview-clean-grills.png`, 1200×750 PNG, 1,879,482 bytes. Inspected the complete field and verified that it loads in Listing.
- Video: `preview-release-final.webm`, 960×600 silent VP8 WebM, 8.960 seconds, 1,172,921 bytes. Recorded through soyLI from the verified build, with a four-second lead-in, the opening tour, return to origin and two zoom steps. Inspected beginning/middle/end frames and verified browser playback. SHA-256: `576fb3d9626164a5f38f36e1fac37aa3b2b1f7c2ac715729c9a3ffa3f4bf8e44`.
- The video's recorded artifact hash matches the unchanged, tested HTML: `fa46e0954788794ace2096c81d431242ac1a63c78896facb18024b495e5639a4`. The build, guidance, full browser and conformance results below apply to these exact application bytes.
- `publish.files` selects the complete app source, build configuration, documentation and tests. The publisher adds the built HTML and selected cover/video. Historical previews and installed agent-skill copies remain local.
- Public destinations: `wss://relay.napplet.soy`, `https://blossom.napplet.soy`, `https://git.napplet.soy`, `https://napplet.soy`; announcement mirrors `wss://relay.damus.io` and `wss://nos.lol`.

## Previous refinement — remove grill smearing

- Reproduced the diagonal trails using the production galaxy shader with fixed camera/time inputs. The grill fade was varying texture displacement and scale across neighboring pixels, stretching the photograph near the bank edges.
- Replaced that deformation with small rigid slice translations and an opacity blend between original and shifted image samples. The comparison removes the trails while preserving the grill banks and their slow vertical movement.
- `pnpm verify` passed (14 guidance tests, TypeScript, single-file build). `pnpm test:conformance`: 5 passed, 0 failed, 5 evidence-dependent skips. The full browser scenario suite passed, including eight frame/theme pairs, navigation, VHS controls, fallback rendering and lifecycle.
- Inspected the real host at 1× and 3.60×: clean grill edges, linked shader, successful station refresh, no page errors. Local 1200×750 frame cadence: median 16.7 ms, 95th percentile 33.4 ms. Selected preview: `preview-clean-grills.png`; earlier captures are preserved.
- Final artifact: 4,821,907 bytes; SHA-256 `fa46e0954788794ace2096c81d431242ac1a63c78896facb18024b495e5639a4`.
- `soyli check --json` passed for this artifact and preview, profile `space-playback-2`.

## Previous refinement — full-surface tape wear and separated grill banks

- Added adjustable scanlines, moving grain, a rolling tracking band and occasional short glitches across the entire diorama, including HTML annotations and the player. Each glitch has a tracking kick followed by a red/cyan echo. The scene options expose tape wear (default 45%, zero disables it) and Glitch pulse; runtime settings expose the persistent preference.
- Two contiguous grill banks frame a clear central opening, fade outward and vertically, and vary in width, height and depth. Each slice gently shifts its part of the photograph vertically. Existing routes, orbital transfers, callouts and navigation bounds are preserved.
- `pnpm verify`: passed (14 guidance/geometry tests, TypeScript and single-file build). `pnpm test:conformance`: 5 passed, 0 failed, 5 evidence-dependent skips for manifest, wire and lifecycle.
- `node tests/browser-smoke.mjs`: passed on the final filter implementation. Eight frame/theme pairs and all prior interaction scenarios pass, plus automatic/manual glitches, successive tracking/color phases, whole-player coverage, zero wear, live configuration, freeze/zero/reduced motion and teardown. Screenshots: `/private/tmp/drone-zone-qa-v5`.
- Real preview at `http://127.0.0.1:4173`: shader linked; station lookup and user-triggered refresh succeeded; tape wear changed through host Settings, persisted across reload, and was restored to 45%. Final centered composition and color-echo captures inspected; `preview-tape.png` is selected and loads in Listing. Restarted the preview to reload Vite's cached configuration schema; the final artifact hash is preserved.
- The restarted soyLI 0.8.0 host exposes MEDIA. Real user-triggered play reported “Live transmission · 256 kbps”; pause reported “Paused · the field continues”, with no page errors. This checks host-reported playback, not physical speaker output. Earlier host-limit notes below describe the previous runtime.
- Performance: measured 359 animation intervals at 1200×750 in local Chromium. Normal frames: median 16.7 ms, 95th percentile 33.2 ms (316 samples); glitch frames: median 16.7 ms, 95th percentile 33.4 ms (43 samples). Separating tracking and color into successive phases removed the earlier 50 ms median during chained filtering. Results depend on device and frame size.
- Final single-file artifact: 4,821,807 bytes. SHA-256: `54855c6f7d0130f56cfbace73f5e61ba20ab29cc6f7d239e2629ee6c2ab47ee2`.
- `soyli check --json`: passed for this exact artifact and final preview, profile `space-playback-2`, Chromium `153.0.8010.12`.
- No new dependency, network authority, runtime asset, separate animation timer or publication.

## Previous refinement — callouts, orbital detours and fading slices

- All four added PNGs are embedded unchanged and rendered in seven callouts at their original aspect ratios. Planetary callouts sit beyond the orbit rings with annotation-style connector lines.
- Six existing lanes make smooth dynamic detours to orbiting bodies, then rejoin their highways. Three of those detours have hyper gaps. Two original gaps now have seeded random lengths between 3× and 4× the earlier lengths. Principal highway/tour geometry, total lane count, zoom limits and endpoint guarantees are preserved.
- Slices touch edge-to-edge, retaining irregular widths and depth, and fade vertically along a curved envelope. The empty spacing and hard horizontal cutoffs are gone.
- `pnpm verify`: passed, including 14 guidance/geometry tests, TypeScript and the final single-file build. New geometry tests check attachment through complete planetary revolutions, smooth highway shoulders, unchanged endpoints/tour, monotonic projection and correct transit across longer gaps.
- `pnpm test:conformance`: 5 passed, 0 failed, 5 evidence-dependent skips (manifest, wire and lifecycle).
- `node tests/browser-smoke.mjs`: passed after final callout placement. Four frames (200×160, 320×560, 900×600, 2400×1200), both themes; all four supplied images observed in actual Canvas calls; distant orbital transfers and longer gaps captured; prior controls, tour, media fixture, optional-domain absence, denied playback, shader/fallback, reduced motion and teardown checks pass.
- Inspected full-field, compact/tiny, Lagrange Garden, Patience Engine and long-gap captures. Final live soyLI check: shader linked, real station lookup/refresh succeeded, orbital transfer/callout rendered without page errors. Screenshots: `/private/tmp/drone-zone-qa-v4`; selected preview: `preview-transfers.png`.
- `soyli check --json`: passed for profile `space-playback-1` with the final artifact and preview. Local 1200×750 animation: median ~16.7 ms across 45 frames (about 60 fps); hardware/frame size affect performance.
- Final artifact: 4,812,578 bytes, including the five supplied images. SHA-256: `d8edd19c33b34092e3e7f8dcaffc85bb3a499917f90a5bbbba74bb04cb0ebeac`.
- No new dependency, external runtime request, changed authority boundary or publication.

## Previous refinement — calmer paths and smooth 3D systems

- 65 highways in three gentle families, each with one broad inflection. No terminal branches. 2,049 samples per highway; no zoom-dependent decimation. Six analytic 3D orbital systems with shaded orbiting bodies replace the old looping splines and flat ellipse stacks.
- Three marked highway gaps. Ships flash at entry, cross at 22× speed with a streak and resume cruise at the exit. Background slices now vary in width, spacing, extent and parallax depth along a noisy mathematical envelope.
- `pnpm verify`: passed, including 12 guidance/geometry tests, TypeScript and the final single-file build.
- Geometry checks cover endpoint invisibility and monotonic clipping projection over five frame sizes (through 3840×2160), pan extremes and pointer-angle extremes; one highway inflection; smooth orbital closure and real depth; frame-independent gap acceleration and exit behavior.
- `pnpm test:conformance`: 5 passed, 0 failed, 5 evidence-dependent skips (manifest, wire and lifecycle, detailed below).
- `node tests/browser-smoke.mjs`: passed. Eight frame/theme pairs (200×160, 320×560, 900×600, 2400×1200), tour/takeover, pan/zoom, observations, live config/theme, mock media, missing optional domains, denied playback, Canvas fallback, reduced motion and cleanup. Added verification that the shader actually links and a real entry flash is rendered inside the opening view.
- Inspected the close-ups of the Lagrange Garden and Patience Engine: continuous orbits, visible near/far depth and shaded bodies; no old polygonal loops. Inspected wide, compact and tiny views and the captured hypertravel flash. Screenshots are in `/private/tmp/drone-zone-qa-v3`.
- Real soyLI preview: tour, observation navigation and station refresh pass; no page errors. Final shader compiles and real station lookup still resolves. Representative capture: `preview-orbits.png`; earlier previews preserved.
- Optimized static slice properties into a 256-byte local lookup texture after finding a shader regression. Final local headless measurement: median ~16.7 ms across 45 animation frames at 1200×750, approximately 60 fps; performance varies with hardware and frame size.
- `soyli check --json`: passed for profile `space-playback-1`, Chromium `153.0.8010.12`, with the final artifact hash and updated preview.
- Final single-file artifact: 2,842,672 bytes. SHA-256: `d6c9376c85230fe9bcf66cda4d8f26a3399eb428ffa69aefb834f59bc717bc71`.
- All Nostr/audio boundaries remain as before. No new dependency, external asset or publication.

## Previous visual update

- 321 routes, 20 discoverable observations, branch endpoints, explicit route gaps and close-up annotation detail. Brighter photographic highlights and one instrument visual language for annotations, player and controls.
- Navigation bounds expanded to ±2400 × ±1550 world units, 0.55×–3.60× zoom.
- Automatic tour follows the same equally spaced samples as highway H01. Verified automatic movement, manual takeover, resume, and reduced-motion/zero-motion behavior.
- `pnpm verify`: passed (8 guidance tests, type check, single-file build).
- `pnpm test:conformance`: passed again: 5 passed, 0 failed, 5 evidence-dependent skips, as detailed below.
- `node tests/browser-smoke.mjs`: passed; four frames in both themes, plus tour/takeover/resume, expanded zoom, discovery count and prior integration scenarios.
- Real soyLI preview: station resolves, tour starts and moves, manual observation navigation reaches the distant Lagrange Garden, resuming tour works, no page errors. Observed median animation interval ~16.7 ms over 45 frames at 1200×750 in the local headless browser; this is a local measurement, not a device-independent performance guarantee.
- Screenshots inspected at 200×160, 320×560, 900×600 and 2400×1200 in both themes, and at close-up/distant observation sites. Runtime root colors follow the host; photographic instrument overlays intentionally retain the map's luminous palette in light mode, per the requested art direction.
- New representative image: `preview-tour.png`; previous captures preserved.
- Current single-file artifact: 2,838,645 bytes. SHA-256: `80ab28bf6d1614a50c5fc84c734d2ec73965cb35c4b34c66729848e8eb39551d`.
- Nostr/audio authority boundaries and the existing host media limitation are unchanged.

## Initial implementation evidence


## Build and boundaries

- `pnpm type-check`: passed.
- `pnpm build`: passed. `dist/index.html` is the sole output (2,825,639 bytes), with inline scripts/styles and the embedded original JPEG. The expected bundle-size advisory is due to the photograph.
- `pnpm test:guidance`: 8 passed, including station address validation, HTTPS/primary stream selection and malformed metadata rejection.
- `pnpm test:conformance`: passed. Final artifact rechecked using `pnpm exec napplet-conformance ./dist` to avoid a concurrent build over the preview watcher.
- Reference conformance: 5 passed, 0 failed, 5 skipped. Boot/sandbox, runtime injection, no boot errors, forbidden globals and optional-domain absence pass. The three signed-manifest checks, wire envelope check and lifecycle check skip because that invocation does not supply their evidence. This is not a claim of signed-manifest or wire validation.
- `soyli check --json`: passed, profile `space-playback-1`, Chromium `153.0.8010.12`.
- Artifact SHA-256: `4529a6ad82d2b40369f0e3850a67dc4295cc18c46f304003895f29e4e8b47e31`.
- No app-owned network, browser storage, signing or relay routing. No added runtime dependency. Hard requirements remain empty; all six used domains are optional. No relay escape hatch.

## Real runtime

Preview: http://127.0.0.1:4183/ (soyLI sandbox, not raw Vite).

- Loaded the built app in a real `allow-scripts` iframe and inspected injected domains.
- Exact station NIP-19 decoded and event read from Wavefunc. The published primary stream is 256 kbps MP3, despite the event name mentioning 128k.
- Added `wss://relay.wavefunc.live` to `napplet.json` runtime hints. Actual soyLI OUTBOX lookup and user-triggered Refresh succeed; the final player reads “Listen in Wavefunc”.
- Opened the host Settings panel: all four custom properties and defaults render.
- Changed drift to 0.3 and haze to off, saved, verified the app updates live, reloaded and verified persistence, then restored defaults.
- Captured the original local preview with `soyli screenshot`; captured a second image after the real station lookup settled. Both images are preserved.

## Browser scenarios

`node tests/browser-smoke.mjs`: passed in real Chromium with a test runtime inside an opaque-origin iframe.

- `200×160`, `320×560`, `900×600`, `2400×1200`, each in dark and light themes. Screenshots inspected; frame filled, no document overflow, primary controls reachable. Runtime backgrounds match across html/body/app; photographic content retains its palette.
- Pointer drag, keyboard navigation, 0.80×/1.65× zoom bounds, reset, freeze, layer toggles and observation navigation.
- Optional domains entirely absent; rendering and navigation continue without errors.
- Live configuration and theme changes.
- WebGL unavailable: photographic Canvas fallback renders.
- Reduced-motion preference starts the scene frozen.
- Mocked shell-owned media session receives the correct source and ownership, play/pause produce host-reported state, denied playback shows an actionable error, subscriptions close and the media session is destroyed on teardown.
- No page errors in the scenario suite.

The automated screenshots are under `/private/tmp/drone-zone-qa`; the selected listing image is in the project.

## Previous host limitation

The earlier soyLI 0.7.0 preview exposed `common`, `outbox`, `link`, `theme`, and `config`, but no `media` domain. The napplet offered the linked station through NAP-LINK. The restarted 0.8.0 host now supports the real play/pause flow described above; the fallback remains available to hosts without MEDIA. Physical speaker output and device-volume behavior were not assessed in headless Chromium.

The initial implementation checks above predated publication; they did not produce a signed release manifest.