{
  "version": 1,
  "scope": "Current source/config inventory; deployment claims are dated observations, not live telemetry.",
  "deployment_observed_at": "2026-09-30T22:12:16Z",
  "facts": {
    "public_origin": "https://undertow.wtf",
    "studio_origin": "https://origin-shadow.undertow.wtf",
    "studio_public_origin": "https://undertow.wedd.au",
    "full_song_model": "lyria-3.5",
    "provider_endpoint": "https://generativelanguage.googleapis.com/v1beta/interactions",
    "cognition_models": {
      "dj": "ollama-cloud/deepseek-v4.1-flash:cloud",
      "dj_audio": "google-gemini/gemini-3.8-flash",
      "listening": "google-gemini/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 Tweak.",
      "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": "A current resident-DJ decision, or an explicit Direct-to-Lyria brief. Tweak and corrections always go through the resident DJ.",
      "retained": "The exact intake choice and its request-bound routing receipt, including the machine-readable route name; older modes remain historical evidence.",
      "failure": "An invalid route or a Direct-to-Lyria selection without its independent vocal choice stops the call before generation.",
      "can": "Choose who authors the provider brief. Direct to Lyria 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, integrity checks, restore proofs and receipts.",
      "retained": "Newest 3 passing snapshots and 3 failed cycles per database set; every older cycle's full evidence in a synced retention ledger.",
      "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": "758cf66b0835d16629404c982c53b4c74bc52d3075fd8ced85d7fdce2757795b",
    "station/app.py": "c3b6999c42d08fe3f3f330239e85e3b50c71542afb36339a8f7d172af8f29c51",
    "station/artwork.py": "a1f051026b23c04e36de82e0d946487ee5cafc3eaa6d6370f95c982752e2bee8",
    "station/authorship.py": "395ec2f9f9394567a95aff35b88bc22b20ab819837d9a773b4022db66e968651",
    "station/cognition.py": "d4050077f4cdd9f68f989c3332e96bf937602fb1cc950a179f7f8051b63d6d09",
    "station/creative_chain.py": "db76608b416ee44cf6bc00b15f55c2b45c81fb7317285bcc911c4402657d6970",
    "station/dj.py": "cb98c274985c089ae206952ed3aebbb6a00d4343dff0820b766f9540818535aa",
    "station/mixing.py": "6d46cce15391c0211a31b62f610ec606b9715d964d4bc06ba56e97c176c8983b",
    "station/provider.py": "00b46179fa9c3ba9caad267a49fc7c608ff6b078829f062b733b7140132ecece",
    "station/provider_text.py": "fc8049b48e8c6135c178b74c463c15e6a1fea0425880acb7d11be036ceb48835",
    "station/room_catalogue.py": "4f9088b6bfd48fcff8977d466a0a4fe0d37c3348454c94bba91e9ff1f3a8846e",
    "station/store.py": "ab41d197edf06bfe2adb124341d8a3e3cbac1a4af25dfc500cb75403294e29ff",
    "station/web/_worker.js": "2d1a2e1064561150e2ffac121d7f89961ce739ddf1523316dff71d5d22113d52",
    "station/web/app.js": "21aa575812884750af4298457cf4bc81372653d7094428a6abe3fe9e3e551feb",
    "station/web/assets/sleeve-art.json": "729107c107c9741a62f3ce013bce1bb104a8f5cf532b7107443054e6939bd2d5",
    "station/web/shared-mixer.js": "f5f7545a4001748ce89d1b9b4089b3c72e993afaa02d582978c91171130f2895",
    "tools/artwork_worker.py": "ca0f1ff0cc8ad8705660bd03fd756dfb821f1e639dc351386526782ca4dd5123",
    "tools/backup_cycle.py": "75190b3d6ec3b34c861b587a58360ee9f23f472f14c762475abc5e599ae714e4",
    "tools/build_atlas.py": "4c656a38640ebab0f6456fde9d1b4b39bcc867d8b87e0acfad3f7dbba1b0dfdc",
    "tools/origin_services.py": "55ebf428664ac337b723f54f41b035061291f62dfa475fe6cc155b635a1e49b8",
    "wrangler.jsonc": "fc433da8145ac7f3fe976a192a5c3ed62517524b54fe3bc4151bfa881e97229b"
  }
}
