Milestone 2

This commit is contained in:
Joey Yakimowich-Payne 2026-01-29 17:24:51 -07:00
commit 866f0419ad
19 changed files with 2006 additions and 23 deletions

53
docs/milestone-0.md Normal file
View file

@ -0,0 +1,53 @@
# Milestone 0 - Foundation
## Build system
- CMake 3.20+
- C++17
- pkg-config
- libpipewire-0.3 development files
## Public API surface
- Namespace: warppipe
- Core types: Status, StatusCode, Result<T>
- Threading: ThreadingMode (caller thread or managed thread loop)
- Primary entry: Client
- Handles: NodeId, PortId, LinkId, RuleId
- Data shapes: NodeInfo, PortInfo, VirtualSink, VirtualSource, Link, RouteRule
## Error model
- StatusCode enum with explicit categories (ok, invalid argument, not found, unavailable, permission denied, timeout, internal, not implemented)
- Status carries code + message; Result<T> pairs Status with value
## Threading model
- Default: managed thread loop owned by Client
- Optional: caller thread loop for embedding in existing event loop
## Performance budget and metrics
- Target: 200 create/modify/delete operations in under 1 second on a warm PipeWire connection
- Target per operation: median < 2 ms, p95 < 10 ms for create or delete
- Track metrics for: create virtual sink/source, create link, delete link
## Ephemeral source identity strategy
- Match priority: application.name, application.process.binary, media.role, node.name
- Fallback: client properties and media class
- Avoid serial IDs or object IDs for persistence
- Rule matching is stable across restarts and reconnects
## Tests to add (Milestone 0)
- Missing PipeWire daemon: Client::Create returns StatusCode::kUnavailable
- Missing link-factory module: CreateLink returns StatusCode::kUnavailable
- Missing metadata module: SaveConfig or policy init returns StatusCode::kUnavailable
- Invalid media class in virtual node creation: returns StatusCode::kInvalidArgument
## Performance tests (Milestone 0)
- Microbenchmark harness that measures connect -> create N -> destroy N
- Baseline: N=200 with subsecond wall time on a warm PipeWire connection
- Record median and p95 latency per operation