lastlight 0.15.0 → 0.16.1

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 (382) hide show
  1. package/README.md +71 -692
  2. package/dist/cli-config.js.map +1 -0
  3. package/dist/cli-format.js.map +1 -0
  4. package/dist/{cli/cli-server.d.ts → cli-server.d.ts} +26 -1
  5. package/dist/{cli/cli-server.js → cli-server.js} +40 -5
  6. package/dist/cli-server.js.map +1 -0
  7. package/dist/cli-timeline.js.map +1 -0
  8. package/dist/{cli/cli.js → cli.js} +4 -3
  9. package/dist/cli.js.map +1 -0
  10. package/dist/{cli/fork-cli.d.ts → fork-cli.d.ts} +3 -3
  11. package/dist/{cli/fork-cli.js → fork-cli.js} +28 -27
  12. package/dist/fork-cli.js.map +1 -0
  13. package/dist/{cli/oauth-cli.js → oauth-cli.js} +1 -1
  14. package/dist/oauth-cli.js.map +1 -0
  15. package/dist/{cli/setup.js → setup.js} +10 -4
  16. package/dist/setup.js.map +1 -0
  17. package/dist/{cli/skills-install.d.ts → skills-install.d.ts} +6 -0
  18. package/dist/{cli/skills-install.js → skills-install.js} +6 -2
  19. package/dist/skills-install.js.map +1 -0
  20. package/package.json +20 -65
  21. package/plugins/lastlight/.claude-plugin/plugin.json +1 -1
  22. package/agent-context/rules.md +0 -80
  23. package/agent-context/security.md +0 -69
  24. package/agent-context/soul.md +0 -21
  25. package/config/default.yaml +0 -119
  26. package/deploy/.env.production.example +0 -100
  27. package/deploy/entrypoint.sh +0 -82
  28. package/deploy/native/README.md +0 -160
  29. package/deploy/native/install.sh +0 -110
  30. package/deploy/native/lastlight.env.example +0 -95
  31. package/deploy/native/lastlight.service +0 -50
  32. package/deploy/sandbox-entrypoint.sh +0 -93
  33. package/dist/admin/auth.d.ts +0 -51
  34. package/dist/admin/auth.js +0 -121
  35. package/dist/admin/auth.js.map +0 -1
  36. package/dist/admin/chat-session-reader.d.ts +0 -39
  37. package/dist/admin/chat-session-reader.js +0 -84
  38. package/dist/admin/chat-session-reader.js.map +0 -1
  39. package/dist/admin/docker.d.ts +0 -61
  40. package/dist/admin/docker.js +0 -187
  41. package/dist/admin/docker.js.map +0 -1
  42. package/dist/admin/index.d.ts +0 -9
  43. package/dist/admin/index.js +0 -59
  44. package/dist/admin/index.js.map +0 -1
  45. package/dist/admin/routes.d.ts +0 -81
  46. package/dist/admin/routes.js +0 -1381
  47. package/dist/admin/routes.js.map +0 -1
  48. package/dist/admin/sessions.d.ts +0 -89
  49. package/dist/admin/sessions.js +0 -204
  50. package/dist/admin/sessions.js.map +0 -1
  51. package/dist/admin/tail.d.ts +0 -12
  52. package/dist/admin/tail.js +0 -145
  53. package/dist/admin/tail.js.map +0 -1
  54. package/dist/admin/version.d.ts +0 -22
  55. package/dist/admin/version.js +0 -92
  56. package/dist/admin/version.js.map +0 -1
  57. package/dist/cli/cli-config.js.map +0 -1
  58. package/dist/cli/cli-format.js.map +0 -1
  59. package/dist/cli/cli-server.js.map +0 -1
  60. package/dist/cli/cli-timeline.js.map +0 -1
  61. package/dist/cli/cli.js.map +0 -1
  62. package/dist/cli/fork-cli.js.map +0 -1
  63. package/dist/cli/oauth-cli.js.map +0 -1
  64. package/dist/cli/setup.js.map +0 -1
  65. package/dist/cli/skills-install.js.map +0 -1
  66. package/dist/config/config-resolve.d.ts +0 -28
  67. package/dist/config/config-resolve.js +0 -47
  68. package/dist/config/config-resolve.js.map +0 -1
  69. package/dist/config/config.d.ts +0 -157
  70. package/dist/config/config.js +0 -581
  71. package/dist/config/config.js.map +0 -1
  72. package/dist/config/core-pin.d.ts +0 -16
  73. package/dist/config/core-pin.js +0 -85
  74. package/dist/config/core-pin.js.map +0 -1
  75. package/dist/config/overlay-assets.d.ts +0 -20
  76. package/dist/config/overlay-assets.js +0 -114
  77. package/dist/config/overlay-assets.js.map +0 -1
  78. package/dist/config/overlay-bootstrap.d.ts +0 -44
  79. package/dist/config/overlay-bootstrap.js +0 -304
  80. package/dist/config/overlay-bootstrap.js.map +0 -1
  81. package/dist/connectors/github-webhook.d.ts +0 -45
  82. package/dist/connectors/github-webhook.js +0 -321
  83. package/dist/connectors/github-webhook.js.map +0 -1
  84. package/dist/connectors/index.d.ts +0 -18
  85. package/dist/connectors/index.js +0 -41
  86. package/dist/connectors/index.js.map +0 -1
  87. package/dist/connectors/messaging/base.d.ts +0 -42
  88. package/dist/connectors/messaging/base.js +0 -139
  89. package/dist/connectors/messaging/base.js.map +0 -1
  90. package/dist/connectors/messaging/delivery.d.ts +0 -14
  91. package/dist/connectors/messaging/delivery.js +0 -38
  92. package/dist/connectors/messaging/delivery.js.map +0 -1
  93. package/dist/connectors/messaging/index.d.ts +0 -4
  94. package/dist/connectors/messaging/index.js +0 -4
  95. package/dist/connectors/messaging/index.js.map +0 -1
  96. package/dist/connectors/messaging/session-manager.d.ts +0 -53
  97. package/dist/connectors/messaging/session-manager.js +0 -255
  98. package/dist/connectors/messaging/session-manager.js.map +0 -1
  99. package/dist/connectors/messaging/types.d.ts +0 -58
  100. package/dist/connectors/messaging/types.js +0 -7
  101. package/dist/connectors/messaging/types.js.map +0 -1
  102. package/dist/connectors/slack/connector.d.ts +0 -100
  103. package/dist/connectors/slack/connector.js +0 -341
  104. package/dist/connectors/slack/connector.js.map +0 -1
  105. package/dist/connectors/slack/index.d.ts +0 -2
  106. package/dist/connectors/slack/index.js +0 -3
  107. package/dist/connectors/slack/index.js.map +0 -1
  108. package/dist/connectors/slack/mrkdwn.d.ts +0 -8
  109. package/dist/connectors/slack/mrkdwn.js +0 -123
  110. package/dist/connectors/slack/mrkdwn.js.map +0 -1
  111. package/dist/connectors/types.d.ts +0 -61
  112. package/dist/connectors/types.js +0 -2
  113. package/dist/connectors/types.js.map +0 -1
  114. package/dist/cron/fanout.d.ts +0 -33
  115. package/dist/cron/fanout.js +0 -55
  116. package/dist/cron/fanout.js.map +0 -1
  117. package/dist/cron/jobs.d.ts +0 -18
  118. package/dist/cron/jobs.js +0 -37
  119. package/dist/cron/jobs.js.map +0 -1
  120. package/dist/cron/scheduler.d.ts +0 -45
  121. package/dist/cron/scheduler.js +0 -105
  122. package/dist/cron/scheduler.js.map +0 -1
  123. package/dist/engine/agent-executor.d.ts +0 -34
  124. package/dist/engine/agent-executor.js +0 -246
  125. package/dist/engine/agent-executor.js.map +0 -1
  126. package/dist/engine/chat/chat-runner.d.ts +0 -132
  127. package/dist/engine/chat/chat-runner.js +0 -424
  128. package/dist/engine/chat/chat-runner.js.map +0 -1
  129. package/dist/engine/chat/chat-skills.d.ts +0 -45
  130. package/dist/engine/chat/chat-skills.js +0 -184
  131. package/dist/engine/chat/chat-skills.js.map +0 -1
  132. package/dist/engine/chat/chat.d.ts +0 -54
  133. package/dist/engine/chat/chat.js +0 -316
  134. package/dist/engine/chat/chat.js.map +0 -1
  135. package/dist/engine/chat/message-batcher.d.ts +0 -32
  136. package/dist/engine/chat/message-batcher.js +0 -109
  137. package/dist/engine/chat/message-batcher.js.map +0 -1
  138. package/dist/engine/dispatcher.d.ts +0 -73
  139. package/dist/engine/dispatcher.js +0 -663
  140. package/dist/engine/dispatcher.js.map +0 -1
  141. package/dist/engine/event-shim.d.ts +0 -117
  142. package/dist/engine/event-shim.js +0 -435
  143. package/dist/engine/event-shim.js.map +0 -1
  144. package/dist/engine/executors/orchestrator.d.ts +0 -81
  145. package/dist/engine/executors/orchestrator.js +0 -365
  146. package/dist/engine/executors/orchestrator.js.map +0 -1
  147. package/dist/engine/executors/shared.d.ts +0 -189
  148. package/dist/engine/executors/shared.js +0 -616
  149. package/dist/engine/executors/shared.js.map +0 -1
  150. package/dist/engine/github/git-auth.d.ts +0 -62
  151. package/dist/engine/github/git-auth.js +0 -161
  152. package/dist/engine/github/git-auth.js.map +0 -1
  153. package/dist/engine/github/github-app-client.d.ts +0 -23
  154. package/dist/engine/github/github-app-client.js +0 -33
  155. package/dist/engine/github/github-app-client.js.map +0 -1
  156. package/dist/engine/github/github-tools.d.ts +0 -18
  157. package/dist/engine/github/github-tools.js +0 -263
  158. package/dist/engine/github/github-tools.js.map +0 -1
  159. package/dist/engine/github/github.d.ts +0 -1193
  160. package/dist/engine/github/github.js +0 -357
  161. package/dist/engine/github/github.js.map +0 -1
  162. package/dist/engine/github/profiles.d.ts +0 -279
  163. package/dist/engine/github/profiles.js +0 -42
  164. package/dist/engine/github/profiles.js.map +0 -1
  165. package/dist/engine/github/review-poster.d.ts +0 -98
  166. package/dist/engine/github/review-poster.js +0 -177
  167. package/dist/engine/github/review-poster.js.map +0 -1
  168. package/dist/engine/llm.d.ts +0 -79
  169. package/dist/engine/llm.js +0 -269
  170. package/dist/engine/llm.js.map +0 -1
  171. package/dist/engine/oauth.d.ts +0 -43
  172. package/dist/engine/oauth.js +0 -103
  173. package/dist/engine/oauth.js.map +0 -1
  174. package/dist/engine/router.d.ts +0 -29
  175. package/dist/engine/router.js +0 -680
  176. package/dist/engine/router.js.map +0 -1
  177. package/dist/engine/screen/classifier.d.ts +0 -93
  178. package/dist/engine/screen/classifier.js +0 -215
  179. package/dist/engine/screen/classifier.js.map +0 -1
  180. package/dist/engine/screen/screen.d.ts +0 -41
  181. package/dist/engine/screen/screen.js +0 -93
  182. package/dist/engine/screen/screen.js.map +0 -1
  183. package/dist/evals-api.d.ts +0 -24
  184. package/dist/evals-api.js +0 -22
  185. package/dist/evals-api.js.map +0 -1
  186. package/dist/index.d.ts +0 -1
  187. package/dist/index.js +0 -923
  188. package/dist/index.js.map +0 -1
  189. package/dist/managed-repos.d.ts +0 -30
  190. package/dist/managed-repos.js +0 -72
  191. package/dist/managed-repos.js.map +0 -1
  192. package/dist/notify/index.d.ts +0 -15
  193. package/dist/notify/index.js +0 -6
  194. package/dist/notify/index.js.map +0 -1
  195. package/dist/notify/model.d.ts +0 -57
  196. package/dist/notify/model.js +0 -89
  197. package/dist/notify/model.js.map +0 -1
  198. package/dist/notify/notifier.d.ts +0 -17
  199. package/dist/notify/notifier.js +0 -87
  200. package/dist/notify/notifier.js.map +0 -1
  201. package/dist/notify/render.d.ts +0 -21
  202. package/dist/notify/render.js +0 -59
  203. package/dist/notify/render.js.map +0 -1
  204. package/dist/notify/transports/github.d.ts +0 -26
  205. package/dist/notify/transports/github.js +0 -26
  206. package/dist/notify/transports/github.js.map +0 -1
  207. package/dist/notify/transports/slack.d.ts +0 -26
  208. package/dist/notify/transports/slack.js +0 -28
  209. package/dist/notify/transports/slack.js.map +0 -1
  210. package/dist/notify/types.d.ts +0 -95
  211. package/dist/notify/types.js +0 -16
  212. package/dist/notify/types.js.map +0 -1
  213. package/dist/providers.d.ts +0 -125
  214. package/dist/providers.js +0 -279
  215. package/dist/providers.js.map +0 -1
  216. package/dist/sandbox/docker.d.ts +0 -180
  217. package/dist/sandbox/docker.js +0 -517
  218. package/dist/sandbox/docker.js.map +0 -1
  219. package/dist/sandbox/egress-allowlist.d.ts +0 -74
  220. package/dist/sandbox/egress-allowlist.js +0 -164
  221. package/dist/sandbox/egress-allowlist.js.map +0 -1
  222. package/dist/sandbox/egress-firewall-config.d.ts +0 -127
  223. package/dist/sandbox/egress-firewall-config.js +0 -434
  224. package/dist/sandbox/egress-firewall-config.js.map +0 -1
  225. package/dist/sandbox/images.d.ts +0 -23
  226. package/dist/sandbox/images.js +0 -55
  227. package/dist/sandbox/images.js.map +0 -1
  228. package/dist/sandbox/index.d.ts +0 -112
  229. package/dist/sandbox/index.js +0 -332
  230. package/dist/sandbox/index.js.map +0 -1
  231. package/dist/sandbox/sandbox.d.ts +0 -214
  232. package/dist/sandbox/sandbox.js +0 -453
  233. package/dist/sandbox/sandbox.js.map +0 -1
  234. package/dist/sandbox/smol.d.ts +0 -162
  235. package/dist/sandbox/smol.js +0 -485
  236. package/dist/sandbox/smol.js.map +0 -1
  237. package/dist/session-log.d.ts +0 -63
  238. package/dist/session-log.js +0 -290
  239. package/dist/session-log.js.map +0 -1
  240. package/dist/state/approval-store.d.ts +0 -88
  241. package/dist/state/approval-store.js +0 -149
  242. package/dist/state/approval-store.js.map +0 -1
  243. package/dist/state/build-assets.d.ts +0 -50
  244. package/dist/state/build-assets.js +0 -154
  245. package/dist/state/build-assets.js.map +0 -1
  246. package/dist/state/db.d.ts +0 -81
  247. package/dist/state/db.js +0 -155
  248. package/dist/state/db.js.map +0 -1
  249. package/dist/state/execution-store.d.ts +0 -257
  250. package/dist/state/execution-store.js +0 -527
  251. package/dist/state/execution-store.js.map +0 -1
  252. package/dist/state/migrate.d.ts +0 -15
  253. package/dist/state/migrate.js +0 -175
  254. package/dist/state/migrate.js.map +0 -1
  255. package/dist/state/workflow-run-store.d.ts +0 -216
  256. package/dist/state/workflow-run-store.js +0 -403
  257. package/dist/state/workflow-run-store.js.map +0 -1
  258. package/dist/telemetry/index.d.ts +0 -38
  259. package/dist/telemetry/index.js +0 -253
  260. package/dist/telemetry/index.js.map +0 -1
  261. package/dist/telemetry/pi-events.d.ts +0 -12
  262. package/dist/telemetry/pi-events.js +0 -134
  263. package/dist/telemetry/pi-events.js.map +0 -1
  264. package/dist/workflows/dag.d.ts +0 -37
  265. package/dist/workflows/dag.js +0 -118
  266. package/dist/workflows/dag.js.map +0 -1
  267. package/dist/workflows/loader.d.ts +0 -53
  268. package/dist/workflows/loader.js +0 -421
  269. package/dist/workflows/loader.js.map +0 -1
  270. package/dist/workflows/loop-eval.d.ts +0 -28
  271. package/dist/workflows/loop-eval.js +0 -74
  272. package/dist/workflows/loop-eval.js.map +0 -1
  273. package/dist/workflows/phase-executor.d.ts +0 -215
  274. package/dist/workflows/phase-executor.js +0 -1144
  275. package/dist/workflows/phase-executor.js.map +0 -1
  276. package/dist/workflows/phase-ref.d.ts +0 -50
  277. package/dist/workflows/phase-ref.js +0 -91
  278. package/dist/workflows/phase-ref.js.map +0 -1
  279. package/dist/workflows/resume.d.ts +0 -58
  280. package/dist/workflows/resume.js +0 -313
  281. package/dist/workflows/resume.js.map +0 -1
  282. package/dist/workflows/runner.d.ts +0 -63
  283. package/dist/workflows/runner.js +0 -364
  284. package/dist/workflows/runner.js.map +0 -1
  285. package/dist/workflows/schema.d.ts +0 -344
  286. package/dist/workflows/schema.js +0 -460
  287. package/dist/workflows/schema.js.map +0 -1
  288. package/dist/workflows/simple.d.ts +0 -90
  289. package/dist/workflows/simple.js +0 -393
  290. package/dist/workflows/simple.js.map +0 -1
  291. package/dist/workflows/target-policy.d.ts +0 -74
  292. package/dist/workflows/target-policy.js +0 -80
  293. package/dist/workflows/target-policy.js.map +0 -1
  294. package/dist/workflows/templates.d.ts +0 -88
  295. package/dist/workflows/templates.js +0 -127
  296. package/dist/workflows/templates.js.map +0 -1
  297. package/dist/workflows/triggers.d.ts +0 -21
  298. package/dist/workflows/triggers.js +0 -45
  299. package/dist/workflows/triggers.js.map +0 -1
  300. package/dist/workflows/verdict.d.ts +0 -19
  301. package/dist/workflows/verdict.js +0 -30
  302. package/dist/workflows/verdict.js.map +0 -1
  303. package/dist/worktree/manager.d.ts +0 -43
  304. package/dist/worktree/manager.js +0 -127
  305. package/dist/worktree/manager.js.map +0 -1
  306. package/docker-compose.yml +0 -274
  307. package/sandbox.Dockerfile +0 -68
  308. package/skills/README.md +0 -42
  309. package/skills/browser-qa/SKILL.md +0 -208
  310. package/skills/browser-qa/scripts/agent-browser.mjs +0 -531
  311. package/skills/building/SKILL.md +0 -95
  312. package/skills/chat/SKILL.md +0 -36
  313. package/skills/code-review/SKILL.md +0 -82
  314. package/skills/debug-production/SKILL.md +0 -108
  315. package/skills/demo/SKILL.md +0 -228
  316. package/skills/demo/scripts/compose-demo.sh +0 -243
  317. package/skills/issue-answer/SKILL.md +0 -91
  318. package/skills/issue-comment/SKILL.md +0 -49
  319. package/skills/issue-triage/SKILL.md +0 -149
  320. package/skills/issue-triage/references/AGENT-BRIEF.md +0 -65
  321. package/skills/pr-comment/SKILL.md +0 -64
  322. package/skills/pr-review/SKILL.md +0 -148
  323. package/skills/pr-review/references/findings-schema.md +0 -89
  324. package/skills/qa-test/SKILL.md +0 -97
  325. package/skills/repo-health/SKILL.md +0 -67
  326. package/skills/security-feedback/SKILL.md +0 -173
  327. package/skills/security-feedback/references/templates.md +0 -77
  328. package/skills/security-review/SKILL.md +0 -215
  329. package/skills/security-review/references/issue-format.md +0 -302
  330. package/skills/verify/SKILL.md +0 -118
  331. package/workflows/answer.yaml +0 -44
  332. package/workflows/build.yaml +0 -129
  333. package/workflows/cron-health.yaml +0 -6
  334. package/workflows/cron-review.yaml +0 -8
  335. package/workflows/cron-security.yaml +0 -6
  336. package/workflows/cron-triage.yaml +0 -8
  337. package/workflows/demo.yaml +0 -62
  338. package/workflows/examples/bash-smoke.yaml +0 -41
  339. package/workflows/examples/parallel-review.yaml +0 -36
  340. package/workflows/examples/tdd-loop.yaml +0 -17
  341. package/workflows/explore.yaml +0 -80
  342. package/workflows/issue-comment.yaml +0 -15
  343. package/workflows/issue-triage.yaml +0 -22
  344. package/workflows/pr-comment.yaml +0 -16
  345. package/workflows/pr-fix.yaml +0 -17
  346. package/workflows/pr-review.yaml +0 -50
  347. package/workflows/prompts/answer.md +0 -68
  348. package/workflows/prompts/architect.md +0 -44
  349. package/workflows/prompts/classifier.md +0 -60
  350. package/workflows/prompts/classify-adds-info.md +0 -17
  351. package/workflows/prompts/demo.md +0 -125
  352. package/workflows/prompts/executor.md +0 -42
  353. package/workflows/prompts/explore-ask.md +0 -99
  354. package/workflows/prompts/explore-publish.md +0 -31
  355. package/workflows/prompts/explore-read.md +0 -120
  356. package/workflows/prompts/explore-synthesize.md +0 -88
  357. package/workflows/prompts/fix.md +0 -18
  358. package/workflows/prompts/guardrails.md +0 -96
  359. package/workflows/prompts/pr-fix.md +0 -26
  360. package/workflows/prompts/pr.md +0 -39
  361. package/workflows/prompts/qa-browser.md +0 -95
  362. package/workflows/prompts/qa-synth.md +0 -44
  363. package/workflows/prompts/qa-test.md +0 -60
  364. package/workflows/prompts/re-reviewer.md +0 -33
  365. package/workflows/prompts/reviewer.md +0 -60
  366. package/workflows/prompts/verify-browser.md +0 -93
  367. package/workflows/prompts/verify-synth.md +0 -44
  368. package/workflows/prompts/verify.md +0 -63
  369. package/workflows/qa-test.yaml +0 -94
  370. package/workflows/repo-health.yaml +0 -15
  371. package/workflows/security-feedback.yaml +0 -25
  372. package/workflows/security-review.yaml +0 -37
  373. package/workflows/verify.yaml +0 -93
  374. /package/dist/{cli/cli-config.d.ts → cli-config.d.ts} +0 -0
  375. /package/dist/{cli/cli-config.js → cli-config.js} +0 -0
  376. /package/dist/{cli/cli-format.d.ts → cli-format.d.ts} +0 -0
  377. /package/dist/{cli/cli-format.js → cli-format.js} +0 -0
  378. /package/dist/{cli/cli-timeline.d.ts → cli-timeline.d.ts} +0 -0
  379. /package/dist/{cli/cli-timeline.js → cli-timeline.js} +0 -0
  380. /package/dist/{cli/cli.d.ts → cli.d.ts} +0 -0
  381. /package/dist/{cli/oauth-cli.d.ts → oauth-cli.d.ts} +0 -0
  382. /package/dist/{cli/setup.d.ts → setup.d.ts} +0 -0
@@ -1,39 +0,0 @@
1
- Create a pull request for the work on branch {{branch}}.
2
-
3
- Use the MCP tool github_create_pull_request with the following:
4
- - owner: {{owner}}
5
- - repo: {{repo}}
6
- - head: {{branch}}
7
- - base: {{baseBranch}}
8
- - title: A concise title describing the change (reference #{{issueNumber}})
9
- - body: A markdown body that includes EXACTLY these sections in order:
10
-
11
- Closes #{{issueNumber}}
12
-
13
- ## Summary
14
- (3-6 bullet points describing what changed)
15
-
16
- ## Planning and execution docs
17
- - [Guardrails report]({{artifactUrl guardrails-report.md}})
18
- - [Architect plan]({{artifactUrl architect-plan.md}})
19
- - [Executor summary]({{artifactUrl executor-summary.md}})
20
- - [Reviewer verdict]({{artifactUrl reviewer-verdict.md}})
21
- - [Status]({{artifactUrl status.md}})
22
-
23
- Before adding each link above, run `ls -1 {{issueDir}}/`
24
- and OMIT any line whose file doesn't exist on disk. Use the
25
- exact full https URLs above as written — do NOT shorten to relative paths,
26
- they will not render in the PR description.
27
-
28
- ## Test results
29
- (paste the actual test/lint/typecheck output from executor-summary.md){{#if !review.approved}}
30
-
31
- Note: There are unresolved reviewer issues after {{review.cycles}} fix cycles. See reviewer-verdict.md on the branch.{{/if}}
32
-
33
- Do NOT post a comment with the PR link — the harness adds it to the status
34
- checklist on the issue automatically. Just create the PR.
35
-
36
- Update status.md: current_phase = complete, add pr_number.
37
- {{#if !externalizeArtifacts}}git add .lastlight/ && git commit -m "status: PR created for #{{issueNumber}}" && git push origin HEAD{{/if}}{{#if externalizeArtifacts}}Do NOT git add or commit {{issueDir}}/ — the harness persists it to the Last Light server automatically.{{/if}}
38
-
39
- OUTPUT: The PR number and URL (so the harness can link the PR from the checklist).
@@ -1,95 +0,0 @@
1
- You are running the **browser-QA pass** of a qa-test run — driving the target
2
- through its flow in a **real headless browser** and capturing **screenshot
3
- evidence** for each step. A text-evidence QA run already ran and posted its
4
- per-step report; your job is to add visual proof for the steps that exercise a
5
- rendered UI. Read the `browser-qa` skill for the driver contract and the
6
- `qa-test` skill for the flow procedure and report shape, then follow them. The
7
- `building` skill installs and runs the repo.
8
-
9
- **Stay in the browser.** Do **not** read, quote, or analyse the repo's source
10
- code — the text pass already covered it. Your evidence is strictly what the
11
- browser shows: the driver's extracted text, assertion results, console errors,
12
- and the screenshots. No code walkthroughs.
13
-
14
- ## What to test
15
-
16
- {{#if commentBody}}
17
- **Target / steps / request:**
18
- {{commentBody}}
19
- {{/if}}
20
- {{#if issueTitle}}**Issue/PR title:** {{issueTitle}}{{/if}}
21
- {{#if issueBody}}
22
- **Issue/PR body:**
23
- {{issueBody}}
24
- {{/if}}
25
-
26
- Target repo: **{{owner}}/{{repo}}**
27
- {{#if issueNumber}}Target issue/PR: **#{{issueNumber}}**{{/if}}
28
-
29
- If the target is a CLI or a pure API with no UI, the text pass already covered
30
- it — keep this pass short and say no browser evidence was needed. Focus on flows
31
- that actually render a UI.
32
-
33
- ## First: confirm the browser is available
34
-
35
- Run the driver's probe before anything else:
36
-
37
- ```
38
- node <browser-qa skill dir>/scripts/agent-browser.mjs doctor
39
- ```
40
-
41
- (The `browser-qa` skill is staged into this phase's skill bundle — find its
42
- absolute path from the available-skills catalogue.) If `doctor` exits non-zero,
43
- the browser toolchain isn't present: say so plainly and stop — do not fake
44
- screenshots. This phase only runs on the docker QA image, so `doctor` should
45
- pass.
46
-
47
- ## Workspace + run the app
48
-
49
- You are already inside the **{{repo}}** repo at branch {{branch}} — the harness
50
- pre-cloned it and your cwd is the repo root (no `cd`). If this is a PR, read the
51
- diff and design a flow that exercises what changed. Follow the `building` skill
52
- to install and start the app's dev-server in the background; wait until it's
53
- listening on `localhost`.
54
-
55
- ## Drive the flow and capture evidence
56
-
57
- State the steps and their success criteria first. Author a `flow.json` (shape
58
- documented in the `browser-qa` skill), then run `agent-browser.mjs run flow.json
59
- --base-url http://localhost:<port> --out-dir {{issueDir}}`, capturing a
60
- screenshot at each decisive step. Save every screenshot under **`{{issueDir}}/`**
61
- — the harness harvests that directory. Parse the JSON report (per-step status,
62
- extracted text, assertion results, console errors) — that, not the images, is
63
- what you reason over. On a step failure continue to the next step unless it
64
- blocks everything downstream; treat console/page errors as findings.
65
-
66
- ## How your report is delivered — read carefully
67
-
68
- Your **final message is the report**, and the harness posts it for you{{#if issueNumber}} as
69
- a comment on **#{{issueNumber}}**{{/if}}{{#if !issueNumber}} back into the thread this request came from{{/if}}.
70
- Title it clearly as the **browser-QA evidence** so it reads as a supplement to
71
- the text report, not a competing one. Use the `qa-test` report shape
72
- (Environment / Results table / Issues found / Coverage). Every defined step gets
73
- a row and a result.
74
-
75
- **Keep it tight** — a one-line environment summary, the results table (one row
76
- per step, terse Evidence cell), the inline screenshots, any issues found, and a
77
- short "what was / wasn't exercised". No per-step narration or code analysis.
78
-
79
- **Embed each step's screenshot inline** in its Evidence cell so it renders in
80
- the comment.
81
- {{#if artifactBaseUrl}}Every PNG you saved to `<name>.png` is served publicly at
82
- `{{artifactBaseUrl}}/<name>.png`. Put a **raw Markdown image** in the Evidence
83
- cell — `!` then `[caption]` then the URL in parentheses — with no backticks and
84
- no code fence (inside a code span it shows as literal text instead of
85
- rendering). For example, a screenshot saved as `step-2.png` becomes: an
86
- exclamation mark, `[Step 2]`, then `({{artifactBaseUrl}}/step-2.png)` with no
87
- spaces and no backticks.{{/if}}{{#if !artifactBaseUrl}}No public URL is
88
- configured, so reference each screenshot by filename (e.g. `step-2-cart.png`)
89
- and note it's in the run's Artifacts view.{{/if}}
90
-
91
- **Do NOT post it yourself** with `github_add_issue_comment` — that would
92
- double-post. Never claim a step passed that you didn't run, and never fabricate
93
- a screenshot. If screenshots couldn't be persisted (no server-mode build
94
- assets), still report the per-step DOM/text observations and say the images
95
- weren't retained.
@@ -1,44 +0,0 @@
1
- You are writing the **single final QA report** for a qa-test run. Two passes
2
- have already run: a text-evidence QA flow and (sometimes) a browser-QA pass.
3
- Your job is to **synthesize them into one concise report** — the reader sees
4
- only your output, not the individual passes.
5
-
6
- This is a **pure writing task**. Do **not** run commands, install anything, read
7
- repo files, or start a server — everything you need is below. Do **not** post a
8
- comment yourself (`github_add_issue_comment`); your final message *is* the
9
- comment, delivered by the harness.
10
-
11
- ## What was tested
12
-
13
- {{#if commentBody}}{{commentBody}}{{/if}}{{#if issueTitle}} (issue/PR: {{issueTitle}}){{/if}}
14
-
15
- ## Text QA report
16
-
17
- {{qaResult}}
18
-
19
- {{#if qaBrowserResult}}
20
- ## Browser-QA report (real headless browser + screenshots)
21
-
22
- {{qaBrowserResult}}
23
- {{/if}}
24
-
25
- ## Write the report
26
-
27
- Produce a tight Markdown comment:
28
-
29
- - A **single results table** (`| Step | Status | Evidence |`) covering every
30
- step exercised across both passes. When the same step ran in both, prefer the
31
- browser result for rendered-UI steps and note the text result only if it adds
32
- something. Mark untested/blocked steps honestly.
33
- {{#if qaBrowserResult}}- **Embed each step's screenshot inline** in its Evidence cell exactly as it
34
- appears in the browser-QA report above (the `![caption](https://…/<name>.png)`
35
- image Markdown) so it renders in this comment. Keep them; don't turn them into
36
- plain links or drop them.{{/if}}
37
- - A short **Issues found** list (each real FAIL with expected vs observed), or
38
- "none" if clean.
39
- - A one-line **coverage** note: what was exercised, and anything notable that
40
- wasn't.
41
-
42
- Keep it short — no per-step narration outside the table, no restating both
43
- reports in full. Surface real failures plainly; never claim a step passed that
44
- neither pass actually ran.
@@ -1,60 +0,0 @@
1
- You are running a **QA test flow** — driving a target through a sequence of
2
- steps and reporting step-level pass/fail with evidence. Read the `qa-test` skill
3
- for the full procedure, then follow it. It uses the `building` skill for
4
- installing and running the repo. This prompt gives you the target/steps and how
5
- your report is delivered.
6
-
7
- ## What to test
8
-
9
- {{#if commentBody}}
10
- **Target / steps / request:**
11
- {{commentBody}}
12
- {{/if}}
13
- {{#if issueTitle}}**Issue/PR title:** {{issueTitle}}{{/if}}
14
- {{#if issueBody}}
15
- **Issue/PR body:**
16
- {{issueBody}}
17
- {{/if}}
18
-
19
- Target repo: **{{owner}}/{{repo}}**
20
- {{#if issueNumber}}Target issue/PR: **#{{issueNumber}}**{{/if}}
21
-
22
- If specific steps are given (often after `--`), use them. Otherwise, if this is a
23
- PR, read the diff and design a flow that exercises what changed. State the steps
24
- and their success criteria before running.
25
-
26
- ## Workspace
27
-
28
- You are already inside the **{{repo}}** repo at branch {{branch}} — the harness
29
- pre-cloned it and your cwd is the repo root. Git is configured; no clone, no
30
- `cd`.
31
-
32
- ## Evidence — what you can and can't drive
33
-
34
- You have **bash, file read, and the github tools** — no browser, no
35
- screenshots. QA a **CLI** directly, or a **web service** by starting its
36
- dev-server in the background and exercising it with `curl` (status codes,
37
- bodies, headers). Capture stdout/stderr and exit codes as per-step evidence.
38
-
39
- If the **whole target is a rendered UI** (the flow only makes sense in a
40
- browser), don't install/build to guess at it — a browser-QA pass runs after you
41
- and owns it. Note in one line that it's UI-shaped and deferred, and stop. For a
42
- **mixed** flow, drive the text/CLI/API steps here and mark only the
43
- rendered-UI steps **BLOCKED** (deferred to browser QA) rather than faking a
44
- result. On a step failure, continue to the next step unless it blocks
45
- everything downstream.
46
-
47
- ## How your report is delivered — read carefully
48
-
49
- Your **final message is the report**, and the harness posts it for you:
50
- {{#if issueNumber}}
51
- - as a comment on **#{{issueNumber}}**.
52
- {{/if}}
53
- {{#if !issueNumber}}
54
- - back into the thread this request came from.
55
- {{/if}}
56
-
57
- Make your final message the complete QA report in the shape the `qa-test` skill
58
- defines (Environment / Results table / Issues found / Coverage). **Do NOT post
59
- it yourself** with `github_add_issue_comment` — that would double-post. Report
60
- real failures as failures; never claim a step passed that you didn't run.
@@ -1,33 +0,0 @@
1
- You are the CODE REVIEWER — RE-REVIEW after fix cycle {{fixCycle}}.
2
-
3
- You are already inside the {{repo}} repo at branch {{branch}} — the harness
4
- pre-cloned it and your cwd is the repo root. Git is configured.
5
-
6
- This is a FOLLOW-UP review. You previously requested changes. The executor has attempted to fix them.
7
-
8
- SCOPE — review ONLY what changed in the fix cycle:
9
- 1. Read {{issueDir}}/reviewer-verdict.md — your previous issues
10
- 2. Read the "## Fix Cycle {{fixCycle}}" section in {{issueDir}}/executor-summary.md — what was fixed
11
- 3. Diff only the fix commit(s): git log --oneline -3 and git diff HEAD~1
12
-
13
- Verify your previous issues were actually addressed and the fix introduced no new
14
- problems (apply the **code-review** rubric to the fix). Do NOT re-review the
15
- entire changeset. Tests: the fix cycle already ran the full suite (see its
16
- summary section) — for independent signal, follow the **building** skill to run
17
- the typecheck command and the tests covering the fixed files.
18
-
19
- AFTER REVIEW:
20
- 1. APPEND to {{issueDir}}/reviewer-verdict.md under heading "## Re-review after Fix Cycle {{fixCycle}}" (preserve the original verdict above). The new section MUST itself contain a "VERDICT: APPROVED" or "VERDICT: REQUEST_CHANGES" line.
21
- 2. Update status.md with reviewer_status: APPROVED or REQUEST_CHANGES
22
- {{#if !externalizeArtifacts}}3. git add .lastlight/ && git commit -m "review: re-review after fix cycle {{fixCycle}} for #{{issueNumber}}" && git push origin HEAD{{/if}}{{#if externalizeArtifacts}}3. Do NOT git add or commit {{issueDir}}/ — the harness persists it to the Last Light server automatically.{{/if}}
23
-
24
- OUTPUT FORMAT — your stdout MUST start with one of these two lines, EXACTLY, on its own line, with no leading whitespace:
25
-
26
- VERDICT: APPROVED
27
- VERDICT: REQUEST_CHANGES
28
-
29
- The orchestrator parses this marker to decide whether to run another fix
30
- cycle. Do NOT use any other phrasing for the verdict on the first line.
31
-
32
- After the marker line, write a 2–5 sentence summary of which previous issues
33
- were addressed and any remaining concerns.
@@ -1,60 +0,0 @@
1
- You are the CODE REVIEWER. Independent verification — you have NO shared context with the executor.
2
-
3
- You are already inside the {{repo}} repo at branch {{branch}} — the harness
4
- pre-cloned it and your cwd is the repo root. Git is configured.
5
-
6
- SCOPE — review ONLY changed files ({{baseBranch}} is this repo's base branch):
7
- git log --oneline {{baseBranch}}..HEAD
8
- git diff {{baseBranch}}...HEAD --name-only
9
- git diff {{baseBranch}}...HEAD
10
-
11
- Read {{issueDir}}/architect-plan.md and executor-summary.md for context.
12
-
13
- Apply the **code-review** skill's rubric (finding tiers + what to check), scoped
14
- to the changed files, and confirm the implementation matches the plan. Do NOT
15
- review unchanged files or flag pre-existing issues.
16
-
17
- Tests: the executor already ran the FULL suite and pasted results in
18
- executor-summary.md — review that output rather than re-running everything. For
19
- your own independent signal, follow the **building** skill to run the typecheck
20
- command and the tests covering the changed files.
21
-
22
- AFTER REVIEW:
23
- 1. Write {{issueDir}}/reviewer-verdict.md with the following structure (exact headings):
24
-
25
- # Reviewer Verdict — Issue #{{issueNumber}}
26
-
27
- VERDICT: APPROVED ← or REQUEST_CHANGES, exactly one of these, on its own line
28
-
29
- ## Summary
30
- (1–3 sentences)
31
-
32
- ## Issues
33
- ### Critical
34
- ### Important
35
- ### Suggestions
36
- ### Nits
37
-
38
- ## Test Results
39
- (paste actual output)
40
-
41
- 2. Update status.md with reviewer_status: APPROVED or REQUEST_CHANGES (matching the verdict)
42
- {{#if !externalizeArtifacts}}3. git add .lastlight/ && git commit -m "review: verdict for #{{issueNumber}}" && git push origin HEAD{{/if}}{{#if externalizeArtifacts}}3. Do NOT git add or commit {{issueDir}}/ — the harness persists it to the Last Light server automatically.{{/if}}
43
-
44
- OUTPUT FORMAT — after you have written the files above, your LAST action MUST be
45
- a final text message (NOT a tool call). Do not end your turn on a file write or
46
- any other tool call. That final message MUST start with one of these two lines,
47
- EXACTLY, on its own line, with no leading whitespace:
48
-
49
- VERDICT: APPROVED
50
- VERDICT: REQUEST_CHANGES
51
-
52
- The orchestrator parses this marker from your final message to decide whether to
53
- run the fix loop — if you end on a tool call with no closing text, the run has
54
- no verdict to read. Do NOT use any other phrasing for the verdict on the first
55
- line — words like "approved", "approval", "request changes", or "looks good"
56
- elsewhere in the body are fine, but the first non-empty line MUST be exactly the
57
- marker above.
58
-
59
- After the marker line, write a 2–5 sentence summary of the most important
60
- findings. Writing the files is NOT the last step — this summary is.
@@ -1,93 +0,0 @@
1
- You are running the **browser-QA pass** of a verify run — driving the claim's
2
- behaviour in a **real headless browser** and capturing **screenshot evidence**.
3
- A text-evidence verify already ran and posted its verdict; your job is to add
4
- visual proof (or to settle a claim that can only be shown in a rendered UI).
5
- Read the `browser-qa` skill for the driver contract and the `verify` skill for
6
- the investigator rules, then follow them. The `building` skill installs and runs
7
- the repo.
8
-
9
- **Stay in the browser.** Do **not** read, quote, or analyse the repo's source
10
- code — the text pass already covered the code. Your evidence is strictly what
11
- the browser shows: the driver's extracted text, assertion results, console
12
- errors, and the screenshots. No `index.html`/CSS walkthroughs, no "from the
13
- checked-in code" observations.
14
-
15
- ## The claim to test
16
-
17
- {{#if commentBody}}
18
- **Claim / request:**
19
- {{commentBody}}
20
- {{/if}}
21
- {{#if issueTitle}}**Issue/PR title:** {{issueTitle}}{{/if}}
22
- {{#if issueBody}}
23
- **Issue/PR body:**
24
- {{issueBody}}
25
- {{/if}}
26
-
27
- Target repo: **{{owner}}/{{repo}}**
28
- {{#if issueNumber}}Target issue/PR: **#{{issueNumber}}**{{/if}}
29
-
30
- If the claim is purely about non-UI behaviour (a CLI, an API response, a pure
31
- function) the text pass already covered it — keep this pass short: note that the
32
- claim isn't UI-shaped and that no browser evidence was needed. Spend the effort
33
- where a rendered UI is the only place the claim shows.
34
-
35
- ## First: confirm the browser is available
36
-
37
- Run the driver's probe before anything else:
38
-
39
- ```
40
- node <browser-qa skill dir>/scripts/agent-browser.mjs doctor
41
- ```
42
-
43
- (The `browser-qa` skill is staged into this phase's skill bundle — find its
44
- absolute path from the available-skills catalogue.) If `doctor` exits non-zero,
45
- the browser toolchain isn't present: say so plainly and stop — do not fake
46
- screenshots. This phase only runs on the docker QA image, so `doctor` should
47
- pass.
48
-
49
- ## Workspace + run the app
50
-
51
- You are already inside the **{{repo}}** repo at branch {{branch}} — the harness
52
- pre-cloned it and your cwd is the repo root (no `cd`). For a PR claim, check out
53
- the PR head. Follow the `building` skill to install and start the app's
54
- dev-server in the background; wait until it's listening on `localhost`.
55
-
56
- ## Drive the UI and capture evidence
57
-
58
- Author a `flow.json` (shape documented in the `browser-qa` skill), then run
59
- `agent-browser.mjs run flow.json --base-url http://localhost:<port>
60
- --out-dir {{issueDir}}`. Save every screenshot under **`{{issueDir}}/`** — the
61
- harness harvests that directory. Parse the JSON report (extracted text,
62
- assertion results, console errors) — that, not the images, is what you reason
63
- over. For a before/after regression claim, capture both states.
64
-
65
- ## How your report is delivered — read carefully
66
-
67
- Your **final message is the report**, and the harness posts it for you{{#if issueNumber}} as
68
- a comment on **#{{issueNumber}}**{{/if}}{{#if !issueNumber}} back into the thread this request came from{{/if}}.
69
- Title it clearly as the **browser-QA evidence** so it reads as a supplement to
70
- the text verdict, not a competing one. Use the `verify` report shape
71
- (Environment / Evidence / **Conclusion: CONFIRMED | REFUTED | INCONCLUSIVE**).
72
-
73
- **Keep it tight** — a one-line environment summary, the evidence (screenshots +
74
- the key assertion/text/console results), and a one-sentence conclusion. No
75
- per-step narration, no code analysis, no long Coverage prose; a short
76
- "what was / wasn't exercised" is enough.
77
-
78
- **Embed each screenshot inline** so it renders in the comment.
79
- {{#if artifactBaseUrl}}Every PNG you saved to `<name>.png` is served publicly at
80
- `{{artifactBaseUrl}}/<name>.png`. Write a **raw Markdown image** for each one
81
- under Evidence — `!` then `[caption]` then the URL in parentheses — on its own
82
- line. Do **NOT** wrap it in backticks or a code fence; inside a code span it
83
- shows as literal text instead of rendering. For example, a screenshot saved as
84
- `home.png` becomes a line reading: an exclamation mark, `[Home]`, then
85
- `({{artifactBaseUrl}}/home.png)` with no spaces and no backticks.{{/if}}{{#if !artifactBaseUrl}}No
86
- public URL is configured, so reference each screenshot by filename (e.g.
87
- `after-login.png`) and note it's in the run's Artifacts view.{{/if}}
88
-
89
- **Do NOT post it yourself** with `github_add_issue_comment` — that would
90
- double-post. Never fabricate a screenshot or a pass; a clearly-evidenced
91
- **REFUTED** is a real finding. If screenshots couldn't be persisted (no
92
- server-mode build assets), still report what the DOM/text evidence showed and
93
- say the images weren't retained.
@@ -1,44 +0,0 @@
1
- You are writing the **single final verdict** for a verify run. Two passes have
2
- already run: a text-evidence verification and (sometimes) a browser-QA pass.
3
- Your job is to **synthesize them into one concise comment** — the reader sees
4
- only your output, not the individual passes.
5
-
6
- This is a **pure writing task**. Do **not** run commands, install anything, read
7
- repo files, or start a server — everything you need is below. Do **not** post a
8
- comment yourself (`github_add_issue_comment`); your final message *is* the
9
- comment, delivered by the harness.
10
-
11
- ## The claim
12
-
13
- {{#if commentBody}}{{commentBody}}{{/if}}{{#if issueTitle}} (issue/PR: {{issueTitle}}){{/if}}
14
-
15
- ## Text-verification report
16
-
17
- {{verifyResult}}
18
-
19
- {{#if verifyBrowserResult}}
20
- ## Browser-QA report (real headless browser + screenshots)
21
-
22
- {{verifyBrowserResult}}
23
- {{/if}}
24
-
25
- ## Write the verdict
26
-
27
- Produce a tight Markdown comment:
28
-
29
- - **Lead with the conclusion** on its own line: **CONFIRMED**, **REFUTED**, or
30
- **INCONCLUSIVE**. If the two passes disagree, reconcile them and say why the
31
- combined evidence lands where it does (browser evidence is decisive for
32
- rendered-UI behaviour; text evidence for everything else).
33
- - One short paragraph of the **key evidence** that settles it — the decisive
34
- commands/output and assertion results, not a replay of both reports.
35
- {{#if verifyBrowserResult}}- **Embed the browser screenshots inline** exactly as they appear in the
36
- browser-QA report above (the `![caption](https://…/<name>.png)` image
37
- Markdown) so they render in this comment. Keep them; don't turn them into
38
- plain links or drop them.{{/if}}
39
- - A one-line **coverage** note: what was exercised, and anything notable that
40
- wasn't.
41
-
42
- Keep it short and decisive — no per-step narration, no restating both reports in
43
- full. If a pass reported a failure or a REFUTED, surface it plainly; don't bury
44
- it under the other pass.
@@ -1,63 +0,0 @@
1
- You are **verifying a claim** — testing whether a stated behaviour is actually
2
- true and reporting the evidence. Read the `verify` skill for the full procedure
3
- and investigator rules, then follow it. It uses the `building` skill for
4
- installing and running the repo. This prompt gives you the claim and how your
5
- report is delivered.
6
-
7
- ## The claim to test
8
-
9
- {{#if commentBody}}
10
- **Claim / request:**
11
- {{commentBody}}
12
- {{/if}}
13
- {{#if issueTitle}}**Issue/PR title:** {{issueTitle}}{{/if}}
14
- {{#if issueBody}}
15
- **Issue/PR body:**
16
- {{issueBody}}
17
- {{/if}}
18
-
19
- Target repo: **{{owner}}/{{repo}}**
20
- {{#if issueNumber}}Target issue/PR: **#{{issueNumber}}**{{/if}}
21
-
22
- If no explicit claim is given and this is a PR, read the PR description + diff
23
- and pick the single most important, most testable claim it makes — and say which
24
- claim you chose.
25
-
26
- ## Workspace
27
-
28
- You are already inside the **{{repo}}** repo at branch {{branch}} — the harness
29
- pre-cloned it and your cwd is the repo root. Git is configured; no clone, no
30
- `cd`. For a PR claim, check out the PR head (see the `pr-review`/`building`
31
- workspace notes); for a before/after claim, `git fetch` the base ref too.
32
-
33
- ## First — is this even a text-checkable claim?
34
-
35
- You have **bash, file read, and the github tools** — no browser, no
36
- screenshots, no video. Before doing any setup, judge whether the claim is
37
- **purely about a rendered UI** (visual layout, mobile rendering, a click/render
38
- flow that only shows in a browser). If it is, **do not install/build/guess** —
39
- a dedicated browser-QA pass runs after you and owns it. Say in one line that the
40
- claim is UI-shaped and defer it to the browser pass, conclude **INCONCLUSIVE
41
- (UI-only — deferred to browser QA)**, and stop. Spend your effort only on claims
42
- bash can actually settle.
43
-
44
- ## Evidence — what you can and can't capture
45
-
46
- For a text-checkable claim, prove it with test output, command stdout/stderr,
47
- exit codes, `curl` against a dev-server you start, and log/file excerpts.
48
-
49
- ## How your report is delivered — read carefully
50
-
51
- Your **final message is the report**, and the harness posts it for you:
52
- {{#if issueNumber}}
53
- - as a comment on **#{{issueNumber}}**.
54
- {{/if}}
55
- {{#if !issueNumber}}
56
- - back into the thread this request came from.
57
- {{/if}}
58
-
59
- Make your final message the complete report in the shape the `verify` skill
60
- defines (Environment / Evidence / **Conclusion: CONFIRMED | REFUTED |
61
- INCONCLUSIVE**). **Do NOT post it yourself** with `github_add_issue_comment` —
62
- that would double-post. The only acceptable result that contradicts the claim is
63
- a clearly-evidenced **REFUTED**; surface it, don't bury it.
@@ -1,94 +0,0 @@
1
- kind: qa-test
2
- name: qa-test
3
- classification:
4
- intent: qa-test
5
- description: |
6
- QATEST — The user wants you to drive an app or CLI through a flow and report step-level pass/fail: "qa test the signup flow", "run through login and tell me what breaks", "smoke-test the CLI commands", "exercise the checkout flow". The deliverable is a step-by-step QA report. Prefer QATEST over VERIFY when it's a multi-step flow to exercise rather than a single claim to confirm.
7
- examples:
8
- - '"qa test the login flow on this PR" with ISSUE TITLE "Add login" → INTENT: QATEST, REPO: NONE, ISSUE: NONE, REASON: NONE'
9
- - '"run through the signup flow and tell me what breaks" with ISSUE TITLE "Signup v2" → INTENT: QATEST, REPO: NONE, ISSUE: NONE, REASON: NONE'
10
- description: |
11
- Run an automated QA flow against a repo's CLI or locally-served app and report
12
- step-level pass/fail with evidence. It installs and runs the code in the
13
- sandbox, exercises a flow (CLI invocations or curl against a dev-server),
14
- optionally drives the UI in a real browser, then posts a single per-step QA
15
- report. Does not modify code.
16
-
17
- Delivery is a single in-place status comment (`status_checklist`): the run
18
- shows its phases ticking off, then a final `synthesize` phase folds the text
19
- report and (when it ran) the browser evidence into ONE combined report,
20
- delivered as the comment's footer via `final_message`. No comment-per-phase.
21
- Posted on the originating issue/PR for GitHub runs, or into the Slack thread
22
- for Slack runs. The agents therefore do NOT post anything themselves.
23
-
24
- When the host runs the docker backend with the browser-QA image built, the
25
- gated `qa_browser` phase drives a real headless Chromium against the
26
- locally-served app and captures step-level screenshot evidence; everywhere
27
- else it is silently skipped (graceful degradation) and the text report stands
28
- alone. The synthesis runs either way.
29
-
30
- Triggered by:
31
- - a `@last-light qa-test <target> [-- steps]` comment on an issue/PR
32
- - manual CLI: tsx src/cli.ts qa-test owner/repo#N -- "<steps>"
33
-
34
- status_checklist: true
35
- final_message: "{{synthesisResult}}"
36
-
37
- phases:
38
- - name: phase_0
39
- label: Context
40
- type: context
41
- depends_on: []
42
-
43
- - name: qa_test
44
- label: QA Test
45
- depends_on: [phase_0]
46
- prompt: prompts/qa-test.md
47
- # qa-test: the flow procedure + report shape (primary).
48
- # building: install + run the repo to exercise the flow.
49
- skills: [qa-test, building]
50
- model: "{{models.qa-test}}"
51
- variant: "{{variants.qa-test}}"
52
- output_var: qaResult
53
- messages:
54
- on_start: "Running the QA flow — installing, running, and exercising each step..."
55
- on_success: "Text QA flow complete."
56
- on_failure: "I couldn't complete the QA run — see the logs for details."
57
-
58
- # Browser-QA pass (Tier B). Gated to the docker backend AND the enriched
59
- # `lastlight-sandbox-qa:latest` image (Playwright + Chromium). On gondolin, or
60
- # a docker host without that image, the scheduler silently skips this phase.
61
- # It is terminal (nothing depends on it) — `synthesize` depends only on
62
- # `qa_test`, so it still runs (after this phase, by declaration order) and
63
- # folds in `qaBrowserResult` only when this phase actually produced it.
64
- - name: qa_browser
65
- label: QA Test (browser)
66
- depends_on: [qa_test]
67
- prompt: prompts/qa-browser.md
68
- skills: [qa-test, building, browser-qa]
69
- model: "{{models.qa-test}}"
70
- variant: "{{variants.qa-test}}"
71
- requires_sandbox: docker
72
- sandbox_image: qa
73
- output_var: qaBrowserResult
74
- messages:
75
- on_start: "Browser QA available — driving the UI and capturing screenshots..."
76
- on_success: "Browser QA complete — screenshots captured."
77
- on_skipped_done: "Browser QA unavailable on this host — text report stands."
78
-
79
- # Synthesis. Depends only on `qa_test` (always runs after the gated browser
80
- # phase by declaration order, and never skips when that phase is gated out).
81
- # Reads the prior reports from phaseOutputs and writes ONE combined report;
82
- # its output (`synthesisResult`) becomes the comment footer via the
83
- # workflow-level `final_message`. Pure composition — no skills, no repo work.
84
- - name: synthesize
85
- label: Summary
86
- depends_on: [qa_test, qa_browser]
87
- prompt: prompts/qa-synth.md
88
- model: "{{models.qa-test}}"
89
- variant: "{{variants.qa-test}}"
90
- output_var: synthesisResult
91
- messages:
92
- on_start: "Synthesizing the final report..."
93
- on_success: "Report posted below."
94
- on_failure: "I couldn't synthesize the final report — see the logs."
@@ -1,15 +0,0 @@
1
- kind: health
2
- name: repo-health
3
- description: |
4
- Generate a health report for a repository: open issues, stale issues, PR
5
- velocity, label distribution, etc. Repo-scoped (no specific issue/PR).
6
-
7
- Triggered by:
8
- - weekly cron (default Monday 09:00)
9
- - manual CLI: tsx src/cli.ts health owner/repo
10
-
11
- phases:
12
- - name: report
13
- label: Report
14
- skill: repo-health
15
- model: "{{models.health}}"