bloodbank-integration
Installation
SKILL.md
Bloodbank Integration
Route here when a service or harness needs to emit or consume events on the 33GOD bloodbank bus. The bus is the only sanctioned inter-service channel — never bypass it with direct calls.
Operating Principles
- Bus is canon. All inter-service traffic flows through bloodbank. Direct service-to-service calls are an anti-pattern enforced repo-wide.
- Schema first. Every event has a JSON Schema under
bloodbank/schemas/. Build envelopes through the canonical builder/validator path, and keep manual envelope examples derivable from the schema and naming contract. - NATS is the current bus. v3 (Dapr + NATS JetStream + CloudEvents 1.0) is the live target. v2 (RabbitMQ topic exchange) still runs but is migration-only territory.
- Facts and intent take different lanes. Events are immutable facts on
bloodbank.evt.*; commands are targeted intent onbloodbank.cmd.*. Candystore projects events, not commands. A command consumer emits lifecycle events so execution still becomes durable history. - Subject convention is load-bearing. CloudEvents
typeisbloodbank.<domain>.<entity>.<action>. NATS subjects arebloodbank.evt.<domain>.<entity>.<action>for events,bloodbank.cmd.<domain>.<entity>.<action>for commands, andbloodbank.rpy.<domain>.<entity>.<action>for replies. The catch-allevent-toasterlistens onbloodbank.evt.>. - Plane enters through one provenance boundary. Both self-hosted Plane workspaces post over HTTPS to the active
Plane → Bloodbankn8n workflow. The custom node selects the 1Password secret by payloadwebhook_id, verifiesX-Plane-Signatureover the raw body, resolves the board through the Hermes registry, normalizes the provider action, and publishes NATS-direct. Port8477and Bloodbank HTTP/eventare not active Plane paths. - Agent hooks use one publisher. All CLI lifecycle hooks call
~/.agents/hooks/bloodbank/publish.py --client <agent> --hook <native-event>. Client-specific prep lives inservices/agent-hooks/clients/<agent>.py; per-clientpublish.pyfiles are wrappers. - Fail open at the boundary. Hooks must never block the host agent. Producer libs should swallow publish failures by default.
Triage Table
Match the user's intent against the signals on the left; load the cited file first.