PaddySpeaks · Systems at the Whiteboard · Nº 18

The Telemetry Problem

A phone knows where you tapped. A headset knows where your eyes went, the geometry of your living room, and how your hands move — ninety times a second. Design the data platform for spatial computing, and the question is no longer how to store a firehose, but how to store the most sensitive data a consumer device has ever collected without drowning in it or mishandling it. A complete working through: the device-centric star, the sensor firehose boundary, consent as a temporal dimension, and the gaze-confirmed attention that is honest and lawful at once.

§ 01 — THE QUESTIONThe device records your body and your home

This question arrives sounding like a logging exercise and turns, within two sentences, into the hardest privacy problem in the catalog. The data is a firehose, and the firehose is biometric.

Interview Prompt

"Design the data platform for a spatial-computing platform — Meta Quest, Apple Vision Pro. Headsets stream eye, hand, and room sensors during immersive sessions. Serve Product, Trust & Privacy, and Monetization. How would you scope this out?"

LEVEL · SENIOR / STAFFDURATION · 45 MINFORMAT · WHITEBOARD

Two facts make this unlike every other data platform. First, the most sensitive data classes arrive at firehose rates. Eye-gaze is biometric; the room mesh is a three-dimensional map of a private space; both stream continuously at sixty to a hundred and twenty hertz. You cannot weld a 90 Hz pose firehose to a queryable analytics fact any more than you could weld raw GPS to a ride-share trip log — the volume alone makes the table unusable, and here the volume is also the most private data a person owns. Second, capability is not uniform. A Vision Pro has eye-tracking; a Quest controller session does not; phone-AR has neither. What data even exists is a function of the device — so device capability is a dimension that gates the schema, not a footnote to it.

A weak answer reaches for one giant events table and a boolean consent flag. A strong answer notices the three structural forces first, and names them before any boxes:

THE FIREHOSE
Raw pose & gaze. 90 Hz × six degrees of freedom × head + two hands + two eyes is millions of samples per session. It is worthless inlined and absurd to store as rows — it belongs in object storage, with the warehouse holding a per-second rollup and a pointer.
THE CONSENT WINDOW
Permission is temporal. A user grants eye-tracking, then withdraws it. The only question that matters — "was this gaze allowed when it was captured?" — is unanswerable with a mutable boolean and trivial with an SCD2 consent dimension. Consent is a window, not a flag.
THE CAPABILITY GATE
The device decides the schema. A controller-only Quest session simply has no eye rows, and that absence is correct, not missing. The sensor suite lives on the device dimension and tells you which facts a session can even produce.
Inlining a 90 Hz multi-sensor firehose into an analytics fact does two crimes at once: it makes the table unqueryable, and it co-mingles raw biometric data with everything else.

Scoping out loud

Scope first, because the privacy boundary is the design. State what you are building: a device-centric star on the immersive session, with the sensor firehose in object storage, consent as a temporal dimension that gates every analytic read, and a gaze-confirmed attention fact for monetization. State what you are deliberately keeping out of the warehouse entirely: the raw room mesh — a 3-D scan of someone's home lives in encrypted, residency-pinned, short-TTL storage and only a relocalization hash ever reaches the analytics layer. State what you punt: the rendering pipeline, the content store, real-time comfort intervention (treated as an on-device loop), and cross-device identity resolution.

Then the envelope, volunteered. A single immersive session on a fully-sensored headset:

QuantityEstimateConsequence
Sample rate90 HzThe firehose tempo everything is measured against
Signals per frame6-DoF × (head + 2 hands + 2 eyes)~30 floats per frame — multiplies the rate
Raw samples / 30-min session≈ 162 MThe number that forces the object-store boundary
Per-second rollup rows / session~1,800The queryable fact — five orders of magnitude smaller
Consent categories × regions6 × ~40The SCD2 grain; append-only versions per user
Room-mesh footprinttens of MB / scanNever in the warehouse — hash only
Gaze dwell events / ad surface1 per exposureBillable only as-of consent + spoof check

Notice the asymmetry: the per-second rollup is roughly ninety-thousand times smaller than the raw stream and carries everything analytics actually asks. That single ratio — 162 million samples reduced to eighteen hundred rows — dictates the storage tier, the privacy boundary, and the shape of every fact below. The rest of this article follows the sensor.


§ 02 — DATA FLOWFollowing a frame through the building

One architecture, two planes. The raw plane carries biometric frames to encrypted object storage and never lets them touch the warehouse; the analytic plane carries a per-second rollup and pointers, gated at read time by consent that was in force at capture.

RAW PLANE · ~162M SAMPLES / SESSION ANALYTIC PLANE · ~1.8K ROWS / SESSION HEADSET eye · hand · room · 90Hz on-device consent gate EDGE ROLLUP per-second aggregate range · velocity · dwell splits raw from queryable OBJECT STORE · ENCRYPTED raw 90Hz frames · keyed by session residency-pinned · short TTL · never inlined raw_blob_uri (pointer only) fct_xr_session the analytic grain on→off, one app fct_pose_sample per-second rollup + raw_blob_uri queryable fct_attention gaze dwell / surface gated by consent as-of capture dim_consent · SCD2 user × category × region × version valid_from / valid_to — the window dim_device (CONFORMED) sensor_suite · gates the schema per-second rows as-of join · gates the read sensor_suite decides which facts exist SOLID — sustained flow · DASHED — request-time gates · The raw plane never crosses into the warehouse.
FIG. 1 — Two planes, one boundary. Raw frames flow to encrypted object storage; the warehouse holds a per-second rollup and pointers, gated at read time by consent and device capability.

Three properties of this picture do most of the interview's work. First, the firehose never touches the warehouse — frames flow headset → edge rollup → encrypted object store, and only a per-second tributary plus a raw_blob_uri pointer reaches the analytic plane. Second, consent is a temporal dimension read at query time, not a column on the fact: the dashed arrow into fct_attention is an as-of join that asks "was this gaze allowed when it was captured," and a later withdrawal cannot rewrite a past answer. Third, the device dimension gates the schema — a session's facts are a function of its sensor suite, so the absence of eye rows for a controller session is correct, not a gap.

The Boundary Philosophy, In One Rule

The raw plane is write-only to object storage; the warehouse is read-only against permission. Biometric frames are captured, encrypted, pinned to a region, and pointed at — never queried directly, never joined, never inlined. Every analytic question is answered against the per-second rollup, and every question that touches biometrics is answered against the consent that existed at capture time. The two rules together are why a withdrawal plus an audit is survivable: the data that was lawful stays countable, the data that was not drops out, and nothing is ever overwritten.


§ 03 — DATA MODELA device-centric star on the session

The grain all three stakeholders share is the immersive session — headset on to headset off, within one app. Finer signals (pose, gaze) aggregate up to it; coarser context (user, device, consent) hangs off it. The conformed device dimension carries the sensor suite that decides which facts a session can even produce.

The conformed device dimension

The same dim_device defined here is conformed across the wider platform — it keys ads attribution, fraud velocity, the engagement surface, and the autonomous fleet. The headset is simply its most sensor-rich member. The load-bearing column is sensor_suite: it is the catalogue of what data can exist, and it is SCD2 because consent state and OS/runtime drift over the device's life.

DDL · CONFORMED DEVICE + TEMPORAL CONSENT
-- Conformed across the platform; the headset is its richest member. -- SCD2 on consent + OS/runtime, which drift over the device's life. CREATE TABLE dim_device ( device_key BIGINT PRIMARY KEY, -- surrogate; one row per version device_id BIGINT NOT NULL, device_type TEXT NOT NULL CHECK (device_type IN ('phone','web','ctv','console','headset','vehicle','pos')), make_model TEXT NOT NULL, -- 'Quest 3' | 'Vision Pro' — drives capability sensor_suite TEXT[] NOT NULL, -- {eye,hand,face,room_mesh,passthrough} os_runtime TEXT NOT NULL, app_version TEXT NOT NULL, advertising_id TEXT, -- IDFA / GAID — conformed marketing key ad_consent TEXT NOT NULL DEFAULT 'unknown', valid_from TIMESTAMPTZ NOT NULL, valid_to TIMESTAMPTZ NOT NULL DEFAULT '9999-12-31', is_current BOOLEAN NOT NULL DEFAULT true ); -- The privacy dimension. One row per user × category × region × version. -- Append-only: a withdrawal CLOSES the granted row and OPENS a withdrawn one. -- The valid window is what lets you replay consent AS-OF capture time. CREATE TABLE dim_consent ( consent_key BIGINT PRIMARY KEY, user_key BIGINT NOT NULL, data_category TEXT NOT NULL CHECK (data_category IN ('eye_tracking','hand_tracking','face', 'room_mesh','audio','attention_ads')), region TEXT NOT NULL, -- rules differ by regime (EU/CA/…) state TEXT NOT NULL CHECK (state IN ('granted','denied','withdrawn')), valid_from TIMESTAMPTZ NOT NULL, valid_to TIMESTAMPTZ NOT NULL DEFAULT '9999-12-31' ); CREATE INDEX idx_consent_asof ON dim_consent (user_key, data_category, region, valid_from, valid_to);

The session fact and the firehose rollup

The session is the shared grain: one row per immersive session, anchoring every consent as-of join through its start_ts. The firehose is aggregated to one row per session-second; the raw 90 Hz stream is a blob URI, never inlined. The comfort score and guardian-breach count make physical safety a first-class column rather than an afterthought.

DDL · SESSION FACT + PER-SECOND POSE ROLLUP
-- The analytic grain: one immersive session (headset on→off, one app). CREATE TABLE fct_xr_session ( session_key BIGINT PRIMARY KEY, device_key BIGINT NOT NULL REFERENCES dim_device(device_key), user_key BIGINT NOT NULL, app_key BIGINT NOT NULL, region TEXT NOT NULL, -- anchors the consent as-of join start_ts TIMESTAMPTZ NOT NULL, -- the as-of instant for ALL biometric reads end_ts TIMESTAMPTZ, duration_s INT, comfort_score NUMERIC(4,2), -- motion-sickness signal guardian_breaches INT NOT NULL DEFAULT 0, -- play-boundary exits (safety) terminal_reason TEXT CHECK (terminal_reason IN ('removed','idle_timeout','battery','crash')) ); CREATE INDEX idx_session_user ON fct_xr_session (user_key, start_ts); -- The firehose, aggregated. Grain: session × 1-second bucket — NOT 90Hz frame. -- The raw stream is a pointer; inlining it makes the table unqueryable. CREATE TABLE fct_pose_sample ( session_key BIGINT NOT NULL REFERENCES fct_xr_session(session_key), sec_bucket TIMESTAMPTZ NOT NULL, head_range NUMERIC(6,3), -- per-second head-pose excursion head_velocity NUMERIC(6,3), hand_activity NUMERIC(6,3), -- per-second hand-motion summary raw_blob_uri TEXT, -- full 90Hz stream in object storage PRIMARY KEY (session_key, sec_bucket) ); -- Attention: gaze dwell per UI / ad surface — privacy-gated at read time. CREATE TABLE fct_attention ( session_key BIGINT NOT NULL REFERENCES fct_xr_session(session_key), surface_id TEXT NOT NULL, ad_id TEXT, -- NULL for non-ad surfaces dwell_ms INT NOT NULL, gaze_confirmed BOOLEAN NOT NULL DEFAULT false, -- true above a dwell threshold jitter_ok BOOLEAN NOT NULL DEFAULT false -- passed the spoof check ); -- Safety: one row per play-boundary breach. The boundary ENCODES room -- geometry, so store the breach event — never the mesh. CREATE TABLE fct_guardian_event ( session_key BIGINT NOT NULL REFERENCES fct_xr_session(session_key), event_ts TIMESTAMPTZ NOT NULL, breach_type TEXT NOT NULL CHECK (breach_type IN ('hand_exit','head_exit','proximity')), severity INT NOT NULL ); -- Spatial anchor: persistent AR placement keyed to a room FINGERPRINT — -- never the raw mesh. The hash relocalizes; the geometry stays out. CREATE TABLE dim_spatial_anchor ( anchor_id TEXT PRIMARY KEY, room_hash TEXT NOT NULL, -- fingerprint only placed_ts TIMESTAMPTZ NOT NULL );

Two many-to-many cases hide in the corners and both have the same trap. A shared-space session has many users in one room sharing one spatial anchor; putting N users on one session row triple-counts engagement exactly the way a pooled ride does. The fix is a bridge — one row per (shared_space_id, anchor_id, user_session_key) — so per-user metrics stay correct and "who was co-located when" is a join, not a self-join.


§ 04 — THE CORE INVARIANTConsent as-of capture, never as-of now

The correctness of this entire platform lives in one join predicate: every read of biometric data binds to the consent that was valid at the session's capture time. Get it wrong — read under "current" consent — and you have committed a retroactive consent rewrite, which is the failure that turns a data platform into a lawsuit.

Consent is a lifecycle, and the lifecycle is non-destructive. A grant opens a window; a withdrawal closes that window and opens a new one; no state is ever overwritten:

UNKNOWN GRANTED WITHDRAWN GRANTED DENIED

Each transition appends a row and closes the previous one's valid_to. Because the history is preserved, the question "was this gaze allowed when it was captured?" is always answerable — and so is its grim cousin, "which exact rows must a deletion request purge?" Both are the same as-of predicate, run for analytics in one direction and for erasure in the other.

Using today's permission to justify yesterday's capture is a retroactive consent rewrite. The SCD2 window exists precisely to make that impossible.TELEMETRY RULE Nº 1

Here is the atomic heart of the platform: aggregate gaze dwell per surface, but include only gaze captured while the user's eye-tracking consent was granted in their region — resolved as-of the session start, not as-of now. The two timestamp comparisons against the consent window are the entire invariant.

SQL · ATTENTION, GATED BY CONSENT AS-OF CAPTURE
-- The query that separates a senior answer from a lawsuit. The consent -- window is matched to s.start_ts (capture time), never to now(). SELECT a.surface_id, count(*) AS gaze_hits, round(avg(a.dwell_ms)) AS avg_dwell_ms FROM fct_attention a JOIN fct_xr_session s ON s.session_key = a.session_key JOIN dim_consent c ON c.user_key = s.user_key AND c.data_category = 'eye_tracking' AND c.region = s.region AND s.start_ts >= c.valid_from AND s.start_ts < c.valid_to -- consent AS-OF capture WHERE c.state = 'granted' GROUP BY a.surface_id ORDER BY gaze_hits DESC; -- A user who later WITHDRAWS closes the granted window and opens a withdrawn -- one; this query automatically stops counting their future gaze, and a -- deletion job targets the same rows via the same predicate.

The worked case makes the invariant concrete. A user grants eye-tracking at 10:00 and withdraws it at 10:40. Session S-1 starts at 10:05 (consent granted as-of start), session S-2 at 11:00 (consent withdrawn as-of start). The query counts S-1's gaze and silently excludes S-2's — even though S-2's rows physically exist, because the device captured them before the runtime flag propagated. Had consent been a single mutable boolean, withdrawing it would either have falsified S-1's history or failed to exclude S-2. Both are wrong; the window is right.


§ 05 — INGESTION & STREAMSPython on the sensor firehose

Three programs carry the raw plane: the edge aggregator that turns 90 Hz into one row per second, the room-mesh handler that refuses to let geometry into the warehouse, and the gaze-spoof check that decides whether attention is even real. Each is small; the judgment is in what they refuse to keep.

1 · The edge aggregator — 90 Hz in, one row per second out

The aggregator runs at the edge and is the boundary itself. It reduces a second's worth of frames — ninety samples across head, hands, and eyes — to a handful of summary statistics, writes the raw window to encrypted object storage, and emits one rollup row carrying the blob pointer. The refusal is the design: the raw frames leave the aggregator only as an opaque, encrypted blob, and the warehouse never sees a single frame.

PYTHON · EDGE AGGREGATOR (FIREHOSE → PER-SECOND ROLLUP)
import statistics as st POSE_HZ = 90 def aggregate_second(frames, session_key, sec_bucket, blob_store): """Reduce one second of 90Hz pose/gaze frames to a single queryable row, and push the raw window to encrypted object storage as an opaque blob. The boundary lives here: the warehouse receives summary stats and a pointer, never a frame. Raw biometrics are write-only to object storage.""" if not frames: return None heads = [f["head_pose"] for f in frames] hands = [f["hand_speed"] for f in frames] # encrypt + store the raw window; get back an opaque, residency-pinned URI blob_uri = blob_store.put_encrypted( session_key, sec_bucket, frames, ttl_days=30, residency="eu") return { "session_key": session_key, "sec_bucket": sec_bucket, "head_range": max(heads) - min(heads), "head_velocity": st.mean(_speeds(heads)), "hand_activity": st.mean(hands), "raw_blob_uri": blob_uri, # pointer only — the rule } # 90 samples in, 1 row out: a ~90x reduction at the edge, before a single # frame crosses the network into the analytic plane.

2 · The room-mesh handler — geometry never enters the warehouse

A 3-D scan of a private home is among the most sensitive data possible, and the handler's only job is to make sure it is the one thing the warehouse never receives. It computes a stable relocalization fingerprint from the mesh, persists that hash for AR placement, and routes the actual geometry to encrypted, residency-pinned, short-TTL storage outside the analytics estate entirely. The refusal is absolute: the mesh is not down-sampled into the warehouse, it is excluded from it.

PYTHON · ROOM-MESH HANDLER (FINGERPRINT, NOT GEOMETRY)
import hashlib def handle_room_mesh(mesh, user_key, region, anchor_store, vault): """Persist a relocalization fingerprint for AR; route the actual 3-D mesh to a short-TTL, residency-pinned vault OUTSIDE the warehouse. The mesh is a map of someone's home — it is excluded from analytics, not anonymized into it.""" # a stable hash of the geometry — enough to relocalize, not to reconstruct fingerprint = hashlib.blake2b( _canonical_planes(mesh), digest_size=16).hexdigest() # the warehouse gets ONLY this hash, via dim_spatial_anchor anchor_store.upsert_anchor(room_hash=fingerprint, user_key=user_key) # the geometry goes to the vault: encrypted, region-pinned, short TTL vault.put(mesh, user_key=user_key, region=region, ttl_days=7, purpose="relocalization_only") return fingerprint # If a regulator asks "where is this user's room map?", the answer is a # single vault object with a 7-day TTL — not a thousand warehouse rows.

3 · The gaze-spoof check — is the attention even real?

Gaze-confirmed attention is a far stronger currency than a served impression — eye-tracking can prove a user actually looked. But that makes it forgeable and biometric at once, so before a dwell becomes billable it passes two gates: it must clear a dwell threshold (a glance is not attention), and it must survive a jitter check (a perfectly still, zero-jitter gaze is as fabricated as a phantom-convoy GPS track). The refusal here protects the advertiser and the user simultaneously.

PYTHON · GAZE-SPOOF + DWELL CONFIRMATION
def confirm_gaze(dwell_ms, gaze_trace, min_dwell_ms=400, min_jitter=0.15): """Decide whether an ad exposure counts as gaze-confirmed AND real. Two gates, both required: a dwell long enough to be attention, and enough micro-jitter to be a living eye. A flawless, motionless gaze is fake.""" confirmed = dwell_ms >= min_dwell_ms # a glance is not attention # real human gaze has involuntary micro-saccades; a spoof is too smooth. jitter = _rms_micro_saccade(gaze_trace) real = jitter >= min_jitter # zero-jitter == fabricated return { "gaze_confirmed": confirmed, "jitter_ok": real, # billable requires BOTH gates here AND consent as-of capture in §04. "billable_candidate": confirmed and real, }

One carve-out, always stated: the spoof check decides whether attention is real, but it does not decide whether it is lawful. A gaze can be perfectly genuine and still un-billable because consent was withdrawn at capture. Reality is a property of the signal; lawfulness is a property of the consent window. The §06 close enforces both, and never lets one stand in for the other.


§ 06 — AGGREGATIONConsented viewability, and the safety signal

The derived layer turns gated attention into a billable currency and turns guardian breaches into a comfort-and-safety signal. Both are deterministic rollups over the facts — and both refuse to count anything they cannot defend.

Gaze-confirmed viewability is the monetization payoff: of the ads served, what fraction were actually looked at, counting only users who consented to eye-tracking at the time and only gaze that survived the spoof check. Served-but-never-looked-at impressions drop out of the billable metric; non-consented users never enter it. The result is a viewability number that is honest and lawful at once — a stronger currency than a served impression and a defensible one.

SQL · GAZE-CONFIRMED VIEWABILITY (CONSENTED + REAL)
-- Of ads served, what fraction were genuinely looked at by a consented user. SELECT a.ad_id, count(*) AS impressions, count(*) FILTER (WHERE a.gaze_confirmed AND a.jitter_ok) AS gaze_views, round(100.0 * count(*) FILTER (WHERE a.gaze_confirmed AND a.jitter_ok) / nullif(count(*), 0), 1) AS gaze_viewability_pct FROM fct_attention a JOIN fct_xr_session s ON s.session_key = a.session_key JOIN dim_consent c ON c.user_key = s.user_key AND c.data_category = 'eye_tracking' AND c.region = s.region AND s.start_ts >= c.valid_from AND s.start_ts < c.valid_to WHERE c.state = 'granted' AND a.ad_id IS NOT NULL GROUP BY a.ad_id ORDER BY gaze_viewability_pct DESC;

The safety signal is the other half of the aggregation. A guardian breach — a hand or head crossing the play boundary — is the XR analog of a vehicle disengagement: a safety event that correlates with room size and content intensity. Rolled up per session and joined to comfort score, it answers the product question that the session grain alone cannot — which experiences are physically uncomfortable, and which rooms are too small for them — and it does so without ever touching the room mesh, because the breach event already encodes the only geometry that matters.

SQL · COMFORT & SAFETY ROLLUP (BREACHES + COMFORT)
SELECT d.make_model, s.app_key, count(*) AS sessions, round(avg(s.comfort_score), 2) AS avg_comfort, round(avg(s.guardian_breaches), 2) AS avg_breaches, count(*) FILTER (WHERE s.terminal_reason = 'crash') AS crashes FROM fct_xr_session s JOIN dim_device d ON d.device_key = s.device_key WHERE s.start_ts >= now() - INTERVAL '30 days' GROUP BY d.make_model, s.app_key HAVING avg(s.comfort_score) < 7.0 -- surface the uncomfortable pairings ORDER BY avg_comfort ASC;
The pose firehose may be approximate; the consent window may not. Engagement is measured to the second, but the permission behind it is enforced to the instant.AGGREGATION RULE Nº 1

§ 07 — ANALYTICS SQLInterrogating the headset

The facts are where the platform explains itself. Three queries an interviewer loves, because each carries a classic pattern on its back — the capability-gated join, the SCD2 as-of deletion sweep, and the sessionization of a continuous firehose.

Capability-aware engagement — the gating join

"Average eye-engagement per app" is a trap unless you gate by capability. A controller-only Quest produces no eye rows, and naively dividing by all sessions would understate every Vision Pro app. Join through sensor_suite so the denominator counts only sessions that could have produced gaze — absence is correct, not missing.

SQL · ENGAGEMENT, GATED BY DEVICE CAPABILITY
SELECT s.app_key, count(*) AS eye_capable_sessions, round(avg(att.total_dwell_ms)) AS avg_gaze_dwell_ms FROM fct_xr_session s JOIN dim_device d ON d.device_key = s.device_key AND 'eye' = ANY(d.sensor_suite) -- only eye-capable devices LEFT JOIN LATERAL ( SELECT sum(a.dwell_ms) AS total_dwell_ms FROM fct_attention a WHERE a.session_key = s.session_key ) att ON TRUE WHERE s.start_ts >= now() - INTERVAL '7 days' GROUP BY s.app_key ORDER BY avg_gaze_dwell_ms DESC NULLS LAST; -- The denominator is eye-CAPABLE sessions only. A Quest controller session -- never enters it, so its missing gaze can't drag the average down.

The deletion sweep — SCD2 as-of, in reverse

A withdrawal or an erasure request runs the consent invariant backward: find every gaze row captured while consent was not granted, so it can be purged. This is the same as-of predicate as the attention query, inverted — the dimension that proves you may use a row also proves which rows you must delete.

SQL · WHICH ROWS MUST A DELETION REQUEST PURGE?
-- Rows captured outside a 'granted' eye-tracking window for this user. -- The deletion job's target list — and proof of compliance. SELECT a.session_key, a.surface_id, a.dwell_ms, s.start_ts FROM fct_attention a JOIN fct_xr_session s ON s.session_key = a.session_key WHERE s.user_key = :user AND NOT EXISTS ( SELECT 1 FROM dim_consent c WHERE c.user_key = s.user_key AND c.data_category = 'eye_tracking' AND c.region = s.region AND c.state = 'granted' AND s.start_ts >= c.valid_from AND s.start_ts < c.valid_to );

Comfort decay within a session — gaps and islands

"Does comfort degrade the longer a session runs?" The per-second pose rollup has no fatigue boundaries — only timestamps and motion summaries. Flagging sustained high-velocity stretches and running a window sum over the flags is the canonical gaps-and-islands move, turning a continuous firehose into discrete fatigue episodes.

SQL · FATIGUE EPISODES OVER THE POSE ROLLUP
WITH flagged AS ( SELECT session_key, sec_bucket, head_velocity, CASE WHEN head_velocity > 1.5 AND lag(head_velocity) OVER w <= 1.5 THEN 1 ELSE 0 END AS new_episode FROM fct_pose_sample WHERE head_velocity > 1.5 WINDOW w AS (PARTITION BY session_key ORDER BY sec_bucket) ), episodes AS ( SELECT session_key, sec_bucket, sum(new_episode) OVER (PARTITION BY session_key ORDER BY sec_bucket) AS episode_id FROM flagged ) SELECT session_key, episode_id, min(sec_bucket) AS episode_start, max(sec_bucket) - min(sec_bucket) AS episode_len FROM episodes GROUP BY session_key, episode_id HAVING max(sec_bucket) - min(sec_bucket) >= INTERVAL '20 seconds';

§ 08 — THE DASHBOARDProving the platform is safe and lawful

A senior design ends with observability, because every privacy boundary above is invisible without it. The dashboard watches three different definitions of "healthy" — the firehose, the consent estate, and the monetization currency — and treats a consent leak as the page-worthy incident.

THE FIREHOSE
ingest reduction ratio (frames in vs rollup rows out), blob-store backlog, residency-violation count — any frame written to the wrong region is an incident, not a metric.
THE CONSENT ESTATE
consent propagation lag (withdrawal to last-captured-row), ungated-read attempts (queries that touched biometrics without the as-of join — these must be zero), deletion SLA.
THE CURRENCY
gaze viewability %, spoof-rejection rate (a spike means a fraud campaign), billable fraction — the share of gaze that is both real and consented.
SAFETY
comfort score p10, guardian breaches per session — the physical-safety health of the fleet, watched like an SLO.
Spatial Platform — Trust & Telemetry FRI 14:20 · EU REGION · 60s REFRESH
Ingest Reduction
89.4
Ungated Reads
0
Consent Prop. Lag
3.1s
Residency Violations
0
Billable gaze fraction — served → confirmed → consented (last 6h)
SERVED CONFIRM REAL BILLABLE 52%
Spoof Rejection
4.1%
Gaze Viewability
63%
Comfort p10
6.4
Breaches / Session
0.3
Deletion SLA
98%
Blob Backlog
1.2k
FIG. 2 — The story a healthy day tells: the firehose reducing ninety-thousand-fold, zero ungated reads and zero residency violations (the two non-negotiables sitting green), spoof rejection drifting amber as a fraud campaign probes the gaze check, and the billable-gaze funnel collapsing served impressions down to the 52% that are both real and consented.

Read the green tiles first, because they are the ones that keep the company out of court: ungated reads at zero means every biometric query went through the as-of join, and residency violations at zero means no frame escaped its region. Then read the amber: comfort p10 is sliding and spoof rejection is climbing — a content problem and an adversary, both real, both contained. That is what a designed privacy posture looks like from the operator's chair: the dangerous failures are alarmed to zero, and the merely-bad ones are visible before they page.


§ 09 — THE RUBRICWhat was actually being tested

Strip the headset away and the question was testing five judgments, each of which generalizes far beyond spatial computing:

THE FIREHOSE BOUNDARY
Refusing to inline a high-rate stream into a queryable fact. Per-second rollup in the warehouse, raw frames in object storage with a pointer — the same call as pre-aggregating GPS, made sharper because here the raw data is also the most private.
TIME-VERSIONED PERMISSION
Modeling consent as SCD2, not a boolean, so "could I use that capture?" survives a withdrawal and an audit. The same as-of discipline that locks an FX rate or a risk verdict to the instant it was true.
CAPABILITY IN THE DIMENSION
Letting the device decide the schema. Absence of eye rows for a controller session is correct, not missing — capability lives on the conformed device dimension, and the query gates on it.
EXCLUDE, DON'T ANONYMIZE
Keeping the room mesh out of the warehouse entirely — a fingerprint relocalizes, the geometry stays in a short-TTL vault. Some data is not made safe by aggregation; it is made safe by never arriving.
HONEST CURRENCY
Billing only attention that is both real and consented — a spoof check for reality, an as-of join for lawfulness, and never one standing in for the other. The signal may be strong; the right to use it is separate.
The headset is the most extreme member of the device dimension, so the catalogue's disciplines do not change — they sharpen. Get the firehose boundary, the consent window, and the capability gate right, and spatial data stops being scary and starts being a star schema.— CLOSING ARGUMENT