@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,30 @@
1
+ <!DOCTYPE html>
2
+ <html lang="en-US" dir="ltr">
3
+ <head>
4
+ <meta charset="utf-8">
5
+ <meta name="viewport" content="width=device-width,initial-scale=1">
6
+ <title>Which harness a project runs on | Bernard the taktician</title>
7
+ <meta name="description" content="An agentic factory for new builds and legacy migrations.">
8
+ <meta name="generator" content="VitePress v1.6.4">
9
+ <link rel="preload stylesheet" href="/docs/assets/style.C3E8Ltp6.css" as="style">
10
+ <link rel="preload stylesheet" href="/docs/vp-icons.css" as="style">
11
+
12
+ <script type="module" src="/docs/assets/app.URmpjWHb.js"></script>
13
+ <link rel="preload" href="/docs/assets/inter-roman-latin.Di8DUHzh.woff2" as="font" type="font/woff2" crossorigin="">
14
+ <link rel="modulepreload" href="/docs/assets/chunks/framework.hgjl6W6o.js">
15
+ <link rel="modulepreload" href="/docs/assets/chunks/theme.Cksh_UJH.js">
16
+ <link rel="modulepreload" href="/docs/assets/chunks/sizeCapture-INFHLROL.BEqL2zFi.js">
17
+ <link rel="modulepreload" href="/docs/assets/chunks/dagre-GXQ25YYZ.2qvw8AqH.js">
18
+ <link rel="modulepreload" href="/docs/assets/chunks/stateDiagram-v2-MP3YSRHH.3X7wNXKX.js">
19
+ <link rel="modulepreload" href="/docs/assets/chunks/virtual_mermaid-config.DDnGl6nM.js">
20
+ <link rel="modulepreload" href="/docs/assets/docs_adr_0002-which-harness-a-project-runs-on.md.2GwF-nj0.lean.js">
21
+ <link rel="icon" href="/docs/bernard.svg" type="image/svg+xml">
22
+ <script id="check-dark-mode">(()=>{const e=localStorage.getItem("vitepress-theme-appearance")||"auto",a=window.matchMedia("(prefers-color-scheme: dark)").matches;(!e||e==="auto"?a:e==="dark")&&document.documentElement.classList.add("dark")})();</script>
23
+ <script id="check-mac-os">document.documentElement.classList.toggle("mac",/Mac|iPhone|iPod|iPad/i.test(navigator.platform));</script>
24
+ </head>
25
+ <body>
26
+ <div id="app"><div class="Layout" data-v-f87bd3ac><!--[--><!--]--><!--[--><span tabindex="-1" data-v-26966a6b></span><a href="#VPContent" class="VPSkipLink visually-hidden" data-v-26966a6b>Skip to content</a><!--]--><!----><header class="VPNav" data-v-f87bd3ac data-v-a776a728><div class="VPNavBar" data-v-a776a728 data-v-257d37ee><div class="wrapper" data-v-257d37ee><div class="container" data-v-257d37ee><div class="title" data-v-257d37ee><div class="VPNavBarTitle has-sidebar" data-v-257d37ee data-v-1b9c14bd><a class="title" href="/docs/" data-v-1b9c14bd><!--[--><!--]--><!--[--><img class="VPImage logo" src="/docs/bernard.svg" alt data-v-4a9aa8e2><!--]--><span data-v-1b9c14bd>Bernard</span><!--[--><!--]--></a></div></div><div class="content" data-v-257d37ee><div class="content-body" data-v-257d37ee><!--[--><!--]--><div class="VPNavBarSearch search" data-v-257d37ee><!--[--><!----><div id="local-search"><button type="button" class="DocSearch DocSearch-Button" aria-label="Search"><span class="DocSearch-Button-Container"><span class="vp-icon DocSearch-Search-Icon"></span><span class="DocSearch-Button-Placeholder">Search</span></span><span class="DocSearch-Button-Keys"><kbd class="DocSearch-Button-Key"></kbd><kbd class="DocSearch-Button-Key">K</kbd></span></button></div><!--]--></div><nav aria-labelledby="main-nav-aria-label" class="VPNavBarMenu menu" data-v-257d37ee data-v-96ed2429><span id="main-nav-aria-label" class="visually-hidden" data-v-96ed2429> Main Navigation </span><!--[--><!--[--><a class="VPLink link VPNavBarMenuLink" href="/docs/docs/getting-started.html" tabindex="0" data-v-96ed2429 data-v-c21a295c><!--[--><span data-v-c21a295c>Guides</span><!--]--></a><!--]--><!--[--><a class="VPLink link VPNavBarMenuLink" href="/docs/CONTRIBUTING.html" tabindex="0" data-v-96ed2429 data-v-c21a295c><!--[--><span data-v-c21a295c>Contributing</span><!--]--></a><!--]--><!--[--><a class="VPLink link VPNavBarMenuLink" href="/docs/docs/adr/0001-what-the-core-is-built-for.html" tabindex="0" data-v-96ed2429 data-v-c21a295c><!--[--><span data-v-c21a295c>Decisions</span><!--]--></a><!--]--><!--]--></nav><!----><div class="VPNavBarAppearance appearance" data-v-257d37ee data-v-772a648f><button class="VPSwitch VPSwitchAppearance" type="button" role="switch" title aria-checked="false" data-v-772a648f data-v-32dadf2f data-v-033bec8f><span class="check" data-v-033bec8f><span class="icon" data-v-033bec8f><!--[--><span class="vpi-sun sun" data-v-32dadf2f></span><span class="vpi-moon moon" data-v-32dadf2f></span><!--]--></span></span></button></div><!----><div class="VPFlyout VPNavBarExtra extra" data-v-257d37ee data-v-6a77a12d data-v-6ff730e4><button type="button" class="button" aria-haspopup="true" aria-expanded="false" aria-label="extra navigation" data-v-6ff730e4><span class="vpi-more-horizontal icon" data-v-6ff730e4></span></button><div class="menu" data-v-6ff730e4><div class="VPMenu" data-v-6ff730e4 data-v-7e1ab185><!----><!--[--><!--[--><!----><div class="group" data-v-6a77a12d><div class="item appearance" data-v-6a77a12d><p class="label" data-v-6a77a12d>Appearance</p><div class="appearance-action" data-v-6a77a12d><button class="VPSwitch VPSwitchAppearance" type="button" role="switch" title aria-checked="false" data-v-6a77a12d data-v-32dadf2f data-v-033bec8f><span class="check" data-v-033bec8f><span class="icon" data-v-033bec8f><!--[--><span class="vpi-sun sun" data-v-32dadf2f></span><span class="vpi-moon moon" data-v-32dadf2f></span><!--]--></span></span></button></div></div></div><!----><!--]--><!--]--></div></div></div><!--[--><!--[--><!--[--><a class="viewer-switch" href="/">Run viewer</a><!--]--><!--]--><!--]--><button type="button" class="VPNavBarHamburger hamburger" aria-label="mobile navigation" aria-expanded="false" aria-controls="VPNavScreen" data-v-257d37ee data-v-33d7d0d7><span class="container" data-v-33d7d0d7><span class="top" data-v-33d7d0d7></span><span class="middle" data-v-33d7d0d7></span><span class="bottom" data-v-33d7d0d7></span></span></button></div></div></div></div><div class="divider" data-v-257d37ee><div class="divider-line" data-v-257d37ee></div></div></div><!----></header><div class="VPLocalNav has-sidebar empty" data-v-f87bd3ac data-v-c5f097a9><div class="container" data-v-c5f097a9><button class="menu" aria-expanded="false" aria-controls="VPSidebarNav" data-v-c5f097a9><span class="vpi-align-left menu-icon" data-v-c5f097a9></span><span class="menu-text" data-v-c5f097a9>Menu</span></button><div class="VPLocalNavOutlineDropdown" style="--vp-vh:0px;" data-v-c5f097a9 data-v-cb88d934><button data-v-cb88d934>Return to top</button><!----></div></div></div><aside class="VPSidebar" data-v-f87bd3ac data-v-979e8f18><div class="curtain" data-v-979e8f18></div><nav class="nav" id="VPSidebarNav" aria-labelledby="sidebar-aria-label" tabindex="-1" data-v-979e8f18><span class="visually-hidden" id="sidebar-aria-label" data-v-979e8f18> Sidebar Navigation </span><!--[--><!--]--><!--[--><div class="no-transition group" data-v-b9208f43><section class="VPSidebarItem level-0 collapsible" data-v-b9208f43 data-v-0b328883><div class="item" role="button" tabindex="0" data-v-0b328883><div class="indicator" data-v-0b328883></div><h2 class="text" data-v-0b328883>Bernard</h2><div class="caret" role="button" aria-label="toggle section" tabindex="0" data-v-0b328883><span class="vpi-chevron-right caret-icon" data-v-0b328883></span></div></div><div class="items" data-v-0b328883><!--[--><div class="VPSidebarItem level-1 is-link" data-v-0b328883><div class="item" data-v-0b328883><div class="indicator" data-v-0b328883></div><a class="VPLink link link" href="/docs/" data-v-0b328883><!--[--><p class="text" data-v-0b328883>Overview</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-0b328883><div class="item" data-v-0b328883><div class="indicator" data-v-0b328883></div><a class="VPLink link link" href="/docs/CONTEXT.html" data-v-0b328883><!--[--><p class="text" data-v-0b328883>Vocabulary</p><!--]--></a><!----></div><!----></div><!--]--></div></section></div><div class="no-transition group" data-v-b9208f43><section class="VPSidebarItem level-0 collapsible" data-v-b9208f43 data-v-0b328883><div class="item" role="button" tabindex="0" data-v-0b328883><div class="indicator" data-v-0b328883></div><h2 class="text" data-v-0b328883>Guides</h2><div class="caret" role="button" aria-label="toggle section" tabindex="0" data-v-0b328883><span class="vpi-chevron-right caret-icon" data-v-0b328883></span></div></div><div class="items" data-v-0b328883><!--[--><div class="VPSidebarItem level-1 is-link" data-v-0b328883><div class="item" data-v-0b328883><div class="indicator" data-v-0b328883></div><a class="VPLink link link" href="/docs/docs/getting-started.html" data-v-0b328883><!--[--><p class="text" data-v-0b328883>Getting started</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-0b328883><div class="item" data-v-0b328883><div class="indicator" data-v-0b328883></div><a class="VPLink link link" href="/docs/docs/overlay.html" data-v-0b328883><!--[--><p class="text" data-v-0b328883>The overlay</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-0b328883><div class="item" data-v-0b328883><div class="indicator" data-v-0b328883></div><a class="VPLink link link" href="/docs/docs/recipes.html" data-v-0b328883><!--[--><p class="text" data-v-0b328883>Recipes</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-0b328883><div class="item" data-v-0b328883><div class="indicator" data-v-0b328883></div><a class="VPLink link link" href="/docs/docs/pipeline.html" data-v-0b328883><!--[--><p class="text" data-v-0b328883>Pipeline</p><!--]--></a><!----></div><!----></div><!--]--></div></section></div><div class="no-transition group" data-v-b9208f43><section class="VPSidebarItem level-0 collapsible" data-v-b9208f43 data-v-0b328883><div class="item" role="button" tabindex="0" data-v-0b328883><div class="indicator" data-v-0b328883></div><h2 class="text" data-v-0b328883>Contributing</h2><div class="caret" role="button" aria-label="toggle section" tabindex="0" data-v-0b328883><span class="vpi-chevron-right caret-icon" data-v-0b328883></span></div></div><div class="items" data-v-0b328883><!--[--><div class="VPSidebarItem level-1 is-link" data-v-0b328883><div class="item" data-v-0b328883><div class="indicator" data-v-0b328883></div><a class="VPLink link link" href="/docs/CONTRIBUTING.html" data-v-0b328883><!--[--><p class="text" data-v-0b328883>Contributing</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-0b328883><div class="item" data-v-0b328883><div class="indicator" data-v-0b328883></div><a class="VPLink link link" href="/docs/CLAUDE.html" data-v-0b328883><!--[--><p class="text" data-v-0b328883>Rules for agents</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-0b328883><div class="item" data-v-0b328883><div class="indicator" data-v-0b328883></div><a class="VPLink link link" href="/docs/docs/github.html" data-v-0b328883><!--[--><p class="text" data-v-0b328883>GitHub</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-0b328883><div class="item" data-v-0b328883><div class="indicator" data-v-0b328883></div><a class="VPLink link link" href="/docs/core/README.html" data-v-0b328883><!--[--><p class="text" data-v-0b328883>Core content</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-0b328883><div class="item" data-v-0b328883><div class="indicator" data-v-0b328883></div><a class="VPLink link link" href="/docs/packages/viewer/README.html" data-v-0b328883><!--[--><p class="text" data-v-0b328883>Run viewer</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-0b328883><div class="item" data-v-0b328883><div class="indicator" data-v-0b328883></div><a class="VPLink link link" href="/docs/packages/docs/README.html" data-v-0b328883><!--[--><p class="text" data-v-0b328883>Documentation site</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-0b328883><div class="item" data-v-0b328883><div class="indicator" data-v-0b328883></div><a class="VPLink link link" href="/docs/fixtures/README.html" data-v-0b328883><!--[--><p class="text" data-v-0b328883>Fixtures</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-0b328883><div class="item" data-v-0b328883><div class="indicator" data-v-0b328883></div><a class="VPLink link link" href="/docs/demo/README.html" data-v-0b328883><!--[--><p class="text" data-v-0b328883>Demo</p><!--]--></a><!----></div><!----></div><!--]--></div></section></div><div class="no-transition group" data-v-b9208f43><section class="VPSidebarItem level-0 collapsible collapsed has-active" data-v-b9208f43 data-v-0b328883><div class="item" role="button" tabindex="0" data-v-0b328883><div class="indicator" data-v-0b328883></div><h2 class="text" data-v-0b328883>Decisions</h2><div class="caret" role="button" aria-label="toggle section" tabindex="0" data-v-0b328883><span class="vpi-chevron-right caret-icon" data-v-0b328883></span></div></div><div class="items" data-v-0b328883><!--[--><div class="VPSidebarItem level-1 is-link" data-v-0b328883><div class="item" data-v-0b328883><div class="indicator" data-v-0b328883></div><a class="VPLink link link" href="/docs/docs/adr/0001-what-the-core-is-built-for.html" data-v-0b328883><!--[--><p class="text" data-v-0b328883>0001 · What the core is built for</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-0b328883><div class="item" data-v-0b328883><div class="indicator" data-v-0b328883></div><a class="VPLink link link" href="/docs/docs/adr/0002-which-harness-a-project-runs-on.html" data-v-0b328883><!--[--><p class="text" data-v-0b328883>0002 · Which harness a project runs on</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-0b328883><div class="item" data-v-0b328883><div class="indicator" data-v-0b328883></div><a class="VPLink link link" href="/docs/docs/adr/0003-how-core-content-reaches-each-harness.html" data-v-0b328883><!--[--><p class="text" data-v-0b328883>0003 · How core content reaches each harness</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-0b328883><div class="item" data-v-0b328883><div class="indicator" data-v-0b328883></div><a class="VPLink link link" href="/docs/docs/adr/0004-how-the-core-uses-external-tools.html" data-v-0b328883><!--[--><p class="text" data-v-0b328883>0004 · How the core uses external tools</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-0b328883><div class="item" data-v-0b328883><div class="indicator" data-v-0b328883></div><a class="VPLink link link" href="/docs/docs/adr/0005-what-drives-the-pipeline.html" data-v-0b328883><!--[--><p class="text" data-v-0b328883>0005 · What drives the pipeline</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-0b328883><div class="item" data-v-0b328883><div class="indicator" data-v-0b328883></div><a class="VPLink link link" href="/docs/docs/adr/0006-what-steps-hand-off-to-each-other.html" data-v-0b328883><!--[--><p class="text" data-v-0b328883>0006 · What steps hand off to each other</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-0b328883><div class="item" data-v-0b328883><div class="indicator" data-v-0b328883></div><a class="VPLink link link" href="/docs/docs/adr/0007-how-humans-take-part-in-the-pipeline.html" data-v-0b328883><!--[--><p class="text" data-v-0b328883>0007 · How humans take part in the pipeline</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-0b328883><div class="item" data-v-0b328883><div class="indicator" data-v-0b328883></div><a class="VPLink link link" href="/docs/docs/adr/0008-where-a-steps-reviewers-run.html" data-v-0b328883><!--[--><p class="text" data-v-0b328883>0008 · Where a step's reviewers run</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-0b328883><div class="item" data-v-0b328883><div class="indicator" data-v-0b328883></div><a class="VPLink link link" href="/docs/docs/adr/0009-where-pipeline-state-and-handoffs-live.html" data-v-0b328883><!--[--><p class="text" data-v-0b328883>0009 · Where pipeline state and handoffs live</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-0b328883><div class="item" data-v-0b328883><div class="indicator" data-v-0b328883></div><a class="VPLink link link" href="/docs/docs/adr/0010-how-a-project-adapts-the-core.html" data-v-0b328883><!--[--><p class="text" data-v-0b328883>0010 · How a project adapts the core</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-0b328883><div class="item" data-v-0b328883><div class="indicator" data-v-0b328883></div><a class="VPLink link link" href="/docs/docs/adr/0011-how-the-factory-is-packaged-and-versioned.html" data-v-0b328883><!--[--><p class="text" data-v-0b328883>0011 · How the factory is packaged and versioned</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-0b328883><div class="item" data-v-0b328883><div class="indicator" data-v-0b328883></div><a class="VPLink link link" href="/docs/docs/adr/0012-how-a-steps-failures-are-told-apart-and-routed.html" data-v-0b328883><!--[--><p class="text" data-v-0b328883>0012 · How a step's failures are told apart and routed</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-0b328883><div class="item" data-v-0b328883><div class="indicator" data-v-0b328883></div><a class="VPLink link link" href="/docs/docs/adr/0013-when-code-lands.html" data-v-0b328883><!--[--><p class="text" data-v-0b328883>0013 · When code lands</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-0b328883><div class="item" data-v-0b328883><div class="indicator" data-v-0b328883></div><a class="VPLink link link" href="/docs/docs/adr/0014-what-a-step-may-change.html" data-v-0b328883><!--[--><p class="text" data-v-0b328883>0014 · What a step may change</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-0b328883><div class="item" data-v-0b328883><div class="indicator" data-v-0b328883></div><a class="VPLink link link" href="/docs/docs/adr/0015-how-a-project-shapes-its-ticket-flow.html" data-v-0b328883><!--[--><p class="text" data-v-0b328883>0015 · How a project shapes its ticket flow</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-0b328883><div class="item" data-v-0b328883><div class="indicator" data-v-0b328883></div><a class="VPLink link link" href="/docs/docs/adr/0016-which-core-the-factory-repo-runs.html" data-v-0b328883><!--[--><p class="text" data-v-0b328883>0016 · Which core the factory repo runs</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-0b328883><div class="item" data-v-0b328883><div class="indicator" data-v-0b328883></div><a class="VPLink link link" href="/docs/docs/adr/0017-where-a-tickets-record-lives.html" data-v-0b328883><!--[--><p class="text" data-v-0b328883>0017 · Where a ticket's record lives</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-0b328883><div class="item" data-v-0b328883><div class="indicator" data-v-0b328883></div><a class="VPLink link link" href="/docs/docs/adr/0018-the-products-name.html" data-v-0b328883><!--[--><p class="text" data-v-0b328883>0018 · The product's name</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-0b328883><div class="item" data-v-0b328883><div class="indicator" data-v-0b328883></div><a class="VPLink link link" href="/docs/docs/adr/0019-how-a-finding-is-answered-and-judged.html" data-v-0b328883><!--[--><p class="text" data-v-0b328883>0019 · How a finding is answered and judged</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-0b328883><div class="item" data-v-0b328883><div class="indicator" data-v-0b328883></div><a class="VPLink link link" href="/docs/docs/adr/0020-how-an-interrupted-run-resumes.html" data-v-0b328883><!--[--><p class="text" data-v-0b328883>0020 · How an interrupted run resumes</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-0b328883><div class="item" data-v-0b328883><div class="indicator" data-v-0b328883></div><a class="VPLink link link" href="/docs/docs/adr/0021-how-a-step-runs-in-its-workspace.html" data-v-0b328883><!--[--><p class="text" data-v-0b328883>0021 · How a step runs in its workspace</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-0b328883><div class="item" data-v-0b328883><div class="indicator" data-v-0b328883></div><a class="VPLink link link" href="/docs/docs/adr/0022-who-names-the-branches.html" data-v-0b328883><!--[--><p class="text" data-v-0b328883>0022 · Who names the branches</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-0b328883><div class="item" data-v-0b328883><div class="indicator" data-v-0b328883></div><a class="VPLink link link" href="/docs/docs/adr/0023-how-a-version-ships-before-npm.html" data-v-0b328883><!--[--><p class="text" data-v-0b328883>0023 · How a version ships before npm</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-0b328883><div class="item" data-v-0b328883><div class="indicator" data-v-0b328883></div><a class="VPLink link link" href="/docs/docs/adr/0024-how-the-config-type-carries-its-docs.html" data-v-0b328883><!--[--><p class="text" data-v-0b328883>0024 · How the config type carries its docs</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-0b328883><div class="item" data-v-0b328883><div class="indicator" data-v-0b328883></div><a class="VPLink link link" href="/docs/docs/adr/0025-how-a-steps-handoff-is-written-and-checked.html" data-v-0b328883><!--[--><p class="text" data-v-0b328883>0025 · How a step's handoff is written and checked</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-0b328883><div class="item" data-v-0b328883><div class="indicator" data-v-0b328883></div><a class="VPLink link link" href="/docs/docs/adr/0026-support-for-github-copilot.html" data-v-0b328883><!--[--><p class="text" data-v-0b328883>0026 · Support for GitHub Copilot</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-0b328883><div class="item" data-v-0b328883><div class="indicator" data-v-0b328883></div><a class="VPLink link link" href="/docs/docs/adr/0027-which-forge-a-project-is-on.html" data-v-0b328883><!--[--><p class="text" data-v-0b328883>0027 · Which forge a project is on</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-0b328883><div class="item" data-v-0b328883><div class="indicator" data-v-0b328883></div><a class="VPLink link link" href="/docs/docs/adr/0028-several-ticket-flows-in-one-pipeline.html" data-v-0b328883><!--[--><p class="text" data-v-0b328883>0028 · Several ticket flows in one pipeline</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-0b328883><div class="item" data-v-0b328883><div class="indicator" data-v-0b328883></div><a class="VPLink link link" href="/docs/docs/adr/0029-the-branch-a-feature-works-on.html" data-v-0b328883><!--[--><p class="text" data-v-0b328883>0029 · The branch a feature works on</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-0b328883><div class="item" data-v-0b328883><div class="indicator" data-v-0b328883></div><a class="VPLink link link" href="/docs/docs/adr/0030-a-runner-without-coder.html" data-v-0b328883><!--[--><p class="text" data-v-0b328883>0030 · A runner without Coder</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-0b328883><div class="item" data-v-0b328883><div class="indicator" data-v-0b328883></div><a class="VPLink link link" href="/docs/docs/adr/0031-how-the-run-viewer-reads-its-runs.html" data-v-0b328883><!--[--><p class="text" data-v-0b328883>0031 · How the run viewer reads its runs</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-0b328883><div class="item" data-v-0b328883><div class="indicator" data-v-0b328883></div><a class="VPLink link link" href="/docs/docs/adr/0032-how-a-project-gets-the-viewer.html" data-v-0b328883><!--[--><p class="text" data-v-0b328883>0032 · How a project gets the viewer</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-0b328883><div class="item" data-v-0b328883><div class="indicator" data-v-0b328883></div><a class="VPLink link link" href="/docs/docs/adr/0033-the-repos-license.html" data-v-0b328883><!--[--><p class="text" data-v-0b328883>0033 · The repo's license</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-0b328883><div class="item" data-v-0b328883><div class="indicator" data-v-0b328883></div><a class="VPLink link link" href="/docs/docs/adr/0034-how-code-review-launches-its-reviewers.html" data-v-0b328883><!--[--><p class="text" data-v-0b328883>0034 · How code review launches its reviewers</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-0b328883><div class="item" data-v-0b328883><div class="indicator" data-v-0b328883></div><a class="VPLink link link" href="/docs/docs/adr/0035-how-the-package-is-published.html" data-v-0b328883><!--[--><p class="text" data-v-0b328883>0035 · How the package is published</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-0b328883><div class="item" data-v-0b328883><div class="indicator" data-v-0b328883></div><a class="VPLink link link" href="/docs/docs/adr/0036-what-the-cores-pull-request-skill-does.html" data-v-0b328883><!--[--><p class="text" data-v-0b328883>0036 · What the core's pull-request skill does</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-0b328883><div class="item" data-v-0b328883><div class="indicator" data-v-0b328883></div><a class="VPLink link link" href="/docs/docs/adr/0037-how-a-team-reads-the-factorys-documentation.html" data-v-0b328883><!--[--><p class="text" data-v-0b328883>0037 · How a team reads the factory's documentation</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-0b328883><div class="item" data-v-0b328883><div class="indicator" data-v-0b328883></div><a class="VPLink link link" href="/docs/docs/adr/0038-where-adapters-live.html" data-v-0b328883><!--[--><p class="text" data-v-0b328883>0038 · Where adapters live</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-0b328883><div class="item" data-v-0b328883><div class="indicator" data-v-0b328883></div><a class="VPLink link link" href="/docs/docs/adr/0039-the-repos-license.html" data-v-0b328883><!--[--><p class="text" data-v-0b328883>0039 · The repo's license</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-0b328883><div class="item" data-v-0b328883><div class="indicator" data-v-0b328883></div><a class="VPLink link link" href="/docs/docs/adr/0040-how-a-version-is-released.html" data-v-0b328883><!--[--><p class="text" data-v-0b328883>0040 · How a version is released</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-0b328883><div class="item" data-v-0b328883><div class="indicator" data-v-0b328883></div><a class="VPLink link link" href="/docs/docs/adr/0041-who-opens-the-features-pull-request.html" data-v-0b328883><!--[--><p class="text" data-v-0b328883>0041 · Who opens the feature's pull request, and how a ticket reaches it</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-0b328883><div class="item" data-v-0b328883><div class="indicator" data-v-0b328883></div><a class="VPLink link link" href="/docs/docs/adr/0042-how-secrets-are-kept-out-of-committed-records.html" data-v-0b328883><!--[--><p class="text" data-v-0b328883>0042 · How secrets are kept out of committed records</p><!--]--></a><!----></div><!----></div><!--]--></div></section></div><!--]--><!--[--><!--]--></nav></aside><div class="VPContent has-sidebar" id="VPContent" data-v-f87bd3ac data-v-67e000d0><div class="VPDoc has-sidebar has-aside" data-v-67e000d0 data-v-f8622dbf><!--[--><!--]--><div class="container" data-v-f8622dbf><div class="aside" data-v-f8622dbf><div class="aside-curtain" data-v-f8622dbf></div><div class="aside-container" data-v-f8622dbf><div class="aside-content" data-v-f8622dbf><div class="VPDocAside" data-v-f8622dbf data-v-fc01c646><!--[--><!--]--><!--[--><!--]--><nav aria-labelledby="doc-outline-aria-label" class="VPDocAsideOutline" data-v-fc01c646 data-v-172fd98a><div class="content" data-v-172fd98a><div class="outline-marker" data-v-172fd98a></div><div aria-level="2" class="outline-title" id="doc-outline-aria-label" role="heading" data-v-172fd98a>On this page</div><ul class="VPDocOutlineItem root" data-v-172fd98a data-v-ea4171dd><!--[--><!--]--></ul></div></nav><!--[--><!--]--><div class="spacer" data-v-fc01c646></div><!--[--><!--]--><!----><!--[--><!--]--><!--[--><!--]--></div></div></div></div><div class="content" data-v-f8622dbf><div class="content-container" data-v-f8622dbf><!--[--><!--]--><main class="main" data-v-f8622dbf><div style="position:relative;" class="vp-doc _docs_docs_adr_0002-which-harness-a-project-runs-on" data-v-f8622dbf><div><h1 id="which-harness-a-project-runs-on" tabindex="-1">Which harness a project runs on <a class="header-anchor" href="#which-harness-a-project-runs-on" aria-label="Permalink to &quot;Which harness a project runs on&quot;">​</a></h1><p>Accepted, amended by ADR-0026 · 2026-10-05</p><h2 id="context" tabindex="-1">Context <a class="header-anchor" href="#context" aria-label="Permalink to &quot;Context&quot;">​</a></h2><p>The core runs on both Claude Code and Pi, so teams can use the coding agent they prefer.</p><h2 id="criteria" tabindex="-1">Criteria <a class="header-anchor" href="#criteria" aria-label="Permalink to &quot;Criteria&quot;">​</a></h2><ol><li><strong>Teams&#39; choice of agent</strong>: teams can use the coding agent they prefer, and Pi is a requirement.</li><li><strong>Reproducible autonomous runs</strong>: autonomous runs stay reproducible.</li><li><strong>One overlay to maintain</strong>: overlays don&#39;t have to be maintained twice, nor work on both harnesses.</li></ol><h2 id="options" tabindex="-1">Options <a class="header-anchor" href="#options" aria-label="Permalink to &quot;Options&quot;">​</a></h2><ul><li><strong>Each developer picks their harness within a repo.</strong> Every overlay would have to work on both harnesses (3).</li><li><strong>Both harnesses, one per project.</strong> The core runs on both Claude Code and Pi, so teams can use the coding agent they prefer (1). Each project&#39;s overlay targets only its harness: autonomous runs stay reproducible (2), and overlays don&#39;t have to be maintained twice (3).</li><li><strong>Claude Code only.</strong> Pi is a requirement (1).</li></ul><h2 id="comparison" tabindex="-1">Comparison <a class="header-anchor" href="#comparison" aria-label="Permalink to &quot;Comparison&quot;">​</a></h2><table tabindex="0"><thead><tr><th>Option</th><th>1. Teams&#39; choice</th><th>2. Reproducible runs</th><th>3. One overlay</th></tr></thead><tbody><tr><td>Each developer picks</td><td>🟢</td><td>🔴</td><td>🔴</td></tr><tr><td>Both harnesses, one per project</td><td>🟢</td><td>🟢</td><td>🟢</td></tr><tr><td>Claude Code only</td><td>🔴</td><td>🟢</td><td>🟢</td></tr></tbody></table><p>🟢 meets · 🟠 partly, or at a cost · 🔴 fails · ⚪ not discussed</p><h2 id="decision" tabindex="-1">Decision <a class="header-anchor" href="#decision" aria-label="Permalink to &quot;Decision&quot;">​</a></h2><p>Both harnesses, one per project. Each project picks one harness, and its overlay targets only that one: autonomous runs stay reproducible, and overlays don&#39;t have to be maintained twice.</p><h2 id="consequences" tabindex="-1">Consequences <a class="header-anchor" href="#consequences" aria-label="Permalink to &quot;Consequences&quot;">​</a></h2><ul><li>The core may only rely on what both harnesses can express (see ADR-0003, ADR-0005, ADR-0008). Amended by ADR-0026: GitHub Copilot is a third harness, still one per project.</li><li>Pi support is designed in from the start but will only be validated once a pilot project adopts it. The first pilots run on Claude Code.</li></ul></div></div></main><footer class="VPDocFooter" data-v-f8622dbf data-v-020e2df0><!--[--><!--]--><div class="edit-info" data-v-020e2df0><div class="edit-link" data-v-020e2df0><a class="VPLink link vp-external-link-icon no-icon edit-link-button" href="https://github.com/theodo-group/bernard/edit/main/docs/adr/0002-which-harness-a-project-runs-on.md" target="_blank" rel="noreferrer" data-v-020e2df0><!--[--><span class="vpi-square-pen edit-link-icon" data-v-020e2df0></span> Edit this page on GitHub<!--]--></a></div><!----></div><nav class="prev-next" aria-labelledby="doc-footer-aria-label" data-v-020e2df0><span class="visually-hidden" id="doc-footer-aria-label" data-v-020e2df0>Pager</span><div class="pager" data-v-020e2df0><a class="VPLink link pager-link prev" href="/docs/docs/adr/0001-what-the-core-is-built-for.html" data-v-020e2df0><!--[--><span class="desc" data-v-020e2df0>Previous page</span><span class="title" data-v-020e2df0>0001 · What the core is built for</span><!--]--></a></div><div class="pager" data-v-020e2df0><a class="VPLink link pager-link next" href="/docs/docs/adr/0003-how-core-content-reaches-each-harness.html" data-v-020e2df0><!--[--><span class="desc" data-v-020e2df0>Next page</span><span class="title" data-v-020e2df0>0003 · How core content reaches each harness</span><!--]--></a></div></nav></footer><!--[--><!--]--></div></div></div><!--[--><!--]--></div></div><!----><!--[--><!--]--></div></div>
27
+ <script>window.__VP_HASH_MAP__=JSON.parse("{\"claude.md\":\"BLSB-5gK\",\"context.md\":\"BovnvMGK\",\"contributing.md\":\"DwJsKrz3\",\"core_readme.md\":\"DyxYsikc\",\"demo_readme.md\":\"Cpi2pUU9\",\"docs_adr_0001-what-the-core-is-built-for.md\":\"BxOoMjST\",\"docs_adr_0002-which-harness-a-project-runs-on.md\":\"2GwF-nj0\",\"docs_adr_0003-how-core-content-reaches-each-harness.md\":\"BMWE00Mf\",\"docs_adr_0004-how-the-core-uses-external-tools.md\":\"B7dtE7MB\",\"docs_adr_0005-what-drives-the-pipeline.md\":\"DGn0CJeq\",\"docs_adr_0006-what-steps-hand-off-to-each-other.md\":\"BflT5ugJ\",\"docs_adr_0007-how-humans-take-part-in-the-pipeline.md\":\"CNX3gUD-\",\"docs_adr_0008-where-a-steps-reviewers-run.md\":\"aGbaBOpB\",\"docs_adr_0009-where-pipeline-state-and-handoffs-live.md\":\"C3tKmV-E\",\"docs_adr_0010-how-a-project-adapts-the-core.md\":\"Bp7N6tUE\",\"docs_adr_0011-how-the-factory-is-packaged-and-versioned.md\":\"BBJIwnqa\",\"docs_adr_0012-how-a-steps-failures-are-told-apart-and-routed.md\":\"uCyrBfug\",\"docs_adr_0013-when-code-lands.md\":\"oXgiobfz\",\"docs_adr_0014-what-a-step-may-change.md\":\"Zslg3bnJ\",\"docs_adr_0015-how-a-project-shapes-its-ticket-flow.md\":\"DNHMxwIT\",\"docs_adr_0016-which-core-the-factory-repo-runs.md\":\"CLN6LqBZ\",\"docs_adr_0017-where-a-tickets-record-lives.md\":\"jjUeM-ex\",\"docs_adr_0018-the-products-name.md\":\"6xaX9vDs\",\"docs_adr_0019-how-a-finding-is-answered-and-judged.md\":\"CKKoO9-3\",\"docs_adr_0020-how-an-interrupted-run-resumes.md\":\"DTIP-MBK\",\"docs_adr_0021-how-a-step-runs-in-its-workspace.md\":\"B2r3-FPg\",\"docs_adr_0022-who-names-the-branches.md\":\"DaVk8X0i\",\"docs_adr_0023-how-a-version-ships-before-npm.md\":\"C7-wuCbq\",\"docs_adr_0024-how-the-config-type-carries-its-docs.md\":\"CQmwhWXs\",\"docs_adr_0025-how-a-steps-handoff-is-written-and-checked.md\":\"CgXYdF2v\",\"docs_adr_0026-support-for-github-copilot.md\":\"DJsawm-R\",\"docs_adr_0027-which-forge-a-project-is-on.md\":\"CY0qy9xh\",\"docs_adr_0028-several-ticket-flows-in-one-pipeline.md\":\"oxffo2qg\",\"docs_adr_0029-the-branch-a-feature-works-on.md\":\"CrgkP6YJ\",\"docs_adr_0030-a-runner-without-coder.md\":\"CW8sF7jK\",\"docs_adr_0031-how-the-run-viewer-reads-its-runs.md\":\"opQYnVF2\",\"docs_adr_0032-how-a-project-gets-the-viewer.md\":\"DB9NjYJf\",\"docs_adr_0033-the-repos-license.md\":\"NPlkrPj8\",\"docs_adr_0034-how-code-review-launches-its-reviewers.md\":\"DSNpkfaL\",\"docs_adr_0035-how-the-package-is-published.md\":\"C1f4B5eb\",\"docs_adr_0036-what-the-cores-pull-request-skill-does.md\":\"op39HLAT\",\"docs_adr_0037-how-a-team-reads-the-factorys-documentation.md\":\"Dar_Xo4t\",\"docs_adr_0038-where-adapters-live.md\":\"CkVD3riv\",\"docs_adr_0039-the-repos-license.md\":\"C_rraWpb\",\"docs_adr_0040-how-a-version-is-released.md\":\"CCdwC07z\",\"docs_adr_0041-who-opens-the-features-pull-request.md\":\"qLu9WLaG\",\"docs_adr_0042-how-secrets-are-kept-out-of-committed-records.md\":\"DJWazI4H\",\"docs_getting-started.md\":\"BpQFS8Gr\",\"docs_github.md\":\"D4gkW71G\",\"docs_overlay.md\":\"DoWVb6OM\",\"docs_pipeline.md\":\"DdHywWSk\",\"docs_recipes.md\":\"8Xf6BsRA\",\"fixtures_readme.md\":\"DzbQ0hft\",\"index.md\":\"DHgL6CzS\",\"packages_docs_readme.md\":\"PV1a27nC\",\"packages_viewer_readme.md\":\"BynKZSdN\"}");window.__VP_SITE_DATA__=JSON.parse("{\"lang\":\"en-US\",\"dir\":\"ltr\",\"title\":\"Bernard the taktician\",\"description\":\"An agentic factory for new builds and legacy migrations.\",\"base\":\"/docs/\",\"head\":[],\"router\":{\"prefetchLinks\":true},\"appearance\":true,\"themeConfig\":{\"logo\":\"/bernard.svg\",\"siteTitle\":\"Bernard\",\"outline\":[2,3],\"search\":{\"provider\":\"local\"},\"nav\":[{\"text\":\"Guides\",\"link\":\"/docs/getting-started\"},{\"text\":\"Contributing\",\"link\":\"/CONTRIBUTING\"},{\"text\":\"Decisions\",\"link\":\"/docs/adr/0001-what-the-core-is-built-for\"}],\"sidebar\":[{\"text\":\"Bernard\",\"collapsed\":false,\"items\":[{\"text\":\"Overview\",\"link\":\"/\"},{\"text\":\"Vocabulary\",\"link\":\"/CONTEXT\"}]},{\"text\":\"Guides\",\"collapsed\":false,\"items\":[{\"text\":\"Getting started\",\"link\":\"/docs/getting-started\"},{\"text\":\"The overlay\",\"link\":\"/docs/overlay\"},{\"text\":\"Recipes\",\"link\":\"/docs/recipes\"},{\"text\":\"Pipeline\",\"link\":\"/docs/pipeline\"}]},{\"text\":\"Contributing\",\"collapsed\":false,\"items\":[{\"text\":\"Contributing\",\"link\":\"/CONTRIBUTING\"},{\"text\":\"Rules for agents\",\"link\":\"/CLAUDE\"},{\"text\":\"GitHub\",\"link\":\"/docs/github\"},{\"text\":\"Core content\",\"link\":\"/core/README\"},{\"text\":\"Run viewer\",\"link\":\"/packages/viewer/README\"},{\"text\":\"Documentation site\",\"link\":\"/packages/docs/README\"},{\"text\":\"Fixtures\",\"link\":\"/fixtures/README\"},{\"text\":\"Demo\",\"link\":\"/demo/README\"}]},{\"text\":\"Decisions\",\"collapsed\":true,\"items\":[{\"text\":\"0001 · What the core is built for\",\"link\":\"/docs/adr/0001-what-the-core-is-built-for\"},{\"text\":\"0002 · Which harness a project runs on\",\"link\":\"/docs/adr/0002-which-harness-a-project-runs-on\"},{\"text\":\"0003 · How core content reaches each harness\",\"link\":\"/docs/adr/0003-how-core-content-reaches-each-harness\"},{\"text\":\"0004 · How the core uses external tools\",\"link\":\"/docs/adr/0004-how-the-core-uses-external-tools\"},{\"text\":\"0005 · What drives the pipeline\",\"link\":\"/docs/adr/0005-what-drives-the-pipeline\"},{\"text\":\"0006 · What steps hand off to each other\",\"link\":\"/docs/adr/0006-what-steps-hand-off-to-each-other\"},{\"text\":\"0007 · How humans take part in the pipeline\",\"link\":\"/docs/adr/0007-how-humans-take-part-in-the-pipeline\"},{\"text\":\"0008 · Where a step's reviewers run\",\"link\":\"/docs/adr/0008-where-a-steps-reviewers-run\"},{\"text\":\"0009 · Where pipeline state and handoffs live\",\"link\":\"/docs/adr/0009-where-pipeline-state-and-handoffs-live\"},{\"text\":\"0010 · How a project adapts the core\",\"link\":\"/docs/adr/0010-how-a-project-adapts-the-core\"},{\"text\":\"0011 · How the factory is packaged and versioned\",\"link\":\"/docs/adr/0011-how-the-factory-is-packaged-and-versioned\"},{\"text\":\"0012 · How a step's failures are told apart and routed\",\"link\":\"/docs/adr/0012-how-a-steps-failures-are-told-apart-and-routed\"},{\"text\":\"0013 · When code lands\",\"link\":\"/docs/adr/0013-when-code-lands\"},{\"text\":\"0014 · What a step may change\",\"link\":\"/docs/adr/0014-what-a-step-may-change\"},{\"text\":\"0015 · How a project shapes its ticket flow\",\"link\":\"/docs/adr/0015-how-a-project-shapes-its-ticket-flow\"},{\"text\":\"0016 · Which core the factory repo runs\",\"link\":\"/docs/adr/0016-which-core-the-factory-repo-runs\"},{\"text\":\"0017 · Where a ticket's record lives\",\"link\":\"/docs/adr/0017-where-a-tickets-record-lives\"},{\"text\":\"0018 · The product's name\",\"link\":\"/docs/adr/0018-the-products-name\"},{\"text\":\"0019 · How a finding is answered and judged\",\"link\":\"/docs/adr/0019-how-a-finding-is-answered-and-judged\"},{\"text\":\"0020 · How an interrupted run resumes\",\"link\":\"/docs/adr/0020-how-an-interrupted-run-resumes\"},{\"text\":\"0021 · How a step runs in its workspace\",\"link\":\"/docs/adr/0021-how-a-step-runs-in-its-workspace\"},{\"text\":\"0022 · Who names the branches\",\"link\":\"/docs/adr/0022-who-names-the-branches\"},{\"text\":\"0023 · How a version ships before npm\",\"link\":\"/docs/adr/0023-how-a-version-ships-before-npm\"},{\"text\":\"0024 · How the config type carries its docs\",\"link\":\"/docs/adr/0024-how-the-config-type-carries-its-docs\"},{\"text\":\"0025 · How a step's handoff is written and checked\",\"link\":\"/docs/adr/0025-how-a-steps-handoff-is-written-and-checked\"},{\"text\":\"0026 · Support for GitHub Copilot\",\"link\":\"/docs/adr/0026-support-for-github-copilot\"},{\"text\":\"0027 · Which forge a project is on\",\"link\":\"/docs/adr/0027-which-forge-a-project-is-on\"},{\"text\":\"0028 · Several ticket flows in one pipeline\",\"link\":\"/docs/adr/0028-several-ticket-flows-in-one-pipeline\"},{\"text\":\"0029 · The branch a feature works on\",\"link\":\"/docs/adr/0029-the-branch-a-feature-works-on\"},{\"text\":\"0030 · A runner without Coder\",\"link\":\"/docs/adr/0030-a-runner-without-coder\"},{\"text\":\"0031 · How the run viewer reads its runs\",\"link\":\"/docs/adr/0031-how-the-run-viewer-reads-its-runs\"},{\"text\":\"0032 · How a project gets the viewer\",\"link\":\"/docs/adr/0032-how-a-project-gets-the-viewer\"},{\"text\":\"0033 · The repo's license\",\"link\":\"/docs/adr/0033-the-repos-license\"},{\"text\":\"0034 · How code review launches its reviewers\",\"link\":\"/docs/adr/0034-how-code-review-launches-its-reviewers\"},{\"text\":\"0035 · How the package is published\",\"link\":\"/docs/adr/0035-how-the-package-is-published\"},{\"text\":\"0036 · What the core's pull-request skill does\",\"link\":\"/docs/adr/0036-what-the-cores-pull-request-skill-does\"},{\"text\":\"0037 · How a team reads the factory's documentation\",\"link\":\"/docs/adr/0037-how-a-team-reads-the-factorys-documentation\"},{\"text\":\"0038 · Where adapters live\",\"link\":\"/docs/adr/0038-where-adapters-live\"},{\"text\":\"0039 · The repo's license\",\"link\":\"/docs/adr/0039-the-repos-license\"},{\"text\":\"0040 · How a version is released\",\"link\":\"/docs/adr/0040-how-a-version-is-released\"},{\"text\":\"0041 · Who opens the feature's pull request, and how a ticket reaches it\",\"link\":\"/docs/adr/0041-who-opens-the-features-pull-request\"},{\"text\":\"0042 · How secrets are kept out of committed records\",\"link\":\"/docs/adr/0042-how-secrets-are-kept-out-of-committed-records\"}]}],\"editLink\":{\"pattern\":\"https://github.com/theodo-group/bernard/edit/main/:path\",\"text\":\"Edit this page on GitHub\"}},\"locales\":{},\"scrollOffset\":134,\"cleanUrls\":false}");</script>
28
+
29
+ </body>
30
+ </html>
@@ -0,0 +1,30 @@
1
+ <!DOCTYPE html>
2
+ <html lang="en-US" dir="ltr">
3
+ <head>
4
+ <meta charset="utf-8">
5
+ <meta name="viewport" content="width=device-width,initial-scale=1">
6
+ <title>How core content reaches each harness | Bernard the taktician</title>
7
+ <meta name="description" content="An agentic factory for new builds and legacy migrations.">
8
+ <meta name="generator" content="VitePress v1.6.4">
9
+ <link rel="preload stylesheet" href="/docs/assets/style.C3E8Ltp6.css" as="style">
10
+ <link rel="preload stylesheet" href="/docs/vp-icons.css" as="style">
11
+
12
+ <script type="module" src="/docs/assets/app.URmpjWHb.js"></script>
13
+ <link rel="preload" href="/docs/assets/inter-roman-latin.Di8DUHzh.woff2" as="font" type="font/woff2" crossorigin="">
14
+ <link rel="modulepreload" href="/docs/assets/chunks/framework.hgjl6W6o.js">
15
+ <link rel="modulepreload" href="/docs/assets/chunks/theme.Cksh_UJH.js">
16
+ <link rel="modulepreload" href="/docs/assets/chunks/sizeCapture-INFHLROL.BEqL2zFi.js">
17
+ <link rel="modulepreload" href="/docs/assets/chunks/dagre-GXQ25YYZ.2qvw8AqH.js">
18
+ <link rel="modulepreload" href="/docs/assets/chunks/stateDiagram-v2-MP3YSRHH.3X7wNXKX.js">
19
+ <link rel="modulepreload" href="/docs/assets/chunks/virtual_mermaid-config.DDnGl6nM.js">
20
+ <link rel="modulepreload" href="/docs/assets/docs_adr_0003-how-core-content-reaches-each-harness.md.BMWE00Mf.lean.js">
21
+ <link rel="icon" href="/docs/bernard.svg" type="image/svg+xml">
22
+ <script id="check-dark-mode">(()=>{const e=localStorage.getItem("vitepress-theme-appearance")||"auto",a=window.matchMedia("(prefers-color-scheme: dark)").matches;(!e||e==="auto"?a:e==="dark")&&document.documentElement.classList.add("dark")})();</script>
23
+ <script id="check-mac-os">document.documentElement.classList.toggle("mac",/Mac|iPhone|iPod|iPad/i.test(navigator.platform));</script>
24
+ </head>
25
+ <body>
26
+ <div id="app"><div class="Layout" data-v-f87bd3ac><!--[--><!--]--><!--[--><span tabindex="-1" data-v-26966a6b></span><a href="#VPContent" class="VPSkipLink visually-hidden" data-v-26966a6b>Skip to content</a><!--]--><!----><header class="VPNav" data-v-f87bd3ac data-v-a776a728><div class="VPNavBar" data-v-a776a728 data-v-257d37ee><div class="wrapper" data-v-257d37ee><div class="container" data-v-257d37ee><div class="title" data-v-257d37ee><div class="VPNavBarTitle has-sidebar" data-v-257d37ee data-v-1b9c14bd><a class="title" href="/docs/" data-v-1b9c14bd><!--[--><!--]--><!--[--><img class="VPImage logo" src="/docs/bernard.svg" alt data-v-4a9aa8e2><!--]--><span data-v-1b9c14bd>Bernard</span><!--[--><!--]--></a></div></div><div class="content" data-v-257d37ee><div class="content-body" data-v-257d37ee><!--[--><!--]--><div class="VPNavBarSearch search" data-v-257d37ee><!--[--><!----><div id="local-search"><button type="button" class="DocSearch DocSearch-Button" aria-label="Search"><span class="DocSearch-Button-Container"><span class="vp-icon DocSearch-Search-Icon"></span><span class="DocSearch-Button-Placeholder">Search</span></span><span class="DocSearch-Button-Keys"><kbd class="DocSearch-Button-Key"></kbd><kbd class="DocSearch-Button-Key">K</kbd></span></button></div><!--]--></div><nav aria-labelledby="main-nav-aria-label" class="VPNavBarMenu menu" data-v-257d37ee data-v-96ed2429><span id="main-nav-aria-label" class="visually-hidden" data-v-96ed2429> Main Navigation </span><!--[--><!--[--><a class="VPLink link VPNavBarMenuLink" href="/docs/docs/getting-started.html" tabindex="0" data-v-96ed2429 data-v-c21a295c><!--[--><span data-v-c21a295c>Guides</span><!--]--></a><!--]--><!--[--><a class="VPLink link VPNavBarMenuLink" href="/docs/CONTRIBUTING.html" tabindex="0" data-v-96ed2429 data-v-c21a295c><!--[--><span data-v-c21a295c>Contributing</span><!--]--></a><!--]--><!--[--><a class="VPLink link VPNavBarMenuLink" href="/docs/docs/adr/0001-what-the-core-is-built-for.html" tabindex="0" data-v-96ed2429 data-v-c21a295c><!--[--><span data-v-c21a295c>Decisions</span><!--]--></a><!--]--><!--]--></nav><!----><div class="VPNavBarAppearance appearance" data-v-257d37ee data-v-772a648f><button class="VPSwitch VPSwitchAppearance" type="button" role="switch" title aria-checked="false" data-v-772a648f data-v-32dadf2f data-v-033bec8f><span class="check" data-v-033bec8f><span class="icon" data-v-033bec8f><!--[--><span class="vpi-sun sun" data-v-32dadf2f></span><span class="vpi-moon moon" data-v-32dadf2f></span><!--]--></span></span></button></div><!----><div class="VPFlyout VPNavBarExtra extra" data-v-257d37ee data-v-6a77a12d data-v-6ff730e4><button type="button" class="button" aria-haspopup="true" aria-expanded="false" aria-label="extra navigation" data-v-6ff730e4><span class="vpi-more-horizontal icon" data-v-6ff730e4></span></button><div class="menu" data-v-6ff730e4><div class="VPMenu" data-v-6ff730e4 data-v-7e1ab185><!----><!--[--><!--[--><!----><div class="group" data-v-6a77a12d><div class="item appearance" data-v-6a77a12d><p class="label" data-v-6a77a12d>Appearance</p><div class="appearance-action" data-v-6a77a12d><button class="VPSwitch VPSwitchAppearance" type="button" role="switch" title aria-checked="false" data-v-6a77a12d data-v-32dadf2f data-v-033bec8f><span class="check" data-v-033bec8f><span class="icon" data-v-033bec8f><!--[--><span class="vpi-sun sun" data-v-32dadf2f></span><span class="vpi-moon moon" data-v-32dadf2f></span><!--]--></span></span></button></div></div></div><!----><!--]--><!--]--></div></div></div><!--[--><!--[--><!--[--><a class="viewer-switch" href="/">Run viewer</a><!--]--><!--]--><!--]--><button type="button" class="VPNavBarHamburger hamburger" aria-label="mobile navigation" aria-expanded="false" aria-controls="VPNavScreen" data-v-257d37ee data-v-33d7d0d7><span class="container" data-v-33d7d0d7><span class="top" data-v-33d7d0d7></span><span class="middle" data-v-33d7d0d7></span><span class="bottom" data-v-33d7d0d7></span></span></button></div></div></div></div><div class="divider" data-v-257d37ee><div class="divider-line" data-v-257d37ee></div></div></div><!----></header><div class="VPLocalNav has-sidebar empty" data-v-f87bd3ac data-v-c5f097a9><div class="container" data-v-c5f097a9><button class="menu" aria-expanded="false" aria-controls="VPSidebarNav" data-v-c5f097a9><span class="vpi-align-left menu-icon" data-v-c5f097a9></span><span class="menu-text" data-v-c5f097a9>Menu</span></button><div class="VPLocalNavOutlineDropdown" style="--vp-vh:0px;" data-v-c5f097a9 data-v-cb88d934><button data-v-cb88d934>Return to top</button><!----></div></div></div><aside class="VPSidebar" data-v-f87bd3ac data-v-979e8f18><div class="curtain" data-v-979e8f18></div><nav class="nav" id="VPSidebarNav" aria-labelledby="sidebar-aria-label" tabindex="-1" data-v-979e8f18><span class="visually-hidden" id="sidebar-aria-label" data-v-979e8f18> Sidebar Navigation </span><!--[--><!--]--><!--[--><div class="no-transition group" data-v-b9208f43><section class="VPSidebarItem level-0 collapsible" data-v-b9208f43 data-v-0b328883><div class="item" role="button" tabindex="0" data-v-0b328883><div class="indicator" data-v-0b328883></div><h2 class="text" data-v-0b328883>Bernard</h2><div class="caret" role="button" aria-label="toggle section" tabindex="0" data-v-0b328883><span class="vpi-chevron-right caret-icon" data-v-0b328883></span></div></div><div class="items" data-v-0b328883><!--[--><div class="VPSidebarItem level-1 is-link" data-v-0b328883><div class="item" data-v-0b328883><div class="indicator" data-v-0b328883></div><a class="VPLink link link" href="/docs/" data-v-0b328883><!--[--><p class="text" data-v-0b328883>Overview</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-0b328883><div class="item" data-v-0b328883><div class="indicator" data-v-0b328883></div><a class="VPLink link link" href="/docs/CONTEXT.html" data-v-0b328883><!--[--><p class="text" data-v-0b328883>Vocabulary</p><!--]--></a><!----></div><!----></div><!--]--></div></section></div><div class="no-transition group" data-v-b9208f43><section class="VPSidebarItem level-0 collapsible" data-v-b9208f43 data-v-0b328883><div class="item" role="button" tabindex="0" data-v-0b328883><div class="indicator" data-v-0b328883></div><h2 class="text" data-v-0b328883>Guides</h2><div class="caret" role="button" aria-label="toggle section" tabindex="0" data-v-0b328883><span class="vpi-chevron-right caret-icon" data-v-0b328883></span></div></div><div class="items" data-v-0b328883><!--[--><div class="VPSidebarItem level-1 is-link" data-v-0b328883><div class="item" data-v-0b328883><div class="indicator" data-v-0b328883></div><a class="VPLink link link" href="/docs/docs/getting-started.html" data-v-0b328883><!--[--><p class="text" data-v-0b328883>Getting started</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-0b328883><div class="item" data-v-0b328883><div class="indicator" data-v-0b328883></div><a class="VPLink link link" href="/docs/docs/overlay.html" data-v-0b328883><!--[--><p class="text" data-v-0b328883>The overlay</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-0b328883><div class="item" data-v-0b328883><div class="indicator" data-v-0b328883></div><a class="VPLink link link" href="/docs/docs/recipes.html" data-v-0b328883><!--[--><p class="text" data-v-0b328883>Recipes</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-0b328883><div class="item" data-v-0b328883><div class="indicator" data-v-0b328883></div><a class="VPLink link link" href="/docs/docs/pipeline.html" data-v-0b328883><!--[--><p class="text" data-v-0b328883>Pipeline</p><!--]--></a><!----></div><!----></div><!--]--></div></section></div><div class="no-transition group" data-v-b9208f43><section class="VPSidebarItem level-0 collapsible" data-v-b9208f43 data-v-0b328883><div class="item" role="button" tabindex="0" data-v-0b328883><div class="indicator" data-v-0b328883></div><h2 class="text" data-v-0b328883>Contributing</h2><div class="caret" role="button" aria-label="toggle section" tabindex="0" data-v-0b328883><span class="vpi-chevron-right caret-icon" data-v-0b328883></span></div></div><div class="items" data-v-0b328883><!--[--><div class="VPSidebarItem level-1 is-link" data-v-0b328883><div class="item" data-v-0b328883><div class="indicator" data-v-0b328883></div><a class="VPLink link link" href="/docs/CONTRIBUTING.html" data-v-0b328883><!--[--><p class="text" data-v-0b328883>Contributing</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-0b328883><div class="item" data-v-0b328883><div class="indicator" data-v-0b328883></div><a class="VPLink link link" href="/docs/CLAUDE.html" data-v-0b328883><!--[--><p class="text" data-v-0b328883>Rules for agents</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-0b328883><div class="item" data-v-0b328883><div class="indicator" data-v-0b328883></div><a class="VPLink link link" href="/docs/docs/github.html" data-v-0b328883><!--[--><p class="text" data-v-0b328883>GitHub</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-0b328883><div class="item" data-v-0b328883><div class="indicator" data-v-0b328883></div><a class="VPLink link link" href="/docs/core/README.html" data-v-0b328883><!--[--><p class="text" data-v-0b328883>Core content</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-0b328883><div class="item" data-v-0b328883><div class="indicator" data-v-0b328883></div><a class="VPLink link link" href="/docs/packages/viewer/README.html" data-v-0b328883><!--[--><p class="text" data-v-0b328883>Run viewer</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-0b328883><div class="item" data-v-0b328883><div class="indicator" data-v-0b328883></div><a class="VPLink link link" href="/docs/packages/docs/README.html" data-v-0b328883><!--[--><p class="text" data-v-0b328883>Documentation site</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-0b328883><div class="item" data-v-0b328883><div class="indicator" data-v-0b328883></div><a class="VPLink link link" href="/docs/fixtures/README.html" data-v-0b328883><!--[--><p class="text" data-v-0b328883>Fixtures</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-0b328883><div class="item" data-v-0b328883><div class="indicator" data-v-0b328883></div><a class="VPLink link link" href="/docs/demo/README.html" data-v-0b328883><!--[--><p class="text" data-v-0b328883>Demo</p><!--]--></a><!----></div><!----></div><!--]--></div></section></div><div class="no-transition group" data-v-b9208f43><section class="VPSidebarItem level-0 collapsible collapsed has-active" data-v-b9208f43 data-v-0b328883><div class="item" role="button" tabindex="0" data-v-0b328883><div class="indicator" data-v-0b328883></div><h2 class="text" data-v-0b328883>Decisions</h2><div class="caret" role="button" aria-label="toggle section" tabindex="0" data-v-0b328883><span class="vpi-chevron-right caret-icon" data-v-0b328883></span></div></div><div class="items" data-v-0b328883><!--[--><div class="VPSidebarItem level-1 is-link" data-v-0b328883><div class="item" data-v-0b328883><div class="indicator" data-v-0b328883></div><a class="VPLink link link" href="/docs/docs/adr/0001-what-the-core-is-built-for.html" data-v-0b328883><!--[--><p class="text" data-v-0b328883>0001 · What the core is built for</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-0b328883><div class="item" data-v-0b328883><div class="indicator" data-v-0b328883></div><a class="VPLink link link" href="/docs/docs/adr/0002-which-harness-a-project-runs-on.html" data-v-0b328883><!--[--><p class="text" data-v-0b328883>0002 · Which harness a project runs on</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-0b328883><div class="item" data-v-0b328883><div class="indicator" data-v-0b328883></div><a class="VPLink link link" href="/docs/docs/adr/0003-how-core-content-reaches-each-harness.html" data-v-0b328883><!--[--><p class="text" data-v-0b328883>0003 · How core content reaches each harness</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-0b328883><div class="item" data-v-0b328883><div class="indicator" data-v-0b328883></div><a class="VPLink link link" href="/docs/docs/adr/0004-how-the-core-uses-external-tools.html" data-v-0b328883><!--[--><p class="text" data-v-0b328883>0004 · How the core uses external tools</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-0b328883><div class="item" data-v-0b328883><div class="indicator" data-v-0b328883></div><a class="VPLink link link" href="/docs/docs/adr/0005-what-drives-the-pipeline.html" data-v-0b328883><!--[--><p class="text" data-v-0b328883>0005 · What drives the pipeline</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-0b328883><div class="item" data-v-0b328883><div class="indicator" data-v-0b328883></div><a class="VPLink link link" href="/docs/docs/adr/0006-what-steps-hand-off-to-each-other.html" data-v-0b328883><!--[--><p class="text" data-v-0b328883>0006 · What steps hand off to each other</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-0b328883><div class="item" data-v-0b328883><div class="indicator" data-v-0b328883></div><a class="VPLink link link" href="/docs/docs/adr/0007-how-humans-take-part-in-the-pipeline.html" data-v-0b328883><!--[--><p class="text" data-v-0b328883>0007 · How humans take part in the pipeline</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-0b328883><div class="item" data-v-0b328883><div class="indicator" data-v-0b328883></div><a class="VPLink link link" href="/docs/docs/adr/0008-where-a-steps-reviewers-run.html" data-v-0b328883><!--[--><p class="text" data-v-0b328883>0008 · Where a step's reviewers run</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-0b328883><div class="item" data-v-0b328883><div class="indicator" data-v-0b328883></div><a class="VPLink link link" href="/docs/docs/adr/0009-where-pipeline-state-and-handoffs-live.html" data-v-0b328883><!--[--><p class="text" data-v-0b328883>0009 · Where pipeline state and handoffs live</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-0b328883><div class="item" data-v-0b328883><div class="indicator" data-v-0b328883></div><a class="VPLink link link" href="/docs/docs/adr/0010-how-a-project-adapts-the-core.html" data-v-0b328883><!--[--><p class="text" data-v-0b328883>0010 · How a project adapts the core</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-0b328883><div class="item" data-v-0b328883><div class="indicator" data-v-0b328883></div><a class="VPLink link link" href="/docs/docs/adr/0011-how-the-factory-is-packaged-and-versioned.html" data-v-0b328883><!--[--><p class="text" data-v-0b328883>0011 · How the factory is packaged and versioned</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-0b328883><div class="item" data-v-0b328883><div class="indicator" data-v-0b328883></div><a class="VPLink link link" href="/docs/docs/adr/0012-how-a-steps-failures-are-told-apart-and-routed.html" data-v-0b328883><!--[--><p class="text" data-v-0b328883>0012 · How a step's failures are told apart and routed</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-0b328883><div class="item" data-v-0b328883><div class="indicator" data-v-0b328883></div><a class="VPLink link link" href="/docs/docs/adr/0013-when-code-lands.html" data-v-0b328883><!--[--><p class="text" data-v-0b328883>0013 · When code lands</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-0b328883><div class="item" data-v-0b328883><div class="indicator" data-v-0b328883></div><a class="VPLink link link" href="/docs/docs/adr/0014-what-a-step-may-change.html" data-v-0b328883><!--[--><p class="text" data-v-0b328883>0014 · What a step may change</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-0b328883><div class="item" data-v-0b328883><div class="indicator" data-v-0b328883></div><a class="VPLink link link" href="/docs/docs/adr/0015-how-a-project-shapes-its-ticket-flow.html" data-v-0b328883><!--[--><p class="text" data-v-0b328883>0015 · How a project shapes its ticket flow</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-0b328883><div class="item" data-v-0b328883><div class="indicator" data-v-0b328883></div><a class="VPLink link link" href="/docs/docs/adr/0016-which-core-the-factory-repo-runs.html" data-v-0b328883><!--[--><p class="text" data-v-0b328883>0016 · Which core the factory repo runs</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-0b328883><div class="item" data-v-0b328883><div class="indicator" data-v-0b328883></div><a class="VPLink link link" href="/docs/docs/adr/0017-where-a-tickets-record-lives.html" data-v-0b328883><!--[--><p class="text" data-v-0b328883>0017 · Where a ticket's record lives</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-0b328883><div class="item" data-v-0b328883><div class="indicator" data-v-0b328883></div><a class="VPLink link link" href="/docs/docs/adr/0018-the-products-name.html" data-v-0b328883><!--[--><p class="text" data-v-0b328883>0018 · The product's name</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-0b328883><div class="item" data-v-0b328883><div class="indicator" data-v-0b328883></div><a class="VPLink link link" href="/docs/docs/adr/0019-how-a-finding-is-answered-and-judged.html" data-v-0b328883><!--[--><p class="text" data-v-0b328883>0019 · How a finding is answered and judged</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-0b328883><div class="item" data-v-0b328883><div class="indicator" data-v-0b328883></div><a class="VPLink link link" href="/docs/docs/adr/0020-how-an-interrupted-run-resumes.html" data-v-0b328883><!--[--><p class="text" data-v-0b328883>0020 · How an interrupted run resumes</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-0b328883><div class="item" data-v-0b328883><div class="indicator" data-v-0b328883></div><a class="VPLink link link" href="/docs/docs/adr/0021-how-a-step-runs-in-its-workspace.html" data-v-0b328883><!--[--><p class="text" data-v-0b328883>0021 · How a step runs in its workspace</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-0b328883><div class="item" data-v-0b328883><div class="indicator" data-v-0b328883></div><a class="VPLink link link" href="/docs/docs/adr/0022-who-names-the-branches.html" data-v-0b328883><!--[--><p class="text" data-v-0b328883>0022 · Who names the branches</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-0b328883><div class="item" data-v-0b328883><div class="indicator" data-v-0b328883></div><a class="VPLink link link" href="/docs/docs/adr/0023-how-a-version-ships-before-npm.html" data-v-0b328883><!--[--><p class="text" data-v-0b328883>0023 · How a version ships before npm</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-0b328883><div class="item" data-v-0b328883><div class="indicator" data-v-0b328883></div><a class="VPLink link link" href="/docs/docs/adr/0024-how-the-config-type-carries-its-docs.html" data-v-0b328883><!--[--><p class="text" data-v-0b328883>0024 · How the config type carries its docs</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-0b328883><div class="item" data-v-0b328883><div class="indicator" data-v-0b328883></div><a class="VPLink link link" href="/docs/docs/adr/0025-how-a-steps-handoff-is-written-and-checked.html" data-v-0b328883><!--[--><p class="text" data-v-0b328883>0025 · How a step's handoff is written and checked</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-0b328883><div class="item" data-v-0b328883><div class="indicator" data-v-0b328883></div><a class="VPLink link link" href="/docs/docs/adr/0026-support-for-github-copilot.html" data-v-0b328883><!--[--><p class="text" data-v-0b328883>0026 · Support for GitHub Copilot</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-0b328883><div class="item" data-v-0b328883><div class="indicator" data-v-0b328883></div><a class="VPLink link link" href="/docs/docs/adr/0027-which-forge-a-project-is-on.html" data-v-0b328883><!--[--><p class="text" data-v-0b328883>0027 · Which forge a project is on</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-0b328883><div class="item" data-v-0b328883><div class="indicator" data-v-0b328883></div><a class="VPLink link link" href="/docs/docs/adr/0028-several-ticket-flows-in-one-pipeline.html" data-v-0b328883><!--[--><p class="text" data-v-0b328883>0028 · Several ticket flows in one pipeline</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-0b328883><div class="item" data-v-0b328883><div class="indicator" data-v-0b328883></div><a class="VPLink link link" href="/docs/docs/adr/0029-the-branch-a-feature-works-on.html" data-v-0b328883><!--[--><p class="text" data-v-0b328883>0029 · The branch a feature works on</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-0b328883><div class="item" data-v-0b328883><div class="indicator" data-v-0b328883></div><a class="VPLink link link" href="/docs/docs/adr/0030-a-runner-without-coder.html" data-v-0b328883><!--[--><p class="text" data-v-0b328883>0030 · A runner without Coder</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-0b328883><div class="item" data-v-0b328883><div class="indicator" data-v-0b328883></div><a class="VPLink link link" href="/docs/docs/adr/0031-how-the-run-viewer-reads-its-runs.html" data-v-0b328883><!--[--><p class="text" data-v-0b328883>0031 · How the run viewer reads its runs</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-0b328883><div class="item" data-v-0b328883><div class="indicator" data-v-0b328883></div><a class="VPLink link link" href="/docs/docs/adr/0032-how-a-project-gets-the-viewer.html" data-v-0b328883><!--[--><p class="text" data-v-0b328883>0032 · How a project gets the viewer</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-0b328883><div class="item" data-v-0b328883><div class="indicator" data-v-0b328883></div><a class="VPLink link link" href="/docs/docs/adr/0033-the-repos-license.html" data-v-0b328883><!--[--><p class="text" data-v-0b328883>0033 · The repo's license</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-0b328883><div class="item" data-v-0b328883><div class="indicator" data-v-0b328883></div><a class="VPLink link link" href="/docs/docs/adr/0034-how-code-review-launches-its-reviewers.html" data-v-0b328883><!--[--><p class="text" data-v-0b328883>0034 · How code review launches its reviewers</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-0b328883><div class="item" data-v-0b328883><div class="indicator" data-v-0b328883></div><a class="VPLink link link" href="/docs/docs/adr/0035-how-the-package-is-published.html" data-v-0b328883><!--[--><p class="text" data-v-0b328883>0035 · How the package is published</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-0b328883><div class="item" data-v-0b328883><div class="indicator" data-v-0b328883></div><a class="VPLink link link" href="/docs/docs/adr/0036-what-the-cores-pull-request-skill-does.html" data-v-0b328883><!--[--><p class="text" data-v-0b328883>0036 · What the core's pull-request skill does</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-0b328883><div class="item" data-v-0b328883><div class="indicator" data-v-0b328883></div><a class="VPLink link link" href="/docs/docs/adr/0037-how-a-team-reads-the-factorys-documentation.html" data-v-0b328883><!--[--><p class="text" data-v-0b328883>0037 · How a team reads the factory's documentation</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-0b328883><div class="item" data-v-0b328883><div class="indicator" data-v-0b328883></div><a class="VPLink link link" href="/docs/docs/adr/0038-where-adapters-live.html" data-v-0b328883><!--[--><p class="text" data-v-0b328883>0038 · Where adapters live</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-0b328883><div class="item" data-v-0b328883><div class="indicator" data-v-0b328883></div><a class="VPLink link link" href="/docs/docs/adr/0039-the-repos-license.html" data-v-0b328883><!--[--><p class="text" data-v-0b328883>0039 · The repo's license</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-0b328883><div class="item" data-v-0b328883><div class="indicator" data-v-0b328883></div><a class="VPLink link link" href="/docs/docs/adr/0040-how-a-version-is-released.html" data-v-0b328883><!--[--><p class="text" data-v-0b328883>0040 · How a version is released</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-0b328883><div class="item" data-v-0b328883><div class="indicator" data-v-0b328883></div><a class="VPLink link link" href="/docs/docs/adr/0041-who-opens-the-features-pull-request.html" data-v-0b328883><!--[--><p class="text" data-v-0b328883>0041 · Who opens the feature's pull request, and how a ticket reaches it</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-0b328883><div class="item" data-v-0b328883><div class="indicator" data-v-0b328883></div><a class="VPLink link link" href="/docs/docs/adr/0042-how-secrets-are-kept-out-of-committed-records.html" data-v-0b328883><!--[--><p class="text" data-v-0b328883>0042 · How secrets are kept out of committed records</p><!--]--></a><!----></div><!----></div><!--]--></div></section></div><!--]--><!--[--><!--]--></nav></aside><div class="VPContent has-sidebar" id="VPContent" data-v-f87bd3ac data-v-67e000d0><div class="VPDoc has-sidebar has-aside" data-v-67e000d0 data-v-f8622dbf><!--[--><!--]--><div class="container" data-v-f8622dbf><div class="aside" data-v-f8622dbf><div class="aside-curtain" data-v-f8622dbf></div><div class="aside-container" data-v-f8622dbf><div class="aside-content" data-v-f8622dbf><div class="VPDocAside" data-v-f8622dbf data-v-fc01c646><!--[--><!--]--><!--[--><!--]--><nav aria-labelledby="doc-outline-aria-label" class="VPDocAsideOutline" data-v-fc01c646 data-v-172fd98a><div class="content" data-v-172fd98a><div class="outline-marker" data-v-172fd98a></div><div aria-level="2" class="outline-title" id="doc-outline-aria-label" role="heading" data-v-172fd98a>On this page</div><ul class="VPDocOutlineItem root" data-v-172fd98a data-v-ea4171dd><!--[--><!--]--></ul></div></nav><!--[--><!--]--><div class="spacer" data-v-fc01c646></div><!--[--><!--]--><!----><!--[--><!--]--><!--[--><!--]--></div></div></div></div><div class="content" data-v-f8622dbf><div class="content-container" data-v-f8622dbf><!--[--><!--]--><main class="main" data-v-f8622dbf><div style="position:relative;" class="vp-doc _docs_docs_adr_0003-how-core-content-reaches-each-harness" data-v-f8622dbf><div><h1 id="how-core-content-reaches-each-harness" tabindex="-1">How core content reaches each harness <a class="header-anchor" href="#how-core-content-reaches-each-harness" aria-label="Permalink to &quot;How core content reaches each harness&quot;">​</a></h1><p>Accepted · 2026-10-05</p><h2 id="context" tabindex="-1">Context <a class="header-anchor" href="#context" aria-label="Permalink to &quot;Context&quot;">​</a></h2><p>Core content (skills, agents, hook scripts) is written once in a harness-neutral format.</p><h2 id="criteria" tabindex="-1">Criteria <a class="header-anchor" href="#criteria" aria-label="Permalink to &quot;Criteria&quot;">​</a></h2><ol><li><strong>Native on Pi</strong>: slots resolved at runtime through <code>!`cmd`</code> injection don&#39;t exist in Pi, and Pi would otherwise depend on a young third-party bridge.</li><li><strong>No duplication</strong>: two native trees maintained by hand duplicate the core.</li><li><strong>Reviewable upgrades</strong>: reviewers see what a core upgrade changes in the prompts.</li><li><strong>No install step</strong>: otherwise every machine and every CI job needs an install step.</li></ol><h2 id="options" tabindex="-1">Options <a class="header-anchor" href="#options" aria-label="Permalink to &quot;Options&quot;">​</a></h2><ul><li><strong>A native Claude Code plugin, loaded into Pi through a community bridge.</strong> Slots resolved at runtime through <code>!`cmd`</code> injection don&#39;t exist in Pi, and Pi would depend on a young third-party bridge (1).</li><li><strong>A neutral source, rendered per harness, output committed.</strong> Core content is written once in a harness-neutral format (2). <code>bernard sync</code> fills the slots and writes the native files of the project&#39;s harness (1). The rendered files are committed (4), so a core upgrade arrives as a PR showing the exact diff of the project&#39;s prompts (3).</li><li><strong>Two native trees maintained by hand.</strong> Duplication (2).</li><li><strong>Render at install time and gitignore the output, as one existing factory does.</strong> Every machine and every CI job then needs an install step (4), and reviewers can&#39;t see what a core upgrade changes in the prompts (3).</li></ul><h2 id="comparison" tabindex="-1">Comparison <a class="header-anchor" href="#comparison" aria-label="Permalink to &quot;Comparison&quot;">​</a></h2><table tabindex="0"><thead><tr><th>Option</th><th>1. Native on Pi</th><th>2. No duplication</th><th>3. Reviewable upgrades</th><th>4. No install step</th></tr></thead><tbody><tr><td>Claude Code plugin through a bridge</td><td>🔴</td><td>🟢</td><td>⚪</td><td>⚪</td></tr><tr><td>Neutral source, rendered, committed</td><td>🟢</td><td>🟢</td><td>🟢</td><td>🟢</td></tr><tr><td>Two native trees by hand</td><td>🟢</td><td>🔴</td><td>⚪</td><td>⚪</td></tr><tr><td>Render at install time</td><td>🟢</td><td>🟢</td><td>🔴</td><td>🔴</td></tr></tbody></table><p>🟢 meets · 🟠 partly, or at a cost · 🔴 fails · ⚪ not discussed</p><h2 id="decision" tabindex="-1">Decision <a class="header-anchor" href="#decision" aria-label="Permalink to &quot;Decision&quot;">​</a></h2><p>A neutral source, rendered per harness, output committed. <code>bernard sync</code> assembles the core, the adapters and the project&#39;s overlay, fills the slots, and writes the native files of the project&#39;s harness (<code>.claude/</code> or <code>.pi/</code>). The rendered files are committed, and CI runs <code>bernard sync --check</code> to reject hand edits. Sync overwrites or deletes only the files its lock lists, unchanged since the last sync. It refuses any other file at a path it generates or deletes, and then writes nothing.</p><h2 id="consequences" tabindex="-1">Consequences <a class="header-anchor" href="#consequences" aria-label="Permalink to &quot;Consequences&quot;">​</a></h2><ul><li>We don&#39;t use the Claude Code plugin marketplace.</li><li>A core upgrade arrives as a PR showing the exact diff of the project&#39;s prompts.</li></ul></div></div></main><footer class="VPDocFooter" data-v-f8622dbf data-v-020e2df0><!--[--><!--]--><div class="edit-info" data-v-020e2df0><div class="edit-link" data-v-020e2df0><a class="VPLink link vp-external-link-icon no-icon edit-link-button" href="https://github.com/theodo-group/bernard/edit/main/docs/adr/0003-how-core-content-reaches-each-harness.md" target="_blank" rel="noreferrer" data-v-020e2df0><!--[--><span class="vpi-square-pen edit-link-icon" data-v-020e2df0></span> Edit this page on GitHub<!--]--></a></div><!----></div><nav class="prev-next" aria-labelledby="doc-footer-aria-label" data-v-020e2df0><span class="visually-hidden" id="doc-footer-aria-label" data-v-020e2df0>Pager</span><div class="pager" data-v-020e2df0><a class="VPLink link pager-link prev" href="/docs/docs/adr/0002-which-harness-a-project-runs-on.html" data-v-020e2df0><!--[--><span class="desc" data-v-020e2df0>Previous page</span><span class="title" data-v-020e2df0>0002 · Which harness a project runs on</span><!--]--></a></div><div class="pager" data-v-020e2df0><a class="VPLink link pager-link next" href="/docs/docs/adr/0004-how-the-core-uses-external-tools.html" data-v-020e2df0><!--[--><span class="desc" data-v-020e2df0>Next page</span><span class="title" data-v-020e2df0>0004 · How the core uses external tools</span><!--]--></a></div></nav></footer><!--[--><!--]--></div></div></div><!--[--><!--]--></div></div><!----><!--[--><!--]--></div></div>
27
+ <script>window.__VP_HASH_MAP__=JSON.parse("{\"claude.md\":\"BLSB-5gK\",\"context.md\":\"BovnvMGK\",\"contributing.md\":\"DwJsKrz3\",\"core_readme.md\":\"DyxYsikc\",\"demo_readme.md\":\"Cpi2pUU9\",\"docs_adr_0001-what-the-core-is-built-for.md\":\"BxOoMjST\",\"docs_adr_0002-which-harness-a-project-runs-on.md\":\"2GwF-nj0\",\"docs_adr_0003-how-core-content-reaches-each-harness.md\":\"BMWE00Mf\",\"docs_adr_0004-how-the-core-uses-external-tools.md\":\"B7dtE7MB\",\"docs_adr_0005-what-drives-the-pipeline.md\":\"DGn0CJeq\",\"docs_adr_0006-what-steps-hand-off-to-each-other.md\":\"BflT5ugJ\",\"docs_adr_0007-how-humans-take-part-in-the-pipeline.md\":\"CNX3gUD-\",\"docs_adr_0008-where-a-steps-reviewers-run.md\":\"aGbaBOpB\",\"docs_adr_0009-where-pipeline-state-and-handoffs-live.md\":\"C3tKmV-E\",\"docs_adr_0010-how-a-project-adapts-the-core.md\":\"Bp7N6tUE\",\"docs_adr_0011-how-the-factory-is-packaged-and-versioned.md\":\"BBJIwnqa\",\"docs_adr_0012-how-a-steps-failures-are-told-apart-and-routed.md\":\"uCyrBfug\",\"docs_adr_0013-when-code-lands.md\":\"oXgiobfz\",\"docs_adr_0014-what-a-step-may-change.md\":\"Zslg3bnJ\",\"docs_adr_0015-how-a-project-shapes-its-ticket-flow.md\":\"DNHMxwIT\",\"docs_adr_0016-which-core-the-factory-repo-runs.md\":\"CLN6LqBZ\",\"docs_adr_0017-where-a-tickets-record-lives.md\":\"jjUeM-ex\",\"docs_adr_0018-the-products-name.md\":\"6xaX9vDs\",\"docs_adr_0019-how-a-finding-is-answered-and-judged.md\":\"CKKoO9-3\",\"docs_adr_0020-how-an-interrupted-run-resumes.md\":\"DTIP-MBK\",\"docs_adr_0021-how-a-step-runs-in-its-workspace.md\":\"B2r3-FPg\",\"docs_adr_0022-who-names-the-branches.md\":\"DaVk8X0i\",\"docs_adr_0023-how-a-version-ships-before-npm.md\":\"C7-wuCbq\",\"docs_adr_0024-how-the-config-type-carries-its-docs.md\":\"CQmwhWXs\",\"docs_adr_0025-how-a-steps-handoff-is-written-and-checked.md\":\"CgXYdF2v\",\"docs_adr_0026-support-for-github-copilot.md\":\"DJsawm-R\",\"docs_adr_0027-which-forge-a-project-is-on.md\":\"CY0qy9xh\",\"docs_adr_0028-several-ticket-flows-in-one-pipeline.md\":\"oxffo2qg\",\"docs_adr_0029-the-branch-a-feature-works-on.md\":\"CrgkP6YJ\",\"docs_adr_0030-a-runner-without-coder.md\":\"CW8sF7jK\",\"docs_adr_0031-how-the-run-viewer-reads-its-runs.md\":\"opQYnVF2\",\"docs_adr_0032-how-a-project-gets-the-viewer.md\":\"DB9NjYJf\",\"docs_adr_0033-the-repos-license.md\":\"NPlkrPj8\",\"docs_adr_0034-how-code-review-launches-its-reviewers.md\":\"DSNpkfaL\",\"docs_adr_0035-how-the-package-is-published.md\":\"C1f4B5eb\",\"docs_adr_0036-what-the-cores-pull-request-skill-does.md\":\"op39HLAT\",\"docs_adr_0037-how-a-team-reads-the-factorys-documentation.md\":\"Dar_Xo4t\",\"docs_adr_0038-where-adapters-live.md\":\"CkVD3riv\",\"docs_adr_0039-the-repos-license.md\":\"C_rraWpb\",\"docs_adr_0040-how-a-version-is-released.md\":\"CCdwC07z\",\"docs_adr_0041-who-opens-the-features-pull-request.md\":\"qLu9WLaG\",\"docs_adr_0042-how-secrets-are-kept-out-of-committed-records.md\":\"DJWazI4H\",\"docs_getting-started.md\":\"BpQFS8Gr\",\"docs_github.md\":\"D4gkW71G\",\"docs_overlay.md\":\"DoWVb6OM\",\"docs_pipeline.md\":\"DdHywWSk\",\"docs_recipes.md\":\"8Xf6BsRA\",\"fixtures_readme.md\":\"DzbQ0hft\",\"index.md\":\"DHgL6CzS\",\"packages_docs_readme.md\":\"PV1a27nC\",\"packages_viewer_readme.md\":\"BynKZSdN\"}");window.__VP_SITE_DATA__=JSON.parse("{\"lang\":\"en-US\",\"dir\":\"ltr\",\"title\":\"Bernard the taktician\",\"description\":\"An agentic factory for new builds and legacy migrations.\",\"base\":\"/docs/\",\"head\":[],\"router\":{\"prefetchLinks\":true},\"appearance\":true,\"themeConfig\":{\"logo\":\"/bernard.svg\",\"siteTitle\":\"Bernard\",\"outline\":[2,3],\"search\":{\"provider\":\"local\"},\"nav\":[{\"text\":\"Guides\",\"link\":\"/docs/getting-started\"},{\"text\":\"Contributing\",\"link\":\"/CONTRIBUTING\"},{\"text\":\"Decisions\",\"link\":\"/docs/adr/0001-what-the-core-is-built-for\"}],\"sidebar\":[{\"text\":\"Bernard\",\"collapsed\":false,\"items\":[{\"text\":\"Overview\",\"link\":\"/\"},{\"text\":\"Vocabulary\",\"link\":\"/CONTEXT\"}]},{\"text\":\"Guides\",\"collapsed\":false,\"items\":[{\"text\":\"Getting started\",\"link\":\"/docs/getting-started\"},{\"text\":\"The overlay\",\"link\":\"/docs/overlay\"},{\"text\":\"Recipes\",\"link\":\"/docs/recipes\"},{\"text\":\"Pipeline\",\"link\":\"/docs/pipeline\"}]},{\"text\":\"Contributing\",\"collapsed\":false,\"items\":[{\"text\":\"Contributing\",\"link\":\"/CONTRIBUTING\"},{\"text\":\"Rules for agents\",\"link\":\"/CLAUDE\"},{\"text\":\"GitHub\",\"link\":\"/docs/github\"},{\"text\":\"Core content\",\"link\":\"/core/README\"},{\"text\":\"Run viewer\",\"link\":\"/packages/viewer/README\"},{\"text\":\"Documentation site\",\"link\":\"/packages/docs/README\"},{\"text\":\"Fixtures\",\"link\":\"/fixtures/README\"},{\"text\":\"Demo\",\"link\":\"/demo/README\"}]},{\"text\":\"Decisions\",\"collapsed\":true,\"items\":[{\"text\":\"0001 · What the core is built for\",\"link\":\"/docs/adr/0001-what-the-core-is-built-for\"},{\"text\":\"0002 · Which harness a project runs on\",\"link\":\"/docs/adr/0002-which-harness-a-project-runs-on\"},{\"text\":\"0003 · How core content reaches each harness\",\"link\":\"/docs/adr/0003-how-core-content-reaches-each-harness\"},{\"text\":\"0004 · How the core uses external tools\",\"link\":\"/docs/adr/0004-how-the-core-uses-external-tools\"},{\"text\":\"0005 · What drives the pipeline\",\"link\":\"/docs/adr/0005-what-drives-the-pipeline\"},{\"text\":\"0006 · What steps hand off to each other\",\"link\":\"/docs/adr/0006-what-steps-hand-off-to-each-other\"},{\"text\":\"0007 · How humans take part in the pipeline\",\"link\":\"/docs/adr/0007-how-humans-take-part-in-the-pipeline\"},{\"text\":\"0008 · Where a step's reviewers run\",\"link\":\"/docs/adr/0008-where-a-steps-reviewers-run\"},{\"text\":\"0009 · Where pipeline state and handoffs live\",\"link\":\"/docs/adr/0009-where-pipeline-state-and-handoffs-live\"},{\"text\":\"0010 · How a project adapts the core\",\"link\":\"/docs/adr/0010-how-a-project-adapts-the-core\"},{\"text\":\"0011 · How the factory is packaged and versioned\",\"link\":\"/docs/adr/0011-how-the-factory-is-packaged-and-versioned\"},{\"text\":\"0012 · How a step's failures are told apart and routed\",\"link\":\"/docs/adr/0012-how-a-steps-failures-are-told-apart-and-routed\"},{\"text\":\"0013 · When code lands\",\"link\":\"/docs/adr/0013-when-code-lands\"},{\"text\":\"0014 · What a step may change\",\"link\":\"/docs/adr/0014-what-a-step-may-change\"},{\"text\":\"0015 · How a project shapes its ticket flow\",\"link\":\"/docs/adr/0015-how-a-project-shapes-its-ticket-flow\"},{\"text\":\"0016 · Which core the factory repo runs\",\"link\":\"/docs/adr/0016-which-core-the-factory-repo-runs\"},{\"text\":\"0017 · Where a ticket's record lives\",\"link\":\"/docs/adr/0017-where-a-tickets-record-lives\"},{\"text\":\"0018 · The product's name\",\"link\":\"/docs/adr/0018-the-products-name\"},{\"text\":\"0019 · How a finding is answered and judged\",\"link\":\"/docs/adr/0019-how-a-finding-is-answered-and-judged\"},{\"text\":\"0020 · How an interrupted run resumes\",\"link\":\"/docs/adr/0020-how-an-interrupted-run-resumes\"},{\"text\":\"0021 · How a step runs in its workspace\",\"link\":\"/docs/adr/0021-how-a-step-runs-in-its-workspace\"},{\"text\":\"0022 · Who names the branches\",\"link\":\"/docs/adr/0022-who-names-the-branches\"},{\"text\":\"0023 · How a version ships before npm\",\"link\":\"/docs/adr/0023-how-a-version-ships-before-npm\"},{\"text\":\"0024 · How the config type carries its docs\",\"link\":\"/docs/adr/0024-how-the-config-type-carries-its-docs\"},{\"text\":\"0025 · How a step's handoff is written and checked\",\"link\":\"/docs/adr/0025-how-a-steps-handoff-is-written-and-checked\"},{\"text\":\"0026 · Support for GitHub Copilot\",\"link\":\"/docs/adr/0026-support-for-github-copilot\"},{\"text\":\"0027 · Which forge a project is on\",\"link\":\"/docs/adr/0027-which-forge-a-project-is-on\"},{\"text\":\"0028 · Several ticket flows in one pipeline\",\"link\":\"/docs/adr/0028-several-ticket-flows-in-one-pipeline\"},{\"text\":\"0029 · The branch a feature works on\",\"link\":\"/docs/adr/0029-the-branch-a-feature-works-on\"},{\"text\":\"0030 · A runner without Coder\",\"link\":\"/docs/adr/0030-a-runner-without-coder\"},{\"text\":\"0031 · How the run viewer reads its runs\",\"link\":\"/docs/adr/0031-how-the-run-viewer-reads-its-runs\"},{\"text\":\"0032 · How a project gets the viewer\",\"link\":\"/docs/adr/0032-how-a-project-gets-the-viewer\"},{\"text\":\"0033 · The repo's license\",\"link\":\"/docs/adr/0033-the-repos-license\"},{\"text\":\"0034 · How code review launches its reviewers\",\"link\":\"/docs/adr/0034-how-code-review-launches-its-reviewers\"},{\"text\":\"0035 · How the package is published\",\"link\":\"/docs/adr/0035-how-the-package-is-published\"},{\"text\":\"0036 · What the core's pull-request skill does\",\"link\":\"/docs/adr/0036-what-the-cores-pull-request-skill-does\"},{\"text\":\"0037 · How a team reads the factory's documentation\",\"link\":\"/docs/adr/0037-how-a-team-reads-the-factorys-documentation\"},{\"text\":\"0038 · Where adapters live\",\"link\":\"/docs/adr/0038-where-adapters-live\"},{\"text\":\"0039 · The repo's license\",\"link\":\"/docs/adr/0039-the-repos-license\"},{\"text\":\"0040 · How a version is released\",\"link\":\"/docs/adr/0040-how-a-version-is-released\"},{\"text\":\"0041 · Who opens the feature's pull request, and how a ticket reaches it\",\"link\":\"/docs/adr/0041-who-opens-the-features-pull-request\"},{\"text\":\"0042 · How secrets are kept out of committed records\",\"link\":\"/docs/adr/0042-how-secrets-are-kept-out-of-committed-records\"}]}],\"editLink\":{\"pattern\":\"https://github.com/theodo-group/bernard/edit/main/:path\",\"text\":\"Edit this page on GitHub\"}},\"locales\":{},\"scrollOffset\":134,\"cleanUrls\":false}");</script>
28
+
29
+ </body>
30
+ </html>
@@ -0,0 +1,30 @@
1
+ <!DOCTYPE html>
2
+ <html lang="en-US" dir="ltr">
3
+ <head>
4
+ <meta charset="utf-8">
5
+ <meta name="viewport" content="width=device-width,initial-scale=1">
6
+ <title>How the core uses external tools | Bernard the taktician</title>
7
+ <meta name="description" content="An agentic factory for new builds and legacy migrations.">
8
+ <meta name="generator" content="VitePress v1.6.4">
9
+ <link rel="preload stylesheet" href="/docs/assets/style.C3E8Ltp6.css" as="style">
10
+ <link rel="preload stylesheet" href="/docs/vp-icons.css" as="style">
11
+
12
+ <script type="module" src="/docs/assets/app.URmpjWHb.js"></script>
13
+ <link rel="preload" href="/docs/assets/inter-roman-latin.Di8DUHzh.woff2" as="font" type="font/woff2" crossorigin="">
14
+ <link rel="modulepreload" href="/docs/assets/chunks/framework.hgjl6W6o.js">
15
+ <link rel="modulepreload" href="/docs/assets/chunks/theme.Cksh_UJH.js">
16
+ <link rel="modulepreload" href="/docs/assets/chunks/sizeCapture-INFHLROL.BEqL2zFi.js">
17
+ <link rel="modulepreload" href="/docs/assets/chunks/dagre-GXQ25YYZ.2qvw8AqH.js">
18
+ <link rel="modulepreload" href="/docs/assets/chunks/stateDiagram-v2-MP3YSRHH.3X7wNXKX.js">
19
+ <link rel="modulepreload" href="/docs/assets/chunks/virtual_mermaid-config.DDnGl6nM.js">
20
+ <link rel="modulepreload" href="/docs/assets/docs_adr_0004-how-the-core-uses-external-tools.md.B7dtE7MB.lean.js">
21
+ <link rel="icon" href="/docs/bernard.svg" type="image/svg+xml">
22
+ <script id="check-dark-mode">(()=>{const e=localStorage.getItem("vitepress-theme-appearance")||"auto",a=window.matchMedia("(prefers-color-scheme: dark)").matches;(!e||e==="auto"?a:e==="dark")&&document.documentElement.classList.add("dark")})();</script>
23
+ <script id="check-mac-os">document.documentElement.classList.toggle("mac",/Mac|iPhone|iPod|iPad/i.test(navigator.platform));</script>
24
+ </head>
25
+ <body>
26
+ <div id="app"><div class="Layout" data-v-f87bd3ac><!--[--><!--]--><!--[--><span tabindex="-1" data-v-26966a6b></span><a href="#VPContent" class="VPSkipLink visually-hidden" data-v-26966a6b>Skip to content</a><!--]--><!----><header class="VPNav" data-v-f87bd3ac data-v-a776a728><div class="VPNavBar" data-v-a776a728 data-v-257d37ee><div class="wrapper" data-v-257d37ee><div class="container" data-v-257d37ee><div class="title" data-v-257d37ee><div class="VPNavBarTitle has-sidebar" data-v-257d37ee data-v-1b9c14bd><a class="title" href="/docs/" data-v-1b9c14bd><!--[--><!--]--><!--[--><img class="VPImage logo" src="/docs/bernard.svg" alt data-v-4a9aa8e2><!--]--><span data-v-1b9c14bd>Bernard</span><!--[--><!--]--></a></div></div><div class="content" data-v-257d37ee><div class="content-body" data-v-257d37ee><!--[--><!--]--><div class="VPNavBarSearch search" data-v-257d37ee><!--[--><!----><div id="local-search"><button type="button" class="DocSearch DocSearch-Button" aria-label="Search"><span class="DocSearch-Button-Container"><span class="vp-icon DocSearch-Search-Icon"></span><span class="DocSearch-Button-Placeholder">Search</span></span><span class="DocSearch-Button-Keys"><kbd class="DocSearch-Button-Key"></kbd><kbd class="DocSearch-Button-Key">K</kbd></span></button></div><!--]--></div><nav aria-labelledby="main-nav-aria-label" class="VPNavBarMenu menu" data-v-257d37ee data-v-96ed2429><span id="main-nav-aria-label" class="visually-hidden" data-v-96ed2429> Main Navigation </span><!--[--><!--[--><a class="VPLink link VPNavBarMenuLink" href="/docs/docs/getting-started.html" tabindex="0" data-v-96ed2429 data-v-c21a295c><!--[--><span data-v-c21a295c>Guides</span><!--]--></a><!--]--><!--[--><a class="VPLink link VPNavBarMenuLink" href="/docs/CONTRIBUTING.html" tabindex="0" data-v-96ed2429 data-v-c21a295c><!--[--><span data-v-c21a295c>Contributing</span><!--]--></a><!--]--><!--[--><a class="VPLink link VPNavBarMenuLink" href="/docs/docs/adr/0001-what-the-core-is-built-for.html" tabindex="0" data-v-96ed2429 data-v-c21a295c><!--[--><span data-v-c21a295c>Decisions</span><!--]--></a><!--]--><!--]--></nav><!----><div class="VPNavBarAppearance appearance" data-v-257d37ee data-v-772a648f><button class="VPSwitch VPSwitchAppearance" type="button" role="switch" title aria-checked="false" data-v-772a648f data-v-32dadf2f data-v-033bec8f><span class="check" data-v-033bec8f><span class="icon" data-v-033bec8f><!--[--><span class="vpi-sun sun" data-v-32dadf2f></span><span class="vpi-moon moon" data-v-32dadf2f></span><!--]--></span></span></button></div><!----><div class="VPFlyout VPNavBarExtra extra" data-v-257d37ee data-v-6a77a12d data-v-6ff730e4><button type="button" class="button" aria-haspopup="true" aria-expanded="false" aria-label="extra navigation" data-v-6ff730e4><span class="vpi-more-horizontal icon" data-v-6ff730e4></span></button><div class="menu" data-v-6ff730e4><div class="VPMenu" data-v-6ff730e4 data-v-7e1ab185><!----><!--[--><!--[--><!----><div class="group" data-v-6a77a12d><div class="item appearance" data-v-6a77a12d><p class="label" data-v-6a77a12d>Appearance</p><div class="appearance-action" data-v-6a77a12d><button class="VPSwitch VPSwitchAppearance" type="button" role="switch" title aria-checked="false" data-v-6a77a12d data-v-32dadf2f data-v-033bec8f><span class="check" data-v-033bec8f><span class="icon" data-v-033bec8f><!--[--><span class="vpi-sun sun" data-v-32dadf2f></span><span class="vpi-moon moon" data-v-32dadf2f></span><!--]--></span></span></button></div></div></div><!----><!--]--><!--]--></div></div></div><!--[--><!--[--><!--[--><a class="viewer-switch" href="/">Run viewer</a><!--]--><!--]--><!--]--><button type="button" class="VPNavBarHamburger hamburger" aria-label="mobile navigation" aria-expanded="false" aria-controls="VPNavScreen" data-v-257d37ee data-v-33d7d0d7><span class="container" data-v-33d7d0d7><span class="top" data-v-33d7d0d7></span><span class="middle" data-v-33d7d0d7></span><span class="bottom" data-v-33d7d0d7></span></span></button></div></div></div></div><div class="divider" data-v-257d37ee><div class="divider-line" data-v-257d37ee></div></div></div><!----></header><div class="VPLocalNav has-sidebar empty" data-v-f87bd3ac data-v-c5f097a9><div class="container" data-v-c5f097a9><button class="menu" aria-expanded="false" aria-controls="VPSidebarNav" data-v-c5f097a9><span class="vpi-align-left menu-icon" data-v-c5f097a9></span><span class="menu-text" data-v-c5f097a9>Menu</span></button><div class="VPLocalNavOutlineDropdown" style="--vp-vh:0px;" data-v-c5f097a9 data-v-cb88d934><button data-v-cb88d934>Return to top</button><!----></div></div></div><aside class="VPSidebar" data-v-f87bd3ac data-v-979e8f18><div class="curtain" data-v-979e8f18></div><nav class="nav" id="VPSidebarNav" aria-labelledby="sidebar-aria-label" tabindex="-1" data-v-979e8f18><span class="visually-hidden" id="sidebar-aria-label" data-v-979e8f18> Sidebar Navigation </span><!--[--><!--]--><!--[--><div class="no-transition group" data-v-b9208f43><section class="VPSidebarItem level-0 collapsible" data-v-b9208f43 data-v-0b328883><div class="item" role="button" tabindex="0" data-v-0b328883><div class="indicator" data-v-0b328883></div><h2 class="text" data-v-0b328883>Bernard</h2><div class="caret" role="button" aria-label="toggle section" tabindex="0" data-v-0b328883><span class="vpi-chevron-right caret-icon" data-v-0b328883></span></div></div><div class="items" data-v-0b328883><!--[--><div class="VPSidebarItem level-1 is-link" data-v-0b328883><div class="item" data-v-0b328883><div class="indicator" data-v-0b328883></div><a class="VPLink link link" href="/docs/" data-v-0b328883><!--[--><p class="text" data-v-0b328883>Overview</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-0b328883><div class="item" data-v-0b328883><div class="indicator" data-v-0b328883></div><a class="VPLink link link" href="/docs/CONTEXT.html" data-v-0b328883><!--[--><p class="text" data-v-0b328883>Vocabulary</p><!--]--></a><!----></div><!----></div><!--]--></div></section></div><div class="no-transition group" data-v-b9208f43><section class="VPSidebarItem level-0 collapsible" data-v-b9208f43 data-v-0b328883><div class="item" role="button" tabindex="0" data-v-0b328883><div class="indicator" data-v-0b328883></div><h2 class="text" data-v-0b328883>Guides</h2><div class="caret" role="button" aria-label="toggle section" tabindex="0" data-v-0b328883><span class="vpi-chevron-right caret-icon" data-v-0b328883></span></div></div><div class="items" data-v-0b328883><!--[--><div class="VPSidebarItem level-1 is-link" data-v-0b328883><div class="item" data-v-0b328883><div class="indicator" data-v-0b328883></div><a class="VPLink link link" href="/docs/docs/getting-started.html" data-v-0b328883><!--[--><p class="text" data-v-0b328883>Getting started</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-0b328883><div class="item" data-v-0b328883><div class="indicator" data-v-0b328883></div><a class="VPLink link link" href="/docs/docs/overlay.html" data-v-0b328883><!--[--><p class="text" data-v-0b328883>The overlay</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-0b328883><div class="item" data-v-0b328883><div class="indicator" data-v-0b328883></div><a class="VPLink link link" href="/docs/docs/recipes.html" data-v-0b328883><!--[--><p class="text" data-v-0b328883>Recipes</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-0b328883><div class="item" data-v-0b328883><div class="indicator" data-v-0b328883></div><a class="VPLink link link" href="/docs/docs/pipeline.html" data-v-0b328883><!--[--><p class="text" data-v-0b328883>Pipeline</p><!--]--></a><!----></div><!----></div><!--]--></div></section></div><div class="no-transition group" data-v-b9208f43><section class="VPSidebarItem level-0 collapsible" data-v-b9208f43 data-v-0b328883><div class="item" role="button" tabindex="0" data-v-0b328883><div class="indicator" data-v-0b328883></div><h2 class="text" data-v-0b328883>Contributing</h2><div class="caret" role="button" aria-label="toggle section" tabindex="0" data-v-0b328883><span class="vpi-chevron-right caret-icon" data-v-0b328883></span></div></div><div class="items" data-v-0b328883><!--[--><div class="VPSidebarItem level-1 is-link" data-v-0b328883><div class="item" data-v-0b328883><div class="indicator" data-v-0b328883></div><a class="VPLink link link" href="/docs/CONTRIBUTING.html" data-v-0b328883><!--[--><p class="text" data-v-0b328883>Contributing</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-0b328883><div class="item" data-v-0b328883><div class="indicator" data-v-0b328883></div><a class="VPLink link link" href="/docs/CLAUDE.html" data-v-0b328883><!--[--><p class="text" data-v-0b328883>Rules for agents</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-0b328883><div class="item" data-v-0b328883><div class="indicator" data-v-0b328883></div><a class="VPLink link link" href="/docs/docs/github.html" data-v-0b328883><!--[--><p class="text" data-v-0b328883>GitHub</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-0b328883><div class="item" data-v-0b328883><div class="indicator" data-v-0b328883></div><a class="VPLink link link" href="/docs/core/README.html" data-v-0b328883><!--[--><p class="text" data-v-0b328883>Core content</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-0b328883><div class="item" data-v-0b328883><div class="indicator" data-v-0b328883></div><a class="VPLink link link" href="/docs/packages/viewer/README.html" data-v-0b328883><!--[--><p class="text" data-v-0b328883>Run viewer</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-0b328883><div class="item" data-v-0b328883><div class="indicator" data-v-0b328883></div><a class="VPLink link link" href="/docs/packages/docs/README.html" data-v-0b328883><!--[--><p class="text" data-v-0b328883>Documentation site</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-0b328883><div class="item" data-v-0b328883><div class="indicator" data-v-0b328883></div><a class="VPLink link link" href="/docs/fixtures/README.html" data-v-0b328883><!--[--><p class="text" data-v-0b328883>Fixtures</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-0b328883><div class="item" data-v-0b328883><div class="indicator" data-v-0b328883></div><a class="VPLink link link" href="/docs/demo/README.html" data-v-0b328883><!--[--><p class="text" data-v-0b328883>Demo</p><!--]--></a><!----></div><!----></div><!--]--></div></section></div><div class="no-transition group" data-v-b9208f43><section class="VPSidebarItem level-0 collapsible collapsed has-active" data-v-b9208f43 data-v-0b328883><div class="item" role="button" tabindex="0" data-v-0b328883><div class="indicator" data-v-0b328883></div><h2 class="text" data-v-0b328883>Decisions</h2><div class="caret" role="button" aria-label="toggle section" tabindex="0" data-v-0b328883><span class="vpi-chevron-right caret-icon" data-v-0b328883></span></div></div><div class="items" data-v-0b328883><!--[--><div class="VPSidebarItem level-1 is-link" data-v-0b328883><div class="item" data-v-0b328883><div class="indicator" data-v-0b328883></div><a class="VPLink link link" href="/docs/docs/adr/0001-what-the-core-is-built-for.html" data-v-0b328883><!--[--><p class="text" data-v-0b328883>0001 · What the core is built for</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-0b328883><div class="item" data-v-0b328883><div class="indicator" data-v-0b328883></div><a class="VPLink link link" href="/docs/docs/adr/0002-which-harness-a-project-runs-on.html" data-v-0b328883><!--[--><p class="text" data-v-0b328883>0002 · Which harness a project runs on</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-0b328883><div class="item" data-v-0b328883><div class="indicator" data-v-0b328883></div><a class="VPLink link link" href="/docs/docs/adr/0003-how-core-content-reaches-each-harness.html" data-v-0b328883><!--[--><p class="text" data-v-0b328883>0003 · How core content reaches each harness</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-0b328883><div class="item" data-v-0b328883><div class="indicator" data-v-0b328883></div><a class="VPLink link link" href="/docs/docs/adr/0004-how-the-core-uses-external-tools.html" data-v-0b328883><!--[--><p class="text" data-v-0b328883>0004 · How the core uses external tools</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-0b328883><div class="item" data-v-0b328883><div class="indicator" data-v-0b328883></div><a class="VPLink link link" href="/docs/docs/adr/0005-what-drives-the-pipeline.html" data-v-0b328883><!--[--><p class="text" data-v-0b328883>0005 · What drives the pipeline</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-0b328883><div class="item" data-v-0b328883><div class="indicator" data-v-0b328883></div><a class="VPLink link link" href="/docs/docs/adr/0006-what-steps-hand-off-to-each-other.html" data-v-0b328883><!--[--><p class="text" data-v-0b328883>0006 · What steps hand off to each other</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-0b328883><div class="item" data-v-0b328883><div class="indicator" data-v-0b328883></div><a class="VPLink link link" href="/docs/docs/adr/0007-how-humans-take-part-in-the-pipeline.html" data-v-0b328883><!--[--><p class="text" data-v-0b328883>0007 · How humans take part in the pipeline</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-0b328883><div class="item" data-v-0b328883><div class="indicator" data-v-0b328883></div><a class="VPLink link link" href="/docs/docs/adr/0008-where-a-steps-reviewers-run.html" data-v-0b328883><!--[--><p class="text" data-v-0b328883>0008 · Where a step's reviewers run</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-0b328883><div class="item" data-v-0b328883><div class="indicator" data-v-0b328883></div><a class="VPLink link link" href="/docs/docs/adr/0009-where-pipeline-state-and-handoffs-live.html" data-v-0b328883><!--[--><p class="text" data-v-0b328883>0009 · Where pipeline state and handoffs live</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-0b328883><div class="item" data-v-0b328883><div class="indicator" data-v-0b328883></div><a class="VPLink link link" href="/docs/docs/adr/0010-how-a-project-adapts-the-core.html" data-v-0b328883><!--[--><p class="text" data-v-0b328883>0010 · How a project adapts the core</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-0b328883><div class="item" data-v-0b328883><div class="indicator" data-v-0b328883></div><a class="VPLink link link" href="/docs/docs/adr/0011-how-the-factory-is-packaged-and-versioned.html" data-v-0b328883><!--[--><p class="text" data-v-0b328883>0011 · How the factory is packaged and versioned</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-0b328883><div class="item" data-v-0b328883><div class="indicator" data-v-0b328883></div><a class="VPLink link link" href="/docs/docs/adr/0012-how-a-steps-failures-are-told-apart-and-routed.html" data-v-0b328883><!--[--><p class="text" data-v-0b328883>0012 · How a step's failures are told apart and routed</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-0b328883><div class="item" data-v-0b328883><div class="indicator" data-v-0b328883></div><a class="VPLink link link" href="/docs/docs/adr/0013-when-code-lands.html" data-v-0b328883><!--[--><p class="text" data-v-0b328883>0013 · When code lands</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-0b328883><div class="item" data-v-0b328883><div class="indicator" data-v-0b328883></div><a class="VPLink link link" href="/docs/docs/adr/0014-what-a-step-may-change.html" data-v-0b328883><!--[--><p class="text" data-v-0b328883>0014 · What a step may change</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-0b328883><div class="item" data-v-0b328883><div class="indicator" data-v-0b328883></div><a class="VPLink link link" href="/docs/docs/adr/0015-how-a-project-shapes-its-ticket-flow.html" data-v-0b328883><!--[--><p class="text" data-v-0b328883>0015 · How a project shapes its ticket flow</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-0b328883><div class="item" data-v-0b328883><div class="indicator" data-v-0b328883></div><a class="VPLink link link" href="/docs/docs/adr/0016-which-core-the-factory-repo-runs.html" data-v-0b328883><!--[--><p class="text" data-v-0b328883>0016 · Which core the factory repo runs</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-0b328883><div class="item" data-v-0b328883><div class="indicator" data-v-0b328883></div><a class="VPLink link link" href="/docs/docs/adr/0017-where-a-tickets-record-lives.html" data-v-0b328883><!--[--><p class="text" data-v-0b328883>0017 · Where a ticket's record lives</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-0b328883><div class="item" data-v-0b328883><div class="indicator" data-v-0b328883></div><a class="VPLink link link" href="/docs/docs/adr/0018-the-products-name.html" data-v-0b328883><!--[--><p class="text" data-v-0b328883>0018 · The product's name</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-0b328883><div class="item" data-v-0b328883><div class="indicator" data-v-0b328883></div><a class="VPLink link link" href="/docs/docs/adr/0019-how-a-finding-is-answered-and-judged.html" data-v-0b328883><!--[--><p class="text" data-v-0b328883>0019 · How a finding is answered and judged</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-0b328883><div class="item" data-v-0b328883><div class="indicator" data-v-0b328883></div><a class="VPLink link link" href="/docs/docs/adr/0020-how-an-interrupted-run-resumes.html" data-v-0b328883><!--[--><p class="text" data-v-0b328883>0020 · How an interrupted run resumes</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-0b328883><div class="item" data-v-0b328883><div class="indicator" data-v-0b328883></div><a class="VPLink link link" href="/docs/docs/adr/0021-how-a-step-runs-in-its-workspace.html" data-v-0b328883><!--[--><p class="text" data-v-0b328883>0021 · How a step runs in its workspace</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-0b328883><div class="item" data-v-0b328883><div class="indicator" data-v-0b328883></div><a class="VPLink link link" href="/docs/docs/adr/0022-who-names-the-branches.html" data-v-0b328883><!--[--><p class="text" data-v-0b328883>0022 · Who names the branches</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-0b328883><div class="item" data-v-0b328883><div class="indicator" data-v-0b328883></div><a class="VPLink link link" href="/docs/docs/adr/0023-how-a-version-ships-before-npm.html" data-v-0b328883><!--[--><p class="text" data-v-0b328883>0023 · How a version ships before npm</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-0b328883><div class="item" data-v-0b328883><div class="indicator" data-v-0b328883></div><a class="VPLink link link" href="/docs/docs/adr/0024-how-the-config-type-carries-its-docs.html" data-v-0b328883><!--[--><p class="text" data-v-0b328883>0024 · How the config type carries its docs</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-0b328883><div class="item" data-v-0b328883><div class="indicator" data-v-0b328883></div><a class="VPLink link link" href="/docs/docs/adr/0025-how-a-steps-handoff-is-written-and-checked.html" data-v-0b328883><!--[--><p class="text" data-v-0b328883>0025 · How a step's handoff is written and checked</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-0b328883><div class="item" data-v-0b328883><div class="indicator" data-v-0b328883></div><a class="VPLink link link" href="/docs/docs/adr/0026-support-for-github-copilot.html" data-v-0b328883><!--[--><p class="text" data-v-0b328883>0026 · Support for GitHub Copilot</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-0b328883><div class="item" data-v-0b328883><div class="indicator" data-v-0b328883></div><a class="VPLink link link" href="/docs/docs/adr/0027-which-forge-a-project-is-on.html" data-v-0b328883><!--[--><p class="text" data-v-0b328883>0027 · Which forge a project is on</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-0b328883><div class="item" data-v-0b328883><div class="indicator" data-v-0b328883></div><a class="VPLink link link" href="/docs/docs/adr/0028-several-ticket-flows-in-one-pipeline.html" data-v-0b328883><!--[--><p class="text" data-v-0b328883>0028 · Several ticket flows in one pipeline</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-0b328883><div class="item" data-v-0b328883><div class="indicator" data-v-0b328883></div><a class="VPLink link link" href="/docs/docs/adr/0029-the-branch-a-feature-works-on.html" data-v-0b328883><!--[--><p class="text" data-v-0b328883>0029 · The branch a feature works on</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-0b328883><div class="item" data-v-0b328883><div class="indicator" data-v-0b328883></div><a class="VPLink link link" href="/docs/docs/adr/0030-a-runner-without-coder.html" data-v-0b328883><!--[--><p class="text" data-v-0b328883>0030 · A runner without Coder</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-0b328883><div class="item" data-v-0b328883><div class="indicator" data-v-0b328883></div><a class="VPLink link link" href="/docs/docs/adr/0031-how-the-run-viewer-reads-its-runs.html" data-v-0b328883><!--[--><p class="text" data-v-0b328883>0031 · How the run viewer reads its runs</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-0b328883><div class="item" data-v-0b328883><div class="indicator" data-v-0b328883></div><a class="VPLink link link" href="/docs/docs/adr/0032-how-a-project-gets-the-viewer.html" data-v-0b328883><!--[--><p class="text" data-v-0b328883>0032 · How a project gets the viewer</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-0b328883><div class="item" data-v-0b328883><div class="indicator" data-v-0b328883></div><a class="VPLink link link" href="/docs/docs/adr/0033-the-repos-license.html" data-v-0b328883><!--[--><p class="text" data-v-0b328883>0033 · The repo's license</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-0b328883><div class="item" data-v-0b328883><div class="indicator" data-v-0b328883></div><a class="VPLink link link" href="/docs/docs/adr/0034-how-code-review-launches-its-reviewers.html" data-v-0b328883><!--[--><p class="text" data-v-0b328883>0034 · How code review launches its reviewers</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-0b328883><div class="item" data-v-0b328883><div class="indicator" data-v-0b328883></div><a class="VPLink link link" href="/docs/docs/adr/0035-how-the-package-is-published.html" data-v-0b328883><!--[--><p class="text" data-v-0b328883>0035 · How the package is published</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-0b328883><div class="item" data-v-0b328883><div class="indicator" data-v-0b328883></div><a class="VPLink link link" href="/docs/docs/adr/0036-what-the-cores-pull-request-skill-does.html" data-v-0b328883><!--[--><p class="text" data-v-0b328883>0036 · What the core's pull-request skill does</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-0b328883><div class="item" data-v-0b328883><div class="indicator" data-v-0b328883></div><a class="VPLink link link" href="/docs/docs/adr/0037-how-a-team-reads-the-factorys-documentation.html" data-v-0b328883><!--[--><p class="text" data-v-0b328883>0037 · How a team reads the factory's documentation</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-0b328883><div class="item" data-v-0b328883><div class="indicator" data-v-0b328883></div><a class="VPLink link link" href="/docs/docs/adr/0038-where-adapters-live.html" data-v-0b328883><!--[--><p class="text" data-v-0b328883>0038 · Where adapters live</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-0b328883><div class="item" data-v-0b328883><div class="indicator" data-v-0b328883></div><a class="VPLink link link" href="/docs/docs/adr/0039-the-repos-license.html" data-v-0b328883><!--[--><p class="text" data-v-0b328883>0039 · The repo's license</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-0b328883><div class="item" data-v-0b328883><div class="indicator" data-v-0b328883></div><a class="VPLink link link" href="/docs/docs/adr/0040-how-a-version-is-released.html" data-v-0b328883><!--[--><p class="text" data-v-0b328883>0040 · How a version is released</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-0b328883><div class="item" data-v-0b328883><div class="indicator" data-v-0b328883></div><a class="VPLink link link" href="/docs/docs/adr/0041-who-opens-the-features-pull-request.html" data-v-0b328883><!--[--><p class="text" data-v-0b328883>0041 · Who opens the feature's pull request, and how a ticket reaches it</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-0b328883><div class="item" data-v-0b328883><div class="indicator" data-v-0b328883></div><a class="VPLink link link" href="/docs/docs/adr/0042-how-secrets-are-kept-out-of-committed-records.html" data-v-0b328883><!--[--><p class="text" data-v-0b328883>0042 · How secrets are kept out of committed records</p><!--]--></a><!----></div><!----></div><!--]--></div></section></div><!--]--><!--[--><!--]--></nav></aside><div class="VPContent has-sidebar" id="VPContent" data-v-f87bd3ac data-v-67e000d0><div class="VPDoc has-sidebar has-aside" data-v-67e000d0 data-v-f8622dbf><!--[--><!--]--><div class="container" data-v-f8622dbf><div class="aside" data-v-f8622dbf><div class="aside-curtain" data-v-f8622dbf></div><div class="aside-container" data-v-f8622dbf><div class="aside-content" data-v-f8622dbf><div class="VPDocAside" data-v-f8622dbf data-v-fc01c646><!--[--><!--]--><!--[--><!--]--><nav aria-labelledby="doc-outline-aria-label" class="VPDocAsideOutline" data-v-fc01c646 data-v-172fd98a><div class="content" data-v-172fd98a><div class="outline-marker" data-v-172fd98a></div><div aria-level="2" class="outline-title" id="doc-outline-aria-label" role="heading" data-v-172fd98a>On this page</div><ul class="VPDocOutlineItem root" data-v-172fd98a data-v-ea4171dd><!--[--><!--]--></ul></div></nav><!--[--><!--]--><div class="spacer" data-v-fc01c646></div><!--[--><!--]--><!----><!--[--><!--]--><!--[--><!--]--></div></div></div></div><div class="content" data-v-f8622dbf><div class="content-container" data-v-f8622dbf><!--[--><!--]--><main class="main" data-v-f8622dbf><div style="position:relative;" class="vp-doc _docs_docs_adr_0004-how-the-core-uses-external-tools" data-v-f8622dbf><div><h1 id="how-the-core-uses-external-tools" tabindex="-1">How the core uses external tools <a class="header-anchor" href="#how-the-core-uses-external-tools" aria-label="Permalink to &quot;How the core uses external tools&quot;">​</a></h1><p>Accepted · 2026-10-05 · forge adapters rewritten for the forge port (#26), proposed · 2026-11-02</p><h2 id="context" tabindex="-1">Context <a class="header-anchor" href="#context" aria-label="Permalink to &quot;Context&quot;">​</a></h2><p>The two existing factories already use different tools (Bitbucket vs GitHub, different Jira setups), and keeping Theodo-internal infrastructure in adapters is what keeps the core white-label.</p><h2 id="criteria" tabindex="-1">Criteria <a class="header-anchor" href="#criteria" aria-label="Permalink to &quot;Criteria&quot;">​</a></h2><ol><li><strong>Different tools per project</strong>: the two existing factories already use different tools (Bitbucket vs GitHub, different Jira setups).</li><li><strong>White-label core</strong>: keeping Theodo-internal infrastructure in adapters is what keeps the core white-label.</li></ol><h2 id="options" tabindex="-1">Options <a class="header-anchor" href="#options" aria-label="Permalink to &quot;Options&quot;">​</a></h2><ul><li><strong>External tools behind ports.</strong> The core calls ports, and adapters implement them: Jira, GitHub, Bitbucket, Notion, Coder… (1). Keeping Theodo-internal infrastructure in adapters is what keeps the core white-label (2).</li></ul><h2 id="comparison" tabindex="-1">Comparison <a class="header-anchor" href="#comparison" aria-label="Permalink to &quot;Comparison&quot;">​</a></h2><table tabindex="0"><thead><tr><th>Option</th><th>1. Different tools</th><th>2. White-label</th></tr></thead><tbody><tr><td>External tools behind ports</td><td>🟢</td><td>🟢</td></tr></tbody></table><p>🟢 meets · 🟠 partly, or at a cost · 🔴 fails · ⚪ not discussed</p><h2 id="decision" tabindex="-1">Decision <a class="header-anchor" href="#decision" aria-label="Permalink to &quot;Decision&quot;">​</a></h2><p>External tools behind ports. The core never names an external tool. It calls ports (<code>tracker</code>, <code>forge</code>, <code>docs</code>, <code>runner</code>, <code>telemetry</code>, <code>legacy-tracer</code>), and adapters implement them: Jira, GitHub, GitLab, Azure DevOps, Notion, Coder, one tracer per legacy technology…</p><h2 id="consequences" tabindex="-1">Consequences <a class="header-anchor" href="#consequences" aria-label="Permalink to &quot;Consequences&quot;">​</a></h2><ul><li>The v1 adapters are the ones the existing factories need: Jira, Notion, Coder, and the forges.</li><li>The <code>forge</code> port exists, with GitHub, GitLab and Azure DevOps as its adapters, each over the forge&#39;s own command-line tool (<code>gh</code>, <code>glab</code>, <code>az</code>): <code>bernard pull-request</code> opens a ticket&#39;s pull request and reads its checks through it (ADR-0036). Bitbucket waits for a project that needs it (ADR-0013).</li><li>Telemetry is a port from v1. The default adapter writes local JSONL.</li><li>The <code>tracker</code> port exists, with Jira Cloud as its first adapter: a feature starts from an issue, and the issues of the feature and its tickets follow the run.</li><li>The <code>runner</code> port also reads and restores the working copy where a step ran, so write scopes are checked in the same environment (ADR-0014).</li><li>No secrets live in the core or in an overlay. Adapters read them from the environment or from the harness&#39;s secret store.</li></ul></div></div></main><footer class="VPDocFooter" data-v-f8622dbf data-v-020e2df0><!--[--><!--]--><div class="edit-info" data-v-020e2df0><div class="edit-link" data-v-020e2df0><a class="VPLink link vp-external-link-icon no-icon edit-link-button" href="https://github.com/theodo-group/bernard/edit/main/docs/adr/0004-how-the-core-uses-external-tools.md" target="_blank" rel="noreferrer" data-v-020e2df0><!--[--><span class="vpi-square-pen edit-link-icon" data-v-020e2df0></span> Edit this page on GitHub<!--]--></a></div><!----></div><nav class="prev-next" aria-labelledby="doc-footer-aria-label" data-v-020e2df0><span class="visually-hidden" id="doc-footer-aria-label" data-v-020e2df0>Pager</span><div class="pager" data-v-020e2df0><a class="VPLink link pager-link prev" href="/docs/docs/adr/0003-how-core-content-reaches-each-harness.html" data-v-020e2df0><!--[--><span class="desc" data-v-020e2df0>Previous page</span><span class="title" data-v-020e2df0>0003 · How core content reaches each harness</span><!--]--></a></div><div class="pager" data-v-020e2df0><a class="VPLink link pager-link next" href="/docs/docs/adr/0005-what-drives-the-pipeline.html" data-v-020e2df0><!--[--><span class="desc" data-v-020e2df0>Next page</span><span class="title" data-v-020e2df0>0005 · What drives the pipeline</span><!--]--></a></div></nav></footer><!--[--><!--]--></div></div></div><!--[--><!--]--></div></div><!----><!--[--><!--]--></div></div>
27
+ <script>window.__VP_HASH_MAP__=JSON.parse("{\"claude.md\":\"BLSB-5gK\",\"context.md\":\"BovnvMGK\",\"contributing.md\":\"DwJsKrz3\",\"core_readme.md\":\"DyxYsikc\",\"demo_readme.md\":\"Cpi2pUU9\",\"docs_adr_0001-what-the-core-is-built-for.md\":\"BxOoMjST\",\"docs_adr_0002-which-harness-a-project-runs-on.md\":\"2GwF-nj0\",\"docs_adr_0003-how-core-content-reaches-each-harness.md\":\"BMWE00Mf\",\"docs_adr_0004-how-the-core-uses-external-tools.md\":\"B7dtE7MB\",\"docs_adr_0005-what-drives-the-pipeline.md\":\"DGn0CJeq\",\"docs_adr_0006-what-steps-hand-off-to-each-other.md\":\"BflT5ugJ\",\"docs_adr_0007-how-humans-take-part-in-the-pipeline.md\":\"CNX3gUD-\",\"docs_adr_0008-where-a-steps-reviewers-run.md\":\"aGbaBOpB\",\"docs_adr_0009-where-pipeline-state-and-handoffs-live.md\":\"C3tKmV-E\",\"docs_adr_0010-how-a-project-adapts-the-core.md\":\"Bp7N6tUE\",\"docs_adr_0011-how-the-factory-is-packaged-and-versioned.md\":\"BBJIwnqa\",\"docs_adr_0012-how-a-steps-failures-are-told-apart-and-routed.md\":\"uCyrBfug\",\"docs_adr_0013-when-code-lands.md\":\"oXgiobfz\",\"docs_adr_0014-what-a-step-may-change.md\":\"Zslg3bnJ\",\"docs_adr_0015-how-a-project-shapes-its-ticket-flow.md\":\"DNHMxwIT\",\"docs_adr_0016-which-core-the-factory-repo-runs.md\":\"CLN6LqBZ\",\"docs_adr_0017-where-a-tickets-record-lives.md\":\"jjUeM-ex\",\"docs_adr_0018-the-products-name.md\":\"6xaX9vDs\",\"docs_adr_0019-how-a-finding-is-answered-and-judged.md\":\"CKKoO9-3\",\"docs_adr_0020-how-an-interrupted-run-resumes.md\":\"DTIP-MBK\",\"docs_adr_0021-how-a-step-runs-in-its-workspace.md\":\"B2r3-FPg\",\"docs_adr_0022-who-names-the-branches.md\":\"DaVk8X0i\",\"docs_adr_0023-how-a-version-ships-before-npm.md\":\"C7-wuCbq\",\"docs_adr_0024-how-the-config-type-carries-its-docs.md\":\"CQmwhWXs\",\"docs_adr_0025-how-a-steps-handoff-is-written-and-checked.md\":\"CgXYdF2v\",\"docs_adr_0026-support-for-github-copilot.md\":\"DJsawm-R\",\"docs_adr_0027-which-forge-a-project-is-on.md\":\"CY0qy9xh\",\"docs_adr_0028-several-ticket-flows-in-one-pipeline.md\":\"oxffo2qg\",\"docs_adr_0029-the-branch-a-feature-works-on.md\":\"CrgkP6YJ\",\"docs_adr_0030-a-runner-without-coder.md\":\"CW8sF7jK\",\"docs_adr_0031-how-the-run-viewer-reads-its-runs.md\":\"opQYnVF2\",\"docs_adr_0032-how-a-project-gets-the-viewer.md\":\"DB9NjYJf\",\"docs_adr_0033-the-repos-license.md\":\"NPlkrPj8\",\"docs_adr_0034-how-code-review-launches-its-reviewers.md\":\"DSNpkfaL\",\"docs_adr_0035-how-the-package-is-published.md\":\"C1f4B5eb\",\"docs_adr_0036-what-the-cores-pull-request-skill-does.md\":\"op39HLAT\",\"docs_adr_0037-how-a-team-reads-the-factorys-documentation.md\":\"Dar_Xo4t\",\"docs_adr_0038-where-adapters-live.md\":\"CkVD3riv\",\"docs_adr_0039-the-repos-license.md\":\"C_rraWpb\",\"docs_adr_0040-how-a-version-is-released.md\":\"CCdwC07z\",\"docs_adr_0041-who-opens-the-features-pull-request.md\":\"qLu9WLaG\",\"docs_adr_0042-how-secrets-are-kept-out-of-committed-records.md\":\"DJWazI4H\",\"docs_getting-started.md\":\"BpQFS8Gr\",\"docs_github.md\":\"D4gkW71G\",\"docs_overlay.md\":\"DoWVb6OM\",\"docs_pipeline.md\":\"DdHywWSk\",\"docs_recipes.md\":\"8Xf6BsRA\",\"fixtures_readme.md\":\"DzbQ0hft\",\"index.md\":\"DHgL6CzS\",\"packages_docs_readme.md\":\"PV1a27nC\",\"packages_viewer_readme.md\":\"BynKZSdN\"}");window.__VP_SITE_DATA__=JSON.parse("{\"lang\":\"en-US\",\"dir\":\"ltr\",\"title\":\"Bernard the taktician\",\"description\":\"An agentic factory for new builds and legacy migrations.\",\"base\":\"/docs/\",\"head\":[],\"router\":{\"prefetchLinks\":true},\"appearance\":true,\"themeConfig\":{\"logo\":\"/bernard.svg\",\"siteTitle\":\"Bernard\",\"outline\":[2,3],\"search\":{\"provider\":\"local\"},\"nav\":[{\"text\":\"Guides\",\"link\":\"/docs/getting-started\"},{\"text\":\"Contributing\",\"link\":\"/CONTRIBUTING\"},{\"text\":\"Decisions\",\"link\":\"/docs/adr/0001-what-the-core-is-built-for\"}],\"sidebar\":[{\"text\":\"Bernard\",\"collapsed\":false,\"items\":[{\"text\":\"Overview\",\"link\":\"/\"},{\"text\":\"Vocabulary\",\"link\":\"/CONTEXT\"}]},{\"text\":\"Guides\",\"collapsed\":false,\"items\":[{\"text\":\"Getting started\",\"link\":\"/docs/getting-started\"},{\"text\":\"The overlay\",\"link\":\"/docs/overlay\"},{\"text\":\"Recipes\",\"link\":\"/docs/recipes\"},{\"text\":\"Pipeline\",\"link\":\"/docs/pipeline\"}]},{\"text\":\"Contributing\",\"collapsed\":false,\"items\":[{\"text\":\"Contributing\",\"link\":\"/CONTRIBUTING\"},{\"text\":\"Rules for agents\",\"link\":\"/CLAUDE\"},{\"text\":\"GitHub\",\"link\":\"/docs/github\"},{\"text\":\"Core content\",\"link\":\"/core/README\"},{\"text\":\"Run viewer\",\"link\":\"/packages/viewer/README\"},{\"text\":\"Documentation site\",\"link\":\"/packages/docs/README\"},{\"text\":\"Fixtures\",\"link\":\"/fixtures/README\"},{\"text\":\"Demo\",\"link\":\"/demo/README\"}]},{\"text\":\"Decisions\",\"collapsed\":true,\"items\":[{\"text\":\"0001 · What the core is built for\",\"link\":\"/docs/adr/0001-what-the-core-is-built-for\"},{\"text\":\"0002 · Which harness a project runs on\",\"link\":\"/docs/adr/0002-which-harness-a-project-runs-on\"},{\"text\":\"0003 · How core content reaches each harness\",\"link\":\"/docs/adr/0003-how-core-content-reaches-each-harness\"},{\"text\":\"0004 · How the core uses external tools\",\"link\":\"/docs/adr/0004-how-the-core-uses-external-tools\"},{\"text\":\"0005 · What drives the pipeline\",\"link\":\"/docs/adr/0005-what-drives-the-pipeline\"},{\"text\":\"0006 · What steps hand off to each other\",\"link\":\"/docs/adr/0006-what-steps-hand-off-to-each-other\"},{\"text\":\"0007 · How humans take part in the pipeline\",\"link\":\"/docs/adr/0007-how-humans-take-part-in-the-pipeline\"},{\"text\":\"0008 · Where a step's reviewers run\",\"link\":\"/docs/adr/0008-where-a-steps-reviewers-run\"},{\"text\":\"0009 · Where pipeline state and handoffs live\",\"link\":\"/docs/adr/0009-where-pipeline-state-and-handoffs-live\"},{\"text\":\"0010 · How a project adapts the core\",\"link\":\"/docs/adr/0010-how-a-project-adapts-the-core\"},{\"text\":\"0011 · How the factory is packaged and versioned\",\"link\":\"/docs/adr/0011-how-the-factory-is-packaged-and-versioned\"},{\"text\":\"0012 · How a step's failures are told apart and routed\",\"link\":\"/docs/adr/0012-how-a-steps-failures-are-told-apart-and-routed\"},{\"text\":\"0013 · When code lands\",\"link\":\"/docs/adr/0013-when-code-lands\"},{\"text\":\"0014 · What a step may change\",\"link\":\"/docs/adr/0014-what-a-step-may-change\"},{\"text\":\"0015 · How a project shapes its ticket flow\",\"link\":\"/docs/adr/0015-how-a-project-shapes-its-ticket-flow\"},{\"text\":\"0016 · Which core the factory repo runs\",\"link\":\"/docs/adr/0016-which-core-the-factory-repo-runs\"},{\"text\":\"0017 · Where a ticket's record lives\",\"link\":\"/docs/adr/0017-where-a-tickets-record-lives\"},{\"text\":\"0018 · The product's name\",\"link\":\"/docs/adr/0018-the-products-name\"},{\"text\":\"0019 · How a finding is answered and judged\",\"link\":\"/docs/adr/0019-how-a-finding-is-answered-and-judged\"},{\"text\":\"0020 · How an interrupted run resumes\",\"link\":\"/docs/adr/0020-how-an-interrupted-run-resumes\"},{\"text\":\"0021 · How a step runs in its workspace\",\"link\":\"/docs/adr/0021-how-a-step-runs-in-its-workspace\"},{\"text\":\"0022 · Who names the branches\",\"link\":\"/docs/adr/0022-who-names-the-branches\"},{\"text\":\"0023 · How a version ships before npm\",\"link\":\"/docs/adr/0023-how-a-version-ships-before-npm\"},{\"text\":\"0024 · How the config type carries its docs\",\"link\":\"/docs/adr/0024-how-the-config-type-carries-its-docs\"},{\"text\":\"0025 · How a step's handoff is written and checked\",\"link\":\"/docs/adr/0025-how-a-steps-handoff-is-written-and-checked\"},{\"text\":\"0026 · Support for GitHub Copilot\",\"link\":\"/docs/adr/0026-support-for-github-copilot\"},{\"text\":\"0027 · Which forge a project is on\",\"link\":\"/docs/adr/0027-which-forge-a-project-is-on\"},{\"text\":\"0028 · Several ticket flows in one pipeline\",\"link\":\"/docs/adr/0028-several-ticket-flows-in-one-pipeline\"},{\"text\":\"0029 · The branch a feature works on\",\"link\":\"/docs/adr/0029-the-branch-a-feature-works-on\"},{\"text\":\"0030 · A runner without Coder\",\"link\":\"/docs/adr/0030-a-runner-without-coder\"},{\"text\":\"0031 · How the run viewer reads its runs\",\"link\":\"/docs/adr/0031-how-the-run-viewer-reads-its-runs\"},{\"text\":\"0032 · How a project gets the viewer\",\"link\":\"/docs/adr/0032-how-a-project-gets-the-viewer\"},{\"text\":\"0033 · The repo's license\",\"link\":\"/docs/adr/0033-the-repos-license\"},{\"text\":\"0034 · How code review launches its reviewers\",\"link\":\"/docs/adr/0034-how-code-review-launches-its-reviewers\"},{\"text\":\"0035 · How the package is published\",\"link\":\"/docs/adr/0035-how-the-package-is-published\"},{\"text\":\"0036 · What the core's pull-request skill does\",\"link\":\"/docs/adr/0036-what-the-cores-pull-request-skill-does\"},{\"text\":\"0037 · How a team reads the factory's documentation\",\"link\":\"/docs/adr/0037-how-a-team-reads-the-factorys-documentation\"},{\"text\":\"0038 · Where adapters live\",\"link\":\"/docs/adr/0038-where-adapters-live\"},{\"text\":\"0039 · The repo's license\",\"link\":\"/docs/adr/0039-the-repos-license\"},{\"text\":\"0040 · How a version is released\",\"link\":\"/docs/adr/0040-how-a-version-is-released\"},{\"text\":\"0041 · Who opens the feature's pull request, and how a ticket reaches it\",\"link\":\"/docs/adr/0041-who-opens-the-features-pull-request\"},{\"text\":\"0042 · How secrets are kept out of committed records\",\"link\":\"/docs/adr/0042-how-secrets-are-kept-out-of-committed-records\"}]}],\"editLink\":{\"pattern\":\"https://github.com/theodo-group/bernard/edit/main/:path\",\"text\":\"Edit this page on GitHub\"}},\"locales\":{},\"scrollOffset\":134,\"cleanUrls\":false}");</script>
28
+
29
+ </body>
30
+ </html>