{
  "version": 1,
  "scope": "Current source/config inventory; deployment claims are dated observations, not live telemetry.",
  "deployment_observed_at": "2026-09-10T08:05:00Z",
  "facts": {
    "public_origin": "https://undertow.wtf",
    "studio_origin": "https://undertow-studio.wedd.au",
    "studio_public_origin": "https://undertow.wedd.au",
    "full_song_model": "lyria-3.5",
    "provider_endpoint": "https://generativelanguage.googleapis.com/v1beta/interactions",
    "cognition_models": {
      "dj": "gemini-3.1-pro-preview",
      "listening": "gemini-3.5-flash-lite"
    },
    "independent_origin_verified": false,
    "remote_original_storage_configured": false,
    "canonical_operator_available": false
  },
  "services": [
    {
      "id": "owner",
      "module": "station.run",
      "port": 8765
    },
    {
      "id": "chain",
      "module": "station.chain_service",
      "port": 8766
    },
    {
      "id": "artwork",
      "module": "station.chain_service",
      "port": 8767
    },
    {
      "id": "history",
      "module": "station.call_history_service",
      "port": 8768
    },
    {
      "id": "catalogue",
      "module": "station.catalogue_service",
      "port": 8769
    },
    {
      "id": "community",
      "module": "station.anonymous_community",
      "port": 8770
    },
    {
      "id": "activity",
      "module": "station.activity_service",
      "port": 8773
    }
  ],
  "example": {
    "recording_id": "c4ad46cdb823416282c8f0d8ec32c328",
    "chain_url": "/api/recordings/c4ad46cdb823416282c8f0d8ec32c328/chain",
    "art_url": "/assets/sleeve-020.webp",
    "scope": "Live read of one already-public retained chain; not a new generation."
  },
  "components": [
    {
      "id": "caller",
      "label": "The caller",
      "enters": "A sound, a mechanism, a story, an impossible request.",
      "leaves": "Exact text, an explicit authorship choice and a source link for corrections or Bring Back.",
      "retained": "The original call; its workflow history is separate from recording and airtime history.",
      "failure": "Transport size, authorization or queue resource limits; a call may stop before any audio attempt.",
      "can": "Supply compositional constraints and choose what is left open.",
      "cannot": "Buy taste, force a provider outcome or directly operate the programme.",
      "source": "station/app.py",
      "lane": "signal"
    },
    {
      "id": "router",
      "label": "Authorship choice",
      "enters": "The caller’s explicit choice; Resident DJ is the default.",
      "leaves": "DJ_LED or DIRECT. Bring Back and corrections always go through the resident DJ.",
      "retained": "The exact intake choice and its request-bound routing receipt; older modes remain historical evidence.",
      "failure": "An invalid route or missing independent DIRECT vocal choice stops the call before generation.",
      "can": "Choose who authors the provider brief. DIRECT sends the caller’s exact music direction.",
      "cannot": "Infer a bypass from a complete score, judge meaning or award taste.",
      "source": "station/authorship.py",
      "lane": "signal"
    },
    {
      "id": "boundary",
      "label": "What must survive",
      "enters": "Exact caller commitments, valued source qualities and remaining freedom.",
      "leaves": "Typed preservation constraints inside a current DJ decision, separate from authorship and vocals.",
      "retained": "Each preserved element and its basis, the DJ’s steer and the freedom left to Lyria.",
      "failure": "A contradictory or missing binding is a visible evidence gap, not permission to infer it.",
      "can": "Bound the DJ’s compositional discretion.",
      "cannot": "Replace a specific caller mechanism with a preferred house recipe.",
      "source": "station/dj.py",
      "lane": "signal"
    },
    {
      "id": "dj",
      "label": "DJ & memory",
      "enters": "The call, authorship boundary and retained context with evidence classes.",
      "leaves": "A musical intention and explanation; not a verdict on the audio that has yet to exist.",
      "retained": "Exact DJ interpretation, cognition trace and contextual lineage.",
      "failure": "Unusable cognition or an unsupported provenance claim; missing memory cannot be invented.",
      "can": "Compose only within the freedom left open and reference evidence-backed context.",
      "cannot": "Infer human taste from machine descriptions, airtime or audience marks.",
      "source": "station/dj.py",
      "lane": "signal"
    },
    {
      "id": "brief",
      "label": "The exact brief",
      "enters": "The caller-owned score plus only authorized DJ additions.",
      "leaves": "Ordered provider input blocks, with a request hash.",
      "retained": "Byte-exact request envelope privately; exact musical text in the scoped public chain.",
      "failure": "A mismatched request hash or recording binding makes the provider evidence unavailable.",
      "can": "Specify the musical object sent to the provider.",
      "cannot": "Prove that a sent instruction was heard or obeyed.",
      "source": "station/creative_chain.py",
      "lane": "signal"
    },
    {
      "id": "lyria",
      "label": "Lyria",
      "enters": "One durably reserved full-song request after successful routing.",
      "leaves": "One provider outcome: ordered text/audio blocks, refusal or failure.",
      "retained": "Original request/response bytes, receipts, every ordered block, costs and hashes.",
      "failure": "Refusal, timeout, outage, provider quota or ambiguous failure. No automatic retry.",
      "can": "Render its own stochastic response to the musical brief.",
      "cannot": "Spend outside a reservation, provide human taste or become a candidate-farming loop.",
      "source": "station/provider.py",
      "lane": "signal"
    },
    {
      "id": "record",
      "label": "The found record",
      "enters": "Provider-original audio and returned self-description.",
      "leaves": "A retained recording identity, original audio route and a physical sleeve.",
      "retained": "Audio bytes, returned section/lyric text, source binding and every outcome.",
      "failure": "Missing media and unavailable text are distinct. Self-description may be incomplete or misleading.",
      "can": "Exist as an immutable piece of the station’s history.",
      "cannot": "Turn provider self-report into ground truth, adherence proof or human hearing.",
      "source": "station/provider_text.py",
      "lane": "signal"
    },
    {
      "id": "programme",
      "label": "Programme & mixer",
      "enters": "Eligible recordings, durable plays and mix transitions.",
      "leaves": "A shared timeline and deck state; each listener follows that clock.",
      "retained": "Selection events, play identities, starts, durations and transition history.",
      "failure": "No eligible audio, stale timing, unavailable files or decoding failure.",
      "can": "Schedule procedurally or follow explicit human programming.",
      "cannot": "Treat a play count, automated description or popularity as a KEEP verdict.",
      "source": "station/mixing.py",
      "lane": "signal"
    },
    {
      "id": "speakers",
      "label": "Spatial speakers",
      "enters": "Decoded left/right signal and the room camera pose.",
      "leaves": "Local spatialized sound; direct stereo remains available.",
      "retained": "Original recordings remain unchanged. Spatial playback is not a new provider recording.",
      "failure": "Browser autoplay policy, device output, decoding, Web Audio or optional 3D support.",
      "can": "Place sound in the room after the listener chooses to listen.",
      "cannot": "Change the shared programme, create a new draw or claim audible success from a sent control.",
      "source": "station/web/shared-mixer.js",
      "lane": "signal"
    },
    {
      "id": "deck",
      "label": "Recording deck",
      "enters": "The identity and elapsed time of a real transmission.",
      "leaves": "A cassette-shaped way to revisit that transmission and inspect its insert.",
      "retained": "The existing recording and airtime lineage; not a fresh generation caused by a prop.",
      "failure": "A missing transmission binding must remain missing, not an invented recording.",
      "can": "Make retained airtime and its causal chain physically accessible.",
      "cannot": "Fabricate capture history, provider calls or a new archive entry on replay.",
      "source": "station/web/app.js",
      "lane": "signal"
    },
    {
      "id": "archive",
      "label": "Archive & recall",
      "enters": "Retained recordings, transmissions and linked calls.",
      "leaves": "Local replay or a new parent-linked request to return to a thread.",
      "retained": "Historical calls, failures, recordings, selected/unselected states and airtimes.",
      "failure": "Unavailable media or incomplete lineage; public scope may exclude private evidence.",
      "can": "Let people inspect and replay eligible history while the shared station continues.",
      "cannot": "Rewrite evidence, silently delete failures or disguise a replay as a fresh generation.",
      "source": "station/room_catalogue.py",
      "lane": "signal"
    },
    {
      "id": "observation",
      "label": "Automated evidence",
      "enters": "Retained audio and explicit descriptive/adherence questions.",
      "leaves": "A machine observation with provenance and limitations.",
      "retained": "Observation text, model identity, request/response and attachment to the recording.",
      "failure": "Hallucinated hearing, generic praise, wrong attachment or mistaken adherence assessment.",
      "can": "Describe and provide evidence for inspection.",
      "cannot": "Award human KEEP/MAYBE/NO, gate airtime by predicted quality or close artistic acceptance.",
      "source": "station/dj.py",
      "lane": "witness"
    },
    {
      "id": "human",
      "label": "Human taste",
      "enters": "Adrian’s actual listening, separately from instruction adherence.",
      "leaves": "Human KEEP / MAYBE / NO and a reason when supplied.",
      "retained": "The human note and its recording identity; private notes are not exposed by the public chain.",
      "failure": "No listening or no public note: neither can be filled in by a model.",
      "can": "Decide whether the artistic method and sound work. Release remains a separate decision.",
      "cannot": "Be inferred from airtime, provider success, tests or automated KEEP-like language.",
      "source": "station/store.py",
      "lane": "witness"
    },
    {
      "id": "reaction",
      "label": "Audience marks",
      "enters": "An explicit mark from an existing fairness session.",
      "leaves": "Public folklore around an eligible sleeve.",
      "retained": "Append-only reaction events, including changes/removals; no personal taste profile.",
      "failure": "Expired session, authorization or bounded write-rate failure.",
      "can": "Let a listener leave a mark and change their own mark.",
      "cannot": "Train the DJ, programme airtime, rank taste or authorize another draw.",
      "source": "station/anonymous_community.py",
      "lane": "witness"
    },
    {
      "id": "edge",
      "label": "Browser & Cloudflare",
      "enters": "Listener HTTPS requests and explicit browser gestures.",
      "leaves": "Static room assets and allowlisted listener reads/writes forwarded with server-side authority.",
      "retained": "Frozen releases and deployment receipts. Provider/operator credentials never enter public JS.",
      "failure": "DNS, TLS, edge configuration, origin timeout or refused route; no catch-all private proxy.",
      "can": "Serve the public room and enforce deterministic route/transport boundaries.",
      "cannot": "Expose private operator APIs or semantically rewrite a musical request.",
      "source": "station/web/_worker.js",
      "lane": "deployment"
    },
    {
      "id": "origin",
      "label": "Persistent origin",
      "enters": "Scoped requests arriving through the authenticated tunnel.",
      "leaves": "Owner state/audio/calls plus isolated projection and reaction services.",
      "retained": "Local SQLite and provider-original files. Current owner runs frozen code, not mutable HEAD.",
      "failure": "The operator Mac or its network disappearing still interrupts the station.",
      "can": "Run the shared clock and bounded producer on one authoritative data set.",
      "cannot": "Claim independent hosting because Linux unit files have been prepared.",
      "source": "tools/origin_services.py",
      "lane": "deployment"
    },
    {
      "id": "database",
      "label": "SQLite",
      "enters": "Calls, reservations, settlements, notes, plays and reaction events.",
      "leaves": "Transactional state for the owner and scoped projections for readers.",
      "retained": "Station DB plus a separate artwork-assignment registry.",
      "failure": "Disk loss/fullness, corruption, lock contention or a stale restore.",
      "can": "Retain financial and causal state with durable transactions.",
      "cannot": "Make two copied databases a safely replicated, single-owner station.",
      "source": "station/store.py",
      "lane": "deployment"
    },
    {
      "id": "media",
      "label": "Originals & sleeves",
      "enters": "Provider-original audio/evidence and retained artwork originals.",
      "leaves": "Local original files; deterministic retained-signal prints on ordinary record surfaces.",
      "retained": "Original bytes, hashes and append-only historical artwork bindings. Canonical identity is separately retained.",
      "failure": "Mac storage loss, missing paths or unavailable optional signal analysis.",
      "can": "Give every record an evidence-bearing physical identity without an image provider.",
      "cannot": "Claim all originals are in remote object storage: that migration is not configured.",
      "source": "station/artwork.py",
      "lane": "deployment"
    },
    {
      "id": "backup",
      "label": "Recovery copies",
      "enters": "Explicit SQLite databases; media backup is a separate unfinished layer.",
      "leaves": "Serialized snapshots, local restored copies, integrity checks and receipts.",
      "retained": "Every completed, failed and interrupted cycle; no automatic pruning.",
      "failure": "Capacity exhaustion, partial copy, corrupt bytes or loss of the same host.",
      "can": "Prove dated local database recovery. Linux timers are prepared, not installed.",
      "cannot": "Prove off-host durability or loss-of-Mac failover. External backup and alerts remain pending.",
      "source": "tools/backup_cycle.py",
      "lane": "deployment"
    },
    {
      "id": "operator",
      "label": "The private room",
      "enters": "Authenticated operator actions and exact retained evidence.",
      "leaves": "Private playback, provenance, human notes and explicit station controls.",
      "retained": "Calls, exact provider requests/responses, all recordings, decisions and airtimes.",
      "failure": "The canonical /operator/ bookmark is not deployed; public requests remain denied.",
      "can": "Expose the station’s truth to its authorized operator.",
      "cannot": "Become public just to remove the localhost inconvenience. Edge identity and remote access remain unfinished.",
      "source": "station/app.py",
      "lane": "deployment"
    }
  ],
  "source_sha256": {
    "deploy/origin/undertow-artwork.service": "5d6108fb44d02bc94259d0bdfb734b08f6d8dedbc1cc15ee6f48961b9d13654b",
    "deploy/origin/undertow-artwork.timer": "37b53a420b22c74ec5be45d78f05412070c22e850d77aa3efb0a620f750a3fd4",
    "deploy/origin/undertow@.service": "78409c9ff91ba92806e0030771ec6db629e162ed3fb523d2232761aace2f9613",
    "station/anonymous_community.py": "eaf0358aa6ded13b5037d872010c31204898193c63d1ab2417c2b14517426664",
    "station/app.py": "f1281a1510be67f2d34294a4c1014d7f1681f386a9fb44d28058c7291b23dea5",
    "station/artwork.py": "a1f051026b23c04e36de82e0d946487ee5cafc3eaa6d6370f95c982752e2bee8",
    "station/authorship.py": "add0d2f6928cb2567fbb9b236c0a242b1ef5663b174caf5990edd96d1ba02e3e",
    "station/cognition.py": "394de1611da1a554058a42a4161fd71a4ee4531d3ee350b8a76d85c8a7839d7f",
    "station/creative_chain.py": "4a9d7531cf9597f76a6bbdc10dbaff0d89a29cee96617e0ef159c02ea85523cf",
    "station/dj.py": "efe7c88facd9d91cbd682a0a1bfe62d58c1111f9ba2b64bdcffffea816c2b579",
    "station/mixing.py": "09234d3d273c1df95a124e04521469da995a12c72db5ee1a0514db13fe52da21",
    "station/provider.py": "b51b9b8431897109b8d933e14849cb74bbb02dd03ea8341cd58822a127d5d615",
    "station/provider_text.py": "c042d2432a89d02dd66b3fe2d4380db1cce02f07cea02e6506a102a13dc33d98",
    "station/room_catalogue.py": "565efdf2a538c812b037209650cbd6adad501272968d83b0932dc1319e9bb572",
    "station/store.py": "4dbf44e72adca801a7c02a517dacf17f0623acbbd0b5f7c06278384707725892",
    "station/web/_worker.js": "09dcb9a30ca54154947820d5d83cc48757aae42e662bfa7e1c050749e5d6ad8e",
    "station/web/app.js": "3e20174851ee7d2797e05c3b39abee9ba2e2e2b0a6c95ae3687587e89c92318a",
    "station/web/assets/sleeve-art.json": "729107c107c9741a62f3ce013bce1bb104a8f5cf532b7107443054e6939bd2d5",
    "station/web/shared-mixer.js": "d942f21dddc26e0c28d5c6c6dd61db2a4d6f5a8c64b87058ea68dee34daaf017",
    "tools/artwork_worker.py": "ca0f1ff0cc8ad8705660bd03fd756dfb821f1e639dc351386526782ca4dd5123",
    "tools/backup_cycle.py": "98661fdd93fe75d0409f25b8740d68ca51d48f45a8b848452e5ffc5c98a0a0bf",
    "tools/build_atlas.py": "562f7896af6a043811ca0d786cd5b0563c75805186914973113ecd56944db826",
    "tools/origin_services.py": "c41b3a48be7015f1627a13c98c0e72277f43593de9b23a213b8ae7b050d2661c",
    "wrangler.jsonc": "4f017358d54422f7cee67693df8def5487199438a90f69b2459b8a37374316a0"
  }
}
