@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,30 @@
|
|
|
1
|
+
<!DOCTYPE html>
|
|
2
|
+
<html lang="en-US" dir="ltr">
|
|
3
|
+
<head>
|
|
4
|
+
<meta charset="utf-8">
|
|
5
|
+
<meta name="viewport" content="width=device-width,initial-scale=1">
|
|
6
|
+
<title>What a step may change | Bernard the taktician</title>
|
|
7
|
+
<meta name="description" content="An agentic factory for new builds and legacy migrations.">
|
|
8
|
+
<meta name="generator" content="VitePress v1.6.4">
|
|
9
|
+
<link rel="preload stylesheet" href="/docs/assets/style.C3E8Ltp6.css" as="style">
|
|
10
|
+
<link rel="preload stylesheet" href="/docs/vp-icons.css" as="style">
|
|
11
|
+
|
|
12
|
+
<script type="module" src="/docs/assets/app.URmpjWHb.js"></script>
|
|
13
|
+
<link rel="preload" href="/docs/assets/inter-roman-latin.Di8DUHzh.woff2" as="font" type="font/woff2" crossorigin="">
|
|
14
|
+
<link rel="modulepreload" href="/docs/assets/chunks/framework.hgjl6W6o.js">
|
|
15
|
+
<link rel="modulepreload" href="/docs/assets/chunks/theme.Cksh_UJH.js">
|
|
16
|
+
<link rel="modulepreload" href="/docs/assets/chunks/sizeCapture-INFHLROL.BEqL2zFi.js">
|
|
17
|
+
<link rel="modulepreload" href="/docs/assets/chunks/dagre-GXQ25YYZ.2qvw8AqH.js">
|
|
18
|
+
<link rel="modulepreload" href="/docs/assets/chunks/stateDiagram-v2-MP3YSRHH.3X7wNXKX.js">
|
|
19
|
+
<link rel="modulepreload" href="/docs/assets/chunks/virtual_mermaid-config.DDnGl6nM.js">
|
|
20
|
+
<link rel="modulepreload" href="/docs/assets/docs_adr_0014-what-a-step-may-change.md.Zslg3bnJ.lean.js">
|
|
21
|
+
<link rel="icon" href="/docs/bernard.svg" type="image/svg+xml">
|
|
22
|
+
<script id="check-dark-mode">(()=>{const e=localStorage.getItem("vitepress-theme-appearance")||"auto",a=window.matchMedia("(prefers-color-scheme: dark)").matches;(!e||e==="auto"?a:e==="dark")&&document.documentElement.classList.add("dark")})();</script>
|
|
23
|
+
<script id="check-mac-os">document.documentElement.classList.toggle("mac",/Mac|iPhone|iPod|iPad/i.test(navigator.platform));</script>
|
|
24
|
+
</head>
|
|
25
|
+
<body>
|
|
26
|
+
<div id="app"><div class="Layout" data-v-f87bd3ac><!--[--><!--]--><!--[--><span tabindex="-1" data-v-26966a6b></span><a href="#VPContent" class="VPSkipLink visually-hidden" data-v-26966a6b>Skip to content</a><!--]--><!----><header class="VPNav" data-v-f87bd3ac data-v-a776a728><div class="VPNavBar" data-v-a776a728 data-v-257d37ee><div class="wrapper" data-v-257d37ee><div class="container" data-v-257d37ee><div class="title" data-v-257d37ee><div class="VPNavBarTitle has-sidebar" data-v-257d37ee data-v-1b9c14bd><a class="title" href="/docs/" data-v-1b9c14bd><!--[--><!--]--><!--[--><img class="VPImage logo" src="/docs/bernard.svg" alt data-v-4a9aa8e2><!--]--><span data-v-1b9c14bd>Bernard</span><!--[--><!--]--></a></div></div><div class="content" data-v-257d37ee><div class="content-body" data-v-257d37ee><!--[--><!--]--><div class="VPNavBarSearch search" data-v-257d37ee><!--[--><!----><div id="local-search"><button type="button" class="DocSearch DocSearch-Button" aria-label="Search"><span class="DocSearch-Button-Container"><span class="vp-icon DocSearch-Search-Icon"></span><span class="DocSearch-Button-Placeholder">Search</span></span><span class="DocSearch-Button-Keys"><kbd class="DocSearch-Button-Key"></kbd><kbd class="DocSearch-Button-Key">K</kbd></span></button></div><!--]--></div><nav aria-labelledby="main-nav-aria-label" class="VPNavBarMenu menu" data-v-257d37ee data-v-96ed2429><span id="main-nav-aria-label" class="visually-hidden" data-v-96ed2429> Main Navigation </span><!--[--><!--[--><a class="VPLink link VPNavBarMenuLink" href="/docs/docs/getting-started.html" tabindex="0" data-v-96ed2429 data-v-c21a295c><!--[--><span data-v-c21a295c>Guides</span><!--]--></a><!--]--><!--[--><a class="VPLink link VPNavBarMenuLink" href="/docs/CONTRIBUTING.html" tabindex="0" data-v-96ed2429 data-v-c21a295c><!--[--><span data-v-c21a295c>Contributing</span><!--]--></a><!--]--><!--[--><a class="VPLink link VPNavBarMenuLink" href="/docs/docs/adr/0001-what-the-core-is-built-for.html" tabindex="0" data-v-96ed2429 data-v-c21a295c><!--[--><span data-v-c21a295c>Decisions</span><!--]--></a><!--]--><!--]--></nav><!----><div class="VPNavBarAppearance appearance" data-v-257d37ee data-v-772a648f><button class="VPSwitch VPSwitchAppearance" type="button" role="switch" title aria-checked="false" data-v-772a648f data-v-32dadf2f data-v-033bec8f><span class="check" data-v-033bec8f><span class="icon" data-v-033bec8f><!--[--><span class="vpi-sun sun" data-v-32dadf2f></span><span class="vpi-moon moon" data-v-32dadf2f></span><!--]--></span></span></button></div><!----><div class="VPFlyout VPNavBarExtra extra" data-v-257d37ee data-v-6a77a12d data-v-6ff730e4><button type="button" class="button" aria-haspopup="true" aria-expanded="false" aria-label="extra navigation" data-v-6ff730e4><span class="vpi-more-horizontal icon" data-v-6ff730e4></span></button><div class="menu" data-v-6ff730e4><div class="VPMenu" data-v-6ff730e4 data-v-7e1ab185><!----><!--[--><!--[--><!----><div class="group" data-v-6a77a12d><div class="item appearance" data-v-6a77a12d><p class="label" data-v-6a77a12d>Appearance</p><div class="appearance-action" data-v-6a77a12d><button class="VPSwitch VPSwitchAppearance" type="button" role="switch" title aria-checked="false" data-v-6a77a12d data-v-32dadf2f data-v-033bec8f><span class="check" data-v-033bec8f><span class="icon" data-v-033bec8f><!--[--><span class="vpi-sun sun" data-v-32dadf2f></span><span class="vpi-moon moon" data-v-32dadf2f></span><!--]--></span></span></button></div></div></div><!----><!--]--><!--]--></div></div></div><!--[--><!--[--><!--[--><a class="viewer-switch" href="/">Run viewer</a><!--]--><!--]--><!--]--><button type="button" class="VPNavBarHamburger hamburger" aria-label="mobile navigation" aria-expanded="false" aria-controls="VPNavScreen" data-v-257d37ee data-v-33d7d0d7><span class="container" data-v-33d7d0d7><span class="top" data-v-33d7d0d7></span><span class="middle" data-v-33d7d0d7></span><span class="bottom" data-v-33d7d0d7></span></span></button></div></div></div></div><div class="divider" data-v-257d37ee><div class="divider-line" data-v-257d37ee></div></div></div><!----></header><div class="VPLocalNav has-sidebar empty" data-v-f87bd3ac data-v-c5f097a9><div class="container" data-v-c5f097a9><button class="menu" aria-expanded="false" aria-controls="VPSidebarNav" data-v-c5f097a9><span class="vpi-align-left menu-icon" data-v-c5f097a9></span><span class="menu-text" data-v-c5f097a9>Menu</span></button><div class="VPLocalNavOutlineDropdown" style="--vp-vh:0px;" data-v-c5f097a9 data-v-cb88d934><button data-v-cb88d934>Return to top</button><!----></div></div></div><aside class="VPSidebar" data-v-f87bd3ac data-v-979e8f18><div class="curtain" data-v-979e8f18></div><nav class="nav" id="VPSidebarNav" aria-labelledby="sidebar-aria-label" tabindex="-1" data-v-979e8f18><span class="visually-hidden" id="sidebar-aria-label" data-v-979e8f18> Sidebar Navigation </span><!--[--><!--]--><!--[--><div class="no-transition group" data-v-b9208f43><section class="VPSidebarItem level-0 collapsible" data-v-b9208f43 data-v-0b328883><div class="item" role="button" tabindex="0" data-v-0b328883><div class="indicator" data-v-0b328883></div><h2 class="text" data-v-0b328883>Bernard</h2><div class="caret" role="button" aria-label="toggle section" tabindex="0" data-v-0b328883><span class="vpi-chevron-right caret-icon" data-v-0b328883></span></div></div><div class="items" data-v-0b328883><!--[--><div class="VPSidebarItem level-1 is-link" data-v-0b328883><div class="item" data-v-0b328883><div class="indicator" data-v-0b328883></div><a class="VPLink link link" href="/docs/" data-v-0b328883><!--[--><p class="text" data-v-0b328883>Overview</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-0b328883><div class="item" data-v-0b328883><div class="indicator" data-v-0b328883></div><a class="VPLink link link" href="/docs/CONTEXT.html" data-v-0b328883><!--[--><p class="text" data-v-0b328883>Vocabulary</p><!--]--></a><!----></div><!----></div><!--]--></div></section></div><div class="no-transition group" data-v-b9208f43><section class="VPSidebarItem level-0 collapsible" data-v-b9208f43 data-v-0b328883><div class="item" role="button" tabindex="0" data-v-0b328883><div class="indicator" data-v-0b328883></div><h2 class="text" data-v-0b328883>Guides</h2><div class="caret" role="button" aria-label="toggle section" tabindex="0" data-v-0b328883><span class="vpi-chevron-right caret-icon" data-v-0b328883></span></div></div><div class="items" data-v-0b328883><!--[--><div class="VPSidebarItem level-1 is-link" data-v-0b328883><div class="item" data-v-0b328883><div class="indicator" data-v-0b328883></div><a class="VPLink link link" href="/docs/docs/getting-started.html" data-v-0b328883><!--[--><p class="text" data-v-0b328883>Getting started</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-0b328883><div class="item" data-v-0b328883><div class="indicator" data-v-0b328883></div><a class="VPLink link link" href="/docs/docs/overlay.html" data-v-0b328883><!--[--><p class="text" data-v-0b328883>The overlay</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-0b328883><div class="item" data-v-0b328883><div class="indicator" data-v-0b328883></div><a class="VPLink link link" href="/docs/docs/recipes.html" data-v-0b328883><!--[--><p class="text" data-v-0b328883>Recipes</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-0b328883><div class="item" data-v-0b328883><div class="indicator" data-v-0b328883></div><a class="VPLink link link" href="/docs/docs/pipeline.html" data-v-0b328883><!--[--><p class="text" data-v-0b328883>Pipeline</p><!--]--></a><!----></div><!----></div><!--]--></div></section></div><div class="no-transition group" data-v-b9208f43><section class="VPSidebarItem level-0 collapsible" data-v-b9208f43 data-v-0b328883><div class="item" role="button" tabindex="0" data-v-0b328883><div class="indicator" data-v-0b328883></div><h2 class="text" data-v-0b328883>Contributing</h2><div class="caret" role="button" aria-label="toggle section" tabindex="0" data-v-0b328883><span class="vpi-chevron-right caret-icon" data-v-0b328883></span></div></div><div class="items" data-v-0b328883><!--[--><div class="VPSidebarItem level-1 is-link" data-v-0b328883><div class="item" data-v-0b328883><div class="indicator" data-v-0b328883></div><a class="VPLink link link" href="/docs/CONTRIBUTING.html" data-v-0b328883><!--[--><p class="text" data-v-0b328883>Contributing</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-0b328883><div class="item" data-v-0b328883><div class="indicator" data-v-0b328883></div><a class="VPLink link link" href="/docs/CLAUDE.html" data-v-0b328883><!--[--><p class="text" data-v-0b328883>Rules for agents</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-0b328883><div class="item" data-v-0b328883><div class="indicator" data-v-0b328883></div><a class="VPLink link link" href="/docs/docs/github.html" data-v-0b328883><!--[--><p class="text" data-v-0b328883>GitHub</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-0b328883><div class="item" data-v-0b328883><div class="indicator" data-v-0b328883></div><a class="VPLink link link" href="/docs/core/README.html" data-v-0b328883><!--[--><p class="text" data-v-0b328883>Core content</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-0b328883><div class="item" data-v-0b328883><div class="indicator" data-v-0b328883></div><a class="VPLink link link" href="/docs/packages/viewer/README.html" data-v-0b328883><!--[--><p class="text" data-v-0b328883>Run viewer</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-0b328883><div class="item" data-v-0b328883><div class="indicator" data-v-0b328883></div><a class="VPLink link link" href="/docs/packages/docs/README.html" data-v-0b328883><!--[--><p class="text" data-v-0b328883>Documentation site</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-0b328883><div class="item" data-v-0b328883><div class="indicator" data-v-0b328883></div><a class="VPLink link link" href="/docs/fixtures/README.html" data-v-0b328883><!--[--><p class="text" data-v-0b328883>Fixtures</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-0b328883><div class="item" data-v-0b328883><div class="indicator" data-v-0b328883></div><a class="VPLink link link" href="/docs/demo/README.html" data-v-0b328883><!--[--><p class="text" data-v-0b328883>Demo</p><!--]--></a><!----></div><!----></div><!--]--></div></section></div><div class="no-transition group" data-v-b9208f43><section class="VPSidebarItem level-0 collapsible collapsed has-active" data-v-b9208f43 data-v-0b328883><div class="item" role="button" tabindex="0" data-v-0b328883><div class="indicator" data-v-0b328883></div><h2 class="text" data-v-0b328883>Decisions</h2><div class="caret" role="button" aria-label="toggle section" tabindex="0" data-v-0b328883><span class="vpi-chevron-right caret-icon" data-v-0b328883></span></div></div><div class="items" data-v-0b328883><!--[--><div class="VPSidebarItem level-1 is-link" data-v-0b328883><div class="item" data-v-0b328883><div class="indicator" data-v-0b328883></div><a class="VPLink link link" href="/docs/docs/adr/0001-what-the-core-is-built-for.html" data-v-0b328883><!--[--><p class="text" data-v-0b328883>0001 · What the core is built for</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-0b328883><div class="item" data-v-0b328883><div class="indicator" data-v-0b328883></div><a class="VPLink link link" href="/docs/docs/adr/0002-which-harness-a-project-runs-on.html" data-v-0b328883><!--[--><p class="text" data-v-0b328883>0002 · Which harness a project runs on</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-0b328883><div class="item" data-v-0b328883><div class="indicator" data-v-0b328883></div><a class="VPLink link link" href="/docs/docs/adr/0003-how-core-content-reaches-each-harness.html" data-v-0b328883><!--[--><p class="text" data-v-0b328883>0003 · How core content reaches each harness</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-0b328883><div class="item" data-v-0b328883><div class="indicator" data-v-0b328883></div><a class="VPLink link link" href="/docs/docs/adr/0004-how-the-core-uses-external-tools.html" data-v-0b328883><!--[--><p class="text" data-v-0b328883>0004 · How the core uses external tools</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-0b328883><div class="item" data-v-0b328883><div class="indicator" data-v-0b328883></div><a class="VPLink link link" href="/docs/docs/adr/0005-what-drives-the-pipeline.html" data-v-0b328883><!--[--><p class="text" data-v-0b328883>0005 · What drives the pipeline</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-0b328883><div class="item" data-v-0b328883><div class="indicator" data-v-0b328883></div><a class="VPLink link link" href="/docs/docs/adr/0006-what-steps-hand-off-to-each-other.html" data-v-0b328883><!--[--><p class="text" data-v-0b328883>0006 · What steps hand off to each other</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-0b328883><div class="item" data-v-0b328883><div class="indicator" data-v-0b328883></div><a class="VPLink link link" href="/docs/docs/adr/0007-how-humans-take-part-in-the-pipeline.html" data-v-0b328883><!--[--><p class="text" data-v-0b328883>0007 · How humans take part in the pipeline</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-0b328883><div class="item" data-v-0b328883><div class="indicator" data-v-0b328883></div><a class="VPLink link link" href="/docs/docs/adr/0008-where-a-steps-reviewers-run.html" data-v-0b328883><!--[--><p class="text" data-v-0b328883>0008 · Where a step's reviewers run</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-0b328883><div class="item" data-v-0b328883><div class="indicator" data-v-0b328883></div><a class="VPLink link link" href="/docs/docs/adr/0009-where-pipeline-state-and-handoffs-live.html" data-v-0b328883><!--[--><p class="text" data-v-0b328883>0009 · Where pipeline state and handoffs live</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-0b328883><div class="item" data-v-0b328883><div class="indicator" data-v-0b328883></div><a class="VPLink link link" href="/docs/docs/adr/0010-how-a-project-adapts-the-core.html" data-v-0b328883><!--[--><p class="text" data-v-0b328883>0010 · How a project adapts the core</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-0b328883><div class="item" data-v-0b328883><div class="indicator" data-v-0b328883></div><a class="VPLink link link" href="/docs/docs/adr/0011-how-the-factory-is-packaged-and-versioned.html" data-v-0b328883><!--[--><p class="text" data-v-0b328883>0011 · How the factory is packaged and versioned</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-0b328883><div class="item" data-v-0b328883><div class="indicator" data-v-0b328883></div><a class="VPLink link link" href="/docs/docs/adr/0012-how-a-steps-failures-are-told-apart-and-routed.html" data-v-0b328883><!--[--><p class="text" data-v-0b328883>0012 · How a step's failures are told apart and routed</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-0b328883><div class="item" data-v-0b328883><div class="indicator" data-v-0b328883></div><a class="VPLink link link" href="/docs/docs/adr/0013-when-code-lands.html" data-v-0b328883><!--[--><p class="text" data-v-0b328883>0013 · When code lands</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-0b328883><div class="item" data-v-0b328883><div class="indicator" data-v-0b328883></div><a class="VPLink link link" href="/docs/docs/adr/0014-what-a-step-may-change.html" data-v-0b328883><!--[--><p class="text" data-v-0b328883>0014 · What a step may change</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-0b328883><div class="item" data-v-0b328883><div class="indicator" data-v-0b328883></div><a class="VPLink link link" href="/docs/docs/adr/0015-how-a-project-shapes-its-ticket-flow.html" data-v-0b328883><!--[--><p class="text" data-v-0b328883>0015 · How a project shapes its ticket flow</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-0b328883><div class="item" data-v-0b328883><div class="indicator" data-v-0b328883></div><a class="VPLink link link" href="/docs/docs/adr/0016-which-core-the-factory-repo-runs.html" data-v-0b328883><!--[--><p class="text" data-v-0b328883>0016 · Which core the factory repo runs</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-0b328883><div class="item" data-v-0b328883><div class="indicator" data-v-0b328883></div><a class="VPLink link link" href="/docs/docs/adr/0017-where-a-tickets-record-lives.html" data-v-0b328883><!--[--><p class="text" data-v-0b328883>0017 · Where a ticket's record lives</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-0b328883><div class="item" data-v-0b328883><div class="indicator" data-v-0b328883></div><a class="VPLink link link" href="/docs/docs/adr/0018-the-products-name.html" data-v-0b328883><!--[--><p class="text" data-v-0b328883>0018 · The product's name</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-0b328883><div class="item" data-v-0b328883><div class="indicator" data-v-0b328883></div><a class="VPLink link link" href="/docs/docs/adr/0019-how-a-finding-is-answered-and-judged.html" data-v-0b328883><!--[--><p class="text" data-v-0b328883>0019 · How a finding is answered and judged</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-0b328883><div class="item" data-v-0b328883><div class="indicator" data-v-0b328883></div><a class="VPLink link link" href="/docs/docs/adr/0020-how-an-interrupted-run-resumes.html" data-v-0b328883><!--[--><p class="text" data-v-0b328883>0020 · How an interrupted run resumes</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-0b328883><div class="item" data-v-0b328883><div class="indicator" data-v-0b328883></div><a class="VPLink link link" href="/docs/docs/adr/0021-how-a-step-runs-in-its-workspace.html" data-v-0b328883><!--[--><p class="text" data-v-0b328883>0021 · How a step runs in its workspace</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-0b328883><div class="item" data-v-0b328883><div class="indicator" data-v-0b328883></div><a class="VPLink link link" href="/docs/docs/adr/0022-who-names-the-branches.html" data-v-0b328883><!--[--><p class="text" data-v-0b328883>0022 · Who names the branches</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-0b328883><div class="item" data-v-0b328883><div class="indicator" data-v-0b328883></div><a class="VPLink link link" href="/docs/docs/adr/0023-how-a-version-ships-before-npm.html" data-v-0b328883><!--[--><p class="text" data-v-0b328883>0023 · How a version ships before npm</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-0b328883><div class="item" data-v-0b328883><div class="indicator" data-v-0b328883></div><a class="VPLink link link" href="/docs/docs/adr/0024-how-the-config-type-carries-its-docs.html" data-v-0b328883><!--[--><p class="text" data-v-0b328883>0024 · How the config type carries its docs</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-0b328883><div class="item" data-v-0b328883><div class="indicator" data-v-0b328883></div><a class="VPLink link link" href="/docs/docs/adr/0025-how-a-steps-handoff-is-written-and-checked.html" data-v-0b328883><!--[--><p class="text" data-v-0b328883>0025 · How a step's handoff is written and checked</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-0b328883><div class="item" data-v-0b328883><div class="indicator" data-v-0b328883></div><a class="VPLink link link" href="/docs/docs/adr/0026-support-for-github-copilot.html" data-v-0b328883><!--[--><p class="text" data-v-0b328883>0026 · Support for GitHub Copilot</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-0b328883><div class="item" data-v-0b328883><div class="indicator" data-v-0b328883></div><a class="VPLink link link" href="/docs/docs/adr/0027-which-forge-a-project-is-on.html" data-v-0b328883><!--[--><p class="text" data-v-0b328883>0027 · Which forge a project is on</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-0b328883><div class="item" data-v-0b328883><div class="indicator" data-v-0b328883></div><a class="VPLink link link" href="/docs/docs/adr/0028-several-ticket-flows-in-one-pipeline.html" data-v-0b328883><!--[--><p class="text" data-v-0b328883>0028 · Several ticket flows in one pipeline</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-0b328883><div class="item" data-v-0b328883><div class="indicator" data-v-0b328883></div><a class="VPLink link link" href="/docs/docs/adr/0029-the-branch-a-feature-works-on.html" data-v-0b328883><!--[--><p class="text" data-v-0b328883>0029 · The branch a feature works on</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-0b328883><div class="item" data-v-0b328883><div class="indicator" data-v-0b328883></div><a class="VPLink link link" href="/docs/docs/adr/0030-a-runner-without-coder.html" data-v-0b328883><!--[--><p class="text" data-v-0b328883>0030 · A runner without Coder</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-0b328883><div class="item" data-v-0b328883><div class="indicator" data-v-0b328883></div><a class="VPLink link link" href="/docs/docs/adr/0031-how-the-run-viewer-reads-its-runs.html" data-v-0b328883><!--[--><p class="text" data-v-0b328883>0031 · How the run viewer reads its runs</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-0b328883><div class="item" data-v-0b328883><div class="indicator" data-v-0b328883></div><a class="VPLink link link" href="/docs/docs/adr/0032-how-a-project-gets-the-viewer.html" data-v-0b328883><!--[--><p class="text" data-v-0b328883>0032 · How a project gets the viewer</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-0b328883><div class="item" data-v-0b328883><div class="indicator" data-v-0b328883></div><a class="VPLink link link" href="/docs/docs/adr/0033-the-repos-license.html" data-v-0b328883><!--[--><p class="text" data-v-0b328883>0033 · The repo's license</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-0b328883><div class="item" data-v-0b328883><div class="indicator" data-v-0b328883></div><a class="VPLink link link" href="/docs/docs/adr/0034-how-code-review-launches-its-reviewers.html" data-v-0b328883><!--[--><p class="text" data-v-0b328883>0034 · How code review launches its reviewers</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-0b328883><div class="item" data-v-0b328883><div class="indicator" data-v-0b328883></div><a class="VPLink link link" href="/docs/docs/adr/0035-how-the-package-is-published.html" data-v-0b328883><!--[--><p class="text" data-v-0b328883>0035 · How the package is published</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-0b328883><div class="item" data-v-0b328883><div class="indicator" data-v-0b328883></div><a class="VPLink link link" href="/docs/docs/adr/0036-what-the-cores-pull-request-skill-does.html" data-v-0b328883><!--[--><p class="text" data-v-0b328883>0036 · What the core's pull-request skill does</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-0b328883><div class="item" data-v-0b328883><div class="indicator" data-v-0b328883></div><a class="VPLink link link" href="/docs/docs/adr/0037-how-a-team-reads-the-factorys-documentation.html" data-v-0b328883><!--[--><p class="text" data-v-0b328883>0037 · How a team reads the factory's documentation</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-0b328883><div class="item" data-v-0b328883><div class="indicator" data-v-0b328883></div><a class="VPLink link link" href="/docs/docs/adr/0038-where-adapters-live.html" data-v-0b328883><!--[--><p class="text" data-v-0b328883>0038 · Where adapters live</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-0b328883><div class="item" data-v-0b328883><div class="indicator" data-v-0b328883></div><a class="VPLink link link" href="/docs/docs/adr/0039-the-repos-license.html" data-v-0b328883><!--[--><p class="text" data-v-0b328883>0039 · The repo's license</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-0b328883><div class="item" data-v-0b328883><div class="indicator" data-v-0b328883></div><a class="VPLink link link" href="/docs/docs/adr/0040-how-a-version-is-released.html" data-v-0b328883><!--[--><p class="text" data-v-0b328883>0040 · How a version is released</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-0b328883><div class="item" data-v-0b328883><div class="indicator" data-v-0b328883></div><a class="VPLink link link" href="/docs/docs/adr/0041-who-opens-the-features-pull-request.html" data-v-0b328883><!--[--><p class="text" data-v-0b328883>0041 · Who opens the feature's pull request, and how a ticket reaches it</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-0b328883><div class="item" data-v-0b328883><div class="indicator" data-v-0b328883></div><a class="VPLink link link" href="/docs/docs/adr/0042-how-secrets-are-kept-out-of-committed-records.html" data-v-0b328883><!--[--><p class="text" data-v-0b328883>0042 · How secrets are kept out of committed records</p><!--]--></a><!----></div><!----></div><!--]--></div></section></div><!--]--><!--[--><!--]--></nav></aside><div class="VPContent has-sidebar" id="VPContent" data-v-f87bd3ac data-v-67e000d0><div class="VPDoc has-sidebar has-aside" data-v-67e000d0 data-v-f8622dbf><!--[--><!--]--><div class="container" data-v-f8622dbf><div class="aside" data-v-f8622dbf><div class="aside-curtain" data-v-f8622dbf></div><div class="aside-container" data-v-f8622dbf><div class="aside-content" data-v-f8622dbf><div class="VPDocAside" data-v-f8622dbf data-v-fc01c646><!--[--><!--]--><!--[--><!--]--><nav aria-labelledby="doc-outline-aria-label" class="VPDocAsideOutline" data-v-fc01c646 data-v-172fd98a><div class="content" data-v-172fd98a><div class="outline-marker" data-v-172fd98a></div><div aria-level="2" class="outline-title" id="doc-outline-aria-label" role="heading" data-v-172fd98a>On this page</div><ul class="VPDocOutlineItem root" data-v-172fd98a data-v-ea4171dd><!--[--><!--]--></ul></div></nav><!--[--><!--]--><div class="spacer" data-v-fc01c646></div><!--[--><!--]--><!----><!--[--><!--]--><!--[--><!--]--></div></div></div></div><div class="content" data-v-f8622dbf><div class="content-container" data-v-f8622dbf><!--[--><!--]--><main class="main" data-v-f8622dbf><div style="position:relative;" class="vp-doc _docs_docs_adr_0014-what-a-step-may-change" data-v-f8622dbf><div><h1 id="what-a-step-may-change" tabindex="-1">What a step may change <a class="header-anchor" href="#what-a-step-may-change" aria-label="Permalink to "What a step may change""></a></h1><p>Accepted · 2026-10-07</p><h2 id="context" tabindex="-1">Context <a class="header-anchor" href="#context" aria-label="Permalink to "Context""></a></h2><p>The overlay can give a step a write scope: the globs it may change. This keeps an agent from reaching a green result by changing what proves it, such as the non-regression tests during <code>implement</code>, without freezing files at a gate.</p><h2 id="criteria" tabindex="-1">Criteria <a class="header-anchor" href="#criteria" aria-label="Permalink to "Criteria""></a></h2><ol><li><strong>Cannot be gone around</strong>: an agent must not reach a green result by changing what proves it, and a shell command goes around harness permission rules.</li><li><strong>No freeze moment</strong>: hashing approved files at a gate needs a freeze moment and stored hashes.</li><li><strong>Says which step may touch what</strong>: a hash at a gate says nothing about it.</li><li><strong>Both harnesses</strong>: the core may only rely on what both harnesses can express (ADR-0002).</li><li><strong>Another try can fix it</strong>: the step made the mistake, and another try with the failure class can fix it.</li></ol><h2 id="options" tabindex="-1">Options <a class="header-anchor" href="#options" aria-label="Permalink to "Options""></a></h2><ul><li><strong>Hash the approved files at a gate and refuse a pass if they changed.</strong> It needs a freeze moment and stored hashes (2), and says nothing about which step may touch what (3).</li><li><strong>A write scope per step, checked after the step, which fails it.</strong> The overlay gives a step the globs it may change, which keeps an agent from reaching a green result by changing what proves it, without freezing files at a gate (1, 2, 3). After the step, the orchestrator lists the files it changed; a file outside the scope is restored, and the step fails with the class <code>out-of-scope-write</code> (5).</li><li><strong>Harness permission rules only.</strong> A shell command goes around them (1), and the core may only rely on what both harnesses can express (4, ADR-0002).</li><li><strong>Block the step instead of failing it.</strong> The step made the mistake, and another try with the failure class can fix it (5).</li></ul><h2 id="comparison" tabindex="-1">Comparison <a class="header-anchor" href="#comparison" aria-label="Permalink to "Comparison""></a></h2><table tabindex="0"><thead><tr><th>Option</th><th>1. Not gone around</th><th>2. No freeze</th><th>3. Which step</th><th>4. Both harnesses</th><th>5. Another try</th></tr></thead><tbody><tr><td>Hash at a gate</td><td>🟢</td><td>🔴</td><td>🔴</td><td>⚪</td><td>⚪</td></tr><tr><td>Scope checked after the step</td><td>🟢</td><td>🟢</td><td>🟢</td><td>🟢</td><td>🟢</td></tr><tr><td>Harness permission rules only</td><td>🔴</td><td>⚪</td><td>⚪</td><td>🔴</td><td>⚪</td></tr><tr><td>Block instead of fail</td><td>🟢</td><td>🟢</td><td>🟢</td><td>🟢</td><td>🔴</td></tr></tbody></table><p>🟢 meets · 🟠 partly, or at a cost · 🔴 fails · ⚪ not discussed</p><h2 id="decision" tabindex="-1">Decision <a class="header-anchor" href="#decision" aria-label="Permalink to "Decision""></a></h2><p>A write scope per step, checked after the step, which fails it. The orchestrator records the commit the step starts from, and after the step lists the files it changed. A file outside the scope is restored to that commit, and the step fails with the class <code>out-of-scope-write</code>; the restored paths go in the error. The step also receives its scope in its request. Harness permission rules can come later as a first line of defence.</p><h2 id="consequences" tabindex="-1">Consequences <a class="header-anchor" href="#consequences" aria-label="Permalink to "Consequences""></a></h2><ul><li>Scopes are opt-in per step. A step without one is not checked.</li><li>A ticket's record (<code>.pipeline/</code>) is outside every scope: the runner writes each step's handoff there, and a step adds the files it produces for review (ADR-0017, ADR-0025).</li><li>The runner adapter reads and restores the working copy, since it knows where the step ran. A pipeline with scopes refuses a runner that cannot.</li><li>A blocked result is not checked: its writes stay for the human who unblocks it. A crashed run is checked before it is retried.</li><li>The check covers the steps the orchestrator runs, not interactive steps a human runs.</li><li>Out-of-scope work is lost; in-scope work is kept.</li><li>Read isolation, such as keeping the analysis away from target code, is not covered: a read leaves no trace to check.</li></ul></div></div></main><footer class="VPDocFooter" data-v-f8622dbf data-v-020e2df0><!--[--><!--]--><div class="edit-info" data-v-020e2df0><div class="edit-link" data-v-020e2df0><a class="VPLink link vp-external-link-icon no-icon edit-link-button" href="https://github.com/theodo-group/bernard/edit/main/docs/adr/0014-what-a-step-may-change.md" target="_blank" rel="noreferrer" data-v-020e2df0><!--[--><span class="vpi-square-pen edit-link-icon" data-v-020e2df0></span> Edit this page on GitHub<!--]--></a></div><!----></div><nav class="prev-next" aria-labelledby="doc-footer-aria-label" data-v-020e2df0><span class="visually-hidden" id="doc-footer-aria-label" data-v-020e2df0>Pager</span><div class="pager" data-v-020e2df0><a class="VPLink link pager-link prev" href="/docs/docs/adr/0013-when-code-lands.html" data-v-020e2df0><!--[--><span class="desc" data-v-020e2df0>Previous page</span><span class="title" data-v-020e2df0>0013 · When code lands</span><!--]--></a></div><div class="pager" data-v-020e2df0><a class="VPLink link pager-link next" href="/docs/docs/adr/0015-how-a-project-shapes-its-ticket-flow.html" data-v-020e2df0><!--[--><span class="desc" data-v-020e2df0>Next page</span><span class="title" data-v-020e2df0>0015 · How a project shapes its ticket flow</span><!--]--></a></div></nav></footer><!--[--><!--]--></div></div></div><!--[--><!--]--></div></div><!----><!--[--><!--]--></div></div>
|
|
27
|
+
<script>window.__VP_HASH_MAP__=JSON.parse("{\"claude.md\":\"BLSB-5gK\",\"context.md\":\"BovnvMGK\",\"contributing.md\":\"DwJsKrz3\",\"core_readme.md\":\"DyxYsikc\",\"demo_readme.md\":\"Cpi2pUU9\",\"docs_adr_0001-what-the-core-is-built-for.md\":\"BxOoMjST\",\"docs_adr_0002-which-harness-a-project-runs-on.md\":\"2GwF-nj0\",\"docs_adr_0003-how-core-content-reaches-each-harness.md\":\"BMWE00Mf\",\"docs_adr_0004-how-the-core-uses-external-tools.md\":\"B7dtE7MB\",\"docs_adr_0005-what-drives-the-pipeline.md\":\"DGn0CJeq\",\"docs_adr_0006-what-steps-hand-off-to-each-other.md\":\"BflT5ugJ\",\"docs_adr_0007-how-humans-take-part-in-the-pipeline.md\":\"CNX3gUD-\",\"docs_adr_0008-where-a-steps-reviewers-run.md\":\"aGbaBOpB\",\"docs_adr_0009-where-pipeline-state-and-handoffs-live.md\":\"C3tKmV-E\",\"docs_adr_0010-how-a-project-adapts-the-core.md\":\"Bp7N6tUE\",\"docs_adr_0011-how-the-factory-is-packaged-and-versioned.md\":\"BBJIwnqa\",\"docs_adr_0012-how-a-steps-failures-are-told-apart-and-routed.md\":\"uCyrBfug\",\"docs_adr_0013-when-code-lands.md\":\"oXgiobfz\",\"docs_adr_0014-what-a-step-may-change.md\":\"Zslg3bnJ\",\"docs_adr_0015-how-a-project-shapes-its-ticket-flow.md\":\"DNHMxwIT\",\"docs_adr_0016-which-core-the-factory-repo-runs.md\":\"CLN6LqBZ\",\"docs_adr_0017-where-a-tickets-record-lives.md\":\"jjUeM-ex\",\"docs_adr_0018-the-products-name.md\":\"6xaX9vDs\",\"docs_adr_0019-how-a-finding-is-answered-and-judged.md\":\"CKKoO9-3\",\"docs_adr_0020-how-an-interrupted-run-resumes.md\":\"DTIP-MBK\",\"docs_adr_0021-how-a-step-runs-in-its-workspace.md\":\"B2r3-FPg\",\"docs_adr_0022-who-names-the-branches.md\":\"DaVk8X0i\",\"docs_adr_0023-how-a-version-ships-before-npm.md\":\"C7-wuCbq\",\"docs_adr_0024-how-the-config-type-carries-its-docs.md\":\"CQmwhWXs\",\"docs_adr_0025-how-a-steps-handoff-is-written-and-checked.md\":\"CgXYdF2v\",\"docs_adr_0026-support-for-github-copilot.md\":\"DJsawm-R\",\"docs_adr_0027-which-forge-a-project-is-on.md\":\"CY0qy9xh\",\"docs_adr_0028-several-ticket-flows-in-one-pipeline.md\":\"oxffo2qg\",\"docs_adr_0029-the-branch-a-feature-works-on.md\":\"CrgkP6YJ\",\"docs_adr_0030-a-runner-without-coder.md\":\"CW8sF7jK\",\"docs_adr_0031-how-the-run-viewer-reads-its-runs.md\":\"opQYnVF2\",\"docs_adr_0032-how-a-project-gets-the-viewer.md\":\"DB9NjYJf\",\"docs_adr_0033-the-repos-license.md\":\"NPlkrPj8\",\"docs_adr_0034-how-code-review-launches-its-reviewers.md\":\"DSNpkfaL\",\"docs_adr_0035-how-the-package-is-published.md\":\"C1f4B5eb\",\"docs_adr_0036-what-the-cores-pull-request-skill-does.md\":\"op39HLAT\",\"docs_adr_0037-how-a-team-reads-the-factorys-documentation.md\":\"Dar_Xo4t\",\"docs_adr_0038-where-adapters-live.md\":\"CkVD3riv\",\"docs_adr_0039-the-repos-license.md\":\"C_rraWpb\",\"docs_adr_0040-how-a-version-is-released.md\":\"CCdwC07z\",\"docs_adr_0041-who-opens-the-features-pull-request.md\":\"qLu9WLaG\",\"docs_adr_0042-how-secrets-are-kept-out-of-committed-records.md\":\"DJWazI4H\",\"docs_getting-started.md\":\"BpQFS8Gr\",\"docs_github.md\":\"D4gkW71G\",\"docs_overlay.md\":\"DoWVb6OM\",\"docs_pipeline.md\":\"DdHywWSk\",\"docs_recipes.md\":\"8Xf6BsRA\",\"fixtures_readme.md\":\"DzbQ0hft\",\"index.md\":\"DHgL6CzS\",\"packages_docs_readme.md\":\"PV1a27nC\",\"packages_viewer_readme.md\":\"BynKZSdN\"}");window.__VP_SITE_DATA__=JSON.parse("{\"lang\":\"en-US\",\"dir\":\"ltr\",\"title\":\"Bernard the taktician\",\"description\":\"An agentic factory for new builds and legacy migrations.\",\"base\":\"/docs/\",\"head\":[],\"router\":{\"prefetchLinks\":true},\"appearance\":true,\"themeConfig\":{\"logo\":\"/bernard.svg\",\"siteTitle\":\"Bernard\",\"outline\":[2,3],\"search\":{\"provider\":\"local\"},\"nav\":[{\"text\":\"Guides\",\"link\":\"/docs/getting-started\"},{\"text\":\"Contributing\",\"link\":\"/CONTRIBUTING\"},{\"text\":\"Decisions\",\"link\":\"/docs/adr/0001-what-the-core-is-built-for\"}],\"sidebar\":[{\"text\":\"Bernard\",\"collapsed\":false,\"items\":[{\"text\":\"Overview\",\"link\":\"/\"},{\"text\":\"Vocabulary\",\"link\":\"/CONTEXT\"}]},{\"text\":\"Guides\",\"collapsed\":false,\"items\":[{\"text\":\"Getting started\",\"link\":\"/docs/getting-started\"},{\"text\":\"The overlay\",\"link\":\"/docs/overlay\"},{\"text\":\"Recipes\",\"link\":\"/docs/recipes\"},{\"text\":\"Pipeline\",\"link\":\"/docs/pipeline\"}]},{\"text\":\"Contributing\",\"collapsed\":false,\"items\":[{\"text\":\"Contributing\",\"link\":\"/CONTRIBUTING\"},{\"text\":\"Rules for agents\",\"link\":\"/CLAUDE\"},{\"text\":\"GitHub\",\"link\":\"/docs/github\"},{\"text\":\"Core content\",\"link\":\"/core/README\"},{\"text\":\"Run viewer\",\"link\":\"/packages/viewer/README\"},{\"text\":\"Documentation site\",\"link\":\"/packages/docs/README\"},{\"text\":\"Fixtures\",\"link\":\"/fixtures/README\"},{\"text\":\"Demo\",\"link\":\"/demo/README\"}]},{\"text\":\"Decisions\",\"collapsed\":true,\"items\":[{\"text\":\"0001 · What the core is built for\",\"link\":\"/docs/adr/0001-what-the-core-is-built-for\"},{\"text\":\"0002 · Which harness a project runs on\",\"link\":\"/docs/adr/0002-which-harness-a-project-runs-on\"},{\"text\":\"0003 · How core content reaches each harness\",\"link\":\"/docs/adr/0003-how-core-content-reaches-each-harness\"},{\"text\":\"0004 · How the core uses external tools\",\"link\":\"/docs/adr/0004-how-the-core-uses-external-tools\"},{\"text\":\"0005 · What drives the pipeline\",\"link\":\"/docs/adr/0005-what-drives-the-pipeline\"},{\"text\":\"0006 · What steps hand off to each other\",\"link\":\"/docs/adr/0006-what-steps-hand-off-to-each-other\"},{\"text\":\"0007 · How humans take part in the pipeline\",\"link\":\"/docs/adr/0007-how-humans-take-part-in-the-pipeline\"},{\"text\":\"0008 · Where a step's reviewers run\",\"link\":\"/docs/adr/0008-where-a-steps-reviewers-run\"},{\"text\":\"0009 · Where pipeline state and handoffs live\",\"link\":\"/docs/adr/0009-where-pipeline-state-and-handoffs-live\"},{\"text\":\"0010 · How a project adapts the core\",\"link\":\"/docs/adr/0010-how-a-project-adapts-the-core\"},{\"text\":\"0011 · How the factory is packaged and versioned\",\"link\":\"/docs/adr/0011-how-the-factory-is-packaged-and-versioned\"},{\"text\":\"0012 · How a step's failures are told apart and routed\",\"link\":\"/docs/adr/0012-how-a-steps-failures-are-told-apart-and-routed\"},{\"text\":\"0013 · When code lands\",\"link\":\"/docs/adr/0013-when-code-lands\"},{\"text\":\"0014 · What a step may change\",\"link\":\"/docs/adr/0014-what-a-step-may-change\"},{\"text\":\"0015 · How a project shapes its ticket flow\",\"link\":\"/docs/adr/0015-how-a-project-shapes-its-ticket-flow\"},{\"text\":\"0016 · Which core the factory repo runs\",\"link\":\"/docs/adr/0016-which-core-the-factory-repo-runs\"},{\"text\":\"0017 · Where a ticket's record lives\",\"link\":\"/docs/adr/0017-where-a-tickets-record-lives\"},{\"text\":\"0018 · The product's name\",\"link\":\"/docs/adr/0018-the-products-name\"},{\"text\":\"0019 · How a finding is answered and judged\",\"link\":\"/docs/adr/0019-how-a-finding-is-answered-and-judged\"},{\"text\":\"0020 · How an interrupted run resumes\",\"link\":\"/docs/adr/0020-how-an-interrupted-run-resumes\"},{\"text\":\"0021 · How a step runs in its workspace\",\"link\":\"/docs/adr/0021-how-a-step-runs-in-its-workspace\"},{\"text\":\"0022 · Who names the branches\",\"link\":\"/docs/adr/0022-who-names-the-branches\"},{\"text\":\"0023 · How a version ships before npm\",\"link\":\"/docs/adr/0023-how-a-version-ships-before-npm\"},{\"text\":\"0024 · How the config type carries its docs\",\"link\":\"/docs/adr/0024-how-the-config-type-carries-its-docs\"},{\"text\":\"0025 · How a step's handoff is written and checked\",\"link\":\"/docs/adr/0025-how-a-steps-handoff-is-written-and-checked\"},{\"text\":\"0026 · Support for GitHub Copilot\",\"link\":\"/docs/adr/0026-support-for-github-copilot\"},{\"text\":\"0027 · Which forge a project is on\",\"link\":\"/docs/adr/0027-which-forge-a-project-is-on\"},{\"text\":\"0028 · Several ticket flows in one pipeline\",\"link\":\"/docs/adr/0028-several-ticket-flows-in-one-pipeline\"},{\"text\":\"0029 · The branch a feature works on\",\"link\":\"/docs/adr/0029-the-branch-a-feature-works-on\"},{\"text\":\"0030 · A runner without Coder\",\"link\":\"/docs/adr/0030-a-runner-without-coder\"},{\"text\":\"0031 · How the run viewer reads its runs\",\"link\":\"/docs/adr/0031-how-the-run-viewer-reads-its-runs\"},{\"text\":\"0032 · How a project gets the viewer\",\"link\":\"/docs/adr/0032-how-a-project-gets-the-viewer\"},{\"text\":\"0033 · The repo's license\",\"link\":\"/docs/adr/0033-the-repos-license\"},{\"text\":\"0034 · How code review launches its reviewers\",\"link\":\"/docs/adr/0034-how-code-review-launches-its-reviewers\"},{\"text\":\"0035 · How the package is published\",\"link\":\"/docs/adr/0035-how-the-package-is-published\"},{\"text\":\"0036 · What the core's pull-request skill does\",\"link\":\"/docs/adr/0036-what-the-cores-pull-request-skill-does\"},{\"text\":\"0037 · How a team reads the factory's documentation\",\"link\":\"/docs/adr/0037-how-a-team-reads-the-factorys-documentation\"},{\"text\":\"0038 · Where adapters live\",\"link\":\"/docs/adr/0038-where-adapters-live\"},{\"text\":\"0039 · The repo's license\",\"link\":\"/docs/adr/0039-the-repos-license\"},{\"text\":\"0040 · How a version is released\",\"link\":\"/docs/adr/0040-how-a-version-is-released\"},{\"text\":\"0041 · Who opens the feature's pull request, and how a ticket reaches it\",\"link\":\"/docs/adr/0041-who-opens-the-features-pull-request\"},{\"text\":\"0042 · How secrets are kept out of committed records\",\"link\":\"/docs/adr/0042-how-secrets-are-kept-out-of-committed-records\"}]}],\"editLink\":{\"pattern\":\"https://github.com/theodo-group/bernard/edit/main/:path\",\"text\":\"Edit this page on GitHub\"}},\"locales\":{},\"scrollOffset\":134,\"cleanUrls\":false}");</script>
|
|
28
|
+
|
|
29
|
+
</body>
|
|
30
|
+
</html>
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
<!DOCTYPE html>
|
|
2
|
+
<html lang="en-US" dir="ltr">
|
|
3
|
+
<head>
|
|
4
|
+
<meta charset="utf-8">
|
|
5
|
+
<meta name="viewport" content="width=device-width,initial-scale=1">
|
|
6
|
+
<title>How a project shapes its ticket flow | Bernard the taktician</title>
|
|
7
|
+
<meta name="description" content="An agentic factory for new builds and legacy migrations.">
|
|
8
|
+
<meta name="generator" content="VitePress v1.6.4">
|
|
9
|
+
<link rel="preload stylesheet" href="/docs/assets/style.C3E8Ltp6.css" as="style">
|
|
10
|
+
<link rel="preload stylesheet" href="/docs/vp-icons.css" as="style">
|
|
11
|
+
|
|
12
|
+
<script type="module" src="/docs/assets/app.URmpjWHb.js"></script>
|
|
13
|
+
<link rel="preload" href="/docs/assets/inter-roman-latin.Di8DUHzh.woff2" as="font" type="font/woff2" crossorigin="">
|
|
14
|
+
<link rel="modulepreload" href="/docs/assets/chunks/framework.hgjl6W6o.js">
|
|
15
|
+
<link rel="modulepreload" href="/docs/assets/chunks/theme.Cksh_UJH.js">
|
|
16
|
+
<link rel="modulepreload" href="/docs/assets/chunks/sizeCapture-INFHLROL.BEqL2zFi.js">
|
|
17
|
+
<link rel="modulepreload" href="/docs/assets/chunks/dagre-GXQ25YYZ.2qvw8AqH.js">
|
|
18
|
+
<link rel="modulepreload" href="/docs/assets/chunks/stateDiagram-v2-MP3YSRHH.3X7wNXKX.js">
|
|
19
|
+
<link rel="modulepreload" href="/docs/assets/chunks/virtual_mermaid-config.DDnGl6nM.js">
|
|
20
|
+
<link rel="modulepreload" href="/docs/assets/docs_adr_0015-how-a-project-shapes-its-ticket-flow.md.DNHMxwIT.lean.js">
|
|
21
|
+
<link rel="icon" href="/docs/bernard.svg" type="image/svg+xml">
|
|
22
|
+
<script id="check-dark-mode">(()=>{const e=localStorage.getItem("vitepress-theme-appearance")||"auto",a=window.matchMedia("(prefers-color-scheme: dark)").matches;(!e||e==="auto"?a:e==="dark")&&document.documentElement.classList.add("dark")})();</script>
|
|
23
|
+
<script id="check-mac-os">document.documentElement.classList.toggle("mac",/Mac|iPhone|iPod|iPad/i.test(navigator.platform));</script>
|
|
24
|
+
</head>
|
|
25
|
+
<body>
|
|
26
|
+
<div id="app"><div class="Layout" data-v-f87bd3ac><!--[--><!--]--><!--[--><span tabindex="-1" data-v-26966a6b></span><a href="#VPContent" class="VPSkipLink visually-hidden" data-v-26966a6b>Skip to content</a><!--]--><!----><header class="VPNav" data-v-f87bd3ac data-v-a776a728><div class="VPNavBar" data-v-a776a728 data-v-257d37ee><div class="wrapper" data-v-257d37ee><div class="container" data-v-257d37ee><div class="title" data-v-257d37ee><div class="VPNavBarTitle has-sidebar" data-v-257d37ee data-v-1b9c14bd><a class="title" href="/docs/" data-v-1b9c14bd><!--[--><!--]--><!--[--><img class="VPImage logo" src="/docs/bernard.svg" alt data-v-4a9aa8e2><!--]--><span data-v-1b9c14bd>Bernard</span><!--[--><!--]--></a></div></div><div class="content" data-v-257d37ee><div class="content-body" data-v-257d37ee><!--[--><!--]--><div class="VPNavBarSearch search" data-v-257d37ee><!--[--><!----><div id="local-search"><button type="button" class="DocSearch DocSearch-Button" aria-label="Search"><span class="DocSearch-Button-Container"><span class="vp-icon DocSearch-Search-Icon"></span><span class="DocSearch-Button-Placeholder">Search</span></span><span class="DocSearch-Button-Keys"><kbd class="DocSearch-Button-Key"></kbd><kbd class="DocSearch-Button-Key">K</kbd></span></button></div><!--]--></div><nav aria-labelledby="main-nav-aria-label" class="VPNavBarMenu menu" data-v-257d37ee data-v-96ed2429><span id="main-nav-aria-label" class="visually-hidden" data-v-96ed2429> Main Navigation </span><!--[--><!--[--><a class="VPLink link VPNavBarMenuLink" href="/docs/docs/getting-started.html" tabindex="0" data-v-96ed2429 data-v-c21a295c><!--[--><span data-v-c21a295c>Guides</span><!--]--></a><!--]--><!--[--><a class="VPLink link VPNavBarMenuLink" href="/docs/CONTRIBUTING.html" tabindex="0" data-v-96ed2429 data-v-c21a295c><!--[--><span data-v-c21a295c>Contributing</span><!--]--></a><!--]--><!--[--><a class="VPLink link VPNavBarMenuLink" href="/docs/docs/adr/0001-what-the-core-is-built-for.html" tabindex="0" data-v-96ed2429 data-v-c21a295c><!--[--><span data-v-c21a295c>Decisions</span><!--]--></a><!--]--><!--]--></nav><!----><div class="VPNavBarAppearance appearance" data-v-257d37ee data-v-772a648f><button class="VPSwitch VPSwitchAppearance" type="button" role="switch" title aria-checked="false" data-v-772a648f data-v-32dadf2f data-v-033bec8f><span class="check" data-v-033bec8f><span class="icon" data-v-033bec8f><!--[--><span class="vpi-sun sun" data-v-32dadf2f></span><span class="vpi-moon moon" data-v-32dadf2f></span><!--]--></span></span></button></div><!----><div class="VPFlyout VPNavBarExtra extra" data-v-257d37ee data-v-6a77a12d data-v-6ff730e4><button type="button" class="button" aria-haspopup="true" aria-expanded="false" aria-label="extra navigation" data-v-6ff730e4><span class="vpi-more-horizontal icon" data-v-6ff730e4></span></button><div class="menu" data-v-6ff730e4><div class="VPMenu" data-v-6ff730e4 data-v-7e1ab185><!----><!--[--><!--[--><!----><div class="group" data-v-6a77a12d><div class="item appearance" data-v-6a77a12d><p class="label" data-v-6a77a12d>Appearance</p><div class="appearance-action" data-v-6a77a12d><button class="VPSwitch VPSwitchAppearance" type="button" role="switch" title aria-checked="false" data-v-6a77a12d data-v-32dadf2f data-v-033bec8f><span class="check" data-v-033bec8f><span class="icon" data-v-033bec8f><!--[--><span class="vpi-sun sun" data-v-32dadf2f></span><span class="vpi-moon moon" data-v-32dadf2f></span><!--]--></span></span></button></div></div></div><!----><!--]--><!--]--></div></div></div><!--[--><!--[--><!--[--><a class="viewer-switch" href="/">Run viewer</a><!--]--><!--]--><!--]--><button type="button" class="VPNavBarHamburger hamburger" aria-label="mobile navigation" aria-expanded="false" aria-controls="VPNavScreen" data-v-257d37ee data-v-33d7d0d7><span class="container" data-v-33d7d0d7><span class="top" data-v-33d7d0d7></span><span class="middle" data-v-33d7d0d7></span><span class="bottom" data-v-33d7d0d7></span></span></button></div></div></div></div><div class="divider" data-v-257d37ee><div class="divider-line" data-v-257d37ee></div></div></div><!----></header><div class="VPLocalNav has-sidebar empty" data-v-f87bd3ac data-v-c5f097a9><div class="container" data-v-c5f097a9><button class="menu" aria-expanded="false" aria-controls="VPSidebarNav" data-v-c5f097a9><span class="vpi-align-left menu-icon" data-v-c5f097a9></span><span class="menu-text" data-v-c5f097a9>Menu</span></button><div class="VPLocalNavOutlineDropdown" style="--vp-vh:0px;" data-v-c5f097a9 data-v-cb88d934><button data-v-cb88d934>Return to top</button><!----></div></div></div><aside class="VPSidebar" data-v-f87bd3ac data-v-979e8f18><div class="curtain" data-v-979e8f18></div><nav class="nav" id="VPSidebarNav" aria-labelledby="sidebar-aria-label" tabindex="-1" data-v-979e8f18><span class="visually-hidden" id="sidebar-aria-label" data-v-979e8f18> Sidebar Navigation </span><!--[--><!--]--><!--[--><div class="no-transition group" data-v-b9208f43><section class="VPSidebarItem level-0 collapsible" data-v-b9208f43 data-v-0b328883><div class="item" role="button" tabindex="0" data-v-0b328883><div class="indicator" data-v-0b328883></div><h2 class="text" data-v-0b328883>Bernard</h2><div class="caret" role="button" aria-label="toggle section" tabindex="0" data-v-0b328883><span class="vpi-chevron-right caret-icon" data-v-0b328883></span></div></div><div class="items" data-v-0b328883><!--[--><div class="VPSidebarItem level-1 is-link" data-v-0b328883><div class="item" data-v-0b328883><div class="indicator" data-v-0b328883></div><a class="VPLink link link" href="/docs/" data-v-0b328883><!--[--><p class="text" data-v-0b328883>Overview</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-0b328883><div class="item" data-v-0b328883><div class="indicator" data-v-0b328883></div><a class="VPLink link link" href="/docs/CONTEXT.html" data-v-0b328883><!--[--><p class="text" data-v-0b328883>Vocabulary</p><!--]--></a><!----></div><!----></div><!--]--></div></section></div><div class="no-transition group" data-v-b9208f43><section class="VPSidebarItem level-0 collapsible" data-v-b9208f43 data-v-0b328883><div class="item" role="button" tabindex="0" data-v-0b328883><div class="indicator" data-v-0b328883></div><h2 class="text" data-v-0b328883>Guides</h2><div class="caret" role="button" aria-label="toggle section" tabindex="0" data-v-0b328883><span class="vpi-chevron-right caret-icon" data-v-0b328883></span></div></div><div class="items" data-v-0b328883><!--[--><div class="VPSidebarItem level-1 is-link" data-v-0b328883><div class="item" data-v-0b328883><div class="indicator" data-v-0b328883></div><a class="VPLink link link" href="/docs/docs/getting-started.html" data-v-0b328883><!--[--><p class="text" data-v-0b328883>Getting started</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-0b328883><div class="item" data-v-0b328883><div class="indicator" data-v-0b328883></div><a class="VPLink link link" href="/docs/docs/overlay.html" data-v-0b328883><!--[--><p class="text" data-v-0b328883>The overlay</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-0b328883><div class="item" data-v-0b328883><div class="indicator" data-v-0b328883></div><a class="VPLink link link" href="/docs/docs/recipes.html" data-v-0b328883><!--[--><p class="text" data-v-0b328883>Recipes</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-0b328883><div class="item" data-v-0b328883><div class="indicator" data-v-0b328883></div><a class="VPLink link link" href="/docs/docs/pipeline.html" data-v-0b328883><!--[--><p class="text" data-v-0b328883>Pipeline</p><!--]--></a><!----></div><!----></div><!--]--></div></section></div><div class="no-transition group" data-v-b9208f43><section class="VPSidebarItem level-0 collapsible" data-v-b9208f43 data-v-0b328883><div class="item" role="button" tabindex="0" data-v-0b328883><div class="indicator" data-v-0b328883></div><h2 class="text" data-v-0b328883>Contributing</h2><div class="caret" role="button" aria-label="toggle section" tabindex="0" data-v-0b328883><span class="vpi-chevron-right caret-icon" data-v-0b328883></span></div></div><div class="items" data-v-0b328883><!--[--><div class="VPSidebarItem level-1 is-link" data-v-0b328883><div class="item" data-v-0b328883><div class="indicator" data-v-0b328883></div><a class="VPLink link link" href="/docs/CONTRIBUTING.html" data-v-0b328883><!--[--><p class="text" data-v-0b328883>Contributing</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-0b328883><div class="item" data-v-0b328883><div class="indicator" data-v-0b328883></div><a class="VPLink link link" href="/docs/CLAUDE.html" data-v-0b328883><!--[--><p class="text" data-v-0b328883>Rules for agents</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-0b328883><div class="item" data-v-0b328883><div class="indicator" data-v-0b328883></div><a class="VPLink link link" href="/docs/docs/github.html" data-v-0b328883><!--[--><p class="text" data-v-0b328883>GitHub</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-0b328883><div class="item" data-v-0b328883><div class="indicator" data-v-0b328883></div><a class="VPLink link link" href="/docs/core/README.html" data-v-0b328883><!--[--><p class="text" data-v-0b328883>Core content</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-0b328883><div class="item" data-v-0b328883><div class="indicator" data-v-0b328883></div><a class="VPLink link link" href="/docs/packages/viewer/README.html" data-v-0b328883><!--[--><p class="text" data-v-0b328883>Run viewer</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-0b328883><div class="item" data-v-0b328883><div class="indicator" data-v-0b328883></div><a class="VPLink link link" href="/docs/packages/docs/README.html" data-v-0b328883><!--[--><p class="text" data-v-0b328883>Documentation site</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-0b328883><div class="item" data-v-0b328883><div class="indicator" data-v-0b328883></div><a class="VPLink link link" href="/docs/fixtures/README.html" data-v-0b328883><!--[--><p class="text" data-v-0b328883>Fixtures</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-0b328883><div class="item" data-v-0b328883><div class="indicator" data-v-0b328883></div><a class="VPLink link link" href="/docs/demo/README.html" data-v-0b328883><!--[--><p class="text" data-v-0b328883>Demo</p><!--]--></a><!----></div><!----></div><!--]--></div></section></div><div class="no-transition group" data-v-b9208f43><section class="VPSidebarItem level-0 collapsible collapsed has-active" data-v-b9208f43 data-v-0b328883><div class="item" role="button" tabindex="0" data-v-0b328883><div class="indicator" data-v-0b328883></div><h2 class="text" data-v-0b328883>Decisions</h2><div class="caret" role="button" aria-label="toggle section" tabindex="0" data-v-0b328883><span class="vpi-chevron-right caret-icon" data-v-0b328883></span></div></div><div class="items" data-v-0b328883><!--[--><div class="VPSidebarItem level-1 is-link" data-v-0b328883><div class="item" data-v-0b328883><div class="indicator" data-v-0b328883></div><a class="VPLink link link" href="/docs/docs/adr/0001-what-the-core-is-built-for.html" data-v-0b328883><!--[--><p class="text" data-v-0b328883>0001 · What the core is built for</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-0b328883><div class="item" data-v-0b328883><div class="indicator" data-v-0b328883></div><a class="VPLink link link" href="/docs/docs/adr/0002-which-harness-a-project-runs-on.html" data-v-0b328883><!--[--><p class="text" data-v-0b328883>0002 · Which harness a project runs on</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-0b328883><div class="item" data-v-0b328883><div class="indicator" data-v-0b328883></div><a class="VPLink link link" href="/docs/docs/adr/0003-how-core-content-reaches-each-harness.html" data-v-0b328883><!--[--><p class="text" data-v-0b328883>0003 · How core content reaches each harness</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-0b328883><div class="item" data-v-0b328883><div class="indicator" data-v-0b328883></div><a class="VPLink link link" href="/docs/docs/adr/0004-how-the-core-uses-external-tools.html" data-v-0b328883><!--[--><p class="text" data-v-0b328883>0004 · How the core uses external tools</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-0b328883><div class="item" data-v-0b328883><div class="indicator" data-v-0b328883></div><a class="VPLink link link" href="/docs/docs/adr/0005-what-drives-the-pipeline.html" data-v-0b328883><!--[--><p class="text" data-v-0b328883>0005 · What drives the pipeline</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-0b328883><div class="item" data-v-0b328883><div class="indicator" data-v-0b328883></div><a class="VPLink link link" href="/docs/docs/adr/0006-what-steps-hand-off-to-each-other.html" data-v-0b328883><!--[--><p class="text" data-v-0b328883>0006 · What steps hand off to each other</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-0b328883><div class="item" data-v-0b328883><div class="indicator" data-v-0b328883></div><a class="VPLink link link" href="/docs/docs/adr/0007-how-humans-take-part-in-the-pipeline.html" data-v-0b328883><!--[--><p class="text" data-v-0b328883>0007 · How humans take part in the pipeline</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-0b328883><div class="item" data-v-0b328883><div class="indicator" data-v-0b328883></div><a class="VPLink link link" href="/docs/docs/adr/0008-where-a-steps-reviewers-run.html" data-v-0b328883><!--[--><p class="text" data-v-0b328883>0008 · Where a step's reviewers run</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-0b328883><div class="item" data-v-0b328883><div class="indicator" data-v-0b328883></div><a class="VPLink link link" href="/docs/docs/adr/0009-where-pipeline-state-and-handoffs-live.html" data-v-0b328883><!--[--><p class="text" data-v-0b328883>0009 · Where pipeline state and handoffs live</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-0b328883><div class="item" data-v-0b328883><div class="indicator" data-v-0b328883></div><a class="VPLink link link" href="/docs/docs/adr/0010-how-a-project-adapts-the-core.html" data-v-0b328883><!--[--><p class="text" data-v-0b328883>0010 · How a project adapts the core</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-0b328883><div class="item" data-v-0b328883><div class="indicator" data-v-0b328883></div><a class="VPLink link link" href="/docs/docs/adr/0011-how-the-factory-is-packaged-and-versioned.html" data-v-0b328883><!--[--><p class="text" data-v-0b328883>0011 · How the factory is packaged and versioned</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-0b328883><div class="item" data-v-0b328883><div class="indicator" data-v-0b328883></div><a class="VPLink link link" href="/docs/docs/adr/0012-how-a-steps-failures-are-told-apart-and-routed.html" data-v-0b328883><!--[--><p class="text" data-v-0b328883>0012 · How a step's failures are told apart and routed</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-0b328883><div class="item" data-v-0b328883><div class="indicator" data-v-0b328883></div><a class="VPLink link link" href="/docs/docs/adr/0013-when-code-lands.html" data-v-0b328883><!--[--><p class="text" data-v-0b328883>0013 · When code lands</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-0b328883><div class="item" data-v-0b328883><div class="indicator" data-v-0b328883></div><a class="VPLink link link" href="/docs/docs/adr/0014-what-a-step-may-change.html" data-v-0b328883><!--[--><p class="text" data-v-0b328883>0014 · What a step may change</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-0b328883><div class="item" data-v-0b328883><div class="indicator" data-v-0b328883></div><a class="VPLink link link" href="/docs/docs/adr/0015-how-a-project-shapes-its-ticket-flow.html" data-v-0b328883><!--[--><p class="text" data-v-0b328883>0015 · How a project shapes its ticket flow</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-0b328883><div class="item" data-v-0b328883><div class="indicator" data-v-0b328883></div><a class="VPLink link link" href="/docs/docs/adr/0016-which-core-the-factory-repo-runs.html" data-v-0b328883><!--[--><p class="text" data-v-0b328883>0016 · Which core the factory repo runs</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-0b328883><div class="item" data-v-0b328883><div class="indicator" data-v-0b328883></div><a class="VPLink link link" href="/docs/docs/adr/0017-where-a-tickets-record-lives.html" data-v-0b328883><!--[--><p class="text" data-v-0b328883>0017 · Where a ticket's record lives</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-0b328883><div class="item" data-v-0b328883><div class="indicator" data-v-0b328883></div><a class="VPLink link link" href="/docs/docs/adr/0018-the-products-name.html" data-v-0b328883><!--[--><p class="text" data-v-0b328883>0018 · The product's name</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-0b328883><div class="item" data-v-0b328883><div class="indicator" data-v-0b328883></div><a class="VPLink link link" href="/docs/docs/adr/0019-how-a-finding-is-answered-and-judged.html" data-v-0b328883><!--[--><p class="text" data-v-0b328883>0019 · How a finding is answered and judged</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-0b328883><div class="item" data-v-0b328883><div class="indicator" data-v-0b328883></div><a class="VPLink link link" href="/docs/docs/adr/0020-how-an-interrupted-run-resumes.html" data-v-0b328883><!--[--><p class="text" data-v-0b328883>0020 · How an interrupted run resumes</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-0b328883><div class="item" data-v-0b328883><div class="indicator" data-v-0b328883></div><a class="VPLink link link" href="/docs/docs/adr/0021-how-a-step-runs-in-its-workspace.html" data-v-0b328883><!--[--><p class="text" data-v-0b328883>0021 · How a step runs in its workspace</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-0b328883><div class="item" data-v-0b328883><div class="indicator" data-v-0b328883></div><a class="VPLink link link" href="/docs/docs/adr/0022-who-names-the-branches.html" data-v-0b328883><!--[--><p class="text" data-v-0b328883>0022 · Who names the branches</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-0b328883><div class="item" data-v-0b328883><div class="indicator" data-v-0b328883></div><a class="VPLink link link" href="/docs/docs/adr/0023-how-a-version-ships-before-npm.html" data-v-0b328883><!--[--><p class="text" data-v-0b328883>0023 · How a version ships before npm</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-0b328883><div class="item" data-v-0b328883><div class="indicator" data-v-0b328883></div><a class="VPLink link link" href="/docs/docs/adr/0024-how-the-config-type-carries-its-docs.html" data-v-0b328883><!--[--><p class="text" data-v-0b328883>0024 · How the config type carries its docs</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-0b328883><div class="item" data-v-0b328883><div class="indicator" data-v-0b328883></div><a class="VPLink link link" href="/docs/docs/adr/0025-how-a-steps-handoff-is-written-and-checked.html" data-v-0b328883><!--[--><p class="text" data-v-0b328883>0025 · How a step's handoff is written and checked</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-0b328883><div class="item" data-v-0b328883><div class="indicator" data-v-0b328883></div><a class="VPLink link link" href="/docs/docs/adr/0026-support-for-github-copilot.html" data-v-0b328883><!--[--><p class="text" data-v-0b328883>0026 · Support for GitHub Copilot</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-0b328883><div class="item" data-v-0b328883><div class="indicator" data-v-0b328883></div><a class="VPLink link link" href="/docs/docs/adr/0027-which-forge-a-project-is-on.html" data-v-0b328883><!--[--><p class="text" data-v-0b328883>0027 · Which forge a project is on</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-0b328883><div class="item" data-v-0b328883><div class="indicator" data-v-0b328883></div><a class="VPLink link link" href="/docs/docs/adr/0028-several-ticket-flows-in-one-pipeline.html" data-v-0b328883><!--[--><p class="text" data-v-0b328883>0028 · Several ticket flows in one pipeline</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-0b328883><div class="item" data-v-0b328883><div class="indicator" data-v-0b328883></div><a class="VPLink link link" href="/docs/docs/adr/0029-the-branch-a-feature-works-on.html" data-v-0b328883><!--[--><p class="text" data-v-0b328883>0029 · The branch a feature works on</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-0b328883><div class="item" data-v-0b328883><div class="indicator" data-v-0b328883></div><a class="VPLink link link" href="/docs/docs/adr/0030-a-runner-without-coder.html" data-v-0b328883><!--[--><p class="text" data-v-0b328883>0030 · A runner without Coder</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-0b328883><div class="item" data-v-0b328883><div class="indicator" data-v-0b328883></div><a class="VPLink link link" href="/docs/docs/adr/0031-how-the-run-viewer-reads-its-runs.html" data-v-0b328883><!--[--><p class="text" data-v-0b328883>0031 · How the run viewer reads its runs</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-0b328883><div class="item" data-v-0b328883><div class="indicator" data-v-0b328883></div><a class="VPLink link link" href="/docs/docs/adr/0032-how-a-project-gets-the-viewer.html" data-v-0b328883><!--[--><p class="text" data-v-0b328883>0032 · How a project gets the viewer</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-0b328883><div class="item" data-v-0b328883><div class="indicator" data-v-0b328883></div><a class="VPLink link link" href="/docs/docs/adr/0033-the-repos-license.html" data-v-0b328883><!--[--><p class="text" data-v-0b328883>0033 · The repo's license</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-0b328883><div class="item" data-v-0b328883><div class="indicator" data-v-0b328883></div><a class="VPLink link link" href="/docs/docs/adr/0034-how-code-review-launches-its-reviewers.html" data-v-0b328883><!--[--><p class="text" data-v-0b328883>0034 · How code review launches its reviewers</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-0b328883><div class="item" data-v-0b328883><div class="indicator" data-v-0b328883></div><a class="VPLink link link" href="/docs/docs/adr/0035-how-the-package-is-published.html" data-v-0b328883><!--[--><p class="text" data-v-0b328883>0035 · How the package is published</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-0b328883><div class="item" data-v-0b328883><div class="indicator" data-v-0b328883></div><a class="VPLink link link" href="/docs/docs/adr/0036-what-the-cores-pull-request-skill-does.html" data-v-0b328883><!--[--><p class="text" data-v-0b328883>0036 · What the core's pull-request skill does</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-0b328883><div class="item" data-v-0b328883><div class="indicator" data-v-0b328883></div><a class="VPLink link link" href="/docs/docs/adr/0037-how-a-team-reads-the-factorys-documentation.html" data-v-0b328883><!--[--><p class="text" data-v-0b328883>0037 · How a team reads the factory's documentation</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-0b328883><div class="item" data-v-0b328883><div class="indicator" data-v-0b328883></div><a class="VPLink link link" href="/docs/docs/adr/0038-where-adapters-live.html" data-v-0b328883><!--[--><p class="text" data-v-0b328883>0038 · Where adapters live</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-0b328883><div class="item" data-v-0b328883><div class="indicator" data-v-0b328883></div><a class="VPLink link link" href="/docs/docs/adr/0039-the-repos-license.html" data-v-0b328883><!--[--><p class="text" data-v-0b328883>0039 · The repo's license</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-0b328883><div class="item" data-v-0b328883><div class="indicator" data-v-0b328883></div><a class="VPLink link link" href="/docs/docs/adr/0040-how-a-version-is-released.html" data-v-0b328883><!--[--><p class="text" data-v-0b328883>0040 · How a version is released</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-0b328883><div class="item" data-v-0b328883><div class="indicator" data-v-0b328883></div><a class="VPLink link link" href="/docs/docs/adr/0041-who-opens-the-features-pull-request.html" data-v-0b328883><!--[--><p class="text" data-v-0b328883>0041 · Who opens the feature's pull request, and how a ticket reaches it</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-0b328883><div class="item" data-v-0b328883><div class="indicator" data-v-0b328883></div><a class="VPLink link link" href="/docs/docs/adr/0042-how-secrets-are-kept-out-of-committed-records.html" data-v-0b328883><!--[--><p class="text" data-v-0b328883>0042 · How secrets are kept out of committed records</p><!--]--></a><!----></div><!----></div><!--]--></div></section></div><!--]--><!--[--><!--]--></nav></aside><div class="VPContent has-sidebar" id="VPContent" data-v-f87bd3ac data-v-67e000d0><div class="VPDoc has-sidebar has-aside" data-v-67e000d0 data-v-f8622dbf><!--[--><!--]--><div class="container" data-v-f8622dbf><div class="aside" data-v-f8622dbf><div class="aside-curtain" data-v-f8622dbf></div><div class="aside-container" data-v-f8622dbf><div class="aside-content" data-v-f8622dbf><div class="VPDocAside" data-v-f8622dbf data-v-fc01c646><!--[--><!--]--><!--[--><!--]--><nav aria-labelledby="doc-outline-aria-label" class="VPDocAsideOutline" data-v-fc01c646 data-v-172fd98a><div class="content" data-v-172fd98a><div class="outline-marker" data-v-172fd98a></div><div aria-level="2" class="outline-title" id="doc-outline-aria-label" role="heading" data-v-172fd98a>On this page</div><ul class="VPDocOutlineItem root" data-v-172fd98a data-v-ea4171dd><!--[--><!--]--></ul></div></nav><!--[--><!--]--><div class="spacer" data-v-fc01c646></div><!--[--><!--]--><!----><!--[--><!--]--><!--[--><!--]--></div></div></div></div><div class="content" data-v-f8622dbf><div class="content-container" data-v-f8622dbf><!--[--><!--]--><main class="main" data-v-f8622dbf><div style="position:relative;" class="vp-doc _docs_docs_adr_0015-how-a-project-shapes-its-ticket-flow" data-v-f8622dbf><div><h1 id="how-a-project-shapes-its-ticket-flow" tabindex="-1">How a project shapes its ticket flow <a class="header-anchor" href="#how-a-project-shapes-its-ticket-flow" aria-label="Permalink to "How a project shapes its ticket flow""></a></h1><p>Accepted, amended by ADR-0022, ADR-0028, ADR-0036 and ADR-0041 · 2026-10-13</p><h2 id="context" tabindex="-1">Context <a class="header-anchor" href="#context" aria-label="Permalink to "Context""></a></h2><p>A ticket's delivery was hard-coded in the orchestrator: implement, validate, review, PR, then a human review that ignored gate policies and passed on the merge. A project could not remove a gate as it gained confidence, nor add a step.</p><h2 id="criteria" tabindex="-1">Criteria <a class="header-anchor" href="#criteria" aria-label="Permalink to "Criteria""></a></h2><ol><li><strong>Projects shape their flow</strong>: a project could not remove a gate nor add a step, and in code every new shape of flow needs a core change.</li><li><strong>The merge is the team's</strong>: merging is the human's act at the review, and whether a ticket is merged is a fact of the forge, which the orchestrator observes, whoever merged.</li><li><strong>Only the orchestrator routes</strong>: a skill the model could invoke would let one step chain into another without the orchestrator (ADR-0005), with no budget, cause or write scope.</li><li><strong>Readable config</strong>: a patch is hard to read against a default that moves, and a <code>RETRY</code> in <code>onFail</code> would say what a missing target already means.</li><li><strong>Code needs a consumer</strong>: the core ships only what it consumes (ADR-0013).</li></ol><h2 id="options" tabindex="-1">Options <a class="header-anchor" href="#options" aria-label="Permalink to "Options""></a></h2><ul><li><strong>Keep the flow in code, with switches per gate.</strong> Every new shape of flow needs a core change, and the switches multiply (1).</li><li><strong>A graph of steps in <code>pipeline.delivery</code>, written whole by the project.</strong> The ticket flow becomes data, which the orchestrator compiles into the ticket machine: removing a gate means deleting it and reconnecting its edges, and a project adds its own steps (1). The default graph stops at the human review, and a merge is a human act the orchestrator observes (2). Only the orchestrator starts a step, so every skill a step runs sets <code>disable-model-invocation: true</code> (3). A project that sets <code>delivery.steps</code> writes the whole graph, and <code>bernard sync</code> warns when the core's default graph changed under it (4). Merging, resolving conflicts and applying a reviewer's comments are project-specific, so a project that wants the factory to do them adds its own steps (5).</li><li><strong>A <code>RETRY</code> keyword in <code>onFail</code>.</strong> Running again is what a missing target already means, and <code>RETRY</code> stays the human event (4).</li><li><strong>Overlay patches on the default graph.</strong> A patch is hard to read against a default that moves (4). The project writes its whole graph, and sync flags a changed default.</li><li><strong>A core <code>merge</code> step, with <code>resolve-conflict</code> and <code>apply-pr-feedback</code>.</strong> Merging is the human's act at the review, and acting on a reviewer's comments needs that reviewer, to sort the fixes from the replies and to ask when a comment is ambiguous (2). Neither has a consumer in the core (5, ADR-0013).</li><li><strong>Steps that report a merge.</strong> Whether a ticket is merged is a fact of the forge, which the orchestrator observes, whoever merged (2).</li><li><strong>Gates that merge.</strong> A merge can fail, and a failure needs routes and a budget, which only a step has. A gate only observes the merge (2).</li><li><strong>Step skills the model can invoke.</strong> The orchestrator does not need it, and the model would route the ticket in its place (3). Every session would also carry the descriptions of the steps it is not running.</li></ul><h2 id="comparison" tabindex="-1">Comparison <a class="header-anchor" href="#comparison" aria-label="Permalink to "Comparison""></a></h2><table tabindex="0"><thead><tr><th>Option</th><th>1. Projects shape</th><th>2. Merge is the team's</th><th>3. Orchestrator routes</th><th>4. Readable config</th><th>5. Consumer</th></tr></thead><tbody><tr><td>Flow in code, with switches</td><td>🔴</td><td>⚪</td><td>⚪</td><td>⚪</td><td>⚪</td></tr><tr><td>A graph of steps, written whole</td><td>🟢</td><td>🟢</td><td>🟢</td><td>🟢</td><td>🟢</td></tr><tr><td><code>RETRY</code> in <code>onFail</code></td><td>🟢</td><td>⚪</td><td>⚪</td><td>🔴</td><td>⚪</td></tr><tr><td>Overlay patches</td><td>🟢</td><td>⚪</td><td>⚪</td><td>🔴</td><td>⚪</td></tr><tr><td>A core <code>merge</code> step</td><td>⚪</td><td>🔴</td><td>⚪</td><td>⚪</td><td>🔴</td></tr><tr><td>Steps that report a merge</td><td>⚪</td><td>🔴</td><td>⚪</td><td>⚪</td><td>⚪</td></tr><tr><td>Gates that merge</td><td>⚪</td><td>🔴</td><td>⚪</td><td>⚪</td><td>⚪</td></tr><tr><td>Model-invocable step skills</td><td>⚪</td><td>⚪</td><td>🔴</td><td>⚪</td><td>⚪</td></tr></tbody></table><p>🟢 meets · 🟠 partly, or at a cost · 🔴 fails · ⚪ not discussed</p><h2 id="decision" tabindex="-1">Decision <a class="header-anchor" href="#decision" aria-label="Permalink to "Decision""></a></h2><p>A graph of steps in <code>pipeline.delivery</code>, written whole by the project. The ticket flow is now data: <code>pipeline.delivery</code> holds a graph of steps, which the orchestrator compiles into the ticket machine. The core ships a default graph; a project that sets <code>delivery.steps</code> writes the whole graph. Amended by ADR-0028: <code>delivery.graphs</code> declares several graphs, each with its own <code>start</code>, <code>steps</code> and <code>maxFailures</code>, and a ticket names the one it goes through.</p><p>The default graph stops at the human review: <code>implement</code>, <code>validate</code>, <code>code-review</code> and <code>apply-review</code>, then <code>pull-request</code>, which opens the pull request and drives its CI green so that it is green before the team reviews, then the <code>human-review</code> gate, then <code>DONE</code>. What follows the review is the team's: it acts on its own review, then approves or merges the pull request. Merging the pull request, resolving conflicts with the base and applying a reviewer's comments are project-specific (#13), so a project that wants the factory to do them adds its own steps. Amended by ADR-0036: the core's <code>pull-request</code> skill merges the base into the ticket's branch, and resolves the conflicts, before the pull request. Upstream steps keep their <code>auto</code>, <code>generate</code> and <code>interactive</code> modes.</p><ul><li>A <strong>step</strong> runs one skill in a harness session: the skill with its name, or the one its <code>skill</code> field names. A <strong>gate</strong> (<code>gate: true</code>) runs no skill and waits on a human. There are no other kinds.</li><li><code>onPass</code> names the next step, or <code>DONE</code>, which ends the ticket.</li><li><code>onFail</code> names the step a <code>failed</code> result goes to, or one per failure class with an optional <code>default</code>. When it says nothing, the step runs again.</li><li><code>maxFailures</code> counts every <code>failed</code> result of a step, whatever its target. Once it is spent, the step leaves through <code>onExhausted</code>: a step, <code>DONE</code>, or <code>BLOCK</code> (the default). <code>BLOCK</code> waits for a human <code>RETRY</code>, which resumes where the last failure was sent. The budget refills when the step passes, on that <code>RETRY</code>, and when the step leaves through <code>onExhausted</code> to a step or <code>DONE</code>.</li><li>A gate leaves through <code>onPass</code> when the team approves the pull request (<code>GATE.APPROVED</code>) or merges it (<code>PR.MERGED</code>). With <code>onChanges</code>, a change request (<code>GATE.CHANGES_REQUESTED</code>) sends the ticket to that step with the reviewer's feedback; only that step receives it, every time it runs, until it passes or the gate decides again. Without <code>onChanges</code>, the team acts on the review itself and the gate waits. A gate has a policy, <code>block</code> or <code>decide-and-log</code>, which approves without merging.</li><li>The step a failure is sent to receives that <code>failure</code>: the step and its attempt, the failure class and error.</li><li>A merge is a human act the orchestrator observes, never a step's report: the gate records it when <code>PR.MERGED</code> arrives. Today a human or the CLI sends that event; a forge adapter watching the pull requests will (#160). A project step that merges by itself leaves its ticket unmerged in the orchestrator's eyes.</li><li>Crashed runs are not failures: they re-run the same step on a separate budget, <code>pipeline.maxCrashes</code>, shared with upstream steps.</li></ul><p><code>DONE</code> and <code>BLOCK</code> are uppercase, so they never collide with a step name. The config load rejects a target that is neither a step nor an allowed keyword, a <code>start</code> that is missing or a gate, a cycle made only of <code>onPass</code> edges, and a step unreachable from <code>start</code>. <code>bernard sync</code> fails on a step whose skill neither the core nor the overlay has, or whose skill the model can invoke, and warns when the core's default graph changed under a project that wrote its own.</p><p>Only the orchestrator starts a step, so every skill a step runs sets <code>disable-model-invocation: true</code>. The orchestrator passes <code>/<skill></code> as the session's prompt, which the flag does not block. A skill the model could invoke would let one step chain into another without the orchestrator (ADR-0005): <code>implement</code> seeing a red CI and running <code>pull-request</code> itself, with no budget, cause or write scope.</p><p>This amends ADR-0007, whose ticket gate now has a policy and ends the factory's work on the ticket: the factory no longer applies the humans' review of the final PR, nor merges it. It also amends ADR-0012, whose failure routes now live on each step and whose round budgets become per-step failure budgets.</p><h2 id="consequences" tabindex="-1">Consequences <a class="header-anchor" href="#consequences" aria-label="Permalink to "Consequences""></a></h2><ul><li>Removing a gate means deleting it and reconnecting its edges.</li><li>The core ships <code>implement</code>, <code>validate</code>, <code>code-review</code>, <code>apply-review</code> and <code>pull-request</code>, which opens the pull request on the project's forge through the forge port (ADR-0036); a project with its own way to open a pull request overrides it (ADR-0010). A separate <code>fix-ci</code> step was folded into it: opening a pull request and getting it green are one job, with one budget and one <code>BLOCK</code>.</li><li>Write scopes stay keyed by skill, so two steps that run one skill share its scope.</li><li>A ticket reaching <code>DONE</code> lets its dependents start, once the team has finished with it, so none stacks on a branch still under review. The dependents of a merged ticket branch off main; those of a ticket approved without a merge stack on its branch (<code>stackOn</code> in their requests, which the runner adapter maps to that ticket's branch); a ticket with more than one unmerged dependency is blocked with an error. Amended by ADR-0022: the orchestrator names the branches, and a ticket's requests carry its <code>branch</code> and <code>baseBranch</code> instead of <code>stackOn</code>.</li><li>A feature in flight finishes on the graph it started with: <code>restore</code> rebuilds the machine from the pipeline saved in its state, so a config change applies to the next feature.</li><li>A step no longer receives the failure classes of all its previous attempts, only the cause that sent it there.</li></ul></div></div></main><footer class="VPDocFooter" data-v-f8622dbf data-v-020e2df0><!--[--><!--]--><div class="edit-info" data-v-020e2df0><div class="edit-link" data-v-020e2df0><a class="VPLink link vp-external-link-icon no-icon edit-link-button" href="https://github.com/theodo-group/bernard/edit/main/docs/adr/0015-how-a-project-shapes-its-ticket-flow.md" target="_blank" rel="noreferrer" data-v-020e2df0><!--[--><span class="vpi-square-pen edit-link-icon" data-v-020e2df0></span> Edit this page on GitHub<!--]--></a></div><!----></div><nav class="prev-next" aria-labelledby="doc-footer-aria-label" data-v-020e2df0><span class="visually-hidden" id="doc-footer-aria-label" data-v-020e2df0>Pager</span><div class="pager" data-v-020e2df0><a class="VPLink link pager-link prev" href="/docs/docs/adr/0014-what-a-step-may-change.html" data-v-020e2df0><!--[--><span class="desc" data-v-020e2df0>Previous page</span><span class="title" data-v-020e2df0>0014 · What a step may change</span><!--]--></a></div><div class="pager" data-v-020e2df0><a class="VPLink link pager-link next" href="/docs/docs/adr/0016-which-core-the-factory-repo-runs.html" data-v-020e2df0><!--[--><span class="desc" data-v-020e2df0>Next page</span><span class="title" data-v-020e2df0>0016 · Which core the factory repo runs</span><!--]--></a></div></nav></footer><!--[--><!--]--></div></div></div><!--[--><!--]--></div></div><!----><!--[--><!--]--></div></div>
|
|
27
|
+
<script>window.__VP_HASH_MAP__=JSON.parse("{\"claude.md\":\"BLSB-5gK\",\"context.md\":\"BovnvMGK\",\"contributing.md\":\"DwJsKrz3\",\"core_readme.md\":\"DyxYsikc\",\"demo_readme.md\":\"Cpi2pUU9\",\"docs_adr_0001-what-the-core-is-built-for.md\":\"BxOoMjST\",\"docs_adr_0002-which-harness-a-project-runs-on.md\":\"2GwF-nj0\",\"docs_adr_0003-how-core-content-reaches-each-harness.md\":\"BMWE00Mf\",\"docs_adr_0004-how-the-core-uses-external-tools.md\":\"B7dtE7MB\",\"docs_adr_0005-what-drives-the-pipeline.md\":\"DGn0CJeq\",\"docs_adr_0006-what-steps-hand-off-to-each-other.md\":\"BflT5ugJ\",\"docs_adr_0007-how-humans-take-part-in-the-pipeline.md\":\"CNX3gUD-\",\"docs_adr_0008-where-a-steps-reviewers-run.md\":\"aGbaBOpB\",\"docs_adr_0009-where-pipeline-state-and-handoffs-live.md\":\"C3tKmV-E\",\"docs_adr_0010-how-a-project-adapts-the-core.md\":\"Bp7N6tUE\",\"docs_adr_0011-how-the-factory-is-packaged-and-versioned.md\":\"BBJIwnqa\",\"docs_adr_0012-how-a-steps-failures-are-told-apart-and-routed.md\":\"uCyrBfug\",\"docs_adr_0013-when-code-lands.md\":\"oXgiobfz\",\"docs_adr_0014-what-a-step-may-change.md\":\"Zslg3bnJ\",\"docs_adr_0015-how-a-project-shapes-its-ticket-flow.md\":\"DNHMxwIT\",\"docs_adr_0016-which-core-the-factory-repo-runs.md\":\"CLN6LqBZ\",\"docs_adr_0017-where-a-tickets-record-lives.md\":\"jjUeM-ex\",\"docs_adr_0018-the-products-name.md\":\"6xaX9vDs\",\"docs_adr_0019-how-a-finding-is-answered-and-judged.md\":\"CKKoO9-3\",\"docs_adr_0020-how-an-interrupted-run-resumes.md\":\"DTIP-MBK\",\"docs_adr_0021-how-a-step-runs-in-its-workspace.md\":\"B2r3-FPg\",\"docs_adr_0022-who-names-the-branches.md\":\"DaVk8X0i\",\"docs_adr_0023-how-a-version-ships-before-npm.md\":\"C7-wuCbq\",\"docs_adr_0024-how-the-config-type-carries-its-docs.md\":\"CQmwhWXs\",\"docs_adr_0025-how-a-steps-handoff-is-written-and-checked.md\":\"CgXYdF2v\",\"docs_adr_0026-support-for-github-copilot.md\":\"DJsawm-R\",\"docs_adr_0027-which-forge-a-project-is-on.md\":\"CY0qy9xh\",\"docs_adr_0028-several-ticket-flows-in-one-pipeline.md\":\"oxffo2qg\",\"docs_adr_0029-the-branch-a-feature-works-on.md\":\"CrgkP6YJ\",\"docs_adr_0030-a-runner-without-coder.md\":\"CW8sF7jK\",\"docs_adr_0031-how-the-run-viewer-reads-its-runs.md\":\"opQYnVF2\",\"docs_adr_0032-how-a-project-gets-the-viewer.md\":\"DB9NjYJf\",\"docs_adr_0033-the-repos-license.md\":\"NPlkrPj8\",\"docs_adr_0034-how-code-review-launches-its-reviewers.md\":\"DSNpkfaL\",\"docs_adr_0035-how-the-package-is-published.md\":\"C1f4B5eb\",\"docs_adr_0036-what-the-cores-pull-request-skill-does.md\":\"op39HLAT\",\"docs_adr_0037-how-a-team-reads-the-factorys-documentation.md\":\"Dar_Xo4t\",\"docs_adr_0038-where-adapters-live.md\":\"CkVD3riv\",\"docs_adr_0039-the-repos-license.md\":\"C_rraWpb\",\"docs_adr_0040-how-a-version-is-released.md\":\"CCdwC07z\",\"docs_adr_0041-who-opens-the-features-pull-request.md\":\"qLu9WLaG\",\"docs_adr_0042-how-secrets-are-kept-out-of-committed-records.md\":\"DJWazI4H\",\"docs_getting-started.md\":\"BpQFS8Gr\",\"docs_github.md\":\"D4gkW71G\",\"docs_overlay.md\":\"DoWVb6OM\",\"docs_pipeline.md\":\"DdHywWSk\",\"docs_recipes.md\":\"8Xf6BsRA\",\"fixtures_readme.md\":\"DzbQ0hft\",\"index.md\":\"DHgL6CzS\",\"packages_docs_readme.md\":\"PV1a27nC\",\"packages_viewer_readme.md\":\"BynKZSdN\"}");window.__VP_SITE_DATA__=JSON.parse("{\"lang\":\"en-US\",\"dir\":\"ltr\",\"title\":\"Bernard the taktician\",\"description\":\"An agentic factory for new builds and legacy migrations.\",\"base\":\"/docs/\",\"head\":[],\"router\":{\"prefetchLinks\":true},\"appearance\":true,\"themeConfig\":{\"logo\":\"/bernard.svg\",\"siteTitle\":\"Bernard\",\"outline\":[2,3],\"search\":{\"provider\":\"local\"},\"nav\":[{\"text\":\"Guides\",\"link\":\"/docs/getting-started\"},{\"text\":\"Contributing\",\"link\":\"/CONTRIBUTING\"},{\"text\":\"Decisions\",\"link\":\"/docs/adr/0001-what-the-core-is-built-for\"}],\"sidebar\":[{\"text\":\"Bernard\",\"collapsed\":false,\"items\":[{\"text\":\"Overview\",\"link\":\"/\"},{\"text\":\"Vocabulary\",\"link\":\"/CONTEXT\"}]},{\"text\":\"Guides\",\"collapsed\":false,\"items\":[{\"text\":\"Getting started\",\"link\":\"/docs/getting-started\"},{\"text\":\"The overlay\",\"link\":\"/docs/overlay\"},{\"text\":\"Recipes\",\"link\":\"/docs/recipes\"},{\"text\":\"Pipeline\",\"link\":\"/docs/pipeline\"}]},{\"text\":\"Contributing\",\"collapsed\":false,\"items\":[{\"text\":\"Contributing\",\"link\":\"/CONTRIBUTING\"},{\"text\":\"Rules for agents\",\"link\":\"/CLAUDE\"},{\"text\":\"GitHub\",\"link\":\"/docs/github\"},{\"text\":\"Core content\",\"link\":\"/core/README\"},{\"text\":\"Run viewer\",\"link\":\"/packages/viewer/README\"},{\"text\":\"Documentation site\",\"link\":\"/packages/docs/README\"},{\"text\":\"Fixtures\",\"link\":\"/fixtures/README\"},{\"text\":\"Demo\",\"link\":\"/demo/README\"}]},{\"text\":\"Decisions\",\"collapsed\":true,\"items\":[{\"text\":\"0001 · What the core is built for\",\"link\":\"/docs/adr/0001-what-the-core-is-built-for\"},{\"text\":\"0002 · Which harness a project runs on\",\"link\":\"/docs/adr/0002-which-harness-a-project-runs-on\"},{\"text\":\"0003 · How core content reaches each harness\",\"link\":\"/docs/adr/0003-how-core-content-reaches-each-harness\"},{\"text\":\"0004 · How the core uses external tools\",\"link\":\"/docs/adr/0004-how-the-core-uses-external-tools\"},{\"text\":\"0005 · What drives the pipeline\",\"link\":\"/docs/adr/0005-what-drives-the-pipeline\"},{\"text\":\"0006 · What steps hand off to each other\",\"link\":\"/docs/adr/0006-what-steps-hand-off-to-each-other\"},{\"text\":\"0007 · How humans take part in the pipeline\",\"link\":\"/docs/adr/0007-how-humans-take-part-in-the-pipeline\"},{\"text\":\"0008 · Where a step's reviewers run\",\"link\":\"/docs/adr/0008-where-a-steps-reviewers-run\"},{\"text\":\"0009 · Where pipeline state and handoffs live\",\"link\":\"/docs/adr/0009-where-pipeline-state-and-handoffs-live\"},{\"text\":\"0010 · How a project adapts the core\",\"link\":\"/docs/adr/0010-how-a-project-adapts-the-core\"},{\"text\":\"0011 · How the factory is packaged and versioned\",\"link\":\"/docs/adr/0011-how-the-factory-is-packaged-and-versioned\"},{\"text\":\"0012 · How a step's failures are told apart and routed\",\"link\":\"/docs/adr/0012-how-a-steps-failures-are-told-apart-and-routed\"},{\"text\":\"0013 · When code lands\",\"link\":\"/docs/adr/0013-when-code-lands\"},{\"text\":\"0014 · What a step may change\",\"link\":\"/docs/adr/0014-what-a-step-may-change\"},{\"text\":\"0015 · How a project shapes its ticket flow\",\"link\":\"/docs/adr/0015-how-a-project-shapes-its-ticket-flow\"},{\"text\":\"0016 · Which core the factory repo runs\",\"link\":\"/docs/adr/0016-which-core-the-factory-repo-runs\"},{\"text\":\"0017 · Where a ticket's record lives\",\"link\":\"/docs/adr/0017-where-a-tickets-record-lives\"},{\"text\":\"0018 · The product's name\",\"link\":\"/docs/adr/0018-the-products-name\"},{\"text\":\"0019 · How a finding is answered and judged\",\"link\":\"/docs/adr/0019-how-a-finding-is-answered-and-judged\"},{\"text\":\"0020 · How an interrupted run resumes\",\"link\":\"/docs/adr/0020-how-an-interrupted-run-resumes\"},{\"text\":\"0021 · How a step runs in its workspace\",\"link\":\"/docs/adr/0021-how-a-step-runs-in-its-workspace\"},{\"text\":\"0022 · Who names the branches\",\"link\":\"/docs/adr/0022-who-names-the-branches\"},{\"text\":\"0023 · How a version ships before npm\",\"link\":\"/docs/adr/0023-how-a-version-ships-before-npm\"},{\"text\":\"0024 · How the config type carries its docs\",\"link\":\"/docs/adr/0024-how-the-config-type-carries-its-docs\"},{\"text\":\"0025 · How a step's handoff is written and checked\",\"link\":\"/docs/adr/0025-how-a-steps-handoff-is-written-and-checked\"},{\"text\":\"0026 · Support for GitHub Copilot\",\"link\":\"/docs/adr/0026-support-for-github-copilot\"},{\"text\":\"0027 · Which forge a project is on\",\"link\":\"/docs/adr/0027-which-forge-a-project-is-on\"},{\"text\":\"0028 · Several ticket flows in one pipeline\",\"link\":\"/docs/adr/0028-several-ticket-flows-in-one-pipeline\"},{\"text\":\"0029 · The branch a feature works on\",\"link\":\"/docs/adr/0029-the-branch-a-feature-works-on\"},{\"text\":\"0030 · A runner without Coder\",\"link\":\"/docs/adr/0030-a-runner-without-coder\"},{\"text\":\"0031 · How the run viewer reads its runs\",\"link\":\"/docs/adr/0031-how-the-run-viewer-reads-its-runs\"},{\"text\":\"0032 · How a project gets the viewer\",\"link\":\"/docs/adr/0032-how-a-project-gets-the-viewer\"},{\"text\":\"0033 · The repo's license\",\"link\":\"/docs/adr/0033-the-repos-license\"},{\"text\":\"0034 · How code review launches its reviewers\",\"link\":\"/docs/adr/0034-how-code-review-launches-its-reviewers\"},{\"text\":\"0035 · How the package is published\",\"link\":\"/docs/adr/0035-how-the-package-is-published\"},{\"text\":\"0036 · What the core's pull-request skill does\",\"link\":\"/docs/adr/0036-what-the-cores-pull-request-skill-does\"},{\"text\":\"0037 · How a team reads the factory's documentation\",\"link\":\"/docs/adr/0037-how-a-team-reads-the-factorys-documentation\"},{\"text\":\"0038 · Where adapters live\",\"link\":\"/docs/adr/0038-where-adapters-live\"},{\"text\":\"0039 · The repo's license\",\"link\":\"/docs/adr/0039-the-repos-license\"},{\"text\":\"0040 · How a version is released\",\"link\":\"/docs/adr/0040-how-a-version-is-released\"},{\"text\":\"0041 · Who opens the feature's pull request, and how a ticket reaches it\",\"link\":\"/docs/adr/0041-who-opens-the-features-pull-request\"},{\"text\":\"0042 · How secrets are kept out of committed records\",\"link\":\"/docs/adr/0042-how-secrets-are-kept-out-of-committed-records\"}]}],\"editLink\":{\"pattern\":\"https://github.com/theodo-group/bernard/edit/main/:path\",\"text\":\"Edit this page on GitHub\"}},\"locales\":{},\"scrollOffset\":134,\"cleanUrls\":false}");</script>
|
|
28
|
+
|
|
29
|
+
</body>
|
|
30
|
+
</html>
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
<!DOCTYPE html>
|
|
2
|
+
<html lang="en-US" dir="ltr">
|
|
3
|
+
<head>
|
|
4
|
+
<meta charset="utf-8">
|
|
5
|
+
<meta name="viewport" content="width=device-width,initial-scale=1">
|
|
6
|
+
<title>Which core the factory repo runs | Bernard the taktician</title>
|
|
7
|
+
<meta name="description" content="An agentic factory for new builds and legacy migrations.">
|
|
8
|
+
<meta name="generator" content="VitePress v1.6.4">
|
|
9
|
+
<link rel="preload stylesheet" href="/docs/assets/style.C3E8Ltp6.css" as="style">
|
|
10
|
+
<link rel="preload stylesheet" href="/docs/vp-icons.css" as="style">
|
|
11
|
+
|
|
12
|
+
<script type="module" src="/docs/assets/app.URmpjWHb.js"></script>
|
|
13
|
+
<link rel="preload" href="/docs/assets/inter-roman-latin.Di8DUHzh.woff2" as="font" type="font/woff2" crossorigin="">
|
|
14
|
+
<link rel="modulepreload" href="/docs/assets/chunks/framework.hgjl6W6o.js">
|
|
15
|
+
<link rel="modulepreload" href="/docs/assets/chunks/theme.Cksh_UJH.js">
|
|
16
|
+
<link rel="modulepreload" href="/docs/assets/chunks/sizeCapture-INFHLROL.BEqL2zFi.js">
|
|
17
|
+
<link rel="modulepreload" href="/docs/assets/chunks/dagre-GXQ25YYZ.2qvw8AqH.js">
|
|
18
|
+
<link rel="modulepreload" href="/docs/assets/chunks/stateDiagram-v2-MP3YSRHH.3X7wNXKX.js">
|
|
19
|
+
<link rel="modulepreload" href="/docs/assets/chunks/virtual_mermaid-config.DDnGl6nM.js">
|
|
20
|
+
<link rel="modulepreload" href="/docs/assets/docs_adr_0016-which-core-the-factory-repo-runs.md.CLN6LqBZ.lean.js">
|
|
21
|
+
<link rel="icon" href="/docs/bernard.svg" type="image/svg+xml">
|
|
22
|
+
<script id="check-dark-mode">(()=>{const e=localStorage.getItem("vitepress-theme-appearance")||"auto",a=window.matchMedia("(prefers-color-scheme: dark)").matches;(!e||e==="auto"?a:e==="dark")&&document.documentElement.classList.add("dark")})();</script>
|
|
23
|
+
<script id="check-mac-os">document.documentElement.classList.toggle("mac",/Mac|iPhone|iPod|iPad/i.test(navigator.platform));</script>
|
|
24
|
+
</head>
|
|
25
|
+
<body>
|
|
26
|
+
<div id="app"><div class="Layout" data-v-f87bd3ac><!--[--><!--]--><!--[--><span tabindex="-1" data-v-26966a6b></span><a href="#VPContent" class="VPSkipLink visually-hidden" data-v-26966a6b>Skip to content</a><!--]--><!----><header class="VPNav" data-v-f87bd3ac data-v-a776a728><div class="VPNavBar" data-v-a776a728 data-v-257d37ee><div class="wrapper" data-v-257d37ee><div class="container" data-v-257d37ee><div class="title" data-v-257d37ee><div class="VPNavBarTitle has-sidebar" data-v-257d37ee data-v-1b9c14bd><a class="title" href="/docs/" data-v-1b9c14bd><!--[--><!--]--><!--[--><img class="VPImage logo" src="/docs/bernard.svg" alt data-v-4a9aa8e2><!--]--><span data-v-1b9c14bd>Bernard</span><!--[--><!--]--></a></div></div><div class="content" data-v-257d37ee><div class="content-body" data-v-257d37ee><!--[--><!--]--><div class="VPNavBarSearch search" data-v-257d37ee><!--[--><!----><div id="local-search"><button type="button" class="DocSearch DocSearch-Button" aria-label="Search"><span class="DocSearch-Button-Container"><span class="vp-icon DocSearch-Search-Icon"></span><span class="DocSearch-Button-Placeholder">Search</span></span><span class="DocSearch-Button-Keys"><kbd class="DocSearch-Button-Key"></kbd><kbd class="DocSearch-Button-Key">K</kbd></span></button></div><!--]--></div><nav aria-labelledby="main-nav-aria-label" class="VPNavBarMenu menu" data-v-257d37ee data-v-96ed2429><span id="main-nav-aria-label" class="visually-hidden" data-v-96ed2429> Main Navigation </span><!--[--><!--[--><a class="VPLink link VPNavBarMenuLink" href="/docs/docs/getting-started.html" tabindex="0" data-v-96ed2429 data-v-c21a295c><!--[--><span data-v-c21a295c>Guides</span><!--]--></a><!--]--><!--[--><a class="VPLink link VPNavBarMenuLink" href="/docs/CONTRIBUTING.html" tabindex="0" data-v-96ed2429 data-v-c21a295c><!--[--><span data-v-c21a295c>Contributing</span><!--]--></a><!--]--><!--[--><a class="VPLink link VPNavBarMenuLink" href="/docs/docs/adr/0001-what-the-core-is-built-for.html" tabindex="0" data-v-96ed2429 data-v-c21a295c><!--[--><span data-v-c21a295c>Decisions</span><!--]--></a><!--]--><!--]--></nav><!----><div class="VPNavBarAppearance appearance" data-v-257d37ee data-v-772a648f><button class="VPSwitch VPSwitchAppearance" type="button" role="switch" title aria-checked="false" data-v-772a648f data-v-32dadf2f data-v-033bec8f><span class="check" data-v-033bec8f><span class="icon" data-v-033bec8f><!--[--><span class="vpi-sun sun" data-v-32dadf2f></span><span class="vpi-moon moon" data-v-32dadf2f></span><!--]--></span></span></button></div><!----><div class="VPFlyout VPNavBarExtra extra" data-v-257d37ee data-v-6a77a12d data-v-6ff730e4><button type="button" class="button" aria-haspopup="true" aria-expanded="false" aria-label="extra navigation" data-v-6ff730e4><span class="vpi-more-horizontal icon" data-v-6ff730e4></span></button><div class="menu" data-v-6ff730e4><div class="VPMenu" data-v-6ff730e4 data-v-7e1ab185><!----><!--[--><!--[--><!----><div class="group" data-v-6a77a12d><div class="item appearance" data-v-6a77a12d><p class="label" data-v-6a77a12d>Appearance</p><div class="appearance-action" data-v-6a77a12d><button class="VPSwitch VPSwitchAppearance" type="button" role="switch" title aria-checked="false" data-v-6a77a12d data-v-32dadf2f data-v-033bec8f><span class="check" data-v-033bec8f><span class="icon" data-v-033bec8f><!--[--><span class="vpi-sun sun" data-v-32dadf2f></span><span class="vpi-moon moon" data-v-32dadf2f></span><!--]--></span></span></button></div></div></div><!----><!--]--><!--]--></div></div></div><!--[--><!--[--><!--[--><a class="viewer-switch" href="/">Run viewer</a><!--]--><!--]--><!--]--><button type="button" class="VPNavBarHamburger hamburger" aria-label="mobile navigation" aria-expanded="false" aria-controls="VPNavScreen" data-v-257d37ee data-v-33d7d0d7><span class="container" data-v-33d7d0d7><span class="top" data-v-33d7d0d7></span><span class="middle" data-v-33d7d0d7></span><span class="bottom" data-v-33d7d0d7></span></span></button></div></div></div></div><div class="divider" data-v-257d37ee><div class="divider-line" data-v-257d37ee></div></div></div><!----></header><div class="VPLocalNav has-sidebar empty" data-v-f87bd3ac data-v-c5f097a9><div class="container" data-v-c5f097a9><button class="menu" aria-expanded="false" aria-controls="VPSidebarNav" data-v-c5f097a9><span class="vpi-align-left menu-icon" data-v-c5f097a9></span><span class="menu-text" data-v-c5f097a9>Menu</span></button><div class="VPLocalNavOutlineDropdown" style="--vp-vh:0px;" data-v-c5f097a9 data-v-cb88d934><button data-v-cb88d934>Return to top</button><!----></div></div></div><aside class="VPSidebar" data-v-f87bd3ac data-v-979e8f18><div class="curtain" data-v-979e8f18></div><nav class="nav" id="VPSidebarNav" aria-labelledby="sidebar-aria-label" tabindex="-1" data-v-979e8f18><span class="visually-hidden" id="sidebar-aria-label" data-v-979e8f18> Sidebar Navigation </span><!--[--><!--]--><!--[--><div class="no-transition group" data-v-b9208f43><section class="VPSidebarItem level-0 collapsible" data-v-b9208f43 data-v-0b328883><div class="item" role="button" tabindex="0" data-v-0b328883><div class="indicator" data-v-0b328883></div><h2 class="text" data-v-0b328883>Bernard</h2><div class="caret" role="button" aria-label="toggle section" tabindex="0" data-v-0b328883><span class="vpi-chevron-right caret-icon" data-v-0b328883></span></div></div><div class="items" data-v-0b328883><!--[--><div class="VPSidebarItem level-1 is-link" data-v-0b328883><div class="item" data-v-0b328883><div class="indicator" data-v-0b328883></div><a class="VPLink link link" href="/docs/" data-v-0b328883><!--[--><p class="text" data-v-0b328883>Overview</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-0b328883><div class="item" data-v-0b328883><div class="indicator" data-v-0b328883></div><a class="VPLink link link" href="/docs/CONTEXT.html" data-v-0b328883><!--[--><p class="text" data-v-0b328883>Vocabulary</p><!--]--></a><!----></div><!----></div><!--]--></div></section></div><div class="no-transition group" data-v-b9208f43><section class="VPSidebarItem level-0 collapsible" data-v-b9208f43 data-v-0b328883><div class="item" role="button" tabindex="0" data-v-0b328883><div class="indicator" data-v-0b328883></div><h2 class="text" data-v-0b328883>Guides</h2><div class="caret" role="button" aria-label="toggle section" tabindex="0" data-v-0b328883><span class="vpi-chevron-right caret-icon" data-v-0b328883></span></div></div><div class="items" data-v-0b328883><!--[--><div class="VPSidebarItem level-1 is-link" data-v-0b328883><div class="item" data-v-0b328883><div class="indicator" data-v-0b328883></div><a class="VPLink link link" href="/docs/docs/getting-started.html" data-v-0b328883><!--[--><p class="text" data-v-0b328883>Getting started</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-0b328883><div class="item" data-v-0b328883><div class="indicator" data-v-0b328883></div><a class="VPLink link link" href="/docs/docs/overlay.html" data-v-0b328883><!--[--><p class="text" data-v-0b328883>The overlay</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-0b328883><div class="item" data-v-0b328883><div class="indicator" data-v-0b328883></div><a class="VPLink link link" href="/docs/docs/recipes.html" data-v-0b328883><!--[--><p class="text" data-v-0b328883>Recipes</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-0b328883><div class="item" data-v-0b328883><div class="indicator" data-v-0b328883></div><a class="VPLink link link" href="/docs/docs/pipeline.html" data-v-0b328883><!--[--><p class="text" data-v-0b328883>Pipeline</p><!--]--></a><!----></div><!----></div><!--]--></div></section></div><div class="no-transition group" data-v-b9208f43><section class="VPSidebarItem level-0 collapsible" data-v-b9208f43 data-v-0b328883><div class="item" role="button" tabindex="0" data-v-0b328883><div class="indicator" data-v-0b328883></div><h2 class="text" data-v-0b328883>Contributing</h2><div class="caret" role="button" aria-label="toggle section" tabindex="0" data-v-0b328883><span class="vpi-chevron-right caret-icon" data-v-0b328883></span></div></div><div class="items" data-v-0b328883><!--[--><div class="VPSidebarItem level-1 is-link" data-v-0b328883><div class="item" data-v-0b328883><div class="indicator" data-v-0b328883></div><a class="VPLink link link" href="/docs/CONTRIBUTING.html" data-v-0b328883><!--[--><p class="text" data-v-0b328883>Contributing</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-0b328883><div class="item" data-v-0b328883><div class="indicator" data-v-0b328883></div><a class="VPLink link link" href="/docs/CLAUDE.html" data-v-0b328883><!--[--><p class="text" data-v-0b328883>Rules for agents</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-0b328883><div class="item" data-v-0b328883><div class="indicator" data-v-0b328883></div><a class="VPLink link link" href="/docs/docs/github.html" data-v-0b328883><!--[--><p class="text" data-v-0b328883>GitHub</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-0b328883><div class="item" data-v-0b328883><div class="indicator" data-v-0b328883></div><a class="VPLink link link" href="/docs/core/README.html" data-v-0b328883><!--[--><p class="text" data-v-0b328883>Core content</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-0b328883><div class="item" data-v-0b328883><div class="indicator" data-v-0b328883></div><a class="VPLink link link" href="/docs/packages/viewer/README.html" data-v-0b328883><!--[--><p class="text" data-v-0b328883>Run viewer</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-0b328883><div class="item" data-v-0b328883><div class="indicator" data-v-0b328883></div><a class="VPLink link link" href="/docs/packages/docs/README.html" data-v-0b328883><!--[--><p class="text" data-v-0b328883>Documentation site</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-0b328883><div class="item" data-v-0b328883><div class="indicator" data-v-0b328883></div><a class="VPLink link link" href="/docs/fixtures/README.html" data-v-0b328883><!--[--><p class="text" data-v-0b328883>Fixtures</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-0b328883><div class="item" data-v-0b328883><div class="indicator" data-v-0b328883></div><a class="VPLink link link" href="/docs/demo/README.html" data-v-0b328883><!--[--><p class="text" data-v-0b328883>Demo</p><!--]--></a><!----></div><!----></div><!--]--></div></section></div><div class="no-transition group" data-v-b9208f43><section class="VPSidebarItem level-0 collapsible collapsed has-active" data-v-b9208f43 data-v-0b328883><div class="item" role="button" tabindex="0" data-v-0b328883><div class="indicator" data-v-0b328883></div><h2 class="text" data-v-0b328883>Decisions</h2><div class="caret" role="button" aria-label="toggle section" tabindex="0" data-v-0b328883><span class="vpi-chevron-right caret-icon" data-v-0b328883></span></div></div><div class="items" data-v-0b328883><!--[--><div class="VPSidebarItem level-1 is-link" data-v-0b328883><div class="item" data-v-0b328883><div class="indicator" data-v-0b328883></div><a class="VPLink link link" href="/docs/docs/adr/0001-what-the-core-is-built-for.html" data-v-0b328883><!--[--><p class="text" data-v-0b328883>0001 · What the core is built for</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-0b328883><div class="item" data-v-0b328883><div class="indicator" data-v-0b328883></div><a class="VPLink link link" href="/docs/docs/adr/0002-which-harness-a-project-runs-on.html" data-v-0b328883><!--[--><p class="text" data-v-0b328883>0002 · Which harness a project runs on</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-0b328883><div class="item" data-v-0b328883><div class="indicator" data-v-0b328883></div><a class="VPLink link link" href="/docs/docs/adr/0003-how-core-content-reaches-each-harness.html" data-v-0b328883><!--[--><p class="text" data-v-0b328883>0003 · How core content reaches each harness</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-0b328883><div class="item" data-v-0b328883><div class="indicator" data-v-0b328883></div><a class="VPLink link link" href="/docs/docs/adr/0004-how-the-core-uses-external-tools.html" data-v-0b328883><!--[--><p class="text" data-v-0b328883>0004 · How the core uses external tools</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-0b328883><div class="item" data-v-0b328883><div class="indicator" data-v-0b328883></div><a class="VPLink link link" href="/docs/docs/adr/0005-what-drives-the-pipeline.html" data-v-0b328883><!--[--><p class="text" data-v-0b328883>0005 · What drives the pipeline</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-0b328883><div class="item" data-v-0b328883><div class="indicator" data-v-0b328883></div><a class="VPLink link link" href="/docs/docs/adr/0006-what-steps-hand-off-to-each-other.html" data-v-0b328883><!--[--><p class="text" data-v-0b328883>0006 · What steps hand off to each other</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-0b328883><div class="item" data-v-0b328883><div class="indicator" data-v-0b328883></div><a class="VPLink link link" href="/docs/docs/adr/0007-how-humans-take-part-in-the-pipeline.html" data-v-0b328883><!--[--><p class="text" data-v-0b328883>0007 · How humans take part in the pipeline</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-0b328883><div class="item" data-v-0b328883><div class="indicator" data-v-0b328883></div><a class="VPLink link link" href="/docs/docs/adr/0008-where-a-steps-reviewers-run.html" data-v-0b328883><!--[--><p class="text" data-v-0b328883>0008 · Where a step's reviewers run</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-0b328883><div class="item" data-v-0b328883><div class="indicator" data-v-0b328883></div><a class="VPLink link link" href="/docs/docs/adr/0009-where-pipeline-state-and-handoffs-live.html" data-v-0b328883><!--[--><p class="text" data-v-0b328883>0009 · Where pipeline state and handoffs live</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-0b328883><div class="item" data-v-0b328883><div class="indicator" data-v-0b328883></div><a class="VPLink link link" href="/docs/docs/adr/0010-how-a-project-adapts-the-core.html" data-v-0b328883><!--[--><p class="text" data-v-0b328883>0010 · How a project adapts the core</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-0b328883><div class="item" data-v-0b328883><div class="indicator" data-v-0b328883></div><a class="VPLink link link" href="/docs/docs/adr/0011-how-the-factory-is-packaged-and-versioned.html" data-v-0b328883><!--[--><p class="text" data-v-0b328883>0011 · How the factory is packaged and versioned</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-0b328883><div class="item" data-v-0b328883><div class="indicator" data-v-0b328883></div><a class="VPLink link link" href="/docs/docs/adr/0012-how-a-steps-failures-are-told-apart-and-routed.html" data-v-0b328883><!--[--><p class="text" data-v-0b328883>0012 · How a step's failures are told apart and routed</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-0b328883><div class="item" data-v-0b328883><div class="indicator" data-v-0b328883></div><a class="VPLink link link" href="/docs/docs/adr/0013-when-code-lands.html" data-v-0b328883><!--[--><p class="text" data-v-0b328883>0013 · When code lands</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-0b328883><div class="item" data-v-0b328883><div class="indicator" data-v-0b328883></div><a class="VPLink link link" href="/docs/docs/adr/0014-what-a-step-may-change.html" data-v-0b328883><!--[--><p class="text" data-v-0b328883>0014 · What a step may change</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-0b328883><div class="item" data-v-0b328883><div class="indicator" data-v-0b328883></div><a class="VPLink link link" href="/docs/docs/adr/0015-how-a-project-shapes-its-ticket-flow.html" data-v-0b328883><!--[--><p class="text" data-v-0b328883>0015 · How a project shapes its ticket flow</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-0b328883><div class="item" data-v-0b328883><div class="indicator" data-v-0b328883></div><a class="VPLink link link" href="/docs/docs/adr/0016-which-core-the-factory-repo-runs.html" data-v-0b328883><!--[--><p class="text" data-v-0b328883>0016 · Which core the factory repo runs</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-0b328883><div class="item" data-v-0b328883><div class="indicator" data-v-0b328883></div><a class="VPLink link link" href="/docs/docs/adr/0017-where-a-tickets-record-lives.html" data-v-0b328883><!--[--><p class="text" data-v-0b328883>0017 · Where a ticket's record lives</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-0b328883><div class="item" data-v-0b328883><div class="indicator" data-v-0b328883></div><a class="VPLink link link" href="/docs/docs/adr/0018-the-products-name.html" data-v-0b328883><!--[--><p class="text" data-v-0b328883>0018 · The product's name</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-0b328883><div class="item" data-v-0b328883><div class="indicator" data-v-0b328883></div><a class="VPLink link link" href="/docs/docs/adr/0019-how-a-finding-is-answered-and-judged.html" data-v-0b328883><!--[--><p class="text" data-v-0b328883>0019 · How a finding is answered and judged</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-0b328883><div class="item" data-v-0b328883><div class="indicator" data-v-0b328883></div><a class="VPLink link link" href="/docs/docs/adr/0020-how-an-interrupted-run-resumes.html" data-v-0b328883><!--[--><p class="text" data-v-0b328883>0020 · How an interrupted run resumes</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-0b328883><div class="item" data-v-0b328883><div class="indicator" data-v-0b328883></div><a class="VPLink link link" href="/docs/docs/adr/0021-how-a-step-runs-in-its-workspace.html" data-v-0b328883><!--[--><p class="text" data-v-0b328883>0021 · How a step runs in its workspace</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-0b328883><div class="item" data-v-0b328883><div class="indicator" data-v-0b328883></div><a class="VPLink link link" href="/docs/docs/adr/0022-who-names-the-branches.html" data-v-0b328883><!--[--><p class="text" data-v-0b328883>0022 · Who names the branches</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-0b328883><div class="item" data-v-0b328883><div class="indicator" data-v-0b328883></div><a class="VPLink link link" href="/docs/docs/adr/0023-how-a-version-ships-before-npm.html" data-v-0b328883><!--[--><p class="text" data-v-0b328883>0023 · How a version ships before npm</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-0b328883><div class="item" data-v-0b328883><div class="indicator" data-v-0b328883></div><a class="VPLink link link" href="/docs/docs/adr/0024-how-the-config-type-carries-its-docs.html" data-v-0b328883><!--[--><p class="text" data-v-0b328883>0024 · How the config type carries its docs</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-0b328883><div class="item" data-v-0b328883><div class="indicator" data-v-0b328883></div><a class="VPLink link link" href="/docs/docs/adr/0025-how-a-steps-handoff-is-written-and-checked.html" data-v-0b328883><!--[--><p class="text" data-v-0b328883>0025 · How a step's handoff is written and checked</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-0b328883><div class="item" data-v-0b328883><div class="indicator" data-v-0b328883></div><a class="VPLink link link" href="/docs/docs/adr/0026-support-for-github-copilot.html" data-v-0b328883><!--[--><p class="text" data-v-0b328883>0026 · Support for GitHub Copilot</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-0b328883><div class="item" data-v-0b328883><div class="indicator" data-v-0b328883></div><a class="VPLink link link" href="/docs/docs/adr/0027-which-forge-a-project-is-on.html" data-v-0b328883><!--[--><p class="text" data-v-0b328883>0027 · Which forge a project is on</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-0b328883><div class="item" data-v-0b328883><div class="indicator" data-v-0b328883></div><a class="VPLink link link" href="/docs/docs/adr/0028-several-ticket-flows-in-one-pipeline.html" data-v-0b328883><!--[--><p class="text" data-v-0b328883>0028 · Several ticket flows in one pipeline</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-0b328883><div class="item" data-v-0b328883><div class="indicator" data-v-0b328883></div><a class="VPLink link link" href="/docs/docs/adr/0029-the-branch-a-feature-works-on.html" data-v-0b328883><!--[--><p class="text" data-v-0b328883>0029 · The branch a feature works on</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-0b328883><div class="item" data-v-0b328883><div class="indicator" data-v-0b328883></div><a class="VPLink link link" href="/docs/docs/adr/0030-a-runner-without-coder.html" data-v-0b328883><!--[--><p class="text" data-v-0b328883>0030 · A runner without Coder</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-0b328883><div class="item" data-v-0b328883><div class="indicator" data-v-0b328883></div><a class="VPLink link link" href="/docs/docs/adr/0031-how-the-run-viewer-reads-its-runs.html" data-v-0b328883><!--[--><p class="text" data-v-0b328883>0031 · How the run viewer reads its runs</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-0b328883><div class="item" data-v-0b328883><div class="indicator" data-v-0b328883></div><a class="VPLink link link" href="/docs/docs/adr/0032-how-a-project-gets-the-viewer.html" data-v-0b328883><!--[--><p class="text" data-v-0b328883>0032 · How a project gets the viewer</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-0b328883><div class="item" data-v-0b328883><div class="indicator" data-v-0b328883></div><a class="VPLink link link" href="/docs/docs/adr/0033-the-repos-license.html" data-v-0b328883><!--[--><p class="text" data-v-0b328883>0033 · The repo's license</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-0b328883><div class="item" data-v-0b328883><div class="indicator" data-v-0b328883></div><a class="VPLink link link" href="/docs/docs/adr/0034-how-code-review-launches-its-reviewers.html" data-v-0b328883><!--[--><p class="text" data-v-0b328883>0034 · How code review launches its reviewers</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-0b328883><div class="item" data-v-0b328883><div class="indicator" data-v-0b328883></div><a class="VPLink link link" href="/docs/docs/adr/0035-how-the-package-is-published.html" data-v-0b328883><!--[--><p class="text" data-v-0b328883>0035 · How the package is published</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-0b328883><div class="item" data-v-0b328883><div class="indicator" data-v-0b328883></div><a class="VPLink link link" href="/docs/docs/adr/0036-what-the-cores-pull-request-skill-does.html" data-v-0b328883><!--[--><p class="text" data-v-0b328883>0036 · What the core's pull-request skill does</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-0b328883><div class="item" data-v-0b328883><div class="indicator" data-v-0b328883></div><a class="VPLink link link" href="/docs/docs/adr/0037-how-a-team-reads-the-factorys-documentation.html" data-v-0b328883><!--[--><p class="text" data-v-0b328883>0037 · How a team reads the factory's documentation</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-0b328883><div class="item" data-v-0b328883><div class="indicator" data-v-0b328883></div><a class="VPLink link link" href="/docs/docs/adr/0038-where-adapters-live.html" data-v-0b328883><!--[--><p class="text" data-v-0b328883>0038 · Where adapters live</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-0b328883><div class="item" data-v-0b328883><div class="indicator" data-v-0b328883></div><a class="VPLink link link" href="/docs/docs/adr/0039-the-repos-license.html" data-v-0b328883><!--[--><p class="text" data-v-0b328883>0039 · The repo's license</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-0b328883><div class="item" data-v-0b328883><div class="indicator" data-v-0b328883></div><a class="VPLink link link" href="/docs/docs/adr/0040-how-a-version-is-released.html" data-v-0b328883><!--[--><p class="text" data-v-0b328883>0040 · How a version is released</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-0b328883><div class="item" data-v-0b328883><div class="indicator" data-v-0b328883></div><a class="VPLink link link" href="/docs/docs/adr/0041-who-opens-the-features-pull-request.html" data-v-0b328883><!--[--><p class="text" data-v-0b328883>0041 · Who opens the feature's pull request, and how a ticket reaches it</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-0b328883><div class="item" data-v-0b328883><div class="indicator" data-v-0b328883></div><a class="VPLink link link" href="/docs/docs/adr/0042-how-secrets-are-kept-out-of-committed-records.html" data-v-0b328883><!--[--><p class="text" data-v-0b328883>0042 · How secrets are kept out of committed records</p><!--]--></a><!----></div><!----></div><!--]--></div></section></div><!--]--><!--[--><!--]--></nav></aside><div class="VPContent has-sidebar" id="VPContent" data-v-f87bd3ac data-v-67e000d0><div class="VPDoc has-sidebar has-aside" data-v-67e000d0 data-v-f8622dbf><!--[--><!--]--><div class="container" data-v-f8622dbf><div class="aside" data-v-f8622dbf><div class="aside-curtain" data-v-f8622dbf></div><div class="aside-container" data-v-f8622dbf><div class="aside-content" data-v-f8622dbf><div class="VPDocAside" data-v-f8622dbf data-v-fc01c646><!--[--><!--]--><!--[--><!--]--><nav aria-labelledby="doc-outline-aria-label" class="VPDocAsideOutline" data-v-fc01c646 data-v-172fd98a><div class="content" data-v-172fd98a><div class="outline-marker" data-v-172fd98a></div><div aria-level="2" class="outline-title" id="doc-outline-aria-label" role="heading" data-v-172fd98a>On this page</div><ul class="VPDocOutlineItem root" data-v-172fd98a data-v-ea4171dd><!--[--><!--]--></ul></div></nav><!--[--><!--]--><div class="spacer" data-v-fc01c646></div><!--[--><!--]--><!----><!--[--><!--]--><!--[--><!--]--></div></div></div></div><div class="content" data-v-f8622dbf><div class="content-container" data-v-f8622dbf><!--[--><!--]--><main class="main" data-v-f8622dbf><div style="position:relative;" class="vp-doc _docs_docs_adr_0016-which-core-the-factory-repo-runs" data-v-f8622dbf><div><h1 id="which-core-the-factory-repo-runs" tabindex="-1">Which core the factory repo runs <a class="header-anchor" href="#which-core-the-factory-repo-runs" aria-label="Permalink to "Which core the factory repo runs""></a></h1><p>Accepted · 2026-10-14</p><h2 id="context" tabindex="-1">Context <a class="header-anchor" href="#context" aria-label="Permalink to "Context""></a></h2><p>This repo is also a project of the factory.</p><h2 id="criteria" tabindex="-1">Criteria <a class="header-anchor" href="#criteria" aria-label="Permalink to "Criteria""></a></h2><ol><li><strong>Built with the core it ships</strong>: with a published version, we would build with yesterday's core and learn about a regression only after releasing it.</li><li><strong>Committed like any project's</strong>: a project commits what <code>sync</code> generates (ADR-0003), and a fresh clone would otherwise have no review until someone syncs.</li><li><strong>Tried on real changes</strong>: the fixtures check the rendering, not whether the skills help on real changes.</li></ol><h2 id="options" tabindex="-1">Options <a class="header-anchor" href="#options" aria-label="Permalink to "Options""></a></h2><ul><li><strong>Pin a published version, as other projects do (ADR-0011).</strong> We would build with yesterday's core and learn about a regression only after releasing it (1).</li><li><strong>Render the <code>core/</code> of the same commit into a committed <code>.claude/</code>.</strong> The factory is built with the factory it ships (1, 3), and its <code>.claude/</code> is committed like any project's (2). A change to <code>core/</code> lands with the change to our own skills and agents, and that diff is part of the review.</li><li><strong>Leave the generated files uncommitted.</strong> A project commits what <code>sync</code> generates (ADR-0003), and a fresh clone would have no review until someone syncs (2).</li><li><strong>Rely on the fixtures alone.</strong> They check the rendering, not whether the skills help on real changes (3).</li></ul><h2 id="comparison" tabindex="-1">Comparison <a class="header-anchor" href="#comparison" aria-label="Permalink to "Comparison""></a></h2><table tabindex="0"><thead><tr><th>Option</th><th>1. Core it ships</th><th>2. Committed</th><th>3. Real changes</th></tr></thead><tbody><tr><td>Pin a published version</td><td>🔴</td><td>⚪</td><td>⚪</td></tr><tr><td>The same commit's <code>core/</code>, committed</td><td>🟢</td><td>🟢</td><td>🟢</td></tr><tr><td>Generated files uncommitted</td><td>⚪</td><td>🔴</td><td>⚪</td></tr><tr><td>The fixtures alone</td><td>⚪</td><td>⚪</td><td>🔴</td></tr></tbody></table><p>🟢 meets · 🟠 partly, or at a cost · 🔴 fails · ⚪ not discussed</p><h2 id="decision" tabindex="-1">Decision <a class="header-anchor" href="#decision" aria-label="Permalink to "Decision""></a></h2><p>Render the <code>core/</code> of the same commit into a committed <code>.claude/</code>. The repo's <code>.factory/</code> overlay targets Claude Code, and <code>bernard sync</code> renders the core into its <code>.claude/</code>, committed like any project's. It renders the <code>core/</code> of the same commit, not a published version, so the factory is built with the factory it ships.</p><p>CI runs <code>pnpm check:sync</code>, which fails when this repo's <code>.claude/</code> or a fixture no longer matches what <code>bernard sync</code> renders from <code>core/</code>. A change to <code>core/</code> therefore lands with the change to our own skills and agents, and that diff is part of the review.</p><h2 id="consequences" tabindex="-1">Consequences <a class="header-anchor" href="#consequences" aria-label="Permalink to "Consequences""></a></h2><ul><li>The overlay holds only what the core needs from this project: the harness, the project name, and three slots: the checks to run, the detector table, and the sources a finding may cite. Each reviewer keeps its default criteria until real reviews show which ones miss this repo.</li><li>The overlay sets no pipeline. This repo is not a migration, and no step runs headless until a harness driver exists. Running the ticket flow on this repo comes with that driver.</li><li>A change to the default pipeline that <code>sync</code> cannot render here fails CI like a broken fixture.</li></ul></div></div></main><footer class="VPDocFooter" data-v-f8622dbf data-v-020e2df0><!--[--><!--]--><div class="edit-info" data-v-020e2df0><div class="edit-link" data-v-020e2df0><a class="VPLink link vp-external-link-icon no-icon edit-link-button" href="https://github.com/theodo-group/bernard/edit/main/docs/adr/0016-which-core-the-factory-repo-runs.md" target="_blank" rel="noreferrer" data-v-020e2df0><!--[--><span class="vpi-square-pen edit-link-icon" data-v-020e2df0></span> Edit this page on GitHub<!--]--></a></div><!----></div><nav class="prev-next" aria-labelledby="doc-footer-aria-label" data-v-020e2df0><span class="visually-hidden" id="doc-footer-aria-label" data-v-020e2df0>Pager</span><div class="pager" data-v-020e2df0><a class="VPLink link pager-link prev" href="/docs/docs/adr/0015-how-a-project-shapes-its-ticket-flow.html" data-v-020e2df0><!--[--><span class="desc" data-v-020e2df0>Previous page</span><span class="title" data-v-020e2df0>0015 · How a project shapes its ticket flow</span><!--]--></a></div><div class="pager" data-v-020e2df0><a class="VPLink link pager-link next" href="/docs/docs/adr/0017-where-a-tickets-record-lives.html" data-v-020e2df0><!--[--><span class="desc" data-v-020e2df0>Next page</span><span class="title" data-v-020e2df0>0017 · Where a ticket's record lives</span><!--]--></a></div></nav></footer><!--[--><!--]--></div></div></div><!--[--><!--]--></div></div><!----><!--[--><!--]--></div></div>
|
|
27
|
+
<script>window.__VP_HASH_MAP__=JSON.parse("{\"claude.md\":\"BLSB-5gK\",\"context.md\":\"BovnvMGK\",\"contributing.md\":\"DwJsKrz3\",\"core_readme.md\":\"DyxYsikc\",\"demo_readme.md\":\"Cpi2pUU9\",\"docs_adr_0001-what-the-core-is-built-for.md\":\"BxOoMjST\",\"docs_adr_0002-which-harness-a-project-runs-on.md\":\"2GwF-nj0\",\"docs_adr_0003-how-core-content-reaches-each-harness.md\":\"BMWE00Mf\",\"docs_adr_0004-how-the-core-uses-external-tools.md\":\"B7dtE7MB\",\"docs_adr_0005-what-drives-the-pipeline.md\":\"DGn0CJeq\",\"docs_adr_0006-what-steps-hand-off-to-each-other.md\":\"BflT5ugJ\",\"docs_adr_0007-how-humans-take-part-in-the-pipeline.md\":\"CNX3gUD-\",\"docs_adr_0008-where-a-steps-reviewers-run.md\":\"aGbaBOpB\",\"docs_adr_0009-where-pipeline-state-and-handoffs-live.md\":\"C3tKmV-E\",\"docs_adr_0010-how-a-project-adapts-the-core.md\":\"Bp7N6tUE\",\"docs_adr_0011-how-the-factory-is-packaged-and-versioned.md\":\"BBJIwnqa\",\"docs_adr_0012-how-a-steps-failures-are-told-apart-and-routed.md\":\"uCyrBfug\",\"docs_adr_0013-when-code-lands.md\":\"oXgiobfz\",\"docs_adr_0014-what-a-step-may-change.md\":\"Zslg3bnJ\",\"docs_adr_0015-how-a-project-shapes-its-ticket-flow.md\":\"DNHMxwIT\",\"docs_adr_0016-which-core-the-factory-repo-runs.md\":\"CLN6LqBZ\",\"docs_adr_0017-where-a-tickets-record-lives.md\":\"jjUeM-ex\",\"docs_adr_0018-the-products-name.md\":\"6xaX9vDs\",\"docs_adr_0019-how-a-finding-is-answered-and-judged.md\":\"CKKoO9-3\",\"docs_adr_0020-how-an-interrupted-run-resumes.md\":\"DTIP-MBK\",\"docs_adr_0021-how-a-step-runs-in-its-workspace.md\":\"B2r3-FPg\",\"docs_adr_0022-who-names-the-branches.md\":\"DaVk8X0i\",\"docs_adr_0023-how-a-version-ships-before-npm.md\":\"C7-wuCbq\",\"docs_adr_0024-how-the-config-type-carries-its-docs.md\":\"CQmwhWXs\",\"docs_adr_0025-how-a-steps-handoff-is-written-and-checked.md\":\"CgXYdF2v\",\"docs_adr_0026-support-for-github-copilot.md\":\"DJsawm-R\",\"docs_adr_0027-which-forge-a-project-is-on.md\":\"CY0qy9xh\",\"docs_adr_0028-several-ticket-flows-in-one-pipeline.md\":\"oxffo2qg\",\"docs_adr_0029-the-branch-a-feature-works-on.md\":\"CrgkP6YJ\",\"docs_adr_0030-a-runner-without-coder.md\":\"CW8sF7jK\",\"docs_adr_0031-how-the-run-viewer-reads-its-runs.md\":\"opQYnVF2\",\"docs_adr_0032-how-a-project-gets-the-viewer.md\":\"DB9NjYJf\",\"docs_adr_0033-the-repos-license.md\":\"NPlkrPj8\",\"docs_adr_0034-how-code-review-launches-its-reviewers.md\":\"DSNpkfaL\",\"docs_adr_0035-how-the-package-is-published.md\":\"C1f4B5eb\",\"docs_adr_0036-what-the-cores-pull-request-skill-does.md\":\"op39HLAT\",\"docs_adr_0037-how-a-team-reads-the-factorys-documentation.md\":\"Dar_Xo4t\",\"docs_adr_0038-where-adapters-live.md\":\"CkVD3riv\",\"docs_adr_0039-the-repos-license.md\":\"C_rraWpb\",\"docs_adr_0040-how-a-version-is-released.md\":\"CCdwC07z\",\"docs_adr_0041-who-opens-the-features-pull-request.md\":\"qLu9WLaG\",\"docs_adr_0042-how-secrets-are-kept-out-of-committed-records.md\":\"DJWazI4H\",\"docs_getting-started.md\":\"BpQFS8Gr\",\"docs_github.md\":\"D4gkW71G\",\"docs_overlay.md\":\"DoWVb6OM\",\"docs_pipeline.md\":\"DdHywWSk\",\"docs_recipes.md\":\"8Xf6BsRA\",\"fixtures_readme.md\":\"DzbQ0hft\",\"index.md\":\"DHgL6CzS\",\"packages_docs_readme.md\":\"PV1a27nC\",\"packages_viewer_readme.md\":\"BynKZSdN\"}");window.__VP_SITE_DATA__=JSON.parse("{\"lang\":\"en-US\",\"dir\":\"ltr\",\"title\":\"Bernard the taktician\",\"description\":\"An agentic factory for new builds and legacy migrations.\",\"base\":\"/docs/\",\"head\":[],\"router\":{\"prefetchLinks\":true},\"appearance\":true,\"themeConfig\":{\"logo\":\"/bernard.svg\",\"siteTitle\":\"Bernard\",\"outline\":[2,3],\"search\":{\"provider\":\"local\"},\"nav\":[{\"text\":\"Guides\",\"link\":\"/docs/getting-started\"},{\"text\":\"Contributing\",\"link\":\"/CONTRIBUTING\"},{\"text\":\"Decisions\",\"link\":\"/docs/adr/0001-what-the-core-is-built-for\"}],\"sidebar\":[{\"text\":\"Bernard\",\"collapsed\":false,\"items\":[{\"text\":\"Overview\",\"link\":\"/\"},{\"text\":\"Vocabulary\",\"link\":\"/CONTEXT\"}]},{\"text\":\"Guides\",\"collapsed\":false,\"items\":[{\"text\":\"Getting started\",\"link\":\"/docs/getting-started\"},{\"text\":\"The overlay\",\"link\":\"/docs/overlay\"},{\"text\":\"Recipes\",\"link\":\"/docs/recipes\"},{\"text\":\"Pipeline\",\"link\":\"/docs/pipeline\"}]},{\"text\":\"Contributing\",\"collapsed\":false,\"items\":[{\"text\":\"Contributing\",\"link\":\"/CONTRIBUTING\"},{\"text\":\"Rules for agents\",\"link\":\"/CLAUDE\"},{\"text\":\"GitHub\",\"link\":\"/docs/github\"},{\"text\":\"Core content\",\"link\":\"/core/README\"},{\"text\":\"Run viewer\",\"link\":\"/packages/viewer/README\"},{\"text\":\"Documentation site\",\"link\":\"/packages/docs/README\"},{\"text\":\"Fixtures\",\"link\":\"/fixtures/README\"},{\"text\":\"Demo\",\"link\":\"/demo/README\"}]},{\"text\":\"Decisions\",\"collapsed\":true,\"items\":[{\"text\":\"0001 · What the core is built for\",\"link\":\"/docs/adr/0001-what-the-core-is-built-for\"},{\"text\":\"0002 · Which harness a project runs on\",\"link\":\"/docs/adr/0002-which-harness-a-project-runs-on\"},{\"text\":\"0003 · How core content reaches each harness\",\"link\":\"/docs/adr/0003-how-core-content-reaches-each-harness\"},{\"text\":\"0004 · How the core uses external tools\",\"link\":\"/docs/adr/0004-how-the-core-uses-external-tools\"},{\"text\":\"0005 · What drives the pipeline\",\"link\":\"/docs/adr/0005-what-drives-the-pipeline\"},{\"text\":\"0006 · What steps hand off to each other\",\"link\":\"/docs/adr/0006-what-steps-hand-off-to-each-other\"},{\"text\":\"0007 · How humans take part in the pipeline\",\"link\":\"/docs/adr/0007-how-humans-take-part-in-the-pipeline\"},{\"text\":\"0008 · Where a step's reviewers run\",\"link\":\"/docs/adr/0008-where-a-steps-reviewers-run\"},{\"text\":\"0009 · Where pipeline state and handoffs live\",\"link\":\"/docs/adr/0009-where-pipeline-state-and-handoffs-live\"},{\"text\":\"0010 · How a project adapts the core\",\"link\":\"/docs/adr/0010-how-a-project-adapts-the-core\"},{\"text\":\"0011 · How the factory is packaged and versioned\",\"link\":\"/docs/adr/0011-how-the-factory-is-packaged-and-versioned\"},{\"text\":\"0012 · How a step's failures are told apart and routed\",\"link\":\"/docs/adr/0012-how-a-steps-failures-are-told-apart-and-routed\"},{\"text\":\"0013 · When code lands\",\"link\":\"/docs/adr/0013-when-code-lands\"},{\"text\":\"0014 · What a step may change\",\"link\":\"/docs/adr/0014-what-a-step-may-change\"},{\"text\":\"0015 · How a project shapes its ticket flow\",\"link\":\"/docs/adr/0015-how-a-project-shapes-its-ticket-flow\"},{\"text\":\"0016 · Which core the factory repo runs\",\"link\":\"/docs/adr/0016-which-core-the-factory-repo-runs\"},{\"text\":\"0017 · Where a ticket's record lives\",\"link\":\"/docs/adr/0017-where-a-tickets-record-lives\"},{\"text\":\"0018 · The product's name\",\"link\":\"/docs/adr/0018-the-products-name\"},{\"text\":\"0019 · How a finding is answered and judged\",\"link\":\"/docs/adr/0019-how-a-finding-is-answered-and-judged\"},{\"text\":\"0020 · How an interrupted run resumes\",\"link\":\"/docs/adr/0020-how-an-interrupted-run-resumes\"},{\"text\":\"0021 · How a step runs in its workspace\",\"link\":\"/docs/adr/0021-how-a-step-runs-in-its-workspace\"},{\"text\":\"0022 · Who names the branches\",\"link\":\"/docs/adr/0022-who-names-the-branches\"},{\"text\":\"0023 · How a version ships before npm\",\"link\":\"/docs/adr/0023-how-a-version-ships-before-npm\"},{\"text\":\"0024 · How the config type carries its docs\",\"link\":\"/docs/adr/0024-how-the-config-type-carries-its-docs\"},{\"text\":\"0025 · How a step's handoff is written and checked\",\"link\":\"/docs/adr/0025-how-a-steps-handoff-is-written-and-checked\"},{\"text\":\"0026 · Support for GitHub Copilot\",\"link\":\"/docs/adr/0026-support-for-github-copilot\"},{\"text\":\"0027 · Which forge a project is on\",\"link\":\"/docs/adr/0027-which-forge-a-project-is-on\"},{\"text\":\"0028 · Several ticket flows in one pipeline\",\"link\":\"/docs/adr/0028-several-ticket-flows-in-one-pipeline\"},{\"text\":\"0029 · The branch a feature works on\",\"link\":\"/docs/adr/0029-the-branch-a-feature-works-on\"},{\"text\":\"0030 · A runner without Coder\",\"link\":\"/docs/adr/0030-a-runner-without-coder\"},{\"text\":\"0031 · How the run viewer reads its runs\",\"link\":\"/docs/adr/0031-how-the-run-viewer-reads-its-runs\"},{\"text\":\"0032 · How a project gets the viewer\",\"link\":\"/docs/adr/0032-how-a-project-gets-the-viewer\"},{\"text\":\"0033 · The repo's license\",\"link\":\"/docs/adr/0033-the-repos-license\"},{\"text\":\"0034 · How code review launches its reviewers\",\"link\":\"/docs/adr/0034-how-code-review-launches-its-reviewers\"},{\"text\":\"0035 · How the package is published\",\"link\":\"/docs/adr/0035-how-the-package-is-published\"},{\"text\":\"0036 · What the core's pull-request skill does\",\"link\":\"/docs/adr/0036-what-the-cores-pull-request-skill-does\"},{\"text\":\"0037 · How a team reads the factory's documentation\",\"link\":\"/docs/adr/0037-how-a-team-reads-the-factorys-documentation\"},{\"text\":\"0038 · Where adapters live\",\"link\":\"/docs/adr/0038-where-adapters-live\"},{\"text\":\"0039 · The repo's license\",\"link\":\"/docs/adr/0039-the-repos-license\"},{\"text\":\"0040 · How a version is released\",\"link\":\"/docs/adr/0040-how-a-version-is-released\"},{\"text\":\"0041 · Who opens the feature's pull request, and how a ticket reaches it\",\"link\":\"/docs/adr/0041-who-opens-the-features-pull-request\"},{\"text\":\"0042 · How secrets are kept out of committed records\",\"link\":\"/docs/adr/0042-how-secrets-are-kept-out-of-committed-records\"}]}],\"editLink\":{\"pattern\":\"https://github.com/theodo-group/bernard/edit/main/:path\",\"text\":\"Edit this page on GitHub\"}},\"locales\":{},\"scrollOffset\":134,\"cleanUrls\":false}");</script>
|
|
28
|
+
|
|
29
|
+
</body>
|
|
30
|
+
</html>
|