@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.
- package/README.md +13 -12
- package/core/README.md +1 -1
- package/core/agents/review-quality.md +13 -12
- package/core/agents/review-security-bugs.md +1 -1
- package/core/agents/review-tests.md +1 -1
- package/core/coder/template/main.tf +14 -1
- package/core/skills/pull-request/SKILL.md +17 -7
- package/core/skills/pull-request/ci-fixer.md +3 -3
- package/dist/bin.mjs +4979 -3176
- package/dist/{config-BawD0TwQ.mjs → config-DtCwJKWe.mjs} +70 -6
- package/dist/config.d.mts +72 -4
- package/dist/config.mjs +1 -1
- package/dist/docs/404.html +23 -0
- package/dist/docs/CLAUDE.html +30 -0
- package/dist/docs/CONTEXT.html +30 -0
- package/dist/docs/CONTRIBUTING.html +62 -0
- package/dist/docs/assets/CLAUDE.md.BLSB-5gK.js +1 -0
- package/dist/docs/assets/CLAUDE.md.BLSB-5gK.lean.js +1 -0
- package/dist/docs/assets/CONTEXT.md.BovnvMGK.js +1 -0
- package/dist/docs/assets/CONTEXT.md.BovnvMGK.lean.js +1 -0
- package/dist/docs/assets/CONTRIBUTING.md.DwJsKrz3.js +33 -0
- package/dist/docs/assets/CONTRIBUTING.md.DwJsKrz3.lean.js +1 -0
- package/dist/docs/assets/app.URmpjWHb.js +312 -0
- package/dist/docs/assets/bernard.RCgrvDdX.svg +94 -0
- package/dist/docs/assets/chunks/@localSearchIndexroot.Ylq685Cw.js +1 -0
- package/dist/docs/assets/chunks/VPLocalSearchBox.C8gcRVj0.js +9 -0
- package/dist/docs/assets/chunks/dagre-GXQ25YYZ.2qvw8AqH.js +4 -0
- package/dist/docs/assets/chunks/framework.hgjl6W6o.js +20 -0
- package/dist/docs/assets/chunks/sizeCapture-INFHLROL.BEqL2zFi.js +1 -0
- package/dist/docs/assets/chunks/stateDiagram-v2-MP3YSRHH.3X7wNXKX.js +231 -0
- package/dist/docs/assets/chunks/theme.Cksh_UJH.js +2 -0
- package/dist/docs/assets/chunks/virtual_mermaid-config.DDnGl6nM.js +1 -0
- package/dist/docs/assets/core_README.md.DyxYsikc.js +15 -0
- package/dist/docs/assets/core_README.md.DyxYsikc.lean.js +1 -0
- package/dist/docs/assets/demo_README.md.Cpi2pUU9.js +18 -0
- package/dist/docs/assets/demo_README.md.Cpi2pUU9.lean.js +1 -0
- package/dist/docs/assets/docs_adr_0001-what-the-core-is-built-for.md.BxOoMjST.js +1 -0
- package/dist/docs/assets/docs_adr_0001-what-the-core-is-built-for.md.BxOoMjST.lean.js +1 -0
- package/dist/docs/assets/docs_adr_0002-which-harness-a-project-runs-on.md.2GwF-nj0.js +1 -0
- package/dist/docs/assets/docs_adr_0002-which-harness-a-project-runs-on.md.2GwF-nj0.lean.js +1 -0
- package/dist/docs/assets/docs_adr_0003-how-core-content-reaches-each-harness.md.BMWE00Mf.js +1 -0
- package/dist/docs/assets/docs_adr_0003-how-core-content-reaches-each-harness.md.BMWE00Mf.lean.js +1 -0
- package/dist/docs/assets/docs_adr_0004-how-the-core-uses-external-tools.md.B7dtE7MB.js +1 -0
- package/dist/docs/assets/docs_adr_0004-how-the-core-uses-external-tools.md.B7dtE7MB.lean.js +1 -0
- package/dist/docs/assets/docs_adr_0005-what-drives-the-pipeline.md.DGn0CJeq.js +1 -0
- package/dist/docs/assets/docs_adr_0005-what-drives-the-pipeline.md.DGn0CJeq.lean.js +1 -0
- package/dist/docs/assets/docs_adr_0006-what-steps-hand-off-to-each-other.md.BflT5ugJ.js +1 -0
- package/dist/docs/assets/docs_adr_0006-what-steps-hand-off-to-each-other.md.BflT5ugJ.lean.js +1 -0
- package/dist/docs/assets/docs_adr_0007-how-humans-take-part-in-the-pipeline.md.CNX3gUD-.js +1 -0
- package/dist/docs/assets/docs_adr_0007-how-humans-take-part-in-the-pipeline.md.CNX3gUD-.lean.js +1 -0
- package/dist/docs/assets/docs_adr_0008-where-a-steps-reviewers-run.md.aGbaBOpB.js +1 -0
- package/dist/docs/assets/docs_adr_0008-where-a-steps-reviewers-run.md.aGbaBOpB.lean.js +1 -0
- package/dist/docs/assets/docs_adr_0009-where-pipeline-state-and-handoffs-live.md.C3tKmV-E.js +1 -0
- package/dist/docs/assets/docs_adr_0009-where-pipeline-state-and-handoffs-live.md.C3tKmV-E.lean.js +1 -0
- package/dist/docs/assets/docs_adr_0010-how-a-project-adapts-the-core.md.Bp7N6tUE.js +1 -0
- package/dist/docs/assets/docs_adr_0010-how-a-project-adapts-the-core.md.Bp7N6tUE.lean.js +1 -0
- package/dist/docs/assets/docs_adr_0011-how-the-factory-is-packaged-and-versioned.md.BBJIwnqa.js +1 -0
- package/dist/docs/assets/docs_adr_0011-how-the-factory-is-packaged-and-versioned.md.BBJIwnqa.lean.js +1 -0
- package/dist/docs/assets/docs_adr_0012-how-a-steps-failures-are-told-apart-and-routed.md.uCyrBfug.js +1 -0
- package/dist/docs/assets/docs_adr_0012-how-a-steps-failures-are-told-apart-and-routed.md.uCyrBfug.lean.js +1 -0
- package/dist/docs/assets/docs_adr_0013-when-code-lands.md.oXgiobfz.js +1 -0
- package/dist/docs/assets/docs_adr_0013-when-code-lands.md.oXgiobfz.lean.js +1 -0
- package/dist/docs/assets/docs_adr_0014-what-a-step-may-change.md.Zslg3bnJ.js +1 -0
- package/dist/docs/assets/docs_adr_0014-what-a-step-may-change.md.Zslg3bnJ.lean.js +1 -0
- package/dist/docs/assets/docs_adr_0015-how-a-project-shapes-its-ticket-flow.md.DNHMxwIT.js +1 -0
- package/dist/docs/assets/docs_adr_0015-how-a-project-shapes-its-ticket-flow.md.DNHMxwIT.lean.js +1 -0
- package/dist/docs/assets/docs_adr_0016-which-core-the-factory-repo-runs.md.CLN6LqBZ.js +1 -0
- package/dist/docs/assets/docs_adr_0016-which-core-the-factory-repo-runs.md.CLN6LqBZ.lean.js +1 -0
- package/dist/docs/assets/docs_adr_0017-where-a-tickets-record-lives.md.jjUeM-ex.js +1 -0
- package/dist/docs/assets/docs_adr_0017-where-a-tickets-record-lives.md.jjUeM-ex.lean.js +1 -0
- package/dist/docs/assets/docs_adr_0018-the-products-name.md.6xaX9vDs.js +1 -0
- package/dist/docs/assets/docs_adr_0018-the-products-name.md.6xaX9vDs.lean.js +1 -0
- package/dist/docs/assets/docs_adr_0019-how-a-finding-is-answered-and-judged.md.CKKoO9-3.js +1 -0
- package/dist/docs/assets/docs_adr_0019-how-a-finding-is-answered-and-judged.md.CKKoO9-3.lean.js +1 -0
- package/dist/docs/assets/docs_adr_0020-how-an-interrupted-run-resumes.md.DTIP-MBK.js +1 -0
- package/dist/docs/assets/docs_adr_0020-how-an-interrupted-run-resumes.md.DTIP-MBK.lean.js +1 -0
- package/dist/docs/assets/docs_adr_0021-how-a-step-runs-in-its-workspace.md.B2r3-FPg.js +1 -0
- package/dist/docs/assets/docs_adr_0021-how-a-step-runs-in-its-workspace.md.B2r3-FPg.lean.js +1 -0
- package/dist/docs/assets/docs_adr_0022-who-names-the-branches.md.DaVk8X0i.js +1 -0
- package/dist/docs/assets/docs_adr_0022-who-names-the-branches.md.DaVk8X0i.lean.js +1 -0
- package/dist/docs/assets/docs_adr_0023-how-a-version-ships-before-npm.md.C7-wuCbq.js +1 -0
- package/dist/docs/assets/docs_adr_0023-how-a-version-ships-before-npm.md.C7-wuCbq.lean.js +1 -0
- package/dist/docs/assets/docs_adr_0024-how-the-config-type-carries-its-docs.md.CQmwhWXs.js +1 -0
- package/dist/docs/assets/docs_adr_0024-how-the-config-type-carries-its-docs.md.CQmwhWXs.lean.js +1 -0
- package/dist/docs/assets/docs_adr_0025-how-a-steps-handoff-is-written-and-checked.md.CgXYdF2v.js +1 -0
- package/dist/docs/assets/docs_adr_0025-how-a-steps-handoff-is-written-and-checked.md.CgXYdF2v.lean.js +1 -0
- package/dist/docs/assets/docs_adr_0026-support-for-github-copilot.md.DJsawm-R.js +1 -0
- package/dist/docs/assets/docs_adr_0026-support-for-github-copilot.md.DJsawm-R.lean.js +1 -0
- package/dist/docs/assets/docs_adr_0027-which-forge-a-project-is-on.md.CY0qy9xh.js +1 -0
- package/dist/docs/assets/docs_adr_0027-which-forge-a-project-is-on.md.CY0qy9xh.lean.js +1 -0
- package/dist/docs/assets/docs_adr_0028-several-ticket-flows-in-one-pipeline.md.oxffo2qg.js +1 -0
- package/dist/docs/assets/docs_adr_0028-several-ticket-flows-in-one-pipeline.md.oxffo2qg.lean.js +1 -0
- package/dist/docs/assets/docs_adr_0029-the-branch-a-feature-works-on.md.CrgkP6YJ.js +1 -0
- package/dist/docs/assets/docs_adr_0029-the-branch-a-feature-works-on.md.CrgkP6YJ.lean.js +1 -0
- package/dist/docs/assets/docs_adr_0030-a-runner-without-coder.md.CW8sF7jK.js +1 -0
- package/dist/docs/assets/docs_adr_0030-a-runner-without-coder.md.CW8sF7jK.lean.js +1 -0
- package/dist/docs/assets/docs_adr_0031-how-the-run-viewer-reads-its-runs.md.opQYnVF2.js +1 -0
- package/dist/docs/assets/docs_adr_0031-how-the-run-viewer-reads-its-runs.md.opQYnVF2.lean.js +1 -0
- package/dist/docs/assets/docs_adr_0032-how-a-project-gets-the-viewer.md.DB9NjYJf.js +1 -0
- package/dist/docs/assets/docs_adr_0032-how-a-project-gets-the-viewer.md.DB9NjYJf.lean.js +1 -0
- package/dist/docs/assets/docs_adr_0033-the-repos-license.md.NPlkrPj8.js +1 -0
- package/dist/docs/assets/docs_adr_0033-the-repos-license.md.NPlkrPj8.lean.js +1 -0
- package/dist/docs/assets/docs_adr_0034-how-code-review-launches-its-reviewers.md.DSNpkfaL.js +1 -0
- package/dist/docs/assets/docs_adr_0034-how-code-review-launches-its-reviewers.md.DSNpkfaL.lean.js +1 -0
- package/dist/docs/assets/docs_adr_0035-how-the-package-is-published.md.C1f4B5eb.js +1 -0
- package/dist/docs/assets/docs_adr_0035-how-the-package-is-published.md.C1f4B5eb.lean.js +1 -0
- package/dist/docs/assets/docs_adr_0036-what-the-cores-pull-request-skill-does.md.op39HLAT.js +1 -0
- package/dist/docs/assets/docs_adr_0036-what-the-cores-pull-request-skill-does.md.op39HLAT.lean.js +1 -0
- package/dist/docs/assets/docs_adr_0037-how-a-team-reads-the-factorys-documentation.md.Dar_Xo4t.js +1 -0
- package/dist/docs/assets/docs_adr_0037-how-a-team-reads-the-factorys-documentation.md.Dar_Xo4t.lean.js +1 -0
- package/dist/docs/assets/docs_adr_0038-where-adapters-live.md.CkVD3riv.js +1 -0
- package/dist/docs/assets/docs_adr_0038-where-adapters-live.md.CkVD3riv.lean.js +1 -0
- package/dist/docs/assets/docs_adr_0039-the-repos-license.md.C_rraWpb.js +1 -0
- package/dist/docs/assets/docs_adr_0039-the-repos-license.md.C_rraWpb.lean.js +1 -0
- package/dist/docs/assets/docs_adr_0040-how-a-version-is-released.md.CCdwC07z.js +1 -0
- package/dist/docs/assets/docs_adr_0040-how-a-version-is-released.md.CCdwC07z.lean.js +1 -0
- package/dist/docs/assets/docs_adr_0041-who-opens-the-features-pull-request.md.qLu9WLaG.js +1 -0
- package/dist/docs/assets/docs_adr_0041-who-opens-the-features-pull-request.md.qLu9WLaG.lean.js +1 -0
- package/dist/docs/assets/docs_adr_0042-how-secrets-are-kept-out-of-committed-records.md.DJWazI4H.js +1 -0
- package/dist/docs/assets/docs_adr_0042-how-secrets-are-kept-out-of-committed-records.md.DJWazI4H.lean.js +1 -0
- package/dist/docs/assets/docs_getting-started.md.BpQFS8Gr.js +12 -0
- package/dist/docs/assets/docs_getting-started.md.BpQFS8Gr.lean.js +1 -0
- package/dist/docs/assets/docs_github.md.D4gkW71G.js +1 -0
- package/dist/docs/assets/docs_github.md.D4gkW71G.lean.js +1 -0
- package/dist/docs/assets/docs_overlay.md.DoWVb6OM.js +35 -0
- package/dist/docs/assets/docs_overlay.md.DoWVb6OM.lean.js +1 -0
- package/dist/docs/assets/docs_pipeline.md.DdHywWSk.js +1 -0
- package/dist/docs/assets/docs_pipeline.md.DdHywWSk.lean.js +1 -0
- package/dist/docs/assets/docs_recipes.md.8Xf6BsRA.js +45 -0
- package/dist/docs/assets/docs_recipes.md.8Xf6BsRA.lean.js +1 -0
- package/dist/docs/assets/fixtures_README.md.DzbQ0hft.js +1 -0
- package/dist/docs/assets/fixtures_README.md.DzbQ0hft.lean.js +1 -0
- package/dist/docs/assets/index.md.DHgL6CzS.js +28 -0
- package/dist/docs/assets/index.md.DHgL6CzS.lean.js +1 -0
- package/dist/docs/assets/inter-italic-cyrillic-ext.r48I6akx.woff2 +0 -0
- package/dist/docs/assets/inter-italic-cyrillic.By2_1cv3.woff2 +0 -0
- package/dist/docs/assets/inter-italic-greek-ext.1u6EdAuj.woff2 +0 -0
- package/dist/docs/assets/inter-italic-greek.DJ8dCoTZ.woff2 +0 -0
- package/dist/docs/assets/inter-italic-latin-ext.CN1xVJS-.woff2 +0 -0
- package/dist/docs/assets/inter-italic-latin.C2AdPX0b.woff2 +0 -0
- package/dist/docs/assets/inter-italic-vietnamese.BSbpV94h.woff2 +0 -0
- package/dist/docs/assets/inter-roman-cyrillic-ext.BBPuwvHQ.woff2 +0 -0
- package/dist/docs/assets/inter-roman-cyrillic.C5lxZ8CY.woff2 +0 -0
- package/dist/docs/assets/inter-roman-greek-ext.CqjqNYQ-.woff2 +0 -0
- package/dist/docs/assets/inter-roman-greek.BBVDIX6e.woff2 +0 -0
- package/dist/docs/assets/inter-roman-latin-ext.4ZJIpNVo.woff2 +0 -0
- package/dist/docs/assets/inter-roman-latin.Di8DUHzh.woff2 +0 -0
- package/dist/docs/assets/inter-roman-vietnamese.BjW4sHH5.woff2 +0 -0
- package/dist/docs/assets/packages_docs_README.md.PV1a27nC.js +3 -0
- package/dist/docs/assets/packages_docs_README.md.PV1a27nC.lean.js +1 -0
- package/dist/docs/assets/packages_viewer_README.md.BynKZSdN.js +3 -0
- package/dist/docs/assets/packages_viewer_README.md.BynKZSdN.lean.js +1 -0
- package/dist/docs/assets/style.C3E8Ltp6.css +1 -0
- package/dist/docs/bernard.svg +94 -0
- package/dist/docs/core/README.html +44 -0
- package/dist/docs/demo/README.html +47 -0
- package/dist/docs/docs/adr/0001-what-the-core-is-built-for.html +30 -0
- package/dist/docs/docs/adr/0002-which-harness-a-project-runs-on.html +30 -0
- package/dist/docs/docs/adr/0003-how-core-content-reaches-each-harness.html +30 -0
- package/dist/docs/docs/adr/0004-how-the-core-uses-external-tools.html +30 -0
- package/dist/docs/docs/adr/0005-what-drives-the-pipeline.html +30 -0
- package/dist/docs/docs/adr/0006-what-steps-hand-off-to-each-other.html +30 -0
- package/dist/docs/docs/adr/0007-how-humans-take-part-in-the-pipeline.html +30 -0
- package/dist/docs/docs/adr/0008-where-a-steps-reviewers-run.html +30 -0
- package/dist/docs/docs/adr/0009-where-pipeline-state-and-handoffs-live.html +30 -0
- package/dist/docs/docs/adr/0010-how-a-project-adapts-the-core.html +30 -0
- package/dist/docs/docs/adr/0011-how-the-factory-is-packaged-and-versioned.html +30 -0
- package/dist/docs/docs/adr/0012-how-a-steps-failures-are-told-apart-and-routed.html +30 -0
- package/dist/docs/docs/adr/0013-when-code-lands.html +30 -0
- package/dist/docs/docs/adr/0014-what-a-step-may-change.html +30 -0
- package/dist/docs/docs/adr/0015-how-a-project-shapes-its-ticket-flow.html +30 -0
- package/dist/docs/docs/adr/0016-which-core-the-factory-repo-runs.html +30 -0
- package/dist/docs/docs/adr/0017-where-a-tickets-record-lives.html +30 -0
- package/dist/docs/docs/adr/0018-the-products-name.html +30 -0
- package/dist/docs/docs/adr/0019-how-a-finding-is-answered-and-judged.html +30 -0
- package/dist/docs/docs/adr/0020-how-an-interrupted-run-resumes.html +30 -0
- package/dist/docs/docs/adr/0021-how-a-step-runs-in-its-workspace.html +30 -0
- package/dist/docs/docs/adr/0022-who-names-the-branches.html +30 -0
- package/dist/docs/docs/adr/0023-how-a-version-ships-before-npm.html +30 -0
- package/dist/docs/docs/adr/0024-how-the-config-type-carries-its-docs.html +30 -0
- package/dist/docs/docs/adr/0025-how-a-steps-handoff-is-written-and-checked.html +30 -0
- package/dist/docs/docs/adr/0026-support-for-github-copilot.html +30 -0
- package/dist/docs/docs/adr/0027-which-forge-a-project-is-on.html +30 -0
- package/dist/docs/docs/adr/0028-several-ticket-flows-in-one-pipeline.html +30 -0
- package/dist/docs/docs/adr/0029-the-branch-a-feature-works-on.html +30 -0
- package/dist/docs/docs/adr/0030-a-runner-without-coder.html +30 -0
- package/dist/docs/docs/adr/0031-how-the-run-viewer-reads-its-runs.html +30 -0
- package/dist/docs/docs/adr/0032-how-a-project-gets-the-viewer.html +30 -0
- package/dist/docs/docs/adr/0033-the-repos-license.html +30 -0
- package/dist/docs/docs/adr/0034-how-code-review-launches-its-reviewers.html +30 -0
- package/dist/docs/docs/adr/0035-how-the-package-is-published.html +30 -0
- package/dist/docs/docs/adr/0036-what-the-cores-pull-request-skill-does.html +30 -0
- package/dist/docs/docs/adr/0037-how-a-team-reads-the-factorys-documentation.html +30 -0
- package/dist/docs/docs/adr/0038-where-adapters-live.html +30 -0
- package/dist/docs/docs/adr/0039-the-repos-license.html +30 -0
- package/dist/docs/docs/adr/0040-how-a-version-is-released.html +30 -0
- package/dist/docs/docs/adr/0041-who-opens-the-features-pull-request.html +30 -0
- package/dist/docs/docs/adr/0042-how-secrets-are-kept-out-of-committed-records.html +30 -0
- package/dist/docs/docs/getting-started.html +41 -0
- package/dist/docs/docs/github.html +30 -0
- package/dist/docs/docs/overlay.html +64 -0
- package/dist/docs/docs/pipeline.html +30 -0
- package/dist/docs/docs/recipes.html +74 -0
- package/dist/docs/fixtures/README.html +30 -0
- package/dist/docs/hashmap.json +1 -0
- package/dist/docs/index.html +57 -0
- package/dist/docs/packages/docs/README.html +32 -0
- package/dist/docs/packages/viewer/README.html +32 -0
- package/dist/docs/vp-icons.css +0 -0
- package/dist/viewer/assets/Heading-C5Va5XMQ.js +1 -0
- package/dist/viewer/assets/SelectionIndicator-DxHiKGW_.js +1 -0
- package/dist/viewer/assets/alert-BI2omIo2.js +1 -0
- package/dist/viewer/assets/attempt-Dunc67N6.js +1 -0
- package/dist/viewer/assets/card-IsZ2ZhSn.js +1 -0
- package/dist/viewer/assets/{chunk-WQQL4CDK-DSpW9ZO8.js → chunk-WQQL4CDK-Bd4bkond.js} +1 -1
- package/dist/viewer/assets/context-CzP3x3DO.js +7 -0
- package/dist/viewer/assets/{dagre-NK4GIZVX-BzzW8pOj.js → dagre-NK4GIZVX-Bhq8pl9Y.js} +1 -1
- package/dist/viewer/assets/{index-CnzUhLCJ.css → index-B90XVeY-.css} +1 -1
- package/dist/viewer/assets/index-tH-KNwJL.js +10 -0
- package/dist/viewer/assets/{mermaid.core-D1FXi6mg.js → mermaid.core-I426eCuN.js} +4 -4
- package/dist/viewer/assets/pipeline-Hw_7tocN.js +1 -0
- package/dist/viewer/assets/routes-BOl7_JgK.js +1 -0
- package/dist/viewer/assets/runs._runId-D4q1mLCt.js +6 -0
- package/dist/viewer/assets/runs._runId.index-B-woIhKA.js +1 -0
- package/dist/viewer/assets/runs._runId.machines-SkWqrTI6.js +2 -0
- package/dist/viewer/assets/runs._runId.sessions-DBVWEbLY.js +1 -0
- package/dist/viewer/assets/{stateDiagram-v2-A6IESKWZ-J9KnYRFT.js → stateDiagram-v2-A6IESKWZ-DUwIje_A.js} +1 -1
- package/dist/viewer/assets/surface-B6LupC_E.js +1 -0
- package/dist/viewer/assets/table-B8t5lQz5.js +1 -0
- package/dist/viewer/assets/useEvent-DXj38gmC.js +1 -0
- package/dist/viewer/assets/useToggleState-D_NUC1vr.js +2 -0
- package/dist/viewer/index.html +5 -5
- package/fixtures/starters/azure-devops/.factory/factory.config.ts +2 -7
- package/fixtures/starters/azure-devops/.factory/factory.lock.json +7 -8
- package/fixtures/starters/github/.factory/factory.config.ts +2 -0
- package/fixtures/starters/github/.factory/factory.lock.json +6 -7
- package/fixtures/starters/gitlab/.factory/factory.config.ts +9 -0
- package/fixtures/starters/gitlab/.factory/factory.lock.json +19 -0
- package/fixtures/starters/gitlab/.factory/slots/checks.command.md +1 -0
- package/fixtures/starters/gitlab/.factory/slots/context.sources.md +3 -0
- package/fixtures/starters/gitlab/.factory/slots/review.detectors.md +5 -0
- package/package.json +9 -7
- package/core/skills/pull-request/scripts/pr-drive.sh +0 -208
- package/dist/viewer/assets/Heading-Dm1Q0gV2.js +0 -1
- package/dist/viewer/assets/api-C4lMOGdC.js +0 -7
- package/dist/viewer/assets/attempt-lbW5voCR.js +0 -1
- package/dist/viewer/assets/card-CtJKot3P.js +0 -1
- package/dist/viewer/assets/context-DEB-Y3Iz.js +0 -1
- package/dist/viewer/assets/index-Co9KwXRI.js +0 -10
- package/dist/viewer/assets/jsx-runtime-CkXRJ162.js +0 -1
- package/dist/viewer/assets/pipeline-B-myvM6K.js +0 -1
- package/dist/viewer/assets/routes-BzvVN6y-.js +0 -1
- package/dist/viewer/assets/runs._runId-BVT2VH_w.js +0 -6
- package/dist/viewer/assets/runs._runId.index-C3bbzwAC.js +0 -1
- package/dist/viewer/assets/runs._runId.machines-Cj21KdLd.js +0 -2
- package/dist/viewer/assets/runs._runId.sessions-Tg6Ou3_9.js +0 -1
- package/dist/viewer/assets/table-DzduWiYu.js +0 -1
- package/dist/viewer/assets/useEvent-CtTfOmE7.js +0 -1
- package/dist/viewer/assets/useToggleState-DfzJwOaN.js +0 -2
- package/fixtures/starters/azure-devops/.factory/skills/pull-request/SKILL.md +0 -29
|
@@ -0,0 +1,57 @@
|
|
|
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>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/index.md.DHgL6CzS.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 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>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" 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_" data-v-f8622dbf><div><h1 id="bernard-the-taktician" tabindex="-1">Bernard the taktician <a class="header-anchor" href="#bernard-the-taktician" aria-label="Permalink to "Bernard the taktician""></a></h1><p align="center"><img src="/docs/assets/bernard.RCgrvDdX.svg" alt="Bernard the taktician, the hermit crab" width="180"></p><p>An agentic factory that takes a feature from its specification to pull requests ready for your team's review, for new builds and legacy migrations alike. Coding agents do the work, a fresh session for each step, along a pipeline that a state machine drives. By default, humans validate the specification and the plan, and review the pull requests. Each of these gates can instead decide on its own and log its decision, so a project goes fully autonomous once its quality holds.</p><p>Its default pipeline is a legacy migration's: moving an application off a legacy stack, such as COBOL, a 4GL or an aging Java or PHP codebase, to a new one, starting with an analysis of what the legacy does today. A new build drops that analysis and starts from the specification.</p><p>It is for teams that build or migrate an application feature by feature with a coding agent, <a href="https://docs.claude.com/en/docs/claude-code" target="_blank" rel="noreferrer">Claude Code</a>, <a href="https://github.com/badlogic/pi-mono" target="_blank" rel="noreferrer">Pi</a> or <a href="https://docs.github.com/copilot/how-tos/copilot-cli" target="_blank" rel="noreferrer">GitHub Copilot</a>, which Bernard calls the project's <strong>harness</strong>. And for organisations that run several such projects: they all share one versioned <strong>core</strong>, and each project adapts it to its own context with an <strong>overlay</strong>.</p><p>Bernard is in alpha: <a href="#status">Status</a> says what works today and what is planned.</p><h2 id="why" tabindex="-1">Why <a class="header-anchor" href="#why" aria-label="Permalink to "Why""></a></h2><p>A team that delivers with coding agents ends up writing its own factory: the skills, agents and workflows that drive the agents. Teams on similar projects run the same pipeline, yet each one rewrites it. Generic know-how (writing a PRD, the product requirements document, running a code review, looping implementation and fixes) gets mixed with project context: the stack, the domain vocabulary, the issue tracker, the forge that hosts the code. The copies drift apart, and what one team learns doesn't reach the others.</p><p>Bernard keeps the two apart. The core holds the generic know-how, shared and versioned. A project's overlay, in its own repo, holds its context. <code>bernard sync</code> renders both into the native files of the project's harness. These words, and the rest of the vocabulary, are defined in <a href="./CONTEXT.html">CONTEXT.md</a>.</p><h2 id="how-a-feature-flows" tabindex="-1">How a feature flows <a class="header-anchor" href="#how-a-feature-flows" aria-label="Permalink to "How a feature flows""></a></h2><p><strong>The product manager validates the PRD, the developer validates the plan, and the factory delivers that plan up to the review of each pull request.</strong></p><ol><li><strong>Legacy analysis</strong> (migrations only). Automatic. It feeds the PRD.</li><li><strong>PRD.</strong> The factory drafts it, and the product manager reviews it in a pull request, like code.</li><li><strong>Plan.</strong> How to migrate the feature, or how to build it. Built in conversation with the developer, who validates it.</li><li><strong>Tickets → implementation → validation → review → PR → green CI.</strong> Automatic: the factory splits the plan into tickets, the smallest units it implements, and delivers each one along a graph of steps the project can reshape. The factory opens one pull request per feature, from the feature's own branch, <code>feat/<feature>-<slug></code>, named by its first step, to the base branch. A ticket whose graph has no gate after <code>pull-request</code> merges itself into the feature branch, with no PR of its own, so the change is reviewed once, in the feature's PR. A graph with a gate keeps the ticket's PR to the feature branch: the team reviews it, acts on its review and merges it, and a ticket that depends on one not merged yet starts from its branch, so its PR stacks on the other. The team merges the feature's PR once its tickets are in.</li></ol><p>A project chooses the steps before the tickets, and the policy of each gate, in <a href="./docs/overlay.html#pipeline">its config</a>. <a href="./docs/pipeline.html">docs/pipeline.md</a> draws the default pipeline, a migration's, from the orchestrator's state machines.</p><h2 id="status" tabindex="-1">Status <a class="header-anchor" href="#status" aria-label="Permalink to "Status""></a></h2><p>What works today:</p><ul><li>The orchestrator runs the whole pipeline above, and resumes a run from the records it commits in the project's repo.</li><li><code>bernard status</code> shows the most recently active features and where each ticket stands, read from the records on the project's remote.</li><li>A run that waits on a human stalls with the command that answers it: <code>bernard resume --feature <slug></code> with <code>--approve</code>, <code>--request-changes "<feedback>"</code>, <code>--retry</code> or <code>--answer <questionId>=<text></code>, and <code>--ticket <id></code> for a ticket. <code>bernard status</code> prints the same commands.</li><li>A tracker port, with a Jira Cloud adapter: <code>bernard run --feature DATA-12</code> starts a feature from a Jira issue, and the issues of the feature and its tickets follow the run.</li><li><code>bernard view</code> follows a project's runs live in the browser: each ticket's way through its graph of steps, every attempt and its session's log, and the machines, read from the project's telemetry. Next to it, under <code>/docs/</code>, it serves this documentation as a website, for the version the project pins.</li><li>The core ships the delivery steps: <code>implement</code>, <code>validate</code>, <code>code-review</code> with its three reviewers, <code>apply-review</code> and <code>pull-request</code>, which lands the ticket on the feature branch or opens its pull request, keeps the feature's pull request, on GitHub, GitLab or Azure DevOps with <code>bernard pull-request</code>, and drives its CI green, and a <code>tickets</code> step that reports the feature as a single ticket.</li><li><code>bernard sync</code> renders the core and an overlay for Claude Code, Pi and GitHub Copilot.</li><li><code>bernard init</code> writes a starter overlay for the project's forge, GitHub, GitLab or Azure DevOps, whatever its tracker: the forge is <code>adapters.forge</code> in its config.</li><li><code>bernard run</code> runs each step as a Claude Code or GitHub Copilot session, on your machine in a git worktree per ticket, or in a <a href="https://coder.com/" target="_blank" rel="noreferrer">Coder</a> workspace per ticket. The <a href="./demo/README.html">demo</a> delivers a feature end to end both ways.</li></ul><p>What is planned:</p><ul><li>Core skills for the legacy analysis, the PRD and the migration plan, a <code>tickets</code> skill that splits the plan into several tickets, and the legacy tracers that map a legacy application (<a href="https://github.com/theodo-group/bernard/issues/28" target="_blank" rel="noreferrer">#28</a>). Until then, a project writes them in its overlay or does them by hand, as the demo does.</li><li>A Pi driver for <code>bernard run</code>.</li></ul><h2 id="install" tabindex="-1">Install <a class="header-anchor" href="#install" aria-label="Permalink to "Install""></a></h2><p>You need Node 24, pnpm, git, and the harness your project runs.</p><p>From your project's root:</p><div class="language-sh vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">sh</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">mkdir</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> .factory</span></span>
|
|
27
|
+
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">pnpm</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> --dir</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> .factory</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> --ignore-workspace</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> add</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -E</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> @theodo/bernard@next</span></span>
|
|
28
|
+
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">alias</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> bernard</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">=</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">.factory/node_modules/.bin/bernard </span><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D;"># in your shell profile: each project runs the version it pins</span></span>
|
|
29
|
+
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">bernard</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> init</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> --harness</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> claude-code</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> --forge</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> github</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> --name</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> "My project"</span></span>
|
|
30
|
+
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">bernard</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> sync</span></span></code></pre></div><p>The first two lines install the factory's package, <a href="https://www.npmjs.com/package/@theodo/bernard" target="_blank" rel="noreferrer"><code>@theodo/bernard</code></a>, from npm in <code>.factory/</code>, pinned to its exact version. While Bernard is in beta, each version is a pre-release, under the dist-tag <code>next</code>. <code>bernard init</code> writes a starter overlay next to it, and <code>bernard sync</code> renders the core and the overlay into the harness's folder, <code>.claude/</code> here. Commit <code>.factory/</code> and that folder: your team and your CI install the factory with <code>pnpm --dir .factory --ignore-workspace install</code>.</p><p>Then adapt the factory to your project:</p><ul><li><a href="./docs/getting-started.html">Getting started</a>: from the factory's package to a green <code>bernard sync</code> in your project.</li><li><a href="./docs/overlay.html">The overlay</a>: every config field and slot, and how to add or override a skill.</li><li><a href="./docs/recipes.html">Recipes</a>: add a check to the review, reshape the delivery graph, switch harness, change the runner.</li></ul><h2 id="decisions" tabindex="-1">Decisions <a class="header-anchor" href="#decisions" aria-label="Permalink to "Decisions""></a></h2><p>The factory's decisions are recorded, with the criteria and the options they weighed, as ADRs (architecture decision records) in <a href="https://github.com/theodo-group/bernard/tree/v0.1.0-beta.1/docs/adr" target="_blank" rel="noreferrer">docs/adr/</a>. <a href="./CONTEXT.html">CONTEXT.md</a> defines the vocabulary, and <a href="./CONTRIBUTING.html#how-a-run-fits-together">CONTRIBUTING.md</a> shows how a run fits together.</p><h2 id="layout" tabindex="-1">Layout <a class="header-anchor" href="#layout" aria-label="Permalink to "Layout""></a></h2><div class="language- vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang"></span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span>bernard/</span></span>
|
|
31
|
+
<span class="line"><span>├── core/ # skills, agents and shared fragments, in a harness-neutral format</span></span>
|
|
32
|
+
<span class="line"><span>├── packages/</span></span>
|
|
33
|
+
<span class="line"><span>│ ├── contracts/ # Zod schemas: overlay config, pipeline, skill frontmatter, step handoffs</span></span>
|
|
34
|
+
<span class="line"><span>│ ├── orchestrator/ # the state machines that drive the pipeline, and the records they replay</span></span>
|
|
35
|
+
<span class="line"><span>│ ├── render/ # core + overlay → Handlebars render</span></span>
|
|
36
|
+
<span class="line"><span>│ ├── harness-claude-code/ # Claude Code's native files, and its headless driver</span></span>
|
|
37
|
+
<span class="line"><span>│ ├── harness-pi/ # Pi's native files</span></span>
|
|
38
|
+
<span class="line"><span>│ ├── harness-copilot/ # GitHub Copilot's native files, and its headless driver</span></span>
|
|
39
|
+
<span class="line"><span>│ ├── telemetry/ # the telemetry port, and its default adapter: JSON lines on disk</span></span>
|
|
40
|
+
<span class="line"><span>│ ├── viewer/ # the run viewer's page, and its server on the telemetry port</span></span>
|
|
41
|
+
<span class="line"><span>│ ├── docs/ # the documentation site: VitePress, on the markdown of this repo</span></span>
|
|
42
|
+
<span class="line"><span>│ └── cli/ # bernard init | sync | pipeline | run | resume | status | view, and the adapters</span></span>
|
|
43
|
+
<span class="line"><span>├── fixtures/ # reference projects for the render tests, and a starter overlay per forge</span></span>
|
|
44
|
+
<span class="line"><span>├── demo/ # a feature delivered end to end, on a local Coder or locally</span></span>
|
|
45
|
+
<span class="line"><span>└── docs/ # the guides, the pipeline and the ADRs, which packages/docs renders</span></span></code></pre></div><p>The adapters live in <code>packages/cli/src/adapters/</code>, one folder per tool: <code>coder/</code> and <code>local/</code> for the runners, <code>jira/</code> for the tracker (ADR-0038). The ports, and the logic their adapters share, stay in <code>packages/cli/src/runners/</code> and <code>packages/cli/src/trackers/</code>. The JSON lines telemetry sits next to its port in <code>packages/telemetry/</code>.</p><p>In a project:</p><div class="language- vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang"></span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span>my-project/</span></span>
|
|
46
|
+
<span class="line"><span>├── .factory/ # the overlay, owned by the project</span></span>
|
|
47
|
+
<span class="line"><span>│ ├── factory.config.ts # harness, project, paths, models, pipeline, adapters, handoffs, overrides</span></span>
|
|
48
|
+
<span class="line"><span>│ ├── slots/ # content injected into core skills and agents</span></span>
|
|
49
|
+
<span class="line"><span>│ ├── skills/ agents/ fragments/ # the project's own, or the core's it overrides</span></span>
|
|
50
|
+
<span class="line"><span>│ ├── factory.lock.json # what the last sync generated: the only files sync may overwrite or delete</span></span>
|
|
51
|
+
<span class="line"><span>│ └── package.json # pinned factory version</span></span>
|
|
52
|
+
<span class="line"><span>├── .claude/, .pi/ or .github/ # generated by `bernard sync`, committed</span></span>
|
|
53
|
+
<span class="line"><span>└── docs/features/<feature>/ # PRD, migration plan, tickets, and the run's records</span></span></code></pre></div><h2 id="development" tabindex="-1">Development <a class="header-anchor" href="#development" aria-label="Permalink to "Development""></a></h2><p>See <a href="./CONTRIBUTING.html">CONTRIBUTING.md</a>.</p><h2 id="license" tabindex="-1">License <a class="header-anchor" href="#license" aria-label="Permalink to "License""></a></h2><p><a href="https://github.com/theodo-group/bernard/blob/v0.1.0-beta.1/LICENSE" target="_blank" rel="noreferrer">PolyForm Shield License 1.0.0</a>, copyright Theodo Group.</p></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/README.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><!----></div><div class="pager" data-v-020e2df0><a class="VPLink link pager-link next" href="/docs/CONTEXT.html" data-v-020e2df0><!--[--><span class="desc" data-v-020e2df0>Next page</span><span class="title" data-v-020e2df0>Vocabulary</span><!--]--></a></div></nav></footer><!--[--><!--]--></div></div></div><!--[--><!--]--></div></div><!----><!--[--><!--]--></div></div>
|
|
54
|
+
<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>
|
|
55
|
+
|
|
56
|
+
</body>
|
|
57
|
+
</html>
|
|
@@ -0,0 +1,32 @@
|
|
|
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>Documentation site | 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/packages_docs_README.md.PV1a27nC.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 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>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" 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_packages_docs_README" data-v-f8622dbf><div><h1 id="documentation-site" tabindex="-1">Documentation site <a class="header-anchor" href="#documentation-site" aria-label="Permalink to "Documentation site""></a></h1><p>The factory's README, guides, vocabulary and ADRs, rendered as a website with <a href="https://vitepress.dev" target="_blank" rel="noreferrer">VitePress</a>. The package ships it, and <code>bernard view</code> serves it under <code>/docs/</code>, next to the run viewer: each links to the other from its header (ADR-0037).</p><div class="language-sh vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">sh</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">pnpm</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> dev:docs</span><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D;"> # VitePress, live, on http://localhost:5173/docs/</span></span>
|
|
27
|
+
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">pnpm</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> check:docs</span><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D;"> # docs/pipeline.md is up to date, and the site builds into dist/docs/ with no dead link</span></span>
|
|
28
|
+
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">pnpm</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> build</span><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D;"> # the CLI, the viewer, then this site into dist/docs/</span></span></code></pre></div><p>The pages are the markdown files of the repo, written for GitHub and read there as they are: this package holds the site's configuration and theme, not a copy of the pages.</p><h2 id="what-makes-a-page" tabindex="-1">What makes a page <a class="header-anchor" href="#what-makes-a-page" aria-label="Permalink to "What makes a page""></a></h2><p><code>SECTIONS</code> in <a href="https://github.com/theodo-group/bernard/blob/v0.1.0-beta.1/packages/docs/.vitepress/config.ts" target="_blank" rel="noreferrer">.vitepress/config.ts</a> is the sidebar, the nav and the list of pages. Every ADR of <code>docs/adr/</code> is a page, numbered in the sidebar under its <code># heading</code>; every other page is listed there, in reading order. <code>NOT_PAGES</code> lists the markdown that is never a page: the core's skills and agents, the fixtures, the demo's app, a feature's records and <code>tmp/</code>.</p><ul><li><strong>A new ADR</strong> needs nothing more.</li><li><strong>Any other new markdown file</strong> goes in a section of <code>SECTIONS</code>, or in <code>NOT_PAGES</code>: the build fails on a file in neither.</li></ul><p>A page's sidebar label is its first <code># heading</code>, or the one <code>LABELS</code> gives it when headings would clash or not fit.</p><h2 id="links" tabindex="-1">Links <a class="header-anchor" href="#links" aria-label="Permalink to "Links""></a></h2><p>Write links as GitHub reads them, relative to the page. On the site:</p><ul><li>a link to a page stays on the site;</li><li>a link to any other file or folder of the repo, such as <code>packages/cli/src/package.ts</code> or <code>core/skills/</code>, opens it on GitHub, at the tag of the version the site documents;</li><li>a link to nothing fails the build, whatever its extension. A link to <code>localhost</code> passes: the guides name the local Coder and the viewer.</li></ul><p>An image in an HTML tag starts with <code>./</code>, such as <code><img src="./docs/assets/bernard.svg"></code>: VitePress resolves the path as a module otherwise. <code>docs/assets/</code> is the site's public folder: the logo comes from there.</p><h2 id="markdown" tabindex="-1">Markdown <a class="header-anchor" href="#markdown" aria-label="Permalink to "Markdown""></a></h2><ul><li><strong>Mermaid</strong>: a <code>mermaid</code> fence draws a diagram. The build bundles only the kind the orchestrator draws, <code>MERMAID_DIAGRAM</code> in <a href="https://github.com/theodo-group/bernard/blob/v0.1.0-beta.1/packages/viewer/mermaid-diagram.ts" target="_blank" rel="noreferrer">packages/viewer/mermaid-diagram.ts</a>, as the viewer does; drawing another kind means allowing it there. The build fails if Mermaid moves its diagrams.</li><li><strong>No Vue</strong>: a <code>{{</code> stays text, in code as in prose. A page cannot use Vue's expressions or components.</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/packages/docs/README.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/packages/viewer/README.html" data-v-020e2df0><!--[--><span class="desc" data-v-020e2df0>Previous page</span><span class="title" data-v-020e2df0>Run viewer</span><!--]--></a></div><div class="pager" data-v-020e2df0><a class="VPLink link pager-link next" href="/docs/fixtures/README.html" data-v-020e2df0><!--[--><span class="desc" data-v-020e2df0>Next page</span><span class="title" data-v-020e2df0>Fixtures</span><!--]--></a></div></nav></footer><!--[--><!--]--></div></div></div><!--[--><!--]--></div></div><!----><!--[--><!--]--></div></div>
|
|
29
|
+
<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>
|
|
30
|
+
|
|
31
|
+
</body>
|
|
32
|
+
</html>
|