# Screenshare audio exclusion — ownership tagging wire contract. # # peerspeak PRODUCES these carriers on every audio node it owns; pixelpass # CONSUMES them as the primary taint root of the exclusion engine. Neither # repo depends on the other, so this file is the contract: it is committed # byte-identical in both, and each repo has a test that asserts its own named # constants (and, on the producer side, the environment a real child Command # would carry) match these values exactly. # # peerspeak/tests/fixtures/ownership-tag-contract.txt # pixelpass/tests/fixtures/ownership-tag-contract.txt # # Pinned by peerspeak docs/screenshare-audio-exclusion-impl-plan.md §3 and # docs/screenshare-audio-exclusion-plan.md §5.1 (v3.5). Changing a value here # is a cross-repo breaking change: both repos must land in the same session, # and the phase 5 matrix must be re-run. # # Two carriers, matched as a UNION — a node is peerspeak-owned if EITHER # matches. Round 8 added the second because a property is invisible to the # PipeWire registry `global` event and readable only via a node bind, so the # primary taint root must not rest on one observation mechanism alone. # Carrier 1 — a node property. The consumer treats any value other than # "false"/"0" as truthy, which is the fail-closed direction; the producer # always emits exactly this value. prop_key=peerspeak.owned prop_value=1 # Carrier 2 — a `node.name` prefix, announced by the registry without a bind. # `node.description` is deliberately NOT touched, so mixers still show "mpv". # Only the prefix is matched; the rest of the name is for diagnostics. node_name_prefix=peerspeak_owned_ node_name_format=peerspeak_owned__ node_name_example=peerspeak_owned_mpv_31284