@usine/engine 0.4.0 → 0.5.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 (77) hide show
  1. package/LICENSE +661 -21
  2. package/README.md +9 -6
  3. package/dist/cycle-budget/cycle-budget.d.ts +8 -2
  4. package/dist/cycle-budget/cycle-budget.d.ts.map +1 -1
  5. package/dist/cycle-budget/cycle-budget.js +46 -5
  6. package/dist/cycle-budget/cycle-budget.js.map +1 -1
  7. package/dist/cycle-budget/model.d.ts +4 -0
  8. package/dist/cycle-budget/model.d.ts.map +1 -1
  9. package/dist/cycle-budget/model.js +3 -0
  10. package/dist/cycle-budget/model.js.map +1 -1
  11. package/dist/database/local-sqlite.d.ts +4 -3
  12. package/dist/database/local-sqlite.d.ts.map +1 -1
  13. package/dist/database/local-sqlite.js +11 -7
  14. package/dist/database/local-sqlite.js.map +1 -1
  15. package/dist/database/schema.d.ts +121 -0
  16. package/dist/database/schema.d.ts.map +1 -1
  17. package/dist/database/schema.js +23 -0
  18. package/dist/database/schema.js.map +1 -1
  19. package/dist/engine/checkout-recovery.d.ts +28 -18
  20. package/dist/engine/checkout-recovery.d.ts.map +1 -1
  21. package/dist/engine/checkout-recovery.js +100 -43
  22. package/dist/engine/checkout-recovery.js.map +1 -1
  23. package/dist/engine/engine.d.ts +20 -8
  24. package/dist/engine/engine.d.ts.map +1 -1
  25. package/dist/engine/engine.js +26 -9
  26. package/dist/engine/engine.js.map +1 -1
  27. package/dist/engine/error.d.ts +1 -1
  28. package/dist/engine/error.js +1 -1
  29. package/dist/engine/error.js.map +1 -1
  30. package/dist/engine/lifecycle.d.ts +3 -1
  31. package/dist/engine/lifecycle.d.ts.map +1 -1
  32. package/dist/engine/lifecycle.js +13 -3
  33. package/dist/engine/lifecycle.js.map +1 -1
  34. package/dist/engine/run-driver.d.ts +21 -7
  35. package/dist/engine/run-driver.d.ts.map +1 -1
  36. package/dist/engine/run-driver.js +118 -32
  37. package/dist/engine/run-driver.js.map +1 -1
  38. package/dist/engine/submission.d.ts.map +1 -1
  39. package/dist/engine/submission.js +3 -2
  40. package/dist/engine/submission.js.map +1 -1
  41. package/dist/engine/unconfirmed-stops.d.ts +27 -0
  42. package/dist/engine/unconfirmed-stops.d.ts.map +1 -0
  43. package/dist/engine/unconfirmed-stops.js +26 -0
  44. package/dist/engine/unconfirmed-stops.js.map +1 -0
  45. package/dist/item-projection/item-projection.d.ts +3 -1
  46. package/dist/item-projection/item-projection.d.ts.map +1 -1
  47. package/dist/item-projection/item-projection.js +20 -9
  48. package/dist/item-projection/item-projection.js.map +1 -1
  49. package/dist/run-reader/run-reader.d.ts +6 -1
  50. package/dist/run-reader/run-reader.d.ts.map +1 -1
  51. package/dist/run-reader/run-reader.js +2 -0
  52. package/dist/run-reader/run-reader.js.map +1 -1
  53. package/dist/step-executor.d.ts +30 -11
  54. package/dist/step-executor.d.ts.map +1 -1
  55. package/dist/step-executor.js.map +1 -1
  56. package/dist/store/codec.d.ts +38 -4
  57. package/dist/store/codec.d.ts.map +1 -1
  58. package/dist/store/codec.js +9 -2
  59. package/dist/store/codec.js.map +1 -1
  60. package/dist/store/leftovers.d.ts +1 -1
  61. package/dist/store/leftovers.js +2 -2
  62. package/dist/store/leftovers.js.map +1 -1
  63. package/dist/store/queries.d.ts +45 -3
  64. package/dist/store/queries.d.ts.map +1 -1
  65. package/dist/store/queries.js +59 -6
  66. package/dist/store/queries.js.map +1 -1
  67. package/dist/store/store.d.ts +22 -7
  68. package/dist/store/store.d.ts.map +1 -1
  69. package/dist/store/store.js +32 -3
  70. package/dist/store/store.js.map +1 -1
  71. package/drizzle/20261024162954_cycle_ask_closures/migration.sql +10 -0
  72. package/drizzle/20261024162954_cycle_ask_closures/snapshot.json +1948 -0
  73. package/drizzle/20261027104206_attempt_out_of_memory/migration.sql +1 -0
  74. package/drizzle/20261027104206_attempt_out_of_memory/snapshot.json +1958 -0
  75. package/drizzle/20261027191944_failure_resolution/migration.sql +1 -0
  76. package/drizzle/20261027191944_failure_resolution/snapshot.json +1968 -0
  77. package/package.json +12 -12
package/README.md CHANGED
@@ -10,7 +10,7 @@ The default adapter stores the event ledger and run records in `<instance>/.usin
10
10
 
11
11
  - `CursorStore` stores typed keys with JSON values, for efficiency-only trigger cursors such as GitHub watermarks and ETags. Deleting one safely replays events; the ledger deduplicates.
12
12
  - `LoopControl` stores loop pause state; pausing never edits the loop file.
13
- - `ItemProjectionReader` and `ItemProjectionWriter` store the latest issue and pull request snapshots from polling, which the board reads after a restart without querying GitHub. `list` returns the newest items first, up to `limit`; `openIssues` returns the numbers of open issues not marked gone. Writes change the projection revision only if the content hash changes.
13
+ - `ItemProjectionReader` and `ItemProjectionWriter` store the latest issue and pull request snapshots from polling, which the board reads after a restart without querying GitHub. `get` returns one item's projection; `list` returns the newest items first, up to `limit`; `openIssues` returns the numbers of open issues not marked gone. Writes change the projection revision only if the content hash changes.
14
14
  - `RepositoryLabelProjectionReader` and `RepositoryLabelProjectionWriter` store each repo's full label catalog from polling, so repos without items still get proposed lanes. Writes change the revision only if the label set changes.
15
15
  - `BoardMoves` (`/board-moves`) stores each board move: repo, item, send time, source and destination lanes, and labels added and removed. The orchestrator records a move before sending its labels, so the factory app's label change for the operator isn't taken for an agent's. `onItem(itemKey, since)` returns an item's moves from `since`, oldest first. Moves don't change the revision.
16
16
 
@@ -37,7 +37,8 @@ The default adapter stores the event ledger and run records in `<instance>/.usin
37
37
 
38
38
  - A newer event supersedes a pending, waiting, or queued run. A running attempt finishes first; then only the item's newest queued event opens.
39
39
  - Before it opens, `TriggerCondition` (`/trigger-condition`, supplied by the deployment) re-evaluates the loop's trigger on the item's current state. If it no longer matches, the event is recorded as ignored (revoked) and opens no run. If the item's source no longer has the item, the events are revoked and `ItemProjectionWriter.markGone` marks it gone, so the board stops showing it as open.
40
- - Revoke stops pending, waiting, and queued runs; operator cancel also stops a running attempt.
40
+ - Revoke stops pending, waiting, and queued runs; operator cancel also stops a running attempt. Cancel rejects failed and succeeded runs with `RunOperationRejectedError` and preserves their outcomes. Repeating cancel on a canceled run succeeds without changing it.
41
+ - If `StepExecutor.interrupt` can't confirm that a canceled attempt's parent task stopped, `RunEngine.cancel` fails with `AttemptCancellationError`, and the attempt keeps its run's worker slot. After `StepExecutor.execute` fails, the engine also calls `interrupt` before it closes the attempt, and keeps the slot the same way if the stop isn't confirmed. While the stop is unconfirmed, no run of the attempt's loop starts an attempt on the item, on any worker; the run's fiber ends instead of reserving a slot. Each reconcile retries the stop, with its reason (`cancel`, `failed`, or `startup`) passed to `interrupt`, releases the slot once the stop is confirmed, and then starts the fibers of the waiting runs. `UnconfirmedStops` (`/engine`) lists these attempts with their loop and item, and `UnconfirmedStops.empty` lists none, for a process that drives no run.
41
42
  - The engine records what each loop last saw of an item: a submitted event, or a non-matching sighting. A canceled, superseded, or revoked run keeps its event while the item stays the same, and so does a queued event that a revoke ignored. If the loop saw the item not matching or changed, and it then matches again, the event reopens with the dedup key `["reopened", n, <original key>]`, so the new run gets its own id.
42
43
  - Succeeded and failed runs always keep their event. A queued event superseded by a newer one stays ignored.
43
44
 
@@ -49,7 +50,7 @@ The default adapter stores the event ledger and run records in `<instance>/.usin
49
50
 
50
51
  An attempt ending with `QuestionFailure` or `BlockedFailure` starts a suppression of the item for its loop. The loop's next event, usually the agent's own comment, returns `Suppressed` and opens no run; queued events wait. An event with other content, a non-matching sighting, an operator retry, or `RunEngine.resolveFailure` lifts the suppression, and resolving gives the newest queued event its turn.
51
52
 
52
- `RunEngine.resolveFailure(runId, attemptId)` stores the resolution of the current failed attempt. Repeats are safe; another attempt or a run no longer failed is rejected. Snapshots and summaries include `resolvedFailureAttemptId`, and resolution updates the revision. Outcomes, attempts, transcripts, and retry stay as they were.
53
+ `RunEngine.resolveFailure(runId, attemptId, operator)` stores the time and operator login of the current failed attempt's resolution in `Attempt.failureResolution`. Pass `Option.none()` if no operator login is configured. Repeats preserve the first resolution time and operator; another attempt or a run no longer failed is rejected. Snapshots and summaries include `resolvedFailureAttemptId`, and resolution updates the revision. The failed outcome and transcript stay in history, and retry remains available.
53
54
 
54
55
  ### Run fibers and restarts
55
56
 
@@ -61,15 +62,15 @@ After a stop during an attempt, the engine asks `StepExecutor.isLive` whether it
61
62
  - Finished, and `StepExecutor.outcome` returns the stored result: the engine finishes the attempt with it.
62
63
  - Otherwise: the attempt fails as an infrastructure failure, and the run continues with attempt N+1.
63
64
 
64
- At startup, before any fiber starts, `StepExecutor.occupy` takes a slot on the worker of each open attempt whose checkout the engine keeps, so no new attempt takes it while the run calls `isLive`. The reattached attempt runs in that slot until it ends. If the run doesn't reattach, the reattachment fails before `ExecutionSink.checkoutAcquired`, or the operator cancels first, the slot stays taken until `StepExecutor.interrupt` confirms that the parent task stopped. A reattaching run without such a slot passes the worker to `StepExecutor.reserve`, then calls `isLive` again.
65
+ At startup, before any fiber starts, `StepExecutor.occupy` takes a slot on the worker of each open attempt whose checkout the engine keeps, so no new attempt takes it while the run calls `isLive`. The reattached attempt runs in that slot until it ends. If the run doesn't reattach, the reattachment fails before `ExecutionSink.checkoutAcquired`, or the operator cancels, before or after `checkoutAcquired`, the slot stays taken until `StepExecutor.interrupt` confirms that the parent task stopped. A reattaching run without such a slot passes the worker to `StepExecutor.reserve`, then calls `isLive` again.
65
66
 
66
- Also at startup, the engine passes every stored attempt on a worker in `StepExecutor.workers` to `StepExecutor.recover`, which records its salvage and reconciles its checkout. It first stops the parent task of each closed attempt. An open attempt whose parent task is live, or whose liveness can't be read, keeps its checkout for the run.
67
+ Also at startup, the engine passes every stored attempt on a worker in `StepExecutor.workers` to `StepExecutor.recover`, which records its salvage and reconciles its checkout. An attempt whose recorded salvage is `Rejected` carries it in `AttemptRecovery.rejected`, so the recovery doesn't push the same commit again. It first stops the parent task of each closed attempt. An open attempt whose parent task is live, or whose liveness can't be read, keeps its checkout for the run. Each reconcile, the startup one included, ends with `StepExecutor.sweep`, which removes the worker resources that no attempt holds, such as a provisioned worker's machines ([#550](https://github.com/basaltbytes/usine/issues/550)) or the Codex homes that a crash left on an SSH worker ([#592](https://github.com/basaltbytes/usine/issues/592)).
67
68
 
68
69
  The engine handles that checkout's recovery until the reattaching execution runs `ExecutionSink.checkoutAcquired`, which `StepExecutor.execute` runs once preparation has the checkout, never on a failed preparation. If the run closes the attempt first (the task stopped before the run reserved a worker, liveness can't be read, the reattachment failed, or the operator canceled), the engine stops the parent task with `interrupt` and passes the still-open attempt to `recover`, which reconciles regardless of `isLive`. The next attempt resumes from that salvage.
69
70
 
70
71
  If `interrupt` can't confirm the stop, the checkout and slot stay, the fiber stops before the next attempt and logs `Could not confirm that the parent task of an Attempt its Run does not reattach stopped`, and each reconcile tries again: it reattaches if the task is live, or retries the stop. This applies after another restart too.
71
72
 
72
- Attempts on a worker that `StepExecutor.workers` doesn't list aren't reconciled. `RunEngine.discardLeftovers(worker)` stops tracking them and changes nothing on the worker. For a listed worker (declared, or removed with attempts still running), it fails with `LeftoversDiscardRejectedError`, which names the worker and counts its open attempts.
73
+ Attempts on a worker that `StepExecutor.workers` doesn't list aren't reconciled. `RunEngine.discardLeftovers(worker)` stops tracking them, then passes them to `StepExecutor.discard`, which removes what they left outside their checkouts, such as their Codex homes on an SSH worker, and never fails. Their checkouts stay. For a listed worker (declared, or removed with attempts still running), it fails with `LeftoversDiscardRejectedError`, which names the worker and counts its open attempts.
73
74
 
74
75
  ### Transcripts
75
76
 
@@ -95,6 +96,8 @@ The [lifecycle decisions](src/engine/lifecycle.ts) decide attempt completion, in
95
96
 
96
97
  A reset records a fresh polling request. Trigger adapters read `CycleBudgets.generation(itemKey)` before fetching and put it in `Submission.cycleGeneration` and the event identity. Admission supersedes older observations, including in-flight polls and queued events, and new polling creates an event with current settings. Labels, restarts, and loop changes never clear an ask. See [ADR 0022](../../docs/adr/0022-item-cycle-budgets-and-comment-reviews.md).
97
98
 
99
+ `CycleBudgets.close(askId, "ItemClosed")` closes an ask without a reset, for an item that was closed or merged. It records the ask and the reason in `usine_cycle_ask_closures` and keeps the generation and reservations, so the item's next admission at the limit opens a new ask.
100
+
98
101
  ## Drain and shutdown
99
102
 
100
103
  `RunEngine.drain()` closes attempt admission for good and waits for admitted attempts to store their outcomes. Reservations, approval gates, and retries resume after a restart; interrupting the wait leaves admission closed. The host sets a deadline and closes its runtime scope afterward ([ADR 0023](../../docs/adr/0023-graceful-attempt-drain.md)).
@@ -4,7 +4,7 @@ import { Event } from "@usine/core/event";
4
4
  import { Context, Effect, Layer } from "effect";
5
5
  import { RunDatabase } from "../database/database.ts";
6
6
  import { EnginePersistenceError } from "../engine/error.ts";
7
- import { CycleBudgetReset, CycleBudgetResetRejectedError } from "./model.ts";
7
+ import { type CycleBudgetAskCloseReason, CycleBudgetReset, CycleBudgetResetRejectedError } from "./model.ts";
8
8
  declare const CycleBudgets_base: Context.ServiceClass<CycleBudgets, "@usine/engine/CycleBudgets", {
9
9
  /** Returns the Item's cycle generation; callers read it before fetching trigger input and include it in the Event identity. */
10
10
  readonly generation: (itemKey: ItemKey) => Effect.Effect<CycleGeneration, EnginePersistenceError>;
@@ -12,6 +12,12 @@ declare const CycleBudgets_base: Context.ServiceClass<CycleBudgets, "@usine/engi
12
12
  readonly asks: () => Effect.Effect<ReadonlyArray<CycleBudgetAsk>, EnginePersistenceError>;
13
13
  /** Records the answer to the Ask and requests fresh trigger evaluation; repeated calls are idempotent. */
14
14
  readonly reset: (askId: CycleBudgetAskId, answer: Event) => Effect.Effect<void, EnginePersistenceError | CycleBudgetResetRejectedError>;
15
+ /**
16
+ * Closes the Ask without a reset and records `reason`. The Item keeps its cycle generation and
17
+ * reservations, so its next admission at the limit opens a new Ask. Returns `false` if the Ask
18
+ * isn't open.
19
+ */
20
+ readonly close: (askId: CycleBudgetAskId, reason: CycleBudgetAskCloseReason) => Effect.Effect<boolean, EnginePersistenceError>;
15
21
  /** Returns the resets that still wait for a durable polling-cursor restart. */
16
22
  readonly pendingResets: () => Effect.Effect<ReadonlyArray<CycleBudgetReset>, EnginePersistenceError>;
17
23
  /** Acknowledges the reset for its generation only, after fresh polling progress is recorded. */
@@ -21,5 +27,5 @@ declare const CycleBudgets_base: Context.ServiceClass<CycleBudgets, "@usine/engi
21
27
  export declare class CycleBudgets extends CycleBudgets_base {
22
28
  static readonly layer: Layer.Layer<CycleBudgets, never, RunDatabase>;
23
29
  }
24
- export { CycleBudgetReset, CycleBudgetResetRejectedError } from "./model.ts";
30
+ export { CycleBudgetAskCloseReason, CycleBudgetReset, CycleBudgetResetRejectedError, } from "./model.ts";
25
31
  //# sourceMappingURL=cycle-budget.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"cycle-budget.d.ts","sourceRoot":"","sources":["../../src/cycle-budget/cycle-budget.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAC;AAC7F,OAAO,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAC3C,OAAO,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC;AAG1C,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAU,MAAM,QAAQ,CAAC;AACxD,OAAO,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAQtD,OAAO,EAAE,sBAAsB,EAAE,MAAM,oBAAoB,CAAC;AAE5D,OAAO,EAAE,gBAAgB,EAAE,6BAA6B,EAAE,MAAM,YAAY,CAAC;;IAgBzE,+HAA+H;yBAC1G,CACnB,OAAO,EAAE,OAAO,KACb,MAAM,CAAC,MAAM,CAAC,eAAe,EAAE,sBAAsB,CAAC;IAC3D,wGAAwG;mBACzF,MAAM,MAAM,CAAC,MAAM,CAAC,aAAa,CAAC,cAAc,CAAC,EAAE,sBAAsB,CAAC;IACzF,0GAA0G;oBAC1F,CACd,KAAK,EAAE,gBAAgB,EACvB,MAAM,EAAE,KAAK,KACV,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,sBAAsB,GAAG,6BAA6B,CAAC;IAChF,+EAA+E;4BACvD,MAAM,MAAM,CAAC,MAAM,CACzC,aAAa,CAAC,gBAAgB,CAAC,EAC/B,sBAAsB,CACvB;IACD,gGAAgG;+BACrE,CACzB,KAAK,EAAE,gBAAgB,KACpB,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,sBAAsB,CAAC;;AAvBpD,wEAAwE;AACxE,qBAAa,YAAa,SAAQ,iBAwBD;IAC/B,MAAM,CAAC,QAAQ,CAAC,KAAK,gDA+InB;CACH;AAED,OAAO,EAAE,gBAAgB,EAAE,6BAA6B,EAAE,MAAM,YAAY,CAAC"}
1
+ {"version":3,"file":"cycle-budget.d.ts","sourceRoot":"","sources":["../../src/cycle-budget/cycle-budget.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAC;AAC7F,OAAO,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAC3C,OAAO,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC;AAG1C,OAAO,EAAE,OAAO,EAAY,MAAM,EAAE,KAAK,EAAkB,MAAM,QAAQ,CAAC;AAC1E,OAAO,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAStD,OAAO,EAAE,sBAAsB,EAAE,MAAM,oBAAoB,CAAC;AAE5D,OAAO,EACL,KAAK,yBAAyB,EAC9B,gBAAgB,EAChB,6BAA6B,EAC9B,MAAM,YAAY,CAAC;;IAgBhB,+HAA+H;yBAC1G,CACnB,OAAO,EAAE,OAAO,KACb,MAAM,CAAC,MAAM,CAAC,eAAe,EAAE,sBAAsB,CAAC;IAC3D,wGAAwG;mBACzF,MAAM,MAAM,CAAC,MAAM,CAAC,aAAa,CAAC,cAAc,CAAC,EAAE,sBAAsB,CAAC;IACzF,0GAA0G;oBAC1F,CACd,KAAK,EAAE,gBAAgB,EACvB,MAAM,EAAE,KAAK,KACV,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,sBAAsB,GAAG,6BAA6B,CAAC;IAChF;;;;OAIG;oBACa,CACd,KAAK,EAAE,gBAAgB,EACvB,MAAM,EAAE,yBAAyB,KAC9B,MAAM,CAAC,MAAM,CAAC,OAAO,EAAE,sBAAsB,CAAC;IACnD,+EAA+E;4BACvD,MAAM,MAAM,CAAC,MAAM,CACzC,aAAa,CAAC,gBAAgB,CAAC,EAC/B,sBAAsB,CACvB;IACD,gGAAgG;+BACrE,CACzB,KAAK,EAAE,gBAAgB,KACpB,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,sBAAsB,CAAC;;AAhCpD,wEAAwE;AACxE,qBAAa,YAAa,SAAQ,iBAiCD;IAC/B,MAAM,CAAC,QAAQ,CAAC,KAAK,gDAiMnB;CACH;AAED,OAAO,EACL,yBAAyB,EACzB,gBAAgB,EAChB,6BAA6B,GAC9B,MAAM,YAAY,CAAC"}
@@ -3,12 +3,12 @@ import { ItemKey } from "@usine/core/item";
3
3
  import { Event } from "@usine/core/event";
4
4
  import * as RunState from "@usine/core/run/state";
5
5
  import { and, eq, inArray, sql } from "drizzle-orm";
6
- import { Context, Effect, Layer, Option } from "effect";
6
+ import { Context, DateTime, Effect, Layer, Option, Schema } from "effect";
7
7
  import { RunDatabase } from "../database/database.js";
8
- import { cycleReservations, cycleResets, events, itemCycleBudgets, runs, } from "../database/schema.js";
8
+ import { cycleAskClosures, cycleReservations, cycleResets, events, itemCycleBudgets, runs, } from "../database/schema.js";
9
9
  import { EnginePersistenceError } from "../engine/error.js";
10
10
  import { encodeDateTime, encodePayload } from "../store/codec.js";
11
- import { CycleBudgetReset, CycleBudgetResetRejectedError } from "./model.js";
11
+ import { CycleBudgetReset, CycleBudgetResetRejectedError, } from "./model.js";
12
12
  import { cycleQueries } from "./queries.js";
13
13
  const persistence = (effect) => effect.pipe(Effect.mapError((cause) => cause instanceof CycleBudgetResetRejectedError
14
14
  ? cause
@@ -96,6 +96,47 @@ export class CycleBudgets extends Context.Service()("@usine/engine/CycleBudgets"
96
96
  }))
97
97
  .pipe(persistence);
98
98
  });
99
+ const close = Effect.fn("CycleBudgets.close")(function* (askId, reason) {
100
+ yield* Effect.annotateCurrentSpan({ askId, reason });
101
+ const closedAt = encodeDateTime(yield* DateTime.now);
102
+ return yield* database
103
+ .transaction((transaction) => Effect.gen(function* () {
104
+ const ask = (yield* cycleQueries(transaction).asks()).find(({ id }) => id === askId);
105
+ if (ask === undefined) {
106
+ yield* Effect.logInfo("Cycle-budget Ask is no longer open; nothing to close", {
107
+ askId,
108
+ reason,
109
+ });
110
+ return false;
111
+ }
112
+ const askJson = Schema.encodeSync(CycleBudgetAsk)(ask);
113
+ // An Item that matches again in the same generation raises an Ask with the same ID.
114
+ yield* transaction
115
+ .insert(cycleAskClosures)
116
+ .values({ askId, itemKey: ask.itemKey, reason, askJson, closedAt })
117
+ .onConflictDoUpdate({
118
+ target: cycleAskClosures.askId,
119
+ set: { reason, askJson, closedAt },
120
+ })
121
+ .execute();
122
+ yield* transaction
123
+ .update(itemCycleBudgets)
124
+ .set({ askJson: null })
125
+ .where(eq(itemCycleBudgets.itemKey, ask.itemKey))
126
+ .execute();
127
+ yield* Effect.logInfo("Closed cycle-budget Ask without a reset", {
128
+ askId,
129
+ reason,
130
+ itemKey: ask.itemKey,
131
+ repository: ask.repository,
132
+ loop: ask.loop,
133
+ completedCycles: ask.completedCycles,
134
+ counts: ask.counts,
135
+ });
136
+ return true;
137
+ }))
138
+ .pipe(Effect.mapError((cause) => new EnginePersistenceError({ operation: "close cycle ask", cause })));
139
+ });
99
140
  const pendingResets = Effect.fn("CycleBudgets.pendingResets")(() => queries.pendingResets().pipe(Effect.map((rows) => rows.map((row) => new CycleBudgetReset(row))), Effect.mapError((cause) => new EnginePersistenceError({ operation: "read pending cycle resets", cause }))));
100
141
  const acknowledgeReset = Effect.fn("CycleBudgets.acknowledgeReset")(function* (reset) {
101
142
  yield* Effect.annotateCurrentSpan({ itemKey: reset.itemKey, generation: reset.generation });
@@ -110,8 +151,8 @@ export class CycleBudgets extends Context.Service()("@usine/engine/CycleBudgets"
110
151
  generation: reset.generation,
111
152
  });
112
153
  });
113
- return { generation, asks, reset, pendingResets, acknowledgeReset };
154
+ return { generation, asks, reset, close, pendingResets, acknowledgeReset };
114
155
  }));
115
156
  }
116
- export { CycleBudgetReset, CycleBudgetResetRejectedError } from "./model.js";
157
+ export { CycleBudgetAskCloseReason, CycleBudgetReset, CycleBudgetResetRejectedError, } from "./model.js";
117
158
  //# sourceMappingURL=cycle-budget.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"cycle-budget.js","sourceRoot":"","sources":["../../src/cycle-budget/cycle-budget.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"cycle-budget.js","sourceRoot":"","sources":["../../src/cycle-budget/cycle-budget.ts"],"names":[],"mappings":"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"}
@@ -14,6 +14,10 @@ declare const CycleBudgetResetRejectedError_base: Schema.Class<CycleBudgetResetR
14
14
  /** An error for an Ask that is absent, answered differently, or no longer current. */
15
15
  export declare class CycleBudgetResetRejectedError extends CycleBudgetResetRejectedError_base {
16
16
  }
17
+ /** The reasons a cycle-budget Ask closes without a reset. `ItemClosed`: the Item was closed or merged. */
18
+ export declare const CYCLE_BUDGET_ASK_CLOSE_REASONS: readonly ["ItemClosed"];
19
+ export declare const CycleBudgetAskCloseReason: Schema.Literals<readonly ["ItemClosed"]>;
20
+ export type CycleBudgetAskCloseReason = typeof CycleBudgetAskCloseReason.Type;
17
21
  export declare const BudgetRow: Schema.Struct<{
18
22
  readonly itemKey: Schema.brand<Schema.NonEmptyString, "ItemKey">;
19
23
  readonly repository: Schema.brand<Schema.String, "RepositoryName">;
@@ -1 +1 @@
1
- {"version":3,"file":"model.d.ts","sourceRoot":"","sources":["../../src/cycle-budget/model.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAqC,MAAM,0BAA0B,CAAC;AAG7F,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;;;;;;AAEhC,iGAAiG;AACjG,qBAAa,gBAAiB,SAAQ,qBAIpC;CAAG;;;;AAEL,sFAAsF;AACtF,qBAAa,6BAA8B,SAAQ,kCAEY;CAAG;AAElE,eAAO,MAAM,SAAS;;;;;;EAIpB,CAAC;AACH,MAAM,MAAM,SAAS,GAAG,OAAO,SAAS,CAAC,IAAI,CAAC"}
1
+ {"version":3,"file":"model.d.ts","sourceRoot":"","sources":["../../src/cycle-budget/model.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAqC,MAAM,0BAA0B,CAAC;AAG7F,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;;;;;;AAEhC,iGAAiG;AACjG,qBAAa,gBAAiB,SAAQ,qBAIpC;CAAG;;;;AAEL,sFAAsF;AACtF,qBAAa,6BAA8B,SAAQ,kCAEY;CAAG;AAElE,0GAA0G;AAC1G,eAAO,MAAM,8BAA8B,YAAI,YAAY,CAAU,CAAC;AACtE,eAAO,MAAM,yBAAyB,0CAAkD,CAAC;AACzF,MAAM,MAAM,yBAAyB,GAAG,OAAO,yBAAyB,CAAC,IAAI,CAAC;AAE9E,eAAO,MAAM,SAAS;;;;;;EAIpB,CAAC;AACH,MAAM,MAAM,SAAS,GAAG,OAAO,SAAS,CAAC,IAAI,CAAC"}
@@ -12,6 +12,9 @@ export class CycleBudgetReset extends Schema.Class("CycleBudgetReset")({
12
12
  /** An error for an Ask that is absent, answered differently, or no longer current. */
13
13
  export class CycleBudgetResetRejectedError extends Schema.TaggedError("CycleBudgetResetRejectedError")("CycleBudgetResetRejectedError", { askId: CycleBudgetAskId }) {
14
14
  }
15
+ /** The reasons a cycle-budget Ask closes without a reset. `ItemClosed`: the Item was closed or merged. */
16
+ export const CYCLE_BUDGET_ASK_CLOSE_REASONS = ["ItemClosed"];
17
+ export const CycleBudgetAskCloseReason = Schema.Literals(CYCLE_BUDGET_ASK_CLOSE_REASONS);
15
18
  export const BudgetRow = Schema.Struct({
16
19
  ...CycleBudgetReset.fields,
17
20
  ask: Schema.OptionFromNullOr(CycleBudgetAsk),
@@ -1 +1 @@
1
- {"version":3,"file":"model.js","sourceRoot":"","sources":["../../src/cycle-budget/model.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAC;AAC7F,OAAO,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAC3C,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AACxD,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAEhC,iGAAiG;AACjG,MAAM,OAAO,gBAAiB,SAAQ,MAAM,CAAC,KAAK,CAAmB,kBAAkB,CAAC,CAAC;IACvF,OAAO,EAAE,OAAO;IAChB,UAAU,EAAE,cAAc;IAC1B,UAAU,EAAE,eAAe;CAC5B,CAAC;CAAG;AAEL,sFAAsF;AACtF,MAAM,OAAO,6BAA8B,SAAQ,MAAM,CAAC,WAAW,CACnE,+BAA+B,CAChC,CAAC,+BAA+B,EAAE,EAAE,KAAK,EAAE,gBAAgB,EAAE,CAAC;CAAG;AAElE,MAAM,CAAC,MAAM,SAAS,GAAG,MAAM,CAAC,MAAM,CAAC;IACrC,GAAG,gBAAgB,CAAC,MAAM;IAC1B,GAAG,EAAE,MAAM,CAAC,gBAAgB,CAAC,cAAc,CAAC;IAC5C,YAAY,EAAE,MAAM,CAAC,OAAO;CAC7B,CAAC,CAAC"}
1
+ {"version":3,"file":"model.js","sourceRoot":"","sources":["../../src/cycle-budget/model.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAC;AAC7F,OAAO,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAC3C,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AACxD,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAEhC,iGAAiG;AACjG,MAAM,OAAO,gBAAiB,SAAQ,MAAM,CAAC,KAAK,CAAmB,kBAAkB,CAAC,CAAC;IACvF,OAAO,EAAE,OAAO;IAChB,UAAU,EAAE,cAAc;IAC1B,UAAU,EAAE,eAAe;CAC5B,CAAC;CAAG;AAEL,sFAAsF;AACtF,MAAM,OAAO,6BAA8B,SAAQ,MAAM,CAAC,WAAW,CACnE,+BAA+B,CAChC,CAAC,+BAA+B,EAAE,EAAE,KAAK,EAAE,gBAAgB,EAAE,CAAC;CAAG;AAElE,0GAA0G;AAC1G,MAAM,CAAC,MAAM,8BAA8B,GAAG,CAAC,YAAY,CAAU,CAAC;AACtE,MAAM,CAAC,MAAM,yBAAyB,GAAG,MAAM,CAAC,QAAQ,CAAC,8BAA8B,CAAC,CAAC;AAGzF,MAAM,CAAC,MAAM,SAAS,GAAG,MAAM,CAAC,MAAM,CAAC;IACrC,GAAG,gBAAgB,CAAC,MAAM;IAC1B,GAAG,EAAE,MAAM,CAAC,gBAAgB,CAAC,cAAc,CAAC;IAC5C,YAAY,EAAE,MAAM,CAAC,OAAO;CAC7B,CAAC,CAAC"}
@@ -7,17 +7,18 @@ import { LoopControl } from "../loop-control/loop-control.ts";
7
7
  import { BoardMoves } from "../board-moves/board-moves.ts";
8
8
  import { CycleBudgets } from "../cycle-budget/cycle-budget.ts";
9
9
  import { type RunEngine } from "../engine/engine.ts";
10
+ import { UnconfirmedStops } from "../engine/unconfirmed-stops.ts";
10
11
  import type { InstanceDirectory } from "@usine/core/instance";
11
12
  import { EnginePersistenceError, type RunEngineError } from "../engine/error.ts";
12
13
  import { RunReader } from "../run-reader/run-reader.ts";
13
14
  import type { StepExecutor } from "../step-executor.ts";
14
15
  import type { TriggerCondition } from "../trigger-condition.ts";
15
16
  import { RunDatabase } from "./database.ts";
16
- export declare const localSqliteLayer: (instanceDirectory: InstanceDirectory) => Layer.Layer<RunDatabase | import("effect/unstable/sql/SqlClient").SqlClient | SqliteClient.SqliteClient, EnginePersistenceError, never>;
17
+ export declare const localSqliteLayer: (instanceDirectory: InstanceDirectory) => Layer.Layer<RunDatabase | import("effect/sql/SqlClient").SqlClient | SqliteClient.SqliteClient, EnginePersistenceError, never>;
17
18
  /** Returns the local runtime layer on `.usine/runtime.sqlite`. */
18
- export declare const layer: (instanceDirectory: InstanceDirectory) => Layer.Layer<BoardMoves | CursorStore | CycleBudgets | ItemProjectionReader | ItemProjectionWriter | LoopControl | RepositoryLabelProjectionReader | RepositoryLabelProjectionWriter | RunEngine | RunReader, RunEngineError, StepExecutor | TriggerCondition>;
19
+ export declare const layer: (instanceDirectory: InstanceDirectory) => Layer.Layer<BoardMoves | CursorStore | CycleBudgets | ItemProjectionReader | ItemProjectionWriter | LoopControl | RepositoryLabelProjectionReader | RepositoryLabelProjectionWriter | RunEngine | RunReader | UnconfirmedStops, RunEngineError, StepExecutor | TriggerCondition>;
19
20
  /** Returns the observation layer, which initializes the local database but never recovers Runs or starts Attempts. */
20
- export declare const observationLayer: (instanceDirectory: InstanceDirectory) => Layer.Layer<CycleBudgets | ItemProjectionReader | LoopControl | RepositoryLabelProjectionReader | RunReader, RunEngineError>;
21
+ export declare const observationLayer: (instanceDirectory: InstanceDirectory) => Layer.Layer<CycleBudgets | ItemProjectionReader | LoopControl | RepositoryLabelProjectionReader | RunReader | UnconfirmedStops, RunEngineError>;
21
22
  /** Returns a layer that opens an existing `.usine/runtime.sqlite` read-only, without initializing or migrating it. */
22
23
  export declare const runReaderLayer: (instanceDirectory: InstanceDirectory) => Layer.Layer<RunReader, EnginePersistenceError>;
23
24
  declare const RuntimeStoreBackupError_base: Schema.Class<RuntimeStoreBackupError, Schema.TaggedStruct<"RuntimeStoreBackupError", {
@@ -1 +1 @@
1
- {"version":3,"file":"local-sqlite.d.ts","sourceRoot":"","sources":["../../src/database/local-sqlite.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AAKvD,OAAO,EAAE,MAAM,EAAc,KAAK,EAA+B,MAAM,EAAE,MAAM,QAAQ,CAAC;AAExF,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAClD,OAAO,EAAE,oBAAoB,EAAE,oBAAoB,EAAE,MAAM,uCAAuC,CAAC;AACnG,OAAO,EACL,+BAA+B,EAC/B,+BAA+B,EAChC,MAAM,+DAA+D,CAAC;AACvE,OAAO,EAAE,WAAW,EAAE,MAAM,iCAAiC,CAAC;AAC9D,OAAO,EAAE,UAAU,EAAE,MAAM,+BAA+B,CAAC;AAC3D,OAAO,EAAE,YAAY,EAAE,MAAM,iCAAiC,CAAC;AAC/D,OAAO,EAAqB,KAAK,SAAS,EAAE,MAAM,qBAAqB,CAAC;AACxE,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AAC9D,OAAO,EAAE,sBAAsB,EAAE,KAAK,cAAc,EAAE,MAAM,oBAAoB,CAAC;AACjF,OAAO,EAAE,SAAS,EAAE,MAAM,6BAA6B,CAAC;AACxD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACxD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAChE,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAuB5C,eAAO,MAAM,gBAAgB,sBAAuB,iBAAiB,4IAyBpE,CAAC;AAEF,kEAAkE;AAClE,eAAO,MAAM,KAAK,sBACG,iBAAiB,KACnC,KAAK,CAAC,KAAK,CACV,UAAU,GACV,WAAW,GACX,YAAY,GACZ,oBAAoB,GACpB,oBAAoB,GACpB,WAAW,GACX,+BAA+B,GAC/B,+BAA+B,GAC/B,SAAS,GACT,SAAS,EACX,cAAc,EACd,YAAY,GAAG,gBAAgB,CACkE,CAAC;AAEpG,sHAAsH;AACtH,eAAO,MAAM,gBAAgB,sBACR,iBAAiB,KACnC,KAAK,CAAC,KAAK,CACZ,YAAY,GAAG,oBAAoB,GAAG,WAAW,GAAG,+BAA+B,GAAG,SAAS,EAC/F,cAAc,CAUf,CAAC;AAiCF,sHAAsH;AACtH,eAAO,MAAM,cAAc,sBACN,iBAAiB,KACnC,KAAK,CAAC,KAAK,CAAC,SAAS,EAAE,sBAAsB,CAM/C,CAAC;;;;;;;;AAEF,8FAA8F;AAC9F,qBAAa,uBAAwB,SAAQ,4BAQ3C;CAAG;AAmBL;;;GAGG;AACH,eAAO,MAAM,MAAM,6JAuDlB,CAAC"}
1
+ {"version":3,"file":"local-sqlite.d.ts","sourceRoot":"","sources":["../../src/database/local-sqlite.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AAKvD,OAAO,EAAE,MAAM,EAAc,KAAK,EAA+B,MAAM,EAAE,MAAM,QAAQ,CAAC;AAExF,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAClD,OAAO,EAAE,oBAAoB,EAAE,oBAAoB,EAAE,MAAM,uCAAuC,CAAC;AACnG,OAAO,EACL,+BAA+B,EAC/B,+BAA+B,EAChC,MAAM,+DAA+D,CAAC;AACvE,OAAO,EAAE,WAAW,EAAE,MAAM,iCAAiC,CAAC;AAC9D,OAAO,EAAE,UAAU,EAAE,MAAM,+BAA+B,CAAC;AAC3D,OAAO,EAAE,YAAY,EAAE,MAAM,iCAAiC,CAAC;AAC/D,OAAO,EAAqB,KAAK,SAAS,EAAE,MAAM,qBAAqB,CAAC;AACxE,OAAO,EAAE,gBAAgB,EAAE,MAAM,gCAAgC,CAAC;AAClE,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AAC9D,OAAO,EAAE,sBAAsB,EAAE,KAAK,cAAc,EAAE,MAAM,oBAAoB,CAAC;AACjF,OAAO,EAAE,SAAS,EAAE,MAAM,6BAA6B,CAAC;AACxD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACxD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAChE,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AA+B5C,eAAO,MAAM,gBAAgB,sBAAuB,iBAAiB,mIAyBpE,CAAC;AAEF,kEAAkE;AAClE,eAAO,MAAM,KAAK,sBACG,iBAAiB,KACnC,KAAK,CAAC,KAAK,CACV,UAAU,GACV,WAAW,GACX,YAAY,GACZ,oBAAoB,GACpB,oBAAoB,GACpB,WAAW,GACX,+BAA+B,GAC/B,+BAA+B,GAC/B,SAAS,GACT,SAAS,GACT,gBAAgB,EAClB,cAAc,EACd,YAAY,GAAG,gBAAgB,CACkE,CAAC;AAEpG,sHAAsH;AACtH,eAAO,MAAM,gBAAgB,sBACR,iBAAiB,KACnC,KAAK,CAAC,KAAK,CACV,YAAY,GACZ,oBAAoB,GACpB,WAAW,GACX,+BAA+B,GAC/B,SAAS,GACT,gBAAgB,EAClB,cAAc,CAUf,CAAC;AAmCF,sHAAsH;AACtH,eAAO,MAAM,cAAc,sBACN,iBAAiB,KACnC,KAAK,CAAC,KAAK,CAAC,SAAS,EAAE,sBAAsB,CAM/C,CAAC;;;;;;;;AAEF,8FAA8F;AAC9F,qBAAa,uBAAwB,SAAQ,4BAQ3C;CAAG;AAmBL;;;GAGG;AACH,eAAO,MAAM,MAAM,6JAwDlB,CAAC"}
@@ -12,17 +12,20 @@ import { LoopControl } from "../loop-control/loop-control.js";
12
12
  import { BoardMoves } from "../board-moves/board-moves.js";
13
13
  import { CycleBudgets } from "../cycle-budget/cycle-budget.js";
14
14
  import { layerWithDatabase } from "../engine/engine.js";
15
+ import { UnconfirmedStops } from "../engine/unconfirmed-stops.js";
15
16
  import { EnginePersistenceError } from "../engine/error.js";
16
17
  import { RunReader } from "../run-reader/run-reader.js";
17
18
  import { RunDatabase } from "./database.js";
18
19
  const migrationsFolder = fileURLToPath(new URL("../../drizzle", import.meta.url));
19
20
  const startupError = (operation, cause) => new EnginePersistenceError({ operation, cause });
20
21
  const runtimeStorePath = (path, instanceDirectory) => path.join(instanceDirectory, ".usine", "runtime.sqlite");
22
+ /** Returns `SqliteClient.layer`, failing with `onError` when the database can't be opened. */
23
+ const openSqliteLayer = (config, onError) => Layer.effectContext(Layer.build(SqliteClient.layer(config)).pipe(Effect.mapError(onError)));
21
24
  const sqliteClientLayer = (instanceDirectory) => Layer.unwrap(Effect.gen(function* () {
22
25
  const fileSystem = yield* FileSystem.FileSystem;
23
26
  const path = yield* Path.Path;
24
27
  yield* fileSystem.makeDirectory(path.join(instanceDirectory, ".usine"), { recursive: true });
25
- return SqliteClient.layer({ filename: runtimeStorePath(path, instanceDirectory) });
28
+ return openSqliteLayer({ filename: runtimeStorePath(path, instanceDirectory) }, (cause) => startupError("open local database", cause));
26
29
  }).pipe(Effect.mapError((cause) => startupError("prepare local database directory", cause)), Effect.provide(NodeServices.layer)));
27
30
  export const localSqliteLayer = (instanceDirectory) => {
28
31
  const sqlClient = sqliteClientLayer(instanceDirectory);
@@ -48,7 +51,7 @@ export const layer = (instanceDirectory) => layerWithDatabase(localSqliteLayer(i
48
51
  /** Returns the observation layer, which initializes the local database but never recovers Runs or starts Attempts. */
49
52
  export const observationLayer = (instanceDirectory) => {
50
53
  const database = localSqliteLayer(instanceDirectory);
51
- return Layer.mergeAll(CycleBudgets.layer, ItemProjectionReader.layer, LoopControl.layer, RepositoryLabelProjectionReader.layer, RunReader.layer).pipe(Layer.provide(database));
54
+ return Layer.mergeAll(CycleBudgets.layer, ItemProjectionReader.layer, LoopControl.layer, RepositoryLabelProjectionReader.layer, RunReader.layer).pipe(Layer.provide(database), Layer.merge(UnconfirmedStops.empty));
52
55
  };
53
56
  const readableRuntimeStore = Effect.fn("LocalSqlite.readableRuntimeStore")(function* (filename) {
54
57
  const fileSystem = yield* FileSystem.FileSystem;
@@ -63,11 +66,11 @@ const readableRuntimeStore = Effect.fn("LocalSqlite.readableRuntimeStore")(funct
63
66
  description: `Expected a regular SQLite file, found ${info.type}`,
64
67
  });
65
68
  });
66
- const readOnlySqliteLayer = (filename) => SqliteClient.layer({ filename, readonly: true, disableWAL: true });
69
+ const readOnlySqliteLayer = (filename, onError) => openSqliteLayer({ filename, readonly: true, disableWAL: true }, onError);
67
70
  const existingSqliteLayer = (instanceDirectory) => Layer.unwrap(Effect.gen(function* () {
68
71
  const filename = runtimeStorePath(yield* Path.Path, instanceDirectory);
69
72
  yield* readableRuntimeStore(filename);
70
- return readOnlySqliteLayer(filename);
73
+ return readOnlySqliteLayer(filename, (cause) => startupError("open existing local database", cause));
71
74
  }).pipe(Effect.mapError((cause) => startupError("open existing local database", cause)), Effect.provide(NodeServices.layer)));
72
75
  /** Returns a layer that opens an existing `.usine/runtime.sqlite` read-only, without initializing or migrating it. */
73
76
  export const runReaderLayer = (instanceDirectory) => {
@@ -111,13 +114,14 @@ export const backup = Effect.fn("LocalSqlite.backup")(function* (instanceDirecto
111
114
  const fileSystem = yield* FileSystem.FileSystem;
112
115
  const path = yield* Path.Path;
113
116
  const source = runtimeStorePath(path, instanceDirectory);
114
- const failed = (operation) => Effect.mapError((cause) => new RuntimeStoreBackupError({
117
+ const failure = (operation) => (cause) => new RuntimeStoreBackupError({
115
118
  operation,
116
119
  source,
117
120
  destination,
118
121
  reason: failureReason(cause),
119
122
  cause,
120
- }));
123
+ });
124
+ const failed = (operation) => Effect.mapError(failure(operation));
121
125
  yield* readableRuntimeStore(source).pipe(failed("open"));
122
126
  const { totalPages } = yield* Effect.scoped(Effect.gen(function* () {
123
127
  const directory = path.dirname(destination);
@@ -130,7 +134,7 @@ export const backup = Effect.fn("LocalSqlite.backup")(function* (instanceDirecto
130
134
  .pipe(failed("stage"));
131
135
  const metadata = yield* Effect.flatMap(SqliteClient.SqliteClient, (client) =>
132
136
  // Node's backup can't be canceled; wait before closing the database or deleting staging.
133
- client.backup(staged).pipe(failed("copy"), Effect.uninterruptible)).pipe(Effect.provide(readOnlySqliteLayer(source)));
137
+ client.backup(staged).pipe(failed("copy"), Effect.uninterruptible)).pipe(Effect.provide(readOnlySqliteLayer(source, failure("open"))));
134
138
  // A hard link atomically creates the destination without overwriting it.
135
139
  yield* fileSystem.link(staged, destination).pipe(failed("publish"));
136
140
  return metadata;
@@ -1 +1 @@
1
- {"version":3,"file":"local-sqlite.js","sourceRoot":"","sources":["../../src/database/local-sqlite.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"local-sqlite.js","sourceRoot":"","sources":["../../src/database/local-sqlite.ts"],"names":[],"mappings":"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"}
@@ -627,6 +627,95 @@ export declare const cycleResets: import("drizzle-orm/sqlite-core").SQLiteTableW
627
627
  dialect: 'sqlite';
628
628
  isAlias: false;
629
629
  }>;
630
+ /** Asks closed without a reset; the Item keeps its generation and reservations. */
631
+ export declare const cycleAskClosures: import("drizzle-orm/sqlite-core").SQLiteTableWithColumns<{
632
+ name: "usine_cycle_ask_closures";
633
+ schema: undefined;
634
+ columns: {
635
+ askId: import("drizzle-orm/sqlite-core").SQLiteColumn<{
636
+ name: string;
637
+ tableName: "usine_cycle_ask_closures";
638
+ dataType: "string";
639
+ data: string & import("effect/Brand").Brand<"EventId"> & import("effect/Brand").Brand<"CycleBudgetAskId">;
640
+ driverParam: string;
641
+ notNull: true;
642
+ hasDefault: false;
643
+ isPrimaryKey: true;
644
+ isAutoincrement: false;
645
+ hasRuntimeDefault: false;
646
+ enumValues: [string, ...string[]];
647
+ baseColumn: never;
648
+ identity: undefined;
649
+ generated: undefined;
650
+ }, {}>;
651
+ itemKey: import("drizzle-orm/sqlite-core").SQLiteColumn<{
652
+ name: string;
653
+ tableName: "usine_cycle_ask_closures";
654
+ dataType: "string";
655
+ data: string & import("effect/Brand").Brand<"ItemKey">;
656
+ driverParam: string;
657
+ notNull: true;
658
+ hasDefault: false;
659
+ isPrimaryKey: false;
660
+ isAutoincrement: false;
661
+ hasRuntimeDefault: false;
662
+ enumValues: [string, ...string[]];
663
+ baseColumn: never;
664
+ identity: undefined;
665
+ generated: undefined;
666
+ }, {}>;
667
+ reason: import("drizzle-orm/sqlite-core").SQLiteColumn<{
668
+ name: string;
669
+ tableName: "usine_cycle_ask_closures";
670
+ dataType: "string enum";
671
+ data: "ItemClosed";
672
+ driverParam: string;
673
+ notNull: true;
674
+ hasDefault: false;
675
+ isPrimaryKey: false;
676
+ isAutoincrement: false;
677
+ hasRuntimeDefault: false;
678
+ enumValues: ["ItemClosed"];
679
+ baseColumn: never;
680
+ identity: undefined;
681
+ generated: undefined;
682
+ }, {}>;
683
+ askJson: import("drizzle-orm/sqlite-core").SQLiteColumn<{
684
+ name: string;
685
+ tableName: "usine_cycle_ask_closures";
686
+ dataType: "object json";
687
+ data: unknown;
688
+ driverParam: string;
689
+ notNull: true;
690
+ hasDefault: false;
691
+ isPrimaryKey: false;
692
+ isAutoincrement: false;
693
+ hasRuntimeDefault: false;
694
+ enumValues: undefined;
695
+ baseColumn: never;
696
+ identity: undefined;
697
+ generated: undefined;
698
+ }, {}>;
699
+ closedAt: import("drizzle-orm/sqlite-core").SQLiteColumn<{
700
+ name: string;
701
+ tableName: "usine_cycle_ask_closures";
702
+ dataType: "string";
703
+ data: string;
704
+ driverParam: string;
705
+ notNull: true;
706
+ hasDefault: false;
707
+ isPrimaryKey: false;
708
+ isAutoincrement: false;
709
+ hasRuntimeDefault: false;
710
+ enumValues: [string, ...string[]];
711
+ baseColumn: never;
712
+ identity: undefined;
713
+ generated: undefined;
714
+ }, {}>;
715
+ };
716
+ dialect: 'sqlite';
717
+ isAlias: false;
718
+ }>;
630
719
  export declare const runs: import("drizzle-orm/sqlite-core").SQLiteTableWithColumns<{
631
720
  name: "usine_runs";
632
721
  schema: undefined;
@@ -1159,6 +1248,22 @@ export declare const attempts: import("drizzle-orm/sqlite-core").SQLiteTableWith
1159
1248
  identity: undefined;
1160
1249
  generated: undefined;
1161
1250
  }, {}>;
1251
+ failureResolutionJson: import("drizzle-orm/sqlite-core").SQLiteColumn<{
1252
+ name: string;
1253
+ tableName: "usine_attempts";
1254
+ dataType: "object json";
1255
+ data: unknown;
1256
+ driverParam: string;
1257
+ notNull: false;
1258
+ hasDefault: false;
1259
+ isPrimaryKey: false;
1260
+ isAutoincrement: false;
1261
+ hasRuntimeDefault: false;
1262
+ enumValues: undefined;
1263
+ baseColumn: never;
1264
+ identity: undefined;
1265
+ generated: undefined;
1266
+ }, {}>;
1162
1267
  reattachedAt: import("drizzle-orm/sqlite-core").SQLiteColumn<{
1163
1268
  name: string;
1164
1269
  tableName: "usine_attempts";
@@ -1191,6 +1296,22 @@ export declare const attempts: import("drizzle-orm/sqlite-core").SQLiteTableWith
1191
1296
  identity: undefined;
1192
1297
  generated: undefined;
1193
1298
  }, {}>;
1299
+ outOfMemoryJson: import("drizzle-orm/sqlite-core").SQLiteColumn<{
1300
+ name: string;
1301
+ tableName: "usine_attempts";
1302
+ dataType: "object json";
1303
+ data: unknown;
1304
+ driverParam: string;
1305
+ notNull: false;
1306
+ hasDefault: false;
1307
+ isPrimaryKey: false;
1308
+ isAutoincrement: false;
1309
+ hasRuntimeDefault: false;
1310
+ enumValues: undefined;
1311
+ baseColumn: never;
1312
+ identity: undefined;
1313
+ generated: undefined;
1314
+ }, {}>;
1194
1315
  };
1195
1316
  dialect: 'sqlite';
1196
1317
  isAlias: false;
@@ -1 +1 @@
1
- {"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../src/database/schema.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../src/database/schema.ts"],"names":[],"mappings":"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"}
@@ -14,6 +14,7 @@ import { StepName } from "@usine/core/step";
14
14
  import { WorkerName } from "@usine/core/worker";
15
15
  import { sql } from "drizzle-orm";
16
16
  import { check, foreignKey, index, integer, primaryKey, snakeCase, text, uniqueIndex, } from "drizzle-orm/sqlite-core";
17
+ import { CYCLE_BUDGET_ASK_CLOSE_REASONS, } from "../cycle-budget/model.js";
17
18
  import { IGNORED_REASONS } from "../engine/submission.js";
18
19
  export const events = snakeCase.table("usine_events", {
19
20
  eventId: text().$type().primaryKey(),
@@ -113,6 +114,22 @@ export const cycleResets = snakeCase.table("usine_cycle_resets", {
113
114
  .notNull()
114
115
  .references(() => itemCycleBudgets.itemKey),
115
116
  });
117
+ /** Asks closed without a reset; the Item keeps its generation and reservations. */
118
+ export const cycleAskClosures = snakeCase.table("usine_cycle_ask_closures", {
119
+ askId: text().$type().primaryKey(),
120
+ itemKey: text()
121
+ .$type()
122
+ .notNull()
123
+ .references(() => itemCycleBudgets.itemKey),
124
+ reason: text({ enum: CYCLE_BUDGET_ASK_CLOSE_REASONS })
125
+ .$type()
126
+ .notNull(),
127
+ askJson: text({ mode: "json" }).$type().notNull(),
128
+ closedAt: text().notNull(),
129
+ }, (table) => [
130
+ check("usine_cycle_ask_closures_reason", sql `${table.reason} in ('ItemClosed')`),
131
+ check("usine_cycle_ask_closures_ask_json", sql `json_valid(${table.askJson})`),
132
+ ]);
116
133
  export const runs = snakeCase.table("usine_runs", {
117
134
  runId: text().$type().primaryKey(),
118
135
  eventId: text()
@@ -173,10 +190,16 @@ export const attempts = snakeCase.table("usine_attempts", {
173
190
  leftoversDiscardedAt: text(),
174
191
  /** The reason the Attempt started; `null` for older Attempts. */
175
192
  startJson: text({ mode: "json" }).$type(),
193
+ failureResolutionJson: text({ mode: "json" }).$type(),
176
194
  /** The last time an orchestrator restart reattached the Attempt, or `null`. */
177
195
  reattachedAt: text(),
178
196
  /** The comments and reviews posted by an unsuccessful Attempt, or `null` if none were recorded. */
179
197
  commentsJson: text({ mode: "json" }).$type(),
198
+ /**
199
+ * The processes the kernel killed for memory in each of the Attempt's containers that had
200
+ * kills, by container ID, or `null` if none.
201
+ */
202
+ outOfMemoryJson: text({ mode: "json" }).$type(),
180
203
  }, (table) => [
181
204
  check("usine_attempts_number", sql `${table.attemptNumber} >= 1`),
182
205
  check("usine_attempts_brain_json_valid", sql `json_valid(${table.brainJson})`),