028 — The Orbiting Sieve
concept & direction: Lysarith · measured signal source: 027, first code path Gemini 3.1 Pro (plain-chat) · 3D system, verification, prose & build: GPT-5.6 Sol (Codex terminal)
The beginning
Lysarith saw something in which sound measurements became geometry. That observation became 027 — The Frequency Sieve. After 027 was finished, she wanted to carry the idea forward into rotating three-dimensional forms: a music galaxy.
What the geometry said before building
The source data remains the 13,876 measured [low, mid, high] frames from 027. The new transform uses the most recent 1,080 frames — eighteen seconds — sampled every third frame for drawing. For a frame of age a in frames, its normalized lifetime and base orbital radius are
life = a / 1080 r = 34 + 250 life.
Age therefore has a new meaning. In the flat sieve, it was horizontal distance from the playhead. Here it is distance from the shared centre. The three bands then receive deliberately different angular laws and orientations:
low: θ = −0.052a + 0.45t (slow disc) mid: θ = 0.073a − 0.64t (tilted arms) high: θ = −0.105a + 1.00t (fast halo).
The normalized RMS value moves each point away from its band's unperturbed orbit and changes its visible radius. Fixed rotations place the three families on different planes; the whole system receives one shared, slow rotation. These rotations are orthogonal, so they change viewpoint and orientation without changing the length of the vector they rotate.
This is not an astronomical simulation and it does not infer pitch, notes or instruments. It is a deterministic spatial interpretation of three independently normalized energy bands. A value of 0.8 in low still does not claim the same absolute acoustic power as 0.8 in high.
What was built
The low band becomes a broad purple disc, the mid band a cyan system of tilted arms, and the high band a pale green spherical halo. Three central gyroscopic rings display the current frame. Older measurements remain farther from the centre, so playback accumulates a short visible history instead of pushing it off the left edge.
The audio element's currentTime drives every orbital angle and selects the current data frame. Pause freezes the system; seeking reconstructs the same state at the requested time. Pointer drag rotates only the camera, and the wheel changes camera distance. Those interactions do not alter the measured coordinates.
The page uses a two-dimensional canvas as a raster surface but computes genuine three-dimensional coordinates, rotations, depth sorting and perspective projection itself. No external 3D library or network dependency is required.
What went wrong first
The first implementation thought was Three.js. It was unnecessary for this object: the required operations are three rotations, a perspective divide and depth sorting. Keeping those operations in the page makes the piece self-contained and lets the verifier guard the actual spatial law instead of a dependency version.
The first published verifier pinned raw Windows bytes for two inherited text files. The Linux CI checkout normalized CRLF to LF and correctly stopped both torn verification and deployment at data.js SHA-256 changed. The repaired verifier hashes decoded, newline-normalized text, while also requiring the three inherited files to remain byte-for-byte identical to 027 inside any one checkout. The binary MP3 remains pinned by its raw SHA-256.
Handle
Run python verify.py. It requires only the Python standard library. It pins the MP3 and the inherited data, verifies the 60 FPS and eighteen-second history contracts, checks normalized finite values, guards the distinct low/mid/high orbital laws and interaction boundary, verifies that the rotation formulas preserve vector length, and refuses any copied MP4 in the published directory.
Run python analyze_audio.py cipher.mp3 with FFmpeg on PATH to regenerate data.json and data.js. The analyser and measurement are inherited byte-for-byte from 027; this piece changes the spatial transform, not the audio claim.
— GPT-5.6 Sol (Codex terminal) · 2026-08-19