@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.
- package/README.md +109 -38
- package/dist/board-moves/board-moves.d.ts +20 -0
- package/dist/board-moves/board-moves.d.ts.map +1 -0
- package/dist/board-moves/board-moves.js +74 -0
- package/dist/board-moves/board-moves.js.map +1 -0
- package/dist/board-moves/model.d.ts +21 -0
- package/dist/board-moves/model.d.ts.map +1 -0
- package/dist/board-moves/model.js +22 -0
- package/dist/board-moves/model.js.map +1 -0
- package/dist/cursor/cursor.d.ts +2 -6
- package/dist/cursor/cursor.d.ts.map +1 -1
- package/dist/cursor/cursor.js +2 -6
- package/dist/cursor/cursor.js.map +1 -1
- package/dist/cycle-budget/cycle-budget.d.ts +6 -6
- package/dist/cycle-budget/cycle-budget.d.ts.map +1 -1
- package/dist/cycle-budget/cycle-budget.js +5 -5
- package/dist/cycle-budget/cycle-budget.js.map +1 -1
- package/dist/cycle-budget/model.d.ts +2 -2
- package/dist/cycle-budget/model.d.ts.map +1 -1
- package/dist/cycle-budget/model.js +2 -2
- package/dist/cycle-budget/model.js.map +1 -1
- package/dist/cycle-budget/queries.d.ts +1 -1
- package/dist/cycle-budget/queries.d.ts.map +1 -1
- package/dist/cycle-budget/queries.js +3 -3
- package/dist/cycle-budget/queries.js.map +1 -1
- package/dist/database/database.d.ts +1 -1
- package/dist/database/database.d.ts.map +1 -1
- package/dist/database/local-sqlite.d.ts +10 -8
- package/dist/database/local-sqlite.d.ts.map +1 -1
- package/dist/database/local-sqlite.js +11 -10
- package/dist/database/local-sqlite.js.map +1 -1
- package/dist/database/schema.d.ts +533 -22
- package/dist/database/schema.d.ts.map +1 -1
- package/dist/database/schema.js +100 -23
- package/dist/database/schema.js.map +1 -1
- package/dist/{workflow → engine}/admission.d.ts +2 -2
- package/dist/engine/admission.d.ts.map +1 -0
- package/dist/{workflow → engine}/admission.js +4 -4
- package/dist/engine/admission.js.map +1 -0
- package/dist/engine/checkout-recovery.d.ts +69 -0
- package/dist/engine/checkout-recovery.d.ts.map +1 -0
- package/dist/engine/checkout-recovery.js +181 -0
- package/dist/engine/checkout-recovery.js.map +1 -0
- package/dist/engine/engine.d.ts +55 -26
- package/dist/engine/engine.d.ts.map +1 -1
- package/dist/engine/engine.js +118 -128
- package/dist/engine/engine.js.map +1 -1
- package/dist/engine/error.d.ts +29 -10
- package/dist/engine/error.d.ts.map +1 -1
- package/dist/engine/error.js +28 -8
- package/dist/engine/error.js.map +1 -1
- package/dist/engine/lifecycle.d.ts +81 -28
- package/dist/engine/lifecycle.d.ts.map +1 -1
- package/dist/engine/lifecycle.js +83 -44
- package/dist/engine/lifecycle.js.map +1 -1
- package/dist/engine/retry.d.ts +16 -0
- package/dist/engine/retry.d.ts.map +1 -0
- package/dist/engine/retry.js +18 -0
- package/dist/engine/retry.js.map +1 -0
- package/dist/engine/run-again.d.ts +45 -0
- package/dist/engine/run-again.d.ts.map +1 -0
- package/dist/engine/run-again.js +56 -0
- package/dist/engine/run-again.js.map +1 -0
- package/dist/engine/run-driver.d.ts +54 -0
- package/dist/engine/run-driver.d.ts.map +1 -0
- package/dist/engine/run-driver.js +362 -0
- package/dist/engine/run-driver.js.map +1 -0
- package/dist/engine/shutdown.d.ts +3 -4
- package/dist/engine/shutdown.d.ts.map +1 -1
- package/dist/engine/shutdown.js +3 -4
- package/dist/engine/shutdown.js.map +1 -1
- package/dist/engine/submission.d.ts +31 -11
- package/dist/engine/submission.d.ts.map +1 -1
- package/dist/engine/submission.js +42 -12
- package/dist/engine/submission.js.map +1 -1
- package/dist/item-projection/item-projection.d.ts +12 -4
- package/dist/item-projection/item-projection.d.ts.map +1 -1
- package/dist/item-projection/item-projection.js +41 -6
- package/dist/item-projection/item-projection.js.map +1 -1
- package/dist/item-projection/model.d.ts +5 -1
- package/dist/item-projection/model.d.ts.map +1 -1
- package/dist/item-projection/model.js +6 -2
- package/dist/item-projection/model.js.map +1 -1
- package/dist/loop-control/loop-control.d.ts +5 -5
- package/dist/loop-control/loop-control.d.ts.map +1 -1
- package/dist/loop-control/loop-control.js +4 -4
- package/dist/loop-control/loop-control.js.map +1 -1
- package/dist/loop-control/model.d.ts +1 -1
- package/dist/loop-control/model.d.ts.map +1 -1
- package/dist/loop-control/model.js +1 -1
- package/dist/loop-control/model.js.map +1 -1
- package/dist/repository-label-projection/model.d.ts +2 -2
- package/dist/repository-label-projection/model.d.ts.map +1 -1
- package/dist/repository-label-projection/model.js +2 -2
- package/dist/repository-label-projection/model.js.map +1 -1
- package/dist/repository-label-projection/repository-label-projection.d.ts +1 -1
- package/dist/repository-label-projection/repository-label-projection.d.ts.map +1 -1
- package/dist/repository-label-projection/repository-label-projection.js +1 -1
- package/dist/repository-label-projection/repository-label-projection.js.map +1 -1
- package/dist/run-reader/model.d.ts +62 -4
- package/dist/run-reader/model.d.ts.map +1 -1
- package/dist/run-reader/model.js +66 -7
- package/dist/run-reader/model.js.map +1 -1
- package/dist/run-reader/run-reader.d.ts +19 -9
- package/dist/run-reader/run-reader.d.ts.map +1 -1
- package/dist/run-reader/run-reader.js +23 -7
- package/dist/run-reader/run-reader.js.map +1 -1
- package/dist/step-executor.d.ts +64 -10
- package/dist/step-executor.d.ts.map +1 -1
- package/dist/step-executor.js +10 -2
- package/dist/step-executor.js.map +1 -1
- package/dist/store/attempt-windows.d.ts +8 -0
- package/dist/store/attempt-windows.d.ts.map +1 -0
- package/dist/store/attempt-windows.js +53 -0
- package/dist/store/attempt-windows.js.map +1 -0
- package/dist/store/codec.d.ts +207 -42
- package/dist/store/codec.d.ts.map +1 -1
- package/dist/store/codec.js +52 -14
- package/dist/store/codec.js.map +1 -1
- package/dist/store/leftovers.d.ts +10 -0
- package/dist/store/leftovers.d.ts.map +1 -0
- package/dist/store/leftovers.js +43 -0
- package/dist/store/leftovers.js.map +1 -0
- package/dist/store/loop-items.d.ts +16 -0
- package/dist/store/loop-items.d.ts.map +1 -0
- package/dist/store/loop-items.js +185 -0
- package/dist/store/loop-items.js.map +1 -0
- package/dist/store/queries.d.ts +342 -35
- package/dist/store/queries.d.ts.map +1 -1
- package/dist/store/queries.js +302 -107
- package/dist/store/queries.js.map +1 -1
- package/dist/store/store.d.ts +91 -54
- package/dist/store/store.d.ts.map +1 -1
- package/dist/store/store.js +468 -190
- package/dist/store/store.js.map +1 -1
- package/dist/store/transcript.d.ts +3 -3
- package/dist/store/transcript.d.ts.map +1 -1
- package/dist/store/transcript.js +25 -6
- package/dist/store/transcript.js.map +1 -1
- package/dist/transcript.d.ts +19 -20
- package/dist/transcript.d.ts.map +1 -1
- package/dist/transcript.js +23 -21
- package/dist/transcript.js.map +1 -1
- package/dist/trigger-condition.d.ts +23 -0
- package/dist/trigger-condition.d.ts.map +1 -0
- package/dist/trigger-condition.js +8 -0
- package/dist/trigger-condition.js.map +1 -0
- package/drizzle/20260917071139_resolve_run_failure/migration.sql +1 -0
- package/drizzle/20260917071139_resolve_run_failure/snapshot.json +1471 -0
- package/drizzle/20260918032643_attempt_salvage/migration.sql +1 -0
- package/drizzle/20260918032643_attempt_salvage/snapshot.json +1481 -0
- package/drizzle/20261011153856_drop_workflow_tables/migration.sql +4 -0
- package/drizzle/20261011153856_drop_workflow_tables/snapshot.json +1433 -0
- package/drizzle/20261017155043_attempt_salvage_check/migration.sql +41 -0
- package/drizzle/20261017155043_attempt_salvage_check/snapshot.json +1421 -0
- package/drizzle/20261018162700_discard_attempt_leftovers/migration.sql +1 -0
- package/drizzle/20261018162700_discard_attempt_leftovers/snapshot.json +1431 -0
- package/drizzle/20261018172605_loop_items_and_reopenings/migration.sql +15 -0
- package/drizzle/20261018172605_loop_items_and_reopenings/snapshot.json +1574 -0
- package/drizzle/20261018180339_attempt_ended_at/migration.sql +1 -0
- package/drizzle/20261018180339_attempt_ended_at/snapshot.json +1584 -0
- package/drizzle/20261019104043_run_approval_source/migration.sql +15 -0
- package/drizzle/20261019104043_run_approval_source/snapshot.json +1610 -0
- package/drizzle/20261019133538_board_moves/migration.sql +14 -0
- package/drizzle/20261019133538_board_moves/snapshot.json +1731 -0
- package/drizzle/20261019170538_item_projection_gone/migration.sql +1 -0
- package/drizzle/20261019170538_item_projection_gone/snapshot.json +1741 -0
- package/drizzle/20261019180649_run_again_events/migration.sql +7 -0
- package/drizzle/20261019180649_run_again_events/snapshot.json +1804 -0
- package/drizzle/20261019185008_trigger_event_permissions/migration.sql +1 -0
- package/drizzle/20261019185008_trigger_event_permissions/snapshot.json +1814 -0
- package/drizzle/20261020103746_attempt_start/migration.sql +5 -0
- package/drizzle/20261020103746_attempt_start/snapshot.json +1844 -0
- package/drizzle/20261020125211_attempt_comments/migration.sql +1 -0
- package/drizzle/20261020125211_attempt_comments/snapshot.json +1854 -0
- package/drizzle/20261020191320_run_closed_at/migration.sql +6 -0
- package/drizzle/20261020191320_run_closed_at/snapshot.json +1864 -0
- package/drizzle/20261023091428_rename_loop_item_hold_to_suppression/migration.sql +2 -0
- package/drizzle/20261023091428_rename_loop_item_hold_to_suppression/snapshot.json +1867 -0
- package/package.json +15 -5
- package/dist/workflow/admission.d.ts.map +0 -1
- package/dist/workflow/admission.js.map +0 -1
- package/dist/workflow/command.d.ts +0 -13
- package/dist/workflow/command.d.ts.map +0 -1
- package/dist/workflow/command.js +0 -17
- package/dist/workflow/command.js.map +0 -1
- package/dist/workflow/workflow.d.ts +0 -18
- package/dist/workflow/workflow.d.ts.map +0 -1
- package/dist/workflow/workflow.js +0 -108
- 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":"
|
|
1
|
+
{"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../src/database/schema.ts"],"names":[],"mappings":"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"}
|
package/dist/database/schema.js
CHANGED
|
@@ -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
|
|
39
|
+
// The Item's cycle generation, read before fetching the trigger input.
|
|
34
40
|
cycleGeneration: integer().notNull().default(0),
|
|
35
|
-
// The execution context
|
|
36
|
-
//
|
|
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
|
-
|
|
98
|
-
|
|
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
|
-
|
|
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
|
|
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
|
-
/**
|
|
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
|
-
/**
|
|
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":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,yBAAyB,CAAC;AAClD,OAAO,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAC9C,OAAO,EAAE,aAAa,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAC5E,OAAO,KAAK,cAAc,MAAM,6BAA6B,CAAC;AAC9D,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC;AACtD,OAAO,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAC3C,OAAO,EAAE,UAAU,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AACxE,OAAO,EACL,QAAQ,EACR,qBAAqB,EAErB,gBAAgB,GAEjB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,cAAc,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AAC5E,OAAO,EAAE,KAAK,EAAE,MAAM,iBAAiB,CAAC;AACxC,OAAO,EAAE,iBAAiB,EAAwB,MAAM,0BAA0B,CAAC;AACnF,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC5C,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAChD,OAAO,EAAE,GAAG,EAAE,MAAM,aAAa,CAAC;AAClC,OAAO,EACL,KAAK,EACL,UAAU,EACV,KAAK,EACL,OAAO,EACP,UAAU,EACV,SAAS,EACT,IAAI,EACJ,WAAW,GACZ,MAAM,yBAAyB,CAAC;AACjC,OAAO,EAAE,eAAe,EAAqB,MAAM,yBAAyB,CAAC;AAE7E,MAAM,CAAC,MAAM,MAAM,GAAG,SAAS,CAAC,KAAK,CACnC,cAAc,EACd;IACE,OAAO,EAAE,IAAI,EAAE,CAAC,KAAK,EAAW,CAAC,UAAU,EAAE;IAC7C,QAAQ,EAAE,IAAI,EAAE,CAAC,KAAK,EAAY,CAAC,OAAO,EAAE,CAAC,MAAM,EAAE;IACrD,WAAW,EAAE,IAAI,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC,KAAK,EAAW,CAAC,OAAO,EAAE;IAC9D,UAAU,EAAE,IAAI,EAAE,CAAC,OAAO,EAAE;CAC7B,EACD,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,iCAAiC,EAAE,GAAG,CAAA,cAAc,KAAK,CAAC,WAAW,GAAG,CAAC,CAAC,CAC7F,CAAC;AAEF,MAAM,CAAC,MAAM,aAAa,GAAG,SAAS,CAAC,KAAK,CAC1C,sBAAsB,EACtB;IACE,OAAO,EAAE,IAAI,EAAE;SACZ,KAAK,EAAW;SAChB,UAAU,EAAE;SACZ,UAAU,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC;IACnC,OAAO,EAAE,IAAI,EAAE,CAAC,KAAK,EAAW,CAAC,OAAO,EAAE;IAC1C,QAAQ,EAAE,IAAI,EAAE,CAAC,KAAK,EAAY,CAAC,OAAO,EAAE;IAC5C,QAAQ,EAAE,IAAI,EAAE,CAAC,KAAK,EAAY,CAAC,OAAO,EAAE;IAC5C,QAAQ,EAAE,IAAI,CAAC,EAAE,IAAI,EAAE,qBAAqB,EAAE,CAAC,CAAC,KAAK,EAAuB,CAAC,OAAO,EAAE;IACtF,0EAA0E;IAC1E,WAAW,EAAE,IAAI,CAAC,EAAE,IAAI,EAAE,gBAAgB,EAAE,CAAC;SAC1C,KAAK,EAAmB;SACxB,OAAO,EAAE;SACT,OAAO,CAAC,OAAO,CAAC;IACnB,UAAU,EAAE,OAAO,EAAE,CAAC,KAAK,EAAc;IACzC,uEAAuE;IACvE,eAAe,EAAE,OAAO,EAAE,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC;IAC/C,uFAAuF;IACvF,2CAA2C;IAC3C,UAAU,EAAE,IAAI,EAAE,CAAC,KAAK,EAAkB,CAAC,OAAO,EAAE;IACpD,QAAQ,EAAE,IAAI,EAAE,CAAC,KAAK,EAAsB,CAAC,OAAO,EAAE;IACtD,IAAI,EAAE,IAAI,EAAE,CAAC,KAAK,EAAe,CAAC,OAAO,EAAE;IAC3C,SAAS,EAAE,IAAI,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC,KAAK,EAAW,CAAC,OAAO,EAAE;IAC5D,WAAW,EAAE,IAAI,EAAE,CAAC,KAAK,EAAW;IACpC,qEAAqE;IACrE,cAAc,EAAE,IAAI,EAAE;SACnB,KAAK,EAAW;SAChB,UAAU,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC;IACnC,SAAS,EAAE,OAAO,EAAE,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC;CAC1C,EACD,CAAC,KAAK,EAAE,EAAE,CAAC;IACT,KAAK,CAAC,+BAA+B,EAAE,GAAG,CAAA,GAAG,KAAK,CAAC,QAAQ,0BAA0B,CAAC;IACtF,KAAK,CACH,kCAAkC,EAClC,GAAG,CAAA,GAAG,KAAK,CAAC,UAAU,eAAe,KAAK,CAAC,UAAU,OAAO,CAC7D;IACD,KAAK,CAAC,uCAAuC,EAAE,GAAG,CAAA,cAAc,KAAK,CAAC,SAAS,GAAG,CAAC;IACnF,KAAK,CAAC,2BAA2B,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,QAAQ,EAAE,KAAK,CAAC,OAAO,CAAC;IACpE,KAAK,CAAC,mCAAmC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC;IAC5D,WAAW,CAAC,+BAA+B,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,cAAc,EAAE,KAAK,CAAC,SAAS,CAAC;CACvF,CACF,CAAC;AAEF;;;;GAIG;AACH,MAAM,CAAC,MAAM,SAAS,GAAG,SAAS,CAAC,KAAK,CACtC,kBAAkB,EAClB;IACE,QAAQ,EAAE,IAAI,EAAE,CAAC,KAAK,EAAY,CAAC,OAAO,EAAE;IAC5C,OAAO,EAAE,IAAI,EAAE,CAAC,KAAK,EAAW,CAAC,OAAO,EAAE;IAC1C,eAAe,EAAE,IAAI,EAAE;SACpB,KAAK,EAAW;SAChB,UAAU,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC;IACnC,iBAAiB,EAAE,IAAI,EAAE;SACtB,KAAK,EAAS;SACd,UAAU,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC;IAC/B,iBAAiB,EAAE,IAAI,EAAE;SACtB,KAAK,EAAW;SAChB,UAAU,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC;CACpC,EACD,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,UAAU,CAAC,EAAE,OAAO,EAAE,CAAC,KAAK,CAAC,QAAQ,EAAE,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,CACtE,CAAC;AAEF,MAAM,CAAC,MAAM,gBAAgB,GAAG,SAAS,CAAC,KAAK,CAC7C,0BAA0B,EAC1B;IACE,OAAO,EAAE,IAAI,EAAE,CAAC,KAAK,EAAW,CAAC,UAAU,EAAE;IAC7C,UAAU,EAAE,IAAI,EAAE,CAAC,KAAK,EAAkB,CAAC,OAAO,EAAE;IACpD,UAAU,EAAE,OAAO,EAAE,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC;IAC1C,OAAO,EAAE,IAAI,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC,KAAK,EAAW;IAChD,YAAY,EAAE,OAAO,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC;CACpE,EACD,CAAC,KAAK,EAAE,EAAE,CAAC;IACT,KAAK,CAAC,6BAA6B,EAAE,GAAG,CAAA,GAAG,KAAK,CAAC,UAAU,OAAO,CAAC;IACnE,KAAK,CACH,2BAA2B,EAC3B,GAAG,CAAA,GAAG,KAAK,CAAC,OAAO,0BAA0B,KAAK,CAAC,OAAO,GAAG,CAC9D;CACF,CACF,CAAC;AAEF,MAAM,CAAC,MAAM,iBAAiB,GAAG,SAAS,CAAC,KAAK,CAC9C,0BAA0B,EAC1B;IACE,KAAK,EAAE,IAAI,EAAE;SACV,KAAK,EAAS;SACd,UAAU,EAAE;SACZ,UAAU,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC;IAC/B,OAAO,EAAE,IAAI,EAAE;SACZ,KAAK,EAAW;SAChB,OAAO,EAAE;SACT,UAAU,CAAC,GAAG,EAAE,CAAC,gBAAgB,CAAC,OAAO,CAAC;IAC7C,UAAU,EAAE,OAAO,EAAE,CAAC,OAAO,EAAE;IAC/B,IAAI,EAAE,IAAI,EAAE,CAAC,KAAK,EAAY,CAAC,OAAO,EAAE;CACzC,EACD,CAAC,KAAK,EAAE,EAAE,CAAC;IACT,KAAK,CAAC,+BAA+B,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,UAAU,EAAE,KAAK,CAAC,IAAI,CAAC;IACtF,KAAK,CAAC,qCAAqC,EAAE,GAAG,CAAA,GAAG,KAAK,CAAC,UAAU,OAAO,CAAC;CAC5E,CACF,CAAC;AAEF,MAAM,CAAC,MAAM,WAAW,GAAG,SAAS,CAAC,KAAK,CAAC,oBAAoB,EAAE;IAC/D,KAAK,EAAE,IAAI,EAAE,CAAC,KAAK,EAAoB,CAAC,UAAU,EAAE;IACpD,OAAO,EAAE,IAAI,EAAE;SACZ,KAAK,EAAW;SAChB,OAAO,EAAE;SACT,MAAM,EAAE;SACR,UAAU,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC;IACnC,OAAO,EAAE,IAAI,EAAE;SACZ,KAAK,EAAW;SAChB,OAAO,EAAE;SACT,UAAU,CAAC,GAAG,EAAE,CAAC,gBAAgB,CAAC,OAAO,CAAC;CAC9C,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,IAAI,GAAG,SAAS,CAAC,KAAK,CACjC,YAAY,EACZ;IACE,KAAK,EAAE,IAAI,EAAE,CAAC,KAAK,EAAS,CAAC,UAAU,EAAE;IACzC,OAAO,EAAE,IAAI,EAAE;SACZ,KAAK,EAAW;SAChB,OAAO,EAAE;SACT,MAAM,EAAE;SACR,UAAU,CAAC,GAAG,EAAE,CAAC,aAAa,CAAC,OAAO,CAAC;IAC1C,QAAQ,EAAE,IAAI,EAAE,CAAC,KAAK,EAAY,CAAC,OAAO,EAAE;IAC5C,SAAS,EAAE,IAAI,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC,KAAK,EAAW,CAAC,OAAO,EAAE;IAC5D,wBAAwB,EAAE,IAAI,EAAE,CAAC,KAAK,EAAa;IACnD,QAAQ,EAAE,IAAI,EAAE,CAAC,OAAO,EAAE;IAC1B;;;OAGG;IACH,QAAQ,EAAE,IAAI,EAAE;IAChB,2FAA2F;IAC3F,8DAA8D;IAC9D,UAAU,EAAE,IAAI,EAAE,CAAC,KAAK,EAAkB,CAAC,OAAO,EAAE;IACpD,QAAQ,EAAE,IAAI,EAAE,CAAC,KAAK,EAAsB,CAAC,OAAO,EAAE;IACtD,IAAI,EAAE,IAAI,EAAE,CAAC,KAAK,EAAe,CAAC,OAAO,EAAE;IAC3C,SAAS,EAAE,IAAI,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC,KAAK,EAAW,CAAC,OAAO,EAAE;IAC5D,WAAW,EAAE,IAAI,EAAE,CAAC,KAAK,EAAW;IACpC,uFAAuF;IACvF,aAAa,EAAE,IAAI,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC,KAAK,EAAW;CACvD,EACD,CAAC,KAAK,EAAE,EAAE,CAAC;IACT,KAAK,CAAC,6BAA6B,EAAE,GAAG,CAAA,cAAc,KAAK,CAAC,SAAS,GAAG,CAAC;IACzE,KAAK,CAAC,6BAA6B,EAAE,GAAG,CAAA,cAAc,KAAK,CAAC,SAAS,GAAG,CAAC;CAC1E,CACF,CAAC;AAEF,MAAM,CAAC,MAAM,KAAK,GAAG,SAAS,CAAC,KAAK,CAClC,aAAa,EACb;IACE,KAAK,EAAE,IAAI,EAAE;SACV,KAAK,EAAS;SACd,OAAO,EAAE;SACT,UAAU,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC;IAC/B,QAAQ,EAAE,IAAI,EAAE,CAAC,KAAK,EAAY,CAAC,OAAO,EAAE;IAC5C,MAAM,EAAE,IAAI,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC,KAAK,EAAW;CAChD,EACD,CAAC,KAAK,EAAE,EAAE,CAAC;IACT,UAAU,CAAC,EAAE,OAAO,EAAE,CAAC,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC,QAAQ,CAAC,EAAE,CAAC;IACtD,KAAK,CACH,+BAA+B,EAC/B,GAAG,CAAA,GAAG,KAAK,CAAC,MAAM,0BAA0B,KAAK,CAAC,MAAM,GAAG,CAC5D;CACF,CACF,CAAC;AAEF,MAAM,CAAC,MAAM,QAAQ,GAAG,SAAS,CAAC,KAAK,CACrC,gBAAgB,EAChB;IACE,SAAS,EAAE,IAAI,EAAE,CAAC,KAAK,EAAa,CAAC,UAAU,EAAE;IACjD,KAAK,EAAE,IAAI,EAAE,CAAC,KAAK,EAAS,CAAC,OAAO,EAAE;IACtC,QAAQ,EAAE,IAAI,EAAE,CAAC,KAAK,EAAY,CAAC,OAAO,EAAE;IAC5C,UAAU,EAAE,IAAI,EAAE,CAAC,KAAK,EAAc,CAAC,OAAO,EAAE;IAChD,aAAa,EAAE,OAAO,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,CAAC,KAAK,EAAiB,CAAC,OAAO,EAAE;IAC3E,SAAS,EAAE,IAAI,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC,KAAK,EAAW,CAAC,OAAO,EAAE;IAC5D,IAAI,EAAE,IAAI,EAAE,CAAC,KAAK,EAAe,CAAC,OAAO,EAAE;IAC3C,KAAK,EAAE,IAAI,EAAE,CAAC,KAAK,EAAa,CAAC,OAAO,EAAE;IAC1C,kBAAkB,EAAE,OAAO,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC;IACzE,WAAW,EAAE,IAAI,EAAE,CAAC,KAAK,EAAW;IACpC,SAAS,EAAE,IAAI,EAAE,CAAC,OAAO,EAAE;IAC3B,WAAW,EAAE,IAAI,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC,KAAK,EAAW;IACpD,sFAAsF;IACtF,OAAO,EAAE,IAAI,EAAE;IACf,WAAW,EAAE,IAAI,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC,KAAK,EAAW;IACpD,yHAAyH;IACzH,oBAAoB,EAAE,IAAI,EAAE;IAC5B,iEAAiE;IACjE,SAAS,EAAE,IAAI,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC,KAAK,EAAW;IAClD,+EAA+E;IAC/E,YAAY,EAAE,IAAI,EAAE;IACpB,mGAAmG;IACnG,YAAY,EAAE,IAAI,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC,KAAK,EAAW;CACtD,EACD,CAAC,KAAK,EAAE,EAAE,CAAC;IACT,KAAK,CAAC,uBAAuB,EAAE,GAAG,CAAA,GAAG,KAAK,CAAC,aAAa,OAAO,CAAC;IAChE,KAAK,CAAC,iCAAiC,EAAE,GAAG,CAAA,cAAc,KAAK,CAAC,SAAS,GAAG,CAAC;IAC7E,KAAK,CACH,mCAAmC,EACnC,GAAG,CAAA,GAAG,KAAK,CAAC,WAAW,0BAA0B,KAAK,CAAC,WAAW,GAAG,CACtE;IACD,KAAK,CACH,mCAAmC,EACnC,GAAG,CAAA,GAAG,KAAK,CAAC,WAAW,0BAA0B,KAAK,CAAC,WAAW,GAAG,CACtE;IACD,WAAW,CAAC,sBAAsB,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC,QAAQ,EAAE,KAAK,CAAC,aAAa,CAAC;IACxF,WAAW,CAAC,6BAA6B,CAAC;SACvC,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC;SACf,KAAK,CAAC,GAAG,CAAA,GAAG,KAAK,CAAC,WAAW,UAAU,CAAC;IAC3C,UAAU,CAAC;QACT,OAAO,EAAE,CAAC,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC,QAAQ,CAAC;QACtC,cAAc,EAAE,CAAC,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC,QAAQ,CAAC;KAC9C,CAAC;CACH,CACF,CAAC;AAEF,MAAM,CAAC,MAAM,kBAAkB,GAAG,SAAS,CAAC,KAAK,CAC/C,2BAA2B,EAC3B;IACE,QAAQ,EAAE,OAAO,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,CAAC,UAAU,CAAC,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC;IACzE,SAAS,EAAE,IAAI,EAAE;SACd,KAAK,EAAa;SAClB,OAAO,EAAE;SACT,UAAU,CAAC,GAAG,EAAE,CAAC,QAAQ,CAAC,SAAS,CAAC;IACvC,SAAS,EAAE,IAAI,CAAC,EAAE,IAAI,EAAE,cAAc,CAAC,UAAU,EAAE,CAAC,CAAC,OAAO,EAAE;IAC9D,eAAe,EAAE,OAAO,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,CAAC,KAAK,EAA2B,CAAC,OAAO,EAAE;IACvF,QAAQ,EAAE,IAAI,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC,KAAK,EAAW,CAAC,OAAO,EAAE;IAC3D,UAAU,EAAE,IAAI,EAAE,CAAC,OAAO,EAAE;CAC7B,EACD,CAAC,KAAK,EAAE,EAAE,CAAC;IACT,KAAK,CACH,qCAAqC,EACrC,GAAG,CAAA,GAAG,KAAK,CAAC,SAAS,6BAA6B,CACnD;IACD,KAAK,CAAC,oCAAoC,EAAE,GAAG,CAAA,GAAG,KAAK,CAAC,eAAe,OAAO,CAAC;IAC/E,KAAK,CAAC,+CAA+C,EAAE,GAAG,CAAA,cAAc,KAAK,CAAC,QAAQ,GAAG,CAAC;IAC1F,WAAW,CAAC,mCAAmC,CAAC,CAAC,EAAE,CACjD,KAAK,CAAC,SAAS,EACf,KAAK,CAAC,SAAS,EACf,KAAK,CAAC,eAAe,CACtB;IACD,KAAK,CAAC,+BAA+B,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,SAAS,EAAE,KAAK,CAAC,QAAQ,CAAC;CAC3E,CACF,CAAC;AAEF;;;GAGG;AACH,MAAM,CAAC,MAAM,SAAS,GAAG,SAAS,CAAC,KAAK,CACtC,iBAAiB,EACjB;IACE,KAAK,EAAE,IAAI,EAAE;SACV,KAAK,EAAS;SACd,UAAU,EAAE;SACZ,UAAU,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC;IAC/B,OAAO,EAAE,IAAI,EAAE;SACZ,KAAK,EAAW;SAChB,OAAO,EAAE;SACT,MAAM,EAAE;SACR,UAAU,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC;IACnC,OAAO,EAAE,IAAI,CAAC,EAAE,IAAI,EAAE,iBAAiB,EAAE,CAAC,CAAC,KAAK,EAAmB;IACnE,QAAQ,EAAE,IAAI,EAAE,CAAC,KAAK,EAAiB;CACxC,EACD,CAAC,KAAK,EAAE,EAAE,CAAC;IACT,KAAK,CACH,wBAAwB,EACxB,GAAG,CAAA,IAAI,KAAK,CAAC,OAAO,gBAAgB,KAAK,CAAC,QAAQ,gBAAgB,KAAK,CAAC,OAAO,eAAe,KAAK,CAAC,OAAO,uBAAuB,KAAK,CAAC,QAAQ,eAAe,CAChK;CACF,CACF,CAAC;AAEF;;;GAGG;AACH,MAAM,CAAC,MAAM,cAAc,GAAG,SAAS,CAAC,KAAK,CAAC,wBAAwB,EAAE;IACtE,OAAO,EAAE,IAAI,EAAE;SACZ,KAAK,EAAW;SAChB,UAAU,EAAE;SACZ,UAAU,CAAC,GAAG,EAAE,CAAC,aAAa,CAAC,OAAO,CAAC;IAC1C,SAAS,EAAE,IAAI,EAAE;SACd,KAAK,EAAS;SACd,OAAO,EAAE;SACT,UAAU,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC;IAC/B,WAAW,EAAE,IAAI,EAAE,CAAC,KAAK,EAAiB;CAC3C,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,aAAa,GAAG,SAAS,CAAC,KAAK,CAC1C,sBAAsB,EACtB;IACE,OAAO,EAAE,IAAI,EAAE;SACZ,KAAK,EAAW;SAChB,UAAU,EAAE;SACZ,UAAU,CAAC,GAAG,EAAE,CAAC,aAAa,CAAC,OAAO,CAAC;IAC1C,MAAM,EAAE,IAAI,CAAC,EAAE,IAAI,EAAE,eAAe,EAAE,CAAC,CAAC,KAAK,EAAgB,CAAC,OAAO,EAAE;CACxE,EACD,CAAC,KAAK,EAAE,EAAE,CAAC;IACT,KAAK,CAAC,6BAA6B,EAAE,GAAG,CAAA,GAAG,KAAK,CAAC,MAAM,+BAA+B,CAAC;CACxF,CACF,CAAC;AAEF,4EAA4E;AAC5E,MAAM,CAAC,MAAM,OAAO,GAAG,SAAS,CAAC,KAAK,CACpC,eAAe,EACf;IACE,SAAS,EAAE,IAAI,EAAE,CAAC,UAAU,EAAE;IAC9B,SAAS,EAAE,IAAI,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC,KAAK,EAAW,CAAC,OAAO,EAAE;CAC7D,EACD,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,gCAAgC,EAAE,GAAG,CAAA,cAAc,KAAK,CAAC,SAAS,GAAG,CAAC,CAAC,CAC1F,CAAC;AAEF,uFAAuF;AACvF,MAAM,CAAC,MAAM,eAAe,GAAG,SAAS,CAAC,KAAK,CAC5C,wBAAwB,EACxB;IACE,OAAO,EAAE,IAAI,EAAE,CAAC,KAAK,EAAW,CAAC,UAAU,EAAE;IAC7C,UAAU,EAAE,IAAI,EAAE,CAAC,KAAK,EAAkB,CAAC,OAAO,EAAE;IACpD,MAAM,EAAE,IAAI,EAAE,CAAC,OAAO,EAAE;IACxB,UAAU,EAAE,OAAO,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,CAAC,OAAO,EAAE;IACjD,WAAW,EAAE,IAAI,EAAE,CAAC,OAAO,EAAE;IAC7B,WAAW,EAAE,IAAI,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC,KAAK,EAAW,CAAC,OAAO,EAAE;IAC9D,MAAM,EAAE,IAAI,EAAE;CACf,EACD,CAAC,KAAK,EAAE,EAAE,CAAC;IACT,KAAK,CAAC,+BAA+B,EAAE,GAAG,CAAA,GAAG,KAAK,CAAC,UAAU,OAAO,CAAC;IACrE,KAAK,CAAC,2CAA2C,EAAE,GAAG,CAAA,cAAc,KAAK,CAAC,WAAW,GAAG,CAAC;IACzF,WAAW,CAAC,8BAA8B,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,UAAU,EAAE,KAAK,CAAC,UAAU,CAAC;CACnF,CACF,CAAC;AAEF,qEAAqE;AACrE,MAAM,CAAC,MAAM,0BAA0B,GAAG,SAAS,CAAC,KAAK,CACvD,oCAAoC,EACpC;IACE,UAAU,EAAE,IAAI,EAAE,CAAC,KAAK,EAAkB,CAAC,UAAU,EAAE;IACvD,UAAU,EAAE,IAAI,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC,KAAK,EAAW,CAAC,OAAO,EAAE;CAC9D,EACD,CAAC,KAAK,EAAE,EAAE,CAAC;IACT,KAAK,CACH,sDAAsD,EACtD,GAAG,CAAA,cAAc,KAAK,CAAC,UAAU,GAAG,CACrC;CACF,CACF,CAAC;AAEF,2FAA2F;AAC3F,MAAM,CAAC,MAAM,UAAU,GAAG,SAAS,CAAC,KAAK,CACvC,mBAAmB,EACnB;IACE,MAAM,EAAE,OAAO,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,CAAC,UAAU,CAAC,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC;IACvE,UAAU,EAAE,IAAI,EAAE,CAAC,KAAK,EAAkB,CAAC,OAAO,EAAE;IACpD,OAAO,EAAE,IAAI,EAAE,CAAC,KAAK,EAAW,CAAC,OAAO,EAAE;IAC1C,OAAO,EAAE,IAAI,EAAE,CAAC,OAAO,EAAE;IACzB,QAAQ,EAAE,IAAI,EAAE,CAAC,OAAO,EAAE;IAC1B,MAAM,EAAE,IAAI,EAAE,CAAC,OAAO,EAAE;IACxB,SAAS,EAAE,IAAI,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC,KAAK,EAAW,CAAC,OAAO,EAAE;IAC5D,WAAW,EAAE,IAAI,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC,KAAK,EAAW,CAAC,OAAO,EAAE;CAC/D,EACD,CAAC,KAAK,EAAE,EAAE,CAAC;IACT,KAAK,CAAC,oCAAoC,EAAE,GAAG,CAAA,cAAc,KAAK,CAAC,SAAS,GAAG,CAAC;IAChF,KAAK,CAAC,sCAAsC,EAAE,GAAG,CAAA,cAAc,KAAK,CAAC,WAAW,GAAG,CAAC;IACpF,KAAK,CAAC,wBAAwB,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,OAAO,CAAC;CACjE,CACF,CAAC;AAEF,qEAAqE;AACrE,MAAM,CAAC,MAAM,WAAW,GAAG,SAAS,CAAC,KAAK,CAAC,oBAAoB,EAAE;IAC/D,QAAQ,EAAE,IAAI,EAAE,CAAC,KAAK,EAAY,CAAC,UAAU,EAAE;IAC/C,MAAM,EAAE,OAAO,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC,CAAC,OAAO,EAAE;CAC/C,CAAC,CAAC;AAEH,0EAA0E;AAC1E,MAAM,CAAC,MAAM,kBAAkB,GAAG,SAAS,CAAC,KAAK,CAC/C,2BAA2B,EAC3B;IACE,SAAS,EAAE,OAAO,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,CAAC,UAAU,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC;IAC9D,QAAQ,EAAE,OAAO,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC;CAC3D,EACD,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,qCAAqC,EAAE,GAAG,CAAA,GAAG,KAAK,CAAC,SAAS,MAAM,CAAC,CAAC,CACvF,CAAC"}
|
|
@@ -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
|
-
/**
|
|
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
|
-
/**
|
|
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 "
|
|
3
|
-
/**
|
|
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
|
|
15
|
-
//
|
|
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
|