@usine/engine 0.3.0 → 0.4.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 (190) hide show
  1. package/README.md +109 -38
  2. package/dist/board-moves/board-moves.d.ts +20 -0
  3. package/dist/board-moves/board-moves.d.ts.map +1 -0
  4. package/dist/board-moves/board-moves.js +74 -0
  5. package/dist/board-moves/board-moves.js.map +1 -0
  6. package/dist/board-moves/model.d.ts +21 -0
  7. package/dist/board-moves/model.d.ts.map +1 -0
  8. package/dist/board-moves/model.js +22 -0
  9. package/dist/board-moves/model.js.map +1 -0
  10. package/dist/cursor/cursor.d.ts +2 -6
  11. package/dist/cursor/cursor.d.ts.map +1 -1
  12. package/dist/cursor/cursor.js +2 -6
  13. package/dist/cursor/cursor.js.map +1 -1
  14. package/dist/cycle-budget/cycle-budget.d.ts +6 -6
  15. package/dist/cycle-budget/cycle-budget.d.ts.map +1 -1
  16. package/dist/cycle-budget/cycle-budget.js +5 -5
  17. package/dist/cycle-budget/cycle-budget.js.map +1 -1
  18. package/dist/cycle-budget/model.d.ts +2 -2
  19. package/dist/cycle-budget/model.d.ts.map +1 -1
  20. package/dist/cycle-budget/model.js +2 -2
  21. package/dist/cycle-budget/model.js.map +1 -1
  22. package/dist/cycle-budget/queries.d.ts +1 -1
  23. package/dist/cycle-budget/queries.d.ts.map +1 -1
  24. package/dist/cycle-budget/queries.js +3 -3
  25. package/dist/cycle-budget/queries.js.map +1 -1
  26. package/dist/database/database.d.ts +1 -1
  27. package/dist/database/database.d.ts.map +1 -1
  28. package/dist/database/local-sqlite.d.ts +10 -8
  29. package/dist/database/local-sqlite.d.ts.map +1 -1
  30. package/dist/database/local-sqlite.js +11 -10
  31. package/dist/database/local-sqlite.js.map +1 -1
  32. package/dist/database/schema.d.ts +533 -22
  33. package/dist/database/schema.d.ts.map +1 -1
  34. package/dist/database/schema.js +100 -23
  35. package/dist/database/schema.js.map +1 -1
  36. package/dist/{workflow → engine}/admission.d.ts +2 -2
  37. package/dist/engine/admission.d.ts.map +1 -0
  38. package/dist/{workflow → engine}/admission.js +4 -4
  39. package/dist/engine/admission.js.map +1 -0
  40. package/dist/engine/checkout-recovery.d.ts +69 -0
  41. package/dist/engine/checkout-recovery.d.ts.map +1 -0
  42. package/dist/engine/checkout-recovery.js +181 -0
  43. package/dist/engine/checkout-recovery.js.map +1 -0
  44. package/dist/engine/engine.d.ts +55 -26
  45. package/dist/engine/engine.d.ts.map +1 -1
  46. package/dist/engine/engine.js +118 -128
  47. package/dist/engine/engine.js.map +1 -1
  48. package/dist/engine/error.d.ts +29 -10
  49. package/dist/engine/error.d.ts.map +1 -1
  50. package/dist/engine/error.js +28 -8
  51. package/dist/engine/error.js.map +1 -1
  52. package/dist/engine/lifecycle.d.ts +81 -28
  53. package/dist/engine/lifecycle.d.ts.map +1 -1
  54. package/dist/engine/lifecycle.js +83 -44
  55. package/dist/engine/lifecycle.js.map +1 -1
  56. package/dist/engine/retry.d.ts +16 -0
  57. package/dist/engine/retry.d.ts.map +1 -0
  58. package/dist/engine/retry.js +18 -0
  59. package/dist/engine/retry.js.map +1 -0
  60. package/dist/engine/run-again.d.ts +45 -0
  61. package/dist/engine/run-again.d.ts.map +1 -0
  62. package/dist/engine/run-again.js +56 -0
  63. package/dist/engine/run-again.js.map +1 -0
  64. package/dist/engine/run-driver.d.ts +54 -0
  65. package/dist/engine/run-driver.d.ts.map +1 -0
  66. package/dist/engine/run-driver.js +362 -0
  67. package/dist/engine/run-driver.js.map +1 -0
  68. package/dist/engine/shutdown.d.ts +3 -4
  69. package/dist/engine/shutdown.d.ts.map +1 -1
  70. package/dist/engine/shutdown.js +3 -4
  71. package/dist/engine/shutdown.js.map +1 -1
  72. package/dist/engine/submission.d.ts +31 -11
  73. package/dist/engine/submission.d.ts.map +1 -1
  74. package/dist/engine/submission.js +42 -12
  75. package/dist/engine/submission.js.map +1 -1
  76. package/dist/item-projection/item-projection.d.ts +12 -4
  77. package/dist/item-projection/item-projection.d.ts.map +1 -1
  78. package/dist/item-projection/item-projection.js +41 -6
  79. package/dist/item-projection/item-projection.js.map +1 -1
  80. package/dist/item-projection/model.d.ts +5 -1
  81. package/dist/item-projection/model.d.ts.map +1 -1
  82. package/dist/item-projection/model.js +6 -2
  83. package/dist/item-projection/model.js.map +1 -1
  84. package/dist/loop-control/loop-control.d.ts +5 -5
  85. package/dist/loop-control/loop-control.d.ts.map +1 -1
  86. package/dist/loop-control/loop-control.js +4 -4
  87. package/dist/loop-control/loop-control.js.map +1 -1
  88. package/dist/loop-control/model.d.ts +1 -1
  89. package/dist/loop-control/model.d.ts.map +1 -1
  90. package/dist/loop-control/model.js +1 -1
  91. package/dist/loop-control/model.js.map +1 -1
  92. package/dist/repository-label-projection/model.d.ts +2 -2
  93. package/dist/repository-label-projection/model.d.ts.map +1 -1
  94. package/dist/repository-label-projection/model.js +2 -2
  95. package/dist/repository-label-projection/model.js.map +1 -1
  96. package/dist/repository-label-projection/repository-label-projection.d.ts +1 -1
  97. package/dist/repository-label-projection/repository-label-projection.d.ts.map +1 -1
  98. package/dist/repository-label-projection/repository-label-projection.js +1 -1
  99. package/dist/repository-label-projection/repository-label-projection.js.map +1 -1
  100. package/dist/run-reader/model.d.ts +62 -4
  101. package/dist/run-reader/model.d.ts.map +1 -1
  102. package/dist/run-reader/model.js +66 -7
  103. package/dist/run-reader/model.js.map +1 -1
  104. package/dist/run-reader/run-reader.d.ts +19 -9
  105. package/dist/run-reader/run-reader.d.ts.map +1 -1
  106. package/dist/run-reader/run-reader.js +23 -7
  107. package/dist/run-reader/run-reader.js.map +1 -1
  108. package/dist/step-executor.d.ts +64 -10
  109. package/dist/step-executor.d.ts.map +1 -1
  110. package/dist/step-executor.js +10 -2
  111. package/dist/step-executor.js.map +1 -1
  112. package/dist/store/attempt-windows.d.ts +8 -0
  113. package/dist/store/attempt-windows.d.ts.map +1 -0
  114. package/dist/store/attempt-windows.js +53 -0
  115. package/dist/store/attempt-windows.js.map +1 -0
  116. package/dist/store/codec.d.ts +207 -42
  117. package/dist/store/codec.d.ts.map +1 -1
  118. package/dist/store/codec.js +52 -14
  119. package/dist/store/codec.js.map +1 -1
  120. package/dist/store/leftovers.d.ts +10 -0
  121. package/dist/store/leftovers.d.ts.map +1 -0
  122. package/dist/store/leftovers.js +43 -0
  123. package/dist/store/leftovers.js.map +1 -0
  124. package/dist/store/loop-items.d.ts +16 -0
  125. package/dist/store/loop-items.d.ts.map +1 -0
  126. package/dist/store/loop-items.js +185 -0
  127. package/dist/store/loop-items.js.map +1 -0
  128. package/dist/store/queries.d.ts +342 -35
  129. package/dist/store/queries.d.ts.map +1 -1
  130. package/dist/store/queries.js +302 -107
  131. package/dist/store/queries.js.map +1 -1
  132. package/dist/store/store.d.ts +91 -54
  133. package/dist/store/store.d.ts.map +1 -1
  134. package/dist/store/store.js +468 -190
  135. package/dist/store/store.js.map +1 -1
  136. package/dist/store/transcript.d.ts +3 -3
  137. package/dist/store/transcript.d.ts.map +1 -1
  138. package/dist/store/transcript.js +25 -6
  139. package/dist/store/transcript.js.map +1 -1
  140. package/dist/transcript.d.ts +19 -20
  141. package/dist/transcript.d.ts.map +1 -1
  142. package/dist/transcript.js +23 -21
  143. package/dist/transcript.js.map +1 -1
  144. package/dist/trigger-condition.d.ts +23 -0
  145. package/dist/trigger-condition.d.ts.map +1 -0
  146. package/dist/trigger-condition.js +8 -0
  147. package/dist/trigger-condition.js.map +1 -0
  148. package/drizzle/20260917071139_resolve_run_failure/migration.sql +1 -0
  149. package/drizzle/20260917071139_resolve_run_failure/snapshot.json +1471 -0
  150. package/drizzle/20260918032643_attempt_salvage/migration.sql +1 -0
  151. package/drizzle/20260918032643_attempt_salvage/snapshot.json +1481 -0
  152. package/drizzle/20261011153856_drop_workflow_tables/migration.sql +4 -0
  153. package/drizzle/20261011153856_drop_workflow_tables/snapshot.json +1433 -0
  154. package/drizzle/20261017155043_attempt_salvage_check/migration.sql +41 -0
  155. package/drizzle/20261017155043_attempt_salvage_check/snapshot.json +1421 -0
  156. package/drizzle/20261018162700_discard_attempt_leftovers/migration.sql +1 -0
  157. package/drizzle/20261018162700_discard_attempt_leftovers/snapshot.json +1431 -0
  158. package/drizzle/20261018172605_loop_items_and_reopenings/migration.sql +15 -0
  159. package/drizzle/20261018172605_loop_items_and_reopenings/snapshot.json +1574 -0
  160. package/drizzle/20261018180339_attempt_ended_at/migration.sql +1 -0
  161. package/drizzle/20261018180339_attempt_ended_at/snapshot.json +1584 -0
  162. package/drizzle/20261019104043_run_approval_source/migration.sql +15 -0
  163. package/drizzle/20261019104043_run_approval_source/snapshot.json +1610 -0
  164. package/drizzle/20261019133538_board_moves/migration.sql +14 -0
  165. package/drizzle/20261019133538_board_moves/snapshot.json +1731 -0
  166. package/drizzle/20261019170538_item_projection_gone/migration.sql +1 -0
  167. package/drizzle/20261019170538_item_projection_gone/snapshot.json +1741 -0
  168. package/drizzle/20261019180649_run_again_events/migration.sql +7 -0
  169. package/drizzle/20261019180649_run_again_events/snapshot.json +1804 -0
  170. package/drizzle/20261019185008_trigger_event_permissions/migration.sql +1 -0
  171. package/drizzle/20261019185008_trigger_event_permissions/snapshot.json +1814 -0
  172. package/drizzle/20261020103746_attempt_start/migration.sql +5 -0
  173. package/drizzle/20261020103746_attempt_start/snapshot.json +1844 -0
  174. package/drizzle/20261020125211_attempt_comments/migration.sql +1 -0
  175. package/drizzle/20261020125211_attempt_comments/snapshot.json +1854 -0
  176. package/drizzle/20261020191320_run_closed_at/migration.sql +6 -0
  177. package/drizzle/20261020191320_run_closed_at/snapshot.json +1864 -0
  178. package/drizzle/20261023091428_rename_loop_item_hold_to_suppression/migration.sql +2 -0
  179. package/drizzle/20261023091428_rename_loop_item_hold_to_suppression/snapshot.json +1867 -0
  180. package/package.json +15 -5
  181. package/dist/workflow/admission.d.ts.map +0 -1
  182. package/dist/workflow/admission.js.map +0 -1
  183. package/dist/workflow/command.d.ts +0 -13
  184. package/dist/workflow/command.d.ts.map +0 -1
  185. package/dist/workflow/command.js +0 -17
  186. package/dist/workflow/command.js.map +0 -1
  187. package/dist/workflow/workflow.d.ts +0 -18
  188. package/dist/workflow/workflow.d.ts.map +0 -1
  189. package/dist/workflow/workflow.js +0 -108
  190. package/dist/workflow/workflow.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../src/database/schema.ts"],"names":[],"mappings":"AA0BA,eAAO,MAAM,MAAM;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EASlB,CAAC;AAEF,eAAO,MAAM,aAAa;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAiCzB,CAAC;AAEF,eAAO,MAAM,gBAAgB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAgB5B,CAAC;AAEF,eAAO,MAAM,iBAAiB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAkB7B,CAAC;AAEF,eAAO,MAAM,WAAW;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAWtB,CAAC;AAEH,eAAO,MAAM,IAAI;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAwBhB,CAAC;AAEF,eAAO,MAAM,KAAK;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAiBjB,CAAC;AAEF,eAAO,MAAM,QAAQ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAgCpB,CAAC;AAEF,eAAO,MAAM,kBAAkB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EA2B9B,CAAC;AAEF,eAAO,MAAM,SAAS;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAUpB,CAAC;AAEH,eAAO,MAAM,aAAa;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAYzB,CAAC;AAEF,eAAO,MAAM,gBAAgB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAgB5B,CAAC;AAEF,uEAAuE;AACvE,eAAO,MAAM,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAOnB,CAAC;AAEF,iEAAiE;AACjE,eAAO,MAAM,eAAe;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAgB3B,CAAC;AAEF,qEAAqE;AACrE,eAAO,MAAM,0BAA0B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAYtC,CAAC;AAEF,sFAAsF;AACtF,eAAO,MAAM,WAAW;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAGtB,CAAC;AAEH,wEAAwE;AACxE,eAAO,MAAM,kBAAkB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAO9B,CAAC"}
1
+ {"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../src/database/schema.ts"],"names":[],"mappings":"AAiCA,eAAO,MAAM,MAAM;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EASlB,CAAC;AAEF,eAAO,MAAM,aAAa;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EA2CzB,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,SAAS;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAgBrB,CAAC;AAEF,eAAO,MAAM,gBAAgB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAgB5B,CAAC;AAEF,eAAO,MAAM,iBAAiB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAkB7B,CAAC;AAEF,eAAO,MAAM,WAAW;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAWtB,CAAC;AAEH,eAAO,MAAM,IAAI;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAgChB,CAAC;AAEF,eAAO,MAAM,KAAK;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAiBjB,CAAC;AAEF,eAAO,MAAM,QAAQ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EA+CpB,CAAC;AAEF,eAAO,MAAM,kBAAkB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EA2B9B,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,SAAS;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAqBrB,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,cAAc;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAUzB,CAAC;AAEH,eAAO,MAAM,aAAa;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAYzB,CAAC;AAEF,4EAA4E;AAC5E,eAAO,MAAM,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAOnB,CAAC;AAEF,uFAAuF;AACvF,eAAO,MAAM,eAAe;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAgB3B,CAAC;AAEF,qEAAqE;AACrE,eAAO,MAAM,0BAA0B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAYtC,CAAC;AAEF,2FAA2F;AAC3F,eAAO,MAAM,UAAU;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAiBtB,CAAC;AAEF,qEAAqE;AACrE,eAAO,MAAM,WAAW;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAGtB,CAAC;AAEH,0EAA0E;AAC1E,eAAO,MAAM,kBAAkB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAO9B,CAAC"}
@@ -5,15 +5,16 @@ import * as AttemptChannel from "@usine/core/attempt/channel";
5
5
  import { DedupKey, EventId } from "@usine/core/event";
6
6
  import { ItemKey } from "@usine/core/item";
7
7
  import { CycleLimit, CycleBudgetAskId } from "@usine/core/cycle-budget";
8
- import { LoopName, APPROVAL_REQUIREMENTS } from "@usine/core/loop";
8
+ import { LoopName, APPROVAL_REQUIREMENTS, LOOP_PERMISSIONS, } from "@usine/core/loop";
9
+ import { OperatorLogin } from "@usine/core/operator";
9
10
  import { RepositoryName, RepositoryRevision } from "@usine/core/repository";
10
11
  import { RunId } from "@usine/core/run";
12
+ import { APPROVAL_CHANNELS } from "@usine/core/run/approval";
11
13
  import { StepName } from "@usine/core/step";
12
14
  import { WorkerName } from "@usine/core/worker";
13
15
  import { sql } from "drizzle-orm";
14
16
  import { check, foreignKey, index, integer, primaryKey, snakeCase, text, uniqueIndex, } from "drizzle-orm/sqlite-core";
15
17
  import { IGNORED_REASONS } from "../engine/submission.js";
16
- import { WORKFLOW_COMMANDS } from "../workflow/command.js";
17
18
  export const events = snakeCase.table("usine_events", {
18
19
  eventId: text().$type().primaryKey(),
19
20
  dedupKey: text().$type().notNull().unique(),
@@ -29,24 +30,52 @@ export const triggerEvents = snakeCase.table("usine_trigger_events", {
29
30
  loopName: text().$type().notNull(),
30
31
  stepName: text().$type().notNull(),
31
32
  approval: text({ enum: APPROVAL_REQUIREMENTS }).$type().notNull(),
33
+ // The Loop's permissions at match time, used by every Attempt of the Run.
34
+ permissions: text({ enum: LOOP_PERMISSIONS })
35
+ .$type()
36
+ .notNull()
37
+ .default("write"),
32
38
  cycleLimit: integer().$type(),
33
- // Item allowance observed before fetching this Event's trigger input.
39
+ // The Item's cycle generation, read before fetching the trigger input.
34
40
  cycleGeneration: integer().notNull().default(0),
35
- // The execution context as submitted, part of the immutable Event fact. A
36
- // queued Event is claimed later from these columns, while execution reads
37
- // the Run's own copy below.
41
+ // The submitted execution context, never updated. A queued Event is claimed from these
42
+ // columns; execution reads the Run's copy.
38
43
  repository: text().$type().notNull(),
39
44
  revision: text().$type().notNull(),
40
45
  task: text().$type().notNull(),
41
46
  agentJson: text({ mode: "json" }).$type().notNull(),
42
47
  parentModel: text().$type(),
48
+ // The Event that this one reopens after its Run was canceled (#267).
49
+ reopensEventId: text()
50
+ .$type()
51
+ .references(() => events.eventId),
52
+ reopening: integer().notNull().default(0),
43
53
  }, (table) => [
44
54
  check("usine_trigger_events_approval", sql `${table.approval} in ('none', 'required')`),
45
55
  check("usine_trigger_events_cycle_limit", sql `${table.cycleLimit} is null or ${table.cycleLimit} >= 1`),
46
56
  check("usine_trigger_events_agent_json_valid", sql `json_valid(${table.agentJson})`),
47
57
  index("usine_trigger_events_item").on(table.loopName, table.itemKey),
48
58
  index("usine_trigger_events_item_history").on(table.itemKey),
59
+ uniqueIndex("usine_trigger_event_reopening").on(table.reopensEventId, table.reopening),
49
60
  ]);
61
+ /**
62
+ * The Event a trigger last submitted for each Loop and Item, or `null` after a non-matching
63
+ * sighting. After an Attempt stops with a question or blocker, `suppressedByRunId` is its Run and
64
+ * `suppressedEventId` is the Item's state after the stop, which opens no Run (#241, #341).
65
+ */
66
+ export const loopItems = snakeCase.table("usine_loop_items", {
67
+ loopName: text().$type().notNull(),
68
+ itemKey: text().$type().notNull(),
69
+ observedEventId: text()
70
+ .$type()
71
+ .references(() => events.eventId),
72
+ suppressedByRunId: text()
73
+ .$type()
74
+ .references(() => runs.runId),
75
+ suppressedEventId: text()
76
+ .$type()
77
+ .references(() => events.eventId),
78
+ }, (table) => [primaryKey({ columns: [table.loopName, table.itemKey] })]);
50
79
  export const itemCycleBudgets = snakeCase.table("usine_item_cycle_budgets", {
51
80
  itemKey: text().$type().primaryKey(),
52
81
  repository: text().$type().notNull(),
@@ -93,14 +122,22 @@ export const runs = snakeCase.table("usine_runs", {
93
122
  .references(() => triggerEvents.eventId),
94
123
  loopName: text().$type().notNull(),
95
124
  stateJson: text({ mode: "json" }).$type().notNull(),
125
+ resolvedFailureAttemptId: text().$type(),
96
126
  openedAt: text().notNull(),
97
- // The Run's effective context, seeded from the claiming submission.
98
- // Edit-and-retry amends these columns; the Event columns never change (ADR 0018).
127
+ /**
128
+ * The time the Run last closed, or `null` while open; a retry clears it. Older closed Runs
129
+ * have their last Attempt's end time.
130
+ */
131
+ closedAt: text(),
132
+ // The Run's effective context, copied from the claiming submission. Edit-and-retry updates
133
+ // these columns; the Event's columns never change (ADR 0018).
99
134
  repository: text().$type().notNull(),
100
135
  revision: text().$type().notNull(),
101
136
  task: text().$type().notNull(),
102
137
  agentJson: text({ mode: "json" }).$type().notNull(),
103
138
  parentModel: text().$type(),
139
+ /** The operator retry for the Run's next Attempt; cleared when that Attempt starts. */
140
+ nextStartJson: text({ mode: "json" }).$type(),
104
141
  }, (table) => [
105
142
  check("usine_runs_state_json_valid", sql `json_valid(${table.stateJson})`),
106
143
  check("usine_runs_agent_json_valid", sql `json_valid(${table.agentJson})`),
@@ -129,10 +166,22 @@ export const attempts = snakeCase.table("usine_attempts", {
129
166
  parentModel: text().$type(),
130
167
  startedAt: text().notNull(),
131
168
  outcomeJson: text({ mode: "json" }).$type(),
169
+ /** The time the outcome was recorded; `null` while running and for older Attempts. */
170
+ endedAt: text(),
171
+ salvageJson: text({ mode: "json" }).$type(),
172
+ /** The time the operator discarded the Attempt's leftovers on a removed Worker; startup reconciliation then skips it. */
173
+ leftoversDiscardedAt: text(),
174
+ /** The reason the Attempt started; `null` for older Attempts. */
175
+ startJson: text({ mode: "json" }).$type(),
176
+ /** The last time an orchestrator restart reattached the Attempt, or `null`. */
177
+ reattachedAt: text(),
178
+ /** The comments and reviews posted by an unsuccessful Attempt, or `null` if none were recorded. */
179
+ commentsJson: text({ mode: "json" }).$type(),
132
180
  }, (table) => [
133
181
  check("usine_attempts_number", sql `${table.attemptNumber} >= 1`),
134
182
  check("usine_attempts_brain_json_valid", sql `json_valid(${table.brainJson})`),
135
183
  check("usine_attempts_outcome_json_valid", sql `${table.outcomeJson} is null or json_valid(${table.outcomeJson})`),
184
+ check("usine_attempts_salvage_json_valid", sql `${table.salvageJson} is null or json_valid(${table.salvageJson})`),
136
185
  uniqueIndex("usine_attempt_number").on(table.runId, table.stepName, table.attemptNumber),
137
186
  uniqueIndex("usine_one_in_flight_attempt")
138
187
  .on(table.runId)
@@ -159,6 +208,10 @@ export const attemptTranscripts = snakeCase.table("usine_attempt_transcripts", {
159
208
  uniqueIndex("usine_attempt_transcript_envelope").on(table.attemptId, table.direction, table.channelSequence),
160
209
  index("usine_attempt_transcript_tail").on(table.attemptId, table.sequence),
161
210
  ]);
211
+ /**
212
+ * The approval Event each approved Run consumed, with its source. Older rows have no `channel`
213
+ * or `approver`; a UI approval without a configured operator login has no `approver`.
214
+ */
162
215
  export const approvals = snakeCase.table("usine_approvals", {
163
216
  runId: text()
164
217
  .$type()
@@ -169,6 +222,25 @@ export const approvals = snakeCase.table("usine_approvals", {
169
222
  .notNull()
170
223
  .unique()
171
224
  .references(() => events.eventId),
225
+ channel: text({ enum: APPROVAL_CHANNELS }).$type(),
226
+ approver: text().$type(),
227
+ }, (table) => [
228
+ check("usine_approvals_source", sql `(${table.channel} is null and ${table.approver} is null) or ${table.channel} = 'ui' or (${table.channel} = 'github-ask' and ${table.approver} is not null)`),
229
+ ]);
230
+ /**
231
+ * The Events recorded by running a closed Run again (#152), with the original Run and the
232
+ * requesting login, which is `null` if `usine.yaml` sets no operator login.
233
+ */
234
+ export const runAgainEvents = snakeCase.table("usine_run_again_events", {
235
+ eventId: text()
236
+ .$type()
237
+ .primaryKey()
238
+ .references(() => triggerEvents.eventId),
239
+ fromRunId: text()
240
+ .$type()
241
+ .notNull()
242
+ .references(() => runs.runId),
243
+ requestedBy: text().$type(),
172
244
  });
173
245
  export const ignoredEvents = snakeCase.table("usine_ignored_events", {
174
246
  eventId: text()
@@ -179,22 +251,12 @@ export const ignoredEvents = snakeCase.table("usine_ignored_events", {
179
251
  }, (table) => [
180
252
  check("usine_ignored_events_reason", sql `${table.reason} in ('superseded', 'revoked')`),
181
253
  ]);
182
- export const workflowCommands = snakeCase.table("usine_workflow_commands", {
183
- runId: text()
184
- .$type()
185
- .notNull()
186
- .references(() => runs.runId),
187
- command: text({ enum: WORKFLOW_COMMANDS }).$type().notNull(),
188
- }, (table) => [
189
- check("usine_workflow_commands_command", sql `${table.command} in ('Approve', 'Continue', 'Interrupt', 'Resume')`),
190
- primaryKey({ columns: [table.runId, table.command] }),
191
- ]);
192
- /** Cursors that only save work; each owner validates its own value. */
254
+ /** Cursors whose loss only repeats work; each owner validates its value. */
193
255
  export const cursors = snakeCase.table("usine_cursors", {
194
256
  cursorKey: text().primaryKey(),
195
257
  valueJson: text({ mode: "json" }).$type().notNull(),
196
258
  }, (table) => [check("usine_cursors_value_json_valid", sql `json_valid(${table.valueJson})`)]);
197
- /** The latest payload seen for each Item, for operator reads. */
259
+ /** The latest payload of each Item, and the time a poll found it missing on GitHub. */
198
260
  export const itemProjections = snakeCase.table("usine_item_projections", {
199
261
  itemKey: text().$type().primaryKey(),
200
262
  repository: text().$type().notNull(),
@@ -202,11 +264,11 @@ export const itemProjections = snakeCase.table("usine_item_projections", {
202
264
  itemNumber: integer({ mode: "number" }).notNull(),
203
265
  contentHash: text().notNull(),
204
266
  payloadJson: text({ mode: "json" }).$type().notNull(),
267
+ goneAt: text(),
205
268
  }, (table) => [
206
269
  check("usine_item_projections_number", sql `${table.itemNumber} >= 1`),
207
270
  check("usine_item_projections_payload_json_valid", sql `json_valid(${table.payloadJson})`),
208
271
  uniqueIndex("usine_item_projection_number").on(table.repository, table.itemNumber),
209
- index("usine_item_projection_repository").on(table.repository, table.itemNumber),
210
272
  ]);
211
273
  /** The latest complete label catalog for each managed repository. */
212
274
  export const repositoryLabelProjections = snakeCase.table("usine_repository_label_projections", {
@@ -215,12 +277,27 @@ export const repositoryLabelProjections = snakeCase.table("usine_repository_labe
215
277
  }, (table) => [
216
278
  check("usine_repository_label_projections_labels_json_valid", sql `json_valid(${table.labelsJson})`),
217
279
  ]);
218
- /** Operator-owned runtime toggles, kept apart from authored loop files (ADR 0009). */
280
+ /** The label changes of operator Board moves, each recorded before it's sent to GitHub. */
281
+ export const boardMoves = snakeCase.table("usine_board_moves", {
282
+ moveId: integer({ mode: "number" }).primaryKey({ autoIncrement: true }),
283
+ repository: text().$type().notNull(),
284
+ itemKey: text().$type().notNull(),
285
+ movedAt: text().notNull(),
286
+ fromLane: text().notNull(),
287
+ toLane: text().notNull(),
288
+ addedJson: text({ mode: "json" }).$type().notNull(),
289
+ removedJson: text({ mode: "json" }).$type().notNull(),
290
+ }, (table) => [
291
+ check("usine_board_moves_added_json_valid", sql `json_valid(${table.addedJson})`),
292
+ check("usine_board_moves_removed_json_valid", sql `json_valid(${table.removedJson})`),
293
+ index("usine_board_moves_item").on(table.itemKey, table.movedAt),
294
+ ]);
295
+ /** Operator runtime toggles, separate from Loop files (ADR 0009). */
219
296
  export const loopRuntime = snakeCase.table("usine_loop_runtime", {
220
297
  loopName: text().$type().primaryKey(),
221
298
  paused: integer({ mode: "boolean" }).notNull(),
222
299
  });
223
- /** Single row whose version invalidates cached operator projections. */
300
+ /** A single row whose version invalidates cached operator projections. */
224
301
  export const projectionRevision = snakeCase.table("usine_projection_revision", {
225
302
  singleton: integer({ mode: "number" }).primaryKey().default(1),
226
303
  revision: integer({ mode: "number" }).notNull().default(0),
@@ -1 +1 @@
1
- {"version":3,"file":"schema.js","sourceRoot":"","sources":["../../src/database/schema.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"schema.js","sourceRoot":"","sources":["../../src/database/schema.ts"],"names":[],"mappings":"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"}
@@ -1,11 +1,11 @@
1
1
  import type { RunId } from "@usine/core/run";
2
2
  import { Context, Effect, Layer } from "effect";
3
3
  declare const AttemptAdmission_base: Context.ServiceClass<AttemptAdmission, "@usine/engine/AttemptAdmission", {
4
- /** Admits and brackets one Attempt through outcome persistence; denied work waits for runtime teardown. */
4
+ /** Runs `attempt` and tracks it until its outcome is persisted. If admission is closed, waits for runtime teardown. */
5
5
  readonly withAttempt: <A, E, R>(runId: RunId, attempt: Effect.Effect<A, E, R>) => Effect.Effect<A, E, R>;
6
6
  readonly drain: () => Effect.Effect<void>;
7
7
  }>;
8
- /** Process-local Attempt admission. Durable Runs stay recoverable when admission closes (ADR 0023). */
8
+ /** The process-local gate for starting Attempts; closing it leaves durable Runs recoverable (ADR 0023). */
9
9
  export declare class AttemptAdmission extends AttemptAdmission_base {
10
10
  static readonly layer: Layer.Layer<AttemptAdmission, never, never>;
11
11
  }
@@ -0,0 +1 @@
1
+ {"version":3,"file":"admission.d.ts","sourceRoot":"","sources":["../../src/engine/admission.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,EAAE,OAAO,EAAY,MAAM,EAAE,KAAK,EAAe,MAAM,QAAQ,CAAC;;IAOnE,uHAAuH;0BACjG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAC5B,KAAK,EAAE,KAAK,EACZ,OAAO,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,KAC5B,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;oBACX,MAAM,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC;;AAT7C,2GAA2G;AAC3G,qBAAa,gBAAiB,SAAQ,qBAUD;IACnC,MAAM,CAAC,QAAQ,CAAC,KAAK,8CAkEnB;CACH"}
@@ -1,6 +1,6 @@
1
1
  import { Context, Deferred, Effect, Layer, Option, Ref } from "effect";
2
- import { RunEngineShutdown } from "../engine/shutdown.js";
3
- /** Process-local Attempt admission. Durable Runs stay recoverable when admission closes (ADR 0023). */
2
+ import { RunEngineShutdown } from "./shutdown.js";
3
+ /** The process-local gate for starting Attempts; closing it leaves durable Runs recoverable (ADR 0023). */
4
4
  export class AttemptAdmission extends Context.Service()("@usine/engine/AttemptAdmission") {
5
5
  static layer = Layer.effect(AttemptAdmission, Effect.gen(function* () {
6
6
  const hostShutdown = yield* Effect.serviceOption(RunEngineShutdown);
@@ -11,8 +11,8 @@ export class AttemptAdmission extends Context.Service()("@usine/engine/AttemptAd
11
11
  const empty = yield* Deferred.make();
12
12
  const enter = Effect.fn("AttemptAdmission.enter")(function* (runId) {
13
13
  yield* Effect.annotateCurrentSpan({ runId });
14
- // The host completes the same latch synchronously on a signal. This
15
- // read and the active-set update are one atomic Ref.modify callback.
14
+ // The host completes the latch synchronously on a signal, so the check and the set update
15
+ // are in one atomic `Ref.modify`.
16
16
  const admitted = yield* Ref.modify(active, (current) => Deferred.isDoneUnsafe(shutdown)
17
17
  ? [false, current]
18
18
  : [true, new Set([...current, runId])]);
@@ -0,0 +1 @@
1
+ {"version":3,"file":"admission.js","sourceRoot":"","sources":["../../src/engine/admission.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,69 @@
1
+ import { AttemptId } from "@usine/core/attempt";
2
+ import type { AttemptRecovery } from "@usine/core/attempt/salvage";
3
+ import { Effect, Option, Result, Schema } from "effect";
4
+ import type { WorkerLease } from "../step-executor.ts";
5
+ declare const ParentStopUnconfirmedError_base: Schema.Class<ParentStopUnconfirmedError, Schema.TaggedStruct<"ParentStopUnconfirmedError", {
6
+ readonly attemptId: Schema.brand<Schema.NonEmptyString, "AttemptId">;
7
+ readonly cause: Schema.Defect;
8
+ }>, import("effect/Cause").YieldableError>;
9
+ /**
10
+ * An error for an Attempt whose parent task couldn't be confirmed stopped. Its checkout and
11
+ * Worker slot stay kept, and the Run's next Attempt doesn't start.
12
+ */
13
+ declare class ParentStopUnconfirmedError extends ParentStopUnconfirmedError_base {
14
+ }
15
+ /**
16
+ * Creates the checkout recovery steps that `RunDriver` uses at startup and on reattach.
17
+ *
18
+ * `atStartup` reconciles the checkouts left on Workers through `StepExecutor.recover`. It keeps
19
+ * the checkout, and occupies a Worker slot through `StepExecutor.occupy` (#177), for an open
20
+ * Attempt whose parent task is live or unreadable and for a closed Attempt whose parent task
21
+ * isn't confirmed stopped. `acquired` hands a kept checkout and slot to the reattaching
22
+ * execution. `reconcile` reconciles a kept checkout that the Run closes without that hand-off
23
+ * (#180), and releases the slot once the parent task is confirmed stopped.
24
+ */
25
+ export declare const checkoutRecoveryFor: (store: {
26
+ readonly approve: (runId: import("@usine/core/run").RunId, approval: import("@usine/core/event").Event, source: import("@usine/core/run/approval").ApprovalSource) => Effect.Effect<boolean, import("./error.ts").RunStoreError>;
27
+ readonly appendTranscript: (direction: import("@usine/core/attempt/channel").Direction, envelope: import("@usine/core/attempt/channel").Envelope) => Effect.Effect<void, import("./error.ts").RunStoreError>;
28
+ readonly beginAttempt: (runId: import("@usine/core/run").RunId, worker: import("@usine/core/worker").WorkerName, live: Option.Option<AttemptId>) => Effect.Effect<import("../store/store.ts").AttemptStarted | import("../store/store.ts").AttemptRecoveryFailed | import("../store/store.ts").RunClosed, import("./error.ts").RunStoreError>;
29
+ readonly cancel: (runId: import("@usine/core/run").RunId) => Effect.Effect<import("../store/store.ts").CancelOutcome, import("./error.ts").RunStoreError>;
30
+ readonly claimQueued: (submission: import("./submission.ts").Submission, runId: import("@usine/core/run").RunId) => Effect.Effect<Option.Option<import("@usine/core/run").RunId>, import("./error.ts").RunStoreError>;
31
+ readonly finishAttempt: (attempt: import("@usine/core/attempt").Attempt, result: Result.Result<import("@usine/core/step/result").StepResult, import("@usine/core/attempt/failure").AttemptFailure>) => Effect.Effect<import("./lifecycle.ts").FinishDecision, import("./error.ts").RunStoreError>;
32
+ readonly nextQueued: (runId: import("@usine/core/run").RunId) => Effect.Effect<Option.Option<import("../store/queries.ts").QueuedEvents>, import("./error.ts").RunStoreError>;
33
+ readonly parkForApproval: (runId: import("@usine/core/run").RunId) => Effect.Effect<import("@usine/core/run/state").RunState, import("./error.ts").RunStoreError>;
34
+ readonly pendingContinuations: Effect.Effect<ReadonlyArray<import("@usine/core/run").RunId>, import("./error.ts").RunStoreError>;
35
+ readonly runIdsToDrive: Effect.Effect<ReadonlyArray<import("@usine/core/run").RunId>, import("./error.ts").RunStoreError>;
36
+ readonly recordAndClaim: (submission: import("./submission.ts").Submission, requestedRunId: import("@usine/core/run").RunId) => Effect.Effect<import("../store/store.ts").Claim, import("./error.ts").RunStoreError>;
37
+ readonly recordSalvage: (attemptId: AttemptId, salvage: import("@usine/core/attempt/salvage").AttemptSalvage) => Effect.Effect<void, import("./error.ts").RunStoreError>;
38
+ readonly recordComments: (attemptId: AttemptId, comments: ReadonlyArray<import("@usine/core/step/result").Comment>) => Effect.Effect<void, import("./error.ts").RunStoreError>;
39
+ readonly attemptWindows: (attemptId: AttemptId) => Effect.Effect<import("@usine/core/attempt").AttemptWindows, import("./error.ts").RunStoreError>;
40
+ readonly salvageCandidates: Effect.Effect<ReadonlyArray<AttemptRecovery>, import("./error.ts").RunStoreError>;
41
+ readonly salvageCandidate: (attemptId: AttemptId) => Effect.Effect<Option.Option<AttemptRecovery>, import("./error.ts").RunStoreError>;
42
+ readonly discardLeftovers: (worker: import("@usine/core/worker").WorkerName) => Effect.Effect<number, import("./error.ts").RunStoreError>;
43
+ readonly openAttempts: (worker: import("@usine/core/worker").WorkerName) => Effect.Effect<number, import("./error.ts").RunStoreError>;
44
+ readonly resolveFailure: (runId: import("@usine/core/run").RunId, attemptId: AttemptId) => Effect.Effect<boolean, import("./error.ts").RunStoreError>;
45
+ readonly retry: (runId: import("@usine/core/run").RunId, request?: import("./retry.ts").RetryRequest) => Effect.Effect<boolean, import("./error.ts").RunStoreError>;
46
+ readonly runAgain: (runId: import("@usine/core/run").RunId, request: import("./run-again.ts").RunAgainRequest) => Effect.Effect<import("./run-again.ts").RunAgainResult, import("./error.ts").RunStoreError>;
47
+ readonly revoke: (loop: import("@usine/core/loop").LoopName, itemKey: import("@usine/core/item").ItemKey) => Effect.Effect<ReadonlyArray<import("@usine/core/run").RunId>, import("./error.ts").RunStoreError>;
48
+ readonly revokeQueued: (queued: import("../store/queries.ts").QueuedEvents) => Effect.Effect<number, import("./error.ts").RunStoreError>;
49
+ readonly snapshot: (runId: import("@usine/core/run").RunId) => Effect.Effect<import("../run-reader/model.ts").RunSnapshot, import("./error.ts").RunStoreError>;
50
+ readonly submission: (runId: import("@usine/core/run").RunId) => Effect.Effect<import("./submission.ts").Submission, import("./error.ts").RunStoreError>;
51
+ readonly transcript: (query: import("../transcript.ts").TranscriptQuery) => Effect.Effect<ReadonlyArray<import("../transcript.ts").TranscriptEntry>, import("./error.ts").RunStoreError>;
52
+ }, executor: {
53
+ readonly workers: Effect.Effect<ReadonlyArray<import("@usine/core/worker").WorkerName>>;
54
+ readonly isLive: (attemptId: AttemptId) => Effect.Effect<boolean, import("@usine/core/attempt/failure").AttemptFailure>;
55
+ readonly outcome: (attemptId: AttemptId) => Effect.Effect<Option.Option<Result.Result<import("@usine/core/step/result").StepResult, import("@usine/core/attempt/failure").AttemptFailure>>, import("@usine/core/attempt/failure").AttemptFailure>;
56
+ readonly recover: <E>(attempt: AttemptRecovery, record: import("@usine/core/attempt/salvage").RecoverySink<E>) => Effect.Effect<void, E | import("@usine/core/attempt/failure").AttemptFailure>;
57
+ readonly interrupt: (attemptId: AttemptId) => Effect.Effect<void, import("@usine/core/attempt/failure").AttemptFailure>;
58
+ readonly intervene: (attemptId: AttemptId, intervention: import("@usine/core/attempt/channel").Intervention) => Effect.Effect<void, import("@usine/core/attempt/failure").AttemptFailure>;
59
+ readonly reserve: (submission: import("./submission.ts").Submission, worker: Option.Option<import("@usine/core/worker").WorkerName>) => Effect.Effect<WorkerLease, import("@usine/core/attempt/failure").AttemptFailure>;
60
+ readonly occupy: (worker: import("@usine/core/worker").WorkerName) => Effect.Effect<WorkerLease>;
61
+ readonly execute: (execution: import("../step-executor.ts").StepExecution, io: import("../step-executor.ts").ExecutionSink) => Effect.Effect<import("@usine/core/step/result").StepResult, import("@usine/core/attempt/failure").AttemptFailure>;
62
+ }) => Effect.Effect<{
63
+ readonly atStartup: () => Effect.Effect<(string & import("effect/Brand").Brand<"AttemptId">)[], import("./error.ts").EnginePersistenceError | import("./error.ts").RunNotFoundError | import("./error.ts").RunOperationRejectedError | import("./error.ts").RunRetryBlockedError, never>;
64
+ readonly reattachSlot: (attemptId: string & import("effect/Brand").Brand<"AttemptId">) => Effect.Effect<Option.Option<WorkerLease>, never, never>;
65
+ readonly acquired: (attemptId: string & import("effect/Brand").Brand<"AttemptId">) => Effect.Effect<void, never, never>;
66
+ readonly reconcile: (attemptId: string & import("effect/Brand").Brand<"AttemptId">) => Effect.Effect<void, ParentStopUnconfirmedError, never>;
67
+ }, never, never>;
68
+ export {};
69
+ //# sourceMappingURL=checkout-recovery.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"checkout-recovery.d.ts","sourceRoot":"","sources":["../../src/engine/checkout-recovery.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAChD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAC;AACnE,OAAO,EAAwB,MAAM,EAAE,MAAM,EAAO,MAAM,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AACnF,OAAO,KAAK,EAAgB,WAAW,EAAE,MAAM,qBAAqB,CAAC;;;;;AAGrE;;;GAGG;AACH,cAAM,0BAA2B,SAAQ,+BAKvC;CAAG;AAWL;;;;;;;;;GASG;AACH,eAAO,MAAM,mBAAmB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;gBAyO9B,CAAC"}
@@ -0,0 +1,181 @@
1
+ import { AttemptId } from "@usine/core/attempt";
2
+ import { Array as EffectArray, Effect, Option, Ref, Result, Schema } from "effect";
3
+ /**
4
+ * An error for an Attempt whose parent task couldn't be confirmed stopped. Its checkout and
5
+ * Worker slot stay kept, and the Run's next Attempt doesn't start.
6
+ */
7
+ class ParentStopUnconfirmedError extends Schema.TaggedError("@usine/engine/internal/ParentStopUnconfirmedError")("ParentStopUnconfirmedError", {
8
+ attemptId: AttemptId,
9
+ cause: Schema.Defect(),
10
+ }) {
11
+ }
12
+ const without = (leases, attemptId) => {
13
+ const remaining = new Map(leases);
14
+ remaining.delete(attemptId);
15
+ return remaining;
16
+ };
17
+ /**
18
+ * Creates the checkout recovery steps that `RunDriver` uses at startup and on reattach.
19
+ *
20
+ * `atStartup` reconciles the checkouts left on Workers through `StepExecutor.recover`. It keeps
21
+ * the checkout, and occupies a Worker slot through `StepExecutor.occupy` (#177), for an open
22
+ * Attempt whose parent task is live or unreadable and for a closed Attempt whose parent task
23
+ * isn't confirmed stopped. `acquired` hands a kept checkout and slot to the reattaching
24
+ * execution. `reconcile` reconciles a kept checkout that the Run closes without that hand-off
25
+ * (#180), and releases the slot once the parent task is confirmed stopped.
26
+ */
27
+ export const checkoutRecoveryFor = Effect.fn("CheckoutRecovery.for")(function* (store, executor) {
28
+ // The checkouts kept at startup, by Attempt, with their occupied slots.
29
+ const kept = yield* Ref.make(new Map());
30
+ /** Reconciles `attempt`'s checkout. On failure, logs an error and leaves the checkout on its Worker. */
31
+ const recover = (attempt) => executor
32
+ .recover(attempt, {
33
+ salvage: (salvage) => store.recordSalvage(attempt.attemptId, salvage),
34
+ comments: (comments) => store.recordComments(attempt.attemptId, comments),
35
+ windows: store.attemptWindows(attempt.attemptId),
36
+ })
37
+ .pipe(Effect.tapError((error) => Effect.logError("Attempt salvage reconciliation failed; work retained", {
38
+ attemptId: attempt.attemptId,
39
+ worker: attempt.worker,
40
+ message: String(error),
41
+ })), Effect.ignore);
42
+ /**
43
+ * Keeps `attempt`'s checkout and occupies a slot on its Worker, recording the lease in the same
44
+ * uninterruptible step. The lease's `release` frees the slot at most once.
45
+ */
46
+ const keep = Effect.fn("CheckoutRecovery.keep")(function* (attempt) {
47
+ yield* executor.occupy(attempt.worker).pipe(Effect.flatMap((lease) => Effect.cached(lease.release).pipe(Effect.map((release) => ({ worker: lease.worker, release })))), Effect.flatMap((lease) => Ref.update(kept, (leases) => new Map(leases).set(attempt.attemptId, lease))), Effect.uninterruptible);
48
+ });
49
+ /**
50
+ * Keeps the checkout and a slot for an open Attempt whose parent task is live or whose liveness
51
+ * can't be read. Otherwise reconciles the checkout.
52
+ */
53
+ const recoverOpen = Effect.fn("CheckoutRecovery.recoverOpen")(function* (attempt) {
54
+ const fields = { attemptId: attempt.attemptId, worker: attempt.worker };
55
+ yield* Effect.annotateCurrentSpan(fields);
56
+ const live = yield* executor.isLive(attempt.attemptId).pipe(Effect.result);
57
+ if (Result.isSuccess(live) && !live.success)
58
+ return yield* recover(attempt);
59
+ if (Result.isFailure(live))
60
+ yield* Effect.logWarning("Could not read whether an open Attempt's parent task is live; its checkout stays for its Run to decide", { ...fields, errorTag: live.failure._tag, message: live.failure.message });
61
+ else
62
+ yield* Effect.logInfo("Leaving the checkout of an open Attempt whose parent task is live for its Run to reattach", fields);
63
+ yield* keep(attempt);
64
+ yield* Effect.logInfo("Occupied a slot on the Worker of an open Attempt kept for its Run to reattach", fields);
65
+ });
66
+ /**
67
+ * Reconciles a closed Attempt's checkout if its parent task is confirmed stopped. Otherwise
68
+ * keeps the checkout and a slot, and returns the Attempt ID (#177).
69
+ */
70
+ const recoverClosed = Effect.fn("CheckoutRecovery.recoverClosed")(function* (attempt) {
71
+ const fields = { attemptId: attempt.attemptId, worker: attempt.worker };
72
+ yield* Effect.annotateCurrentSpan(fields);
73
+ // `recover` also stops the task, but its failure doesn't distinguish an unconfirmed stop from
74
+ // a failed salvage.
75
+ const stopped = yield* executor.interrupt(attempt.attemptId).pipe(Effect.result);
76
+ if (Result.isSuccess(stopped)) {
77
+ yield* recover(attempt);
78
+ return Option.none();
79
+ }
80
+ yield* Effect.logWarning("Could not confirm that the parent task of a closed Attempt stopped; its checkout and a slot of its Worker stay kept until a reconcile confirms the stop", { ...fields, errorTag: stopped.failure._tag, message: stopped.failure.message });
81
+ yield* keep(attempt);
82
+ return Option.some(attempt.attemptId);
83
+ });
84
+ /**
85
+ * Reconciles every persisted Attempt on a configured Worker. Returns the closed Attempts whose
86
+ * parent task isn't confirmed stopped.
87
+ */
88
+ const atStartup = Effect.fn("CheckoutRecovery.atStartup")(function* () {
89
+ const configured = new Set(yield* executor.workers);
90
+ const candidates = yield* store.salvageCandidates;
91
+ const reconcilable = candidates.filter(({ worker }) => configured.has(worker));
92
+ const unconfigured = candidates.filter(({ worker }) => !configured.has(worker));
93
+ if (unconfigured.length > 0) {
94
+ yield* Effect.logWarning("Attempts recorded on Workers that are not configured were not reconciled; their checkouts stay until those Workers are configured again or their leftovers are discarded", {
95
+ attempts: unconfigured.length,
96
+ workers: [...new Set(unconfigured.map(({ worker }) => worker))].sort().join(","),
97
+ });
98
+ }
99
+ // Runs before Run recovery, so a retry starts only after the previous Attempt's work is
100
+ // recorded. A failed recovery leaves the checkout on disk.
101
+ const unstopped = yield* Effect.forEach(reconcilable, (attempt) => attempt.open
102
+ ? recoverOpen(attempt).pipe(Effect.as(Option.none()))
103
+ : recoverClosed(attempt));
104
+ return EffectArray.getSomes(unstopped);
105
+ });
106
+ /**
107
+ * Returns the slot that startup occupied for `attemptId`, or `None`. Until the execution
108
+ * acquires the checkout, the slot's `release` does nothing; `reconcile` frees it.
109
+ */
110
+ const reattachSlot = Effect.fn("CheckoutRecovery.reattachSlot")(function* (attemptId) {
111
+ const occupied = Option.fromUndefinedOr((yield* Ref.get(kept)).get(attemptId));
112
+ return Option.map(occupied, (lease) => ({
113
+ worker: lease.worker,
114
+ release: Ref.get(kept).pipe(Effect.flatMap((leases) => leases.has(attemptId)
115
+ ? Effect.logInfo("The slot startup occupied stays kept with the checkout no execution acquired, until the Attempt's parent task is confirmed stopped", { attemptId, worker: lease.worker })
116
+ : lease.release)),
117
+ }));
118
+ });
119
+ /**
120
+ * Hands the kept checkout of `attemptId` to its execution; the Run then releases the slot when
121
+ * the Attempt ends. Does nothing for other Attempts.
122
+ */
123
+ const acquired = Effect.fn("CheckoutRecovery.acquired")(function* (attemptId) {
124
+ const handedOver = yield* Ref.modify(kept, (leases) => [
125
+ leases.has(attemptId),
126
+ without(leases, attemptId),
127
+ ]);
128
+ if (handedOver)
129
+ yield* Effect.logInfo("The reattached Attempt's execution acquired the checkout startup kept; its executor releases the checkout from here, and its Run the slot once the Attempt ends", { attemptId });
130
+ });
131
+ /**
132
+ * Reconciles the kept checkout of `attemptId` after its parent task is confirmed stopped. Fails
133
+ * with `ParentStopUnconfirmedError`, leaving the checkout, if the stop isn't confirmed.
134
+ */
135
+ const recoverKept = Effect.fn("CheckoutRecovery.recoverKept")(function* (attemptId) {
136
+ // The parent task must stop before the reconcile or the next Attempt. `recover` also stops
137
+ // it, but its failure doesn't distinguish an unconfirmed stop from a failed salvage.
138
+ const stopped = yield* executor.interrupt(attemptId).pipe(Effect.result);
139
+ if (Result.isFailure(stopped)) {
140
+ yield* Effect.logWarning("Could not confirm that the parent task of an Attempt its Run does not reattach stopped; its checkout and its Worker's slot stay, and the Run starts no next Attempt until the stop is confirmed", { attemptId, errorTag: stopped.failure._tag, message: stopped.failure.message });
141
+ return yield* new ParentStopUnconfirmedError({ attemptId, cause: stopped.failure });
142
+ }
143
+ const found = yield* store.salvageCandidate(attemptId).pipe(Effect.result);
144
+ if (Result.isFailure(found)) {
145
+ yield* Effect.logError("Could not read the Attempt whose checkout startup kept; the checkout stays until the next startup", { attemptId, errorTag: found.failure._tag });
146
+ return;
147
+ }
148
+ if (Option.isNone(found.success)) {
149
+ yield* Effect.logWarning("The leftovers of the Attempt whose checkout startup kept were discarded; the checkout stays", { attemptId });
150
+ return;
151
+ }
152
+ const attempt = found.success.value;
153
+ const fields = { attemptId, worker: attempt.worker, open: attempt.open };
154
+ yield* Effect.annotateCurrentSpan(fields);
155
+ if (!(yield* executor.workers).includes(attempt.worker)) {
156
+ yield* Effect.logWarning("The Worker of the Attempt whose checkout startup kept is no longer configured; the checkout stays until it is configured again or its leftovers are discarded", fields);
157
+ return;
158
+ }
159
+ // The Run doesn't reattach the Attempt, so reconcile even if `isLive` still reports it, as for
160
+ // an unharvested parent report.
161
+ yield* Effect.logInfo("Reconciling the checkout startup kept for an Attempt that was not reattached", fields);
162
+ yield* recover(attempt);
163
+ });
164
+ const reconcile = Effect.fn("CheckoutRecovery.reconcile")(function* (attemptId) {
165
+ yield* Effect.annotateCurrentSpan({ attemptId });
166
+ const occupied = (yield* Ref.get(kept)).get(attemptId);
167
+ if (occupied === undefined) {
168
+ yield* Effect.logDebug("No checkout startup kept for the Attempt awaits reconciliation", {
169
+ attemptId,
170
+ });
171
+ return;
172
+ }
173
+ yield* recoverKept(attemptId);
174
+ // Removed only after reconciling, so a cancel during the reconcile reconciles again and the
175
+ // slot stays taken while the parent task can still run (#177).
176
+ yield* Ref.update(kept, (leases) => without(leases, attemptId)).pipe(Effect.andThen(occupied.release), Effect.uninterruptible);
177
+ yield* Effect.logInfo("Released the slot startup occupied for an Attempt whose parent task is confirmed stopped", { attemptId, worker: occupied.worker });
178
+ });
179
+ return { atStartup, reattachSlot, acquired, reconcile };
180
+ });
181
+ //# sourceMappingURL=checkout-recovery.js.map