@usine/orchestrator 0.2.1 → 0.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (222) hide show
  1. package/LICENSE +661 -21
  2. package/README.md +174 -52
  3. package/dist/board/items.d.ts +22 -3
  4. package/dist/board/items.d.ts.map +1 -1
  5. package/dist/board/items.js +44 -4
  6. package/dist/board/items.js.map +1 -1
  7. package/dist/board/projection.d.ts +8 -1
  8. package/dist/board/projection.d.ts.map +1 -1
  9. package/dist/board/projection.js +63 -14
  10. package/dist/board/projection.js.map +1 -1
  11. package/dist/board/tasks.d.ts +15 -3
  12. package/dist/board/tasks.d.ts.map +1 -1
  13. package/dist/board/tasks.js +28 -9
  14. package/dist/board/tasks.js.map +1 -1
  15. package/dist/cloudflare.d.ts +32 -0
  16. package/dist/cloudflare.d.ts.map +1 -0
  17. package/dist/cloudflare.js +68 -0
  18. package/dist/cloudflare.js.map +1 -0
  19. package/dist/credentials.d.ts +5 -6
  20. package/dist/credentials.d.ts.map +1 -1
  21. package/dist/credentials.js +22 -15
  22. package/dist/credentials.js.map +1 -1
  23. package/dist/current-instance/changes.d.ts +87 -0
  24. package/dist/current-instance/changes.d.ts.map +1 -0
  25. package/dist/current-instance/changes.js +141 -0
  26. package/dist/current-instance/changes.js.map +1 -0
  27. package/dist/current-instance/current-instance.d.ts +89 -0
  28. package/dist/current-instance/current-instance.d.ts.map +1 -0
  29. package/dist/current-instance/current-instance.js +163 -0
  30. package/dist/current-instance/current-instance.js.map +1 -0
  31. package/dist/exe-dev.d.ts +6 -2
  32. package/dist/exe-dev.d.ts.map +1 -1
  33. package/dist/exe-dev.js +10 -9
  34. package/dist/exe-dev.js.map +1 -1
  35. package/dist/http-client.d.ts +8 -0
  36. package/dist/http-client.d.ts.map +1 -0
  37. package/dist/http-client.js +8 -0
  38. package/dist/http-client.js.map +1 -0
  39. package/dist/idle-triggers.d.ts +1 -1
  40. package/dist/idle-triggers.d.ts.map +1 -1
  41. package/dist/idle-triggers.js +1 -1
  42. package/dist/idle-triggers.js.map +1 -1
  43. package/dist/label-reconciler.d.ts +5 -2
  44. package/dist/label-reconciler.d.ts.map +1 -1
  45. package/dist/label-reconciler.js.map +1 -1
  46. package/dist/lease-order.d.ts +60 -0
  47. package/dist/lease-order.d.ts.map +1 -0
  48. package/dist/lease-order.js +76 -0
  49. package/dist/lease-order.js.map +1 -0
  50. package/dist/local.d.ts +4 -18
  51. package/dist/local.d.ts.map +1 -1
  52. package/dist/local.js +9 -45
  53. package/dist/local.js.map +1 -1
  54. package/dist/loop-matches.d.ts +28 -0
  55. package/dist/loop-matches.d.ts.map +1 -0
  56. package/dist/loop-matches.js +74 -0
  57. package/dist/loop-matches.js.map +1 -0
  58. package/dist/operator/attempt.d.ts +76 -10
  59. package/dist/operator/attempt.d.ts.map +1 -1
  60. package/dist/operator/attempt.js +69 -11
  61. package/dist/operator/attempt.js.map +1 -1
  62. package/dist/operator/board.d.ts +48 -16
  63. package/dist/operator/board.d.ts.map +1 -1
  64. package/dist/operator/board.js +48 -17
  65. package/dist/operator/board.js.map +1 -1
  66. package/dist/operator/configuration.d.ts +314 -0
  67. package/dist/operator/configuration.d.ts.map +1 -0
  68. package/dist/operator/configuration.js +490 -0
  69. package/dist/operator/configuration.js.map +1 -0
  70. package/dist/operator/desk.d.ts +206 -0
  71. package/dist/operator/desk.d.ts.map +1 -0
  72. package/dist/operator/desk.js +525 -0
  73. package/dist/operator/desk.js.map +1 -0
  74. package/dist/operator/github-changes.d.ts +88 -0
  75. package/dist/operator/github-changes.d.ts.map +1 -0
  76. package/dist/operator/github-changes.js +266 -0
  77. package/dist/operator/github-changes.js.map +1 -0
  78. package/dist/operator/http.d.ts +135 -105
  79. package/dist/operator/http.d.ts.map +1 -1
  80. package/dist/operator/http.js +155 -30
  81. package/dist/operator/http.js.map +1 -1
  82. package/dist/operator/machines.d.ts +71 -0
  83. package/dist/operator/machines.d.ts.map +1 -0
  84. package/dist/operator/machines.js +103 -0
  85. package/dist/operator/machines.js.map +1 -0
  86. package/dist/operator/need.d.ts +58 -11
  87. package/dist/operator/need.d.ts.map +1 -1
  88. package/dist/operator/need.js +61 -9
  89. package/dist/operator/need.js.map +1 -1
  90. package/dist/operator/operator.d.ts +135 -29
  91. package/dist/operator/operator.d.ts.map +1 -1
  92. package/dist/operator/operator.js +370 -63
  93. package/dist/operator/operator.js.map +1 -1
  94. package/dist/operator/overview.d.ts +7 -7
  95. package/dist/operator/overview.d.ts.map +1 -1
  96. package/dist/operator/overview.js +5 -5
  97. package/dist/operator/overview.js.map +1 -1
  98. package/dist/operator/projection.d.ts +56 -5
  99. package/dist/operator/projection.d.ts.map +1 -1
  100. package/dist/operator/projection.js +108 -9
  101. package/dist/operator/projection.js.map +1 -1
  102. package/dist/operator/run.d.ts +101 -6
  103. package/dist/operator/run.d.ts.map +1 -1
  104. package/dist/operator/run.js +100 -7
  105. package/dist/operator/run.js.map +1 -1
  106. package/dist/operator/statistics/cache.d.ts +7 -0
  107. package/dist/operator/statistics/cache.d.ts.map +1 -0
  108. package/dist/operator/statistics/cache.js +40 -0
  109. package/dist/operator/statistics/cache.js.map +1 -0
  110. package/dist/operator/statistics/runs.d.ts +36 -0
  111. package/dist/operator/statistics/runs.d.ts.map +1 -0
  112. package/dist/operator/statistics/runs.js +284 -0
  113. package/dist/operator/statistics/runs.js.map +1 -0
  114. package/dist/operator/statistics/statistics.d.ts +20 -0
  115. package/dist/operator/statistics/statistics.d.ts.map +1 -0
  116. package/dist/operator/statistics/statistics.js +138 -0
  117. package/dist/operator/statistics/statistics.js.map +1 -0
  118. package/dist/operator/statistics/tasks.d.ts +30 -0
  119. package/dist/operator/statistics/tasks.d.ts.map +1 -0
  120. package/dist/operator/statistics/tasks.js +244 -0
  121. package/dist/operator/statistics/tasks.js.map +1 -0
  122. package/dist/operator/statistics/view.d.ts +302 -0
  123. package/dist/operator/statistics/view.d.ts.map +1 -0
  124. package/dist/operator/statistics/view.js +243 -0
  125. package/dist/operator/statistics/view.js.map +1 -0
  126. package/dist/operator/statistics/window.d.ts +24 -0
  127. package/dist/operator/statistics/window.d.ts.map +1 -0
  128. package/dist/operator/statistics/window.js +47 -0
  129. package/dist/operator/statistics/window.js.map +1 -0
  130. package/dist/operator/task.d.ts +94 -0
  131. package/dist/operator/task.d.ts.map +1 -0
  132. package/dist/operator/task.js +204 -0
  133. package/dist/operator/task.js.map +1 -0
  134. package/dist/operator/transcript.d.ts +12 -12
  135. package/dist/operator/transcript.d.ts.map +1 -1
  136. package/dist/operator/transcript.js +11 -9
  137. package/dist/operator/transcript.js.map +1 -1
  138. package/dist/operator/usage.d.ts +103 -0
  139. package/dist/operator/usage.d.ts.map +1 -0
  140. package/dist/operator/usage.js +234 -0
  141. package/dist/operator/usage.js.map +1 -0
  142. package/dist/orchestrator.d.ts +8 -5
  143. package/dist/orchestrator.d.ts.map +1 -1
  144. package/dist/orchestrator.js +4 -2
  145. package/dist/orchestrator.js.map +1 -1
  146. package/dist/polling/closed-item-asks.d.ts +8 -0
  147. package/dist/polling/closed-item-asks.d.ts.map +1 -0
  148. package/dist/polling/closed-item-asks.js +28 -0
  149. package/dist/polling/closed-item-asks.js.map +1 -0
  150. package/dist/polling/cycle.d.ts +28 -10
  151. package/dist/polling/cycle.d.ts.map +1 -1
  152. package/dist/polling/cycle.js +20 -6
  153. package/dist/polling/cycle.js.map +1 -1
  154. package/dist/polling/evaluation-failures.d.ts +42 -0
  155. package/dist/polling/evaluation-failures.d.ts.map +1 -0
  156. package/dist/polling/evaluation-failures.js +103 -0
  157. package/dist/polling/evaluation-failures.js.map +1 -0
  158. package/dist/polling/hints.d.ts +2 -2
  159. package/dist/polling/hints.d.ts.map +1 -1
  160. package/dist/polling/hints.js +2 -2
  161. package/dist/polling/hints.js.map +1 -1
  162. package/dist/polling/loop-evaluation.d.ts +21 -11
  163. package/dist/polling/loop-evaluation.d.ts.map +1 -1
  164. package/dist/polling/loop-evaluation.js +70 -27
  165. package/dist/polling/loop-evaluation.js.map +1 -1
  166. package/dist/polling/open-issues.d.ts +23 -0
  167. package/dist/polling/open-issues.d.ts.map +1 -0
  168. package/dist/polling/open-issues.js +77 -0
  169. package/dist/polling/open-issues.js.map +1 -0
  170. package/dist/polling/open-pull-requests.d.ts +28 -0
  171. package/dist/polling/open-pull-requests.d.ts.map +1 -0
  172. package/dist/polling/open-pull-requests.js +131 -0
  173. package/dist/polling/open-pull-requests.js.map +1 -0
  174. package/dist/polling/polling.d.ts +20 -11
  175. package/dist/polling/polling.d.ts.map +1 -1
  176. package/dist/polling/polling.js +215 -52
  177. package/dist/polling/polling.js.map +1 -1
  178. package/dist/polling/repository-sync.d.ts +21 -14
  179. package/dist/polling/repository-sync.d.ts.map +1 -1
  180. package/dist/polling/repository-sync.js +35 -28
  181. package/dist/polling/repository-sync.js.map +1 -1
  182. package/dist/polling-triggers.d.ts +1 -1
  183. package/dist/polling-triggers.d.ts.map +1 -1
  184. package/dist/polling-triggers.js +1 -1
  185. package/dist/polling-triggers.js.map +1 -1
  186. package/dist/reloads.d.ts +14 -0
  187. package/dist/reloads.d.ts.map +1 -0
  188. package/dist/reloads.js +7 -0
  189. package/dist/reloads.js.map +1 -0
  190. package/dist/runtime.d.ts +24 -0
  191. package/dist/runtime.d.ts.map +1 -0
  192. package/dist/runtime.js +58 -0
  193. package/dist/runtime.js.map +1 -0
  194. package/dist/schedule-triggers.d.ts +14 -10
  195. package/dist/schedule-triggers.d.ts.map +1 -1
  196. package/dist/schedule-triggers.js +36 -31
  197. package/dist/schedule-triggers.js.map +1 -1
  198. package/dist/scheduler.d.ts +45 -5
  199. package/dist/scheduler.d.ts.map +1 -1
  200. package/dist/scheduler.js +587 -44
  201. package/dist/scheduler.js.map +1 -1
  202. package/dist/ssh.d.ts +103 -0
  203. package/dist/ssh.d.ts.map +1 -0
  204. package/dist/ssh.js +144 -0
  205. package/dist/ssh.js.map +1 -0
  206. package/dist/trigger-condition.d.ts +12 -0
  207. package/dist/trigger-condition.d.ts.map +1 -0
  208. package/dist/trigger-condition.js +88 -0
  209. package/dist/trigger-condition.js.map +1 -0
  210. package/dist/trigger-submission.d.ts +16 -13
  211. package/dist/trigger-submission.d.ts.map +1 -1
  212. package/dist/trigger-submission.js +19 -14
  213. package/dist/trigger-submission.js.map +1 -1
  214. package/dist/worker-engine.d.ts +13 -0
  215. package/dist/worker-engine.d.ts.map +1 -0
  216. package/dist/worker-engine.js +56 -0
  217. package/dist/worker-engine.js.map +1 -0
  218. package/dist/worker-status.d.ts +140 -0
  219. package/dist/worker-status.d.ts.map +1 -0
  220. package/dist/worker-status.js +76 -0
  221. package/dist/worker-status.js.map +1 -0
  222. package/package.json +47 -22
@@ -1,19 +1,33 @@
1
1
  import { BrainSpec } from "@usine/core/agent/brain";
2
2
  import { ChildSessionBudget, ChildSessionCount } from "@usine/core/agent/session";
3
- import { AttemptNumber, AttemptId, AttemptTask } from "@usine/core/attempt";
3
+ import { AttemptNumber, AttemptId, AttemptTask, OutOfMemoryKills } from "@usine/core/attempt";
4
4
  import { AgentName } from "@usine/core/agent";
5
5
  import { RunawayCeiling } from "@usine/core/attempt/failure";
6
- import { WorkerName } from "@usine/core/worker";
7
- import { Schema } from "effect";
8
- /** An infra failure as the operator sees it; the defect cause stays behind this boundary. */
6
+ import { AttemptSalvage } from "@usine/core/attempt/salvage";
7
+ import { AttemptStart } from "@usine/core/attempt/start";
8
+ import { MachineProvider, SshDestination, SshPort, WorkerName } from "@usine/core/worker";
9
+ import { Effect, Schema } from "effect";
10
+ /** An infra failure without its defect cause. */
9
11
  export class InfraFailureView extends Schema.TaggedClass("@usine/orchestrator/InfraFailureView")("InfraFailure", { message: Schema.String }) {
10
12
  }
11
- /** A captured programmer defect requiring operator intervention; the original cause stays behind this boundary. */
13
+ /** A captured programmer defect that needs operator intervention, without the original cause. */
12
14
  export class DefectFailureView extends Schema.TaggedClass("@usine/orchestrator/DefectFailureView")("DefectFailure", { message: Schema.String }) {
13
15
  }
14
- /** An agent failure message safe to display to the operator. */
16
+ /** An agent failure message that is safe to show to the operator. */
15
17
  export class AgentFailureView extends Schema.TaggedClass("@usine/orchestrator/AgentFailureView")("AgentFailure", { message: Schema.String }) {
16
18
  }
19
+ /**
20
+ * The blocker an Agent reported when it stopped. The Item's next state opens no Run of the Loop
21
+ * (ADR 0017).
22
+ */
23
+ export class BlockedFailureView extends Schema.TaggedClass("@usine/orchestrator/BlockedFailureView")("BlockedFailure", { message: Schema.String }) {
24
+ }
25
+ /**
26
+ * The question an Agent asked the operator when it stopped. The Item's next state opens no Run of
27
+ * the Loop (ADR 0017).
28
+ */
29
+ export class QuestionFailureView extends Schema.TaggedClass("@usine/orchestrator/QuestionFailureView")("QuestionFailure", { question: Schema.String }) {
30
+ }
17
31
  /** The wall-clock or token ceiling that stopped an Attempt. */
18
32
  export class RunawayFailureView extends Schema.TaggedClass("@usine/orchestrator/RunawayFailureView")("RunawayFailure", { ceiling: RunawayCeiling }) {
19
33
  }
@@ -23,40 +37,84 @@ export class ChildSessionBudgetFailureView extends Schema.TaggedClass("@usine/or
23
37
  attemptedChildren: ChildSessionCount,
24
38
  }) {
25
39
  }
26
- /** An Attempt failure with only the details the operator can inspect. */
40
+ /** An Attempt failure with only the details shown to the operator. */
27
41
  export const FailureView = Schema.Union([
28
42
  InfraFailureView,
29
43
  DefectFailureView,
30
44
  AgentFailureView,
45
+ BlockedFailureView,
46
+ QuestionFailureView,
31
47
  RunawayFailureView,
32
48
  ChildSessionBudgetFailureView,
33
49
  ]);
34
- /** An Attempt that completed successfully. */
50
+ /** An Attempt that succeeded. */
35
51
  export class SucceededAttemptView extends Schema.TaggedClass("@usine/orchestrator/SucceededAttemptView")("Succeeded", {}) {
36
52
  }
37
- /** An Attempt that ended with a failure the operator can inspect. */
53
+ /** An Attempt that failed. */
38
54
  export class FailedAttemptView extends Schema.TaggedClass("@usine/orchestrator/FailedAttemptView")("Failed", { failure: FailureView }) {
39
55
  }
40
56
  /** An Attempt that ended after cancellation. */
41
57
  export class CanceledAttemptView extends Schema.TaggedClass("@usine/orchestrator/CanceledAttemptView")("Canceled", {}) {
42
58
  }
43
- /** The terminal outcome displayed for an Attempt; a live Attempt has no outcome. */
59
+ /** The terminal outcome of an Attempt. A running Attempt has none. */
44
60
  export const AttemptOutcomeView = Schema.Union([
45
61
  SucceededAttemptView,
46
62
  FailedAttemptView,
47
63
  CanceledAttemptView,
48
64
  ]);
49
- /** One Attempt's identity, Worker, effective brain, start time, and optional terminal outcome. */
65
+ /** A Worker on the orchestrator's machine, so its paths are local paths. */
66
+ export class LocalWorkerAccess extends Schema.TaggedClass("@usine/orchestrator/LocalWorkerAccess")("Local", {}) {
67
+ }
68
+ /**
69
+ * A Worker on another machine, accessed with `ssh` at `destination`. `port` is null if `usine.yaml`
70
+ * sets none, which uses the client's default.
71
+ */
72
+ export class SshWorkerAccess extends Schema.TaggedClass("@usine/orchestrator/SshWorkerAccess")("Ssh", { destination: SshDestination, port: Schema.NullOr(SshPort) }) {
73
+ }
74
+ /**
75
+ * A provisioned Worker, which created a machine for each Attempt at `provider` and deletes it
76
+ * once the Attempt's slot is released, so `usine.yaml` has no address for it.
77
+ */
78
+ export class ProvisionedWorkerAccess extends Schema.TaggedClass("@usine/orchestrator/ProvisionedWorkerAccess")("Provisioned", { provider: MachineProvider }) {
79
+ }
80
+ /**
81
+ * A Worker that runs each Attempt in its own Cloudflare sandbox, which accepts no operator terminal
82
+ * and is destroyed when the Attempt ends.
83
+ */
84
+ export class SandboxWorkerAccess extends Schema.TaggedClass("@usine/orchestrator/SandboxWorkerAccess")("Sandbox", {}) {
85
+ }
86
+ /** How the operator accesses a Worker's machine, from its `usine.yaml` entry. */
87
+ export const WorkerAccess = Schema.Union([
88
+ LocalWorkerAccess,
89
+ SshWorkerAccess,
90
+ ProvisionedWorkerAccess,
91
+ SandboxWorkerAccess,
92
+ ]);
93
+ /** One Attempt with its Worker, effective brain, start, end, outcome, and salvaged work. */
50
94
  export class AttemptView extends Schema.Class("@usine/orchestrator/AttemptView")({
51
95
  id: AttemptId,
52
96
  number: AttemptNumber,
53
97
  worker: WorkerName,
98
+ /** How the operator accesses `worker`, or null if `usine.yaml` no longer declares it. */
99
+ workerAccess: Schema.NullOr(WorkerAccess),
54
100
  brain: BrainSpec,
55
101
  task: AttemptTask,
56
102
  agent: AgentName,
57
103
  operatorIntervened: Schema.Boolean,
58
104
  startedAt: Schema.String,
59
105
  outcome: Schema.NullOr(AttemptOutcomeView),
106
+ /**
107
+ * When the outcome was recorded. Null while the Attempt runs and for Attempts closed before end
108
+ * times were recorded.
109
+ */
110
+ endedAt: Schema.NullOr(Schema.String),
111
+ salvage: Schema.NullOr(AttemptSalvage),
112
+ /** Why the Attempt began, or null for a later Attempt begun before this was recorded. */
113
+ start: Schema.NullOr(AttemptStart).pipe(Schema.withConstructorDefault(Effect.succeed(null))),
114
+ /** When an orchestrator restart last reattached the Attempt, or null if none did. */
115
+ reattachedAt: Schema.NullOr(Schema.String).pipe(Schema.withConstructorDefault(Effect.succeed(null))),
116
+ /** The processes the kernel killed in the Attempt's container for memory, or null if none. */
117
+ outOfMemory: Schema.NullOr(OutOfMemoryKills).pipe(Schema.withConstructorDefault(Effect.succeed(null))),
60
118
  }) {
61
119
  }
62
120
  //# sourceMappingURL=attempt.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"attempt.js","sourceRoot":"","sources":["../../src/operator/attempt.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAC;AACpD,OAAO,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AAClF,OAAO,EAAE,aAAa,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAC5E,OAAO,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAC9C,OAAO,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAC7D,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAChD,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAEhC,6FAA6F;AAC7F,MAAM,OAAO,gBAAiB,SAAQ,MAAM,CAAC,WAAW,CACtD,sCAAsC,CACvC,CAAC,cAAc,EAAE,EAAE,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC;CAAG;AAEhD,mHAAmH;AACnH,MAAM,OAAO,iBAAkB,SAAQ,MAAM,CAAC,WAAW,CACvD,uCAAuC,CACxC,CAAC,eAAe,EAAE,EAAE,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC;CAAG;AAEjD,gEAAgE;AAChE,MAAM,OAAO,gBAAiB,SAAQ,MAAM,CAAC,WAAW,CACtD,sCAAsC,CACvC,CAAC,cAAc,EAAE,EAAE,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC;CAAG;AAEhD,+DAA+D;AAC/D,MAAM,OAAO,kBAAmB,SAAQ,MAAM,CAAC,WAAW,CACxD,wCAAwC,CACzC,CAAC,gBAAgB,EAAE,EAAE,OAAO,EAAE,cAAc,EAAE,CAAC;CAAG;AAEnD,gFAAgF;AAChF,MAAM,OAAO,6BAA8B,SAAQ,MAAM,CAAC,WAAW,CACnE,mDAAmD,CACpD,CAAC,2BAA2B,EAAE;IAC7B,WAAW,EAAE,kBAAkB;IAC/B,iBAAiB,EAAE,iBAAiB;CACrC,CAAC;CAAG;AAEL,yEAAyE;AACzE,MAAM,CAAC,MAAM,WAAW,GAAG,MAAM,CAAC,KAAK,CAAC;IACtC,gBAAgB;IAChB,iBAAiB;IACjB,gBAAgB;IAChB,kBAAkB;IAClB,6BAA6B;CAC9B,CAAC,CAAC;AAGH,8CAA8C;AAC9C,MAAM,OAAO,oBAAqB,SAAQ,MAAM,CAAC,WAAW,CAC1D,0CAA0C,CAC3C,CAAC,WAAW,EAAE,EAAE,CAAC;CAAG;AAErB,qEAAqE;AACrE,MAAM,OAAO,iBAAkB,SAAQ,MAAM,CAAC,WAAW,CACvD,uCAAuC,CACxC,CAAC,QAAQ,EAAE,EAAE,OAAO,EAAE,WAAW,EAAE,CAAC;CAAG;AAExC,gDAAgD;AAChD,MAAM,OAAO,mBAAoB,SAAQ,MAAM,CAAC,WAAW,CACzD,yCAAyC,CAC1C,CAAC,UAAU,EAAE,EAAE,CAAC;CAAG;AAEpB,oFAAoF;AACpF,MAAM,CAAC,MAAM,kBAAkB,GAAG,MAAM,CAAC,KAAK,CAAC;IAC7C,oBAAoB;IACpB,iBAAiB;IACjB,mBAAmB;CACpB,CAAC,CAAC;AAGH,kGAAkG;AAClG,MAAM,OAAO,WAAY,SAAQ,MAAM,CAAC,KAAK,CAAc,iCAAiC,CAAC,CAAC;IAC5F,EAAE,EAAE,SAAS;IACb,MAAM,EAAE,aAAa;IACrB,MAAM,EAAE,UAAU;IAClB,KAAK,EAAE,SAAS;IAChB,IAAI,EAAE,WAAW;IACjB,KAAK,EAAE,SAAS;IAChB,kBAAkB,EAAE,MAAM,CAAC,OAAO;IAClC,SAAS,EAAE,MAAM,CAAC,MAAM;IACxB,OAAO,EAAE,MAAM,CAAC,MAAM,CAAC,kBAAkB,CAAC;CAC3C,CAAC;CAAG"}
1
+ {"version":3,"file":"attempt.js","sourceRoot":"","sources":["../../src/operator/attempt.ts"],"names":[],"mappings":"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"}
@@ -1,9 +1,10 @@
1
1
  import { Schema } from "effect";
2
2
  import { RunView } from "./run.ts";
3
- /** Identifies a lane within a Project's Board for operator moves. */
3
+ import { TaskUsageView } from "./usage.ts";
4
+ /** The ID of a lane on a Project's Board. */
4
5
  export declare const BoardLaneId: Schema.brand<Schema.NonEmptyString, "BoardLaneId">;
5
6
  export type BoardLaneId = typeof BoardLaneId.Type;
6
- /** Whether a lane came from authored settings, a proposal, or default grouping. */
7
+ /** The source of a lane: authored settings, a proposal, or default grouping. */
7
8
  export declare const BoardLaneOrigin: Schema.Literals<readonly ["authored", "proposed", "fallback"]>;
8
9
  export type BoardLaneOrigin = typeof BoardLaneOrigin.Type;
9
10
  declare const BoardItemLink_base: Schema.Class<BoardItemLink, Schema.Struct<{
@@ -12,10 +13,19 @@ declare const BoardItemLink_base: Schema.Class<BoardItemLink, Schema.Struct<{
12
13
  readonly number: Schema.brand<Schema.Int, "ItemNumber">;
13
14
  readonly title: Schema.String;
14
15
  readonly url: Schema.NonEmptyString;
16
+ readonly state: Schema.Literals<readonly ["issue-open", "issue-closed", "pr-open", "pr-closed", "pr-merged"]>;
15
17
  }>, {}>;
16
- /** An Item linked to a Task, with its own title and external destination. */
18
+ /** An Item of a Task, with its own title, GitHub URL, and GitHub state. */
17
19
  export declare class BoardItemLink extends BoardItemLink_base {
18
20
  }
21
+ declare const BoardPullRequestView_base: Schema.Class<BoardPullRequestView, Schema.Struct<{
22
+ readonly number: Schema.brand<Schema.Int, "ItemNumber">;
23
+ readonly url: Schema.NonEmptyString;
24
+ readonly state: Schema.Literals<readonly ["pr-open", "pr-merged"]>;
25
+ }>, {}>;
26
+ /** An open or merged pull request of a Task. Closed, unmerged pull requests are excluded. */
27
+ export declare class BoardPullRequestView extends BoardPullRequestView_base {
28
+ }
19
29
  declare const BoardTaskView_base: Schema.Class<BoardTaskView, Schema.Struct<{
20
30
  readonly itemKey: Schema.brand<Schema.NonEmptyString, "ItemKey">;
21
31
  readonly kind: Schema.Literals<readonly ["issue", "pr"]>;
@@ -25,12 +35,34 @@ declare const BoardTaskView_base: Schema.Class<BoardTaskView, Schema.Struct<{
25
35
  readonly state: Schema.Literals<readonly ["issue-open", "issue-closed", "pr-open", "pr-closed", "pr-merged"]>;
26
36
  readonly labels: Schema.$Array<Schema.brand<Schema.String, "GitHubLabelName">>;
27
37
  readonly items: Schema.$Array<typeof BoardItemLink>;
28
- /** Every saved Run for the visible Items, ordered from earliest to latest. */
38
+ /**
39
+ * The highest-numbered open pull request, else the highest-numbered merged one, or null if
40
+ * there is neither.
41
+ */
42
+ readonly pullRequest: Schema.NullOr<typeof BoardPullRequestView>;
43
+ /** Every saved Run for the visible Items, earliest first. */
29
44
  readonly runs: Schema.$Array<typeof RunView>;
45
+ /**
46
+ * The newest Run that needs the operator, else the open Run, else the newest Run, or null if
47
+ * there are no Runs. A failed Run on a closed or merged Item doesn't need the operator.
48
+ */
30
49
  readonly run: Schema.NullOr<typeof RunView>;
31
50
  readonly needsYou: Schema.Boolean;
51
+ /** Whether the current Item is an open pull request whose branch conflicts with its base. */
52
+ readonly conflicting: Schema.Boolean;
53
+ /**
54
+ * The Loops whose trigger currently matches one of the Task's Items, including paused Loops, in
55
+ * Item order and then Loop order.
56
+ */
57
+ readonly loops: Schema.$Array<Schema.brand<Schema.NonEmptyString, "LoopName">>;
58
+ /** The summed Attempt time, tokens, and cost of `runs`. */
59
+ readonly usage: typeof TaskUsageView;
32
60
  }>, {}>;
33
- /** A Task projected from linked Items. The current Item determines the key, lane, labels, and move destination; the first issue supplies the Task title. */
61
+ /**
62
+ * A Board card for a Task projected from linked Items and placed by its current Item. While the
63
+ * Task's newest open Run is running and the current Item has no lane label, the card stays in the
64
+ * lane that matched when the Run was triggered.
65
+ */
34
66
  export declare class BoardTaskView extends BoardTaskView_base {
35
67
  }
36
68
  declare const WritableBoardLaneView_base: Schema.Class<WritableBoardLaneView, Schema.TaggedStruct<"WritableBoardLane", {
@@ -41,7 +73,7 @@ declare const WritableBoardLaneView_base: Schema.Class<WritableBoardLaneView, Sc
41
73
  readonly origin: Schema.Literal<"authored">;
42
74
  readonly labels: Schema.$Array<Schema.brand<Schema.String, "GitHubLabelName">>;
43
75
  }>, {}>;
44
- /** An authored lane the operator can move Items into by applying its configured GitHub labels. */
76
+ /** An authored lane that the operator can move Items into by applying its GitHub labels. */
45
77
  export declare class WritableBoardLaneView extends WritableBoardLaneView_base {
46
78
  }
47
79
  declare const ReadOnlyBoardLaneView_base: Schema.Class<ReadOnlyBoardLaneView, Schema.TaggedStruct<"ReadOnlyBoardLane", {
@@ -51,10 +83,10 @@ declare const ReadOnlyBoardLaneView_base: Schema.Class<ReadOnlyBoardLaneView, Sc
51
83
  readonly origin: Schema.Literals<readonly ["authored", "proposed", "fallback"]>;
52
84
  readonly items: Schema.$Array<typeof BoardTaskView>;
53
85
  }>, {}>;
54
- /** A lane that groups Items without accepting label-based moves. */
86
+ /** A lane that groups Items and doesn't accept moves. */
55
87
  export declare class ReadOnlyBoardLaneView extends ReadOnlyBoardLaneView_base {
56
88
  }
57
- /** A displayed lane whose variant determines whether operator moves are supported. */
89
+ /** A Board lane; only `WritableBoardLaneView` accepts operator moves. */
58
90
  export declare const BoardLaneView: Schema.Union<readonly [typeof WritableBoardLaneView, typeof ReadOnlyBoardLaneView]>;
59
91
  export type BoardLaneView = typeof BoardLaneView.Type;
60
92
  declare const BoardProjectionError_base: Schema.Class<BoardProjectionError, Schema.TaggedStruct<"BoardProjectionError", {
@@ -62,14 +94,14 @@ declare const BoardProjectionError_base: Schema.Class<BoardProjectionError, Sche
62
94
  readonly itemKey: Schema.brand<Schema.NonEmptyString, "ItemKey">;
63
95
  readonly message: Schema.NonEmptyString;
64
96
  }>, import("effect/Cause").YieldableError>;
65
- /** An Item projection could not produce a Board card; other Items remain available. */
97
+ /** An Item that couldn't be projected as a Board card. Other Items are unaffected. */
66
98
  export declare class BoardProjectionError extends BoardProjectionError_base {
67
99
  }
68
100
  declare const BoardView_base: Schema.Class<BoardView, Schema.Struct<{
69
101
  readonly lanes: Schema.$Array<Schema.Union<readonly [typeof WritableBoardLaneView, typeof ReadOnlyBoardLaneView]>>;
70
102
  readonly failures: Schema.$Array<typeof BoardProjectionError>;
71
103
  }>, {}>;
72
- /** The Project's lanes and the Item failures encountered while constructing their cards. */
104
+ /** The Project's lanes and the Item failures from building their cards. */
73
105
  export declare class BoardView extends BoardView_base {
74
106
  }
75
107
  declare const LabelView_base: Schema.Class<LabelView, Schema.Struct<{
@@ -77,7 +109,7 @@ declare const LabelView_base: Schema.Class<LabelView, Schema.Struct<{
77
109
  readonly color: Schema.NullOr<Schema.String>;
78
110
  readonly description: Schema.NullOr<Schema.String>;
79
111
  }>, {}>;
80
- /** A repository label as GitHub shows it. Color is null for catalogs stored before colors were kept. */
112
+ /** A repository label. `color` is null for catalogs stored before colors were kept. */
81
113
  export declare class LabelView extends LabelView_base {
82
114
  }
83
115
  declare const BoardMove_base: Schema.Class<BoardMove, Schema.Struct<{
@@ -85,34 +117,34 @@ declare const BoardMove_base: Schema.Class<BoardMove, Schema.Struct<{
85
117
  readonly item: Schema.brand<Schema.Int, "ItemNumber">;
86
118
  readonly toLane: Schema.brand<Schema.NonEmptyString, "BoardLaneId">;
87
119
  }>, {}>;
88
- /** An operator request to move one Project Item into a destination lane. */
120
+ /** An operator request to move one Project Item into a lane. */
89
121
  export declare class BoardMove extends BoardMove_base {
90
122
  }
91
123
  declare const BoardProjectNotFoundError_base: Schema.Class<BoardProjectNotFoundError, Schema.TaggedStruct<"BoardProjectNotFoundError", {
92
124
  readonly repository: Schema.brand<Schema.String, "RepositoryName">;
93
125
  }>, import("effect/Cause").YieldableError>;
94
- /** The requested Project is absent from the operator overview. */
126
+ /** The requested Project isn't in the operator overview. */
95
127
  export declare class BoardProjectNotFoundError extends BoardProjectNotFoundError_base {
96
128
  }
97
129
  declare const BoardItemNotFoundError_base: Schema.Class<BoardItemNotFoundError, Schema.TaggedStruct<"BoardItemNotFoundError", {
98
130
  readonly repository: Schema.brand<Schema.String, "RepositoryName">;
99
131
  readonly item: Schema.brand<Schema.Int, "ItemNumber">;
100
132
  }>, import("effect/Cause").YieldableError>;
101
- /** The requested Item is absent from the Project's Board. */
133
+ /** The requested Item isn't on the Project's Board. */
102
134
  export declare class BoardItemNotFoundError extends BoardItemNotFoundError_base {
103
135
  }
104
136
  declare const BoardLaneNotFoundError_base: Schema.Class<BoardLaneNotFoundError, Schema.TaggedStruct<"BoardLaneNotFoundError", {
105
137
  readonly repository: Schema.brand<Schema.String, "RepositoryName">;
106
138
  readonly lane: Schema.brand<Schema.NonEmptyString, "BoardLaneId">;
107
139
  }>, import("effect/Cause").YieldableError>;
108
- /** The requested destination lane is absent from the Project's Board. */
140
+ /** The requested destination lane isn't on the Project's Board. */
109
141
  export declare class BoardLaneNotFoundError extends BoardLaneNotFoundError_base {
110
142
  }
111
143
  declare const BoardLaneReadOnlyError_base: Schema.Class<BoardLaneReadOnlyError, Schema.TaggedStruct<"BoardLaneReadOnlyError", {
112
144
  readonly repository: Schema.brand<Schema.String, "RepositoryName">;
113
145
  readonly lane: Schema.brand<Schema.NonEmptyString, "BoardLaneId">;
114
146
  }>, import("effect/Cause").YieldableError>;
115
- /** The requested destination lane does not accept label-based moves. */
147
+ /** The requested destination lane doesn't accept label-based moves. */
116
148
  export declare class BoardLaneReadOnlyError extends BoardLaneReadOnlyError_base {
117
149
  }
118
150
  export {};
@@ -1 +1 @@
1
- {"version":3,"file":"board.d.ts","sourceRoot":"","sources":["../../src/operator/board.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAChC,OAAO,EAAE,OAAO,EAAE,MAAM,UAAU,CAAC;AAEnC,qEAAqE;AACrE,eAAO,MAAM,WAAW,oDAA0D,CAAC;AACnF,MAAM,MAAM,WAAW,GAAG,OAAO,WAAW,CAAC,IAAI,CAAC;AAElD,mFAAmF;AACnF,eAAO,MAAM,eAAe,gEAAwD,CAAC;AACrF,MAAM,MAAM,eAAe,GAAG,OAAO,eAAe,CAAC,IAAI,CAAC;;;;;;;;AAE1D,6EAA6E;AAC7E,qBAAa,aAAc,SAAQ,kBAQlC;CAAG;;;;;;;;;;IASA,8EAA8E;;;;;AAPlF,4JAA4J;AAC5J,qBAAa,aAAc,SAAQ,kBAWlC;CAAG;;;;;;;;;AAUJ,kGAAkG;AAClG,qBAAa,qBAAsB,SAAQ,0BAMzC;CAAG;;;;;;;;AAEL,oEAAoE;AACpE,qBAAa,qBAAsB,SAAQ,0BAEA;CAAG;AAE9C,sFAAsF;AACtF,eAAO,MAAM,aAAa,qFAA+D,CAAC;AAC1F,MAAM,MAAM,aAAa,GAAG,OAAO,aAAa,CAAC,IAAI,CAAC;;;;;;AAEtD,uFAAuF;AACvF,qBAAa,oBAAqB,SAAQ,yBAMxC;CAAG;;;;;AAEL,4FAA4F;AAC5F,qBAAa,SAAU,SAAQ,cAG7B;CAAG;;;;;;AAEL,wGAAwG;AACxG,qBAAa,SAAU,SAAQ,cAI7B;CAAG;;;;;;AAEL,4EAA4E;AAC5E,qBAAa,SAAU,SAAQ,cAI7B;CAAG;;;;AAEL,kEAAkE;AAClE,qBAAa,yBAA0B,SAAQ,8BAI7C;CAAG;;;;;AAEL,6DAA6D;AAC7D,qBAAa,sBAAuB,SAAQ,2BAK1C;CAAG;;;;;AAEL,yEAAyE;AACzE,qBAAa,sBAAuB,SAAQ,2BAK1C;CAAG;;;;;AAEL,wEAAwE;AACxE,qBAAa,sBAAuB,SAAQ,2BAK1C;CAAG"}
1
+ {"version":3,"file":"board.d.ts","sourceRoot":"","sources":["../../src/operator/board.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAChC,OAAO,EAAE,OAAO,EAAE,MAAM,UAAU,CAAC;AACnC,OAAO,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAE3C,6CAA6C;AAC7C,eAAO,MAAM,WAAW,oDAA0D,CAAC;AACnF,MAAM,MAAM,WAAW,GAAG,OAAO,WAAW,CAAC,IAAI,CAAC;AAElD,gFAAgF;AAChF,eAAO,MAAM,eAAe,gEAAwD,CAAC;AACrF,MAAM,MAAM,eAAe,GAAG,OAAO,eAAe,CAAC,IAAI,CAAC;;;;;;;;;AAE1D,2EAA2E;AAC3E,qBAAa,aAAc,SAAQ,kBASlC;CAAG;;;;;;AAEJ,6FAA6F;AAC7F,qBAAa,oBAAqB,SAAQ,yBAMxC;CAAG;;;;;;;;;;IAYD;;;OAGG;;IAEH,6DAA6D;;IAE7D;;;OAGG;;;IAGH,6FAA6F;;IAE7F;;;OAGG;;IAEH,2DAA2D;;;AA9B/D;;;;GAIG;AACH,qBAAa,aAAc,SAAQ,kBA4BlC;CAAG;;;;;;;;;AAUJ,4FAA4F;AAC5F,qBAAa,qBAAsB,SAAQ,0BAMzC;CAAG;;;;;;;;AAEL,yDAAyD;AACzD,qBAAa,qBAAsB,SAAQ,0BAEA;CAAG;AAE9C,yEAAyE;AACzE,eAAO,MAAM,aAAa,qFAA+D,CAAC;AAC1F,MAAM,MAAM,aAAa,GAAG,OAAO,aAAa,CAAC,IAAI,CAAC;;;;;;AAEtD,sFAAsF;AACtF,qBAAa,oBAAqB,SAAQ,yBAMxC;CAAG;;;;;AAEL,2EAA2E;AAC3E,qBAAa,SAAU,SAAQ,cAG7B;CAAG;;;;;;AAEL,uFAAuF;AACvF,qBAAa,SAAU,SAAQ,cAI7B;CAAG;;;;;;AAEL,gEAAgE;AAChE,qBAAa,SAAU,SAAQ,cAI7B;CAAG;;;;AAEL,4DAA4D;AAC5D,qBAAa,yBAA0B,SAAQ,8BAI7C;CAAG;;;;;AAEL,uDAAuD;AACvD,qBAAa,sBAAuB,SAAQ,2BAK1C;CAAG;;;;;AAEL,mEAAmE;AACnE,qBAAa,sBAAuB,SAAQ,2BAK1C;CAAG;;;;;AAEL,uEAAuE;AACvE,qBAAa,sBAAuB,SAAQ,2BAK1C;CAAG"}
@@ -1,32 +1,63 @@
1
1
  import { ItemKey, ItemNumber } from "@usine/core/item";
2
+ import { LoopName } from "@usine/core/loop";
2
3
  import { RepositoryName } from "@usine/core/repository";
3
4
  import { GitHubLabelName } from "@usine/config/label";
4
5
  import { LaneItemState, LaneName, LaneSource } from "@usine/config/board";
5
6
  import { Schema } from "effect";
6
7
  import { RunView } from "./run.js";
7
- /** Identifies a lane within a Project's Board for operator moves. */
8
+ import { TaskUsageView } from "./usage.js";
9
+ /** The ID of a lane on a Project's Board. */
8
10
  export const BoardLaneId = Schema.NonEmptyString.pipe(Schema.brand("BoardLaneId"));
9
- /** Whether a lane came from authored settings, a proposal, or default grouping. */
11
+ /** The source of a lane: authored settings, a proposal, or default grouping. */
10
12
  export const BoardLaneOrigin = Schema.Literals(["authored", "proposed", "fallback"]);
11
- /** An Item linked to a Task, with its own title and external destination. */
13
+ /** An Item of a Task, with its own title, GitHub URL, and GitHub state. */
12
14
  export class BoardItemLink extends Schema.Class("@usine/orchestrator/BoardItemLink")({
13
15
  itemKey: ItemKey,
14
16
  kind: Schema.Literals(["issue", "pr"]),
15
17
  number: ItemNumber,
16
18
  title: Schema.String,
17
19
  url: Schema.NonEmptyString,
20
+ state: LaneItemState,
21
+ }) {
22
+ }
23
+ /** An open or merged pull request of a Task. Closed, unmerged pull requests are excluded. */
24
+ export class BoardPullRequestView extends Schema.Class("@usine/orchestrator/BoardPullRequestView")({
25
+ number: ItemNumber,
26
+ url: Schema.NonEmptyString,
27
+ state: Schema.Literals(["pr-open", "pr-merged"]),
18
28
  }) {
19
29
  }
20
- /** A Task projected from linked Items. The current Item determines the key, lane, labels, and move destination; the first issue supplies the Task title. */
30
+ /**
31
+ * A Board card for a Task projected from linked Items and placed by its current Item. While the
32
+ * Task's newest open Run is running and the current Item has no lane label, the card stays in the
33
+ * lane that matched when the Run was triggered.
34
+ */
21
35
  export class BoardTaskView extends Schema.Class("@usine/orchestrator/BoardTaskView")({
22
36
  ...BoardItemLink.fields,
23
- state: LaneItemState,
24
37
  labels: Schema.Array(GitHubLabelName),
25
38
  items: Schema.Array(BoardItemLink).check(Schema.isNonEmpty()),
26
- /** Every saved Run for the visible Items, ordered from earliest to latest. */
39
+ /**
40
+ * The highest-numbered open pull request, else the highest-numbered merged one, or null if
41
+ * there is neither.
42
+ */
43
+ pullRequest: Schema.NullOr(BoardPullRequestView),
44
+ /** Every saved Run for the visible Items, earliest first. */
27
45
  runs: Schema.Array(RunView),
46
+ /**
47
+ * The newest Run that needs the operator, else the open Run, else the newest Run, or null if
48
+ * there are no Runs. A failed Run on a closed or merged Item doesn't need the operator.
49
+ */
28
50
  run: Schema.NullOr(RunView),
29
51
  needsYou: Schema.Boolean,
52
+ /** Whether the current Item is an open pull request whose branch conflicts with its base. */
53
+ conflicting: Schema.Boolean,
54
+ /**
55
+ * The Loops whose trigger currently matches one of the Task's Items, including paused Loops, in
56
+ * Item order and then Loop order.
57
+ */
58
+ loops: Schema.Array(LoopName),
59
+ /** The summed Attempt time, tokens, and cost of `runs`. */
60
+ usage: TaskUsageView,
30
61
  }) {
31
62
  }
32
63
  const BoardLaneViewFields = {
@@ -36,63 +67,63 @@ const BoardLaneViewFields = {
36
67
  origin: BoardLaneOrigin,
37
68
  items: Schema.Array(BoardTaskView),
38
69
  };
39
- /** An authored lane the operator can move Items into by applying its configured GitHub labels. */
70
+ /** An authored lane that the operator can move Items into by applying its GitHub labels. */
40
71
  export class WritableBoardLaneView extends Schema.TaggedClass("@usine/orchestrator/WritableBoardLaneView")("WritableBoardLane", {
41
72
  ...BoardLaneViewFields,
42
73
  origin: Schema.Literal("authored"),
43
74
  labels: Schema.Array(GitHubLabelName).check(Schema.isNonEmpty()),
44
75
  }) {
45
76
  }
46
- /** A lane that groups Items without accepting label-based moves. */
77
+ /** A lane that groups Items and doesn't accept moves. */
47
78
  export class ReadOnlyBoardLaneView extends Schema.TaggedClass("@usine/orchestrator/ReadOnlyBoardLaneView")("ReadOnlyBoardLane", BoardLaneViewFields) {
48
79
  }
49
- /** A displayed lane whose variant determines whether operator moves are supported. */
80
+ /** A Board lane; only `WritableBoardLaneView` accepts operator moves. */
50
81
  export const BoardLaneView = Schema.Union([WritableBoardLaneView, ReadOnlyBoardLaneView]);
51
- /** An Item projection could not produce a Board card; other Items remain available. */
82
+ /** An Item that couldn't be projected as a Board card. Other Items are unaffected. */
52
83
  export class BoardProjectionError extends Schema.TaggedError("@usine/orchestrator/BoardProjectionError")("BoardProjectionError", {
53
84
  repository: RepositoryName,
54
85
  itemKey: ItemKey,
55
86
  message: Schema.NonEmptyString,
56
87
  }) {
57
88
  }
58
- /** The Project's lanes and the Item failures encountered while constructing their cards. */
89
+ /** The Project's lanes and the Item failures from building their cards. */
59
90
  export class BoardView extends Schema.Class("@usine/orchestrator/BoardView")({
60
91
  lanes: Schema.Array(BoardLaneView),
61
92
  failures: Schema.Array(BoardProjectionError),
62
93
  }) {
63
94
  }
64
- /** A repository label as GitHub shows it. Color is null for catalogs stored before colors were kept. */
95
+ /** A repository label. `color` is null for catalogs stored before colors were kept. */
65
96
  export class LabelView extends Schema.Class("@usine/orchestrator/LabelView")({
66
97
  name: GitHubLabelName,
67
98
  color: Schema.NullOr(Schema.String),
68
99
  description: Schema.NullOr(Schema.String),
69
100
  }) {
70
101
  }
71
- /** An operator request to move one Project Item into a destination lane. */
102
+ /** An operator request to move one Project Item into a lane. */
72
103
  export class BoardMove extends Schema.Class("@usine/orchestrator/BoardMove")({
73
104
  repository: RepositoryName,
74
105
  item: ItemNumber,
75
106
  toLane: BoardLaneId,
76
107
  }) {
77
108
  }
78
- /** The requested Project is absent from the operator overview. */
109
+ /** The requested Project isn't in the operator overview. */
79
110
  export class BoardProjectNotFoundError extends Schema.TaggedError("@usine/orchestrator/BoardProjectNotFoundError")("BoardProjectNotFoundError", {
80
111
  repository: RepositoryName,
81
112
  }) {
82
113
  }
83
- /** The requested Item is absent from the Project's Board. */
114
+ /** The requested Item isn't on the Project's Board. */
84
115
  export class BoardItemNotFoundError extends Schema.TaggedError("@usine/orchestrator/BoardItemNotFoundError")("BoardItemNotFoundError", {
85
116
  repository: RepositoryName,
86
117
  item: ItemNumber,
87
118
  }) {
88
119
  }
89
- /** The requested destination lane is absent from the Project's Board. */
120
+ /** The requested destination lane isn't on the Project's Board. */
90
121
  export class BoardLaneNotFoundError extends Schema.TaggedError("@usine/orchestrator/BoardLaneNotFoundError")("BoardLaneNotFoundError", {
91
122
  repository: RepositoryName,
92
123
  lane: BoardLaneId,
93
124
  }) {
94
125
  }
95
- /** The requested destination lane does not accept label-based moves. */
126
+ /** The requested destination lane doesn't accept label-based moves. */
96
127
  export class BoardLaneReadOnlyError extends Schema.TaggedError("@usine/orchestrator/BoardLaneReadOnlyError")("BoardLaneReadOnlyError", {
97
128
  repository: RepositoryName,
98
129
  lane: BoardLaneId,
@@ -1 +1 @@
1
- {"version":3,"file":"board.js","sourceRoot":"","sources":["../../src/operator/board.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"board.js","sourceRoot":"","sources":["../../src/operator/board.ts"],"names":[],"mappings":"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"}