Skip to main content
← Back to list
01Issue
FeatureShippedSwamp CLIPublic
Assigneeszack

Relationships

#3210 Signal a wait by workflow and key

Opened by zack · 10/9/2026· Shipped 10/9/2026

Problem

Part 2 of 6 of keyed signal waits. After swamp-club#3209 a wait can declare a key and one open wait holds it, but a signal still has to name the wait ID. A signaler that knows the workflow and the key in advance still has to look the ID up for every run.

Proposal

  • swamp workflow signal accepts a workflow and a key in place of a wait ID (proposed: --workflow <name> --key <key>). Exactly one address form is given.
  • The use case (src/libswamp/workflows/signal.ts) resolves the workflow and key to the wait that holds the key, then runs the existing acceptance unchanged: the same decideSignal, the same write-once outcome, the same refusals. It still takes no run claim and never writes a run record.
  • The wait ID stays the identity of a wait. A key resolves to an ID before anything is decided, and the result names the wait ID that took the signal. The sentence "a signal names the wait ID and nothing else" in design/primitives/workflows.md is revised to say so.
  • A key the workflow does not declare, or a workflow that does not exist, is refused as not found.
  • A declared key with no open wait is refused with its own refusal kind (proposed: no_open_wait) and nothing is stored. Holding such a signal is part 4.
  • If the holder is settled between resolving and delivering, the caller gets the existing refusal for what is stored. The signal is not moved on to another wait.
  • A holder whose registration is missing or cannot be read is handled as a wait ID in that state is today, since the claim names the wait ID.
  • The CLI's log and JSON output carry the key beside the wait ID and the receipt.

Open decisions

  1. The flag names, and whether the workflow may be given by ID as well as by name.

Acceptance criteria

  • A signal by key reaches the holder, and after a resume the step's outputs are the same as for a signal by ID: the payload and the receipt.
  • A payload the schema refuses is refused with its errors and the wait stays open.
  • No open wait under a declared key: refused as such, nothing stored.
  • An undeclared key or an unknown workflow: not found.
  • Signalling by wait ID is unchanged.

Tests

  • Unit tests for resolving a key to its holder.
  • Integration tests in integration/workflow_signal_wait_test.ts: a signal by key then a resume, each refusal, and a holder settled between resolving and delivering.
  • integration/signal_wait_records_rules_test.ts holds the by-key path to the rule that a signal never writes a run record.

Depends on

swamp-club#3209.

References

swamp-club#3093, the Signalling paragraphs of the Wait for Signal section in design/primitives/workflows.md.

02Bog Flow
✓OPEN✓TRIAGED✓IN PROGRESS✓SHIPPED+ 1 MOREASSIGNED+ 5 MOREREVIEW+ 11 MOREPR_MERGED+ 2 MORESESSION_SUMMARIZED

Shipped

10/9/2026, 6:13:08 PM

Click a lifecycle step above to view its details.

03Sludge Pulse
zack assigned zack10/9/2026, 5:09:56 PM

Sign in to post a ripple.