diff --git a/docs/adr/0005-automatic-hybrid-media-routing.md b/docs/adr/0005-automatic-hybrid-media-routing.md index f8b58c3..5a7cfbb 100644 --- a/docs/adr/0005-automatic-hybrid-media-routing.md +++ b/docs/adr/0005-automatic-hybrid-media-routing.md @@ -1,8 +1,7 @@ # ADR-0005: Automatic Hybrid Media Routing -- Status: Base routing is deployed on strict v12. The evidence-only quality - shadow is implemented in canonical source on strict v13 but not yet deployed. - Exact current identity is owned by +- Status: Base routing and the evidence-only quality shadow are deployed on + strict v13. Exact current identity is owned by [status](../status.md). - Date: 2026-08-20 - Last updated: 2026-08-27 @@ -424,10 +423,9 @@ deployment-wide. ## Current Source And Deployment Boundary -Canonical application/runtime source uses the evidence-only strict -`screener-v13` quality shadow; production remains strict `screener-v12` until -its atomic application release. Exact current source and deployment identity is -indexed by [status](../status.md). +Canonical application/runtime source and production use the evidence-only +strict `screener-v13` quality shadow. Exact current source and deployment +identity is indexed by [status](../status.md). Browser SFU PCs use empty external ICE-server lists. The controlled exact- candidate rollback/SFU commit and active-SFU cadence gates are closed. The operation owner remains only `route`; broader heterogeneous-network and SFU diff --git a/docs/deployment.md b/docs/deployment.md index 5efbe8a..4b923fe 100644 --- a/docs/deployment.md +++ b/docs/deployment.md @@ -3,8 +3,8 @@ Last verified: 2026-08-27. This page records production running exact deployed application/runtime revision -`267e07340ba9ec85c1082d58da89b289b12c3726`, release `267e073`, and the single -Browser `screener-v12` contract. Product direction and pending work are owned by +`73ed920a229bfc64c89b97045c00d6cd75216f3a`, release `73ed920`, and the single +Browser `screener-v13` contract. Product direction and pending work are owned by [project memory](./project-memory.md) and [the TODO ledger](./todo.md). This section documents the accepted UDP-only deployment contract: one Node.js @@ -25,18 +25,18 @@ ICE/UDP only. Ordinary peer ICE remains STUN-only and production coturn uses the tracked STUN-only configuration with TCP/TLS disabled. The source and production configure no TURN, ICE/TCP, media TCP, or TLS-relayed media. -Production runs exact `267e07340ba9ec85c1082d58da89b289b12c3726`, release -`267e073`, from `/opt/screener/releases/267e073`. The immutable runtime tar +Production runs exact `73ed920a229bfc64c89b97045c00d6cd75216f3a`, release +`73ed920`, from `/opt/screener/releases/73ed920`. The immutable runtime tar SHA-256 is -`6a04af6390fa44e0667e3d1a730c665c6a2401f51872f3168044d70133515481`. +`351053e497e8eee17956f4cec86305b05d805c80deb40b2cf4cd2668eaf08583`. Its 41-file path/size/hash manifest SHA-256 is -`14e0b509397f822394a53110f17993dc625e80df4eca654dfa2bc817854928c8`. +`bb993950a30a0b99b9b6185aa13777edcccbdcdaebdfb1b05b3c3499a1e78479`. Local and public `/healthz` return 200; Screener, LiveKit, coturn, and nginx are active with `NRestarts=0`. The public main Browser asset is -`assets/index-lKEEgpx8.js` with SHA-256 -`5f9ec937138d66220e727c01913cff85a9e82b9a8a1816c5a4dbd3d508e37369`. +`assets/index-CaM3Pn5_.js` with SHA-256 +`3c64cd75a7d67716f7600465a1742b1c02f3b00e71a1039649604aaf6d08f816`. -The release deploys the single Browser `screener-v12` wire and one internal, +The release deploys the single Browser `screener-v13` wire and one internal, content-independent H.264 sender gate with VP8 fallback across Browser direct, browser-relay, and SFU video. It retains pinned LiveKit default screen-share representations, Dynacast and server send-side BWE without an application layer @@ -296,8 +296,8 @@ must fail or wait before a fourth endpoint copy is issued. Supplying the removed `MAX_PEER_RELAY_DOWNSTREAM_EDGES`, even blank, fails startup. -Production release `267e073` runs the deployed server and Browser assets -atomically on `screener-v12`; every stale Browser or executable-sender wire fails +Production release `73ed920` runs the deployed server and Browser assets +atomically on `screener-v13`; every stale Browser or executable-sender wire fails before room authority. Native senders and helpers are outside this release. The four `LIVEKIT_*` values must either all be absent or all be present, and a diff --git a/docs/project-memory.md b/docs/project-memory.md index 613f9e9..b94a4ad 100644 --- a/docs/project-memory.md +++ b/docs/project-memory.md @@ -120,11 +120,10 @@ Last updated: 2026-08-27 ## Current Source And Production -- Canonical source uses the evidence-only strict `screener-v13` quality shadow; - production remains strict `screener-v12` until the atomic application release. - Both retain adaptive H.264/VP8 selection, the local Host codec override and - optional SQLite room authority. Exact identities are indexed by - [status](./status.md). +- Canonical source and production use the same evidence-only strict + `screener-v13` quality shadow with adaptive H.264/VP8 selection, the local + Host codec override, and optional SQLite room authority. Exact identities are + indexed by [status](./status.md). - Strict v13 rejects old Browser pages before room authority. Its bounded current-edge aggregate adds no active route decision until annotated production shadow evidence establishes an accepted policy. @@ -138,8 +137,8 @@ Last updated: 2026-08-27 ## Current Priority -1. Deploy the evidence-only strict `screener-v13` quality shadow and collect - annotated production samples. +1. Collect annotated production samples from the evidence-only strict + `screener-v13` quality shadow. 2. Complete the mobile Viewer lifecycle matrix and representative real-network route/media acceptance. diff --git a/docs/research/realtime-quality-adaptation.md b/docs/research/realtime-quality-adaptation.md index bee0066..186f551 100644 --- a/docs/research/realtime-quality-adaptation.md +++ b/docs/research/realtime-quality-adaptation.md @@ -2,8 +2,8 @@ - Research date: 2026-08-26 - Scope: Browser game-screen capture, encoding, P2P forwarding, and LiveKit SFU -- Status: strict-v13 evidence-only quality shadow implemented in canonical - source; production sampling and active policy remain open +- Status: strict-v13 evidence-only quality shadow deployed; production sampling + and active policy remain open ## Current Conclusion diff --git a/docs/status.md b/docs/status.md index e28e352..a4ded5b 100644 --- a/docs/status.md +++ b/docs/status.md @@ -8,15 +8,15 @@ This is the current execution index. Git history owns completed timelines; ## Production - `https://share.bonfire.icu` runs exact application/runtime revision - `267e07340ba9ec85c1082d58da89b289b12c3726`, release `267e073`, wire - `screener-v12`, from `/opt/screener/releases/267e073`. The immutable runtime + `73ed920a229bfc64c89b97045c00d6cd75216f3a`, release `73ed920`, wire + `screener-v13`, from `/opt/screener/releases/73ed920`. The immutable runtime tar SHA-256 is - `6a04af6390fa44e0667e3d1a730c665c6a2401f51872f3168044d70133515481`; + `351053e497e8eee17956f4cec86305b05d805c80deb40b2cf4cd2668eaf08583`; its 41-file manifest SHA-256 is - `14e0b509397f822394a53110f17993dc625e80df4eca654dfa2bc817854928c8`. -- The served Browser entry references `assets/index-lKEEgpx8.js`; the public + `bb993950a30a0b99b9b6185aa13777edcccbdcdaebdfb1b05b3c3499a1e78479`. +- The served Browser entry references `assets/index-CaM3Pn5_.js`; the public asset SHA-256 is - `5f9ec937138d66220e727c01913cff85a9e82b9a8a1816c5a4dbd3d508e37369`. + `3c64cd75a7d67716f7600465a1742b1c02f3b00e71a1039649604aaf6d08f816`. Public `/healthz` returns 200. The release postflight found Screener, LiveKit, coturn, and nginx active with zero restarts. - Production enables SQLite room authority at @@ -42,8 +42,8 @@ This is the current execution index. Git history owns completed timelines; ## Current Source -- Canonical `main` uses the evidence-only strict `screener-v13` quality shadow; - production remains the strict-v12 application tree deployed from `267e073`. +- Canonical `main` and production use the same evidence-only strict + `screener-v13` quality-shadow application tree deployed from `73ed920`. Optional SQLite stable authority, non-expiring local preferred code, atomic room replacement and the Host codec selector are implemented; production selects stable storage. Graceful restart, crash, timeout and network loss use @@ -69,8 +69,8 @@ This is the current execution index. Git history owns completed timelines; ## Current Milestone -1. Atomically deploy strict `screener-v13`, then collect annotated production - freeze/pause samples without active route changes. +1. Collect annotated production freeze/pause samples from strict + `screener-v13` without active route changes. 2. Finish the Android Chrome and iOS Safari Viewer lifecycle matrix. 3. Finish representative public-network direct, peer-relay, SFU, recovery, Pause/Resume, screen-audio, real-game A/V, and all-UDP-blocked acceptance diff --git a/docs/todo.md b/docs/todo.md index c153f32..5cf4ac5 100644 --- a/docs/todo.md +++ b/docs/todo.md @@ -7,10 +7,9 @@ later topic is not implementation authority by itself. ## Now -1. **Quality-route evidence and shadow calibration.** Atomically deploy the - implemented strict `screener-v13` Browser/server quality shadow; v12 gets no - compatibility path. Collect annotated production samples from its bounded - current-edge freeze/pause aggregates before accepting an active trigger, +1. **Quality-route evidence and shadow calibration.** Collect annotated + production samples from the deployed strict `screener-v13` Browser/server + quality shadow before accepting an active trigger, probation, restore or cooldown policy. Shadow evidence must not alter facts, capacity, routes or SFU usage. 2. **Mobile Viewer lifecycle.** Run Android Chrome and iOS Safari matrices for diff --git a/docs/verification-status.md b/docs/verification-status.md index 70ad682..dec4ec4 100644 --- a/docs/verification-status.md +++ b/docs/verification-status.md @@ -8,20 +8,20 @@ may be interpreted. Git and pull requests own routine completed checks. ## Current Production Identity - Production runs exact application/runtime revision - `267e07340ba9ec85c1082d58da89b289b12c3726`, release `267e073`, wire - `screener-v12`, from `/opt/screener/releases/267e073`. + `73ed920a229bfc64c89b97045c00d6cd75216f3a`, release `73ed920`, wire + `screener-v13`, from `/opt/screener/releases/73ed920`. - Runtime tar SHA-256: - `6a04af6390fa44e0667e3d1a730c665c6a2401f51872f3168044d70133515481`. + `351053e497e8eee17956f4cec86305b05d805c80deb40b2cf4cd2668eaf08583`. The 41-file manifest SHA-256 is - `14e0b509397f822394a53110f17993dc625e80df4eca654dfa2bc817854928c8`. -- Public Browser asset `assets/index-lKEEgpx8.js` has SHA-256 - `5f9ec937138d66220e727c01913cff85a9e82b9a8a1816c5a4dbd3d508e37369`. + `bb993950a30a0b99b9b6185aa13777edcccbdcdaebdfb1b05b3c3499a1e78479`. +- Public Browser asset `assets/index-CaM3Pn5_.js` has SHA-256 + `3c64cd75a7d67716f7600465a1742b1c02f3b00e71a1039649604aaf6d08f816`. Public `/healthz` returns 200. Release postflight found Screener, LiveKit, coturn, and nginx active with zero restarts. ## Completed Product Evidence -- Strict `screener-v12` rejects stale Browser/executable wires before room +- Strict `screener-v13` rejects stale Browser/executable wires before room authority. Lightweight and SQLite-stable rooms, 24-hour dormant leases, room-lived Viewer grants, `open | private` code entry, invitation-only private rooms, password entry, grant rotate/revoke, atomic room replacement and @@ -64,8 +64,8 @@ may be interpreted. Git and pull requests own routine completed checks. ## Current Source Evidence -- Canonical source uses strict `screener-v13`; production remains the strict-v12 - application tree deployed from `267e073`. The adaptive H.264/VP8 sender +- Canonical source and production use the strict-v13 application tree deployed + from `73ed920`. The adaptive H.264/VP8 sender decision with `contentHint = "motion"` reapplies the selected video profile after answer negotiation, leaves SFU representation construction to pinned LiveKit, keeps Dynacast/send-side BWE, disables diff --git a/docs/方案设计.md b/docs/方案设计.md index 4657e4c..f5e64e3 100644 --- a/docs/方案设计.md +++ b/docs/方案设计.md @@ -2,7 +2,7 @@ ## 2026-08-18 14:45 -状态:canonical source 已实现唯一 strict `screener-v13` 的 evidence-only quality shadow,production 在原子应用发布前仍使用 strict `screener-v12`;旧页面在 authority 前拒绝,不保留 v12 parser。当前已实现每分享代次的 H.264 sender gate 与 VP8 fallback、本地 pre-share `VP8 | 自动 | H264` selector、可选 SQLite stable room authority、无期限 preferred code 和换房控制;这些不新增 codec wire、自定义 SFU layer list或应用媒体质量 controller。Video 使用 `contentHint = "motion"`,audio 使用 `music`。SFU 由 pinned LiveKit 默认 representations、Dynacast、server send-side BWE 和 disabled AdaptiveStream 拥有质量适配;screen audio 使用 64/128/192 kbps ceiling、stereo、DTX off 与 RED off。精确执行状态由 `docs/status.md` 持有。 +状态:canonical source 与 production 已部署唯一 strict `screener-v13` 的 evidence-only quality shadow;旧页面在 authority 前拒绝,不保留 v12 parser。当前已实现每分享代次的 H.264 sender gate 与 VP8 fallback、本地 pre-share `VP8 | 自动 | H264` selector、可选 SQLite stable room authority、无期限 preferred code 和换房控制;这些不新增 codec wire、自定义 SFU layer list或应用媒体质量 controller。Video 使用 `contentHint = "motion"`,audio 使用 `music`。SFU 由 pinned LiveKit 默认 representations、Dynacast、server send-side BWE 和 disabled AdaptiveStream 拥有质量适配;screen audio 使用 64/128/192 kbps ceiling、stereo、DTX off 与 RED off。精确执行状态由 `docs/status.md` 持有。 ## 目标与边界 @@ -365,7 +365,7 @@ Token-free SFU standby prewarm 保持可选且不创建 participant、publicatio ## 当前交付边界 -- Production 与 canonical source 当前使用严格单一 `screener-v12` wire;quality-shadow 集成边界会原子升级到 accepted `screener-v13`。每分享代 actual-sender gate 在证据通过时让未来 direct/relay 和 Host 单一 SFU publication 使用 H.264,否则使用 VP8。本地 pre-share `VP8 | 自动 | H264` selector 已实现并在分享期间锁定;quality-state/wire、自定义 SFU layer list、backup publication与健康 edge codec 切换不存在。Browser SFU 使用 pinned LiveKit 默认 representations、Dynacast、server send-side BWE、disabled AdaptiveStream 与 RED off;精确执行状态由 `docs/status.md` 持有。 +- Production 与 canonical source 当前使用严格单一 `screener-v13` wire。每分享代 actual-sender gate 在证据通过时让未来 direct/relay 和 Host 单一 SFU publication 使用 H.264,否则使用 VP8。本地 pre-share `VP8 | 自动 | H264` selector 已实现并在分享期间锁定;quality-state/wire、自定义 SFU layer list、backup publication与健康 edge codec 切换不存在。Browser SFU 使用 pinned LiveKit 默认 representations、Dynacast、server send-side BWE、disabled AdaptiveStream 与 RED off;精确执行状态由 `docs/status.md` 持有。 - Pause/Resume 由当前 Host session 和 `shareGeneration` 约束。Host 后台性能和 VP8 hardware acceleration 分别按受控根因证据诊断;标准 ICE/SFU 按真实异构网络验收。 - 当前发布面只包含 Web Host、Viewer 和 browser relay。Native sender、capture helper、shared-encode executable 与两个分发包仍由各自后续决策和物理证据驱动,不属于当前 Browser release。