openlanes 3.0.1 → 3.1.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 (319) hide show
  1. checksums.yaml +4 -4
  2. data/Brewfile +42 -0
  3. data/agents/bb8-resolver.md +49 -0
  4. data/agents/c3po-operator.md +4 -0
  5. data/agents/chewie-verifier.md +85 -0
  6. data/agents/hansolo-reviewer.md +20 -15
  7. data/agents/lando-broker.md +81 -19
  8. data/agents/leah-researcher.md +6 -6
  9. data/agents/luke-backend.md +41 -20
  10. data/agents/{palpatine-planner.md → luthen-rael-planner.md} +15 -13
  11. data/agents/palpatine-risk-assessor.md +112 -0
  12. data/agents/r2d2-mechanic.md +5 -1
  13. data/agents/rey-frontend.md +38 -19
  14. data/agents/yoda-writer.md +7 -7
  15. data/evals/cases/chewie-verifier/verify-medium/fail/plan/plan.md +7 -0
  16. data/evals/cases/chewie-verifier/verify-medium/fail/plan/pull-requests.md +10 -0
  17. data/evals/cases/chewie-verifier/verify-medium/fail/plan/spec.md +5 -0
  18. data/evals/cases/chewie-verifier/verify-medium/fail/plan/verification/1/final.png +0 -0
  19. data/evals/cases/chewie-verifier/verify-medium/fail/plan/verification/1/report.md +7 -0
  20. data/evals/cases/chewie-verifier/verify-medium/fail/repo/bin/greet +1 -0
  21. data/evals/cases/chewie-verifier/verify-medium/fail/run.json +1 -0
  22. data/evals/cases/chewie-verifier/verify-medium/pass/plan/plan.md +7 -0
  23. data/evals/cases/chewie-verifier/verify-medium/pass/plan/pull-requests.md +10 -0
  24. data/evals/cases/chewie-verifier/verify-medium/pass/plan/spec.md +5 -0
  25. data/evals/cases/chewie-verifier/verify-medium/pass/plan/verification/1/final.png +0 -0
  26. data/evals/cases/chewie-verifier/verify-medium/pass/plan/verification/1/report.md +14 -0
  27. data/evals/cases/chewie-verifier/verify-medium/pass/plan/verification/1/step-01.png +0 -0
  28. data/evals/cases/chewie-verifier/verify-medium/pass/repo/bin/greet +1 -0
  29. data/evals/cases/chewie-verifier/verify-medium/pass/run.json +1 -0
  30. data/evals/cases/chewie-verifier/verify-medium.yml +48 -0
  31. data/evals/cases/hansolo-reviewer/coverage-minimum/fail/plan/implementation-plan.md +5 -0
  32. data/evals/cases/hansolo-reviewer/coverage-minimum/fail/plan/plan.md +3 -0
  33. data/evals/cases/hansolo-reviewer/coverage-minimum/fail/plan/pull-requests.md +12 -0
  34. data/evals/cases/hansolo-reviewer/coverage-minimum/fail/plan/spec.md +5 -0
  35. data/evals/cases/hansolo-reviewer/coverage-minimum/fail/repo/lib/cart.rb +10 -0
  36. data/evals/cases/hansolo-reviewer/coverage-minimum/fail/repo/spec/cart_spec.rb +9 -0
  37. data/evals/cases/hansolo-reviewer/coverage-minimum/fail/run.json +1 -0
  38. data/evals/cases/hansolo-reviewer/coverage-minimum/pass/plan/implementation-plan.md +5 -0
  39. data/evals/cases/hansolo-reviewer/coverage-minimum/pass/plan/plan.md +3 -0
  40. data/evals/cases/hansolo-reviewer/coverage-minimum/pass/plan/pull-requests.md +15 -0
  41. data/evals/cases/hansolo-reviewer/coverage-minimum/pass/plan/spec.md +5 -0
  42. data/evals/cases/hansolo-reviewer/coverage-minimum/pass/repo/lib/cart.rb +10 -0
  43. data/evals/cases/hansolo-reviewer/coverage-minimum/pass/repo/spec/cart_spec.rb +9 -0
  44. data/evals/cases/hansolo-reviewer/coverage-minimum/pass/run.json +1 -0
  45. data/evals/cases/hansolo-reviewer/coverage-minimum.yml +76 -0
  46. data/evals/cases/luthen-rael-planner/plan-deep/fail/plan/plan.md +8 -0
  47. data/evals/cases/{palpatine-planner → luthen-rael-planner}/plan-deep/pass/plan/plan.md +2 -2
  48. data/evals/cases/{palpatine-planner → luthen-rael-planner}/plan-deep.yml +1 -1
  49. data/evals/cases/luthen-rael-planner/plan-fast/fail/plan/plan.md +12 -0
  50. data/evals/cases/{palpatine-planner → luthen-rael-planner}/plan-fast/pass/plan/plan.md +2 -2
  51. data/evals/cases/{palpatine-planner → luthen-rael-planner}/plan-fast.yml +1 -1
  52. data/evals/cases/palpatine-risk-assessor/risk-medium/fail/plan/plan.md +20 -0
  53. data/evals/cases/palpatine-risk-assessor/risk-medium/fail/plan/pull-requests.md +5 -0
  54. data/evals/cases/palpatine-risk-assessor/risk-medium/fail/plan/spec.md +5 -0
  55. data/evals/cases/palpatine-risk-assessor/risk-medium/fail/repo/db/migrate/20261020120000_drop_legacy_email.rb +5 -0
  56. data/evals/cases/palpatine-risk-assessor/risk-medium/fail/run.json +1 -0
  57. data/evals/cases/palpatine-risk-assessor/risk-medium/pass/plan/plan.md +25 -0
  58. data/evals/cases/palpatine-risk-assessor/risk-medium/pass/plan/pull-requests.md +5 -0
  59. data/evals/cases/palpatine-risk-assessor/risk-medium/pass/plan/spec.md +5 -0
  60. data/evals/cases/palpatine-risk-assessor/risk-medium/pass/repo/db/migrate/20261020120000_drop_legacy_email.rb +5 -0
  61. data/evals/cases/palpatine-risk-assessor/risk-medium/pass/run.json +1 -0
  62. data/evals/cases/palpatine-risk-assessor/risk-medium.yml +47 -0
  63. data/evals/cases/yoda-writer/spec-medium/pass/plan/spec.md +1 -1
  64. data/lib/openlanes/adapters/base.rb +18 -4
  65. data/lib/openlanes/adapters/capabilities.rb +29 -0
  66. data/lib/openlanes/adapters/claude.rb +14 -11
  67. data/lib/openlanes/adapters/codex.rb +9 -0
  68. data/lib/openlanes/adapters/pi.rb +10 -0
  69. data/lib/openlanes/adapters/stream.rb +145 -1
  70. data/lib/openlanes/adapters.rb +7 -0
  71. data/lib/openlanes/agents/agent.rb +4 -3
  72. data/lib/openlanes/agents/roster.rb +14 -2
  73. data/lib/openlanes/agents/routing.rb +43 -3
  74. data/lib/openlanes/apps/definition.rb +152 -0
  75. data/lib/openlanes/apps/framing.rb +114 -0
  76. data/lib/openlanes/apps/listing.rb +60 -0
  77. data/lib/openlanes/apps/ports.rb +168 -0
  78. data/lib/openlanes/apps/probe.rb +63 -0
  79. data/lib/openlanes/apps/process_spec.rb +39 -0
  80. data/lib/openlanes/apps/runner.rb +174 -0
  81. data/lib/openlanes/apps/status.rb +62 -0
  82. data/lib/openlanes/apps/supervisor.rb +277 -0
  83. data/lib/openlanes/apps/watcher.rb +50 -0
  84. data/lib/openlanes/apps.rb +41 -0
  85. data/lib/openlanes/cli/api/api.rb +10 -0
  86. data/lib/openlanes/cli/api/subcommands/docs.rb +63 -0
  87. data/lib/openlanes/cli/app/app.rb +31 -0
  88. data/lib/openlanes/cli/app/subcommands/start.rb +114 -0
  89. data/lib/openlanes/cli/app/subcommands/status.rb +38 -0
  90. data/lib/openlanes/cli/app/subcommands/stop.rb +44 -0
  91. data/lib/openlanes/cli/base.rb +89 -16
  92. data/lib/openlanes/cli/coverage/coverage.rb +68 -0
  93. data/lib/openlanes/cli/create/create.rb +11 -265
  94. data/lib/openlanes/cli/eval/eval.rb +4 -1
  95. data/lib/openlanes/cli/init/init.rb +39 -2
  96. data/lib/openlanes/cli/linear/subcommands/import.rb +1 -1
  97. data/lib/openlanes/cli/linear/subcommands/projects.rb +1 -1
  98. data/lib/openlanes/cli/list_plans/list_plans.rb +8 -2
  99. data/lib/openlanes/cli/mail/subcommands/ack.rb +52 -0
  100. data/lib/openlanes/cli/mail/subcommands/render.rb +31 -0
  101. data/lib/openlanes/cli/mail/subcommands/send.rb +26 -0
  102. data/lib/openlanes/cli/resync/subcommands/dirs.rb +53 -12
  103. data/lib/openlanes/cli/resync/subcommands/prs.rb +8 -69
  104. data/lib/openlanes/cli/review/review.rb +72 -0
  105. data/lib/openlanes/cli/run/run.rb +22 -486
  106. data/lib/openlanes/cli/setup/setup.rb +51 -0
  107. data/lib/openlanes/cli/start/start.rb +7 -51
  108. data/lib/openlanes/cli/state/state.rb +1 -1
  109. data/lib/openlanes/cli/state/subcommands/resume.rb +61 -0
  110. data/lib/openlanes/cli/state/subcommands/sign.rb +1 -1
  111. data/lib/openlanes/cli/unblock/unblock.rb +11 -205
  112. data/lib/openlanes/cli/web/web.rb +84 -8
  113. data/lib/openlanes/cli/worktree/worktree.rb +1 -1
  114. data/lib/openlanes/cli/worktree/worktree_prune.rb +77 -0
  115. data/lib/openlanes/cli.rb +37 -2
  116. data/lib/openlanes/coverage/cobertura.rb +49 -0
  117. data/lib/openlanes/coverage/config.rb +194 -0
  118. data/lib/openlanes/coverage/istanbul.rb +31 -0
  119. data/lib/openlanes/coverage/lcov.rb +38 -0
  120. data/lib/openlanes/coverage/report.rb +71 -0
  121. data/lib/openlanes/coverage/simplecov.rb +70 -0
  122. data/lib/openlanes/coverage.rb +33 -0
  123. data/lib/openlanes/engine/agent_locks.rb +231 -0
  124. data/lib/openlanes/engine/arbitration.rb +25 -0
  125. data/lib/openlanes/engine/board.rb +36 -5
  126. data/lib/openlanes/engine/conversions.rb +160 -0
  127. data/lib/openlanes/engine/coverage_gate.rb +217 -0
  128. data/lib/openlanes/engine/dispatcher.rb +1175 -117
  129. data/lib/openlanes/engine/event_journal/replay.rb +96 -0
  130. data/lib/openlanes/engine/event_journal.rb +148 -0
  131. data/lib/openlanes/engine/extensions.rb +271 -0
  132. data/lib/openlanes/engine/merging.rb +459 -0
  133. data/lib/openlanes/engine/narrator.rb +6 -6
  134. data/lib/openlanes/engine/plan_locks.rb +114 -0
  135. data/lib/openlanes/engine/pr_outcomes.rb +161 -0
  136. data/lib/openlanes/engine/pr_watch.rb +83 -0
  137. data/lib/openlanes/engine/progress_log.rb +12 -120
  138. data/lib/openlanes/engine/quality_question.rb +125 -0
  139. data/lib/openlanes/engine/rebase.rb +200 -0
  140. data/lib/openlanes/engine/run_workflow.rb +776 -0
  141. data/lib/openlanes/engine/runner.rb +186 -15
  142. data/lib/openlanes/engine/start_workflow.rb +77 -0
  143. data/lib/openlanes/engine/state_file.rb +101 -34
  144. data/lib/openlanes/engine/tally.rb +1 -1
  145. data/lib/openlanes/engine/verification/app_session.rb +104 -0
  146. data/lib/openlanes/engine/verification/driver.rb +314 -0
  147. data/lib/openlanes/engine/verification/outcome.rb +516 -0
  148. data/lib/openlanes/engine/verification/report.rb +95 -0
  149. data/lib/openlanes/engine/verification/round.rb +100 -0
  150. data/lib/openlanes/engine/verification/screenshots.rb +120 -0
  151. data/lib/openlanes/engine/verification.rb +57 -0
  152. data/lib/openlanes/engine.rb +30 -1
  153. data/lib/openlanes/execution/boundary.rb +212 -0
  154. data/lib/openlanes/execution/child.rb +4 -2
  155. data/lib/openlanes/execution/clock.rb +36 -6
  156. data/lib/openlanes/execution/control.rb +32 -0
  157. data/lib/openlanes/execution/executor.rb +114 -35
  158. data/lib/openlanes/execution/process_start.rb +63 -0
  159. data/lib/openlanes/execution/prompt.rb +223 -34
  160. data/lib/openlanes/execution/transcript.rb +159 -8
  161. data/lib/openlanes/execution.rb +21 -0
  162. data/lib/openlanes/lifecycle/adoption.rb +25 -8
  163. data/lib/openlanes/lifecycle/aging.rb +166 -0
  164. data/lib/openlanes/lifecycle/allocator.rb +216 -0
  165. data/lib/openlanes/lifecycle/brief.rb +32 -2
  166. data/lib/openlanes/lifecycle/completion.rb +12 -6
  167. data/lib/openlanes/lifecycle/create_workflow.rb +272 -0
  168. data/lib/openlanes/lifecycle/creator.rb +17 -13
  169. data/lib/openlanes/lifecycle/lanes.rb +1 -1
  170. data/lib/openlanes/lifecycle/resync.rb +170 -42
  171. data/lib/openlanes/lifecycle/unblock_workflow.rb +234 -0
  172. data/lib/openlanes/lifecycle/unblocker.rb +76 -2
  173. data/lib/openlanes/lifecycle.rb +37 -1
  174. data/lib/openlanes/linear/mapping.rb +4 -1
  175. data/lib/openlanes/linear/unit.rb +1 -1
  176. data/lib/openlanes/live/chat.rb +60 -11
  177. data/lib/openlanes/live/choice_converter.rb +166 -0
  178. data/lib/openlanes/live/choice_judge.rb +109 -0
  179. data/lib/openlanes/live/claims.rb +9 -1
  180. data/lib/openlanes/live/command.rb +13 -10
  181. data/lib/openlanes/live/commands.rb +217 -30
  182. data/lib/openlanes/live/copilot/slash.rb +82 -0
  183. data/lib/openlanes/live/copilot.rb +38 -4
  184. data/lib/openlanes/live/event_bus/base.rb +52 -0
  185. data/lib/openlanes/live/event_bus/memory_bus.rb +14 -0
  186. data/lib/openlanes/live/event_bus/redis_bus.rb +10 -0
  187. data/lib/openlanes/live/event_bus/transaction.rb +27 -0
  188. data/lib/openlanes/live/event_bus.rb +29 -0
  189. data/lib/openlanes/live/interviewer.rb +146 -0
  190. data/lib/openlanes/live/keys.rb +56 -0
  191. data/lib/openlanes/live/mail.rb +143 -0
  192. data/lib/openlanes/live/memory_store.rb +12 -1
  193. data/lib/openlanes/live/news.rb +61 -0
  194. data/lib/openlanes/live/node.rb +20 -0
  195. data/lib/openlanes/live/outage.rb +225 -0
  196. data/lib/openlanes/live/outage_report.rb +89 -0
  197. data/lib/openlanes/live/publisher.rb +42 -2
  198. data/lib/openlanes/live/run_record.rb +39 -1
  199. data/lib/openlanes/live/run_state.rb +19 -2
  200. data/lib/openlanes/live/session.rb +31 -3
  201. data/lib/openlanes/live/snapshot.rb +103 -42
  202. data/lib/openlanes/live/stations.rb +4 -4
  203. data/lib/openlanes/live/store.rb +18 -1
  204. data/lib/openlanes/live/subscriber.rb +22 -2
  205. data/lib/openlanes/live.rb +66 -1
  206. data/lib/openlanes/plans/blocked_file.rb +117 -0
  207. data/lib/openlanes/plans/choices.rb +228 -0
  208. data/lib/openlanes/plans/dependencies.rb +304 -0
  209. data/lib/openlanes/plans/feature.rb +75 -16
  210. data/lib/openlanes/plans/journal.rb +169 -0
  211. data/lib/openlanes/plans/last_known_state.rb +82 -0
  212. data/lib/openlanes/plans/lock.rb +171 -0
  213. data/lib/openlanes/plans/mailbox.rb +145 -4
  214. data/lib/openlanes/plans/plan_state.rb +590 -9
  215. data/lib/openlanes/plans/pull_request_machine.rb +163 -0
  216. data/lib/openlanes/plans/review_label.rb +139 -0
  217. data/lib/openlanes/plans/spec.rb +239 -3
  218. data/lib/openlanes/plans/state_machine.rb +63 -30
  219. data/lib/openlanes/plans/status.rb +60 -11
  220. data/lib/openlanes/plans/subject.rb +4 -0
  221. data/lib/openlanes/plans/tree.rb +101 -10
  222. data/lib/openlanes/plans/verdict.rb +124 -0
  223. data/lib/openlanes/plans.rb +19 -0
  224. data/lib/openlanes/presentation/api_docs.rb +76 -0
  225. data/lib/openlanes/presentation/documentation.rb +105 -12
  226. data/lib/openlanes/presentation/pr_changes.rb +90 -0
  227. data/lib/openlanes/presentation/reporter.rb +64 -5
  228. data/lib/openlanes/presentation.rb +20 -1
  229. data/lib/openlanes/setup/check.rb +16 -0
  230. data/lib/openlanes/setup/machine.rb +179 -0
  231. data/lib/openlanes/setup.rb +34 -0
  232. data/lib/openlanes/support/clock.rb +57 -0
  233. data/lib/openlanes/support/config.rb +318 -6
  234. data/lib/openlanes/support/log.rb +206 -0
  235. data/lib/openlanes/support/refusal.rb +15 -0
  236. data/lib/openlanes/support/runtime.rb +61 -0
  237. data/lib/openlanes/support/spawner.rb +51 -0
  238. data/lib/openlanes/support/ui.rb +39 -24
  239. data/lib/openlanes/vcs/ci_gate.rb +31 -0
  240. data/lib/openlanes/vcs/github.rb +362 -12
  241. data/lib/openlanes/vcs/label_migration.rb +132 -0
  242. data/lib/openlanes/vcs/label_sync.rb +75 -0
  243. data/lib/openlanes/vcs/publisher.rb +226 -8
  244. data/lib/openlanes/vcs/refresh.rb +337 -0
  245. data/lib/openlanes/vcs/rename_date.rb +83 -0
  246. data/lib/openlanes/vcs/review.rb +66 -0
  247. data/lib/openlanes/vcs/worktree.rb +167 -6
  248. data/lib/openlanes/vcs.rb +18 -0
  249. data/lib/openlanes/version.rb +1 -1
  250. data/lib/openlanes/web/admin_auth.rb +104 -0
  251. data/lib/openlanes/web/app.rb +115 -16
  252. data/lib/openlanes/web/context.rb +15 -9
  253. data/lib/openlanes/web/demo.rb +29 -14
  254. data/lib/openlanes/web/demo_board.rb +63 -5
  255. data/lib/openlanes/web/events.rb +86 -7
  256. data/lib/openlanes/web/launcher.rb +69 -7
  257. data/lib/openlanes/web/listen.rb +133 -0
  258. data/lib/openlanes/web/plan_files.rb +136 -0
  259. data/lib/openlanes/web/request_log.rb +108 -0
  260. data/lib/openlanes/web/server.rb +29 -10
  261. data/lib/openlanes/web.rb +6 -4
  262. data/lib/openlanes.rb +45 -7
  263. data/openlanes.gemspec +9 -4
  264. data/schemas/journal-event.schema.json +72 -0
  265. data/schemas/plan-state.schema.json +163 -2
  266. data/skills/openlanes/SKILL.md +2 -2
  267. data/skills/openlanes-documents/SKILL.md +4 -4
  268. data/skills/openlanes-documents/references/blocked-template.md +2 -2
  269. data/skills/openlanes-documents/references/closing-templates.md +1 -1
  270. data/skills/openlanes-documents/references/plan-template.md +12 -4
  271. data/skills/openlanes-documents/references/retroactive-spec.md +1 -1
  272. data/skills/openlanes-run/SKILL.md +5 -5
  273. data/skills/openlanes-spec/SKILL.md +1 -1
  274. data/skills/openlanes-status/SKILL.md +1 -1
  275. data/web/dist/assets/{index-BFPI-zXI.js → index-690ayLS4.js} +2 -2
  276. data/web/dist/assets/index-6ZmW4slI.js +199 -0
  277. data/web/dist/assets/{index-bpsFIpXE.js → index-B5KzlXp1.js} +2 -2
  278. data/web/dist/assets/{index-DtA46i32.js → index-BAo_v9bU.js} +2 -2
  279. data/web/dist/assets/{index-CnJfB0l2.js → index-BDm7g-xG.js} +2 -2
  280. data/web/dist/assets/{index-DXgeajd6.js → index-BFH9bC7v.js} +2 -2
  281. data/web/dist/assets/{index-DH0gDlee.js → index-BVHPV7z4.js} +2 -2
  282. data/web/dist/assets/{index-DaSjQ-H4.js → index-B_CPqjnA.js} +2 -2
  283. data/web/dist/assets/{index-Dbxvk-EC.js → index-BhwBH5ct.js} +2 -2
  284. data/web/dist/assets/{index-6MZkmh3k.js → index-Bq5AdwEt.js} +2 -2
  285. data/web/dist/assets/{index-B5CKJPm-.js → index-CAW6ClM2.js} +2 -2
  286. data/web/dist/assets/index-Cp86u27u.css +1 -0
  287. data/web/dist/assets/{index-CnvkZu5Y.js → index-Culm4pMO.js} +2 -2
  288. data/web/dist/assets/{index-IqD8mBos.js → index-DElDJfp1.js} +2 -2
  289. data/web/dist/assets/{index-C3zc4gFe.js → index-Dja7osNW.js} +2 -2
  290. data/web/dist/assets/{index-C2jwoWVV.js → index-DjhU3FzU.js} +2 -2
  291. data/web/dist/assets/{index-pvJi-JJO.js → index-Dutbxj4o.js} +2 -2
  292. data/web/dist/assets/{index-BF6QYroq.js → index-RkDhPMDt.js} +2 -2
  293. data/web/dist/assets/{index-DbueqOK5.js → index-_mptZjlC.js} +2 -2
  294. data/web/dist/index.html +2 -2
  295. data/web/src/api/fixtures/board.json +203 -28
  296. metadata +1053 -889
  297. data/bin/factory-e2e +0 -157
  298. data/bin/plan-number +0 -164
  299. data/bin/setup +0 -26
  300. data/evals/cases/palpatine-planner/plan-deep/fail/plan/plan.md +0 -8
  301. data/evals/cases/palpatine-planner/plan-fast/fail/plan/plan.md +0 -12
  302. data/web/dist/assets/index-BYJCWlk0.js +0 -198
  303. data/web/dist/assets/index-CjInBi5X.css +0 -1
  304. /data/evals/cases/{palpatine-planner → luthen-rael-planner}/plan-deep/fail/plan/plan-backend.md +0 -0
  305. /data/evals/cases/{palpatine-planner → luthen-rael-planner}/plan-deep/fail/plan/spec.md +0 -0
  306. /data/evals/cases/{palpatine-planner → luthen-rael-planner}/plan-deep/fail/run.json +0 -0
  307. /data/evals/cases/{palpatine-planner → luthen-rael-planner}/plan-deep/pass/plan/plan-backend.md +0 -0
  308. /data/evals/cases/{palpatine-planner → luthen-rael-planner}/plan-deep/pass/plan/plan-frontend.md +0 -0
  309. /data/evals/cases/{palpatine-planner → luthen-rael-planner}/plan-deep/pass/plan/spec.md +0 -0
  310. /data/evals/cases/{palpatine-planner → luthen-rael-planner}/plan-deep/pass/run.json +0 -0
  311. /data/evals/cases/{palpatine-planner → luthen-rael-planner}/plan-fast/fail/plan/plan-backend.md +0 -0
  312. /data/evals/cases/{palpatine-planner → luthen-rael-planner}/plan-fast/fail/plan/plan-frontend.md +0 -0
  313. /data/evals/cases/{palpatine-planner → luthen-rael-planner}/plan-fast/fail/plan/spec.md +0 -0
  314. /data/evals/cases/{palpatine-planner → luthen-rael-planner}/plan-fast/fail/run.json +0 -0
  315. /data/evals/cases/{palpatine-planner → luthen-rael-planner}/plan-fast/pass/plan/plan-backend.md +0 -0
  316. /data/evals/cases/{palpatine-planner → luthen-rael-planner}/plan-fast/pass/plan/plan-frontend.md +0 -0
  317. /data/evals/cases/{palpatine-planner → luthen-rael-planner}/plan-fast/pass/plan/spec.md +0 -0
  318. /data/evals/cases/{palpatine-planner → luthen-rael-planner}/plan-fast/pass/run.json +0 -0
  319. /data/exe/{depot → ol} +0 -0
@@ -20,7 +20,8 @@
20
20
  "up": 2816200,
21
21
  "down": 202400,
22
22
  "cost": 14.8,
23
- "agents_working": 4
23
+ "agents_working": 4,
24
+ "jobs": 4
24
25
  },
25
26
  "stations": [
26
27
  {
@@ -41,7 +42,7 @@
41
42
  "key": "ready_for_planning",
42
43
  "label": "Planning",
43
44
  "agents": [
44
- "palpatine-planner"
45
+ "luthen-rael-planner"
45
46
  ]
46
47
  },
47
48
  {
@@ -78,10 +79,12 @@
78
79
  "ordinal": "001.00",
79
80
  "title": "Clean agent boundaries and transitions",
80
81
  "slug": "clean-agent-boundaries",
82
+ "summary": "The first paragraph of this plan's spec.md.",
81
83
  "status": {
82
84
  "key": "blocked",
83
85
  "emoji": "⭕️",
84
- "label": "Technical Block"
86
+ "label": "Technical Block",
87
+ "note": "what Technical Block means"
85
88
  },
86
89
  "lane": "full",
87
90
  "station": "building",
@@ -112,7 +115,8 @@
112
115
  "elapsed": 229,
113
116
  "remaining": 971,
114
117
  "held": false,
115
- "next_model": null
118
+ "next_model": null,
119
+ "subagents": []
116
120
  },
117
121
  {
118
122
  "key": "001.00/rey-frontend",
@@ -135,34 +139,46 @@
135
139
  "elapsed": 229,
136
140
  "remaining": 971,
137
141
  "held": false,
138
- "next_model": null
142
+ "next_model": null,
143
+ "subagents": [
144
+ "Explore",
145
+ "general-purpose"
146
+ ]
139
147
  }
140
148
  ],
141
149
  "pr": null,
150
+ "finished": null,
142
151
  "questions": [
143
152
  {
144
153
  "id": "001.00/B1",
145
154
  "number": 1,
155
+ "kind": "block",
146
156
  "heading": "B1 Redis key layout",
147
157
  "body": "Should Redis keys carry the checkout path, or the remote URL plus the worktree name?",
148
158
  "agent": "luke-backend",
149
159
  "owner": "technical",
150
- "answers": null,
160
+ "options": null,
151
161
  "held": false,
152
162
  "asked_at": "2026-10-13T09:00:00Z"
153
163
  }
154
164
  ],
155
165
  "interrupted": null,
156
- "claimed_by": "3f9a0c7be21d44a8f6031c5d"
166
+ "claimed_by": "3f9a0c7be21d44a8f6031c5d",
167
+ "unacked": 0,
168
+ "mail": [],
169
+ "last_known": [],
170
+ "locked": null
157
171
  },
158
172
  {
159
173
  "ordinal": "005.00",
160
174
  "title": "Review state labels",
161
175
  "slug": "review-state-labels",
176
+ "summary": "The first paragraph of this plan's spec.md.",
162
177
  "status": {
163
178
  "key": "in_review",
164
179
  "emoji": "👀",
165
- "label": "In Review"
180
+ "label": "In Review",
181
+ "note": "what In Review means"
166
182
  },
167
183
  "lane": "plan",
168
184
  "station": "in_review",
@@ -193,7 +209,8 @@
193
209
  "elapsed": 229,
194
210
  "remaining": 971,
195
211
  "held": false,
196
- "next_model": null
212
+ "next_model": null,
213
+ "subagents": []
197
214
  }
198
215
  ],
199
216
  "pr": {
@@ -203,18 +220,25 @@
203
220
  "ci": "pending",
204
221
  "merged_at": null
205
222
  },
223
+ "finished": null,
206
224
  "questions": [],
207
225
  "interrupted": null,
208
- "claimed_by": "3f9a0c7be21d44a8f6031c5d"
226
+ "claimed_by": "3f9a0c7be21d44a8f6031c5d",
227
+ "unacked": 0,
228
+ "mail": [],
229
+ "last_known": [],
230
+ "locked": null
209
231
  },
210
232
  {
211
233
  "ordinal": "006.00",
212
234
  "title": "Rename the trace directory",
213
235
  "slug": "rename-trace-directory",
236
+ "summary": "The first paragraph of this plan's spec.md.",
214
237
  "status": {
215
238
  "key": "building",
216
239
  "emoji": "🟡",
217
- "label": "Building"
240
+ "label": "Building",
241
+ "note": "what Building means"
218
242
  },
219
243
  "lane": "quick",
220
244
  "station": "building",
@@ -245,28 +269,162 @@
245
269
  "elapsed": 229,
246
270
  "remaining": 971,
247
271
  "held": false,
248
- "next_model": null
272
+ "next_model": null,
273
+ "subagents": []
249
274
  }
250
275
  ],
251
276
  "pr": null,
277
+ "finished": null,
252
278
  "questions": [
253
279
  {
254
280
  "id": "006.00/B1",
255
281
  "number": 1,
282
+ "kind": "block",
256
283
  "heading": "B1 Rebase",
257
284
  "body": "The PR has a merge conflict in lib/openlanes/cli.rb. Should I rebase onto main?",
258
285
  "agent": "r2d2-mechanic",
259
286
  "owner": "technical",
260
- "answers": [
261
- "yes",
262
- "no"
287
+ "options": [
288
+ {
289
+ "letter": "a",
290
+ "label": "yes",
291
+ "recommended": false,
292
+ "answer": "yes"
293
+ },
294
+ {
295
+ "letter": "b",
296
+ "label": "no",
297
+ "recommended": false,
298
+ "answer": "no"
299
+ }
263
300
  ],
264
301
  "held": false,
265
302
  "asked_at": "2026-10-13T09:00:00Z"
266
303
  }
267
304
  ],
268
305
  "interrupted": null,
269
- "claimed_by": "3f9a0c7be21d44a8f6031c5d"
306
+ "claimed_by": "3f9a0c7be21d44a8f6031c5d",
307
+ "unacked": 0,
308
+ "mail": [],
309
+ "last_known": [],
310
+ "locked": null
311
+ },
312
+ {
313
+ "ordinal": "002.00",
314
+ "title": "Fixture without a car",
315
+ "slug": "fixture-without-a-car",
316
+ "summary": "The first paragraph of this plan's spec.md.",
317
+ "status": {
318
+ "key": "blocked",
319
+ "emoji": "⭕️",
320
+ "label": "Technical Block",
321
+ "note": "what Technical Block means"
322
+ },
323
+ "lane": "full",
324
+ "station": "building",
325
+ "up": 0,
326
+ "down": 0,
327
+ "cost": 0,
328
+ "started_at": "2026-10-13T09:00:00Z",
329
+ "elapsed": 0,
330
+ "cars": [],
331
+ "pr": null,
332
+ "finished": null,
333
+ "questions": [
334
+ {
335
+ "id": "002.00/B1",
336
+ "number": 1,
337
+ "heading": "B1 Which fixture shape",
338
+ "body": "Which shape should the fixture take?",
339
+ "agent": "rey-frontend",
340
+ "owner": "technical",
341
+ "options": null,
342
+ "held": false,
343
+ "asked_at": "2026-10-13T09:00:00Z"
344
+ }
345
+ ],
346
+ "interrupted": null,
347
+ "claimed_by": "3f9a0c7be21d44a8f6031c5d",
348
+ "unacked": 0,
349
+ "mail": [],
350
+ "last_known": [],
351
+ "locked": null
352
+ },
353
+ {
354
+ "ordinal": "007.00",
355
+ "title": "Retry flaky webhooks",
356
+ "slug": "retry-flaky-webhooks",
357
+ "summary": "The first paragraph of this plan's spec.md.",
358
+ "status": {
359
+ "key": "in_review",
360
+ "emoji": "👀",
361
+ "label": "In Review",
362
+ "note": "what In Review means"
363
+ },
364
+ "lane": "quick",
365
+ "station": "pr",
366
+ "up": 1090000,
367
+ "down": 78800,
368
+ "cost": 4.2,
369
+ "started_at": "2026-10-13T09:00:00Z",
370
+ "elapsed": 5880,
371
+ "cars": [],
372
+ "pr": {
373
+ "number": 47,
374
+ "url": "https://github.com/kigster/openlanes/pull/47",
375
+ "state": "approved",
376
+ "ci": "passing",
377
+ "merged_at": null
378
+ },
379
+ "finished": {
380
+ "kind": "approved",
381
+ "at": "2026-10-13T09:20:00Z"
382
+ },
383
+ "questions": [],
384
+ "interrupted": null,
385
+ "claimed_by": "3f9a0c7be21d44a8f6031c5d",
386
+ "unacked": 0,
387
+ "mail": [],
388
+ "last_known": [],
389
+ "locked": null
390
+ },
391
+ {
392
+ "ordinal": "008.00",
393
+ "title": "Trim the run log",
394
+ "slug": "trim-the-run-log",
395
+ "summary": "The first paragraph of this plan's spec.md.",
396
+ "status": {
397
+ "key": "approved",
398
+ "emoji": "✅",
399
+ "label": "Approved & Merged",
400
+ "note": "what Approved & Merged means"
401
+ },
402
+ "lane": "quick",
403
+ "station": "pr",
404
+ "up": 1090000,
405
+ "down": 78800,
406
+ "cost": 4.2,
407
+ "started_at": "2026-10-13T09:00:00Z",
408
+ "elapsed": 5880,
409
+ "cars": [],
410
+ "pr": {
411
+ "number": 45,
412
+ "url": "https://github.com/kigster/openlanes/pull/45",
413
+ "state": "merged",
414
+ "ci": "passing",
415
+ "merged_at": "2026-10-13T09:10:00Z"
416
+ },
417
+ "finished": {
418
+ "kind": "merged",
419
+ "at": "2026-10-13T09:10:00Z"
420
+ },
421
+ "questions": [],
422
+ "interrupted": null,
423
+ "claimed_by": "3f9a0c7be21d44a8f6031c5d",
424
+ "unacked": 0,
425
+ "mail": [],
426
+ "last_known": [],
427
+ "locked": null
270
428
  }
271
429
  ],
272
430
  "backlog": [
@@ -276,7 +434,8 @@
276
434
  "status": {
277
435
  "key": "new",
278
436
  "emoji": "⚪️",
279
- "label": "New"
437
+ "label": "New",
438
+ "note": "what New means"
280
439
  },
281
440
  "lane": "full"
282
441
  },
@@ -286,7 +445,8 @@
286
445
  "status": {
287
446
  "key": "product_blocked",
288
447
  "emoji": "🅱️",
289
- "label": "Product Block"
448
+ "label": "Product Block",
449
+ "note": "what Product Block means"
290
450
  },
291
451
  "lane": "plan"
292
452
  }
@@ -317,6 +477,7 @@
317
477
  }
318
478
  }
319
479
  ],
480
+ "bombs": [],
320
481
  "autocompact": 0.4,
321
482
  "log": [
322
483
  {
@@ -326,7 +487,8 @@
326
487
  "text": "started luke-backend on 001.00",
327
488
  "plan": "001.00"
328
489
  }
329
- ]
490
+ ],
491
+ "redis_url": "redis://localhost:6379/0"
330
492
  },
331
493
  "others": [
332
494
  {
@@ -350,7 +512,8 @@
350
512
  "up": 2816200,
351
513
  "down": 202400,
352
514
  "cost": 14.8,
353
- "agents_working": 4
515
+ "agents_working": 4,
516
+ "jobs": 4
354
517
  },
355
518
  "stations": [
356
519
  {
@@ -371,7 +534,7 @@
371
534
  "key": "ready_for_planning",
372
535
  "label": "Planning",
373
536
  "agents": [
374
- "palpatine-planner"
537
+ "luthen-rael-planner"
375
538
  ]
376
539
  },
377
540
  {
@@ -408,10 +571,12 @@
408
571
  "ordinal": "010.00",
409
572
  "title": "Cache agent registry lookups",
410
573
  "slug": "review-state-labels",
574
+ "summary": "The first paragraph of this plan's spec.md.",
411
575
  "status": {
412
576
  "key": "in_review",
413
577
  "emoji": "👀",
414
- "label": "In Review"
578
+ "label": "In Review",
579
+ "note": "what In Review means"
415
580
  },
416
581
  "lane": "plan",
417
582
  "station": "in_review",
@@ -442,7 +607,8 @@
442
607
  "elapsed": 229,
443
608
  "remaining": 971,
444
609
  "held": false,
445
- "next_model": null
610
+ "next_model": null,
611
+ "subagents": []
446
612
  }
447
613
  ],
448
614
  "pr": {
@@ -452,9 +618,14 @@
452
618
  "ci": "pending",
453
619
  "merged_at": null
454
620
  },
621
+ "finished": null,
455
622
  "questions": [],
456
623
  "interrupted": null,
457
- "claimed_by": "c07d5e1a99b2f3046e8a1d7b"
624
+ "claimed_by": "c07d5e1a99b2f3046e8a1d7b",
625
+ "unacked": 0,
626
+ "mail": [],
627
+ "last_known": [],
628
+ "locked": null
458
629
  }
459
630
  ],
460
631
  "backlog": [
@@ -464,7 +635,8 @@
464
635
  "status": {
465
636
  "key": "new",
466
637
  "emoji": "⚪️",
467
- "label": "New"
638
+ "label": "New",
639
+ "note": "what New means"
468
640
  },
469
641
  "lane": "full"
470
642
  },
@@ -474,7 +646,8 @@
474
646
  "status": {
475
647
  "key": "product_blocked",
476
648
  "emoji": "🅱️",
477
- "label": "Product Block"
649
+ "label": "Product Block",
650
+ "note": "what Product Block means"
478
651
  },
479
652
  "lane": "plan"
480
653
  }
@@ -505,8 +678,10 @@
505
678
  }
506
679
  }
507
680
  ],
681
+ "bombs": [],
508
682
  "autocompact": 0.4,
509
- "log": []
683
+ "log": [],
684
+ "redis_url": "redis://localhost:6379/0"
510
685
  }
511
686
  ]
512
- }
687
+ }