From 106394bef2cd3835e4e2014b631d0315c449fc76 Mon Sep 17 00:00:00 2001 From: MechaCat02 Date: Sun, 7 Jun 2026 10:49:33 +0200 Subject: [PATCH] chore(v1.1.9): re-bless schema snapshot (0034 + 0035 delta) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Re-blessed via: DATABASE_URL=postgres://picloud:picloud@localhost:15432/picloud \ BLESS=1 cargo test -p picloud-manager-core --test schema_snapshot \ -- --include-ignored Delta matches the plan exactly — no unrelated drift: - new table queue_messages (id, app_id, queue_name, payload, enqueued_at, deliver_after, claim_token, claimed_at, attempt, max_attempts, enqueued_by_principal) - new table queue_trigger_details (trigger_id, queue_name, visibility_timeout_secs, last_fired_at) - 3 new indexes on queue_messages: idx_queue_messages_dispatch (partial WHERE claim_token IS NULL), idx_queue_messages_claimed (partial WHERE claim_token IS NOT NULL), idx_queue_messages_app_queue - 1 new index on queue_trigger_details: idx_queue_trigger_details_queue_name - widened triggers.kind CHECK to admit 'queue' - widened outbox.source_kind CHECK to admit 'invoke' - migrations 0034 + 0035 entries in the migrations log - FK + PK declarations for both new tables Migration test (crates/manager-core/tests/migration_queue_messages.rs) verifies the same shape via information_schema introspection — 4 tests, all pass against the same DATABASE_URL. Co-Authored-By: Claude Opus 4.7 (1M context) --- crates/manager-core/tests/expected_schema.txt | 43 ++++++++++++++++++- 1 file changed, 41 insertions(+), 2 deletions(-) diff --git a/crates/manager-core/tests/expected_schema.txt b/crates/manager-core/tests/expected_schema.txt index 4312337..ad16f93 100644 --- a/crates/manager-core/tests/expected_schema.txt +++ b/crates/manager-core/tests/expected_schema.txt @@ -244,6 +244,25 @@ table: pubsub_trigger_details trigger_id: uuid NOT NULL topic_pattern: text NOT NULL +table: queue_messages + id: uuid NOT NULL default=gen_random_uuid() + app_id: uuid NOT NULL + queue_name: text NOT NULL + payload: jsonb NOT NULL + enqueued_at: timestamp with time zone NOT NULL default=now() + deliver_after: timestamp with time zone NULL + claim_token: uuid NULL + claimed_at: timestamp with time zone NULL + attempt: integer NOT NULL default=0 + max_attempts: integer NOT NULL default=3 + enqueued_by_principal: uuid NULL + +table: queue_trigger_details + trigger_id: uuid NOT NULL + queue_name: text NOT NULL + visibility_timeout_secs: integer NOT NULL default=30 + last_fired_at: timestamp with time zone NULL + table: routes id: uuid NOT NULL default=gen_random_uuid() script_id: uuid NOT NULL @@ -425,6 +444,16 @@ indexes on outbox: indexes on pubsub_trigger_details: pubsub_trigger_details_pkey: public.pubsub_trigger_details USING btree (trigger_id) +indexes on queue_messages: + idx_queue_messages_app_queue: public.queue_messages USING btree (app_id, queue_name) + idx_queue_messages_claimed: public.queue_messages USING btree (claimed_at) WHERE (claim_token IS NOT NULL) + idx_queue_messages_dispatch: public.queue_messages USING btree (app_id, queue_name, enqueued_at) WHERE (claim_token IS NULL) + queue_messages_pkey: public.queue_messages USING btree (id) + +indexes on queue_trigger_details: + idx_queue_trigger_details_queue_name: public.queue_trigger_details USING btree (queue_name) + queue_trigger_details_pkey: public.queue_trigger_details USING btree (trigger_id) + indexes on routes: routes_app_id_idx: public.routes USING btree (app_id) routes_lookup_idx: public.routes USING btree (host_kind, host) @@ -577,7 +606,7 @@ constraints on kv_trigger_details: [PRIMARY KEY] kv_trigger_details_pkey: PRIMARY KEY (trigger_id) constraints on outbox: - [CHECK] outbox_source_kind_check: CHECK ((source_kind = ANY (ARRAY['http'::text, 'kv'::text, 'dead_letter'::text, 'docs'::text, 'cron'::text, 'files'::text, 'pubsub'::text, 'email'::text]))) + [CHECK] outbox_source_kind_check: CHECK ((source_kind = ANY (ARRAY['http'::text, 'kv'::text, 'dead_letter'::text, 'docs'::text, 'cron'::text, 'files'::text, 'pubsub'::text, 'email'::text, 'invoke'::text]))) [FOREIGN KEY] outbox_app_id_fkey: FOREIGN KEY (app_id) REFERENCES apps(id) ON DELETE CASCADE [PRIMARY KEY] outbox_pkey: PRIMARY KEY (id) @@ -585,6 +614,14 @@ constraints on pubsub_trigger_details: [FOREIGN KEY] pubsub_trigger_details_trigger_id_fkey: FOREIGN KEY (trigger_id) REFERENCES triggers(id) ON DELETE CASCADE [PRIMARY KEY] pubsub_trigger_details_pkey: PRIMARY KEY (trigger_id) +constraints on queue_messages: + [FOREIGN KEY] queue_messages_app_id_fkey: FOREIGN KEY (app_id) REFERENCES apps(id) ON DELETE CASCADE + [PRIMARY KEY] queue_messages_pkey: PRIMARY KEY (id) + +constraints on queue_trigger_details: + [FOREIGN KEY] queue_trigger_details_trigger_id_fkey: FOREIGN KEY (trigger_id) REFERENCES triggers(id) ON DELETE CASCADE + [PRIMARY KEY] queue_trigger_details_pkey: PRIMARY KEY (trigger_id) + constraints on routes: [CHECK] routes_dispatch_mode_check: CHECK ((dispatch_mode = ANY (ARRAY['sync'::text, 'async'::text]))) [CHECK] routes_host_kind_check: CHECK ((host_kind = ANY (ARRAY['any'::text, 'strict'::text, 'wildcard'::text]))) @@ -618,7 +655,7 @@ constraints on topics: constraints on triggers: [CHECK] triggers_dispatch_mode_check: CHECK ((dispatch_mode = ANY (ARRAY['sync'::text, 'async'::text]))) - [CHECK] triggers_kind_check: CHECK ((kind = ANY (ARRAY['kv'::text, 'dead_letter'::text, 'docs'::text, 'cron'::text, 'files'::text, 'pubsub'::text, 'email'::text]))) + [CHECK] triggers_kind_check: CHECK ((kind = ANY (ARRAY['kv'::text, 'dead_letter'::text, 'docs'::text, 'cron'::text, 'files'::text, 'pubsub'::text, 'email'::text, 'queue'::text]))) [CHECK] triggers_retry_backoff_check: CHECK ((retry_backoff = ANY (ARRAY['exponential'::text, 'linear'::text, 'constant'::text]))) [FOREIGN KEY] triggers_app_id_fkey: FOREIGN KEY (app_id) REFERENCES apps(id) ON DELETE CASCADE [FOREIGN KEY] triggers_registered_by_principal_fkey: FOREIGN KEY (registered_by_principal) REFERENCES admin_users(id) ON DELETE CASCADE @@ -659,3 +696,5 @@ constraints on triggers: 0031: app user roles 0032: drop plaintext realtime signing key 0033: topics auth mode session + 0034: queue messages + 0035: queue triggers