{"schema":"woodhouse.portfolio-report/1","id":"48ebc821576460fd4d3fd0c9","createdAt":"2026-10-23T04:55:37.752Z","days":30,"period":{"from":"2026-09-24","to":"2026-10-23","days":30,"complete":false},"projects":[{"project":"woodhouse","report":{"schema":"woodhouse.portfolio-analytics/1","project":"woodhouse","generatedAt":"2026-10-23T04:55:37.752Z","timezone":"UTC","period":{"from":"2026-09-24","to":"2026-10-23","days":30,"complete":false},"coverage":{"startedAt":"2026-10-15T00:00:00.000Z","comparableFrom":"2026-10-15T00:00:00.000Z","through":"2026-10-23T04:55:37.752Z","quality":"partial","limitations":["Exact accepted event counters, not unique humans or anti-cheat proof. Blocking, opt-out, offline play and automated traffic affect coverage.","DNT, GPC, designated QA and preview traffic are excluded. Production browser measurements start with this release; no historical backfill.","Current UTC day and collection-start day may be partial. Cross-device retention, cohort retention and acquisition sources are not measured.","Optional browser measurement has not yet received a consenting visit; browser counts are unavailable.","Browser measures cover opt-in visits only and remain partial. Private project-scoped visit associations expire after 90 days; a window intersecting expired history is unavailable. Browser totals use retained period DISTINCT counts, never daily sums."]},"metrics":[{"key":"visits","label":"Visits","unit":"count","value":3907,"definition":"One accepted visit marker per tab session; sessions reset after 30 minutes idle. Reloads in the same session do not add visits. Not distinct people.","quality":"exact","daily":[{"date":"2026-10-15","value":4},{"date":"2026-10-16","value":42},{"date":"2026-10-17","value":20},{"date":"2026-10-18","value":50},{"date":"2026-10-19","value":118},{"date":"2026-10-20","value":998},{"date":"2026-10-21","value":526},{"date":"2026-10-22","value":1320},{"date":"2026-10-23","value":829}]},{"key":"engaged_sessions","label":"Engaged sessions","unit":"count","value":42,"definition":"One accepted marker per tab session after at least 10 seconds of active product use. Foreground, unpaused and recent trusted input required.","quality":"exact","daily":[{"date":"2026-10-15","value":0},{"date":"2026-10-16","value":5},{"date":"2026-10-17","value":6},{"date":"2026-10-18","value":9},{"date":"2026-10-19","value":4},{"date":"2026-10-20","value":2},{"date":"2026-10-21","value":11},{"date":"2026-10-22","value":4},{"date":"2026-10-23","value":1}]},{"key":"active_seconds","label":"Active time","unit":"seconds","value":2564,"definition":"Accepted 1–30 second foreground, unpaused activity increments, ending 30 seconds after trusted input. Server bounds total by session wall time. Radio time is excluded.","quality":"exact","daily":[{"date":"2026-10-15","value":3},{"date":"2026-10-16","value":560},{"date":"2026-10-17","value":263},{"date":"2026-10-18","value":419},{"date":"2026-10-19","value":149},{"date":"2026-10-20","value":47},{"date":"2026-10-21","value":673},{"date":"2026-10-22","value":223},{"date":"2026-10-23","value":227}]},{"key":"project_opens","label":"Project discoveries","unit":"count","value":18,"definition":"Accepted deliberate clicks from Woodhouse to a published project destination. Counts clicks, not visits received by that project.","quality":"exact","daily":[{"date":"2026-10-15","value":0},{"date":"2026-10-16","value":4},{"date":"2026-10-17","value":0},{"date":"2026-10-18","value":6},{"date":"2026-10-19","value":2},{"date":"2026-10-20","value":1},{"date":"2026-10-21","value":3},{"date":"2026-10-22","value":1},{"date":"2026-10-23","value":1}]},{"key":"browsers","label":"Reporting browsers","unit":"count","value":null,"definition":"Distinct optionally consenting, project-scoped browser tokens with accepted visits in the selected UTC window. Period DISTINCT, not a sum of daily browser counts. Tokens rotate after 90 days; resets, multiple devices and privacy choices prevent interpreting these as people.","quality":"unavailable","daily":[]},{"key":"returning_browsers","label":"Returning browsers","unit":"count","value":null,"definition":"Distinct optionally consenting browser tokens with a visit in this UTC window and an earlier different accepted tab session in retained 90-day history, including same-day returns. Period DISTINCT, not a sum of daily returns. This is not cohort retention; expired earlier visits and token rotation hide returns.","quality":"unavailable","daily":[]},{"key":"referral_app_composer","label":"Referrals to app-composer","unit":"count","value":7,"definition":"Accepted deliberate clicks from Woodhouse to this project's destination, from the same anonymous event stream as Project discoveries. A click is a referral, not proof of downstream play, adoption or a unique person; opt-out and blocked measurement make it partial.","quality":"exact","daily":[{"date":"2026-10-15","value":0},{"date":"2026-10-16","value":2},{"date":"2026-10-17","value":0},{"date":"2026-10-18","value":2},{"date":"2026-10-19","value":0},{"date":"2026-10-20","value":1},{"date":"2026-10-21","value":0},{"date":"2026-10-22","value":1},{"date":"2026-10-23","value":1}]},{"key":"referral_loftwahfm","label":"Referrals to loftwahfm","unit":"count","value":6,"definition":"Accepted deliberate clicks from Woodhouse to this project's destination, from the same anonymous event stream as Project discoveries. A click is a referral, not proof of downstream play, adoption or a unique person; opt-out and blocked measurement make it partial.","quality":"exact","daily":[{"date":"2026-10-15","value":0},{"date":"2026-10-16","value":2},{"date":"2026-10-17","value":0},{"date":"2026-10-18","value":2},{"date":"2026-10-19","value":1},{"date":"2026-10-20","value":0},{"date":"2026-10-21","value":1},{"date":"2026-10-22","value":0},{"date":"2026-10-23","value":0}]},{"key":"referral_bubbles","label":"Referrals to bubbles","unit":"count","value":4,"definition":"Accepted deliberate clicks from Woodhouse to this project's destination, from the same anonymous event stream as Project discoveries. A click is a referral, not proof of downstream play, adoption or a unique person; opt-out and blocked measurement make it partial.","quality":"exact","daily":[{"date":"2026-10-15","value":0},{"date":"2026-10-16","value":0},{"date":"2026-10-17","value":0},{"date":"2026-10-18","value":2},{"date":"2026-10-19","value":1},{"date":"2026-10-20","value":0},{"date":"2026-10-21","value":1},{"date":"2026-10-22","value":0},{"date":"2026-10-23","value":0}]},{"key":"referral_fighter","label":"Referrals to fighter","unit":"count","value":1,"definition":"Accepted deliberate clicks from Woodhouse to this project's destination, from the same anonymous event stream as Project discoveries. A click is a referral, not proof of downstream play, adoption or a unique person; opt-out and blocked measurement make it partial.","quality":"exact","daily":[{"date":"2026-10-15","value":0},{"date":"2026-10-16","value":0},{"date":"2026-10-17","value":0},{"date":"2026-10-18","value":0},{"date":"2026-10-19","value":0},{"date":"2026-10-20","value":0},{"date":"2026-10-21","value":1},{"date":"2026-10-22","value":0},{"date":"2026-10-23","value":0}]}],"source":{"endpoint":"https://woodhouse.loftwah.com/api/portfolio-analytics?project=woodhouse","revision":null}}},{"project":"app-composer","report":{"schema":"woodhouse.portfolio-analytics/1","project":"app-composer","generatedAt":"2026-10-23T04:55:38.342Z","timezone":"UTC","period":{"from":"2026-09-24","to":"2026-10-23","days":30,"complete":false},"coverage":{"startedAt":"2026-10-13T00:00:00.000Z","comparableFrom":null,"through":"2026-10-23T04:55:38.342Z","quality":"partial","limitations":["Daily counters stop at 1000 per app/event/surface and shared per-location rate limits may drop events.","The first recorded UTC day is 13 October 2026 and is partial; daily counts expire after 35 days. Missing earlier history is unavailable, not zero.","Optional publishers can lose events during outages. Marked verification probes are excluded; reloads, unmarked automation and bots can count.","No visitor identity, sessions, return rate, private creator activity or vault contents are collected. Today is partial; these are bounded recorded signals, never lifetime totals."]},"metrics":[{"key":"app_opens","label":"App opens","unit":"count","value":1793,"definition":"Successful public mini-app home-page HTML requests across standalone and composed versions. Reloads and bots may count; not people, sessions or conversions.","quality":"bounded","daily":[{"date":"2026-10-13","value":97},{"date":"2026-10-14","value":370},{"date":"2026-10-15","value":151},{"date":"2026-10-16","value":128},{"date":"2026-10-17","value":252},{"date":"2026-10-18","value":296},{"date":"2026-10-19","value":138},{"date":"2026-10-20","value":92},{"date":"2026-10-21","value":72},{"date":"2026-10-22","value":139},{"date":"2026-10-23","value":58}]},{"key":"actions","label":"Recorded app actions","unit":"count","value":78,"definition":"Guestbook contribution-page opens plus accepted completed Link Check inspections. Different action types, not unique people or a conversion funnel.","quality":"bounded","daily":[{"date":"2026-10-13","value":2},{"date":"2026-10-14","value":5},{"date":"2026-10-15","value":4},{"date":"2026-10-16","value":1},{"date":"2026-10-17","value":27},{"date":"2026-10-18","value":2},{"date":"2026-10-19","value":16},{"date":"2026-10-20","value":2},{"date":"2026-10-21","value":5},{"date":"2026-10-22","value":12},{"date":"2026-10-23","value":2}]},{"key":"photo_opens","label":"Guestbook contribution opens","unit":"count","value":53,"definition":"Successful public Guestbook contribution-page HTML requests, including repeated opens; not image downloads, submissions, publications or unique people.","quality":"bounded","daily":[{"date":"2026-10-13","value":1},{"date":"2026-10-14","value":2},{"date":"2026-10-15","value":1},{"date":"2026-10-16","value":1},{"date":"2026-10-17","value":11},{"date":"2026-10-18","value":1},{"date":"2026-10-19","value":16},{"date":"2026-10-20","value":2},{"date":"2026-10-21","value":5},{"date":"2026-10-22","value":12},{"date":"2026-10-23","value":1}]},{"key":"inspection_completed","label":"Completed inspections","unit":"count","value":25,"definition":"Link Check inspections counted by the owning app after completion; not clicks, deployment checks or unique users.","quality":"bounded","daily":[{"date":"2026-10-13","value":1},{"date":"2026-10-14","value":3},{"date":"2026-10-15","value":3},{"date":"2026-10-16","value":0},{"date":"2026-10-17","value":16},{"date":"2026-10-18","value":1},{"date":"2026-10-19","value":0},{"date":"2026-10-20","value":0},{"date":"2026-10-21","value":0},{"date":"2026-10-22","value":0},{"date":"2026-10-23","value":1}]},{"key":"guest_postcards_received","label":"Guest postcards received","unit":"count","value":2,"definition":"New pending guest postcards counted after committed acceptance by Guestbook, across connected standalone and composed routes. Not approvals, publications, unique people or a conversion rate. Before the first retained recorded receipt, history is unavailable. The first recorded UTC day is partial; later zero means no recorded receipt, not proof that nobody submitted. Optional recording can drop events.","quality":"partial","daily":[{"date":"2026-10-17","value":2},{"date":"2026-10-18","value":0},{"date":"2026-10-19","value":0},{"date":"2026-10-20","value":0},{"date":"2026-10-21","value":0},{"date":"2026-10-22","value":0},{"date":"2026-10-23","value":0}]}],"source":{"endpoint":"https://composer.loftwah.com/api/portfolio-analytics","revision":"94c0e7bb909e38cca2ec93d84b18966b8be4793f"}}},{"project":"fighter","report":{"schema":"woodhouse.portfolio-analytics/1","project":"fighter","generatedAt":"2026-10-23T04:55:38.029Z","timezone":"UTC","period":{"from":"2026-09-24","to":"2026-10-23","days":30,"complete":false},"coverage":{"startedAt":"2026-08-09T08:22:36.602Z","comparableFrom":"2026-10-15T12:02:59.539Z","through":"2026-10-23T04:55:38.029Z","quality":"partial","limitations":["Historical counts before 15 October 2026 include unmarked production QA that cannot be separated or subtracted. These are stored reports, not a clean audience cohort; exclude pre-comparableFrom history from growth comparisons and records.","Requested windows may include partial coverage. Current UTC day is partial. Stored browser reports are subject to privacy opt-outs, network loss and abuse controls; they are not unique people.","Launch/completion counters backfilled only from the raw rows retained at migration; earlier expired history is unavailable. Anonymous daily totals are retained durably thereafter.","Visits, engagement, deliberate Quick Fight replay and optional browser cohort measurement start 2026-10-15T14:34:02.048Z; earlier values are unavailable. Browser cohort rows and raw tab sessions expire after 90 days; anonymous daily counters remain durable.","Active-time collection starts 2026-10-15T12:02:46.571Z; earlier time is unavailable. Individual raw game and session facts still expire after 90 days."]},"metrics":[{"key":"game_starts","label":"Fight starts","unit":"count","value":161,"definition":"Browser-reported non-tutorial fight launches; match IDs deduplicate retries. Exact accepted events, not verified humans.","quality":"exact","daily":[{"date":"2026-09-24","value":4},{"date":"2026-09-25","value":0},{"date":"2026-09-26","value":2},{"date":"2026-09-27","value":17},{"date":"2026-09-28","value":92},{"date":"2026-09-29","value":21},{"date":"2026-09-30","value":0},{"date":"2026-10-01","value":0},{"date":"2026-10-02","value":2},{"date":"2026-10-03","value":3},{"date":"2026-10-04","value":2},{"date":"2026-10-05","value":0},{"date":"2026-10-06","value":1},{"date":"2026-10-07","value":14},{"date":"2026-10-08","value":0},{"date":"2026-10-09","value":0},{"date":"2026-10-10","value":0},{"date":"2026-10-11","value":0},{"date":"2026-10-12","value":0},{"date":"2026-10-13","value":0},{"date":"2026-10-14","value":0},{"date":"2026-10-15","value":0},{"date":"2026-10-16","value":0},{"date":"2026-10-17","value":1},{"date":"2026-10-18","value":0},{"date":"2026-10-19","value":0},{"date":"2026-10-20","value":1},{"date":"2026-10-21","value":1},{"date":"2026-10-22","value":0},{"date":"2026-10-23","value":0}]},{"key":"game_completions","label":"Completed fights","unit":"count","value":107,"definition":"Launched fights ending in win, loss, draw or forfeit, attributed to launch UTC day. Abandonment excluded; not a completion cohort rate.","quality":"exact","daily":[{"date":"2026-09-24","value":2},{"date":"2026-09-25","value":0},{"date":"2026-09-26","value":1},{"date":"2026-09-27","value":12},{"date":"2026-09-28","value":70},{"date":"2026-09-29","value":18},{"date":"2026-09-30","value":0},{"date":"2026-10-01","value":0},{"date":"2026-10-02","value":0},{"date":"2026-10-03","value":2},{"date":"2026-10-04","value":1},{"date":"2026-10-05","value":0},{"date":"2026-10-06","value":0},{"date":"2026-10-07","value":0},{"date":"2026-10-08","value":0},{"date":"2026-10-09","value":0},{"date":"2026-10-10","value":0},{"date":"2026-10-11","value":0},{"date":"2026-10-12","value":0},{"date":"2026-10-13","value":0},{"date":"2026-10-14","value":0},{"date":"2026-10-15","value":0},{"date":"2026-10-16","value":0},{"date":"2026-10-17","value":1},{"date":"2026-10-18","value":0},{"date":"2026-10-19","value":0},{"date":"2026-10-20","value":0},{"date":"2026-10-21","value":0},{"date":"2026-10-22","value":0},{"date":"2026-10-23","value":0}]},{"key":"active_seconds","label":"Active gameplay","unit":"seconds","value":125,"definition":"Cumulative foreground, focused, unpaused fight seconds with input in the preceding 60 seconds. Loading/countdowns, hidden tabs, idle and radio excluded. Browser-reported, bounded by server elapsed time; launch UTC day attribution.","quality":"exact","daily":[{"date":"2026-10-15","value":0},{"date":"2026-10-16","value":0},{"date":"2026-10-17","value":79},{"date":"2026-10-18","value":0},{"date":"2026-10-19","value":0},{"date":"2026-10-20","value":23},{"date":"2026-10-21","value":23},{"date":"2026-10-22","value":0},{"date":"2026-10-23","value":0}]},{"key":"visits","label":"Tab visits","unit":"count","value":3,"definition":"Accepted random tab sessions first observed since this metric began; one per tab session (including reloads), attributed to first observation UTC day, with raw tab deduplication retained for 90 days. DNT/GPC, automation and explicit QA excluded. Not pageviews or people.","quality":"exact","daily":[{"date":"2026-10-15","value":0},{"date":"2026-10-16","value":0},{"date":"2026-10-17","value":1},{"date":"2026-10-18","value":0},{"date":"2026-10-19","value":0},{"date":"2026-10-20","value":1},{"date":"2026-10-21","value":1},{"date":"2026-10-22","value":0},{"date":"2026-10-23","value":0}]},{"key":"engaged_sessions","label":"Engaged tabs","unit":"count","value":3,"definition":"Tab sessions reaching at least 10 cumulative measured active gameplay seconds across fights. Attributed to the tab visit UTC day; at most once per retained tab. Menus, radio, pause, background and idle time excluded.","quality":"exact","daily":[{"date":"2026-10-15","value":0},{"date":"2026-10-16","value":0},{"date":"2026-10-17","value":1},{"date":"2026-10-18","value":0},{"date":"2026-10-19","value":0},{"date":"2026-10-20","value":1},{"date":"2026-10-21","value":1},{"date":"2026-10-22","value":0},{"date":"2026-10-23","value":0}]},{"key":"game_replays","label":"Deliberate Quick Fight replays","unit":"count","value":0,"definition":"Accepted deliberate Quick Fight launches after an earlier completed or explicitly abandoned fight in the same tab. Prior terminal match ownership is checked by the server; retries deduplicate. Automatic progression, tutorial and other-mode replay actions are outside this measure.","quality":"exact","daily":[{"date":"2026-10-15","value":0},{"date":"2026-10-16","value":0},{"date":"2026-10-17","value":0},{"date":"2026-10-18","value":0},{"date":"2026-10-19","value":0},{"date":"2026-10-20","value":0},{"date":"2026-10-21","value":0},{"date":"2026-10-22","value":0},{"date":"2026-10-23","value":0}]},{"key":"browsers","label":"Opted-in browsers","unit":"count","value":0,"definition":"Distinct random browser IDs voluntarily enabled in Settings and observed in this window; never humans. Off by default; expires/rotates after 90 days. Daily distincts are not additive; period totals use distinct retained IDs, not their sum.","quality":"exact","daily":[{"date":"2026-10-15","value":0},{"date":"2026-10-16","value":0},{"date":"2026-10-17","value":0},{"date":"2026-10-18","value":0},{"date":"2026-10-19","value":0},{"date":"2026-10-20","value":0},{"date":"2026-10-21","value":0},{"date":"2026-10-22","value":0},{"date":"2026-10-23","value":0}]},{"key":"returning_browsers","label":"Returning opted-in browsers","unit":"count","value":0,"definition":"Distinct opted-in browser IDs observed in this window with an earlier different tab session in retained 90-day history (including same-day returns). Daily distincts are not additive; period totals are unavailable when the raw retention window is incomplete. Clearing/rotating IDs resets continuity; default tab-only visits are outside this cohort.","quality":"exact","daily":[{"date":"2026-10-15","value":0},{"date":"2026-10-16","value":0},{"date":"2026-10-17","value":0},{"date":"2026-10-18","value":0},{"date":"2026-10-19","value":0},{"date":"2026-10-20","value":0},{"date":"2026-10-21","value":0},{"date":"2026-10-22","value":0},{"date":"2026-10-23","value":0}]}],"source":{"endpoint":"https://fighter.loftwah.com/api/portfolio-analytics","revision":null}}},{"project":"shoalshot","report":{"schema":"woodhouse.portfolio-analytics/1","project":"shoalshot","generatedAt":"2026-10-23T04:55:37.752Z","timezone":"UTC","period":{"from":"2026-09-24","to":"2026-10-23","days":30,"complete":false},"coverage":{"startedAt":"2026-10-15T00:00:00.000Z","comparableFrom":"2026-10-15T00:00:00.000Z","through":"2026-10-23T04:55:37.752Z","quality":"partial","limitations":["Exact accepted event counters, not unique humans or anti-cheat proof. Blocking, opt-out, offline play and automated traffic affect coverage.","DNT, GPC, designated QA and preview traffic are excluded. Production browser measurements start with this release; no historical backfill.","Current UTC day and collection-start day may be partial. Cross-device retention, cohort retention and acquisition sources are not measured.","Browser returns are unavailable until this product releases its own optional consent client."]},"metrics":[{"key":"visits","label":"Visits","unit":"count","value":8,"definition":"One accepted visit marker per tab session; sessions reset after 30 minutes idle. Reloads in the same session do not add visits. Not distinct people.","quality":"exact","daily":[{"date":"2026-10-15","value":1},{"date":"2026-10-16","value":0},{"date":"2026-10-17","value":1},{"date":"2026-10-18","value":1},{"date":"2026-10-19","value":3},{"date":"2026-10-20","value":0},{"date":"2026-10-21","value":1},{"date":"2026-10-22","value":1},{"date":"2026-10-23","value":0}]},{"key":"engaged_sessions","label":"Engaged sessions","unit":"count","value":1,"definition":"One accepted marker per tab session after at least 10 seconds of active product use. Foreground, unpaused and recent trusted input required.","quality":"exact","daily":[{"date":"2026-10-15","value":0},{"date":"2026-10-16","value":0},{"date":"2026-10-17","value":0},{"date":"2026-10-18","value":0},{"date":"2026-10-19","value":1},{"date":"2026-10-20","value":0},{"date":"2026-10-21","value":0},{"date":"2026-10-22","value":0},{"date":"2026-10-23","value":0}]},{"key":"game_starts","label":"Games started","unit":"count","value":2,"definition":"Accepted new game/dive start actions; restoring or resuming a saved game does not count. Client reported, not verified human play. Multiplayer tabs report participations, not distinct tables.","quality":"exact","daily":[{"date":"2026-10-15","value":0},{"date":"2026-10-16","value":0},{"date":"2026-10-17","value":0},{"date":"2026-10-18","value":1},{"date":"2026-10-19","value":1},{"date":"2026-10-20","value":0},{"date":"2026-10-21","value":0},{"date":"2026-10-22","value":0},{"date":"2026-10-23","value":0}]},{"key":"game_completions","label":"Games completed","unit":"count","value":2,"definition":"Accepted terminal game/result transitions. Client reported; not a validated competitive result. Multiplayer tabs report participations, not distinct tables.","quality":"exact","daily":[{"date":"2026-10-15","value":0},{"date":"2026-10-16","value":0},{"date":"2026-10-17","value":0},{"date":"2026-10-18","value":1},{"date":"2026-10-19","value":1},{"date":"2026-10-20","value":0},{"date":"2026-10-21","value":0},{"date":"2026-10-22","value":0},{"date":"2026-10-23","value":0}]},{"key":"game_replays","label":"Deliberate replays","unit":"count","value":0,"definition":"Accepted deliberate repeat new-game actions in the same tab session, after completion or abandonment. Automatic restores/resumes are excluded.","quality":"exact","daily":[{"date":"2026-10-15","value":0},{"date":"2026-10-16","value":0},{"date":"2026-10-17","value":0},{"date":"2026-10-18","value":0},{"date":"2026-10-19","value":0},{"date":"2026-10-20","value":0},{"date":"2026-10-21","value":0},{"date":"2026-10-22","value":0},{"date":"2026-10-23","value":0}]},{"key":"active_seconds","label":"Active time","unit":"seconds","value":52,"definition":"Accepted 1–30 second foreground, unpaused activity increments, ending 30 seconds after trusted input. Server bounds total by session wall time. Radio time is excluded.","quality":"exact","daily":[{"date":"2026-10-15","value":0},{"date":"2026-10-16","value":0},{"date":"2026-10-17","value":0},{"date":"2026-10-18","value":2},{"date":"2026-10-19","value":50},{"date":"2026-10-20","value":0},{"date":"2026-10-21","value":0},{"date":"2026-10-22","value":0},{"date":"2026-10-23","value":0}]},{"key":"browsers","label":"Reporting browsers","unit":"count","value":null,"definition":"Not measured: this product has not enabled optional browser-return measurement. Tab sessions cannot establish returns.","quality":"unavailable","daily":[]},{"key":"returning_browsers","label":"Returning browsers","unit":"count","value":null,"definition":"Not measured: this product has not enabled optional browser-return measurement. Tab sessions cannot establish returns.","quality":"unavailable","daily":[]}],"source":{"endpoint":"https://woodhouse.loftwah.com/api/portfolio-analytics?project=shoalshot","revision":null}}},{"project":"protocol-11","report":{"schema":"woodhouse.portfolio-analytics/1","project":"protocol-11","generatedAt":"2026-10-23T04:55:37.752Z","timezone":"UTC","period":{"from":"2026-09-24","to":"2026-10-23","days":30,"complete":false},"coverage":{"startedAt":"2026-10-16T00:00:00.000Z","comparableFrom":"2026-10-16T00:00:00.000Z","through":"2026-10-23T04:55:37.752Z","quality":"partial","limitations":["Exact accepted event counters, not unique humans or anti-cheat proof. Blocking, opt-out, offline play and automated traffic affect coverage.","DNT, GPC, designated QA and preview traffic are excluded. Production browser measurements start with this release; no historical backfill.","Current UTC day and collection-start day may be partial. Cross-device retention, cohort retention and acquisition sources are not measured.","Browser returns are unavailable until this product releases its own optional consent client.","Mode subtotals come from the same accepted gameplay events as their overall measure: from the day the split begins, the mode subtotals sum exactly to that measure, and a day with no row for a mode is a measured zero for it. Before the split begins there are gaps, not zeroes, and raw history older than 90 days cannot be reconstructed.","Visits and engaged sessions are tab session markers and are deliberately not split by mode: one tab session can span several modes, so per-mode session counts would overlap and double-count."]},"metrics":[{"key":"visits","label":"Visits","unit":"count","value":14,"definition":"One accepted visit marker per tab session; sessions reset after 30 minutes idle. Reloads in the same session do not add visits. Not distinct people.","quality":"exact","daily":[{"date":"2026-10-16","value":2},{"date":"2026-10-17","value":1},{"date":"2026-10-18","value":3},{"date":"2026-10-19","value":4},{"date":"2026-10-20","value":1},{"date":"2026-10-21","value":0},{"date":"2026-10-22","value":0},{"date":"2026-10-23","value":3}]},{"key":"engaged_sessions","label":"Engaged sessions","unit":"count","value":4,"definition":"One accepted marker per tab session after at least 10 seconds of active product use. Foreground, unpaused and recent trusted input required.","quality":"exact","daily":[{"date":"2026-10-16","value":1},{"date":"2026-10-17","value":0},{"date":"2026-10-18","value":1},{"date":"2026-10-19","value":2},{"date":"2026-10-20","value":0},{"date":"2026-10-21","value":0},{"date":"2026-10-22","value":0},{"date":"2026-10-23","value":0}]},{"key":"game_starts","label":"Games started","unit":"count","value":1,"definition":"Accepted new game/dive start actions; restoring or resuming a saved game does not count. Client reported, not verified human play. Multiplayer tabs report participations, not distinct tables.","quality":"exact","daily":[{"date":"2026-10-16","value":0},{"date":"2026-10-17","value":0},{"date":"2026-10-18","value":0},{"date":"2026-10-19","value":1},{"date":"2026-10-20","value":0},{"date":"2026-10-21","value":0},{"date":"2026-10-22","value":0},{"date":"2026-10-23","value":0}]},{"key":"game_completions","label":"Games completed","unit":"count","value":0,"definition":"Accepted terminal game/result transitions. Client reported; not a validated competitive result. Multiplayer tabs report participations, not distinct tables.","quality":"exact","daily":[{"date":"2026-10-16","value":0},{"date":"2026-10-17","value":0},{"date":"2026-10-18","value":0},{"date":"2026-10-19","value":0},{"date":"2026-10-20","value":0},{"date":"2026-10-21","value":0},{"date":"2026-10-22","value":0},{"date":"2026-10-23","value":0}]},{"key":"game_replays","label":"Deliberate replays","unit":"count","value":0,"definition":"Accepted deliberate repeat new-game actions in the same tab session, after completion or abandonment. Automatic restores/resumes are excluded.","quality":"exact","daily":[{"date":"2026-10-16","value":0},{"date":"2026-10-17","value":0},{"date":"2026-10-18","value":0},{"date":"2026-10-19","value":0},{"date":"2026-10-20","value":0},{"date":"2026-10-21","value":0},{"date":"2026-10-22","value":0},{"date":"2026-10-23","value":0}]},{"key":"active_seconds","label":"Active time","unit":"seconds","value":458,"definition":"Accepted 1–30 second foreground, unpaused activity increments, ending 30 seconds after trusted input. Server bounds total by session wall time. Radio time is excluded.","quality":"exact","daily":[{"date":"2026-10-16","value":31},{"date":"2026-10-17","value":0},{"date":"2026-10-18","value":63},{"date":"2026-10-19","value":364},{"date":"2026-10-20","value":0},{"date":"2026-10-21","value":0},{"date":"2026-10-22","value":0},{"date":"2026-10-23","value":0}]},{"key":"game_starts_classic","label":"Game starts · Classic","unit":"count","value":1,"definition":"Accepted new game launches the client reported as Classic, excluding restores and resumes. Counted from accepted game_start events whose mode is classic. Additive with Game starts: the four mode subtotals sum to that overall total. It does not mean distinct people, distinct tables or verified human play.","quality":"partial","daily":[{"date":"2026-10-16","value":0},{"date":"2026-10-17","value":0},{"date":"2026-10-18","value":0},{"date":"2026-10-19","value":1},{"date":"2026-10-20","value":0},{"date":"2026-10-21","value":0},{"date":"2026-10-22","value":0},{"date":"2026-10-23","value":0}]},{"key":"game_starts_journey","label":"Game starts · Journey","unit":"count","value":0,"definition":"Accepted new game launches the client reported as Journey, excluding restores and resumes. Counted from accepted game_start events whose mode is journey. Additive with Game starts: the four mode subtotals sum to that overall total. It does not mean distinct people, distinct tables or verified human play.","quality":"partial","daily":[{"date":"2026-10-16","value":0},{"date":"2026-10-17","value":0},{"date":"2026-10-18","value":0},{"date":"2026-10-19","value":0},{"date":"2026-10-20","value":0},{"date":"2026-10-21","value":0},{"date":"2026-10-22","value":0},{"date":"2026-10-23","value":0}]},{"key":"game_starts_private_room","label":"Game starts · Private room","unit":"count","value":0,"definition":"Accepted new game launches the client reported as Private room, excluding restores and resumes. Counted from accepted game_start events whose mode is private_room. Additive with Game starts: the four mode subtotals sum to that overall total. It does not mean distinct people, distinct tables or verified human play.","quality":"partial","daily":[{"date":"2026-10-16","value":0},{"date":"2026-10-17","value":0},{"date":"2026-10-18","value":0},{"date":"2026-10-19","value":0},{"date":"2026-10-20","value":0},{"date":"2026-10-21","value":0},{"date":"2026-10-22","value":0},{"date":"2026-10-23","value":0}]},{"key":"game_starts_public_matchmaking","label":"Game starts · Public matchmaking","unit":"count","value":0,"definition":"Accepted new game launches the client reported as Public matchmaking, excluding restores and resumes. Counted from accepted game_start events whose mode is public_matchmaking. Additive with Game starts: the four mode subtotals sum to that overall total. It does not mean distinct people, distinct tables or verified human play.","quality":"partial","daily":[{"date":"2026-10-16","value":0},{"date":"2026-10-17","value":0},{"date":"2026-10-18","value":0},{"date":"2026-10-19","value":0},{"date":"2026-10-20","value":0},{"date":"2026-10-21","value":0},{"date":"2026-10-22","value":0},{"date":"2026-10-23","value":0}]},{"key":"game_completions_classic","label":"Game completions · Classic","unit":"count","value":0,"definition":"Accepted terminal results the client reported as Classic, excluding restored results and Undo or re-scoring. Counted from accepted game_complete events whose mode is classic. Additive with Game completions: the four mode subtotals sum to that overall total. It is not a completion rate: starts and completions in a window are not a matched cohort, and it is not a validated competitive result.","quality":"partial","daily":[{"date":"2026-10-16","value":0},{"date":"2026-10-17","value":0},{"date":"2026-10-18","value":0},{"date":"2026-10-19","value":0},{"date":"2026-10-20","value":0},{"date":"2026-10-21","value":0},{"date":"2026-10-22","value":0},{"date":"2026-10-23","value":0}]},{"key":"game_completions_journey","label":"Game completions · Journey","unit":"count","value":0,"definition":"Accepted terminal results the client reported as Journey, excluding restored results and Undo or re-scoring. Counted from accepted game_complete events whose mode is journey. Additive with Game completions: the four mode subtotals sum to that overall total. It is not a completion rate: starts and completions in a window are not a matched cohort, and it is not a validated competitive result.","quality":"partial","daily":[{"date":"2026-10-16","value":0},{"date":"2026-10-17","value":0},{"date":"2026-10-18","value":0},{"date":"2026-10-19","value":0},{"date":"2026-10-20","value":0},{"date":"2026-10-21","value":0},{"date":"2026-10-22","value":0},{"date":"2026-10-23","value":0}]},{"key":"game_completions_private_room","label":"Game completions · Private room","unit":"count","value":0,"definition":"Accepted terminal results the client reported as Private room, excluding restored results and Undo or re-scoring. Counted from accepted game_complete events whose mode is private_room. Additive with Game completions: the four mode subtotals sum to that overall total. It is not a completion rate: starts and completions in a window are not a matched cohort, and it is not a validated competitive result.","quality":"partial","daily":[{"date":"2026-10-16","value":0},{"date":"2026-10-17","value":0},{"date":"2026-10-18","value":0},{"date":"2026-10-19","value":0},{"date":"2026-10-20","value":0},{"date":"2026-10-21","value":0},{"date":"2026-10-22","value":0},{"date":"2026-10-23","value":0}]},{"key":"game_completions_public_matchmaking","label":"Game completions · Public matchmaking","unit":"count","value":0,"definition":"Accepted terminal results the client reported as Public matchmaking, excluding restored results and Undo or re-scoring. Counted from accepted game_complete events whose mode is public_matchmaking. Additive with Game completions: the four mode subtotals sum to that overall total. It is not a completion rate: starts and completions in a window are not a matched cohort, and it is not a validated competitive result.","quality":"partial","daily":[{"date":"2026-10-16","value":0},{"date":"2026-10-17","value":0},{"date":"2026-10-18","value":0},{"date":"2026-10-19","value":0},{"date":"2026-10-20","value":0},{"date":"2026-10-21","value":0},{"date":"2026-10-22","value":0},{"date":"2026-10-23","value":0}]},{"key":"game_replays_classic","label":"Deliberate replays · Classic","unit":"count","value":0,"definition":"Deliberate repeat new-game actions in Classic inside the same tab session. Counted from accepted game_replay events whose mode is classic. Additive with Deliberate replays: the four mode subtotals sum to that overall total. Automatic restores and resumes are excluded, and it does not say whether the earlier game was won or abandoned.","quality":"partial","daily":[{"date":"2026-10-16","value":0},{"date":"2026-10-17","value":0},{"date":"2026-10-18","value":0},{"date":"2026-10-19","value":0},{"date":"2026-10-20","value":0},{"date":"2026-10-21","value":0},{"date":"2026-10-22","value":0},{"date":"2026-10-23","value":0}]},{"key":"game_replays_journey","label":"Deliberate replays · Journey","unit":"count","value":0,"definition":"Deliberate repeat new-game actions in Journey inside the same tab session. Counted from accepted game_replay events whose mode is journey. Additive with Deliberate replays: the four mode subtotals sum to that overall total. Automatic restores and resumes are excluded, and it does not say whether the earlier game was won or abandoned.","quality":"partial","daily":[{"date":"2026-10-16","value":0},{"date":"2026-10-17","value":0},{"date":"2026-10-18","value":0},{"date":"2026-10-19","value":0},{"date":"2026-10-20","value":0},{"date":"2026-10-21","value":0},{"date":"2026-10-22","value":0},{"date":"2026-10-23","value":0}]},{"key":"game_replays_private_room","label":"Deliberate replays · Private room","unit":"count","value":0,"definition":"Deliberate repeat new-game actions in Private room inside the same tab session. Counted from accepted game_replay events whose mode is private_room. Additive with Deliberate replays: the four mode subtotals sum to that overall total. Automatic restores and resumes are excluded, and it does not say whether the earlier game was won or abandoned.","quality":"partial","daily":[{"date":"2026-10-16","value":0},{"date":"2026-10-17","value":0},{"date":"2026-10-18","value":0},{"date":"2026-10-19","value":0},{"date":"2026-10-20","value":0},{"date":"2026-10-21","value":0},{"date":"2026-10-22","value":0},{"date":"2026-10-23","value":0}]},{"key":"game_replays_public_matchmaking","label":"Deliberate replays · Public matchmaking","unit":"count","value":0,"definition":"Deliberate repeat new-game actions in Public matchmaking inside the same tab session. Counted from accepted game_replay events whose mode is public_matchmaking. Additive with Deliberate replays: the four mode subtotals sum to that overall total. Automatic restores and resumes are excluded, and it does not say whether the earlier game was won or abandoned.","quality":"partial","daily":[{"date":"2026-10-16","value":0},{"date":"2026-10-17","value":0},{"date":"2026-10-18","value":0},{"date":"2026-10-19","value":0},{"date":"2026-10-20","value":0},{"date":"2026-10-21","value":0},{"date":"2026-10-22","value":0},{"date":"2026-10-23","value":0}]},{"key":"active_seconds_classic","label":"Active play time · Classic","unit":"seconds","value":458,"definition":"Reported foreground play seconds while the active mode was Classic. Summed from the accepted 1–30 second active_time increments whose mode is classic. Additive with Active play time: the four mode subtotals sum to that overall total, and a session that changes mode contributes to more than one mode because each increment is counted once. Paused, hidden, inactive and radio time are excluded, and it does not establish a person's total play.","quality":"partial","daily":[{"date":"2026-10-16","value":31},{"date":"2026-10-17","value":0},{"date":"2026-10-18","value":63},{"date":"2026-10-19","value":364},{"date":"2026-10-20","value":0},{"date":"2026-10-21","value":0},{"date":"2026-10-22","value":0},{"date":"2026-10-23","value":0}]},{"key":"active_seconds_journey","label":"Active play time · Journey","unit":"seconds","value":0,"definition":"Reported foreground play seconds while the active mode was Journey. Summed from the accepted 1–30 second active_time increments whose mode is journey. Additive with Active play time: the four mode subtotals sum to that overall total, and a session that changes mode contributes to more than one mode because each increment is counted once. Paused, hidden, inactive and radio time are excluded, and it does not establish a person's total play.","quality":"partial","daily":[{"date":"2026-10-16","value":0},{"date":"2026-10-17","value":0},{"date":"2026-10-18","value":0},{"date":"2026-10-19","value":0},{"date":"2026-10-20","value":0},{"date":"2026-10-21","value":0},{"date":"2026-10-22","value":0},{"date":"2026-10-23","value":0}]},{"key":"active_seconds_private_room","label":"Active play time · Private room","unit":"seconds","value":0,"definition":"Reported foreground play seconds while the active mode was Private room. Summed from the accepted 1–30 second active_time increments whose mode is private_room. Additive with Active play time: the four mode subtotals sum to that overall total, and a session that changes mode contributes to more than one mode because each increment is counted once. Paused, hidden, inactive and radio time are excluded, and it does not establish a person's total play.","quality":"partial","daily":[{"date":"2026-10-16","value":0},{"date":"2026-10-17","value":0},{"date":"2026-10-18","value":0},{"date":"2026-10-19","value":0},{"date":"2026-10-20","value":0},{"date":"2026-10-21","value":0},{"date":"2026-10-22","value":0},{"date":"2026-10-23","value":0}]},{"key":"active_seconds_public_matchmaking","label":"Active play time · Public matchmaking","unit":"seconds","value":0,"definition":"Reported foreground play seconds while the active mode was Public matchmaking. Summed from the accepted 1–30 second active_time increments whose mode is public_matchmaking. Additive with Active play time: the four mode subtotals sum to that overall total, and a session that changes mode contributes to more than one mode because each increment is counted once. Paused, hidden, inactive and radio time are excluded, and it does not establish a person's total play.","quality":"partial","daily":[{"date":"2026-10-16","value":0},{"date":"2026-10-17","value":0},{"date":"2026-10-18","value":0},{"date":"2026-10-19","value":0},{"date":"2026-10-20","value":0},{"date":"2026-10-21","value":0},{"date":"2026-10-22","value":0},{"date":"2026-10-23","value":0}]},{"key":"browsers","label":"Reporting browsers","unit":"count","value":null,"definition":"Not measured: this product has not enabled optional browser-return measurement. Tab sessions cannot establish returns.","quality":"unavailable","daily":[]},{"key":"returning_browsers","label":"Returning browsers","unit":"count","value":null,"definition":"Not measured: this product has not enabled optional browser-return measurement. Tab sessions cannot establish returns.","quality":"unavailable","daily":[]}],"source":{"endpoint":"https://woodhouse.loftwah.com/api/portfolio-analytics?project=protocol-11","revision":null}}},{"project":"loftwahfm","report":{"schema":"woodhouse.portfolio-analytics/1","project":"loftwahfm","generatedAt":"2026-10-23T04:55:38.205Z","timezone":"UTC","period":{"from":"2026-09-24","to":"2026-10-23","days":30,"complete":false},"coverage":{"startedAt":"2026-10-10T00:00:00.000Z","comparableFrom":"2026-10-15T11:25:47.000Z","through":"2026-10-23T04:55:38.205Z","quality":"partial","limitations":["D1 counts are exact for accepted listening-v1 receipts, not independently audited people or exhaustive listening.","Collection began 10 October 2026; aggregate history is retained for 185 days. Entirely pre-collection or expired windows are unavailable, never zero. Current UTC day and the first collection day are partial.","Historical counts before 15 October 2026 may include unmarked production verification that cannot be separated or subtracted. Growth comparisons and records require complete dates after comparableFrom.","Client delivery, opt-out, rate limits and uninstrumented/older clients may omit listening. Declared tests, preview, obvious bot/headless and DNT/GPC traffic are excluded.","Legacy Analytics Engine milestones are excluded: that separate pipeline is adaptively sampled and retained for three months, so it cannot establish exact lifetime records.","No browser identity is stored by listening-v1; distinct listeners, returning audience and retention are unavailable."]},"metrics":[{"key":"listening_starts","label":"Listening starts","unit":"count","value":273,"definition":"Confirmed audible progression per random play receipt, deduplicated by the listening-v1 collector. All admitted FM site, game, widget and unknown sources; not unique listeners or gameplay starts.","quality":"exact","daily":[{"date":"2026-10-10","value":19},{"date":"2026-10-11","value":8},{"date":"2026-10-12","value":14},{"date":"2026-10-13","value":2},{"date":"2026-10-14","value":4},{"date":"2026-10-15","value":1},{"date":"2026-10-16","value":6},{"date":"2026-10-17","value":3},{"date":"2026-10-18","value":46},{"date":"2026-10-19","value":49},{"date":"2026-10-20","value":45},{"date":"2026-10-21","value":37},{"date":"2026-10-22","value":25},{"date":"2026-10-23","value":14}]},{"key":"listening_seconds","label":"Audible listening","unit":"seconds","value":25616,"definition":"Accepted forward audible progression bounded by server elapsed time; excludes pauses, seeking, muted and stalled playback. FM native audio can report while the page is hidden; game adapters exclude hidden playback. All admitted listening-v1 sources, not gameplay time.","quality":"exact","daily":[{"date":"2026-10-10","value":13},{"date":"2026-10-11","value":39},{"date":"2026-10-12","value":28},{"date":"2026-10-13","value":2},{"date":"2026-10-14","value":13},{"date":"2026-10-15","value":0},{"date":"2026-10-16","value":18},{"date":"2026-10-17","value":347},{"date":"2026-10-18","value":5257},{"date":"2026-10-19","value":5176},{"date":"2026-10-20","value":3734},{"date":"2026-10-21","value":4219},{"date":"2026-10-22","value":3833},{"date":"2026-10-23","value":2937}]},{"key":"game_listening_starts","label":"Game radio starts","unit":"count","value":3,"definition":"Confirmed audible radio starts explicitly attributed to admitted games; excludes game launches and gameplay starts.","quality":"exact","daily":[{"date":"2026-10-10","value":0},{"date":"2026-10-11","value":0},{"date":"2026-10-12","value":0},{"date":"2026-10-13","value":0},{"date":"2026-10-14","value":0},{"date":"2026-10-15","value":0},{"date":"2026-10-16","value":0},{"date":"2026-10-17","value":0},{"date":"2026-10-18","value":0},{"date":"2026-10-19","value":3},{"date":"2026-10-20","value":0},{"date":"2026-10-21","value":0},{"date":"2026-10-22","value":0},{"date":"2026-10-23","value":0}]},{"key":"game_listening_seconds","label":"Game radio listening","unit":"seconds","value":5,"definition":"Accepted audible radio seconds explicitly attributed to admitted games; not gameplay duration.","quality":"exact","daily":[{"date":"2026-10-10","value":0},{"date":"2026-10-11","value":0},{"date":"2026-10-12","value":0},{"date":"2026-10-13","value":0},{"date":"2026-10-14","value":0},{"date":"2026-10-15","value":0},{"date":"2026-10-16","value":0},{"date":"2026-10-17","value":0},{"date":"2026-10-18","value":0},{"date":"2026-10-19","value":5},{"date":"2026-10-20","value":0},{"date":"2026-10-21","value":0},{"date":"2026-10-22","value":0},{"date":"2026-10-23","value":0}]}],"source":{"endpoint":"https://fm.loftwah.com/api/portfolio-analytics","revision":null}}},{"project":"bubbles","report":{"schema":"woodhouse.portfolio-analytics/1","project":"bubbles","generatedAt":"2026-10-23T04:55:38.036Z","timezone":"UTC","period":{"from":"2026-09-24","to":"2026-10-23","days":30,"complete":false},"coverage":{"startedAt":"2026-10-15T11:33:11.547Z","comparableFrom":"2026-10-15T11:33:11.547Z","through":"2026-10-23T04:55:38.036Z","quality":"partial","limitations":["Current UTC day is partial. Stored browser reports are subject to privacy opt-outs, network loss and abuse controls; they are not unique people.","Collection is opt-in and starts at this deployment. No historical gameplay is imported or invented. Anonymous daily totals are retained durably; pseudonymous run facts expire after 90 days.","Active-time collection starts 2026-10-15T11:33:11.547Z; earlier time is unavailable. Raw gameplay run facts expire after 90 days."]},"metrics":[{"key":"game_starts","label":"Gameplay starts","unit":"count","value":0,"definition":"Opted-in gameplay starts at the first accepted shot/turn, or Snake start. Route visits and unplayed boards excluded. Random run IDs deduplicate retries; not unique humans.","quality":"exact","daily":[{"date":"2026-10-15","value":0},{"date":"2026-10-16","value":0},{"date":"2026-10-17","value":0},{"date":"2026-10-18","value":0},{"date":"2026-10-19","value":0},{"date":"2026-10-20","value":0},{"date":"2026-10-21","value":0},{"date":"2026-10-22","value":0},{"date":"2026-10-23","value":0}]},{"key":"game_completions","label":"Completed games","unit":"count","value":0,"definition":"Started runs reaching their actual game terminal result, attributed to launch UTC day. Quits and restarts excluded; not a completion cohort rate.","quality":"exact","daily":[{"date":"2026-10-15","value":0},{"date":"2026-10-16","value":0},{"date":"2026-10-17","value":0},{"date":"2026-10-18","value":0},{"date":"2026-10-19","value":0},{"date":"2026-10-20","value":0},{"date":"2026-10-21","value":0},{"date":"2026-10-22","value":0},{"date":"2026-10-23","value":0}]},{"key":"active_seconds","label":"Active gameplay","unit":"seconds","value":0,"definition":"Cumulative foreground, focused, unpaused gameplay seconds with input in the preceding 60 seconds. Loading/countdowns, hidden tabs, idle and radio excluded. Browser-reported, bounded by server elapsed time; launch UTC day attribution.","quality":"exact","daily":[{"date":"2026-10-15","value":0},{"date":"2026-10-16","value":0},{"date":"2026-10-17","value":0},{"date":"2026-10-18","value":0},{"date":"2026-10-19","value":0},{"date":"2026-10-20","value":0},{"date":"2026-10-21","value":0},{"date":"2026-10-22","value":0},{"date":"2026-10-23","value":0}]},{"key":"browsers","label":"Opted-in browsers","unit":"count","value":0,"definition":"Distinct random opted-in browser IDs with a received gameplay start in the selected window. Browser reports, not humans; daily counts are distinct per day and do not sum to the period total.","quality":"exact","daily":[{"date":"2026-10-15","value":0},{"date":"2026-10-16","value":0},{"date":"2026-10-17","value":0},{"date":"2026-10-18","value":0},{"date":"2026-10-19","value":0},{"date":"2026-10-20","value":0},{"date":"2026-10-21","value":0},{"date":"2026-10-22","value":0},{"date":"2026-10-23","value":0}]},{"key":"returning_browsers","label":"Returning opted-in browsers","unit":"count","value":0,"definition":"Opted-in browser IDs with a gameplay start in this window and an earlier different tab session in the retained 90-day run history. Same-tab replays excluded. Not human or installation retention; daily counts do not sum to period distinct counts.","quality":"exact","daily":[{"date":"2026-10-15","value":0},{"date":"2026-10-16","value":0},{"date":"2026-10-17","value":0},{"date":"2026-10-18","value":0},{"date":"2026-10-19","value":0},{"date":"2026-10-20","value":0},{"date":"2026-10-21","value":0},{"date":"2026-10-22","value":0},{"date":"2026-10-23","value":0}]},{"key":"engaged_sessions","label":"Engaged opted-in tab sessions","unit":"count","value":0,"definition":"Distinct opted-in tab-session IDs receiving at least 10 active seconds across runs started in the selected window. Daily thresholds apply separately to runs started each UTC day; daily counts need not sum to the period distinct count.","quality":"exact","daily":[{"date":"2026-10-15","value":0},{"date":"2026-10-16","value":0},{"date":"2026-10-17","value":0},{"date":"2026-10-18","value":0},{"date":"2026-10-19","value":0},{"date":"2026-10-20","value":0},{"date":"2026-10-21","value":0},{"date":"2026-10-22","value":0},{"date":"2026-10-23","value":0}]},{"key":"visits","label":"Visits","unit":"count","value":null,"definition":"Only opted-in gameplay is collected. Page visits and acquisition are not collected.","quality":"unavailable","daily":[]},{"key":"game_replays","label":"Deliberate replays","unit":"count","value":null,"definition":"A distinct replay action is not yet recorded; multiple starts are not assumed to be replays.","quality":"unavailable","daily":[]}],"source":{"endpoint":"https://api.bubbles.loftwah.com/api/portfolio-analytics","revision":null}}}],"releases":[{"project":"app-composer","evidenceId":"app-composer-building-2026-10-23","date":"2026-10-22","reviewedAt":"2026-10-23","title":"The build story and the contribution invitation are live","summary":"The live /building article documents a real brief → Init specification → local Worker run, with real captures and editable diagrams. Guestbook commit 019ce0d117f9f89e472a5c7642d51d85301f7fcd publishes GET /r/:resource/api/invitation with open, paused, closed and full states, exact form paths and postcard limits; Linkarooie commit 20ef9a50c19c7a3419dc06fdae020c6a677ed5cf validates the contract and treats a malformed, redirected, foreign or partial response as unavailable. Approval and featuring remain separate. Woodhouse's source plate and contribution flow explain the same contract.","boundary":"The local fictional run is not a hosted deployment, and the invitation is a producer contract, not proof of a live owner configuration or adoption. Woodhouse's flow is a model of the published contract, not a production control.","revision":"019ce0d117f9f89e472a5c7642d51d85301f7fcd"},{"project":"app-composer","evidenceId":"app-composer-identity-2026-10-22","date":"2026-10-22","reviewedAt":"2026-10-22","title":"The approved Composer mark and share card are live","summary":"The live App Composer homepage declares product-og-20261022b.jpg at 1200×630 and the 20261022b icon set; its build identity is 41d488383031169ead44aab3be4d53b5abbf9096. The image was fetched and inspected (SHA-256 0ed47d3fea0628308dec42db8e294bd462c1d82b9092905a5b207df61b31afad). Woodhouse's project record, dossier, portfolio tile and share-image path now use the current image, tile SVG and describing alt text. Social-platform unfurl rendering remains externally unverified.","boundary":"The producer's live metadata and image bytes are verified. Woodhouse's adoption is a reviewed reference, not proof that every external social platform has refreshed its cache, that every consumer outside the producer uses the new mark, or that the identity earned customer demand.","revision":"41d488383031169ead44aab3be4d53b5abbf9096"},{"project":"app-composer","evidenceId":"app-composer-starting-point-2026-10-18","date":"2026-10-18","reviewedAt":"2026-10-18","title":"From a live example to your own starting point","summary":"The released demo sends Make this collection to Init’s composition recommendation without overwriting a saved draft. Independent browser interaction checked that explicit Use changes the form while preserving authored settings; the configuration can be downloaded with the two source pins. The live reference explains where to find its fictional sample and links back to the original guestbook item.","boundary":"This demonstrates the available configuration and handoff, not a new creator deploying a production collection or independent adoption. Source pins, privacy and owning release gates remain in force. Browser QA must use the supported verification header; bounded open counts can include unmarked inspection and are not demand evidence.","revision":"152a886b1eb7de3768613a0429c38fe2713fea40"},{"project":"loftwahfm","evidenceId":"loftwahfm-mobile-listening-2026-10-18","date":"2026-10-18","reviewedAt":"2026-10-18","title":"Listening follows the audio, not the visible page","summary":"The deployed collector uses native media time updates independently of the visible UI clock. With synthetic media and simulated hidden-page state, native media progression advanced the intercepted receipt while seek and mute stayed excluded. The sanctioned release and live browser checks bind to the named source. QA reporting requests were intercepted; no listening totals or history were added by those checks.","boundary":"This is bounded browser instrumentation evidence, not a personally identified listener or a physical-phone observation. Actual background and suspended playback, a real audible phone listen and its received Woodhouse count remain to be observed. Long browser-suspended gaps stay excluded and missing history cannot be recovered.","revision":"8c0c8720956504269a5f526036595bb3537d4b27"},{"project":"app-composer","evidenceId":"app-composer-publication-2026-10-18","date":"2026-10-17","reviewedAt":"2026-10-18","title":"The published pieces keep their own identity","summary":"Opaque credential and dotenv-comment regressions plus adversarial archive fixtures fail closed. The exact current production release and a separately bound preview passed negative credential-path and package-content checks.","boundary":"This is actual release-path and artifact coverage, not a guarantee against every secret format or proof that a new creator has completed onboarding. Private account state and migration work remain separate.","revision":"aa1b884150ec04d9806bc8211824bc52e8f9962f"},{"project":"bubbles","evidenceId":"bubbles-publication-2026-10-18","date":"2026-10-17","reviewedAt":"2026-10-18","title":"A game release checks what it publishes","summary":"The independently deployed game passed its normal release, exact candidate asset checks and deployed browser smoke. Safe negative probes returned six clean missing responses and three generic HTML fallbacks; actual output inspection supplies the artifact coverage.","boundary":"Generic HTML fallbacks are neither exposure nor proof of safety. Provider preview URLs remain disabled, so no addressable Bubbles preview is claimed tested. This guard release does not complete the broader gameplay qualification programme.","revision":"542fa9d5fed89634088d0e785ef1e6a814b461ee"},{"project":"loftwahfm","evidenceId":"loftwahfm-game-music-2026-10-18","date":"2026-10-17","reviewedAt":"2026-10-18","title":"A playable connection with a copyable starting point","summary":"The sanctioned FM release and live guide, starter and artwork are checked against exact source. Independent browser checks cover initial silence, gesture playback, mute, pause and failure/retry across Chromium and phone/tablet WebKit profiles. The Woodhouse example serves from a separate origin.","boundary":"Browser time progression is playback evidence, not human listening or physical-device acceptance. The small prototype is not customer adoption and gives no redistribution licence.","revision":"498ef330be45be42f1598ca464ddb7dbf4bbebfa"},{"project":"app-composer","evidenceId":"app-composer-usage-2026-10-16","date":"2026-10-16","reviewedAt":"2026-10-16","title":"Creator profile and moderated guest path released","summary":"Reviewed current canonical source and owning release evidence against the public destination on 16 October 2026. Composer and independently deployed Linkarooie identities agree with the owning release record. Native owner Publish/Hide and Remove-confirm interaction remain partial; API curation and public visual checks are separate evidence.","boundary":"Composer and independently deployed Linkarooie identities agree with the owning release record. Native owner Publish/Hide and Remove-confirm interaction remain partial; API curation and public visual checks are separate evidence.","revision":"be34558931b193ac932170d880d3ccd4bd800dea"},{"project":"bubbles","evidenceId":"bubbles-usage-2026-10-16","date":"2026-10-16","reviewedAt":"2026-10-16","title":"Opt-in reporting and consent revocation released","summary":"Reviewed current canonical source and owning release evidence against the public destination on 16 October 2026. The receipt-only main merge is separate from the deployed runtime revision. Later exact verification followed an initial propagation-related smoke failure. Owner-preview and scoped browser proof do not complete formal qualification or physical acceptance.","boundary":"The receipt-only main merge is separate from the deployed runtime revision. Later exact verification followed an initial propagation-related smoke failure. Owner-preview and scoped browser proof do not complete formal qualification or physical acceptance.","revision":"ac8cb4c5136fc52c3170f07fce6f3bc4669f9a5c"},{"project":"fighter","evidenceId":"fighter-usage-2026-10-16","date":"2026-10-16","reviewedAt":"2026-10-16","title":"Source-owned fight reporting and optional returns released","summary":"Reviewed current canonical source and owning release evidence against the public destination on 16 October 2026. Owning release and live public adapter checked. Browser identities are opt-in and partial. Historical QA exposure prevents clean pre-boundary growth comparisons; no new game playthrough or physical observation was performed here.","boundary":"Owning release and live public adapter checked. Browser identities are opt-in and partial. Historical QA exposure prevents clean pre-boundary growth comparisons; no new game playthrough or physical observation was performed here.","revision":"ec914d67570d902231b691c61fe17b975e3a69f0"},{"project":"loftwahfm","evidenceId":"loftwahfm-usage-2026-10-16","date":"2026-10-16","reviewedAt":"2026-10-16","title":"Native UTC listening windows released","summary":"Reviewed current canonical source and owning release evidence against the public destination on 16 October 2026. Live aggregate source and owning release checked. Audible receipts are separate from gameplay, sampled analytics and unique listeners. The broader unchanged React Doctor baseline failure remains distinct from the passing sanctioned release.","boundary":"Live aggregate source and owning release checked. Audible receipts are separate from gameplay, sampled analytics and unique listeners. The broader unchanged React Doctor baseline failure remains distinct from the passing sanctioned release.","revision":"43e5f291fb7d32107e0cbd72ac32175f77f470b6"},{"project":"protocol-11","evidenceId":"protocol-11-usage-2026-10-16","date":"2026-10-16","reviewedAt":"2026-10-16","title":"Current table release and anonymous measurement source","summary":"Reviewed current canonical source and owning release evidence against the public destination on 16 October 2026. Owning source and release receipt reviewed. Synthetic production QA sent no engagement events; that exclusion is not evidence of real audience collection. The later phone clearance draft has not shipped.","boundary":"Owning source and release receipt reviewed. Synthetic production QA sent no engagement events; that exclusion is not evidence of real audience collection. The later phone clearance draft has not shipped.","revision":"65fe18c575119b1308d668f1f024465429fcfa67"},{"project":"protocol-11","evidenceId":"protocol-11-player-journeys-2026-10-13","date":"2026-10-13","reviewedAt":"2026-10-13","title":"Protocol 11 · later player-feature delivery","summary":"The qualified feature tree and deployed assets are recorded separately from later tooling/documentation. The public readiness endpoint independently reported production D1 and matchmaker ready.","boundary":"Woodhouse reviewed source and the owning receipts; it did not repeat game playback. Physical phone, human listening and native OS sharing remain separate acceptance. The owning browser qualification is a frozen composite, not one uninterrupted full-suite run; actual-domain browser UI remained blocked. Source/runtime equality and live readiness are distinct from that interaction gate. The current v2 film is a disclosed one-round demonstration; broader campaign acceptance remains open.","revision":"979003f0c5c784637b6186428bb3216b5f4c902d"},{"project":"bubbles","evidenceId":"bubbles-sharing-2026-10-13","date":"2026-10-12","reviewedAt":"2026-10-13","title":"bubbles · native result sharing","summary":"The later runtime carries the reviewed SDK 1.2 attribution implementation and native Classic sharing. Its owner-preview receipt covers sharing, player clearance and the unchanged service-worker bytes; earlier full audio proof remains separate.","boundary":"Woodhouse reviewed source and the owning receipts; it did not repeat game playback. Physical phone, human listening and native OS sharing remain separate acceptance. Owner-preview and scoped Chromium/WebKit receipts do not complete formal qualification. Classic export is not a verified uploaded score, a public result permalink or sharing for every mode. Prior full audio proof and later sharing/clearance proof are distinct.","revision":"60e4e696304539f0b55353e7beb2385b8b74458f"},{"project":"fighter","evidenceId":"fighter-sharing-2026-10-13","date":"2026-10-12","reviewedAt":"2026-10-13","title":"fighter · native result sharing","summary":"Exact-main Chromium/WebKit receipts cover real published media, excluded audible-progress reporting, saved shuffle and finished-result PNG/caption journeys. The public page build identifier independently matched this source.","boundary":"Woodhouse reviewed source and the owning receipts; it did not repeat game playback. Physical phone, human listening and native OS sharing remain separate acceptance. The reviewed browser receipts use excluded test attribution. They prove scoped behaviour, not real audience listening, score verification or a completed variant platform.","revision":"63529d4f3417a496431b1ffed98a2c2425d7c176"},{"project":"loftwahfm","evidenceId":"loftwahfm-analytics-sharing-2026-10-13","date":"2026-10-12","reviewedAt":"2026-10-13","title":"LoftwahFM · integrated listening and sharing reports","summary":"The release preserves the collector, SDK 1.2 compatibility and public snapshot/PNG contract. Later source 1cf08290 is distinct and has no fresh exact deployment receipt established here.","boundary":"Woodhouse reviewed source and the owning receipts; it did not repeat game playback. Physical phone, human listening and native OS sharing remain separate acceptance. The public aggregate was re-read on 13 October and marked partial coverage. It contained no reported audible game starts or seconds in that window; that does not mean nobody plays. Adapter visits, active gameplay, unique people and willingness to pay are different measures.","revision":"3fc80d80fddf1b83e87d10373ae44a973cde5ab5"},{"project":"bubbles","evidenceId":"loftwahfm-radio-bubbles-client-1-2-0-release-2026-10-13","date":"2026-10-12","reviewedAt":"2026-10-13","title":"bubbles · radio 1.2.0 release","summary":"The dedicated SDK 1.2 runtime receipt records exact deployment, native player/audio/attribution Chromium/WebKit journeys and explicit test/privacy exclusions. Later sharing and player-clearance proof stays separate.","boundary":"Dedicated owner-preview audio/attribution proof on this exact source. The later sharing release is not substituted for full playback verification. Formal qualification, held editorial/shared mix, real audience, physical device and human listening remain open.","revision":"64c1a60d30ab93e619094cecd0208838b1179ede"},{"project":"fighter","evidenceId":"loftwahfm-radio-fighter-client-1-2-0-release-2026-10-13","date":"2026-10-12","reviewedAt":"2026-10-13","title":"fighter · radio 1.2.0 release","summary":"Exact-main Chromium/WebKit receipts cover real published media, excluded audible-progress reporting, saved shuffle and finished-result PNG/caption journeys. The public page build identifier independently matched this source.","boundary":"Woodhouse reviewed source and the owning receipts; it did not repeat game playback. Physical phone, human listening and native OS sharing remain separate acceptance. The reviewed browser receipts use excluded test attribution. They prove scoped behaviour, not real audience listening, score verification or a completed variant platform.","revision":"63529d4f3417a496431b1ffed98a2c2425d7c176"},{"project":"shoalshot","evidenceId":"shoalshot-brand-sharing-2026-10-12","date":"2026-10-12","reviewedAt":"2026-10-12","title":"SHOALSHOT · generated artwork and sharing repair","summary":"The readable Share result control opens a reef-backed paper result card. The canonical social preview is 1200 × 630; the transparent wordmark is 1998 × 424 and emblem 1161 × 1161. Public originals are available from the project with A Loftwah Game credit.","boundary":"This is a presentation and local-sharing repair. It does not establish a public result permalink, uploaded score, new listening attribution or physical iPhone/native OS share-sheet acceptance. The original native-sharing evidence remains separately dated and versioned.","revision":"b2570528f87b1c830ee68582766847f294cf157f"},{"project":"shoalshot","evidenceId":"shoalshot-native-result-sharing-2026-10-12","date":"2026-10-12","reviewedAt":"2026-10-12","title":"SHOALSHOT · finished-dive sharing","summary":"Play a dive, open Pause, choose End Dive, then use Share result on the Dive Summary. Save a 1200 × 630 PNG, copy its caption or use your device’s share options when supported. The card includes the actual mode, rules and game version.","boundary":"The result is local and unverified. The card is made inside the game; no public result permalink, uploaded score, account or square/portrait result format is provided. Owning Chromium/WebKit receipts establish downloads and navigation; physical iPhone/native OS sharing remains pending. No listening adoption or popularity is inferred.","revision":"7f3e89cd69fe7c003a34ca11989b7d3b32fd510e"},{"project":"shoalshot","evidenceId":"shoalshot-sharing-2026-10-13","date":"2026-10-12","reviewedAt":"2026-10-13","title":"shoalshot · native result sharing","summary":"The final menu release retains the existing SDK 1.2 integration. Owning production receipts cover the exact source, scoped fresh qualification and native menu click/keyboard/focus journeys, with earlier radio and finished-dive evidence separate.","boundary":"Woodhouse reviewed source and the owning receipts; it did not repeat game playback. Physical phone, human listening and native OS sharing remain separate acceptance. The menu release used the existing fixed presentation/FM qualification scope. The lazy radio adapter visit is not every game landing or a unique person. A measured audience trial has not run.","revision":"5be8e6c9c537a1d712f3d1539b9d5630920e86a0"},{"project":"shoalshot","evidenceId":"loftwahfm-radio-shoalshot-client-1-2-0-release-2026-10-11","date":"2026-10-11","reviewedAt":"2026-10-11","title":"shoalshot · exact radio deployment","summary":"Home and Pause offer six music stations and two presenter shows through the existing audio owner. Manual Shuffle, saved preferences, independent effects and local fallback preserve the fishing atmosphere.","boundary":"Physical iPhone and human listening remain open; narrow 320px dock labels need further composition work. Manual Shuffle is delivered; continuous shared My Mix is not.","revision":"365fcf0ad1a52337dab137ea4079eba24f8037f8"},{"project":"loftwahfm","evidenceId":"loftwahfm-games-radio-analytics-2026-10-11","date":"2026-10-10","reviewedAt":"2026-10-11","title":"LoftwahFM · games and radio discovery delivered","summary":"Merged PR #245 records the exact FM release, game catalogue links and aggregate measures that separate visits, playback starts, audible progress and referrals. Test traffic is excluded and games remain unranked while real observations are insufficient.","boundary":"Analytics capability is delivered; meaningful listener behaviour, demand, commercial value and telemetry adoption in every game are not established.","revision":"22445efdea492a26c5c8cf42431251884a08c076"},{"project":"loftwahfm","evidenceId":"loftwahfm-original-shows-2026-10-10","date":"2026-10-10","reviewedAt":"2026-10-10","title":"LoftwahFM · first original shows published","summary":"Both public edition pages expose the named shows, their dated publication, music and synthetic presenter scenes. The official station widget was inspected and real media playback advanced after an explicit Play action.","boundary":"Publication and browser media playback are established. Autonomous refresh, full format/acting qualification, human performance approval, physical-device acceptance and verified game adoption are separate gates.","revision":"editions caf4d63b2a0a83c38aecf74dd933f8bcf37770cfea1f38a3a99acabd568e71bf and 53afe5da9e8f2742ab7df0c88bae043f918614abaa96f60294b5e3ed21e3ed5e"},{"project":"bubbles","evidenceId":"loftwahfm-radio-bubbles-client-1-0-0-release-2026-10-11","date":"2026-10-10","reviewedAt":"2026-10-11","title":"bubbles · exact radio deployment","summary":"A stable, recoverable music dock exposes FM music, Original and Off, with saved controls and quiet reload. Presenter shows are discoverable through FM links while native editorial playback remains held.","boundary":"Owner-preview browser evidence does not complete formal qualification or physical iPhone/human listening. Native editorial remains held and shared continuous shuffle depends on FM #244.","revision":"d892ba75d4804558eb8df2deba38b59e6a962868"},{"project":"loftwahfm","evidenceId":"loftwahfm-radio-client-1-0-0-supported-2026-10-11","date":"2026-10-10","reviewedAt":"2026-10-11","title":"LoftwahFM · supported client 1.0.0","summary":"The owning release records immutable archive integrity and compatible host audio ownership. Client 1.1 adds optional programme/part selection; 1.2 adds optional game analytics. Existing supported pins need no forced upgrade for ordinary music and whole-show playback.","boundary":"Explicitly reviewed releases only; this does not infer compatibility for every future 1.x version or imply that older consumers have installed newer optional APIs.","revision":"22445efdea492a26c5c8cf42431251884a08c076"},{"project":"loftwahfm","evidenceId":"loftwahfm-radio-client-1-1-0-supported-2026-10-11","date":"2026-10-10","reviewedAt":"2026-10-11","title":"LoftwahFM · supported client 1.1.0","summary":"The owning release records immutable archive integrity and compatible host audio ownership. Client 1.1 adds optional programme/part selection; 1.2 adds optional game analytics. Existing supported pins need no forced upgrade for ordinary music and whole-show playback.","boundary":"Explicitly reviewed releases only; this does not infer compatibility for every future 1.x version or imply that older consumers have installed newer optional APIs.","revision":"22445efdea492a26c5c8cf42431251884a08c076"},{"project":"loftwahfm","evidenceId":"loftwahfm-radio-client-1-2-0-supported-2026-10-11","date":"2026-10-10","reviewedAt":"2026-10-11","title":"LoftwahFM · supported client 1.2.0","summary":"The owning release records immutable archive integrity and compatible host audio ownership. Client 1.1 adds optional programme/part selection; 1.2 adds optional game analytics. Existing supported pins need no forced upgrade for ordinary music and whole-show playback.","boundary":"Explicitly reviewed releases only; this does not infer compatibility for every future 1.x version or imply that older consumers have installed newer optional APIs.","revision":"22445efdea492a26c5c8cf42431251884a08c076"},{"project":"loftwahfm","evidenceId":"loftwahfm-radio-client-2026-10-10","date":"2026-10-10","reviewedAt":"2026-10-10","title":"LoftwahFM · published music capability","summary":"The client archive was fetched and its package name, version and SHA-256 checked. Public station and game profile endpoints returned schema 1; profiles require client major 1, with music off and speech disabled by default.","boundary":"This record proves availability and compatibility of upstream music and the shared client. It does not establish game playback, physical-device acceptance or human performance approval. The separate original-show publication record covers the first curated editions.","revision":"@loftwahfm/radio-client@1.0.0; sha256:ab3ea200fab88d46e6e06b5fa5c42456c058b4d49f3031f42659ac88157b8eb0"},{"project":"fighter","evidenceId":"loftwahfm-radio-fighter-client-1-1-0-release-2026-10-11","date":"2026-10-10","reviewedAt":"2026-10-11","title":"fighter · exact radio deployment","summary":"Menu, Settings and Library expose music and both shows. The game audio manager retains authored Battle, Results and Cinema priority, independent effects and opt-in speech; forkable branded versions retain their own presentation.","boundary":"Human listening and physical iPhone remain unobserved. Its current station shuffle does not establish the future shared My Mix contract; optional client 1.2 telemetry is not installed.","revision":"e38445ba83b27bc9ce7a86db9f4ac8af70593fa2"},{"project":"protocol-11","evidenceId":"loftwahfm-radio-protocol-11-client-1-0-0-release-2026-10-11","date":"2026-10-10","reviewedAt":"2026-10-11","title":"protocol-11 · exact radio deployment","summary":"The Jukebox combines the original soundtrack, six FM music stations and two shows under one stream owner. Explicit Play, saved controls, bounded refresh and original fallback preserve table feedback.","boundary":"Physical iPhone and human audible acceptance remain open. Stable hand ordering, legal targets, Flaming feedback and desktop table visibility remain unresolved player-facing work.","revision":"1e62c435451a95bd64403d1a72c6b7c931fc379c"}],"analysis":{"schema":"woodhouse.weekly-analysis/1","findings":[]}}