Files
punktfunk/docs-site/content/docs/status.md
T
enricobuehler 7eb9a927cf
ci / rust (push) Has been cancelled
feat(connector): expose host clock offset over the C ABI for glass-to-glass
Factor the client-side skew handshake into a shared core helper (quic::clock_sync
-> ClockSkew) so both the reference client and the embeddable connector use one
implementation. NativeClient now runs the handshake at connect (right after Start,
before the control task takes the stream) and stores the host-client offset; it's
read over the C ABI via punktfunk_connection_clock_offset_ns (i64 ns, host minus
client; 0 = no correction / old host).

This is the substrate the Apple client needs for the decode->present (glass-to-
glass) term: stamp present time, add the offset to express it in the host's
capture clock, subtract the AU pts_ns. client-rs drops its local clock_sync copy
and uses the shared helper (behavior unchanged; validated locally).

Regenerates include/punktfunk_core.h. Roadmap section 12 + status updated.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-12 11:44:54 +00:00

3.5 KiB
Raw Blame History

title, description
title description
Status & Progress Where the work stands, what's live on each box, and a running progress log.

The living progress tracker. Milestone-level status lives in CLAUDE.md and the design in the Implementation Plan; this page is the current state + a dated log of what landed, kept up to date as work happens. Newest first.

Milestones at a glance

Milestone State
M1punktfunk-core + C ABI (protocol · FEC · crypto) complete & hardened
M2 — GameStream host (Moonlight-compatible) working end-to-end; HDR/surround-audio polish open
M3punktfunk/1 native protocol (QUIC control + UDP data) full session planes, validated live
M4 — native client decode + present (Apple first) 🟡 stage 1 done (first light); stage-2 presenter next

Live on the boxes

Box Role Compositor Notes
home-worker-2 (dev) KDE/KWin appliance kwin (headless Plasma) QEMU VM, passthrough RTX 5070 Ti; serve --native user unit
home-worker-3 (GNOME) GNOME/Mutter appliance mutter (RecordVirtual) RTX 4090; autologin GNOME Wayland; serve --native user unit. See GNOME Box Setup
home-bazzite-1 SteamOS-like host gamescope host-managed Steam session at client mode. See Bazzite Setup

All three appliances advertise over mDNS (_punktfunk._udp) and require PIN pairing by default.

Progress log

2026-06-12

  • Skew handshake in the connector + C ABIquic::clock_sync is now a shared core helper used by both the reference client and NativeClient; the connector runs it at connect and exposes the host clock offset over the C ABI (punktfunk_connection_clock_offset_ns). This is the substrate the Apple client needs for the decode→present (glass-to-glass) term.
  • Wall-clock skew handshake (ClockProbe/ClockEcho, 8 NTP rounds after Start) — makes the client's capture→reassembled latency valid cross-machine. Validated GNOME box → dev box: offset 1.57 ms removed, p50 1.30 ms skew-corrected. (05bc9ab)
  • Native LAN auto-discovery — host advertises _punktfunk._udp (TXT: fingerprint, pairing, proto); punktfunk-client-rs --discover lists hosts. Validated cross-LAN. (4fff464)
  • Third test box stood up — home-worker-3 (Ubuntu 26.04, RTX 4090, GNOME 50): first GNOME/Mutter zero-copy streaming on a real desktop; 1 Gbps probe clean (625 MB/5 s, send_dropped=0). Two physical-NVIDIA gotchas documented in GNOME Box Setup.
  • Encode|send thread split validated on real NIC (send_dropped=0 at 720p60 / 1080p120). (b295a5b)

Earlier (see roadmap + git log)

  • 1 Gbps data plane: batched sendmmsg/recvmmsg + microburst-cap paced send thread.
  • Boot appliance: headless KDE session + host systemd units (no login).
  • Speed test + settable bitrate: negotiation + bandwidth probe (host side).
  • DualSense UHID + haptics; gamepads live; mic uplink; AV1 + surround (unit/live-capture tested).

In flight / next

See the Roadmap for the ordered list. Near-term:

  • True glass-to-glass: Apple client present-stamp (decode→present) + host render→capture term.
  • Apple stage-2 presenter (VTDecompressionSessionCAMetalLayer).
  • Mandatory PIN pairing + delegated pairing approval; concurrent sessions.
  • bazzite kept up to date (currently offline; one rebuild behind).