@alecsibilia/luca 14.0.0-alpha.2 → 14.0.0-alpha.21

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 (321) hide show
  1. package/CHANGELOG.md +76 -0
  2. package/README.md +7 -2
  3. package/board/client/board-look.ts +31 -1
  4. package/board/client/board-panel-parts.tsx +150 -0
  5. package/board/client/board-panel-stages.ts +99 -0
  6. package/board/client/board-panel-styles.ts +223 -0
  7. package/board/client/board-panel.tsx +77 -1275
  8. package/board/client/engine-life.ts +48 -0
  9. package/board/client/final-review-stack.tsx +144 -0
  10. package/board/client/heartbeat.tsx +61 -0
  11. package/board/client/helper-lines.tsx +69 -0
  12. package/board/client/live-feed.tsx +86 -0
  13. package/board/client/live-line.ts +73 -0
  14. package/board/client/model-line.tsx +178 -0
  15. package/board/client/needs-you-section.tsx +133 -0
  16. package/board/client/one-line.tsx +193 -0
  17. package/board/client/repo-wait-banner.tsx +69 -0
  18. package/board/client/run-footer.tsx +68 -0
  19. package/board/client/run-header.tsx +189 -0
  20. package/board/client/run-picker.tsx +98 -0
  21. package/board/client/status-bar.tsx +131 -0
  22. package/board/client/step-dots.tsx +127 -0
  23. package/board/client/stuck-actions.tsx +269 -0
  24. package/board/client/ticket-card-view.tsx +238 -0
  25. package/board/client/ticket-detail.tsx +87 -0
  26. package/board/client/ticket-stack.tsx +119 -0
  27. package/board/client/ticket-wait.ts +188 -0
  28. package/board/client/timeline-rows.tsx +41 -14
  29. package/board/client/usage-line.tsx +51 -0
  30. package/board/client/wait-line.tsx +39 -0
  31. package/board/index.client.tsx +1 -1
  32. package/board/index.server.ts +7 -1
  33. package/board/package.json +1 -1
  34. package/board/server/board-panel-state-helpers.ts +67 -0
  35. package/board/server/board-server-check.ts +294 -0
  36. package/board/server/board-server-engine.ts +129 -0
  37. package/board/server/board-server-events.ts +134 -0
  38. package/board/server/board-server-read.ts +190 -0
  39. package/board/server/board-server-resume.ts +164 -0
  40. package/board/server/board-server-start.ts +174 -0
  41. package/board/server/board-server-store.ts +281 -0
  42. package/board/server/board-server-types.ts +114 -0
  43. package/board/server/board-server-util.ts +4 -0
  44. package/board/server/board-server.ts +52 -943
  45. package/board/server/board-vocabulary-engine.ts +144 -0
  46. package/board/server/board-vocabulary-review.ts +115 -0
  47. package/board/server/board-vocabulary-run.ts +145 -0
  48. package/board/server/board-vocabulary-shapes.ts +153 -0
  49. package/board/server/board-vocabulary.ts +20 -375
  50. package/board/server/current-step-panel-helpers.ts +108 -0
  51. package/board/server/describe-record.ts +403 -0
  52. package/board/server/engine-launch.ts +20 -3
  53. package/board/server/engine-restart-helpers.ts +105 -0
  54. package/board/server/engine-watch.ts +45 -5
  55. package/board/server/journal-rebuild-helpers.ts +169 -0
  56. package/board/server/live-file.ts +130 -0
  57. package/board/server/luca-version.ts +1 -1
  58. package/board/server/make-rows.ts +14 -629
  59. package/board/server/record-texts.ts +350 -0
  60. package/board/server/reduce-board-agent-start.ts +224 -0
  61. package/board/server/reduce-board-agents.ts +160 -0
  62. package/board/server/reduce-board-counters.ts +138 -0
  63. package/board/server/reduce-board-create.ts +148 -0
  64. package/board/server/reduce-board-final-review.ts +174 -0
  65. package/board/server/reduce-board-needs-you.ts +283 -0
  66. package/board/server/reduce-board-reasons.ts +59 -0
  67. package/board/server/reduce-board-run.ts +255 -0
  68. package/board/server/reduce-board-settle.ts +88 -0
  69. package/board/server/reduce-board-steps.ts +226 -0
  70. package/board/server/reduce-board-text.ts +139 -0
  71. package/board/server/reduce-board-ticket-checks.ts +168 -0
  72. package/board/server/reduce-board-ticket-join.ts +144 -0
  73. package/board/server/reduce-board-ticket-start.ts +132 -0
  74. package/board/server/reduce-board-update.ts +117 -0
  75. package/board/server/reduce-board-usage.ts +247 -0
  76. package/board/server/reduce-board.ts +100 -1917
  77. package/board/server/reply-post.ts +407 -0
  78. package/board/server/run-registry.ts +8 -4
  79. package/board/server/ticket-stages-panel-helpers.ts +296 -0
  80. package/board/shared/board-rows.ts +9 -0
  81. package/board/shared/board-rpc.ts +42 -0
  82. package/board/shared/board-state-counts.ts +77 -0
  83. package/board/shared/board-state-live.ts +99 -0
  84. package/board/shared/board-state-review.ts +59 -0
  85. package/board/shared/board-state-run.ts +236 -0
  86. package/board/shared/board-state-ticket.ts +257 -0
  87. package/board/shared/board-state-usage.ts +107 -0
  88. package/board/shared/board-state.ts +97 -567
  89. package/board/shared/reply-actions.ts +207 -0
  90. package/engine/agents/agent-launcher.ts +27 -4
  91. package/engine/agents/claude-launcher-helpers.ts +233 -0
  92. package/engine/agents/claude-launcher.ts +28 -669
  93. package/engine/agents/claude-messages.ts +212 -0
  94. package/engine/agents/claude-options.ts +43 -8
  95. package/engine/agents/common-instructions.ts +138 -0
  96. package/engine/agents/input-channel.ts +36 -0
  97. package/engine/agents/launch-paths.ts +29 -0
  98. package/engine/agents/launch-session.ts +227 -0
  99. package/engine/agents/learner-instructions.ts +31 -0
  100. package/engine/agents/open-session.ts +210 -0
  101. package/engine/agents/prompt-sections.ts +95 -0
  102. package/engine/agents/rejoin-prompts.ts +135 -0
  103. package/engine/agents/reviewer-instructions.ts +99 -0
  104. package/engine/agents/role-instructions.ts +31 -244
  105. package/engine/agents/role-prompts.ts +39 -109
  106. package/engine/agents/role-results.ts +106 -7
  107. package/engine/agents/scripted-launcher.ts +21 -6
  108. package/engine/agents/session-pool.ts +124 -0
  109. package/engine/agents/turn-progress.ts +283 -0
  110. package/engine/agents/writer-instructions.ts +151 -0
  111. package/engine/cli/computer-adapters-real.ts +15 -3
  112. package/engine/cli/computer-adapters.ts +2 -0
  113. package/engine/cli/computer-checks.ts +87 -4
  114. package/engine/cli/config-reload-text.ts +39 -0
  115. package/engine/cli/decision-model-setup.ts +70 -0
  116. package/engine/cli/doctor-command.ts +1 -0
  117. package/engine/cli/doctor.ts +21 -3
  118. package/engine/cli/going-runs.ts +192 -36
  119. package/engine/cli/init-command.ts +1 -0
  120. package/engine/cli/init.ts +23 -1
  121. package/engine/cli/live-runs.ts +73 -0
  122. package/engine/cli/luca-run.ts +42 -7
  123. package/engine/cli/luca-skills.ts +183 -0
  124. package/engine/cli/luca.ts +8 -1
  125. package/engine/cli/models-command.ts +119 -0
  126. package/engine/cli/read-run.ts +81 -0
  127. package/engine/cli/run-args.ts +33 -6
  128. package/engine/cli/run-demo.ts +143 -0
  129. package/engine/cli/run-end.ts +184 -0
  130. package/engine/cli/run-modes-helpers.ts +81 -0
  131. package/engine/cli/run-modes.ts +62 -439
  132. package/engine/cli/setup.ts +5 -48
  133. package/engine/cli/unfinished-runs.ts +122 -0
  134. package/engine/cli/upgrade-command.ts +212 -30
  135. package/engine/cli/upgrade-finish.ts +149 -0
  136. package/engine/cli/upgrade.ts +112 -71
  137. package/engine/config/config-fields.ts +127 -0
  138. package/engine/config/config-reload.ts +250 -0
  139. package/engine/config/engine-config-schema.ts +235 -0
  140. package/engine/config/engine-config.ts +72 -142
  141. package/engine/config/test-commands.ts +102 -0
  142. package/engine/core/agent-guards-helpers.ts +84 -0
  143. package/engine/core/agent-turn.ts +395 -0
  144. package/engine/core/already-done.ts +44 -1
  145. package/engine/core/build-action.ts +214 -0
  146. package/engine/core/build-context.ts +135 -0
  147. package/engine/core/build-launch.ts +259 -0
  148. package/engine/core/commit-in.ts +282 -0
  149. package/engine/core/decide-build-early.ts +108 -0
  150. package/engine/core/decide-build-ending.ts +145 -0
  151. package/engine/core/decide-build-helpers.ts +87 -0
  152. package/engine/core/decide-build-tickets.ts +207 -0
  153. package/engine/core/decide-build-view.ts +103 -0
  154. package/engine/core/decide-build.ts +101 -1368
  155. package/engine/core/decide-final-fix.ts +203 -0
  156. package/engine/core/decide-final-review.ts +55 -310
  157. package/engine/core/decide-red-green.ts +398 -0
  158. package/engine/core/decide-rejoin.ts +259 -0
  159. package/engine/core/decide-repo-wait.ts +129 -0
  160. package/engine/core/decide-run-budget.ts +86 -12
  161. package/engine/core/decide-stuck-helpers.ts +127 -0
  162. package/engine/core/decide-stuck.ts +60 -8
  163. package/engine/core/decide-ticket-review.ts +95 -0
  164. package/engine/core/decide-ticket.ts +267 -0
  165. package/engine/core/decide-waits.ts +47 -0
  166. package/engine/core/decide.ts +74 -23
  167. package/engine/core/engine-chores.ts +163 -0
  168. package/engine/core/environment-rerun.ts +83 -0
  169. package/engine/core/evidence-text.ts +84 -0
  170. package/engine/core/execute-action.ts +303 -0
  171. package/engine/core/execute-already-done-check.ts +133 -0
  172. package/engine/core/execute-build.ts +68 -944
  173. package/engine/core/execute-changeset.ts +5 -7
  174. package/engine/core/execute-final-review.ts +125 -13
  175. package/engine/core/execute-gates.ts +182 -0
  176. package/engine/core/execute-intake.ts +130 -0
  177. package/engine/core/execute-join.ts +276 -0
  178. package/engine/core/execute-memory.ts +12 -0
  179. package/engine/core/execute-pull-request.ts +84 -0
  180. package/engine/core/execute-red-check.ts +219 -0
  181. package/engine/core/execute-repo-wait.ts +129 -0
  182. package/engine/core/execute-stuck.ts +25 -10
  183. package/engine/core/execute-waits.ts +158 -0
  184. package/engine/core/execute-with-jev.ts +118 -0
  185. package/engine/core/execute.ts +124 -831
  186. package/engine/core/final-failure-cap.ts +38 -0
  187. package/engine/core/final-review-action.ts +125 -0
  188. package/engine/core/final-review-text.ts +63 -17
  189. package/engine/core/final-stuck-text.ts +86 -0
  190. package/engine/core/fix-loop-text.ts +49 -2
  191. package/engine/core/left-out.ts +120 -0
  192. package/engine/core/live-file.ts +372 -0
  193. package/engine/core/loop-caps.ts +25 -2
  194. package/engine/core/not-in-run.ts +7 -3
  195. package/engine/core/pull-request-text.ts +255 -6
  196. package/engine/core/repo-wait-text.ts +81 -0
  197. package/engine/core/review-text.ts +55 -1
  198. package/engine/core/run-crash-recovery-helpers.ts +16 -0
  199. package/engine/core/run-session-close-helpers.ts +96 -0
  200. package/engine/core/run-start.ts +148 -0
  201. package/engine/core/run-stuck-text.ts +86 -0
  202. package/engine/core/schedule-rules.ts +193 -0
  203. package/engine/core/stuck-detail-text.ts +89 -0
  204. package/engine/core/stuck-format.ts +22 -0
  205. package/engine/core/stuck-text.ts +29 -332
  206. package/engine/core/ticket-stuck-text.ts +192 -0
  207. package/engine/core/worktree-changes.ts +106 -0
  208. package/engine/gates/already-done-check.ts +120 -0
  209. package/engine/gates/feature-map.ts +96 -0
  210. package/engine/gates/gate-runner.ts +108 -108
  211. package/engine/gates/gate-schemas.ts +61 -2
  212. package/engine/gates/leftover-scan.ts +154 -31
  213. package/engine/gates/new-tests.ts +45 -0
  214. package/engine/gates/own-files-check.ts +98 -0
  215. package/engine/gates/prepare-check.ts +60 -0
  216. package/engine/gates/prepare-slots.ts +99 -0
  217. package/engine/gates/red-check.ts +184 -16
  218. package/engine/gates/shell-check.ts +64 -0
  219. package/engine/gates/slot-waits.ts +55 -0
  220. package/engine/gates/slow-test-runner.ts +59 -0
  221. package/engine/gates/test-checks.ts +161 -0
  222. package/engine/gates/test-runner.ts +164 -5
  223. package/engine/gates/test-slots.ts +48 -0
  224. package/engine/git/git-adapter.ts +55 -396
  225. package/engine/git/git-commits.ts +132 -0
  226. package/engine/git/git-join.ts +139 -0
  227. package/engine/git/git-read.ts +123 -0
  228. package/engine/git/git-run.ts +32 -0
  229. package/engine/git/git-worktrees.ts +143 -0
  230. package/engine/git/outside-links.ts +55 -0
  231. package/engine/guards/after-turn-check.ts +31 -5
  232. package/engine/guards/guard-hook.ts +60 -12
  233. package/engine/guards/guard-roles.ts +68 -0
  234. package/engine/guards/helper-rules.ts +92 -0
  235. package/engine/guards/permission-rules.ts +161 -0
  236. package/engine/guards/role-rules-helpers.ts +48 -0
  237. package/engine/guards/role-rules.ts +34 -606
  238. package/engine/guards/shell-rules.ts +344 -0
  239. package/engine/guards/worktree-git.ts +208 -0
  240. package/engine/guards/worktree-snapshot.ts +412 -0
  241. package/engine/guards/worktree-state.ts +28 -825
  242. package/engine/guards/worktree-undo.ts +260 -0
  243. package/engine/guards/write-rules.ts +149 -0
  244. package/engine/index.ts +30 -9
  245. package/engine/intake/criteria-checks.ts +114 -0
  246. package/engine/intake/intake-checks.ts +164 -30
  247. package/engine/intake/intake-schemas.ts +37 -2
  248. package/engine/jev/clef-client.ts +259 -0
  249. package/engine/jev/decision-model-credentials.ts +212 -0
  250. package/engine/jev/jev-jobs.ts +144 -60
  251. package/engine/jev/jev-schemas.ts +86 -5
  252. package/engine/jev/jev-shadow-helpers.ts +218 -0
  253. package/engine/jev/jev-shadow.ts +109 -64
  254. package/engine/jev/model-pick.ts +275 -0
  255. package/engine/journal/agent-entries.ts +167 -0
  256. package/engine/journal/agent-message-entries.ts +72 -0
  257. package/engine/journal/agent-turn-replay.ts +203 -0
  258. package/engine/journal/already-done-entries.ts +55 -0
  259. package/engine/journal/commit-entries.ts +56 -0
  260. package/engine/journal/cross-ticket-replay.ts +222 -0
  261. package/engine/journal/decision-model-entries.ts +86 -0
  262. package/engine/journal/entry-fields.ts +10 -0
  263. package/engine/journal/final-review-entries.ts +128 -0
  264. package/engine/journal/final-review-replay.ts +324 -0
  265. package/engine/journal/final-review-round.ts +320 -0
  266. package/engine/journal/final-review-state.ts +180 -0
  267. package/engine/journal/gate-entries.ts +81 -0
  268. package/engine/journal/intake-entries.ts +87 -0
  269. package/engine/journal/join-entries.ts +126 -0
  270. package/engine/journal/journal-entry-schema.ts +218 -0
  271. package/engine/journal/journal-kinds.ts +97 -0
  272. package/engine/journal/journal-record-schema.ts +218 -0
  273. package/engine/journal/journal-record.ts +43 -1400
  274. package/engine/journal/journal.ts +6 -1
  275. package/engine/journal/limit-entries.ts +90 -0
  276. package/engine/journal/memory-entries.ts +124 -0
  277. package/engine/journal/memory-replay.ts +157 -0
  278. package/engine/journal/plan-replay.ts +139 -0
  279. package/engine/journal/pull-request-entries.ts +41 -0
  280. package/engine/journal/replay.ts +157 -2144
  281. package/engine/journal/reply-replay.ts +144 -0
  282. package/engine/journal/repo-wait-entries.ts +53 -0
  283. package/engine/journal/run-entries.ts +172 -0
  284. package/engine/journal/run-state.ts +264 -0
  285. package/engine/journal/shared-failure-replay.ts +133 -0
  286. package/engine/journal/stuck-entries.ts +193 -0
  287. package/engine/journal/ticket-progress.ts +392 -0
  288. package/engine/journal/ticket-replay.ts +411 -0
  289. package/engine/journal/ticket-result-replay.ts +364 -0
  290. package/engine/journal/ticket-retry-replay.ts +142 -0
  291. package/engine/journal/worktree-entries.ts +122 -0
  292. package/engine/models/model-score.ts +512 -0
  293. package/engine/shell/run-command.ts +187 -18
  294. package/engine/testing/agent-turn-fixtures.ts +287 -0
  295. package/engine/testing/already-done-fixtures.ts +97 -0
  296. package/engine/testing/build-fixtures.ts +68 -973
  297. package/engine/testing/checkouts-fixtures.ts +48 -0
  298. package/engine/testing/final-review-fixtures.ts +62 -1
  299. package/engine/testing/final-review-steps.ts +143 -0
  300. package/engine/testing/limit-fixtures.ts +85 -0
  301. package/engine/testing/live-file-fixtures.ts +57 -0
  302. package/engine/testing/practice-repo.ts +10 -4
  303. package/engine/testing/practice-run.ts +1 -1
  304. package/engine/testing/reply-fixtures.ts +88 -0
  305. package/engine/testing/run-budget-fixtures.ts +165 -0
  306. package/engine/testing/run-fixtures.ts +219 -0
  307. package/engine/testing/sdk-play.ts +177 -0
  308. package/engine/testing/setup-repo.ts +194 -0
  309. package/engine/testing/step-record-fixtures.ts +55 -0
  310. package/engine/testing/ticket-step-fixtures.ts +272 -0
  311. package/engine/testing/wait-scenarios.ts +186 -0
  312. package/engine/tracker/gh-retry.ts +217 -0
  313. package/engine/tracker/github-tracker.ts +310 -90
  314. package/engine/tracker/in-memory-tracker.ts +8 -4
  315. package/engine/tracker/tracker.ts +131 -6
  316. package/package.json +2 -1
  317. package/skills/luca-retro/SKILL.md +74 -0
  318. package/skills/luca-retro/scripts/retro-summary.ts +1356 -0
  319. package/skills/luca-unstick/SKILL.md +153 -0
  320. package/skills/luca-unstick/scripts/stuck-summary.ts +1063 -0
  321. package/engine/jev/jev-client.ts +0 -173
@@ -0,0 +1,126 @@
1
+ import { z } from 'zod'
2
+
3
+ import { ENTRY_FIELDS } from './entry-fields'
4
+
5
+ import { BadTestSchema } from '../agents/role-results'
6
+
7
+ /**
8
+ * The journal entries of joining tickets onto the run branch: the join, a
9
+ * rebase after a clash or failed gates, tests sent back, an undone join,
10
+ * and the push.
11
+ */
12
+
13
+ /** An approved ticket's commits, replayed onto the run branch (or not). */
14
+ export const TicketJoinedEntrySchema = z.object({
15
+ ...ENTRY_FIELDS,
16
+ kind: z.literal('ticket_joined'),
17
+ content: z.discriminatedUnion('ok', [
18
+ z.object({
19
+ ok: z.literal(true),
20
+ /** The new commits on the run branch, oldest first. */
21
+ shas: z.array(z.string().min(1)),
22
+ /**
23
+ * The ticket's size: lines added plus lines removed by its
24
+ * commits, binary files counting 0. `null` in older journals.
25
+ */
26
+ lines_changed: z.number().int().min(0).nullable().default(null),
27
+ }),
28
+ z.object({ ok: z.literal(false), error: z.string() }),
29
+ ]),
30
+ })
31
+
32
+ /**
33
+ * A ticket's join is about to replay its commits onto the run branch, which
34
+ * stands at `run_branch_sha`. A join a crash cut off (no `ticket_joined`
35
+ * after this) is redone from there: the run branch is reset to it first.
36
+ */
37
+ export const JoinStartedEntrySchema = z.object({
38
+ ...ENTRY_FIELDS,
39
+ kind: z.literal('join_started'),
40
+ content: z.object({ run_branch_sha: z.string().min(1) }),
41
+ })
42
+
43
+ /**
44
+ * Why a joined ticket went back to be fixed on top of the run branch: its
45
+ * commits clashed with it, or the gates failed after it joined.
46
+ */
47
+ export const RejoinCauseSchema = z.enum(['clash', 'join_gates'])
48
+
49
+ export type RejoinCause = z.infer<typeof RejoinCauseSchema>
50
+
51
+ /**
52
+ * The engine put a ticket's whole change back on top of the run branch, as
53
+ * uncommitted changes in its worktree, after a clash or failed gates after
54
+ * joining. `base_sha` is the run branch commit it now starts from. `tests`
55
+ * and `code` are the files that clashed (conflict markers left in them),
56
+ * split by the config's test file patterns. `undone` are the run branch
57
+ * commits the engine undid first (a join whose gates failed), and
58
+ * `reinstall` says whether the worktree needs its install again. As with
59
+ * `join_undone`, replay clears the join of any other ticket whose joined
60
+ * commits are among `undone` (#519).
61
+ */
62
+ export const TicketRebasedEntrySchema = z.object({
63
+ ...ENTRY_FIELDS,
64
+ kind: z.literal('ticket_rebased'),
65
+ content: z.object({
66
+ cause: RejoinCauseSchema,
67
+ base_sha: z.string().min(1),
68
+ tests: z.array(z.string()),
69
+ code: z.array(z.string()),
70
+ undone: z.array(z.string()),
71
+ /**
72
+ * The dependency files (manifests, lockfiles) differ between the
73
+ * worktree's old base and the new one, and the ticket's own change
74
+ * touches no manifest: the worktree gets its frozen install again.
75
+ * (A ticket that changes a manifest gets the install in its gates.)
76
+ */
77
+ reinstall: z.boolean().default(false),
78
+ }),
79
+ })
80
+
81
+ /**
82
+ * After a rebase, the implementer sent one of the ticket's tests back as bad
83
+ * (#489): the tickets that joined the run branch since the ticket's old base
84
+ * made it wrong. The engine sends it to the ticket's test-writer to update,
85
+ * with the implementer's code kept in the worktree. `round` counts these per
86
+ * ticket, from 1. `joined` are the tickets whose commits the run branch got
87
+ * between `from_sha` (the ticket's base before the rebase) and `base_sha`
88
+ * (its base now), and `files` the files the run branch changed between them.
89
+ */
90
+ export const TestsSentBackEntrySchema = z.object({
91
+ ...ENTRY_FIELDS,
92
+ kind: z.literal('tests_sent_back'),
93
+ content: z.object({
94
+ round: z.number().int().positive(),
95
+ bad_test: BadTestSchema,
96
+ from_sha: z.string().min(1),
97
+ base_sha: z.string().min(1),
98
+ joined: z.array(
99
+ z.object({
100
+ ticket: z.number().int().positive(),
101
+ title: z.string(),
102
+ })
103
+ ),
104
+ files: z.array(z.string()),
105
+ }),
106
+ })
107
+
108
+ /**
109
+ * A stuck ticket's join was undone on the run branch (its commits were
110
+ * never pushed), so no other ticket builds on them. `shas` are every commit
111
+ * the undo took off the run branch, oldest first: the ticket's own join and
112
+ * any later, unpushed joins on top of it (#519). Replay clears the join of
113
+ * every ticket whose joined commits are among them, not only this one's, so
114
+ * those tickets join again on the run branch as it is now.
115
+ */
116
+ export const JoinUndoneEntrySchema = z.object({
117
+ ...ENTRY_FIELDS,
118
+ kind: z.literal('join_undone'),
119
+ content: z.object({ shas: z.array(z.string()) }),
120
+ })
121
+
122
+ export const RunBranchPushedEntrySchema = z.object({
123
+ ...ENTRY_FIELDS,
124
+ kind: z.literal('run_branch_pushed'),
125
+ content: z.object({ branch: z.string(), sha: z.string() }),
126
+ })
@@ -0,0 +1,218 @@
1
+ /**
2
+ * What a caller hands the journal to append (`JournalEntrySchema`): every
3
+ * record kind's entry schema in one union. The journal adds `seq` and `time`
4
+ * (see `journal-record-schema.ts`). A new kind is added here, there, and in
5
+ * `journal-kinds.ts`.
6
+ */
7
+ import { z } from 'zod'
8
+
9
+ import {
10
+ AgentFailedEntrySchema,
11
+ AgentFinishedEntrySchema,
12
+ AgentSessionClosedEntrySchema,
13
+ AgentSessionEntrySchema,
14
+ AgentStartedEntrySchema,
15
+ ChoresDoneEntrySchema,
16
+ SharedGitChangedEntrySchema,
17
+ } from './agent-entries'
18
+ import {
19
+ AgentMessageDeliveredEntrySchema,
20
+ AgentMessageEntrySchema,
21
+ } from './agent-message-entries'
22
+ import {
23
+ AlreadyDoneCheckedEntrySchema,
24
+ TicketAlreadyDoneEntrySchema,
25
+ TicketClosedEntrySchema,
26
+ } from './already-done-entries'
27
+ import {
28
+ ChangesetDroppedEntrySchema,
29
+ CommitMadeEntrySchema,
30
+ LeftoverScanEntrySchema,
31
+ } from './commit-entries'
32
+ import {
33
+ DecisionModelOffEntrySchema,
34
+ JevAnsweredEntrySchema,
35
+ JevAskedEntrySchema,
36
+ JevFailedEntrySchema,
37
+ } from './decision-model-entries'
38
+ import {
39
+ FinalReviewFixingEntrySchema,
40
+ FinalReviewPassedEntrySchema,
41
+ FinalReviewRetriedEntrySchema,
42
+ FinalReviewShippedEntrySchema,
43
+ FinalReviewStartedEntrySchema,
44
+ FinalReviewStuckEntrySchema,
45
+ LensFinishedEntrySchema,
46
+ LensStartedEntrySchema,
47
+ } from './final-review-entries'
48
+ import {
49
+ DependenciesInstalledEntrySchema,
50
+ GatesRunEntrySchema,
51
+ RedCheckEntrySchema,
52
+ } from './gate-entries'
53
+ import {
54
+ IntakeReadEntrySchema,
55
+ IntakeRefusedEntrySchema,
56
+ NothingToDoEntrySchema,
57
+ SpecSnapshotEntrySchema,
58
+ TicketSnapshotEntrySchema,
59
+ } from './intake-entries'
60
+ import {
61
+ JoinStartedEntrySchema,
62
+ JoinUndoneEntrySchema,
63
+ RunBranchPushedEntrySchema,
64
+ TestsSentBackEntrySchema,
65
+ TicketJoinedEntrySchema,
66
+ TicketRebasedEntrySchema,
67
+ } from './join-entries'
68
+ import {
69
+ LimitWaitEndedEntrySchema,
70
+ LimitWaitStartedEntrySchema,
71
+ UsageLineWaitEndedEntrySchema,
72
+ UsageLineWaitStartedEntrySchema,
73
+ UsageRecordedEntrySchema,
74
+ } from './limit-entries'
75
+ import {
76
+ LearningSkippedEntrySchema,
77
+ MemoriesReportedEntrySchema,
78
+ MemoriesSavedEntrySchema,
79
+ MemoryRecalledEntrySchema,
80
+ MemoryWriteDoneEntrySchema,
81
+ MemoryWriteStartedEntrySchema,
82
+ } from './memory-entries'
83
+ import {
84
+ ChangesetWrittenEntrySchema,
85
+ PullRequestOpenedEntrySchema,
86
+ } from './pull-request-entries'
87
+ import {
88
+ RepoWaitEndedEntrySchema,
89
+ RepoWaitPsFailedEntrySchema,
90
+ RepoWaitSkippedEntrySchema,
91
+ RepoWaitStartedEntrySchema,
92
+ } from './repo-wait-entries'
93
+ import {
94
+ ConfigReloadedEntrySchema,
95
+ ConfigReloadRefusedEntrySchema,
96
+ EngineResumedEntrySchema,
97
+ RunResumedEntrySchema,
98
+ RunStartedEntrySchema,
99
+ RunStoppedEntrySchema,
100
+ StepEndedEntrySchema,
101
+ StepStartedEntrySchema,
102
+ TicketWaitingEntrySchema,
103
+ } from './run-entries'
104
+ import {
105
+ CommentReadEntrySchema,
106
+ ReplyIgnoredEntrySchema,
107
+ ReplyReceivedEntrySchema,
108
+ RunStuckEntrySchema,
109
+ StuckReportedEntrySchema,
110
+ TicketRetriedEntrySchema,
111
+ TicketSkippedEntrySchema,
112
+ TicketStuckEntrySchema,
113
+ } from './stuck-entries'
114
+ import {
115
+ BaselinePreparedEntrySchema,
116
+ BaselineReusedEntrySchema,
117
+ BaselineTestsEntrySchema,
118
+ PrepareMadeEntrySchema,
119
+ RunBranchCreatedEntrySchema,
120
+ TicketWorktreeCreatedEntrySchema,
121
+ WorktreeResetEntrySchema,
122
+ WorktreesRemovedEntrySchema,
123
+ } from './worktree-entries'
124
+
125
+ /**
126
+ * What a caller hands the journal to append: a kind, its content, and who it
127
+ * is about. The journal adds `seq` and `time`.
128
+ *
129
+ * Later tickets add kinds here.
130
+ */
131
+ export const JournalEntrySchema = z.discriminatedUnion('kind', [
132
+ RunStartedEntrySchema,
133
+ IntakeReadEntrySchema,
134
+ IntakeRefusedEntrySchema,
135
+ NothingToDoEntrySchema,
136
+ SpecSnapshotEntrySchema,
137
+ TicketSnapshotEntrySchema,
138
+ RunBranchCreatedEntrySchema,
139
+ TicketWorktreeCreatedEntrySchema,
140
+ BaselinePreparedEntrySchema,
141
+ PrepareMadeEntrySchema,
142
+ BaselineTestsEntrySchema,
143
+ BaselineReusedEntrySchema,
144
+ AgentStartedEntrySchema,
145
+ AgentFinishedEntrySchema,
146
+ AgentFailedEntrySchema,
147
+ ChoresDoneEntrySchema,
148
+ RedCheckEntrySchema,
149
+ AlreadyDoneCheckedEntrySchema,
150
+ LeftoverScanEntrySchema,
151
+ ChangesetDroppedEntrySchema,
152
+ CommitMadeEntrySchema,
153
+ WorktreeResetEntrySchema,
154
+ DependenciesInstalledEntrySchema,
155
+ GatesRunEntrySchema,
156
+ TicketJoinedEntrySchema,
157
+ TicketRebasedEntrySchema,
158
+ TestsSentBackEntrySchema,
159
+ RunBranchPushedEntrySchema,
160
+ TicketStuckEntrySchema,
161
+ RunStuckEntrySchema,
162
+ ChangesetWrittenEntrySchema,
163
+ PullRequestOpenedEntrySchema,
164
+ JevAskedEntrySchema,
165
+ JevAnsweredEntrySchema,
166
+ JevFailedEntrySchema,
167
+ DecisionModelOffEntrySchema,
168
+ AgentSessionEntrySchema,
169
+ AgentSessionClosedEntrySchema,
170
+ SharedGitChangedEntrySchema,
171
+ RunStoppedEntrySchema,
172
+ LimitWaitStartedEntrySchema,
173
+ LimitWaitEndedEntrySchema,
174
+ UsageLineWaitStartedEntrySchema,
175
+ UsageLineWaitEndedEntrySchema,
176
+ UsageRecordedEntrySchema,
177
+ WorktreesRemovedEntrySchema,
178
+ AgentMessageEntrySchema,
179
+ AgentMessageDeliveredEntrySchema,
180
+ FinalReviewStartedEntrySchema,
181
+ LensStartedEntrySchema,
182
+ LensFinishedEntrySchema,
183
+ FinalReviewFixingEntrySchema,
184
+ FinalReviewStuckEntrySchema,
185
+ FinalReviewPassedEntrySchema,
186
+ FinalReviewShippedEntrySchema,
187
+ StuckReportedEntrySchema,
188
+ CommentReadEntrySchema,
189
+ ReplyReceivedEntrySchema,
190
+ ReplyIgnoredEntrySchema,
191
+ TicketRetriedEntrySchema,
192
+ TicketSkippedEntrySchema,
193
+ TicketAlreadyDoneEntrySchema,
194
+ TicketClosedEntrySchema,
195
+ JoinUndoneEntrySchema,
196
+ FinalReviewRetriedEntrySchema,
197
+ MemoryRecalledEntrySchema,
198
+ MemoryWriteStartedEntrySchema,
199
+ MemoryWriteDoneEntrySchema,
200
+ MemoriesSavedEntrySchema,
201
+ LearningSkippedEntrySchema,
202
+ MemoriesReportedEntrySchema,
203
+ StepStartedEntrySchema,
204
+ StepEndedEntrySchema,
205
+ TicketWaitingEntrySchema,
206
+ RunResumedEntrySchema,
207
+ JoinStartedEntrySchema,
208
+ EngineResumedEntrySchema,
209
+ ConfigReloadedEntrySchema,
210
+ ConfigReloadRefusedEntrySchema,
211
+ RepoWaitStartedEntrySchema,
212
+ RepoWaitEndedEntrySchema,
213
+ RepoWaitSkippedEntrySchema,
214
+ RepoWaitPsFailedEntrySchema,
215
+ ])
216
+
217
+ /** A journal entry as callers write it; schema defaults fill the rest. */
218
+ export type JournalEntry = z.input<typeof JournalEntrySchema>
@@ -0,0 +1,97 @@
1
+ /**
2
+ * Every record kind the journal knows (`JournalKindSchema`, `JOURNAL_KINDS`).
3
+ * A new kind is added here, in `journal-entry-schema.ts`, and in
4
+ * `journal-record-schema.ts`.
5
+ */
6
+ import { z } from 'zod'
7
+
8
+ /** Every record kind the journal knows so far. */
9
+ export const JournalKindSchema = z.enum([
10
+ 'run_started',
11
+ 'intake_read',
12
+ 'intake_refused',
13
+ 'nothing_to_do',
14
+ 'spec_snapshot',
15
+ 'ticket_snapshot',
16
+ 'run_branch_created',
17
+ 'ticket_worktree_created',
18
+ 'baseline_prepared',
19
+ 'prepare_made',
20
+ 'baseline_tests',
21
+ 'baseline_reused',
22
+ 'agent_started',
23
+ 'agent_finished',
24
+ 'agent_failed',
25
+ 'chores_done',
26
+ 'red_check',
27
+ 'already_done_checked',
28
+ 'leftover_scan',
29
+ 'changeset_dropped',
30
+ 'commit_made',
31
+ 'worktree_reset',
32
+ 'dependencies_installed',
33
+ 'gates_run',
34
+ 'ticket_joined',
35
+ 'ticket_rebased',
36
+ 'tests_sent_back',
37
+ 'run_branch_pushed',
38
+ 'ticket_stuck',
39
+ 'run_stuck',
40
+ 'changeset_written',
41
+ 'pull_request_opened',
42
+ 'jev_asked',
43
+ 'jev_answered',
44
+ 'jev_failed',
45
+ 'decision_model_off',
46
+ 'agent_session',
47
+ 'agent_session_closed',
48
+ 'shared_git_changed',
49
+ 'run_stopped',
50
+ 'limit_wait_started',
51
+ 'limit_wait_ended',
52
+ 'usage_line_wait_started',
53
+ 'usage_line_wait_ended',
54
+ 'usage_recorded',
55
+ 'worktrees_removed',
56
+ 'agent_message',
57
+ 'agent_message_delivered',
58
+ 'final_review_started',
59
+ 'lens_started',
60
+ 'lens_finished',
61
+ 'final_review_fixing',
62
+ 'final_review_stuck',
63
+ 'final_review_passed',
64
+ 'final_review_shipped',
65
+ 'stuck_reported',
66
+ 'comment_read',
67
+ 'reply_received',
68
+ 'reply_ignored',
69
+ 'ticket_retried',
70
+ 'ticket_skipped',
71
+ 'ticket_already_done',
72
+ 'ticket_closed',
73
+ 'join_undone',
74
+ 'final_review_retried',
75
+ 'memory_recalled',
76
+ 'memory_write_started',
77
+ 'memory_write_done',
78
+ 'memories_saved',
79
+ 'learning_skipped',
80
+ 'memories_reported',
81
+ 'step_started',
82
+ 'step_ended',
83
+ 'ticket_waiting',
84
+ 'run_resumed',
85
+ 'join_started',
86
+ 'engine_resumed',
87
+ 'config_reloaded',
88
+ 'config_reload_refused',
89
+ 'repo_wait_started',
90
+ 'repo_wait_ended',
91
+ 'repo_wait_skipped',
92
+ 'repo_wait_ps_failed',
93
+ ])
94
+
95
+ export type JournalKind = z.infer<typeof JournalKindSchema>
96
+
97
+ export const JOURNAL_KINDS = JournalKindSchema.options
@@ -0,0 +1,218 @@
1
+ /**
2
+ * One line of a run's journal (`JournalRecordSchema`): every record kind's
3
+ * entry schema in one union, each with the `seq` and `time` the journal adds.
4
+ * A new kind is added here, in `journal-entry-schema.ts`, and in
5
+ * `journal-kinds.ts`.
6
+ */
7
+ import { z } from 'zod'
8
+
9
+ import {
10
+ AgentFailedEntrySchema,
11
+ AgentFinishedEntrySchema,
12
+ AgentSessionClosedEntrySchema,
13
+ AgentSessionEntrySchema,
14
+ AgentStartedEntrySchema,
15
+ ChoresDoneEntrySchema,
16
+ SharedGitChangedEntrySchema,
17
+ } from './agent-entries'
18
+ import {
19
+ AgentMessageDeliveredEntrySchema,
20
+ AgentMessageEntrySchema,
21
+ } from './agent-message-entries'
22
+ import {
23
+ AlreadyDoneCheckedEntrySchema,
24
+ TicketAlreadyDoneEntrySchema,
25
+ TicketClosedEntrySchema,
26
+ } from './already-done-entries'
27
+ import {
28
+ ChangesetDroppedEntrySchema,
29
+ CommitMadeEntrySchema,
30
+ LeftoverScanEntrySchema,
31
+ } from './commit-entries'
32
+ import {
33
+ DecisionModelOffEntrySchema,
34
+ JevAnsweredEntrySchema,
35
+ JevAskedEntrySchema,
36
+ JevFailedEntrySchema,
37
+ } from './decision-model-entries'
38
+ import {
39
+ FinalReviewFixingEntrySchema,
40
+ FinalReviewPassedEntrySchema,
41
+ FinalReviewRetriedEntrySchema,
42
+ FinalReviewShippedEntrySchema,
43
+ FinalReviewStartedEntrySchema,
44
+ FinalReviewStuckEntrySchema,
45
+ LensFinishedEntrySchema,
46
+ LensStartedEntrySchema,
47
+ } from './final-review-entries'
48
+ import {
49
+ DependenciesInstalledEntrySchema,
50
+ GatesRunEntrySchema,
51
+ RedCheckEntrySchema,
52
+ } from './gate-entries'
53
+ import {
54
+ IntakeReadEntrySchema,
55
+ IntakeRefusedEntrySchema,
56
+ NothingToDoEntrySchema,
57
+ SpecSnapshotEntrySchema,
58
+ TicketSnapshotEntrySchema,
59
+ } from './intake-entries'
60
+ import {
61
+ JoinStartedEntrySchema,
62
+ JoinUndoneEntrySchema,
63
+ RunBranchPushedEntrySchema,
64
+ TestsSentBackEntrySchema,
65
+ TicketJoinedEntrySchema,
66
+ TicketRebasedEntrySchema,
67
+ } from './join-entries'
68
+ import {
69
+ LimitWaitEndedEntrySchema,
70
+ LimitWaitStartedEntrySchema,
71
+ UsageLineWaitEndedEntrySchema,
72
+ UsageLineWaitStartedEntrySchema,
73
+ UsageRecordedEntrySchema,
74
+ } from './limit-entries'
75
+ import {
76
+ LearningSkippedEntrySchema,
77
+ MemoriesReportedEntrySchema,
78
+ MemoriesSavedEntrySchema,
79
+ MemoryRecalledEntrySchema,
80
+ MemoryWriteDoneEntrySchema,
81
+ MemoryWriteStartedEntrySchema,
82
+ } from './memory-entries'
83
+ import {
84
+ ChangesetWrittenEntrySchema,
85
+ PullRequestOpenedEntrySchema,
86
+ } from './pull-request-entries'
87
+ import {
88
+ RepoWaitEndedEntrySchema,
89
+ RepoWaitPsFailedEntrySchema,
90
+ RepoWaitSkippedEntrySchema,
91
+ RepoWaitStartedEntrySchema,
92
+ } from './repo-wait-entries'
93
+ import {
94
+ ConfigReloadedEntrySchema,
95
+ ConfigReloadRefusedEntrySchema,
96
+ EngineResumedEntrySchema,
97
+ RunResumedEntrySchema,
98
+ RunStartedEntrySchema,
99
+ RunStoppedEntrySchema,
100
+ StepEndedEntrySchema,
101
+ StepStartedEntrySchema,
102
+ TicketWaitingEntrySchema,
103
+ } from './run-entries'
104
+ import {
105
+ CommentReadEntrySchema,
106
+ ReplyIgnoredEntrySchema,
107
+ ReplyReceivedEntrySchema,
108
+ RunStuckEntrySchema,
109
+ StuckReportedEntrySchema,
110
+ TicketRetriedEntrySchema,
111
+ TicketSkippedEntrySchema,
112
+ TicketStuckEntrySchema,
113
+ } from './stuck-entries'
114
+ import {
115
+ BaselinePreparedEntrySchema,
116
+ BaselineReusedEntrySchema,
117
+ BaselineTestsEntrySchema,
118
+ PrepareMadeEntrySchema,
119
+ RunBranchCreatedEntrySchema,
120
+ TicketWorktreeCreatedEntrySchema,
121
+ WorktreeResetEntrySchema,
122
+ WorktreesRemovedEntrySchema,
123
+ } from './worktree-entries'
124
+
125
+ const STAMP_FIELDS = {
126
+ /** 1, 2, 3, ... in the order records were appended. */
127
+ seq: z.number().int().min(1),
128
+ time: z.iso.datetime(),
129
+ }
130
+
131
+ /** One line of a run's journal. */
132
+ export const JournalRecordSchema = z.discriminatedUnion('kind', [
133
+ RunStartedEntrySchema.extend(STAMP_FIELDS),
134
+ IntakeReadEntrySchema.extend(STAMP_FIELDS),
135
+ IntakeRefusedEntrySchema.extend(STAMP_FIELDS),
136
+ NothingToDoEntrySchema.extend(STAMP_FIELDS),
137
+ SpecSnapshotEntrySchema.extend(STAMP_FIELDS),
138
+ TicketSnapshotEntrySchema.extend(STAMP_FIELDS),
139
+ RunBranchCreatedEntrySchema.extend(STAMP_FIELDS),
140
+ TicketWorktreeCreatedEntrySchema.extend(STAMP_FIELDS),
141
+ BaselinePreparedEntrySchema.extend(STAMP_FIELDS),
142
+ PrepareMadeEntrySchema.extend(STAMP_FIELDS),
143
+ BaselineTestsEntrySchema.extend(STAMP_FIELDS),
144
+ BaselineReusedEntrySchema.extend(STAMP_FIELDS),
145
+ AgentStartedEntrySchema.extend(STAMP_FIELDS),
146
+ AgentFinishedEntrySchema.extend(STAMP_FIELDS),
147
+ AgentFailedEntrySchema.extend(STAMP_FIELDS),
148
+ ChoresDoneEntrySchema.extend(STAMP_FIELDS),
149
+ RedCheckEntrySchema.extend(STAMP_FIELDS),
150
+ AlreadyDoneCheckedEntrySchema.extend(STAMP_FIELDS),
151
+ LeftoverScanEntrySchema.extend(STAMP_FIELDS),
152
+ ChangesetDroppedEntrySchema.extend(STAMP_FIELDS),
153
+ CommitMadeEntrySchema.extend(STAMP_FIELDS),
154
+ WorktreeResetEntrySchema.extend(STAMP_FIELDS),
155
+ DependenciesInstalledEntrySchema.extend(STAMP_FIELDS),
156
+ GatesRunEntrySchema.extend(STAMP_FIELDS),
157
+ TicketJoinedEntrySchema.extend(STAMP_FIELDS),
158
+ TicketRebasedEntrySchema.extend(STAMP_FIELDS),
159
+ TestsSentBackEntrySchema.extend(STAMP_FIELDS),
160
+ RunBranchPushedEntrySchema.extend(STAMP_FIELDS),
161
+ TicketStuckEntrySchema.extend(STAMP_FIELDS),
162
+ RunStuckEntrySchema.extend(STAMP_FIELDS),
163
+ ChangesetWrittenEntrySchema.extend(STAMP_FIELDS),
164
+ PullRequestOpenedEntrySchema.extend(STAMP_FIELDS),
165
+ JevAskedEntrySchema.extend(STAMP_FIELDS),
166
+ JevAnsweredEntrySchema.extend(STAMP_FIELDS),
167
+ JevFailedEntrySchema.extend(STAMP_FIELDS),
168
+ DecisionModelOffEntrySchema.extend(STAMP_FIELDS),
169
+ AgentSessionEntrySchema.extend(STAMP_FIELDS),
170
+ AgentSessionClosedEntrySchema.extend(STAMP_FIELDS),
171
+ SharedGitChangedEntrySchema.extend(STAMP_FIELDS),
172
+ RunStoppedEntrySchema.extend(STAMP_FIELDS),
173
+ LimitWaitStartedEntrySchema.extend(STAMP_FIELDS),
174
+ LimitWaitEndedEntrySchema.extend(STAMP_FIELDS),
175
+ UsageLineWaitStartedEntrySchema.extend(STAMP_FIELDS),
176
+ UsageLineWaitEndedEntrySchema.extend(STAMP_FIELDS),
177
+ UsageRecordedEntrySchema.extend(STAMP_FIELDS),
178
+ WorktreesRemovedEntrySchema.extend(STAMP_FIELDS),
179
+ AgentMessageEntrySchema.extend(STAMP_FIELDS),
180
+ AgentMessageDeliveredEntrySchema.extend(STAMP_FIELDS),
181
+ FinalReviewStartedEntrySchema.extend(STAMP_FIELDS),
182
+ LensStartedEntrySchema.extend(STAMP_FIELDS),
183
+ LensFinishedEntrySchema.extend(STAMP_FIELDS),
184
+ FinalReviewFixingEntrySchema.extend(STAMP_FIELDS),
185
+ FinalReviewStuckEntrySchema.extend(STAMP_FIELDS),
186
+ FinalReviewPassedEntrySchema.extend(STAMP_FIELDS),
187
+ FinalReviewShippedEntrySchema.extend(STAMP_FIELDS),
188
+ StuckReportedEntrySchema.extend(STAMP_FIELDS),
189
+ CommentReadEntrySchema.extend(STAMP_FIELDS),
190
+ ReplyReceivedEntrySchema.extend(STAMP_FIELDS),
191
+ ReplyIgnoredEntrySchema.extend(STAMP_FIELDS),
192
+ TicketRetriedEntrySchema.extend(STAMP_FIELDS),
193
+ TicketSkippedEntrySchema.extend(STAMP_FIELDS),
194
+ TicketAlreadyDoneEntrySchema.extend(STAMP_FIELDS),
195
+ TicketClosedEntrySchema.extend(STAMP_FIELDS),
196
+ JoinUndoneEntrySchema.extend(STAMP_FIELDS),
197
+ FinalReviewRetriedEntrySchema.extend(STAMP_FIELDS),
198
+ MemoryRecalledEntrySchema.extend(STAMP_FIELDS),
199
+ MemoryWriteStartedEntrySchema.extend(STAMP_FIELDS),
200
+ MemoryWriteDoneEntrySchema.extend(STAMP_FIELDS),
201
+ MemoriesSavedEntrySchema.extend(STAMP_FIELDS),
202
+ LearningSkippedEntrySchema.extend(STAMP_FIELDS),
203
+ MemoriesReportedEntrySchema.extend(STAMP_FIELDS),
204
+ StepStartedEntrySchema.extend(STAMP_FIELDS),
205
+ StepEndedEntrySchema.extend(STAMP_FIELDS),
206
+ TicketWaitingEntrySchema.extend(STAMP_FIELDS),
207
+ RunResumedEntrySchema.extend(STAMP_FIELDS),
208
+ JoinStartedEntrySchema.extend(STAMP_FIELDS),
209
+ EngineResumedEntrySchema.extend(STAMP_FIELDS),
210
+ ConfigReloadedEntrySchema.extend(STAMP_FIELDS),
211
+ ConfigReloadRefusedEntrySchema.extend(STAMP_FIELDS),
212
+ RepoWaitStartedEntrySchema.extend(STAMP_FIELDS),
213
+ RepoWaitEndedEntrySchema.extend(STAMP_FIELDS),
214
+ RepoWaitSkippedEntrySchema.extend(STAMP_FIELDS),
215
+ RepoWaitPsFailedEntrySchema.extend(STAMP_FIELDS),
216
+ ])
217
+
218
+ export type JournalRecord = z.infer<typeof JournalRecordSchema>