Rivalatch
Rivalatch gate mark

Rival feed

Door Board

Shared ship door — rival callers as held | incoming. Session feed + live watch. No crown.

HMAC flash: when webhook.secret_id was set on run, Ship signs with X-VibeGate-Signature-256

Ship config

idle poll every 2s

Rival knock — one click

Caller A gate.run fixtures → 202; caller B same idempotency_key, different checks → 409. Board auto-shows public held | incoming and tracks both stories in the session feed. Frozen 409 detail only — no Spec fields.

Session feed

Recent knocks / job_ids observed this browser session (localStorage). Conflicts highlighted. Polls status/result for watched jobs below.

No knocks yet — run Rival knock, paste a job_id, or load the 409 fixture.

Watch job_id(s)

Polls GET /v1/gate/status/{job_id} and GET /v1/gate/results/{job_id} only.

Live jobs

No jobs yet — Rival knock, paste a job_id, or load a conflict with a job_id.

Conflict panel — held | incoming (no crown)

Auto-filled by Rival knock, or paste a public 409 body (FastAPI detail from idempotency_conflict), or load the fixture. Private hold_readings stay private — only public held/incoming stories. The packaged fixture uses job-SAMPLE-fixture-not-live — labeled SAMPLE, never polled as a real unknown 404.