@dsdenes/devboard 0.1.560 → 0.1.562

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 (323) hide show
  1. package/AGENTS.md +59 -0
  2. package/README.md +2497 -26
  3. package/bin/devboard.mjs +352 -118
  4. package/client/App.svelte +523 -0
  5. package/client/FeedbackOverlay.svelte +1125 -0
  6. package/client/FlowMode.svelte +1015 -0
  7. package/client/app.css +3922 -0
  8. package/client/env.d.ts +23 -0
  9. package/client/lib/commands.ts +836 -0
  10. package/client/lib/components/ActivityBar.svelte +295 -0
  11. package/client/lib/components/AdrTable.svelte +241 -0
  12. package/client/lib/components/CommandPalette.svelte +198 -0
  13. package/client/lib/components/ConceptKind.svelte +66 -0
  14. package/client/lib/components/ConfirmDialog.svelte +62 -0
  15. package/client/lib/components/DataTable.svelte +243 -0
  16. package/client/lib/components/DetailSplit.svelte +68 -0
  17. package/client/lib/components/DiscoverOverview.svelte +898 -0
  18. package/client/lib/components/DiscoverWorkspace.svelte +437 -0
  19. package/client/lib/components/DraftsPage.svelte +186 -0
  20. package/client/lib/components/GoalWorkspace.svelte +1042 -0
  21. package/client/lib/components/IssuesAgentFocus.svelte +117 -0
  22. package/client/lib/components/IssuesAgentLog.svelte +50 -0
  23. package/client/lib/components/IssuesQuestion.svelte +95 -0
  24. package/client/lib/components/IssuesWorkspace.svelte +577 -0
  25. package/client/lib/components/MermaidDiagram.svelte +89 -0
  26. package/client/lib/components/MonacoEditor.svelte +190 -0
  27. package/client/lib/components/NotificationRegion.svelte +195 -0
  28. package/client/lib/components/PaneHandle.svelte +25 -0
  29. package/client/lib/components/ScoutIssues.svelte +215 -0
  30. package/client/lib/components/ScoutWorkspace.svelte +180 -0
  31. package/client/lib/components/Sidebar.svelte +622 -0
  32. package/client/lib/components/StatusBar.svelte +118 -0
  33. package/client/lib/components/Terminal.svelte +193 -0
  34. package/client/lib/components/WatchdogWorkspace.svelte +537 -0
  35. package/client/lib/components/ui/button.svelte +56 -0
  36. package/client/lib/components/ui/icon-button.svelte +56 -0
  37. package/client/lib/components/ui/input.svelte +19 -0
  38. package/client/lib/components/ui/page-header.svelte +120 -0
  39. package/client/lib/components/ui/stage-track.svelte +141 -0
  40. package/client/lib/components/watchdog-indicator.svelte +189 -0
  41. package/client/lib/connection.svelte.ts +210 -0
  42. package/client/lib/dependency-diagram.test.ts +90 -0
  43. package/client/lib/dependency-diagram.ts +75 -0
  44. package/client/lib/discover-format.test.ts +265 -0
  45. package/client/lib/discover-format.ts +394 -0
  46. package/client/lib/discover.svelte.ts +412 -0
  47. package/client/lib/draft-format.test.ts +48 -0
  48. package/client/lib/draft-format.ts +13 -0
  49. package/client/lib/flow-save.test.ts +148 -0
  50. package/client/lib/flow.svelte.ts +445 -0
  51. package/client/lib/goal-reconnect.test.ts +282 -0
  52. package/client/lib/goal.svelte.ts +652 -0
  53. package/client/lib/issues.svelte.ts +439 -0
  54. package/client/lib/layout.svelte.ts +234 -0
  55. package/client/lib/notification-issue.test.ts +53 -0
  56. package/client/lib/notification-issue.ts +27 -0
  57. package/client/lib/notifications.svelte.ts +62 -0
  58. package/client/lib/poll-status.test.ts +141 -0
  59. package/client/lib/poll-status.ts +88 -0
  60. package/client/lib/record-status.test.ts +19 -0
  61. package/client/lib/record-status.ts +25 -0
  62. package/client/lib/scout.svelte.ts +164 -0
  63. package/client/lib/skill-document.test.ts +77 -0
  64. package/client/lib/skill-document.ts +57 -0
  65. package/client/lib/status-tone.test.ts +40 -0
  66. package/client/lib/status-tone.ts +33 -0
  67. package/client/lib/types.ts +578 -0
  68. package/client/lib/utils.ts +6 -0
  69. package/client/lib/viewport.svelte.ts +20 -0
  70. package/client/lib/watchdog.svelte.ts +69 -0
  71. package/client/main.ts +7 -0
  72. package/dist/apple-touch-icon.png +0 -0
  73. package/dist/assets/abnfDiagram-VCTEODGH-CmBSMArZ.js +1 -0
  74. package/dist/assets/arc-BZgCSX2H.js +1 -0
  75. package/dist/assets/architecture-7GRP2DOG-CF9MHlfo.js +1 -0
  76. package/dist/assets/architectureDiagram-5GKGNRK7-DzWB6xiQ.js +36 -0
  77. package/dist/assets/array-BifhSqXX.js +1 -0
  78. package/dist/assets/blockDiagram-I7D4REHJ-BtmGJ0hn.js +129 -0
  79. package/dist/assets/c4Diagram-7LVT6UL2-D5CHrrRX.js +38 -0
  80. package/dist/assets/channel-CgM4lcUW.js +1 -0
  81. package/dist/assets/chunk-2Q5K7J3B-C1jixKkw.js +1 -0
  82. package/dist/assets/chunk-4HAMMTFA-DeIufjFl.js +62 -0
  83. package/dist/assets/chunk-5VM5RSS4-ZNzvKenW.js +15 -0
  84. package/dist/assets/chunk-75Z2AOVW-DbtzyKUg.js +2 -0
  85. package/dist/assets/chunk-DU6HZSFF-C0fdbx3K.js +127 -0
  86. package/dist/assets/chunk-F27PBJKO-HObL2IvF.js +1 -0
  87. package/dist/assets/chunk-FOHPRMQF-DD4dKubD.js +161 -0
  88. package/dist/assets/chunk-GMAD6QVW-fg8wvtPY.js +72 -0
  89. package/dist/assets/chunk-GVQU2GXP-C0TaHOrD.js +1 -0
  90. package/dist/assets/chunk-IMKFNOWR-BVoIdx20.js +231 -0
  91. package/dist/assets/chunk-JWPE2WC7-DVXcaiue.js +1 -0
  92. package/dist/assets/chunk-L3NEJ4N5-B_kmqfk5.js +1 -0
  93. package/dist/assets/chunk-OSK3NFVY-DO0vhxHH.js +10 -0
  94. package/dist/assets/chunk-P2QGCYS3-CjljLvFj.js +1 -0
  95. package/dist/assets/chunk-POPQ4Y6H-BU0C7tw6.js +1 -0
  96. package/dist/assets/chunk-PWAF6VOD-Dn0OjBt0.js +1 -0
  97. package/dist/assets/chunk-SHT3W25Y-CMCZE2xx.js +168 -0
  98. package/dist/assets/chunk-SVP7TREG-BIRmRy_W.js +88 -0
  99. package/dist/assets/chunk-TICWLB2K-C1bc2CDE.js +206 -0
  100. package/dist/assets/chunk-XXDRQBXY-Cc38QUmR.js +1 -0
  101. package/dist/assets/chunk-Y2CYZVJY-DsF7k-Jl.js +1 -0
  102. package/dist/assets/classDiagram-ZZMXUADV-BDh5w6Nc.js +1 -0
  103. package/dist/assets/classDiagram-v2-VYDZK3BY-BDh5w6Nc.js +1 -0
  104. package/dist/assets/cose-bilkent-JH36ORCC-B7pU7qhM.js +1 -0
  105. package/dist/assets/cynefin-OW5HDTMX-76dswSqS.js +1 -0
  106. package/dist/assets/cynefinDiagram-5FMLGOSQ-2kS4q01d.js +62 -0
  107. package/dist/assets/cytoscape.esm-BegBNzOV.js +321 -0
  108. package/dist/assets/dagre-D7JM2Yhv.js +1 -0
  109. package/dist/assets/dagre-GXQ25YYZ-B5Y21TQM.js +4 -0
  110. package/dist/assets/defaultLocale-BFoDCU3G.js +1 -0
  111. package/dist/assets/diagram-S7CK7UJ4-CY6td7Et.js +30 -0
  112. package/dist/assets/diagram-UQ7AKVKN-DmDqnGZf.js +41 -0
  113. package/dist/assets/diagram-VSXAHHWV-KGLWOOcE.js +3 -0
  114. package/dist/assets/diagram-VX7I27RA-D5syUraJ.js +24 -0
  115. package/dist/assets/diagram-Z3DM3KII-Dtrbs1Om.js +24 -0
  116. package/dist/assets/dist-Dce-2YbA.js +1 -0
  117. package/dist/assets/ebnfDiagram-PWID7BFC-CQpJLtU3.js +1 -0
  118. package/dist/assets/editor.worker-BmdWdrHZ.js +33 -0
  119. package/dist/assets/erDiagram-RLTQ6QDP-cMTzKLu_.js +99 -0
  120. package/dist/assets/eventmodeling-NTZA5JFV-CMzLdNaL.js +1 -0
  121. package/dist/assets/flowDiagram-HODETNUW-BMUajB-G.js +1 -0
  122. package/dist/assets/ganttDiagram-EL5Y4UJY-DseBS5Fs.js +292 -0
  123. package/dist/assets/gitGraph-4MIJSDKK-CUQZRpxJ.js +1 -0
  124. package/dist/assets/gitGraphDiagram-WWUBYQGX-CfMfsJ3b.js +106 -0
  125. package/dist/assets/graphlib-DS17s2tU.js +1 -0
  126. package/dist/assets/index-ByQ-XX38.css +1 -0
  127. package/dist/assets/index-CIf5TpfY.js +214 -0
  128. package/dist/assets/info-A6RAGUB7-D3nAKZ8M.js +1 -0
  129. package/dist/assets/infoDiagram-27XIBGKW-zu1O0WOy.js +2 -0
  130. package/dist/assets/init-C-OQMol4.js +1 -0
  131. package/dist/assets/ishikawaDiagram-5VMMS53U-DKC7BO9p.js +70 -0
  132. package/dist/assets/journeyDiagram-3NMN7TZE-Ld5mXse7.js +139 -0
  133. package/dist/assets/kanban-definition-UXKFOSKX-CH7_QlHL.js +89 -0
  134. package/dist/assets/katex-DJhrJSbw.js +257 -0
  135. package/dist/assets/line-N9XiCREw.js +1 -0
  136. package/dist/assets/linear-C9hnqmJv.js +1 -0
  137. package/dist/assets/mermaid-parser.core-DgPwV5Bh.js +7 -0
  138. package/dist/assets/mermaid.core-BKqynXLR.js +44 -0
  139. package/dist/assets/mindmap-definition-YA3MSWOX-DkiL-wiW.js +96 -0
  140. package/dist/assets/monaco-DjpsE8to.css +1 -0
  141. package/dist/assets/monaco-DqzJaNIe.js +908 -0
  142. package/dist/assets/ordinal-BDEzSJ7C.js +1 -0
  143. package/dist/assets/packet-AYTQ26CC-DuMTvpEJ.js +1 -0
  144. package/dist/assets/path-fybaL0A-.js +1 -0
  145. package/dist/assets/pegDiagram-XKGWAZYB-DvMl_xSe.js +1 -0
  146. package/dist/assets/pie-WAS4IAKB-Da0xPaD8.js +1 -0
  147. package/dist/assets/pieDiagram-E7YTZNPT-amANNRJY.js +39 -0
  148. package/dist/assets/quadrantDiagram-AXDQQJYC-BrgvDMnk.js +7 -0
  149. package/dist/assets/radar-RG4KPBEZ-Dz3Ih5-N.js +1 -0
  150. package/dist/assets/railroad-74A4TZTK-CKMW-IV2.js +1 -0
  151. package/dist/assets/railroad-abnf-HS5TGJTU-ChqmSWSF.js +1 -0
  152. package/dist/assets/railroad-ebnf-LZEXJU2U-V3R4fFdb.js +1 -0
  153. package/dist/assets/railroad-peg-WCYAUIDC-B-RuhUQW.js +1 -0
  154. package/dist/assets/railroadDiagram-O6MQD6OU-FjG-6OLu.js +1 -0
  155. package/dist/assets/requirementDiagram-BXWQKSXE-Cnj8RfE4.js +84 -0
  156. package/dist/assets/rolldown-runtime-XKyaHtl9.js +1 -0
  157. package/dist/assets/rough.esm-Dy-Kn_BL.js +1 -0
  158. package/dist/assets/sankeyDiagram-P5KCCOFB-DMu1fnEh.js +40 -0
  159. package/dist/assets/sequenceDiagram-WJ2MYXX4-CtCtaRpW.js +162 -0
  160. package/dist/assets/sizeCapture-INFHLROL-3uHXrFqA.js +1 -0
  161. package/dist/assets/src-CGp3bfio.js +1 -0
  162. package/dist/assets/stateDiagram-D77RDMKH-xcJbLNhz.js +1 -0
  163. package/dist/assets/stateDiagram-v2-MP3YSRHH-DYHrQmJJ.js +1 -0
  164. package/dist/assets/swimlanes-42K2YHIH-BwLln_ga.js +1 -0
  165. package/dist/assets/swimlanesDiagram-VR7AAH4N-BcDfUQ0A.js +8 -0
  166. package/dist/assets/timeline-definition-24CTP7MA-ucNGsUUz.js +120 -0
  167. package/dist/assets/treeView-Q6P3EWNA-3uOomRue.js +1 -0
  168. package/dist/assets/treemap-WGGIJYW6-iGK7vwID.js +1 -0
  169. package/dist/assets/vennDiagram-4TSXK5OY-B9LgGe16.js +34 -0
  170. package/dist/assets/wardley-WFR3VGLG-FupMOf6k.js +1 -0
  171. package/dist/assets/wardleyDiagram-VM6X3IG4-CGZdEXM2.js +78 -0
  172. package/dist/assets/xterm-BrP-ENHg.css +1 -0
  173. package/dist/assets/xterm-C8zLTNGk.js +16 -0
  174. package/dist/assets/xychartDiagram-S5SC5T6Z-DafZrSBJ.js +7 -0
  175. package/dist/favicon.ico +0 -0
  176. package/dist/favicon.svg +6 -0
  177. package/dist/index.html +34 -0
  178. package/extensions/implement-goal-issue.ts +368 -0
  179. package/extensions/implement-next-epic.ts +835 -0
  180. package/index.html +28 -0
  181. package/install.sh +111 -0
  182. package/issues/control.ts +91 -0
  183. package/issues/guards.ts +12 -0
  184. package/issues/ledger.ts +122 -0
  185. package/issues/legacy.ts +68 -0
  186. package/issues/lock.ts +305 -0
  187. package/issues/paths.ts +76 -0
  188. package/issues/preflight.ts +189 -0
  189. package/issues/repository.ts +203 -0
  190. package/issues/scout/actions.ts +255 -0
  191. package/issues/scout/control.ts +80 -0
  192. package/issues/scout/github.ts +358 -0
  193. package/issues/scout/paths.ts +129 -0
  194. package/issues/scout/preflight.ts +277 -0
  195. package/issues/scout/recommendation.ts +400 -0
  196. package/issues/scout/scan.ts +143 -0
  197. package/issues/scout/state.ts +448 -0
  198. package/issues/scout/worker.ts +1282 -0
  199. package/issues/state.ts +584 -0
  200. package/issues/tracker.ts +271 -0
  201. package/issues/worker.ts +1065 -0
  202. package/lib/dependencies.ts +61 -0
  203. package/lib/forge-auth.ts +953 -0
  204. package/lib/forge.ts +141 -0
  205. package/lib/gitea.ts +709 -0
  206. package/lib/github-release.ts +318 -0
  207. package/lib/inventory.test.ts +79 -0
  208. package/lib/inventory.ts +53 -0
  209. package/lib/release.test.ts +269 -0
  210. package/lib/release.ts +801 -0
  211. package/omp/commands/adr-resolve.md +8 -0
  212. package/omp/commands/discover.md +6 -0
  213. package/omp/commands/epic-next.md +8 -0
  214. package/omp/commands/flow-change.md +8 -0
  215. package/omp/commands/flow-goal.md +8 -0
  216. package/omp/commands/flow-implement.md +8 -0
  217. package/omp/commands/flow-widget.md +8 -0
  218. package/omp/commands/goal-draft.md +8 -0
  219. package/omp/commands/goal-outcome.md +8 -0
  220. package/omp/commands/implement-issue.md +8 -0
  221. package/omp/commands/prepare-skills.md +6 -0
  222. package/omp/commands/scout-recommendations.md +8 -0
  223. package/omp/commands/setup-devboard.md +24 -0
  224. package/omp/config.yml +12 -0
  225. package/omp/extensions/implement-goal-issue.ts +2 -0
  226. package/omp/extensions/implement-next-epic.ts +2 -0
  227. package/omp/mcp.json +9 -0
  228. package/package.json +86 -7
  229. package/prompts/adr-resolve.md +130 -0
  230. package/prompts/discover.md +541 -0
  231. package/prompts/epic-next.md +533 -0
  232. package/prompts/flow-change.md +76 -0
  233. package/prompts/flow-goal.md +126 -0
  234. package/prompts/flow-implement.md +103 -0
  235. package/prompts/flow-widget.md +54 -0
  236. package/prompts/goal-draft.md +147 -0
  237. package/prompts/goal-outcome.md +87 -0
  238. package/prompts/implement-issue.md +66 -0
  239. package/prompts/prepare-skills.md +142 -0
  240. package/prompts/scout-recommendations.md +143 -0
  241. package/public/apple-touch-icon.png +0 -0
  242. package/public/favicon.ico +0 -0
  243. package/public/favicon.svg +6 -0
  244. package/server/acp.ts +540 -0
  245. package/server/activity.test.ts +96 -0
  246. package/server/activity.ts +48 -0
  247. package/server/app.test.ts +882 -0
  248. package/server/app.ts +6179 -0
  249. package/server/ask.test.ts +543 -0
  250. package/server/ask.ts +589 -0
  251. package/server/dependencies.test.ts +118 -0
  252. package/server/discover-remote.test.ts +1602 -0
  253. package/server/discover-sheet.test.ts +176 -0
  254. package/server/discover.test.ts +1510 -0
  255. package/server/discover.ts +3198 -0
  256. package/server/feedback.test.ts +458 -0
  257. package/server/feedback.ts +369 -0
  258. package/server/fixtures/adr-source.ts +71 -0
  259. package/server/fixtures/hang-download.ts +14 -0
  260. package/server/fixtures/stub-agent.ts +1870 -0
  261. package/server/fixtures/stub-forge.ts +141 -0
  262. package/server/fixtures/stub-gh.ts +57 -0
  263. package/server/flow-pr.test.ts +976 -0
  264. package/server/flow.test.ts +1632 -0
  265. package/server/flow.ts +2655 -0
  266. package/server/forge-pr.ts +387 -0
  267. package/server/goal-creation.test.ts +957 -0
  268. package/server/goal-draft.test.ts +348 -0
  269. package/server/goal-drafts.ts +449 -0
  270. package/server/goal-proposal.test.ts +479 -0
  271. package/server/goal-proposal.ts +232 -0
  272. package/server/goal-revision.test.ts +613 -0
  273. package/server/goal-slug.test.ts +56 -0
  274. package/server/goal-slug.ts +96 -0
  275. package/server/goal.ts +20 -0
  276. package/server/index.ts +147 -0
  277. package/server/issue-close.test.ts +100 -0
  278. package/server/issue-close.ts +178 -0
  279. package/server/issues.test.ts +167 -0
  280. package/server/issues.ts +479 -0
  281. package/server/journal.test.ts +350 -0
  282. package/server/journal.ts +329 -0
  283. package/server/lifecycle-pause.test.ts +1795 -0
  284. package/server/lifecycle.test.ts +1879 -0
  285. package/server/parallel-lifecycle.test.ts +1029 -0
  286. package/server/persistence-restart.test.ts +723 -0
  287. package/server/persistence.test.ts +1935 -0
  288. package/server/records.test.ts +180 -0
  289. package/server/records.ts +99 -0
  290. package/server/reset-implementation.test.ts +997 -0
  291. package/server/run.test.ts +611 -0
  292. package/server/scout.test.ts +877 -0
  293. package/server/scout.ts +459 -0
  294. package/server/skills-preparation.test.ts +1073 -0
  295. package/server/state.ts +249 -0
  296. package/server/tracker.ts +369 -0
  297. package/server/updates.test.ts +444 -0
  298. package/server/updates.ts +198 -0
  299. package/server/version.test.ts +140 -0
  300. package/server/version.ts +151 -0
  301. package/server/watchdog.ts +389 -0
  302. package/svelte.config.js +5 -0
  303. package/templates/host-AGENTS.md +235 -0
  304. package/tsconfig.json +21 -0
  305. package/vite.config.ts +21 -0
  306. package/watchdog/cleanup-main.ts +98 -0
  307. package/watchdog/cleanup.ts +301 -0
  308. package/watchdog/collect.ts +311 -0
  309. package/watchdog/coordinator.ts +397 -0
  310. package/watchdog/delivery.ts +107 -0
  311. package/watchdog/discovery.ts +209 -0
  312. package/watchdog/findings.ts +211 -0
  313. package/watchdog/github.ts +189 -0
  314. package/watchdog/history.ts +138 -0
  315. package/watchdog/install.ts +103 -0
  316. package/watchdog/ledger.ts +188 -0
  317. package/watchdog/lock.ts +63 -0
  318. package/watchdog/main.ts +106 -0
  319. package/watchdog/status.ts +71 -0
  320. package/watchdog/systemd.ts +96 -0
  321. package/watchdog/uninstall.ts +30 -0
  322. package/watchdog/units/devboard-watchdog.service +9 -0
  323. package/watchdog/units/devboard-watchdog.timer +10 -0
@@ -0,0 +1,142 @@
1
+ ---
2
+ description: Prepare project-agnostic Agent Skills grounded in relevant public standards, general best practices, software-architecture patterns, and testing patterns selected from GOAL.md.
3
+ ---
4
+
5
+ `/prepare-skills`: derive a focused set of project-agnostic Agent Skills from the goal, grounded in
6
+ current public practice, and leave no contradictions among the installed skills.
7
+
8
+ ## Contract
9
+
10
+ - `<host>` is the host project: `git rev-parse --show-toplevel`; when that fails, the working
11
+ directory. `.devboard/` and `.worktree/` are the harness, not the host; never write into them.
12
+ - `<host>/GOAL.md` is the only project-specific input. Read it once and use it only to select which
13
+ public standards and pattern families are relevant to the work it describes. Never copy, quote,
14
+ paraphrase, summarize, or allude to its implementation details in a skill.
15
+ - Every skill is project-agnostic: it states policy that another project could adopt unchanged.
16
+ Implementation decisions stay with the implementation agent, never with a skill.
17
+ - Do not survey, list, or read host source code, `adrs/`, configuration, package manifests, build
18
+ files, tests, README files, or directory trees. Do not infer implementation facts the goal does
19
+ not state, and do not ask the developer for them.
20
+ - Deliverable: skills under `<host>/.omp/skills/<name>/SKILL.md`, each with a directory name that
21
+ matches its frontmatter `name`. Create nothing outside that skill root except the directories and
22
+ `SKILL.md` files themselves.
23
+ - NEVER write, rewrite, or delete `<host>/GOAL.md`, anything under `<host>/adrs/`, or any other
24
+ host file.
25
+ - Replace only the skills this feature owns. At the start, delete every skill directory whose
26
+ `SKILL.md` frontmatter has `metadata.devboard-managed: "true"` and does not carry
27
+ `metadata.devboard-family: "discover"`. A managed skill with no `metadata.devboard-family` field
28
+ belongs to this prepare family for backward compatibility. Never delete, rename, or edit a skill
29
+ that does not belong to this family, including a Discover-family skill: the Discover family is
30
+ project-specific, owned by Discover, and belongs to the developer once it is published.
31
+ - Install no third-party skill. `npx skills` may be used only to inspect or adapt public skill
32
+ content while authoring; every delivered `SKILL.md` is written locally for this goal.
33
+
34
+ ## Phase 1 — Goal and research
35
+
36
+ 1. Read `<host>/GOAL.md`. If it is absent, empty, or whitespace-only, `halt: GOAL.md is not set`
37
+ and nothing else.
38
+ 2. Treat the goal as a selection signal only: decide which standards and pattern families it makes
39
+ relevant. Never turn a statement from it into a skill directive.
40
+ 3. Research current public practice on the web before writing anything. Search separately in each
41
+ of these areas and read enough sources to distinguish durable guidance from fashion:
42
+ - public standards and specifications from authoritative bodies, such as RFCs, ISO or IEEE
43
+ standards, and standards-organization guidance;
44
+ - general engineering best practices that apply regardless of stack or organization;
45
+ - software-architecture patterns: boundaries, dependency direction, cohesion, coupling,
46
+ interfaces, layering;
47
+ - testing patterns: test boundaries, observable behavior, test doubles, regression coverage.
48
+ Prefer primary sources and official guidance. Record what the sources say well enough to explain
49
+ it, not to copy it.
50
+ 4. Do not fabricate research. If web access fails, `halt: web research is unavailable` and write no
51
+ skill.
52
+
53
+ ## Phase 2 — Choose the skills
54
+
55
+ Decide how many skills to prepare and what each one covers. Base the choice on the standards and
56
+ pattern families the goal makes relevant, not on a fixed taxonomy. At least one skill is required;
57
+ there is no maximum and no required topic. Each skill covers one coherent family so another project
58
+ can adopt it unchanged.
59
+
60
+ ## Phase 3 — Interview when needed
61
+
62
+ Ask at most one round of questions, and only when the goal leaves open which standards or pattern
63
+ families matter for the prepared skills. Use the `ask` tool with 2–5 concrete options, then
64
+ continue. Do not ask about technology, language, framework, or file layout, and never ask for
65
+ implementation detail the goal does not state. No question is required when the goal is specific
66
+ enough.
67
+
68
+ ## Phase 4 — Author the skills
69
+
70
+ Write at least one skill. Each is one directory under `<host>/.omp/skills/` containing one
71
+ `SKILL.md`. Use this shape:
72
+
73
+ ```markdown
74
+ ---
75
+ name: lower-case-hyphenated-name
76
+ description: One sentence naming the policy the skill states and when to apply it.
77
+ metadata:
78
+ devboard-managed: "true"
79
+ devboard-family: "prepare"
80
+ ---
81
+
82
+ # Title
83
+
84
+ - One portable policy per bullet, phrased as an imperative.
85
+ - Another policy drawn from a public standard or a named pattern.
86
+ ```
87
+
88
+ Rules for every skill:
89
+
90
+ - It is project-agnostic: another project with a different stack can adopt every directive
91
+ unchanged.
92
+ - It contains no project-specific implementation detail: no host or product name, no repository or
93
+ absolute path, no host directory or file name, no module, class, function, type, package,
94
+ dependency, framework, runtime, library, or programming language, no data format, API shape,
95
+ schema, or configuration key, and no concrete architecture, layout, or design decision.
96
+ - Public domain names, formats, and standard identifiers are allowed when they are the subject of
97
+ the guidance, such as an RFC number, a named standard, or a protocol defined by a public body.
98
+ - Directory name equals `name`, matches `^[a-z0-9]+(-[a-z0-9]+)*$`, and is at most 64 characters.
99
+ - `description` is non-empty, at most 1024 characters, and states the policy the skill governs and
100
+ when an agent should apply it.
101
+ - Body guidance states durable policy grounded in the researched standards and patterns, not
102
+ generic filler such as "write clean code" or "test your code".
103
+ - Guidance is internally consistent and complements rather than repeats the other skills.
104
+ - State directives explicitly, one policy per bullet, so a later review can compare them.
105
+ - A skill carries no provenance line, source list, or citation field; the research informs the
106
+ policy and stays out of the delivered file.
107
+
108
+ ## Phase 5 — Review every installed skill
109
+
110
+ This pass is mandatory and covers every skill in `<host>/.omp/skills/` that belongs to this
111
+ prepare family, plus every hand-authored skill without a `devboard-managed` marker. It never reads
112
+ a skill whose frontmatter carries `metadata.devboard-family: "discover"`: Discover's
113
+ project-specific policy is not measured against project-agnostic preparation.
114
+
115
+ 1. List every skill directory and read every `SKILL.md` in it.
116
+ 2. Extract the directive statements: bullets or lines beginning with a policy word such as
117
+ `Always`, `Never`, `Must`, `Should`, `Do not`, `Avoid`, `Prefer`, or `Use`.
118
+ 3. Compare each pair of skills. Two skills contradict when they state opposite policies for the
119
+ same subject, for example "Always use dependency injection" and "Never use dependency
120
+ injection".
121
+ 4. Resolve every contradiction by rewriting a skill of this prepare family so both give compatible
122
+ instructions. You may rephrase, narrow, merge, or delete prepare-family skills. Never change an
123
+ unmanaged skill or a Discover-family skill.
124
+ 5. If a contradiction cannot be resolved without changing an unmanaged skill, stop: leave the
125
+ unmanaged file exactly as it was and `halt: unresolvable contradiction with unmanaged skill
126
+ <name>`. Do not claim success.
127
+
128
+ ## Phase 6 — Finish
129
+
130
+ - Every skill of this family must carry both markers, and the prepare family must contain at least
131
+ one skill.
132
+ - The final review must have no remaining contradictions.
133
+ - Reply with a short list of the prepared skill names and `No contradictions`; never paste skill
134
+ bodies into chat.
135
+
136
+ ## Halting
137
+
138
+ `halt: <reason>` on its own line and nothing else. Reasons: `GOAL.md` is absent, empty, or
139
+ whitespace-only; web research is unavailable; the skill root cannot be written; a contradiction with
140
+ an unmanaged skill cannot be resolved without editing that skill.
141
+
142
+ NEVER halt for effort, question count, model latency, or the number of research queries.
@@ -0,0 +1,143 @@
1
+ ---
2
+ description: Survey the host repository and write the significant, evidence-backed improvement recommendations Auto Scout files as issues.
3
+ ---
4
+
5
+ `/scout-recommendations`: survey the repository, find significant improvements, and write the
6
+ recommendations to the scan file Auto Scout named. This turn produces a recommendation document,
7
+ nothing else.
8
+
9
+ ## Contract
10
+
11
+ - The scan directory is the command argument, absolute and outside your control:
12
+ `<scan-dir>`. Read `<scan-dir>/request.json` once; it carries `requested`, `categories`,
13
+ `excludedRoots`, `knownTitles`, `draftGoalHeadings`, `significanceThreshold`, and
14
+ `repositoryPath`.
15
+ - `<repositoryPath>` is the repository to survey. Never survey or write outside it, and never
16
+ read inside an `excludedRoots` tree: generated output, vendored packages, temporary state, and
17
+ worktrees are not the repository under review. Every `path` you cite is relative to that exact
18
+ root: a file under a subdirectory keeps that leading directory in the path, never a shorter
19
+ form. Before writing the answer, confirm every cited path with `test -f <path>` from
20
+ `<repositoryPath>`.
21
+ - One correction turn is available: if validation rejects the answer, rewrite
22
+ `<scan-dir>/recommendations.json` addressing exactly what the rejection names.
23
+ - Read the repository's context files (`AGENTS.md`, `GOAL.md`, `README.md`, `adrs/`, `docs/`), its
24
+ package manifests, its source, and its tests before proposing anything. A finding you cannot
25
+ point at in the code is not a finding.
26
+ - Deliverable: exactly one file, `<scan-dir>/recommendations.json`. Write nothing else, anywhere.
27
+ - Never modify the repository: no edits, no formatting, no new files inside it, no branches,
28
+ commits, stashes, builds, tests, installs, or any command that mutates the checkout or its git
29
+ state. Read-only inspection only.
30
+ - Never file an issue, write a draft goal, or touch `.devboard/goal-proposals/`.
31
+ - Never ask the developer a question, request permission, or wait for input. Decide with what the
32
+ repository shows, finish in this one turn, and write the file.
33
+ - The delivered count is at most `requested`. Fewer significant findings than requested is a
34
+ correct answer, with a non-empty `shortfall` reason. Never pad the list, never invent filler,
35
+ and never repeat a finding to reach the count.
36
+ - `knownTitles` is the normalized form of every existing Auto Scout issue title and every open
37
+ issue title; `draftGoalHeadings` is every draft goal heading. Never restate, paraphrase, or
38
+ split one of those findings: the worker drops such an item and records it.
39
+
40
+ ## Significance
41
+
42
+ Every item carries an integer `significance` from 1 to 5 and a non-empty `significanceReason`.
43
+ Score honestly; the worker files only items scored 4 or 5, so an inflated score wastes a filing
44
+ slot and an honest 3 is a correct answer.
45
+
46
+ - **4 or 5 requires a named, observable impact.** Name one of: a reproducible defect, a real
47
+ failure mode (an input, state, or ordering that makes the code do the wrong thing), or a
48
+ measured structural cost (a duplicated rule whose copies already disagree, a measured build or
49
+ runtime cost, a boundary with no test that would let a real regression pass).
50
+ - 5: the impact is reachable now and correctness- or data-affecting.
51
+ - 4: the impact is real and named, but narrower or latent.
52
+ - **3:** a real observation with no observable impact named yet — a latent inconsistency, an
53
+ unexercised cleanup, a structural preference. Do not file it.
54
+ - **2 or 1:** polishing code that is already correct, style, formatting, comment wording, a
55
+ speculative rewrite, or a generic "add tests" item with no named gap. Never a deliverable.
56
+
57
+ `significanceReason` states the impact in one or two sentences. "It would be cleaner" is not an
58
+ impact. "`parseA` and `parseB` disagree on a trailing slash, so a path with one is rejected by
59
+ the first and accepted by the second" is.
60
+
61
+ ## What to survey
62
+
63
+ Read widely enough to judge significance, then look for:
64
+
65
+ - duplication: the same logic, rule, or literal in several places that should be one;
66
+ - unclear or inconsistent naming: one concept under two names, or a name that promises something
67
+ the code does not do;
68
+ - entities that should merge or split: a module doing two jobs, or two modules that only work
69
+ together;
70
+ - long or tangled units: a function or component whose branches hide its intent;
71
+ - missing or weak tests: a named behavior, boundary, or failure path with no test, or a test that
72
+ cannot fail;
73
+ - unhandled inputs and failures: an unchecked external value, a filesystem or network call with no
74
+ failure path, a promise nobody awaits;
75
+ - swallowed errors: a `catch` that discards the reason, a fallback that hides a real failure;
76
+ - race or ordering hazards: shared state written from two paths, work that assumes an order the
77
+ code does not enforce.
78
+
79
+ Prefer one high-impact finding over three easy ones. A finding earns its place only if fixing it
80
+ changes behavior, correctness, or the cost of the next change.
81
+
82
+ ## What never ships
83
+
84
+ Do not propose: style or formatting preferences; comment-only changes; speculative rewrites with
85
+ no defect named; a dependency, framework, or architecture swap as an end in itself; a generic
86
+ "add tests" item with no named gap; or anything already filed, open as an issue, or present as a
87
+ draft goal. Those titles are in the request; never restate them, and never propose a paraphrase
88
+ of one.
89
+
90
+ Every item must cite at least one concrete `path:lines` inside the repository and at least one
91
+ acceptance criterion an implementer can verify by running something.
92
+
93
+ ## Output
94
+
95
+ Write `<scan-dir>/recommendations.json` as one JSON object:
96
+
97
+ ```json
98
+ {
99
+ "recommendations": [
100
+ {
101
+ "category": "clarity",
102
+ "title": "One line, at most 200 characters, no trailing period",
103
+ "summary": "What is wrong and why it matters, in two or three sentences.",
104
+ "impact": "What improving it changes for the next developer or for correctness.",
105
+ "significance": 4,
106
+ "significanceReason": "The named defect or measured cost, in one or two sentences.",
107
+ "evidence": [
108
+ {
109
+ "path": "path/inside/the/repository.ts",
110
+ "lines": "120-148",
111
+ "quote": "A short verbatim excerpt from those lines."
112
+ }
113
+ ],
114
+ "proposedChange": "The change to make, concretely and without prescribing unrelated work.",
115
+ "files": ["path/inside/the/repository.ts"],
116
+ "acceptanceCriteria": [
117
+ "A statement that can be checked by reading the code or running the test suite."
118
+ ]
119
+ }
120
+ ],
121
+ "shortfall": "Why fewer than the requested count were delivered, or omit it when the count is met."
122
+ }
123
+ ```
124
+
125
+ Field rules:
126
+
127
+ - `category` is exactly one of `clarity`, `structure`, `naming`, `tests`, `robustness`,
128
+ `correctness`.
129
+ - `title` is one line, at most 200 characters, specific enough to be an issue title.
130
+ - `summary`, `proposedChange`, and every `acceptanceCriteria` entry are non-empty.
131
+ - `significance` is an integer from 1 through 5; `significanceReason` is non-empty and names the
132
+ impact at 4 or 5.
133
+ - `evidence` has at least one entry. `path` is repository-relative with `/` separators, names an
134
+ existing regular file outside the excluded roots, and `lines` is `N` or `N-M` inside that
135
+ file's real line count. `quote` is optional and verbatim.
136
+ - `files` is non-empty and every entry also appears in `evidence[].path`.
137
+ - `recommendations` holds at most `requested` items.
138
+ - `shortfall`, when present, is a non-empty sentence naming why the repository does not offer
139
+ more significant findings.
140
+
141
+ A missing or out-of-range score, or a missing reason, rejects the whole answer and files nothing.
142
+ Do not print the JSON as your answer; write it to the file and end the turn. If the repository
143
+ affords no significant finding, write `{"recommendations": [], "shortfall": "…"}`.
Binary file
Binary file
@@ -0,0 +1,6 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 64 64" width="64" height="64" role="img" aria-label="Devboard">
2
+ <rect width="64" height="64" rx="14" fill="#1f6feb" />
3
+ <rect x="13" y="26" width="10" height="24" rx="3.5" fill="#ffffff" fill-opacity="0.72" />
4
+ <rect x="27" y="14" width="10" height="36" rx="3.5" fill="#ffffff" />
5
+ <rect x="41" y="20" width="10" height="30" rx="3.5" fill="#ffffff" fill-opacity="0.86" />
6
+ </svg>