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-05-23 00:00:36 +02:00
2026-05-23 16:26:12 +02:00
2026-05-23 18:18:16 +02:00
2026-05-25 19:30:25 +02:00
2026-05-25 21:03:05 +02:00
2026-05-26 21:33:40 +02:00
2026-06-01 21:29:59 +02:00
2026-06-01 21:46:45 +02:00
2026-06-01 21:46:45 +02:00
2026-06-01 21:46:45 +02:00
2026-06-01 21:46:45 +02:00
2026-06-01 22:12:55 +02:00
2026-06-02 19:54:56 +02:00
2026-06-02 19:54:56 +02:00
2026-06-02 22:04:21 +02:00
2026-06-02 22:04:21 +02:00
2026-06-03 20:23:18 +02:00
2026-06-03 21:18:17 +02:00
2026-06-03 21:18:17 +02:00
2026-06-03 21:37:06 +02:00
2026-06-04 20:18:50 +02:00
2026-06-04 20:18:50 +02:00
2026-06-04 21:37:17 +02:00
2026-06-04 22:24:35 +02:00
2026-06-04 22:33:23 +02:00
2026-06-05 23:15:47 +02:00
2026-06-05 23:17:24 +02:00
2026-06-06 12:04:09 +02:00
2026-06-06 12:06:47 +02:00
2026-06-06 12:10:32 +02:00
2026-06-06 12:13:35 +02:00
2026-06-06 14:56:27 +02:00
2026-06-06 15:00:47 +02:00
2026-06-06 19:00:58 +02:00
2026-06-06 19:00:58 +02:00
2026-06-07 20:44:37 +02:00
2026-06-07 20:44:56 +02:00
2026-06-07 20:45:16 +02:00
2026-06-07 20:45:34 +02:00
2026-06-10 21:50:58 +02:00
2026-06-10 21:50:58 +02:00
2026-06-12 17:15:09 +02:00
2026-06-13 15:01:04 +02:00
2026-06-13 15:01:04 +02:00
2026-06-23 19:36:40 +02:00
2026-06-23 21:09:22 +02:00
2026-06-24 19:58:48 +02:00
2026-06-24 20:43:16 +02:00
2026-06-24 21:48:33 +02:00
2026-06-25 19:53:05 +02:00
2026-06-29 20:02:22 +02:00
2026-06-29 22:26:43 +02:00
2026-06-29 21:30:42 +02:00
2026-06-30 07:33:39 +02:00
2026-06-30 19:35:34 +02:00
2026-06-30 20:20:21 +02:00
2026-06-30 21:25:22 +02:00
2026-07-01 07:20:46 +02:00
2026-07-01 19:12:34 +02:00
2026-07-01 20:00:44 +02:00
2026-07-01 20:17:01 +02:00
2026-07-01 21:34:14 +02:00
2026-07-01 21:54:34 +02:00
2026-07-02 21:32:41 +02:00
2026-07-02 22:08:21 +02:00