MechaCat02
ccd3644aa4
feat(shared-queues): group-keyed queue store + enqueue service + SDK (D3.1)
The producer side of shared durable queues:
- migration 0065 group_queue_messages (mirrors 0034, keyed by (group_id,
collection); CASCADE on group delete).
- GroupQueueRepo/PostgresGroupQueueRepo: enqueue + the competing-consumer
claim (FOR UPDATE SKIP LOCKED) + ack/nack/drop_exhausted/reclaim/depth.
- GroupQueueService trait (shared) + GroupQueueServiceImpl: resolve owning
group (kind='queue') from cx.app_id's chain, require editor+
(GroupQueueEnqueue, fails closed on anon), size-cap, enqueue.
- SDK: `queue::shared_collection("name")` -> GroupQueueHandle with
`.enqueue(msg[, opts])` / `.depth()` / `.depth_pending()`; wired through
Services + the picloud binary.
- authz: Capability::GroupQueueEnqueue(GroupId), editor+ / script:write.
Deterministic test proves competing consumers claim each message exactly
once. Consumption wiring (materialized consumers + dispatcher branch) lands
in D3.2.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-02 22:08:21 +02:00
..
2026-06-07 20:51:20 +02:00
2026-06-07 19:54:37 +02:00
2026-05-30 18:43:03 +02:00
2026-06-07 20:02:19 +02:00
2026-06-30 08:04:30 +02:00
2026-06-07 20:02:19 +02:00
2026-06-30 19:46:39 +02:00
2026-06-03 20:23:18 +02:00
2026-06-26 07:17:33 +02:00
2026-06-29 22:26:43 +02:00
2026-06-24 20:59:23 +02:00
2026-07-02 21:48:59 +02:00
2026-07-02 22:08:21 +02:00
2026-06-07 11:02:22 +02:00
2026-06-07 20:02:19 +02:00
2026-06-13 09:59:24 +02:00
2026-06-24 20:59:23 +02:00