Problem
Awa's positioning is "Postgres job queue for Rust and Python", but a very common fleet shape is a third language on the producer side only — a Node/Go/JVM service enqueueing work for Rust/Python workers. Awa is closer to supporting this than the docs admit:
What's missing is the decision and contract, not the mechanism: today insert_job_compat is an internal detail that any migration may change without notice.
Proposal
Decide whether the SQL enqueue surface is a stable public API. If yes:
- Document the contract: function signature, parameter semantics, returned row shape, error codes (e.g. unique-conflict), and the NOTIFY wakeup behaviour producers get for free.
- Version it: tie the contract to the migration version table; document that breaking changes get a new function name or an explicit major-version note.
- Cross-language uniqueness:
unique_key is a BLAKE3 hash computed client-side (ADR-002). A non-Rust producer needs the exact derivation (input canonicalization, what by_args/by_queue fold in) documented, or uniqueness silently diverges between languages.
- Ordering keys: same for
ordering_key → shard derivation (ADR-025) if external producers should compose with sharded FIFO queues.
- Contract tests: a SQL-level test (psql fixture or pgTAP) that pins the public surface so a migration that breaks it fails CI, plus a docs example in one non-supported language (plain
node-postgres or pgx snippet) to prove the path.
Explicitly out of scope: official client libraries for other languages. The contract makes external producers possible and safe; maintaining idiomatic clients stays out of the core scope.
Refs: ADR-002, ADR-016, ADR-025, #314, docs/positioning.md.
Problem
Awa's positioning is "Postgres job queue for Rust and Python", but a very common fleet shape is a third language on the producer side only — a Node/Go/JVM service enqueueing work for Rust/Python workers. Awa is closer to supporting this than the docs admit:
awa.insert_job_compat(...)is a complete SQL enqueue entry point (kind, queue, args, priority, run_at, metadata, tags, unique_key, unique_states).What's missing is the decision and contract, not the mechanism: today
insert_job_compatis an internal detail that any migration may change without notice.Proposal
Decide whether the SQL enqueue surface is a stable public API. If yes:
unique_keyis a BLAKE3 hash computed client-side (ADR-002). A non-Rust producer needs the exact derivation (input canonicalization, whatby_args/by_queuefold in) documented, or uniqueness silently diverges between languages.ordering_key→ shard derivation (ADR-025) if external producers should compose with sharded FIFO queues.node-postgresorpgxsnippet) to prove the path.Explicitly out of scope: official client libraries for other languages. The contract makes external producers possible and safe; maintaining idiomatic clients stays out of the core scope.
Refs: ADR-002, ADR-016, ADR-025, #314,
docs/positioning.md.