docs: record capture sink recovery checkpoint

This commit is contained in:
2026-08-21 17:01:05 -04:00
parent 61960eb76f
commit 30a460420a
2 changed files with 35 additions and 11 deletions
+24 -7
View File
@@ -12,9 +12,11 @@ pure channel-planning prerequisite are built, validated, and committed locally i
(`781defc`).** The first bounded Phase 6 mutation slice is now built, validated and committed
locally in PixelPass (`98cde2c`): the hidden production path creates, retains, revokes and
crash-cleans exact-channel non-lingering fan-out links. The four versioned Phase 6 status events
are built, validated and committed locally in PixelPass (`5a65f50`). Sink-replacement recovery,
plus phases 79, are not built — nothing released to date changes the feature's user-visible
behaviour. **Phase 6 remains the current front.**
are built, validated and committed locally in PixelPass (`5a65f50`). Capture-sink replacement
and successful exact-channel relinking are built, validated and committed locally in PixelPass
(`d09ee9b`). The remaining Phase 6 matrix rows, plus phases 79, are not built — nothing
released to date changes the feature's user-visible behaviour. **Phase 6 remains the current
front.**
**Date:** 2026-07-21 (v4); status line refreshed 2026-08-21
**Design of record:** [`screenshare-audio-exclusion-plan.md`](screenshare-audio-exclusion-plan.md) v3.8, round 11.
**Scope:** *ordering, gates and acceptance criteria only.*
@@ -698,10 +700,25 @@ ancestry becoming unsafe.
> is queued only after owned links are dropped. Full PixelPass: 330 passed, 0 failed, 10 ignored;
> strict all-target Clippy, both serialized Phase 6 live gates and `pixelpass --doctor` pass.
>
> This does **not** complete Phase 6. Actual capture-sink replacement/relink recovery and the
> remaining failure-matrix rows are still open. The public mode selector remains Phase 7 and
> PeerSpeak parsing/UI integration remains Phase 8. The last committed PixelPass checkpoint is
> `5a65f50`.
> **Capture-sink replacement slice, committed locally as `d09ee9b`.** The
> connection owner now recreates an unexpectedly removed non-lingering sink under the stable
> Pulse name but with a fresh exact serial. A narrow identity channel hands that serial to the
> fan-out observer, whose own main-loop command immediately reconciles its coherent snapshot:
> stale proxies are dropped before new links are created, and the stream returns to `Captured`
> only after every replacement channel is `ACTIVE`. The observer treats only PipeWire's
> asynchronous `-ENOENT` for a resource lost during ordinary graph churn as recoverable; every
> other Core error remains fatal.
>
> The pure recovery gate proves both stale links are dropped and two replacement links activate.
> A live owner-only gate destroys the sink and observes a fresh serial. The real hidden host gate
> destroys an actively linked sink, observes a new sink serial and two fresh `ACTIVE` links,
> proves both old link serials are absent, and leaves no residue. All three serialized Phase 6
> live gates pass together. Full PixelPass: 332 passed, 0 failed, 12 ignored; strict all-target
> Clippy, formatting, `git diff --check`, and `pixelpass --doctor` pass.
>
> This does **not** complete Phase 6. The remaining failure-matrix rows are still open. The public
> mode selector remains Phase 7 and PeerSpeak parsing/UI integration remains Phase 8. The last
> committed PixelPass checkpoint is `d09ee9b`.
Failure ⇒ report the stream unsupported. **Never** fall back to the default monitor — and after
0d that fallback is unconstructible in this mode, by either path.