geneva_drive 0.5.0 → 0.7.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (60) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +14 -1
  3. data/MANUAL.md +449 -11
  4. data/README.md +5 -1
  5. data/lib/generators/geneva_drive/install/install_generator.rb +20 -0
  6. data/lib/generators/geneva_drive/install/templates/add_metadata_to_workflows.rb +17 -0
  7. data/lib/generators/geneva_drive/install/templates/add_resumable_step_support.rb +29 -0
  8. data/lib/generators/geneva_drive/install/templates/add_signals_support.rb +94 -0
  9. data/lib/generators/geneva_drive/install/templates/add_started_at_index_to_step_executions.rb +48 -0
  10. data/lib/generators/geneva_drive/install/templates/create_workflows_migration.rb +11 -0
  11. data/lib/generators/geneva_drive/install/templates/initializer.rb.tt +8 -0
  12. data/lib/geneva_drive/combined_exception_policy.rb +1 -1
  13. data/lib/geneva_drive/exception_policy.rb +36 -10
  14. data/lib/geneva_drive/executor.rb +352 -26
  15. data/lib/geneva_drive/flow_control.rb +87 -7
  16. data/lib/geneva_drive/iterable_step.rb +199 -0
  17. data/lib/geneva_drive/job_options.rb +70 -0
  18. data/lib/geneva_drive/jobs/housekeeping_job.rb +120 -7
  19. data/lib/geneva_drive/resumable_step_definition.rb +97 -0
  20. data/lib/geneva_drive/signal.rb +243 -0
  21. data/lib/geneva_drive/signal_matcher.rb +60 -0
  22. data/lib/geneva_drive/step_definition.rb +96 -2
  23. data/lib/geneva_drive/step_execution.rb +141 -2
  24. data/lib/geneva_drive/test_helpers.rb +212 -6
  25. data/lib/geneva_drive/version.rb +1 -1
  26. data/lib/geneva_drive/workflow/metadata_accessor.rb +85 -0
  27. data/lib/geneva_drive/workflow.rb +559 -43
  28. data/lib/geneva_drive.rb +37 -0
  29. data/test/dsl/signal_step_definition_test.rb +132 -0
  30. data/test/dsl/step_definition_test.rb +70 -0
  31. data/test/jobs/housekeeping_job_test.rb +119 -0
  32. data/test/jobs/housekeeping_signals_test.rb +198 -0
  33. data/test/jobs/perform_step_job_test.rb +25 -2
  34. data/test/migration_helpers_test.rb +1 -1
  35. data/test/test_helper.rb +4 -0
  36. data/test/test_helper_test.rb +281 -0
  37. data/test/workflow/cursor_size_limit_test.rb +75 -0
  38. data/test/workflow/instrumentation_test.rb +28 -0
  39. data/test/workflow/resumable_step_integration_test.rb +341 -0
  40. data/test/workflow/resumable_step_test.rb +615 -0
  41. data/test/workflow/resumable_without_migration_test.rb +103 -0
  42. data/test/workflow/signal_consumption_test.rb +397 -0
  43. data/test/workflow/signal_delivery_test.rb +255 -0
  44. data/test/workflow/signal_durability_test.rb +164 -0
  45. data/test/workflow/signal_rendezvous_test.rb +581 -0
  46. data/test/workflow/signals_without_migration_test.rb +97 -0
  47. data/test/workflow/workflow_test.rb +72 -1
  48. metadata +25 -15
  49. data/test/dummy/config/initializers/geneva_drive.rb +0 -44
  50. data/test/dummy/db/migrate/20260219212321_create_geneva_drive_workflows.rb +0 -74
  51. data/test/dummy/db/migrate/20260219212322_create_geneva_drive_step_executions.rb +0 -108
  52. data/test/dummy/db/migrate/20260219212323_add_finished_at_to_geneva_drive_step_executions.rb +0 -25
  53. data/test/dummy/db/migrate/20260219212324_add_error_class_name_to_geneva_drive_step_executions.rb +0 -7
  54. data/test/dummy/db/migrate/20260316100007_add_metadata_to_geneva_drive_step_executions.rb +0 -17
  55. data/test/dummy/db/migrate/20260327000000_allow_null_hero_on_geneva_drive_workflows.rb +0 -66
  56. data/test/dummy/db/schema.rb +0 -73
  57. data/test/dummy/log/development.log +0 -202
  58. data/test/dummy/log/test.log +0 -79471
  59. data/test/dummy/log/test.log.0 +0 -4
  60. data/test/dummy/tmp/local_secret.txt +0 -1
@@ -1,202 +0,0 @@
1
- Generating image variants require the image_processing gem. Please add `gem "image_processing", "~> 1.2"` to your Gemfile or set `config.active_storage.variant_processor = :disabled`.
2
-  (0.1ms) SELECT pg_try_advisory_lock(5953177287330319620) /*application='Dummy'*/
3
- ActiveRecord::SchemaMigration Load (2.2ms) SELECT "schema_migrations"."version" FROM "schema_migrations" ORDER BY "schema_migrations"."version" ASC /*application='Dummy'*/
4
- ActiveRecord::InternalMetadata Load (2.1ms) SELECT * FROM "ar_internal_metadata" WHERE "ar_internal_metadata"."key" = 'environment' ORDER BY "ar_internal_metadata"."key" ASC LIMIT 1 /*application='Dummy'*/
5
- Migrating to AddFinishedAtToGenevaDriveStepExecutions (20241217000003)
6
- TRANSACTION (0.1ms) BEGIN /*application='Dummy'*/
7
-  (5.1ms) ALTER TABLE "geneva_drive_step_executions" ADD "finished_at" timestamp(6) /*application='Dummy'*/
8
-  (3.8ms) CREATE INDEX "index_geneva_drive_step_executions_on_finished_at" ON "geneva_drive_step_executions" ("finished_at") /*application='Dummy'*/
9
-  (2.6ms) UPDATE geneva_drive_step_executions SET finished_at = COALESCE(completed_at, failed_at, canceled_at, skipped_at) WHERE finished_at IS NULL AND (completed_at IS NOT NULL OR failed_at IS NOT NULL OR canceled_at IS NOT NULL OR skipped_at IS NOT NULL) /*application='Dummy'*/
10
- ActiveRecord::SchemaMigration Create (0.2ms) INSERT INTO "schema_migrations" ("version") VALUES ('20241217000003') RETURNING "version" /*application='Dummy'*/
11
- TRANSACTION (0.3ms) COMMIT /*application='Dummy'*/
12
- Migrating to AddErrorClassNameToGenevaDriveStepExecutions (20241217000004)
13
- TRANSACTION (0.1ms) BEGIN /*application='Dummy'*/
14
-  (0.2ms) ALTER TABLE "geneva_drive_step_executions" ADD "error_class_name" character varying /*application='Dummy'*/
15
- ActiveRecord::SchemaMigration Create (0.1ms) INSERT INTO "schema_migrations" ("version") VALUES ('20241217000004') RETURNING "version" /*application='Dummy'*/
16
- TRANSACTION (0.2ms) COMMIT /*application='Dummy'*/
17
-  (0.1ms) SELECT pg_advisory_unlock(5953177287330319620) /*application='Dummy'*/
18
- ActiveRecord::SchemaMigration Load (0.1ms) SELECT "schema_migrations"."version" FROM "schema_migrations" ORDER BY "schema_migrations"."version" ASC /*application='Dummy'*/
19
- SQL (0.1ms) SET search_path TO public /*application='Dummy'*/
20
- SQL (0.1ms) SET search_path TO "$user", public /*application='Dummy'*/
21
- SQL (0.1ms) SET search_path TO public /*application='Dummy'*/
22
- SQL (0.1ms) SET search_path TO "$user", public /*application='Dummy'*/
23
- Generating image variants require the image_processing gem. Please add `gem "image_processing", "~> 1.2"` to your Gemfile or set `config.active_storage.variant_processor = :disabled`.
24
- ActiveRecord::SchemaMigration Load (0.9ms) SELECT "schema_migrations"."version" FROM "schema_migrations" ORDER BY "schema_migrations"."version" ASC /*application='Dummy'*/
25
- ActiveRecord::InternalMetadata Load (0.6ms) SELECT * FROM "ar_internal_metadata" WHERE "ar_internal_metadata"."key" = 'environment' ORDER BY "ar_internal_metadata"."key" ASC LIMIT 1 /*application='Dummy'*/
26
- ActiveRecord::SchemaMigration Load (0.1ms) SELECT "schema_migrations"."version" FROM "schema_migrations" ORDER BY "schema_migrations"."version" ASC /*application='Dummy'*/
27
- ActiveRecord::InternalMetadata Load (0.1ms) SELECT * FROM "ar_internal_metadata" WHERE "ar_internal_metadata"."key" = 'environment' ORDER BY "ar_internal_metadata"."key" ASC LIMIT 1 /*application='Dummy'*/
28
- ActiveRecord::SchemaMigration Load (0.1ms) SELECT "schema_migrations"."version" FROM "schema_migrations" ORDER BY "schema_migrations"."version" ASC /*application='Dummy'*/
29
- ActiveRecord::InternalMetadata Load (0.1ms) SELECT * FROM "ar_internal_metadata" WHERE "ar_internal_metadata"."key" = 'environment' ORDER BY "ar_internal_metadata"."key" ASC LIMIT 1 /*application='Dummy'*/
30
- SQL (0.1ms) SET search_path TO public /*application='Dummy'*/
31
-  (59.9ms) DROP DATABASE IF EXISTS "geneva_drive_development" /*application='Dummy'*/
32
- SQL (0.0ms) SET search_path TO public /*application='Dummy'*/
33
-  (24.9ms) DROP DATABASE IF EXISTS "geneva_drive_test" /*application='Dummy'*/
34
- SQL (0.0ms) SET search_path TO public /*application='Dummy'*/
35
-  (38.9ms) CREATE DATABASE "geneva_drive_development" ENCODING = 'unicode' /*application='Dummy'*/
36
- SQL (0.0ms) SET search_path TO public /*application='Dummy'*/
37
-  (36.7ms) CREATE DATABASE "geneva_drive_test" ENCODING = 'unicode' /*application='Dummy'*/
38
- SQL (6.3ms) CREATE EXTENSION IF NOT EXISTS "plpgsql" SCHEMA pg_catalog /*application='Dummy'*/
39
-  (0.1ms) DROP TABLE IF EXISTS "geneva_drive_step_executions" CASCADE /*application='Dummy'*/
40
-  (3.4ms) CREATE TABLE "geneva_drive_step_executions" ("id" bigserial primary key, "canceled_at" timestamp(6), "completed_at" timestamp(6), "created_at" timestamp(6) NOT NULL, "error_backtrace" text, "error_class_name" character varying, "error_message" text, "failed_at" timestamp(6), "finished_at" timestamp(6), "job_id" character varying, "outcome" character varying, "scheduled_for" timestamp(6) NOT NULL, "skipped_at" timestamp(6), "started_at" timestamp(6), "state" character varying DEFAULT 'scheduled' NOT NULL, "step_name" character varying NOT NULL, "updated_at" timestamp(6) NOT NULL, "workflow_id" bigint NOT NULL) /*application='Dummy'*/
41
-  (0.8ms) CREATE INDEX "index_geneva_drive_step_executions_on_finished_at" ON "geneva_drive_step_executions" ("finished_at") /*application='Dummy'*/
42
-  (0.5ms) CREATE INDEX "index_geneva_drive_step_executions_on_scheduled_for" ON "geneva_drive_step_executions" ("scheduled_for") /*application='Dummy'*/
43
-  (0.4ms) CREATE INDEX "index_geneva_drive_step_executions_scheduled" ON "geneva_drive_step_executions" ("state", "scheduled_for") /*application='Dummy'*/
44
-  (0.3ms) CREATE INDEX "index_geneva_drive_step_executions_on_state" ON "geneva_drive_step_executions" ("state") /*application='Dummy'*/
45
-  (0.6ms) CREATE INDEX "idx_on_workflow_id_created_at_af16a14fb2" ON "geneva_drive_step_executions" ("workflow_id", "created_at") /*application='Dummy'*/
46
-  (0.4ms) CREATE INDEX "index_geneva_drive_step_executions_on_workflow_id_and_state" ON "geneva_drive_step_executions" ("workflow_id", "state") /*application='Dummy'*/
47
-  (0.3ms) CREATE INDEX "index_geneva_drive_step_executions_on_workflow_id" ON "geneva_drive_step_executions" ("workflow_id") /*application='Dummy'*/
48
-  (0.4ms) CREATE UNIQUE INDEX "index_geneva_drive_step_executions_one_active" ON "geneva_drive_step_executions" ("workflow_id") WHERE ((state)::text = ANY (ARRAY[('scheduled'::character varying)::text, ('in_progress'::character varying)::text])) /*application='Dummy'*/
49
-  (0.1ms) DROP TABLE IF EXISTS "geneva_drive_workflows" CASCADE /*application='Dummy'*/
50
-  (1.2ms) CREATE TABLE "geneva_drive_workflows" ("id" bigserial primary key, "allow_multiple" boolean DEFAULT FALSE NOT NULL, "created_at" timestamp(6) NOT NULL, "current_step_name" character varying, "hero_id" bigint NOT NULL, "hero_type" character varying NOT NULL, "next_step_name" character varying, "started_at" timestamp(6), "state" character varying DEFAULT 'ready' NOT NULL, "transitioned_at" timestamp(6), "type" character varying NOT NULL, "updated_at" timestamp(6) NOT NULL) /*application='Dummy'*/
51
-  (0.4ms) CREATE INDEX "index_geneva_drive_workflows_on_hero_type_and_hero_id" ON "geneva_drive_workflows" ("hero_type", "hero_id") /*application='Dummy'*/
52
-  (0.3ms) CREATE INDEX "index_geneva_drive_workflows_on_state" ON "geneva_drive_workflows" ("state") /*application='Dummy'*/
53
-  (0.5ms) CREATE UNIQUE INDEX "index_geneva_drive_workflows_unique_ongoing" ON "geneva_drive_workflows" ("type", "hero_type", "hero_id") WHERE (((state)::text <> ALL (ARRAY[('finished'::character varying)::text, ('canceled'::character varying)::text])) AND (allow_multiple = false)) /*application='Dummy'*/
54
-  (0.3ms) CREATE INDEX "index_geneva_drive_workflows_on_type" ON "geneva_drive_workflows" ("type") /*application='Dummy'*/
55
-  (0.0ms) DROP TABLE IF EXISTS "users" CASCADE /*application='Dummy'*/
56
-  (1.5ms) CREATE TABLE "users" ("id" bigserial primary key, "active" boolean DEFAULT TRUE, "created_at" timestamp(6) NOT NULL, "email" character varying NOT NULL, "name" character varying, "updated_at" timestamp(6) NOT NULL) /*application='Dummy'*/
57
-  (1.7ms) ALTER TABLE "geneva_drive_step_executions" ADD CONSTRAINT "fk_rails_714b91b701"
58
- FOREIGN KEY ("workflow_id")
59
- REFERENCES "geneva_drive_workflows" ("id")
60
- ON DELETE CASCADE /*application='Dummy'*/
61
-  (1.1ms) CREATE TABLE "schema_migrations" ("version" character varying NOT NULL PRIMARY KEY) /*application='Dummy'*/
62
- ActiveRecord::SchemaMigration Load (0.2ms) SELECT "schema_migrations"."version" FROM "schema_migrations" ORDER BY "schema_migrations"."version" ASC /*application='Dummy'*/
63
-  (0.2ms) INSERT INTO "schema_migrations" (version) VALUES (20241217000004) /*application='Dummy'*/
64
-  (0.1ms) INSERT INTO "schema_migrations" (version) VALUES
65
- (20241217000003),
66
- (20241217000002),
67
- (20241217000001),
68
- (20241217000000); /*application='Dummy'*/
69
-  (1.1ms) CREATE TABLE "ar_internal_metadata" ("key" character varying NOT NULL PRIMARY KEY, "value" character varying, "created_at" timestamp(6) NOT NULL, "updated_at" timestamp(6) NOT NULL) /*application='Dummy'*/
70
- ActiveRecord::InternalMetadata Load (0.2ms) SELECT * FROM "ar_internal_metadata" WHERE "ar_internal_metadata"."key" = 'environment' ORDER BY "ar_internal_metadata"."key" ASC LIMIT 1 /*application='Dummy'*/
71
- ActiveRecord::InternalMetadata Create (0.2ms) INSERT INTO "ar_internal_metadata" ("key", "value", "created_at", "updated_at") VALUES ('environment', 'development', '2026-01-24 12:49:45.310089', '2026-01-24 12:49:45.310091') RETURNING "key" /*application='Dummy'*/
72
- ActiveRecord::InternalMetadata Load (0.1ms) SELECT * FROM "ar_internal_metadata" WHERE "ar_internal_metadata"."key" = 'environment' ORDER BY "ar_internal_metadata"."key" ASC LIMIT 1 /*application='Dummy'*/
73
- ActiveRecord::InternalMetadata Load (0.0ms) SELECT * FROM "ar_internal_metadata" WHERE "ar_internal_metadata"."key" = 'schema_sha1' ORDER BY "ar_internal_metadata"."key" ASC LIMIT 1 /*application='Dummy'*/
74
- ActiveRecord::InternalMetadata Create (0.1ms) INSERT INTO "ar_internal_metadata" ("key", "value", "created_at", "updated_at") VALUES ('schema_sha1', '7bd9fbf604030ee577c4699b61cd9167ccc93ba7', '2026-01-24 12:49:45.312130', '2026-01-24 12:49:45.312131') RETURNING "key" /*application='Dummy'*/
75
- SQL (6.4ms) CREATE EXTENSION IF NOT EXISTS "plpgsql" SCHEMA pg_catalog /*application='Dummy'*/
76
-  (0.0ms) DROP TABLE IF EXISTS "geneva_drive_step_executions" CASCADE /*application='Dummy'*/
77
-  (2.9ms) CREATE TABLE "geneva_drive_step_executions" ("id" bigserial primary key, "canceled_at" timestamp(6), "completed_at" timestamp(6), "created_at" timestamp(6) NOT NULL, "error_backtrace" text, "error_class_name" character varying, "error_message" text, "failed_at" timestamp(6), "finished_at" timestamp(6), "job_id" character varying, "outcome" character varying, "scheduled_for" timestamp(6) NOT NULL, "skipped_at" timestamp(6), "started_at" timestamp(6), "state" character varying DEFAULT 'scheduled' NOT NULL, "step_name" character varying NOT NULL, "updated_at" timestamp(6) NOT NULL, "workflow_id" bigint NOT NULL) /*application='Dummy'*/
78
-  (0.6ms) CREATE INDEX "index_geneva_drive_step_executions_on_finished_at" ON "geneva_drive_step_executions" ("finished_at") /*application='Dummy'*/
79
-  (0.3ms) CREATE INDEX "index_geneva_drive_step_executions_on_scheduled_for" ON "geneva_drive_step_executions" ("scheduled_for") /*application='Dummy'*/
80
-  (0.4ms) CREATE INDEX "index_geneva_drive_step_executions_scheduled" ON "geneva_drive_step_executions" ("state", "scheduled_for") /*application='Dummy'*/
81
-  (0.3ms) CREATE INDEX "index_geneva_drive_step_executions_on_state" ON "geneva_drive_step_executions" ("state") /*application='Dummy'*/
82
-  (0.5ms) CREATE INDEX "idx_on_workflow_id_created_at_af16a14fb2" ON "geneva_drive_step_executions" ("workflow_id", "created_at") /*application='Dummy'*/
83
-  (0.3ms) CREATE INDEX "index_geneva_drive_step_executions_on_workflow_id_and_state" ON "geneva_drive_step_executions" ("workflow_id", "state") /*application='Dummy'*/
84
-  (0.4ms) CREATE INDEX "index_geneva_drive_step_executions_on_workflow_id" ON "geneva_drive_step_executions" ("workflow_id") /*application='Dummy'*/
85
-  (0.4ms) CREATE UNIQUE INDEX "index_geneva_drive_step_executions_one_active" ON "geneva_drive_step_executions" ("workflow_id") WHERE ((state)::text = ANY (ARRAY[('scheduled'::character varying)::text, ('in_progress'::character varying)::text])) /*application='Dummy'*/
86
-  (0.0ms) DROP TABLE IF EXISTS "geneva_drive_workflows" CASCADE /*application='Dummy'*/
87
-  (1.3ms) CREATE TABLE "geneva_drive_workflows" ("id" bigserial primary key, "allow_multiple" boolean DEFAULT FALSE NOT NULL, "created_at" timestamp(6) NOT NULL, "current_step_name" character varying, "hero_id" bigint NOT NULL, "hero_type" character varying NOT NULL, "next_step_name" character varying, "started_at" timestamp(6), "state" character varying DEFAULT 'ready' NOT NULL, "transitioned_at" timestamp(6), "type" character varying NOT NULL, "updated_at" timestamp(6) NOT NULL) /*application='Dummy'*/
88
-  (0.4ms) CREATE INDEX "index_geneva_drive_workflows_on_hero_type_and_hero_id" ON "geneva_drive_workflows" ("hero_type", "hero_id") /*application='Dummy'*/
89
-  (0.4ms) CREATE INDEX "index_geneva_drive_workflows_on_state" ON "geneva_drive_workflows" ("state") /*application='Dummy'*/
90
-  (0.5ms) CREATE UNIQUE INDEX "index_geneva_drive_workflows_unique_ongoing" ON "geneva_drive_workflows" ("type", "hero_type", "hero_id") WHERE (((state)::text <> ALL (ARRAY[('finished'::character varying)::text, ('canceled'::character varying)::text])) AND (allow_multiple = false)) /*application='Dummy'*/
91
-  (0.6ms) CREATE INDEX "index_geneva_drive_workflows_on_type" ON "geneva_drive_workflows" ("type") /*application='Dummy'*/
92
-  (0.0ms) DROP TABLE IF EXISTS "users" CASCADE /*application='Dummy'*/
93
-  (1.0ms) CREATE TABLE "users" ("id" bigserial primary key, "active" boolean DEFAULT TRUE, "created_at" timestamp(6) NOT NULL, "email" character varying NOT NULL, "name" character varying, "updated_at" timestamp(6) NOT NULL) /*application='Dummy'*/
94
-  (1.3ms) ALTER TABLE "geneva_drive_step_executions" ADD CONSTRAINT "fk_rails_714b91b701"
95
- FOREIGN KEY ("workflow_id")
96
- REFERENCES "geneva_drive_workflows" ("id")
97
- ON DELETE CASCADE /*application='Dummy'*/
98
-  (0.9ms) CREATE TABLE "schema_migrations" ("version" character varying NOT NULL PRIMARY KEY) /*application='Dummy'*/
99
- ActiveRecord::SchemaMigration Load (0.1ms) SELECT "schema_migrations"."version" FROM "schema_migrations" ORDER BY "schema_migrations"."version" ASC /*application='Dummy'*/
100
-  (0.2ms) INSERT INTO "schema_migrations" (version) VALUES (20241217000004) /*application='Dummy'*/
101
-  (0.1ms) INSERT INTO "schema_migrations" (version) VALUES
102
- (20241217000003),
103
- (20241217000002),
104
- (20241217000001),
105
- (20241217000000); /*application='Dummy'*/
106
-  (0.9ms) CREATE TABLE "ar_internal_metadata" ("key" character varying NOT NULL PRIMARY KEY, "value" character varying, "created_at" timestamp(6) NOT NULL, "updated_at" timestamp(6) NOT NULL) /*application='Dummy'*/
107
- ActiveRecord::InternalMetadata Load (0.1ms) SELECT * FROM "ar_internal_metadata" WHERE "ar_internal_metadata"."key" = 'environment' ORDER BY "ar_internal_metadata"."key" ASC LIMIT 1 /*application='Dummy'*/
108
- ActiveRecord::InternalMetadata Create (0.1ms) INSERT INTO "ar_internal_metadata" ("key", "value", "created_at", "updated_at") VALUES ('environment', 'development', '2026-01-24 12:49:45.347146', '2026-01-24 12:49:45.347147') RETURNING "key" /*application='Dummy'*/
109
- ActiveRecord::InternalMetadata Load (0.0ms) SELECT * FROM "ar_internal_metadata" WHERE "ar_internal_metadata"."key" = 'environment' ORDER BY "ar_internal_metadata"."key" ASC LIMIT 1 /*application='Dummy'*/
110
- ActiveRecord::InternalMetadata Update (0.1ms) UPDATE "ar_internal_metadata" SET "value" = 'test', "updated_at" = '2026-01-24 12:49:45.348106' WHERE "ar_internal_metadata"."key" = 'environment' /*application='Dummy'*/
111
- ActiveRecord::InternalMetadata Load (0.0ms) SELECT * FROM "ar_internal_metadata" WHERE "ar_internal_metadata"."key" = 'schema_sha1' ORDER BY "ar_internal_metadata"."key" ASC LIMIT 1 /*application='Dummy'*/
112
- ActiveRecord::InternalMetadata Create (0.1ms) INSERT INTO "ar_internal_metadata" ("key", "value", "created_at", "updated_at") VALUES ('schema_sha1', '7bd9fbf604030ee577c4699b61cd9167ccc93ba7', '2026-01-24 12:49:45.348914', '2026-01-24 12:49:45.348915') RETURNING "key" /*application='Dummy'*/
113
-  (0.2ms) SELECT pg_try_advisory_lock(5953177287330319620) /*application='Dummy'*/
114
- ActiveRecord::SchemaMigration Load (3.0ms) SELECT "schema_migrations"."version" FROM "schema_migrations" ORDER BY "schema_migrations"."version" ASC /*application='Dummy'*/
115
- ActiveRecord::InternalMetadata Load (1.3ms) SELECT * FROM "ar_internal_metadata" WHERE "ar_internal_metadata"."key" = 'environment' ORDER BY "ar_internal_metadata"."key" ASC LIMIT 1 /*application='Dummy'*/
116
- Migrating to CreateGenevaDriveWorkflows (20260219212321)
117
- TRANSACTION (0.1ms) BEGIN /*application='Dummy'*/
118
-  (8.2ms) CREATE TABLE "geneva_drive_workflows" ("id" bigserial primary key, "type" character varying NOT NULL, "hero_type" character varying NOT NULL, "hero_id" bigint NOT NULL, "state" character varying DEFAULT 'ready' NOT NULL, "current_step_name" character varying, "next_step_name" character varying, "allow_multiple" boolean DEFAULT FALSE NOT NULL, "started_at" timestamp(6), "transitioned_at" timestamp(6), "created_at" timestamp(6) NOT NULL, "updated_at" timestamp(6) NOT NULL) /*application='Dummy'*/
119
- TRANSACTION (0.1ms) ROLLBACK /*application='Dummy'*/
120
-  (0.1ms) SELECT pg_advisory_unlock(5953177287330319620) /*application='Dummy'*/
121
-  (0.1ms) SELECT pg_try_advisory_lock(5953177287330319620) /*application='Dummy'*/
122
- ActiveRecord::SchemaMigration Load (2.8ms) SELECT "schema_migrations"."version" FROM "schema_migrations" ORDER BY "schema_migrations"."version" ASC /*application='Dummy'*/
123
- ActiveRecord::InternalMetadata Load (1.9ms) SELECT * FROM "ar_internal_metadata" WHERE "ar_internal_metadata"."key" = 'environment' ORDER BY "ar_internal_metadata"."key" ASC LIMIT 1 /*application='Dummy'*/
124
- Migrating to CreateGenevaDriveWorkflows (20260219212321)
125
- TRANSACTION (0.1ms) BEGIN /*application='Dummy'*/
126
-  (12.4ms) CREATE TABLE "geneva_drive_workflows" ("id" bigserial primary key, "type" character varying NOT NULL, "hero_type" character varying NOT NULL, "hero_id" bigint NOT NULL, "state" character varying DEFAULT 'ready' NOT NULL, "current_step_name" character varying, "next_step_name" character varying, "allow_multiple" boolean DEFAULT FALSE NOT NULL, "started_at" timestamp(6), "transitioned_at" timestamp(6), "created_at" timestamp(6) NOT NULL, "updated_at" timestamp(6) NOT NULL) /*application='Dummy'*/
127
- TRANSACTION (0.1ms) ROLLBACK /*application='Dummy'*/
128
-  (0.1ms) SELECT pg_advisory_unlock(5953177287330319620) /*application='Dummy'*/
129
- ActiveRecord::SchemaMigration Load (2.3ms) SELECT "schema_migrations"."version" FROM "schema_migrations" ORDER BY "schema_migrations"."version" ASC /*application='Dummy'*/
130
- ActiveRecord::SchemaMigration Load (0.7ms) SELECT "schema_migrations"."version" FROM "schema_migrations" ORDER BY "schema_migrations"."version" ASC /*application='Dummy'*/
131
- ActiveRecord::InternalMetadata Load (0.6ms) SELECT * FROM "ar_internal_metadata" WHERE "ar_internal_metadata"."key" = 'environment' ORDER BY "ar_internal_metadata"."key" ASC LIMIT 1 /*application='Dummy'*/
132
- ActiveRecord::SchemaMigration Load (0.1ms) SELECT "schema_migrations"."version" FROM "schema_migrations" ORDER BY "schema_migrations"."version" ASC /*application='Dummy'*/
133
- ActiveRecord::InternalMetadata Load (0.1ms) SELECT * FROM "ar_internal_metadata" WHERE "ar_internal_metadata"."key" = 'environment' ORDER BY "ar_internal_metadata"."key" ASC LIMIT 1 /*application='Dummy'*/
134
- ActiveRecord::SchemaMigration Load (0.2ms) SELECT "schema_migrations"."version" FROM "schema_migrations" ORDER BY "schema_migrations"."version" ASC /*application='Dummy'*/
135
- ActiveRecord::InternalMetadata Load (0.2ms) SELECT * FROM "ar_internal_metadata" WHERE "ar_internal_metadata"."key" = 'environment' ORDER BY "ar_internal_metadata"."key" ASC LIMIT 1 /*application='Dummy'*/
136
- SQL (0.1ms) SET search_path TO public /*application='Dummy'*/
137
-  (155.9ms) DROP DATABASE IF EXISTS "geneva_drive_development" /*application='Dummy'*/
138
- SQL (0.0ms) SET search_path TO public /*application='Dummy'*/
139
-  (41.5ms) DROP DATABASE IF EXISTS "geneva_drive_test" /*application='Dummy'*/
140
- SQL (0.1ms) SET search_path TO public /*application='Dummy'*/
141
-  (112.0ms) CREATE DATABASE "geneva_drive_development" ENCODING = 'unicode' /*application='Dummy'*/
142
- SQL (0.1ms) SET search_path TO public /*application='Dummy'*/
143
-  (66.2ms) CREATE DATABASE "geneva_drive_test" ENCODING = 'unicode' /*application='Dummy'*/
144
- SQL (0.2ms) CREATE EXTENSION IF NOT EXISTS "plpgsql" SCHEMA pg_catalog /*application='Dummy'*/
145
-  (0.0ms) DROP TABLE IF EXISTS "geneva_drive_step_executions" CASCADE /*application='Dummy'*/
146
-  (3.0ms) CREATE TABLE "geneva_drive_step_executions" ("id" bigserial primary key, "canceled_at" timestamp(6), "completed_at" timestamp(6), "created_at" timestamp(6) NOT NULL, "error_backtrace" text, "error_class_name" character varying, "error_message" text, "failed_at" timestamp(6), "finished_at" timestamp(6), "job_id" character varying, "metadata" jsonb, "outcome" character varying, "scheduled_for" timestamp(6) NOT NULL, "skipped_at" timestamp(6), "started_at" timestamp(6), "state" character varying DEFAULT 'scheduled' NOT NULL, "step_name" character varying NOT NULL, "updated_at" timestamp(6) NOT NULL, "workflow_id" bigint NOT NULL) /*application='Dummy'*/
147
-  (0.7ms) CREATE INDEX "index_geneva_drive_step_executions_on_finished_at" ON "geneva_drive_step_executions" ("finished_at") /*application='Dummy'*/
148
-  (0.4ms) CREATE INDEX "index_geneva_drive_step_executions_on_scheduled_for" ON "geneva_drive_step_executions" ("scheduled_for") /*application='Dummy'*/
149
-  (0.6ms) CREATE INDEX "index_geneva_drive_step_executions_scheduled" ON "geneva_drive_step_executions" ("state", "scheduled_for") /*application='Dummy'*/
150
-  (0.4ms) CREATE INDEX "index_geneva_drive_step_executions_on_state" ON "geneva_drive_step_executions" ("state") /*application='Dummy'*/
151
-  (0.5ms) CREATE INDEX "idx_on_workflow_id_created_at_af16a14fb2" ON "geneva_drive_step_executions" ("workflow_id", "created_at") /*application='Dummy'*/
152
-  (0.5ms) CREATE INDEX "index_geneva_drive_step_executions_on_workflow_id_and_state" ON "geneva_drive_step_executions" ("workflow_id", "state") /*application='Dummy'*/
153
-  (0.4ms) CREATE INDEX "index_geneva_drive_step_executions_on_workflow_id" ON "geneva_drive_step_executions" ("workflow_id") /*application='Dummy'*/
154
-  (0.8ms) CREATE UNIQUE INDEX "index_geneva_drive_step_executions_one_active" ON "geneva_drive_step_executions" ("workflow_id") WHERE ((state)::text = ANY (ARRAY[('scheduled'::character varying)::text, ('in_progress'::character varying)::text])) /*application='Dummy'*/
155
-  (0.0ms) DROP TABLE IF EXISTS "geneva_drive_workflows" CASCADE /*application='Dummy'*/
156
-  (1.4ms) CREATE TABLE "geneva_drive_workflows" ("id" bigserial primary key, "allow_multiple" boolean DEFAULT FALSE NOT NULL, "created_at" timestamp(6) NOT NULL, "current_step_name" character varying, "hero_id" bigint NOT NULL, "hero_type" character varying NOT NULL, "next_step_name" character varying, "started_at" timestamp(6), "state" character varying DEFAULT 'ready' NOT NULL, "transitioned_at" timestamp(6), "type" character varying NOT NULL, "updated_at" timestamp(6) NOT NULL) /*application='Dummy'*/
157
-  (1.4ms) CREATE INDEX "index_geneva_drive_workflows_on_hero_type_and_hero_id" ON "geneva_drive_workflows" ("hero_type", "hero_id") /*application='Dummy'*/
158
-  (0.4ms) CREATE INDEX "index_geneva_drive_workflows_on_state" ON "geneva_drive_workflows" ("state") /*application='Dummy'*/
159
-  (0.6ms) CREATE UNIQUE INDEX "index_geneva_drive_workflows_unique_ongoing" ON "geneva_drive_workflows" ("type", "hero_type", "hero_id") WHERE (((state)::text <> ALL (ARRAY[('finished'::character varying)::text, ('canceled'::character varying)::text])) AND (allow_multiple = false)) /*application='Dummy'*/
160
-  (0.6ms) CREATE INDEX "index_geneva_drive_workflows_on_type" ON "geneva_drive_workflows" ("type") /*application='Dummy'*/
161
-  (0.0ms) DROP TABLE IF EXISTS "users" CASCADE /*application='Dummy'*/
162
-  (1.3ms) CREATE TABLE "users" ("id" bigserial primary key, "active" boolean DEFAULT TRUE, "created_at" timestamp(6) NOT NULL, "email" character varying NOT NULL, "name" character varying, "updated_at" timestamp(6) NOT NULL) /*application='Dummy'*/
163
-  (1.3ms) ALTER TABLE "geneva_drive_step_executions" ADD CONSTRAINT "fk_rails_714b91b701"
164
- FOREIGN KEY ("workflow_id")
165
- REFERENCES "geneva_drive_workflows" ("id")
166
- ON DELETE CASCADE /*application='Dummy'*/
167
-  (1.0ms) CREATE TABLE "schema_migrations" ("version" character varying NOT NULL PRIMARY KEY) /*application='Dummy'*/
168
- ActiveRecord::SchemaMigration Load (0.1ms) SELECT "schema_migrations"."version" FROM "schema_migrations" ORDER BY "schema_migrations"."version" ASC /*application='Dummy'*/
169
-  (0.1ms) INSERT INTO "schema_migrations" (version) VALUES (20260316100007) /*application='Dummy'*/
170
-  (0.3ms) INSERT INTO "schema_migrations" (version) VALUES
171
- (20260219212324),
172
- (20260219212323),
173
- (20260219212322),
174
- (20260219212321),
175
- (20241217000000); /*application='Dummy'*/
176
-  (1.0ms) CREATE TABLE "ar_internal_metadata" ("key" character varying NOT NULL PRIMARY KEY, "value" character varying, "created_at" timestamp(6) NOT NULL, "updated_at" timestamp(6) NOT NULL) /*application='Dummy'*/
177
- ActiveRecord::InternalMetadata Load (0.2ms) SELECT * FROM "ar_internal_metadata" WHERE "ar_internal_metadata"."key" = 'environment' ORDER BY "ar_internal_metadata"."key" ASC LIMIT 1 /*application='Dummy'*/
178
- ActiveRecord::InternalMetadata Create (0.1ms) INSERT INTO "ar_internal_metadata" ("key", "value", "created_at", "updated_at") VALUES ('environment', 'development', '2026-03-27 15:24:39.942723', '2026-03-27 15:24:39.942724') RETURNING "key" /*application='Dummy'*/
179
- ActiveRecord::InternalMetadata Load (0.1ms) SELECT * FROM "ar_internal_metadata" WHERE "ar_internal_metadata"."key" = 'environment' ORDER BY "ar_internal_metadata"."key" ASC LIMIT 1 /*application='Dummy'*/
180
- ActiveRecord::InternalMetadata Load (0.0ms) SELECT * FROM "ar_internal_metadata" WHERE "ar_internal_metadata"."key" = 'schema_sha1' ORDER BY "ar_internal_metadata"."key" ASC LIMIT 1 /*application='Dummy'*/
181
- ActiveRecord::InternalMetadata Create (0.1ms) INSERT INTO "ar_internal_metadata" ("key", "value", "created_at", "updated_at") VALUES ('schema_sha1', '6bcdc496aab9e76a4b317c9b4ef945674d7b3065', '2026-03-27 15:24:39.944031', '2026-03-27 15:24:39.944031') RETURNING "key" /*application='Dummy'*/
182
-  (0.1ms) SELECT pg_try_advisory_lock(5953177287330319620) /*application='Dummy'*/
183
- ActiveRecord::SchemaMigration Load (0.0ms) SELECT "schema_migrations"."version" FROM "schema_migrations" ORDER BY "schema_migrations"."version" ASC /*application='Dummy'*/
184
- ActiveRecord::InternalMetadata Load (0.1ms) SELECT * FROM "ar_internal_metadata" WHERE "ar_internal_metadata"."key" = 'environment' ORDER BY "ar_internal_metadata"."key" ASC LIMIT 1 /*application='Dummy'*/
185
- Migrating to AllowNullHeroOnGenevaDriveWorkflows (20260327000000)
186
- TRANSACTION (0.0ms) BEGIN /*application='Dummy'*/
187
-  (0.1ms) ALTER TABLE "geneva_drive_workflows" ALTER COLUMN "hero_type" DROP NOT NULL /*application='Dummy'*/
188
-  (0.0ms) ALTER TABLE "geneva_drive_workflows" ALTER COLUMN "hero_id" DROP NOT NULL /*application='Dummy'*/
189
- ActiveRecord::SchemaMigration Create (0.0ms) INSERT INTO "schema_migrations" ("version") VALUES ('20260327000000') RETURNING "version" /*application='Dummy'*/
190
- TRANSACTION (0.2ms) COMMIT /*application='Dummy'*/
191
-  (0.0ms) SELECT pg_advisory_unlock(5953177287330319620) /*application='Dummy'*/
192
- ActiveRecord::SchemaMigration Load (0.0ms) SELECT "schema_migrations"."version" FROM "schema_migrations" ORDER BY "schema_migrations"."version" ASC /*application='Dummy'*/
193
- SQL (0.0ms) SET search_path TO public /*application='Dummy'*/
194
- SQL (0.0ms) SET search_path TO "$user", public /*application='Dummy'*/
195
- SQL (0.0ms) SET search_path TO public /*application='Dummy'*/
196
- SQL (0.0ms) SET search_path TO "$user", public /*application='Dummy'*/
197
- ActiveRecord::SchemaMigration Load (0.7ms) SELECT "schema_migrations"."version" FROM "schema_migrations" ORDER BY "schema_migrations"."version" ASC /*application='Dummy'*/
198
- ActiveRecord::SchemaMigration Load (0.8ms) SELECT "schema_migrations"."version" FROM "schema_migrations" ORDER BY "schema_migrations"."version" ASC /*application='Dummy'*/
199
- SQL (0.1ms) SET search_path TO public /*application='Dummy'*/
200
- SQL (0.1ms) SET search_path TO "$user", public /*application='Dummy'*/
201
- SQL (0.1ms) SET search_path TO public /*application='Dummy'*/
202
- SQL (0.1ms) SET search_path TO "$user", public /*application='Dummy'*/