docs(positioning): align README + ADRs + specs to Pindrop red lines (#28)
Some checks failed
CI / fmt (push) Successful in 1m11s
CI / clippy (push) Successful in 1m48s
CI / test (1.85) (push) Successful in 7m29s
CI / test (stable) (push) Successful in 9m7s
CI / deny (push) Successful in 1m48s
CI / sim-bench (stable) (push) Successful in 10m49s
CI / twilio-live (manual only) (push) Has been skipped
CI / image-build (4 images) (push) Failing after 15m23s
CI / smoke (all-in-one TLS sim call) (push) Has been cancelled
CI / smoke (T2 compose four-service) (push) Has been cancelled
CI / smoke (caddy reload during live call, zero drops) (push) Has been cancelled
Some checks failed
CI / fmt (push) Successful in 1m11s
CI / clippy (push) Successful in 1m48s
CI / test (1.85) (push) Successful in 7m29s
CI / test (stable) (push) Successful in 9m7s
CI / deny (push) Successful in 1m48s
CI / sim-bench (stable) (push) Successful in 10m49s
CI / twilio-live (manual only) (push) Has been skipped
CI / image-build (4 images) (push) Failing after 15m23s
CI / smoke (all-in-one TLS sim call) (push) Has been cancelled
CI / smoke (T2 compose four-service) (push) Has been cancelled
CI / smoke (caddy reload during live call, zero drops) (push) Has been cancelled
Co-authored-by: Aaron D. Lee <himself@adlee.work> Co-committed-by: Aaron D. Lee <himself@adlee.work>
This commit was merged in pull request #28.
This commit is contained in:
@@ -8,7 +8,7 @@ the goal, not the PBX**. Where Asterisk matched composability through a 1.2M-LOC
|
||||
modules, rutster matches it through:
|
||||
|
||||
- a **small hardened core** owning the per-call vertical end-to-end (media + signaling + call model
|
||||
+ reflexes + spend gate) as one deterministic, auditable trust domain,
|
||||
+ reflexes + spend guardrails) as one deterministic, auditable trust domain,
|
||||
- a **clean audio tap** as the external brain's extension point (safely extensible by people you
|
||||
don't fully trust, because the brain is out-of-process and the core authoritatively controls
|
||||
playout),
|
||||
@@ -28,7 +28,7 @@ carrier SIP trunk ─► media termination (RTP/SRTP + local real-time reflexes)
|
||||
│
|
||||
├─► clean audio tap ──► external agent brain (STT/LLM/TTS)
|
||||
│
|
||||
└─► in-boundary spend / abuse gate
|
||||
└─► in-boundary spend guardrails
|
||||
```
|
||||
|
||||
**Horizontal platform** concerns are services *around* the core, independently scaled: number
|
||||
@@ -42,7 +42,7 @@ This **replaces the founding three-plane framing**:
|
||||
determinism + security + simplicity.
|
||||
- The **spend gate** and the **agent tap** — which founding docs externalized — are pulled **into**
|
||||
the boundary, because they are **constitutive** of the wedge (a runtime can't structurally enforce
|
||||
spend/abuse control or barge-in if the media is elsewhere).
|
||||
spend guardrails or barge-in if the media is elsewhere).
|
||||
- Neither monolith nor pure microservices: **fused where fusion buys the wedge; composable where
|
||||
independent scaling matters.** ([ADR-0002](adr/0002-north-star-and-fused-core.md))
|
||||
|
||||
@@ -55,8 +55,8 @@ the not-invented-here death-march (a from-scratch SIP stack was exactly that). T
|
||||
mechanical test an agent applies live in [ADR-0008](adr/0008-fob-and-green-zone.md).
|
||||
|
||||
- **FOB** — memory-safe Rust, owned, fuzzed, inside the trust boundary; a capability is admitted *only*
|
||||
if it is hot-path, security-constitutive, or genuinely differentiating: media termination, the
|
||||
real-time reflexes, the call model, the agent tap, the spend/abuse gate, the control API + the
|
||||
if it is hot-path, boundary-constitutive, or genuinely differentiating: media termination, the
|
||||
real-time reflexes, the call model, the agent tap, the spend gate, the control API + the
|
||||
state/bus trait. (It may *link* mature OSS for internals — libopus, `str0m` — as trusted vendored
|
||||
deps; the capability is still owned, the wire parser still Rust.)
|
||||
- **Green zone** — trusted, *actively-maintained* OSS/services reused **at arm's length** (own process /
|
||||
@@ -84,12 +84,19 @@ trusted, battle-tested OSS kept outside the boundary** — not an over-claim tha
|
||||
primitives (transfer/park/pickup, answer/originate); the ARI-modeled resource API surfaced as
|
||||
REST/gRPC + a WebSocket/SSE event stream. "The dialplan" disappears — replaced by declarative
|
||||
routing + external services reacting to call events (the ARI/Stasis model).
|
||||
- **In-boundary spend / abuse gate** — spend caps, pacing caps, deny-by-default routing,
|
||||
rate-limits, toll-fraud pattern detection. **Co-located with the tap + the provider
|
||||
- **In-boundary spend guardrails** — spend caps, pacing caps, deny-by-default routing,
|
||||
rate-limits, carrier-cost abuse prevention (unauthorized outbound calls, dialer pacing —
|
||||
**not** caller-side fraud detection; see below). **Co-located with the tap + the provider
|
||||
call-control client**: the brain never holds provider credentials, so every brain-initiated
|
||||
action passes the gate; pacing/half-duplex/playout are enforced over media the core terminates
|
||||
([ADR-0009](adr/0009-spend-gate-honest-rescope.md) — pair with provider-side caps for defense
|
||||
in depth).
|
||||
|
||||
**Voice-security scope boundary:** caller authentication, fraud detection, voice biometrics,
|
||||
and spoof / liveness / deepfake detection are **deliberately out of scope** — rutster is
|
||||
routing + orchestration infrastructure, designed to integrate with dedicated voice-security
|
||||
vendors via the agent tap (they sit alongside as a tap consumer) rather than compete with them.
|
||||
See README "What it is / isn't."
|
||||
- **Audiohook primitive** — tap/inject/volume behind recording, ChanSpy/whisper/barge, and
|
||||
human-agent escalation (rung 2: an agent takes over a call via WebRTC + audiohook handoff).
|
||||
|
||||
|
||||
Reference in New Issue
Block a user