> /projects/signal-desk

Signal Desk, a pipeline that shows its work

what it is

A signal-to-outreach pipeline where every decision can be inspected, replayed, or refused. An inbound buying signal arrives, and eight stages enrich it, score it, route it, draft to it, gate the draft, and park the survivor for a human. Every verdict lands in a tamper-evident ledger you can replay byte for byte.

It never sends mail. The pipeline ends at an approval queue, and an approval binds to a hash of the exact draft text a person read. Edit one character and the old approval covers nothing.

the problem

Somewhere in your company there is an AI-built outreach system that works in the demo and has never touched a customer. Nobody can say out loud why they trust what it wrote, so the leader holding the risk quietly declines to find out.

Trust needs a trail. If you cannot ask of any lead what happened and why, with the evidence each stage stood on, the system stays a demo. Signal Desk exists to be that trail, and to prove the gates work by showing them refuse.

run it

The demo needs Node 20 or newer. No API key, no account, no network call, and identical output on any machine.

  • git clone https://github.com/derrtaderr/signal-desk
  • cd signal-desk && npm test
  • node bin/signal-desk.mjs run
what refuses, and why

Fourteen fixture signals go in. One reaches handoff, one parks for a human, and twelve are refused, each naming the rule that stopped it. The corpus ships one hostile fixture per safeguard on purpose, so the demo shows the gates working instead of asserting that they exist.

  • Ingest refuses malformed payloads, replayed signals, and the same person re-signalled under a new signal id
  • Enrichment refuses a signal whose evidence names a different human, a source whose record is eleven months stale, and a company no source can cite
  • Routing refuses accounts below a deterministic floor, with the reason attached
  • The gate refuses PII in a draft, prose claims no citation supports, prompt injection smuggled through a scraped field, and a draft the fail-closed LLM rubric rejects
  • The queue refuses whatever a human already said no to, and holds everything else until a person decides
the review method

Every milestone merged through an adversarial reviewer with the power to refuse, an independent agent walking the workflow the way a first-time user would. That walk caught what 520 green tests missed, and the pull requests on the repo carry the full review records.

The reviewer contract is public at github.com/derrtaderr/ship-check, and the full story of what it caught, credential leak included, is at derr.ai/blog/green-tests-zero-trust.

honest boundaries

The live path has made exactly one real provider call, the deliberately small one that caught a deprecated parameter the docs still promised. Everything else about live mode is proven against fakes.

The refusal ratio in the demo comes from fixtures I authored, and nobody outside my machine has run the pipeline yet. The refusal mechanism is the part with receipts. The claims about scale are still being earned.