Fable 5 Review: Node Routing Policy v2

2026-07-09 · claude-fable-5 · high effort · read-only repository-grounded review

Verdict

The Worker/Durable Object direction is correct, but v2 was not implementation-ready. It removed the peer-forward double-answer path while leaving authority failure, carrier timing, answer fencing, crash recovery, persistent mode, candidate fallback, and drain behavior unresolved.

Disposition and Current State

The normative Node Routing Policy v3 incorporates the review decisions. Raw-body Telnyx signature/timestamp verification was implemented at 3450bcab, and the L5 key/configuration gate was implemented at 6b531686.

These commits are not deployed. The live runtime remains clean property-flow SHA 9b4082d while TELNYX_PUBLIC_KEY is provisioned. The Worker/Durable Object engine, durable ownership ledger, persisted policy, automatic fallback, and routing dashboard remain open implementation work. /routing-help.html is a non-operative preview.

Highest-Severity Findings

PriorityFindingV3 decision
P0Public webhook can answer/hang up without verifying Telnyx.Ship signature/timestamp verification and durable dedup as independent Phase 0.
P1DO outage had no degraded mode.Retryable 503; never bypass ownership.
P1Retry/failover timing was unmeasured.Same Worker authority for both URLs; DO redrive; carrier fixture before constants.
P1Late old-node delivery could answer after reassignment.Expiring assertion, ownership epoch, and DO answer fence.
P1Crash after dedup insert could suppress all retries.Recoverable event-processing state machine.
P1Volatile MODE defaults stable.Persistent state; missing/invalid boots drained.
P1Candidate could receive arbitrary fallback traffic.Explicit canaries only unless fallback-approved.
P1Drain kills active media.Soft drain eligibility first; isolate only at zero active calls.

Additional Corrections

Build Order

  1. Secure the current ingress boundary and measure carrier behavior.
  2. Fix persistent node state, identity, drain, registry, and keys.
  3. Build clean deployment and node-scoped L5.
  4. Build fenced Worker/DO ownership and rollback.
  5. Add policy UI, then run explicit-GO live drills.