@theodo/bernard 0.1.0-beta.0 → 0.1.0-beta.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 (260) hide show
  1. package/README.md +13 -12
  2. package/core/README.md +1 -1
  3. package/core/agents/review-quality.md +13 -12
  4. package/core/agents/review-security-bugs.md +1 -1
  5. package/core/agents/review-tests.md +1 -1
  6. package/core/coder/template/main.tf +14 -1
  7. package/core/skills/pull-request/SKILL.md +17 -7
  8. package/core/skills/pull-request/ci-fixer.md +3 -3
  9. package/dist/bin.mjs +4979 -3176
  10. package/dist/{config-BawD0TwQ.mjs → config-DtCwJKWe.mjs} +70 -6
  11. package/dist/config.d.mts +72 -4
  12. package/dist/config.mjs +1 -1
  13. package/dist/docs/404.html +23 -0
  14. package/dist/docs/CLAUDE.html +30 -0
  15. package/dist/docs/CONTEXT.html +30 -0
  16. package/dist/docs/CONTRIBUTING.html +62 -0
  17. package/dist/docs/assets/CLAUDE.md.BLSB-5gK.js +1 -0
  18. package/dist/docs/assets/CLAUDE.md.BLSB-5gK.lean.js +1 -0
  19. package/dist/docs/assets/CONTEXT.md.BovnvMGK.js +1 -0
  20. package/dist/docs/assets/CONTEXT.md.BovnvMGK.lean.js +1 -0
  21. package/dist/docs/assets/CONTRIBUTING.md.DwJsKrz3.js +33 -0
  22. package/dist/docs/assets/CONTRIBUTING.md.DwJsKrz3.lean.js +1 -0
  23. package/dist/docs/assets/app.URmpjWHb.js +312 -0
  24. package/dist/docs/assets/bernard.RCgrvDdX.svg +94 -0
  25. package/dist/docs/assets/chunks/@localSearchIndexroot.Ylq685Cw.js +1 -0
  26. package/dist/docs/assets/chunks/VPLocalSearchBox.C8gcRVj0.js +9 -0
  27. package/dist/docs/assets/chunks/dagre-GXQ25YYZ.2qvw8AqH.js +4 -0
  28. package/dist/docs/assets/chunks/framework.hgjl6W6o.js +20 -0
  29. package/dist/docs/assets/chunks/sizeCapture-INFHLROL.BEqL2zFi.js +1 -0
  30. package/dist/docs/assets/chunks/stateDiagram-v2-MP3YSRHH.3X7wNXKX.js +231 -0
  31. package/dist/docs/assets/chunks/theme.Cksh_UJH.js +2 -0
  32. package/dist/docs/assets/chunks/virtual_mermaid-config.DDnGl6nM.js +1 -0
  33. package/dist/docs/assets/core_README.md.DyxYsikc.js +15 -0
  34. package/dist/docs/assets/core_README.md.DyxYsikc.lean.js +1 -0
  35. package/dist/docs/assets/demo_README.md.Cpi2pUU9.js +18 -0
  36. package/dist/docs/assets/demo_README.md.Cpi2pUU9.lean.js +1 -0
  37. package/dist/docs/assets/docs_adr_0001-what-the-core-is-built-for.md.BxOoMjST.js +1 -0
  38. package/dist/docs/assets/docs_adr_0001-what-the-core-is-built-for.md.BxOoMjST.lean.js +1 -0
  39. package/dist/docs/assets/docs_adr_0002-which-harness-a-project-runs-on.md.2GwF-nj0.js +1 -0
  40. package/dist/docs/assets/docs_adr_0002-which-harness-a-project-runs-on.md.2GwF-nj0.lean.js +1 -0
  41. package/dist/docs/assets/docs_adr_0003-how-core-content-reaches-each-harness.md.BMWE00Mf.js +1 -0
  42. package/dist/docs/assets/docs_adr_0003-how-core-content-reaches-each-harness.md.BMWE00Mf.lean.js +1 -0
  43. package/dist/docs/assets/docs_adr_0004-how-the-core-uses-external-tools.md.B7dtE7MB.js +1 -0
  44. package/dist/docs/assets/docs_adr_0004-how-the-core-uses-external-tools.md.B7dtE7MB.lean.js +1 -0
  45. package/dist/docs/assets/docs_adr_0005-what-drives-the-pipeline.md.DGn0CJeq.js +1 -0
  46. package/dist/docs/assets/docs_adr_0005-what-drives-the-pipeline.md.DGn0CJeq.lean.js +1 -0
  47. package/dist/docs/assets/docs_adr_0006-what-steps-hand-off-to-each-other.md.BflT5ugJ.js +1 -0
  48. package/dist/docs/assets/docs_adr_0006-what-steps-hand-off-to-each-other.md.BflT5ugJ.lean.js +1 -0
  49. package/dist/docs/assets/docs_adr_0007-how-humans-take-part-in-the-pipeline.md.CNX3gUD-.js +1 -0
  50. package/dist/docs/assets/docs_adr_0007-how-humans-take-part-in-the-pipeline.md.CNX3gUD-.lean.js +1 -0
  51. package/dist/docs/assets/docs_adr_0008-where-a-steps-reviewers-run.md.aGbaBOpB.js +1 -0
  52. package/dist/docs/assets/docs_adr_0008-where-a-steps-reviewers-run.md.aGbaBOpB.lean.js +1 -0
  53. package/dist/docs/assets/docs_adr_0009-where-pipeline-state-and-handoffs-live.md.C3tKmV-E.js +1 -0
  54. package/dist/docs/assets/docs_adr_0009-where-pipeline-state-and-handoffs-live.md.C3tKmV-E.lean.js +1 -0
  55. package/dist/docs/assets/docs_adr_0010-how-a-project-adapts-the-core.md.Bp7N6tUE.js +1 -0
  56. package/dist/docs/assets/docs_adr_0010-how-a-project-adapts-the-core.md.Bp7N6tUE.lean.js +1 -0
  57. package/dist/docs/assets/docs_adr_0011-how-the-factory-is-packaged-and-versioned.md.BBJIwnqa.js +1 -0
  58. package/dist/docs/assets/docs_adr_0011-how-the-factory-is-packaged-and-versioned.md.BBJIwnqa.lean.js +1 -0
  59. package/dist/docs/assets/docs_adr_0012-how-a-steps-failures-are-told-apart-and-routed.md.uCyrBfug.js +1 -0
  60. package/dist/docs/assets/docs_adr_0012-how-a-steps-failures-are-told-apart-and-routed.md.uCyrBfug.lean.js +1 -0
  61. package/dist/docs/assets/docs_adr_0013-when-code-lands.md.oXgiobfz.js +1 -0
  62. package/dist/docs/assets/docs_adr_0013-when-code-lands.md.oXgiobfz.lean.js +1 -0
  63. package/dist/docs/assets/docs_adr_0014-what-a-step-may-change.md.Zslg3bnJ.js +1 -0
  64. package/dist/docs/assets/docs_adr_0014-what-a-step-may-change.md.Zslg3bnJ.lean.js +1 -0
  65. package/dist/docs/assets/docs_adr_0015-how-a-project-shapes-its-ticket-flow.md.DNHMxwIT.js +1 -0
  66. package/dist/docs/assets/docs_adr_0015-how-a-project-shapes-its-ticket-flow.md.DNHMxwIT.lean.js +1 -0
  67. package/dist/docs/assets/docs_adr_0016-which-core-the-factory-repo-runs.md.CLN6LqBZ.js +1 -0
  68. package/dist/docs/assets/docs_adr_0016-which-core-the-factory-repo-runs.md.CLN6LqBZ.lean.js +1 -0
  69. package/dist/docs/assets/docs_adr_0017-where-a-tickets-record-lives.md.jjUeM-ex.js +1 -0
  70. package/dist/docs/assets/docs_adr_0017-where-a-tickets-record-lives.md.jjUeM-ex.lean.js +1 -0
  71. package/dist/docs/assets/docs_adr_0018-the-products-name.md.6xaX9vDs.js +1 -0
  72. package/dist/docs/assets/docs_adr_0018-the-products-name.md.6xaX9vDs.lean.js +1 -0
  73. package/dist/docs/assets/docs_adr_0019-how-a-finding-is-answered-and-judged.md.CKKoO9-3.js +1 -0
  74. package/dist/docs/assets/docs_adr_0019-how-a-finding-is-answered-and-judged.md.CKKoO9-3.lean.js +1 -0
  75. package/dist/docs/assets/docs_adr_0020-how-an-interrupted-run-resumes.md.DTIP-MBK.js +1 -0
  76. package/dist/docs/assets/docs_adr_0020-how-an-interrupted-run-resumes.md.DTIP-MBK.lean.js +1 -0
  77. package/dist/docs/assets/docs_adr_0021-how-a-step-runs-in-its-workspace.md.B2r3-FPg.js +1 -0
  78. package/dist/docs/assets/docs_adr_0021-how-a-step-runs-in-its-workspace.md.B2r3-FPg.lean.js +1 -0
  79. package/dist/docs/assets/docs_adr_0022-who-names-the-branches.md.DaVk8X0i.js +1 -0
  80. package/dist/docs/assets/docs_adr_0022-who-names-the-branches.md.DaVk8X0i.lean.js +1 -0
  81. package/dist/docs/assets/docs_adr_0023-how-a-version-ships-before-npm.md.C7-wuCbq.js +1 -0
  82. package/dist/docs/assets/docs_adr_0023-how-a-version-ships-before-npm.md.C7-wuCbq.lean.js +1 -0
  83. package/dist/docs/assets/docs_adr_0024-how-the-config-type-carries-its-docs.md.CQmwhWXs.js +1 -0
  84. package/dist/docs/assets/docs_adr_0024-how-the-config-type-carries-its-docs.md.CQmwhWXs.lean.js +1 -0
  85. package/dist/docs/assets/docs_adr_0025-how-a-steps-handoff-is-written-and-checked.md.CgXYdF2v.js +1 -0
  86. package/dist/docs/assets/docs_adr_0025-how-a-steps-handoff-is-written-and-checked.md.CgXYdF2v.lean.js +1 -0
  87. package/dist/docs/assets/docs_adr_0026-support-for-github-copilot.md.DJsawm-R.js +1 -0
  88. package/dist/docs/assets/docs_adr_0026-support-for-github-copilot.md.DJsawm-R.lean.js +1 -0
  89. package/dist/docs/assets/docs_adr_0027-which-forge-a-project-is-on.md.CY0qy9xh.js +1 -0
  90. package/dist/docs/assets/docs_adr_0027-which-forge-a-project-is-on.md.CY0qy9xh.lean.js +1 -0
  91. package/dist/docs/assets/docs_adr_0028-several-ticket-flows-in-one-pipeline.md.oxffo2qg.js +1 -0
  92. package/dist/docs/assets/docs_adr_0028-several-ticket-flows-in-one-pipeline.md.oxffo2qg.lean.js +1 -0
  93. package/dist/docs/assets/docs_adr_0029-the-branch-a-feature-works-on.md.CrgkP6YJ.js +1 -0
  94. package/dist/docs/assets/docs_adr_0029-the-branch-a-feature-works-on.md.CrgkP6YJ.lean.js +1 -0
  95. package/dist/docs/assets/docs_adr_0030-a-runner-without-coder.md.CW8sF7jK.js +1 -0
  96. package/dist/docs/assets/docs_adr_0030-a-runner-without-coder.md.CW8sF7jK.lean.js +1 -0
  97. package/dist/docs/assets/docs_adr_0031-how-the-run-viewer-reads-its-runs.md.opQYnVF2.js +1 -0
  98. package/dist/docs/assets/docs_adr_0031-how-the-run-viewer-reads-its-runs.md.opQYnVF2.lean.js +1 -0
  99. package/dist/docs/assets/docs_adr_0032-how-a-project-gets-the-viewer.md.DB9NjYJf.js +1 -0
  100. package/dist/docs/assets/docs_adr_0032-how-a-project-gets-the-viewer.md.DB9NjYJf.lean.js +1 -0
  101. package/dist/docs/assets/docs_adr_0033-the-repos-license.md.NPlkrPj8.js +1 -0
  102. package/dist/docs/assets/docs_adr_0033-the-repos-license.md.NPlkrPj8.lean.js +1 -0
  103. package/dist/docs/assets/docs_adr_0034-how-code-review-launches-its-reviewers.md.DSNpkfaL.js +1 -0
  104. package/dist/docs/assets/docs_adr_0034-how-code-review-launches-its-reviewers.md.DSNpkfaL.lean.js +1 -0
  105. package/dist/docs/assets/docs_adr_0035-how-the-package-is-published.md.C1f4B5eb.js +1 -0
  106. package/dist/docs/assets/docs_adr_0035-how-the-package-is-published.md.C1f4B5eb.lean.js +1 -0
  107. package/dist/docs/assets/docs_adr_0036-what-the-cores-pull-request-skill-does.md.op39HLAT.js +1 -0
  108. package/dist/docs/assets/docs_adr_0036-what-the-cores-pull-request-skill-does.md.op39HLAT.lean.js +1 -0
  109. package/dist/docs/assets/docs_adr_0037-how-a-team-reads-the-factorys-documentation.md.Dar_Xo4t.js +1 -0
  110. package/dist/docs/assets/docs_adr_0037-how-a-team-reads-the-factorys-documentation.md.Dar_Xo4t.lean.js +1 -0
  111. package/dist/docs/assets/docs_adr_0038-where-adapters-live.md.CkVD3riv.js +1 -0
  112. package/dist/docs/assets/docs_adr_0038-where-adapters-live.md.CkVD3riv.lean.js +1 -0
  113. package/dist/docs/assets/docs_adr_0039-the-repos-license.md.C_rraWpb.js +1 -0
  114. package/dist/docs/assets/docs_adr_0039-the-repos-license.md.C_rraWpb.lean.js +1 -0
  115. package/dist/docs/assets/docs_adr_0040-how-a-version-is-released.md.CCdwC07z.js +1 -0
  116. package/dist/docs/assets/docs_adr_0040-how-a-version-is-released.md.CCdwC07z.lean.js +1 -0
  117. package/dist/docs/assets/docs_adr_0041-who-opens-the-features-pull-request.md.qLu9WLaG.js +1 -0
  118. package/dist/docs/assets/docs_adr_0041-who-opens-the-features-pull-request.md.qLu9WLaG.lean.js +1 -0
  119. package/dist/docs/assets/docs_adr_0042-how-secrets-are-kept-out-of-committed-records.md.DJWazI4H.js +1 -0
  120. package/dist/docs/assets/docs_adr_0042-how-secrets-are-kept-out-of-committed-records.md.DJWazI4H.lean.js +1 -0
  121. package/dist/docs/assets/docs_getting-started.md.BpQFS8Gr.js +12 -0
  122. package/dist/docs/assets/docs_getting-started.md.BpQFS8Gr.lean.js +1 -0
  123. package/dist/docs/assets/docs_github.md.D4gkW71G.js +1 -0
  124. package/dist/docs/assets/docs_github.md.D4gkW71G.lean.js +1 -0
  125. package/dist/docs/assets/docs_overlay.md.DoWVb6OM.js +35 -0
  126. package/dist/docs/assets/docs_overlay.md.DoWVb6OM.lean.js +1 -0
  127. package/dist/docs/assets/docs_pipeline.md.DdHywWSk.js +1 -0
  128. package/dist/docs/assets/docs_pipeline.md.DdHywWSk.lean.js +1 -0
  129. package/dist/docs/assets/docs_recipes.md.8Xf6BsRA.js +45 -0
  130. package/dist/docs/assets/docs_recipes.md.8Xf6BsRA.lean.js +1 -0
  131. package/dist/docs/assets/fixtures_README.md.DzbQ0hft.js +1 -0
  132. package/dist/docs/assets/fixtures_README.md.DzbQ0hft.lean.js +1 -0
  133. package/dist/docs/assets/index.md.DHgL6CzS.js +28 -0
  134. package/dist/docs/assets/index.md.DHgL6CzS.lean.js +1 -0
  135. package/dist/docs/assets/inter-italic-cyrillic-ext.r48I6akx.woff2 +0 -0
  136. package/dist/docs/assets/inter-italic-cyrillic.By2_1cv3.woff2 +0 -0
  137. package/dist/docs/assets/inter-italic-greek-ext.1u6EdAuj.woff2 +0 -0
  138. package/dist/docs/assets/inter-italic-greek.DJ8dCoTZ.woff2 +0 -0
  139. package/dist/docs/assets/inter-italic-latin-ext.CN1xVJS-.woff2 +0 -0
  140. package/dist/docs/assets/inter-italic-latin.C2AdPX0b.woff2 +0 -0
  141. package/dist/docs/assets/inter-italic-vietnamese.BSbpV94h.woff2 +0 -0
  142. package/dist/docs/assets/inter-roman-cyrillic-ext.BBPuwvHQ.woff2 +0 -0
  143. package/dist/docs/assets/inter-roman-cyrillic.C5lxZ8CY.woff2 +0 -0
  144. package/dist/docs/assets/inter-roman-greek-ext.CqjqNYQ-.woff2 +0 -0
  145. package/dist/docs/assets/inter-roman-greek.BBVDIX6e.woff2 +0 -0
  146. package/dist/docs/assets/inter-roman-latin-ext.4ZJIpNVo.woff2 +0 -0
  147. package/dist/docs/assets/inter-roman-latin.Di8DUHzh.woff2 +0 -0
  148. package/dist/docs/assets/inter-roman-vietnamese.BjW4sHH5.woff2 +0 -0
  149. package/dist/docs/assets/packages_docs_README.md.PV1a27nC.js +3 -0
  150. package/dist/docs/assets/packages_docs_README.md.PV1a27nC.lean.js +1 -0
  151. package/dist/docs/assets/packages_viewer_README.md.BynKZSdN.js +3 -0
  152. package/dist/docs/assets/packages_viewer_README.md.BynKZSdN.lean.js +1 -0
  153. package/dist/docs/assets/style.C3E8Ltp6.css +1 -0
  154. package/dist/docs/bernard.svg +94 -0
  155. package/dist/docs/core/README.html +44 -0
  156. package/dist/docs/demo/README.html +47 -0
  157. package/dist/docs/docs/adr/0001-what-the-core-is-built-for.html +30 -0
  158. package/dist/docs/docs/adr/0002-which-harness-a-project-runs-on.html +30 -0
  159. package/dist/docs/docs/adr/0003-how-core-content-reaches-each-harness.html +30 -0
  160. package/dist/docs/docs/adr/0004-how-the-core-uses-external-tools.html +30 -0
  161. package/dist/docs/docs/adr/0005-what-drives-the-pipeline.html +30 -0
  162. package/dist/docs/docs/adr/0006-what-steps-hand-off-to-each-other.html +30 -0
  163. package/dist/docs/docs/adr/0007-how-humans-take-part-in-the-pipeline.html +30 -0
  164. package/dist/docs/docs/adr/0008-where-a-steps-reviewers-run.html +30 -0
  165. package/dist/docs/docs/adr/0009-where-pipeline-state-and-handoffs-live.html +30 -0
  166. package/dist/docs/docs/adr/0010-how-a-project-adapts-the-core.html +30 -0
  167. package/dist/docs/docs/adr/0011-how-the-factory-is-packaged-and-versioned.html +30 -0
  168. package/dist/docs/docs/adr/0012-how-a-steps-failures-are-told-apart-and-routed.html +30 -0
  169. package/dist/docs/docs/adr/0013-when-code-lands.html +30 -0
  170. package/dist/docs/docs/adr/0014-what-a-step-may-change.html +30 -0
  171. package/dist/docs/docs/adr/0015-how-a-project-shapes-its-ticket-flow.html +30 -0
  172. package/dist/docs/docs/adr/0016-which-core-the-factory-repo-runs.html +30 -0
  173. package/dist/docs/docs/adr/0017-where-a-tickets-record-lives.html +30 -0
  174. package/dist/docs/docs/adr/0018-the-products-name.html +30 -0
  175. package/dist/docs/docs/adr/0019-how-a-finding-is-answered-and-judged.html +30 -0
  176. package/dist/docs/docs/adr/0020-how-an-interrupted-run-resumes.html +30 -0
  177. package/dist/docs/docs/adr/0021-how-a-step-runs-in-its-workspace.html +30 -0
  178. package/dist/docs/docs/adr/0022-who-names-the-branches.html +30 -0
  179. package/dist/docs/docs/adr/0023-how-a-version-ships-before-npm.html +30 -0
  180. package/dist/docs/docs/adr/0024-how-the-config-type-carries-its-docs.html +30 -0
  181. package/dist/docs/docs/adr/0025-how-a-steps-handoff-is-written-and-checked.html +30 -0
  182. package/dist/docs/docs/adr/0026-support-for-github-copilot.html +30 -0
  183. package/dist/docs/docs/adr/0027-which-forge-a-project-is-on.html +30 -0
  184. package/dist/docs/docs/adr/0028-several-ticket-flows-in-one-pipeline.html +30 -0
  185. package/dist/docs/docs/adr/0029-the-branch-a-feature-works-on.html +30 -0
  186. package/dist/docs/docs/adr/0030-a-runner-without-coder.html +30 -0
  187. package/dist/docs/docs/adr/0031-how-the-run-viewer-reads-its-runs.html +30 -0
  188. package/dist/docs/docs/adr/0032-how-a-project-gets-the-viewer.html +30 -0
  189. package/dist/docs/docs/adr/0033-the-repos-license.html +30 -0
  190. package/dist/docs/docs/adr/0034-how-code-review-launches-its-reviewers.html +30 -0
  191. package/dist/docs/docs/adr/0035-how-the-package-is-published.html +30 -0
  192. package/dist/docs/docs/adr/0036-what-the-cores-pull-request-skill-does.html +30 -0
  193. package/dist/docs/docs/adr/0037-how-a-team-reads-the-factorys-documentation.html +30 -0
  194. package/dist/docs/docs/adr/0038-where-adapters-live.html +30 -0
  195. package/dist/docs/docs/adr/0039-the-repos-license.html +30 -0
  196. package/dist/docs/docs/adr/0040-how-a-version-is-released.html +30 -0
  197. package/dist/docs/docs/adr/0041-who-opens-the-features-pull-request.html +30 -0
  198. package/dist/docs/docs/adr/0042-how-secrets-are-kept-out-of-committed-records.html +30 -0
  199. package/dist/docs/docs/getting-started.html +41 -0
  200. package/dist/docs/docs/github.html +30 -0
  201. package/dist/docs/docs/overlay.html +64 -0
  202. package/dist/docs/docs/pipeline.html +30 -0
  203. package/dist/docs/docs/recipes.html +74 -0
  204. package/dist/docs/fixtures/README.html +30 -0
  205. package/dist/docs/hashmap.json +1 -0
  206. package/dist/docs/index.html +57 -0
  207. package/dist/docs/packages/docs/README.html +32 -0
  208. package/dist/docs/packages/viewer/README.html +32 -0
  209. package/dist/docs/vp-icons.css +0 -0
  210. package/dist/viewer/assets/Heading-C5Va5XMQ.js +1 -0
  211. package/dist/viewer/assets/SelectionIndicator-DxHiKGW_.js +1 -0
  212. package/dist/viewer/assets/alert-BI2omIo2.js +1 -0
  213. package/dist/viewer/assets/attempt-Dunc67N6.js +1 -0
  214. package/dist/viewer/assets/card-IsZ2ZhSn.js +1 -0
  215. package/dist/viewer/assets/{chunk-WQQL4CDK-DSpW9ZO8.js → chunk-WQQL4CDK-Bd4bkond.js} +1 -1
  216. package/dist/viewer/assets/context-CzP3x3DO.js +7 -0
  217. package/dist/viewer/assets/{dagre-NK4GIZVX-BzzW8pOj.js → dagre-NK4GIZVX-Bhq8pl9Y.js} +1 -1
  218. package/dist/viewer/assets/{index-CnzUhLCJ.css → index-B90XVeY-.css} +1 -1
  219. package/dist/viewer/assets/index-tH-KNwJL.js +10 -0
  220. package/dist/viewer/assets/{mermaid.core-D1FXi6mg.js → mermaid.core-I426eCuN.js} +4 -4
  221. package/dist/viewer/assets/pipeline-Hw_7tocN.js +1 -0
  222. package/dist/viewer/assets/routes-BOl7_JgK.js +1 -0
  223. package/dist/viewer/assets/runs._runId-D4q1mLCt.js +6 -0
  224. package/dist/viewer/assets/runs._runId.index-B-woIhKA.js +1 -0
  225. package/dist/viewer/assets/runs._runId.machines-SkWqrTI6.js +2 -0
  226. package/dist/viewer/assets/runs._runId.sessions-DBVWEbLY.js +1 -0
  227. package/dist/viewer/assets/{stateDiagram-v2-A6IESKWZ-J9KnYRFT.js → stateDiagram-v2-A6IESKWZ-DUwIje_A.js} +1 -1
  228. package/dist/viewer/assets/surface-B6LupC_E.js +1 -0
  229. package/dist/viewer/assets/table-B8t5lQz5.js +1 -0
  230. package/dist/viewer/assets/useEvent-DXj38gmC.js +1 -0
  231. package/dist/viewer/assets/useToggleState-D_NUC1vr.js +2 -0
  232. package/dist/viewer/index.html +5 -5
  233. package/fixtures/starters/azure-devops/.factory/factory.config.ts +2 -7
  234. package/fixtures/starters/azure-devops/.factory/factory.lock.json +7 -8
  235. package/fixtures/starters/github/.factory/factory.config.ts +2 -0
  236. package/fixtures/starters/github/.factory/factory.lock.json +6 -7
  237. package/fixtures/starters/gitlab/.factory/factory.config.ts +9 -0
  238. package/fixtures/starters/gitlab/.factory/factory.lock.json +19 -0
  239. package/fixtures/starters/gitlab/.factory/slots/checks.command.md +1 -0
  240. package/fixtures/starters/gitlab/.factory/slots/context.sources.md +3 -0
  241. package/fixtures/starters/gitlab/.factory/slots/review.detectors.md +5 -0
  242. package/package.json +9 -7
  243. package/core/skills/pull-request/scripts/pr-drive.sh +0 -208
  244. package/dist/viewer/assets/Heading-Dm1Q0gV2.js +0 -1
  245. package/dist/viewer/assets/api-C4lMOGdC.js +0 -7
  246. package/dist/viewer/assets/attempt-lbW5voCR.js +0 -1
  247. package/dist/viewer/assets/card-CtJKot3P.js +0 -1
  248. package/dist/viewer/assets/context-DEB-Y3Iz.js +0 -1
  249. package/dist/viewer/assets/index-Co9KwXRI.js +0 -10
  250. package/dist/viewer/assets/jsx-runtime-CkXRJ162.js +0 -1
  251. package/dist/viewer/assets/pipeline-B-myvM6K.js +0 -1
  252. package/dist/viewer/assets/routes-BzvVN6y-.js +0 -1
  253. package/dist/viewer/assets/runs._runId-BVT2VH_w.js +0 -6
  254. package/dist/viewer/assets/runs._runId.index-C3bbzwAC.js +0 -1
  255. package/dist/viewer/assets/runs._runId.machines-Cj21KdLd.js +0 -2
  256. package/dist/viewer/assets/runs._runId.sessions-Tg6Ou3_9.js +0 -1
  257. package/dist/viewer/assets/table-DzduWiYu.js +0 -1
  258. package/dist/viewer/assets/useEvent-CtTfOmE7.js +0 -1
  259. package/dist/viewer/assets/useToggleState-DfzJwOaN.js +0 -2
  260. package/fixtures/starters/azure-devops/.factory/skills/pull-request/SKILL.md +0 -29
@@ -0,0 +1,33 @@
1
+ import{_ as s,o as a,c as t,a3 as n}from"./chunks/framework.hgjl6W6o.js";const k=JSON.parse('{"title":"Contributing","description":"","frontmatter":{},"headers":[],"relativePath":"CONTRIBUTING.md","filePath":"CONTRIBUTING.md"}'),o={name:"CONTRIBUTING.md"};function i(r,e,c,p,d,h){return a(),t("div",null,[...e[0]||(e[0]=[n(`<h1 id="contributing" tabindex="-1">Contributing <a class="header-anchor" href="#contributing" aria-label="Permalink to &quot;Contributing&quot;">​</a></h1><p>This guide is for changing the factory itself. To set it up in a project, start from <a href="./docs/getting-started.html">docs/getting-started.md</a>.</p><h2 id="set-up" tabindex="-1">Set up <a class="header-anchor" href="#set-up" aria-label="Permalink to &quot;Set up&quot;">​</a></h2><p>Node 24, pnpm and <code>jq</code>, then <code>pnpm install</code>. The tests and the worktree hook need <code>jq</code>. To try your clone&#39;s CLI on a project, run <code>pnpm bernard &lt;command&gt; --cwd &lt;project&gt;</code>. To try it as a project gets it, <code>pnpm pack</code>, then <code>pnpm --dir .factory --ignore-workspace add -E &lt;tarball&gt;</code> from the project&#39;s root.</p><h2 id="checks" tabindex="-1">Checks <a class="header-anchor" href="#checks" aria-label="Permalink to &quot;Checks&quot;">​</a></h2><p>CI runs them on every pull request (<a href="https://github.com/theodo-group/bernard/blob/v0.1.0-beta.1/.github/workflows/ci.yml" target="_blank" rel="noreferrer">ci.yml</a>):</p><div class="language-sh vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">sh</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">pnpm</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> lint</span><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D;"> # Biome; pnpm format fixes it</span></span>
2
+ <span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">pnpm</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> typecheck</span></span>
3
+ <span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">pnpm</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> test</span></span>
4
+ <span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">pnpm</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> check:consumers</span><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D;"> # knip: code lands only when production source uses it (ADR-0013)</span></span>
5
+ <span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">pnpm</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> check:knip-baseline</span><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D;"> # the exceptions in knip.json only shrink</span></span>
6
+ <span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">pnpm</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> check:sync</span><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D;"> # what bernard sync generates, here and in fixtures/, is up to date</span></span>
7
+ <span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">pnpm</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> check:docs</span><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D;"> # docs/pipeline.md matches the state machines, and the documentation site builds with no dead link</span></span>
8
+ <span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">pnpm</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> check:package</span><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D;"> # the package installs and runs in a project outside this repo</span></span></code></pre></div><p>When <code>check:sync</code> fails, run <code>pnpm sync:all</code>; when <code>check:docs</code> fails on the pipeline, <code>pnpm docs:pipeline</code>. Commit what they write. When it fails on a link, fix the link: <a href="./packages/docs/README.html">packages/docs/README.md</a> says how the site reads them.</p><p>The demo runs the factory end to end, on a local Coder or on the local runner: <a href="./demo/README.html">demo/README.md</a>.</p><h2 id="run-the-factory-on-this-repo" tabindex="-1">Run the factory on this repo <a class="header-anchor" href="#run-the-factory-on-this-repo" aria-label="Permalink to &quot;Run the factory on this repo&quot;">​</a></h2><p><code>bernard run</code> runs each ticket in a workspace of a local Coder, cloned from <code>main</code> on GitHub: a ticket&#39;s changes to the factory reach the workspaces once merged. The runner sets <code>local: true</code>, so the run starts that Coder in Docker, signs the Coder CLI in to it and pushes the reference template as <code>ai-mod-factory</code> (<a href="./docs/recipes.html#a-local-coder">docs/recipes.md</a>).</p><p>This repo&#39;s <code>.factory/</code> runs bernard from its source: <code>pnpm --dir .factory --ignore-workspace install</code> once sets up <code>.factory/node_modules/.bin/bernard</code>.</p><div class="language-sh vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">sh</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">export</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> GH_TOKEN</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">=</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">&quot;$(</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">gh</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> auth token)&quot;</span><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D;"> # the workspaces clone, push and open pull requests with it</span></span>
9
+ <span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">export</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> CLAUDE_CODE_OAUTH_TOKEN</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">=</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">…</span></span>
10
+ <span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">.factory/node_modules/.bin/bernard</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> run</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> --feature</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> &lt;</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">issu</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">e</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">&gt;</span></span>
11
+ <span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">.factory/node_modules/.bin/bernard</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> view</span><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D;"> # follows it on http://localhost:4321, once \`pnpm build\` built the viewer and the docs</span></span></code></pre></div><p>The sessions get one Claude Code credential: <code>CLAUDE_CODE_OAUTH_TOKEN</code> when it is set, <code>ANTHROPIC_API_KEY</code> otherwise. <code>bernard run</code> tries it with a one-turn session first. One the API rejects, or none at all, starts <code>claude setup-token</code> at a terminal and refuses the run without one. A workspace whose agent is not ready within 5 minutes stops the run, with the <code>coder</code> command that fixes it, and one whose agent missed the Coder&#39;s connection timeout stops it at once.</p><p>To run on your machine without Coder, set <code>adapters.runner</code> in <code>.factory/factory.config.ts</code> to the local runner (ADR-0030): <code>{ type: &#39;local&#39;, worktree: { setup: &#39;pnpm install --frozen-lockfile&#39; } }</code>. The feature and each ticket then run in a git worktree under <code>tmp/factory/worktrees/</code>, from your local <code>main</code>, and your checkout is left as it is.</p><p>To work on the viewer itself, <code>pnpm dev:viewer</code> serves it with Vite on the runs in <code>tmp/factory/runs</code>, or in the folder <code>BERNARD_RUNS</code> names (<a href="./packages/viewer/README.html">packages/viewer/README.md</a>).</p><p>To work on the documentation, <code>pnpm dev:docs</code> serves the site live on <a href="http://localhost:5173/docs/" target="_blank" rel="noreferrer">http://localhost:5173/docs/</a>. Its pages are the markdown of this repo; a new page goes in the sidebar (<a href="./packages/docs/README.html">packages/docs/README.md</a>).</p><h2 id="the-package" tabindex="-1">The package <a class="header-anchor" href="#the-package" aria-label="Permalink to &quot;The package&quot;">​</a></h2><p>The root of this repo is the one package projects install, <code>@theodo/bernard</code> (ADR-0011). <code>pnpm build</code> bundles <code>packages/*</code> into <code>dist/</code> with tsdown (<a href="https://github.com/theodo-group/bernard/blob/v0.1.0-beta.1/tsdown.config.ts" target="_blank" rel="noreferrer">tsdown.config.ts</a>), and builds the viewer&#39;s page into <code>dist/viewer/</code> with Vite: its React packages are the viewer&#39;s <code>devDependencies</code>, inputs of that build, never installed by a project. It then builds the documentation site into <code>dist/docs/</code> with VitePress, a <code>devDependency</code> of <code>packages/docs</code> likewise (ADR-0037). The package ships all three; <code>files</code> in <code>package.json</code> adds <code>core/</code> and the starter overlays. The CLI finds them, and the module a project&#39;s config imports, through <a href="https://github.com/theodo-group/bernard/blob/v0.1.0-beta.1/packages/cli/src/package.ts" target="_blank" rel="noreferrer">packages/cli/src/package.ts</a>, from its source as from <code>dist/</code>.</p><p>A config field goes in the schema of <a href="https://github.com/theodo-group/bernard/blob/v0.1.0-beta.1/packages/contracts/src/config.ts" target="_blank" rel="noreferrer">packages/contracts/src/config.ts</a>, or of <code>pipeline.ts</code>, and in <code>FactoryConfigInput</code>, the documented type a project writes against: a type test fails while they differ (ADR-0024). Its row goes in the tables of <a href="./docs/overlay.html">docs/overlay.md</a>.</p><p>A third-party package the CLI imports goes in three places: the catalog of <code>pnpm-workspace.yaml</code>, which the workspace packages use, the root&#39;s <code>dependencies</code>, which a project installs, and <code>neverBundle</code> in <code>tsdown.config.ts</code>. The build fails on a package it would bundle instead.</p><p>An adapter, code tied to one outside tool, goes in <code>&lt;package&gt;/src/adapters/&lt;tool&gt;/</code>, one folder per tool. Code outside <code>adapters/</code> never imports one, and an adapter never imports another. Only <a href="https://github.com/theodo-group/bernard/blob/v0.1.0-beta.1/packages/cli/src/bin.ts" target="_blank" rel="noreferrer">bin.ts</a> wires them, through <code>createRunner</code>, <code>createTracker</code> and <code>createForge</code>, so a new adapter is a folder plus one branch there. Biome refuses such an import (ADR-0038). A file holds one concept, named by the file: its type, its schema and the functions that act on it. Utils files are exempt, and a file that needs a section comment to separate two ideas is two files.</p><p>A file imports relatively only inside the top-level folder of <code>src/</code> or <code>test/</code> it sits in. The rest of its package it reaches through the package&#39;s subpath import, <code>#&lt;package&gt;/</code>, which the <code>imports</code> of its <code>package.json</code> maps to <code>src/</code>: <code>#cli/runners/runner.ts</code>, never <code>../../runners/runner.ts</code>. Another package it imports by its name, declared in <code>package.json</code>. Biome refuses a relative import that climbs to the package root, with one pattern per folder depth: <code>../**</code> for the files of <code>src/</code>, <code>src/&lt;folder&gt;/</code> and <code>test/</code>, <code>../../**</code> for <code>src/adapters/&lt;tool&gt;/</code>. A folder nested deeper needs its own override in <a href="https://github.com/theodo-group/bernard/blob/v0.1.0-beta.1/biome.json" target="_blank" rel="noreferrer">biome.json</a>.</p><h2 id="release" tabindex="-1">Release <a class="header-anchor" href="#release" aria-label="Permalink to &quot;Release&quot;">​</a></h2><p>A version is published on npm, and a GitHub release of this repo holds its notes (ADR-0035).</p><ol><li>On a branch, run <code>pnpm release</code> and pick the next version. It writes it to <code>package.json</code> and runs <code>pnpm sync:all</code>, so the lock files record it.</li><li>Commit, open a pull request, and merge it.</li></ol><p>That is all: don&#39;t create a tag, and don&#39;t publish by hand. Once merged, the <a href="https://github.com/theodo-group/bernard/blob/v0.1.0-beta.1/.github/workflows/release.yml" target="_blank" rel="noreferrer">Release workflow</a> sees a version with no tag yet (ADR-0040). It checks the package, publishes the tarball <code>pnpm pack</code> writes on npm with npm&#39;s trusted publishing, then creates the GitHub release and the tag <code>vX.Y.Z</code> on the merge commit. A version with a suffix, such as <code>-beta.0</code>, is a pre-release, under the dist-tag <code>next</code>; any other under <code>latest</code>. The workflow then installs the version from npm, as a project does.</p><h2 id="how-a-run-fits-together" tabindex="-1">How a run fits together <a class="header-anchor" href="#how-a-run-fits-together" aria-label="Permalink to &quot;How a run fits together&quot;">​</a></h2><div class="language- vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang"></span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span>┌─ the machine that runs bernard ──────────────────────────────────────┐</span></span>
12
+ <span class="line"><span>│ CLI packages/cli the run&#39;s trace, to the telemetry port: │</span></span>
13
+ <span class="line"><span>│ │ for humans and bernard view, never replayed│</span></span>
14
+ <span class="line"><span>│ ▼ │</span></span>
15
+ <span class="line"><span>│ orchestrator packages/orchestrator, no I/O: the machines, the │</span></span>
16
+ <span class="line"><span>│ record&#39;s lines, and their replay on resume │</span></span>
17
+ <span class="line"><span>│ │ StepRunner port │ AppendRecord port │</span></span>
18
+ <span class="line"><span>│ ▼ ▼ │</span></span>
19
+ <span class="line"><span>│ runner adapters packages/cli/src/adapters/: coder/, local/, over │</span></span>
20
+ <span class="line"><span>│ the git scripts of runners/git.ts │</span></span>
21
+ <span class="line"><span>└────────┬─────────────────────────────────────────────────────────────┘</span></span>
22
+ <span class="line"><span> │ bash, or coder ssh</span></span>
23
+ <span class="line"><span>┌─ a working copy per ticket, and one for the feature ─────────────────┐</span></span>
24
+ <span class="line"><span>│ local: a git worktree · coder: a workspace │</span></span>
25
+ <span class="line"><span>│ a step a fresh harness session: writes code within its write │</span></span>
26
+ <span class="line"><span>│ scope, and its handoff in .pipeline/&lt;ticket&gt;/&lt;step&gt;-&lt;n&gt;/ │</span></span>
27
+ <span class="line"><span>│ the runner appends to .pipeline/&lt;ticket&gt;/log.jsonl, and commits it │</span></span>
28
+ <span class="line"><span>└────────┬─────────────────────────────────────────────────────────────┘</span></span>
29
+ <span class="line"><span> │ git push, if the branch has an upstream · git fetch, on resume</span></span>
30
+ <span class="line"><span>┌─ the project&#39;s remote ───────────────────────────────────────────────┐</span></span>
31
+ <span class="line"><span>│ each record on its branch: the feature&#39;s on feat/&lt;feature&gt;-&lt;slug&gt;, │</span></span>
32
+ <span class="line"><span>│ a ticket&#39;s on ticket/&lt;feature&gt;-&lt;ticket&gt; │</span></span>
33
+ <span class="line"><span>└──────────────────────────────────────────────────────────────────────┘</span></span></code></pre></div><p>The decisions behind it: ports (ADR-0004), write scopes (ADR-0014), records (ADR-0017, ADR-0020). <code>bernard sync</code>, the other half, renders <code>core/</code> and a project&#39;s overlay into its harness&#39;s files (ADR-0003).</p><h2 id="how-a-change-lands" tabindex="-1">How a change lands <a class="header-anchor" href="#how-a-change-lands" aria-label="Permalink to &quot;How a change lands&quot;">​</a></h2><ul><li><strong>A ticket</strong> on the project board: <a href="./docs/github.html">docs/github.md</a>.</li><li><strong>The vocabulary</strong> of <a href="./CONTEXT.html">CONTEXT.md</a>.</li><li><strong>An ADR</strong> in <a href="https://github.com/theodo-group/bernard/tree/v0.1.0-beta.1/docs/adr" target="_blank" rel="noreferrer">docs/adr/</a>, written with the <code>/adr</code> skill.</li><li><strong>The guides</strong> in <code>docs/</code> and the starters in <a href="https://github.com/theodo-group/bernard/tree/v0.1.0-beta.1/fixtures/starters" target="_blank" rel="noreferrer">fixtures/starters/</a> follow every change a project sees.</li><li><strong>The rules</strong> of <a href="./CLAUDE.html">CLAUDE.md</a>, for humans too.</li><li><strong>Core content</strong> in English, following <a href="./core/README.html">core/README.md</a>, and no secrets in the core or an overlay.</li><li><strong>Commits</strong> in Conventional Commits, merged after peer review with CI green.</li><li><strong>Under the PolyForm Shield License 1.0.0</strong>, like the rest of the repo (<a href="https://github.com/theodo-group/bernard/blob/v0.1.0-beta.1/LICENSE" target="_blank" rel="noreferrer">LICENSE</a>): no CLA to sign, and you keep the copyright on your change (ADR-0033).</li></ul>`,32)])])}const g=s(o,[["render",i]]);export{k as __pageData,g as default};
@@ -0,0 +1 @@
1
+ import{_ as s,o as a,c as t,a3 as n}from"./chunks/framework.hgjl6W6o.js";const k=JSON.parse('{"title":"Contributing","description":"","frontmatter":{},"headers":[],"relativePath":"CONTRIBUTING.md","filePath":"CONTRIBUTING.md"}'),o={name:"CONTRIBUTING.md"};function i(r,e,c,p,d,h){return a(),t("div",null,[...e[0]||(e[0]=[n("",32)])])}const g=s(o,[["render",i]]);export{k as __pageData,g as default};