dorfl 0.1.1 → 0.2.0
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/dist/advance-ci-template.d.ts +3 -3
- package/dist/advance-ci-template.js +1 -1
- package/dist/advance-ci-template.js.map +1 -1
- package/dist/advance-classify.d.ts +5 -5
- package/dist/advance-classify.d.ts.map +1 -1
- package/dist/advance-classify.js +4 -4
- package/dist/advance-drivers.d.ts +8 -8
- package/dist/advance-drivers.d.ts.map +1 -1
- package/dist/advance-drivers.js +20 -8
- package/dist/advance-drivers.js.map +1 -1
- package/dist/advance-isolated.d.ts +3 -3
- package/dist/advance-isolated.d.ts.map +1 -1
- package/dist/advance-isolated.js +1 -1
- package/dist/advance-lifecycle-template.d.ts +2 -2
- package/dist/advance-lifecycle-template.d.ts.map +1 -1
- package/dist/advance-lifecycle-template.js +85 -13
- package/dist/advance-lifecycle-template.js.map +1 -1
- package/dist/advance-loop-driver.d.ts +3 -3
- package/dist/advance-loop-driver.d.ts.map +1 -1
- package/dist/advance-loop-driver.js +1 -1
- package/dist/advance-treeless-publish.d.ts +24 -1
- package/dist/advance-treeless-publish.d.ts.map +1 -1
- package/dist/advance-treeless-publish.js +41 -0
- package/dist/advance-treeless-publish.js.map +1 -1
- package/dist/advance.d.ts +69 -17
- package/dist/advance.d.ts.map +1 -1
- package/dist/advance.js +409 -102
- package/dist/advance.js.map +1 -1
- package/dist/advancing-lock.d.ts +31 -3
- package/dist/advancing-lock.d.ts.map +1 -1
- package/dist/advancing-lock.js +55 -5
- package/dist/advancing-lock.js.map +1 -1
- package/dist/agent-launch.d.ts +12 -0
- package/dist/agent-launch.d.ts.map +1 -1
- package/dist/agent-launch.js +22 -12
- package/dist/agent-launch.js.map +1 -1
- package/dist/agent-stop.d.ts +40 -2
- package/dist/agent-stop.d.ts.map +1 -1
- package/dist/agent-stop.js +30 -2
- package/dist/agent-stop.js.map +1 -1
- package/dist/apply-decide.d.ts +19 -5
- package/dist/apply-decide.d.ts.map +1 -1
- package/dist/apply-decide.js +38 -9
- package/dist/apply-decide.js.map +1 -1
- package/dist/apply-merge-action.d.ts +20 -8
- package/dist/apply-merge-action.d.ts.map +1 -1
- package/dist/apply-merge-action.js +44 -9
- package/dist/apply-merge-action.js.map +1 -1
- package/dist/apply-persist.d.ts +62 -31
- package/dist/apply-persist.d.ts.map +1 -1
- package/dist/apply-persist.js +173 -44
- package/dist/apply-persist.js.map +1 -1
- package/dist/apply-stuck-action.d.ts +151 -0
- package/dist/apply-stuck-action.d.ts.map +1 -0
- package/dist/apply-stuck-action.js +125 -0
- package/dist/apply-stuck-action.js.map +1 -0
- package/dist/brand.d.ts +12 -1
- package/dist/brand.d.ts.map +1 -1
- package/dist/brand.js +2 -1
- package/dist/brand.js.map +1 -1
- package/dist/buildable-body.d.ts +14 -14
- package/dist/buildable-body.js +9 -9
- package/dist/claim-cas.d.ts +3 -3
- package/dist/claim-cas.js +1 -1
- package/dist/claim-cas.js.map +1 -1
- package/dist/cli-spinner.d.ts +1 -1
- package/dist/cli-spinner.js +1 -1
- package/dist/cli.d.ts +10 -0
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +385 -128
- package/dist/cli.js.map +1 -1
- package/dist/close-job-template.d.ts +3 -3
- package/dist/close-job-template.js +9 -9
- package/dist/close-job.d.ts +8 -8
- package/dist/close-job.js +25 -25
- package/dist/close-job.js.map +1 -1
- package/dist/complete.d.ts +9 -6
- package/dist/complete.d.ts.map +1 -1
- package/dist/complete.js +99 -45
- package/dist/complete.js.map +1 -1
- package/dist/concurrency.d.ts +1 -1
- package/dist/concurrency.js +1 -1
- package/dist/config.d.ts +86 -40
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +61 -9
- package/dist/config.js.map +1 -1
- package/dist/continue-branch.d.ts +1 -1
- package/dist/continue-branch.d.ts.map +1 -1
- package/dist/continue-branch.js +23 -1
- package/dist/continue-branch.js.map +1 -1
- package/dist/cwd-section.js +1 -1
- package/dist/cwd-section.js.map +1 -1
- package/dist/decision-engine.d.ts +39 -11
- package/dist/decision-engine.d.ts.map +1 -1
- package/dist/decision-engine.js +10 -6
- package/dist/decision-engine.js.map +1 -1
- package/dist/do-autopick.d.ts +6 -6
- package/dist/do-autopick.d.ts.map +1 -1
- package/dist/do-autopick.js +16 -6
- package/dist/do-autopick.js.map +1 -1
- package/dist/do-config.d.ts +4 -4
- package/dist/do-config.js +3 -3
- package/dist/do-config.js.map +1 -1
- package/dist/do-remote-auto.d.ts +2 -2
- package/dist/do-remote-auto.js +1 -1
- package/dist/do.d.ts +74 -81
- package/dist/do.d.ts.map +1 -1
- package/dist/do.js +439 -50
- package/dist/do.js.map +1 -1
- package/dist/drop-source.d.ts +2 -2
- package/dist/env-config.d.ts.map +1 -1
- package/dist/env-config.js +19 -11
- package/dist/env-config.js.map +1 -1
- package/dist/failure-cause.d.ts +3 -2
- package/dist/failure-cause.d.ts.map +1 -1
- package/dist/failure-cause.js +28 -1
- package/dist/failure-cause.js.map +1 -1
- package/dist/format.d.ts +6 -6
- package/dist/format.d.ts.map +1 -1
- package/dist/format.js +13 -30
- package/dist/format.js.map +1 -1
- package/dist/frontmatter.d.ts +28 -15
- package/dist/frontmatter.d.ts.map +1 -1
- package/dist/frontmatter.js +38 -24
- package/dist/frontmatter.js.map +1 -1
- package/dist/gc.d.ts +65 -6
- package/dist/gc.d.ts.map +1 -1
- package/dist/gc.js +126 -9
- package/dist/gc.js.map +1 -1
- package/dist/github.d.ts +14 -0
- package/dist/github.d.ts.map +1 -1
- package/dist/github.js +73 -0
- package/dist/github.js.map +1 -1
- package/dist/harness.d.ts +25 -0
- package/dist/harness.d.ts.map +1 -1
- package/dist/harness.js.map +1 -1
- package/dist/index.d.ts +4 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -1
- package/dist/index.js.map +1 -1
- package/dist/install-ci-branch-protection.d.ts +133 -39
- package/dist/install-ci-branch-protection.d.ts.map +1 -1
- package/dist/install-ci-branch-protection.js +191 -49
- package/dist/install-ci-branch-protection.js.map +1 -1
- package/dist/install-ci-capabilities/advance-lifecycle.d.ts +1 -1
- package/dist/install-ci-capabilities/advance-lifecycle.js +1 -1
- package/dist/install-ci-capabilities/close-job.d.ts +1 -1
- package/dist/install-ci-capabilities/close-job.js +1 -1
- package/dist/install-ci-capabilities/example-noop.d.ts +1 -1
- package/dist/install-ci-capabilities/example-noop.js +1 -1
- package/dist/install-ci-capabilities/intake.d.ts +2 -2
- package/dist/install-ci-capabilities/intake.js +2 -2
- package/dist/install-ci-capabilities/verify.d.ts +1 -1
- package/dist/install-ci-capabilities/verify.js +1 -1
- package/dist/install-ci-core.d.ts +24 -4
- package/dist/install-ci-core.d.ts.map +1 -1
- package/dist/install-ci-core.js +12 -5
- package/dist/install-ci-core.js.map +1 -1
- package/dist/install-ci-github.d.ts +33 -1
- package/dist/install-ci-github.d.ts.map +1 -1
- package/dist/install-ci-github.js +74 -1
- package/dist/install-ci-github.js.map +1 -1
- package/dist/install-ci.d.ts +1 -1
- package/dist/install-ci.js +4 -4
- package/dist/install-ci.js.map +1 -1
- package/dist/install-skills.d.ts +123 -0
- package/dist/install-skills.d.ts.map +1 -0
- package/dist/install-skills.js +100 -0
- package/dist/install-skills.js.map +1 -0
- package/dist/intake-event.d.ts +6 -6
- package/dist/intake-event.js +6 -6
- package/dist/intake-marker.d.ts +3 -3
- package/dist/intake-marker.d.ts.map +1 -1
- package/dist/intake-triage.d.ts +1 -1
- package/dist/intake-triage.js +2 -2
- package/dist/intake-trigger-template.d.ts +8 -8
- package/dist/intake-trigger-template.d.ts.map +1 -1
- package/dist/intake-trigger-template.js +17 -17
- package/dist/intake-trigger-template.js.map +1 -1
- package/dist/intake.d.ts +65 -52
- package/dist/intake.d.ts.map +1 -1
- package/dist/intake.js +92 -76
- package/dist/intake.js.map +1 -1
- package/dist/integration-core.d.ts +27 -24
- package/dist/integration-core.d.ts.map +1 -1
- package/dist/integration-core.js +191 -77
- package/dist/integration-core.js.map +1 -1
- package/dist/integrator.d.ts +1 -1
- package/dist/integrator.d.ts.map +1 -1
- package/dist/integrator.js +19 -3
- package/dist/integrator.js.map +1 -1
- package/dist/isolation.d.ts +4 -4
- package/dist/isolation.d.ts.map +1 -1
- package/dist/isolation.js +9 -0
- package/dist/isolation.js.map +1 -1
- package/dist/issue-provider.d.ts +4 -4
- package/dist/issue-provider.js +1 -1
- package/dist/item-lock.d.ts +216 -149
- package/dist/item-lock.d.ts.map +1 -1
- package/dist/item-lock.js +345 -270
- package/dist/item-lock.js.map +1 -1
- package/dist/item-path.d.ts +2 -2
- package/dist/item-path.js +2 -2
- package/dist/ledger-lint.d.ts +9 -9
- package/dist/ledger-lint.js +9 -9
- package/dist/ledger-read.d.ts +57 -57
- package/dist/ledger-read.d.ts.map +1 -1
- package/dist/ledger-read.js +24 -24
- package/dist/ledger-read.js.map +1 -1
- package/dist/ledger-write.d.ts +33 -28
- package/dist/ledger-write.d.ts.map +1 -1
- package/dist/ledger-write.js +100 -122
- package/dist/ledger-write.js.map +1 -1
- package/dist/lifecycle-gather.d.ts +18 -1
- package/dist/lifecycle-gather.d.ts.map +1 -1
- package/dist/lifecycle-gather.js +23 -17
- package/dist/lifecycle-gather.js.map +1 -1
- package/dist/lifecycle-pools.d.ts +44 -7
- package/dist/lifecycle-pools.d.ts.map +1 -1
- package/dist/lifecycle-pools.js +27 -7
- package/dist/lifecycle-pools.js.map +1 -1
- package/dist/merge-question-surfacer.d.ts +18 -4
- package/dist/merge-question-surfacer.d.ts.map +1 -1
- package/dist/merge-question-surfacer.js +20 -5
- package/dist/merge-question-surfacer.js.map +1 -1
- package/dist/migrate-stuck-locks.d.ts +129 -0
- package/dist/migrate-stuck-locks.d.ts.map +1 -0
- package/dist/migrate-stuck-locks.js +355 -0
- package/dist/migrate-stuck-locks.js.map +1 -0
- package/dist/mint-adr.js +4 -4
- package/dist/mirror-pool-scan.d.ts +2 -2
- package/dist/mirror-pool-scan.js +3 -3
- package/dist/mirror-pool-scan.js.map +1 -1
- package/dist/needs-attention.d.ts +304 -27
- package/dist/needs-attention.d.ts.map +1 -1
- package/dist/needs-attention.js +542 -67
- package/dist/needs-attention.js.map +1 -1
- package/dist/orphan-sidecar.d.ts +10 -6
- package/dist/orphan-sidecar.d.ts.map +1 -1
- package/dist/orphan-sidecar.js +35 -2
- package/dist/orphan-sidecar.js.map +1 -1
- package/dist/pi-harness.d.ts +16 -0
- package/dist/pi-harness.d.ts.map +1 -1
- package/dist/pi-harness.js +82 -2
- package/dist/pi-harness.js.map +1 -1
- package/dist/placement.d.ts +8 -8
- package/dist/placement.js +3 -3
- package/dist/prd-to-spec.d.ts.map +1 -1
- package/dist/prd-to-spec.js +9 -5
- package/dist/prd-to-spec.js.map +1 -1
- package/dist/prompt.d.ts +16 -19
- package/dist/prompt.d.ts.map +1 -1
- package/dist/prompt.js +17 -19
- package/dist/prompt.js.map +1 -1
- package/dist/protocol/CLAIM-PROTOCOL.md +17 -10
- package/dist/protocol/REVIEW-PROTOCOL.md +4 -1
- package/dist/protocol/SURFACE-PROTOCOL.md +16 -2
- package/dist/protocol/TASKING-PROTOCOL.md +3 -1
- package/dist/protocol/WORK-CONTRACT.md +22 -18
- package/dist/protocol/task-template.md +1 -1
- package/dist/readiness.d.ts +1 -1
- package/dist/reap-branches.d.ts +12 -9
- package/dist/reap-branches.d.ts.map +1 -1
- package/dist/reap-branches.js +25 -7
- package/dist/reap-branches.js.map +1 -1
- package/dist/recover-isolated.d.ts +12 -0
- package/dist/recover-isolated.d.ts.map +1 -1
- package/dist/recover-isolated.js +6 -1
- package/dist/recover-isolated.js.map +1 -1
- package/dist/repo-config.d.ts +23 -2
- package/dist/repo-config.d.ts.map +1 -1
- package/dist/repo-config.js +64 -18
- package/dist/repo-config.js.map +1 -1
- package/dist/repo-mirror.d.ts.map +1 -1
- package/dist/repo-mirror.js +18 -2
- package/dist/repo-mirror.js.map +1 -1
- package/dist/review-gate.d.ts +3 -3
- package/dist/review-gate.d.ts.map +1 -1
- package/dist/review-gate.js +11 -10
- package/dist/review-gate.js.map +1 -1
- package/dist/review-verdict.d.ts +2 -2
- package/dist/review-verdict.d.ts.map +1 -1
- package/dist/review-verdict.js +2 -2
- package/dist/review-verdict.js.map +1 -1
- package/dist/run.d.ts +2 -2
- package/dist/run.d.ts.map +1 -1
- package/dist/run.js +58 -23
- package/dist/run.js.map +1 -1
- package/dist/scan.d.ts +26 -17
- package/dist/scan.d.ts.map +1 -1
- package/dist/scan.js +29 -15
- package/dist/scan.js.map +1 -1
- package/dist/select-order.d.ts +1 -1
- package/dist/select-priority.d.ts +14 -14
- package/dist/select-priority.d.ts.map +1 -1
- package/dist/select-priority.js +5 -5
- package/dist/select-priority.js.map +1 -1
- package/dist/sidecar-apply.js +1 -1
- package/dist/sidecar-apply.js.map +1 -1
- package/dist/sidecar.d.ts +47 -12
- package/dist/sidecar.d.ts.map +1 -1
- package/dist/sidecar.js +84 -4
- package/dist/sidecar.js.map +1 -1
- package/dist/skills/answer-questions/SKILL.md +89 -0
- package/dist/skills/capture-signal/SKILL.md +52 -0
- package/dist/skills/convert-from-prd-to-spec/SKILL.md +90 -0
- package/dist/skills/drive-tasks/SKILL.md +218 -0
- package/dist/skills/from-idea/SKILL.md +83 -0
- package/dist/skills/merge-prs/SKILL.md +70 -0
- package/dist/skills/orchestrate/SKILL.md +101 -0
- package/dist/skills/promote/SKILL.md +35 -0
- package/dist/skills/review/SKILL.md +16 -0
- package/dist/skills/setup/SKILL.md +258 -0
- package/dist/skills/setup/protocol/ADR-FORMAT.md +47 -0
- package/dist/skills/setup/protocol/CLAIM-PROTOCOL.md +224 -0
- package/dist/skills/setup/protocol/REVIEW-PROTOCOL.md +122 -0
- package/dist/skills/setup/protocol/SURFACE-PROTOCOL.md +135 -0
- package/dist/skills/setup/protocol/TASKING-PROTOCOL.md +124 -0
- package/dist/skills/setup/protocol/WORK-CONTRACT.md +280 -0
- package/dist/skills/setup/protocol/spec-template.md +71 -0
- package/dist/skills/setup/protocol/task-template.md +65 -0
- package/dist/skills/surface-questions/SKILL.md +16 -0
- package/dist/skills/to-spec/SKILL.md +34 -0
- package/dist/skills/to-task/SKILL.md +19 -0
- package/dist/skills/triage-observations/SKILL.md +78 -0
- package/dist/skills/work/SKILL.md +51 -0
- package/dist/slug-namespace.d.ts +6 -6
- package/dist/slug-namespace.js +8 -8
- package/dist/slug-namespace.js.map +1 -1
- package/dist/spec-complete.d.ts.map +1 -1
- package/dist/spec-complete.js +4 -5
- package/dist/spec-complete.js.map +1 -1
- package/dist/start.d.ts +1 -1
- package/dist/start.d.ts.map +1 -1
- package/dist/start.js +54 -60
- package/dist/start.js.map +1 -1
- package/dist/status.d.ts +3 -3
- package/dist/status.js +4 -4
- package/dist/status.js.map +1 -1
- package/dist/surface-gate.d.ts +2 -2
- package/dist/surface-gate.d.ts.map +1 -1
- package/dist/surface-gate.js +10 -3
- package/dist/surface-gate.js.map +1 -1
- package/dist/surface-persist.d.ts +2 -2
- package/dist/surface-persist.d.ts.map +1 -1
- package/dist/surface-persist.js +1 -1
- package/dist/surface-persist.js.map +1 -1
- package/dist/tasker-review-loop.d.ts +11 -10
- package/dist/tasker-review-loop.d.ts.map +1 -1
- package/dist/tasker-review-loop.js +8 -8
- package/dist/tasker-review-loop.js.map +1 -1
- package/dist/tasking-eligibility.d.ts +21 -21
- package/dist/tasking-eligibility.d.ts.map +1 -1
- package/dist/tasking-eligibility.js +10 -10
- package/dist/tasking-lock.d.ts +10 -10
- package/dist/tasking-lock.d.ts.map +1 -1
- package/dist/tasking-lock.js +69 -49
- package/dist/tasking-lock.js.map +1 -1
- package/dist/tasking.d.ts +73 -39
- package/dist/tasking.d.ts.map +1 -1
- package/dist/tasking.js +309 -95
- package/dist/tasking.js.map +1 -1
- package/dist/triage-gate.d.ts +1 -1
- package/dist/triage-persist.d.ts +15 -11
- package/dist/triage-persist.d.ts.map +1 -1
- package/dist/triage-persist.js +48 -18
- package/dist/triage-persist.js.map +1 -1
- package/dist/vendor/incur/agents.d.ts +58 -0
- package/dist/vendor/incur/agents.d.ts.map +1 -0
- package/dist/vendor/incur/agents.js +343 -0
- package/dist/vendor/incur/agents.js.map +1 -0
- package/dist/verify-workflow-template.d.ts +1 -1
- package/dist/verify-workflow-template.js +3 -3
- package/dist/watch-session.d.ts +11 -3
- package/dist/watch-session.d.ts.map +1 -1
- package/dist/watch-session.js +94 -7
- package/dist/watch-session.js.map +1 -1
- package/dist/work-layout.d.ts +15 -9
- package/dist/work-layout.d.ts.map +1 -1
- package/dist/work-layout.js +14 -9
- package/dist/work-layout.js.map +1 -1
- package/dist/workspace.d.ts +2 -2
- package/package.json +2 -2
- package/src/advance-ci-template.ts +4 -4
- package/src/advance-classify.ts +5 -5
- package/src/advance-drivers.ts +26 -13
- package/src/advance-isolated.ts +3 -3
- package/src/advance-lifecycle-template.ts +98 -13
- package/src/advance-loop-driver.ts +3 -3
- package/src/advance-treeless-publish.ts +46 -1
- package/src/advance.ts +495 -115
- package/src/advancing-lock.ts +102 -7
- package/src/agent-launch.ts +37 -12
- package/src/agent-stop.ts +60 -2
- package/src/apply-decide.ts +38 -9
- package/src/apply-merge-action.ts +49 -11
- package/src/apply-persist.ts +236 -62
- package/src/apply-stuck-action.ts +260 -0
- package/src/brand.ts +14 -2
- package/src/buildable-body.ts +14 -14
- package/src/claim-cas.ts +4 -4
- package/src/cli-spinner.ts +1 -1
- package/src/cli.ts +472 -141
- package/src/close-job-template.ts +9 -9
- package/src/close-job.ts +26 -26
- package/src/complete.ts +121 -63
- package/src/concurrency.ts +1 -1
- package/src/config.ts +143 -49
- package/src/continue-branch.ts +23 -1
- package/src/cwd-section.ts +1 -1
- package/src/decision-engine.ts +57 -19
- package/src/do-autopick.ts +21 -10
- package/src/do-config.ts +7 -7
- package/src/do-remote-auto.ts +2 -2
- package/src/do.ts +558 -85
- package/src/drop-source.ts +2 -2
- package/src/env-config.ts +19 -11
- package/src/failure-cause.ts +30 -1
- package/src/format.ts +13 -33
- package/src/frontmatter.ts +55 -35
- package/src/gc.ts +172 -9
- package/src/github.ts +78 -0
- package/src/harness.ts +25 -0
- package/src/index.ts +10 -0
- package/src/install-ci-branch-protection.ts +283 -58
- package/src/install-ci-capabilities/advance-lifecycle.ts +1 -1
- package/src/install-ci-capabilities/close-job.ts +1 -1
- package/src/install-ci-capabilities/example-noop.ts +1 -1
- package/src/install-ci-capabilities/intake.ts +2 -2
- package/src/install-ci-capabilities/verify.ts +1 -1
- package/src/install-ci-core.ts +34 -7
- package/src/install-ci-github.ts +87 -1
- package/src/install-ci.ts +4 -4
- package/src/install-skills.ts +166 -0
- package/src/intake-event.ts +6 -6
- package/src/intake-marker.ts +3 -3
- package/src/intake-triage.ts +2 -2
- package/src/intake-trigger-template.ts +18 -18
- package/src/intake.ts +138 -103
- package/src/integration-core.ts +234 -100
- package/src/integrator.ts +22 -9
- package/src/isolation.ts +13 -4
- package/src/issue-provider.ts +4 -4
- package/src/item-lock.ts +505 -361
- package/src/item-path.ts +2 -2
- package/src/ledger-lint.ts +9 -9
- package/src/ledger-read.ts +81 -81
- package/src/ledger-write.ts +137 -152
- package/src/lifecycle-gather.ts +45 -22
- package/src/lifecycle-pools.ts +71 -13
- package/src/merge-question-surfacer.ts +32 -8
- package/src/migrate-stuck-locks.ts +451 -0
- package/src/mint-adr.ts +4 -4
- package/src/mirror-pool-scan.ts +5 -5
- package/src/needs-attention.ts +877 -104
- package/src/orphan-sidecar.ts +49 -8
- package/src/pi-harness.ts +82 -2
- package/src/placement.ts +8 -8
- package/src/prd-to-spec.ts +13 -5
- package/src/prompt.ts +20 -25
- package/src/readiness.ts +1 -1
- package/src/reap-branches.ts +38 -14
- package/src/recover-isolated.ts +18 -1
- package/src/repo-config.ts +66 -17
- package/src/repo-mirror.ts +23 -1
- package/src/review-gate.ts +12 -11
- package/src/review-verdict.ts +3 -3
- package/src/run.ts +69 -23
- package/src/scan.ts +36 -22
- package/src/select-order.ts +1 -1
- package/src/select-priority.ts +15 -15
- package/src/sidecar-apply.ts +1 -1
- package/src/sidecar.ts +141 -14
- package/src/slug-namespace.ts +10 -10
- package/src/spec-complete.ts +4 -5
- package/src/start.ts +57 -63
- package/src/status.ts +7 -7
- package/src/surface-gate.ts +12 -5
- package/src/surface-persist.ts +3 -3
- package/src/tasker-review-loop.ts +18 -17
- package/src/tasking-eligibility.ts +21 -21
- package/src/tasking-lock.ts +75 -60
- package/src/tasking.ts +381 -135
- package/src/triage-gate.ts +1 -1
- package/src/triage-persist.ts +71 -27
- package/src/vendor/incur/LICENSE +21 -0
- package/src/vendor/incur/README.md +19 -0
- package/src/vendor/incur/agents.ts +392 -0
- package/src/verify-workflow-template.ts +3 -3
- package/src/watch-session.ts +102 -7
- package/src/work-layout.ts +14 -9
- package/src/workspace.ts +2 -2
|
@@ -49,15 +49,19 @@ work/
|
|
|
49
49
|
# ---- protocol/ — the protocol reference docs ----
|
|
50
50
|
protocol/ # WORK-CONTRACT.md, CLAIM-PROTOCOL.md, the templates, VERSION
|
|
51
51
|
|
|
52
|
-
# ---- TRANSIENT
|
|
53
|
-
# `in-progress` (claimed/building), `
|
|
54
|
-
#
|
|
55
|
-
#
|
|
56
|
-
# `
|
|
57
|
-
# `
|
|
58
|
-
#
|
|
59
|
-
#
|
|
60
|
-
#
|
|
52
|
+
# ---- TRANSIENT IN-FLIGHT HOLDS: NOT on `main` — on per-item lock refs ----
|
|
53
|
+
# `in-progress` (claimed/building), `tasking` (a spec being tasked), and
|
|
54
|
+
# `advancing` (a tick holding an item) are NOT `main` folders. They collapse
|
|
55
|
+
# into ONE per-item lock on a hidden `refs/dorfl/lock/<type>-<slug>` ref:
|
|
56
|
+
# `action: implement|task|advance` (+ holder/since). `LockState` is
|
|
57
|
+
# `'active'` ONLY (the `stuck` lock state was retired — see `needs-attention`
|
|
58
|
+
# below and the 2026-07-14 addendum to ADR `ledger-status-on-per-item-lock-refs`).
|
|
59
|
+
# The lock is the IN-FLIGHT ACTIVE HOLD only: real CAS mutual-exclusion for a
|
|
60
|
+
# running claim/build/task/advance, always released at end-of-leg (success OR
|
|
61
|
+
# bounce). A bounced "needs a human" item is surfaced on `main` (see below), not
|
|
62
|
+
# parked on the lock. A human reads in-flight holds via `dorfl status`/`scan`
|
|
63
|
+
# (which read the lock refs) and reads parked-on-`main` items by `ls`-ing
|
|
64
|
+
# `work/questions/` / `work/tasks/ready/`.
|
|
61
65
|
```
|
|
62
66
|
|
|
63
67
|
> **The two won't-proceed terminals use DIFFERENT words ON PURPOSE — `tasks/cancelled/` vs `specs/dropped/` — and it is a CORRECTNESS rule, not taste.** A task and a spec can share a slug, and a single shared bare-slug terminal (`work/dropped/<slug>.md`) would COLLIDE a dropped task and a dropped spec on the same path. Namespacing each regime's terminal under its own umbrella (`tasks/cancelled/<slug>.md`, `specs/dropped/<slug>.md`) gives each its own slug space, so the collision cannot happen. A dropped OBSERVATION needs no terminal — notes leave by deletion. (Every reader keys by `(umbrella, slug)`, never a bare slug, so `tasks/ready/foo.md` and `specs/ready/foo.md` legitimately co-exist.)
|
|
@@ -107,13 +111,13 @@ A spec rests in `work/specs/ready/` (the auto-task pool) and, when tasked into t
|
|
|
107
111
|
|
|
108
112
|
Every durable `main` move (a task's `tasks/ready → tasks/done`, a spec's `specs/ready → specs/tasked`, a `tasks/ready → tasks/cancelled`) is a LAND, and every land is the same mode-agnostic primitive: **fetch current `main` → rebase the work onto it → re-run `verify` (and review) on the rebased tree → advance.** A lost CAS / moved-`main` between gate and push INVALIDATES any prior green and re-arms the gate (re-rebase, re-`verify`, retry — never a `--force`, never an auto-resolved conflict). Merge mode runs it inline at the serialised land; propose mode runs it at the human checkpoint. Human review is ADDITIVE (intent/design/security), NEVER a substitute for the re-verify on the rebased tree. The durable _why_ — a clean `git` merge validates the AUTHORED context, never the LIVED context — lives in ADR `land-primitive-rebase-reverify-advance`.
|
|
109
113
|
|
|
110
|
-
### `needs-attention` — the post-claim "
|
|
114
|
+
### `needs-attention` — the post-claim "couldn't finish" state (surfaced on `main` as `needsAnswers:true` + a `stuck`-kind sidecar)
|
|
111
115
|
|
|
112
|
-
An item that was claimed and _attempted_ but could not complete is
|
|
116
|
+
An item that was claimed and _attempted_ but could not complete is SURFACED ON `main` as a question sidecar instead of reaching `tasks/done/`. This is the single home for every "couldn't finish, a human must look" outcome — a failed acceptance gate (red tests), a rebase/merge conflict, a task the agent found too ambiguous to build, a timeout, or a rejected review. It is NOT a `main` folder move of the item, and (post `retire-stuck-lock-state`, spec `surface-stuck-as-questions-and-retire-stuck-lock-state`) it is NOT a lock state either. The bounce is ONE crash-safe transition: write / update `work/questions/<type>-<slug>.md` (a `stuck`-kind sidecar) with the reason (+ any agent-surfaced questions), set `needsAnswers: true` on the item body on `main`, then RELEASE the lock. The item body never moves (it rests in `tasks/ready/`, since claim does not relocate it). See the 2026-07-14 addendum to ADR `ledger-status-on-per-item-lock-refs`.
|
|
113
117
|
|
|
114
|
-
- **Who marks it:** the runner/human that owns the lock transitions — NOT the build agent (which never touches the lock ref). On a
|
|
115
|
-
- **Not claimable:** a
|
|
116
|
-
- **Resolve / return path:** a human
|
|
118
|
+
- **Who marks it:** the runner/human that owns the lock + `main` transitions — NOT the build agent (which never touches the lock ref or `main`). On a bounced job the runner writes the sidecar + flips `needsAnswers`, RELEASES the lock, and SAVES the recoverable work as a wip commit on the kept `work/<type>-<slug>` branch (pushed to the arbiter so it travels cross-machine).
|
|
119
|
+
- **Not claimable:** a `needsAnswers:true` item is `eligible:false` by construction, so it is not auto-picked; it IS visible — in `ls work/questions/`, in `git clone`, and in `dorfl status`/`scan`. `tasks/done/` on `main` and a `needsAnswers:true` `tasks/ready/` body cannot legitimately co-exist for the same slug (a bounce releases the lock cleanly; the two-substrate `done + stuck` co-existence case the pre-retirement lock had is gone).
|
|
120
|
+
- **Resolve / return path:** a human ANSWERS the sidecar; the existing apply rung drains the answer — `resolve` (continue: clear `needsAnswers` + delete the sidecar; the `work/<type>-<slug>` branch is left UNTOUCHED so the next claim continues from its tip), `resolve` + `resolveReset` (reset: delete the `work/<type>-<slug>` branch, then continue), or `dispose` (regime-polymorphic terminal: task → `git mv tasks/cancelled/`, spec → `git mv specs/dropped/`, observation → `git rm`). The direct human verbs `resume` / `requeue <slug>` / `release-lock` still work; they now target an in-flight or crash-orphan `active` lock, not a `stuck` lock. A crash-orphaned lock (the only class that can outlive a leg) is nameable and clearable via `release-lock <item>` (+ an orphan-lock report in `gc --ledger`); a lock whose entry name is NOT derivable from any current item-form (a pre-vocabulary-cutover `slice-<slug>` / `prd-<slug>` prefix, or a future rename) is cleared via `release-lock --entry <literal>`, which `gc --ledger` surfaces the exact invocation for — no raw `git push origin --delete refs/dorfl/lock/…` needed. There is no liveness heartbeat and no auto-sweep (a human asserts a lock is dead).
|
|
117
121
|
- This is a _post-claim_ state. (A separate _pre-claim_ "not ready" state is the STAGING folder `tasks/backlog/` — the position gate — not this.)
|
|
118
122
|
- **Branch self-conflicts cannot occur by construction.** Because NO transient status lands on `main` (a bounce is a lock amend, not a `git mv`), a work branch cut from `main` inherits no `needs-attention`/`tasking`/`advancing` markers, so a continue/rebase is a PLAIN rebase with nothing to drop. A genuine content conflict between two real lines of development still aborts → the item is marked stuck.
|
|
119
123
|
|
|
@@ -123,7 +127,7 @@ A spec and a task are **launch snapshots** — they capture intent at creation a
|
|
|
123
127
|
|
|
124
128
|
**Discipline (applies whenever you investigate / task / claim / build):** before acting, **check the doc against reality** — the code in `tasks/done/`, the relevant ADRs, and sibling tasks it depends on. If you find a discrepancy that would make you build/task against a false premise, that is a **needs-attention candidate — do NOT silently proceed on the stale spec.** Route it per the item's kind:
|
|
125
129
|
|
|
126
|
-
- **A TASK that contradicts current reality** → route to needs-attention (
|
|
130
|
+
- **A TASK that contradicts current reality** → route to needs-attention (surface a `work/questions/task-<slug>.md` sidecar + set `needsAnswers: true` on the task body + release the lock) with the discrepancy as the reason (the same mechanism as a red gate), rather than building on a stale assumption. A human answers the sidecar; the apply rung dispatches (`resolve` → continue, `dispose` → `tasks/cancelled/`). The body already rests in `tasks/ready/`. (Building on a stale task produces wrong-but-compiling work — the worst outcome.)
|
|
127
131
|
- **A SPEC that has drifted** (before tasking) → do NOT task it as-is. Set `needsAnswers: true` on the spec with the discrepancy in its body (or, if it is a small factual correction you are certain of, fix the spec first), so the tasker never emits tasks from a stale spec. A human reconciles, clears the flag, then it is tasked.
|
|
128
132
|
- **A SPEC that has drifted AFTER it was TASKED** (a mechanism it assumed got retired, a sibling decision superseded it) → do **NOT** move it back to `specs/proposed/`. `specs/proposed/` is the untrusted-admission STAGING position; moving an already-tasked spec there falsely un-records a tasking that really happened and ORPHANS the tasks it already emitted (they still sit in `tasks/backlog`/`tasks/ready` carrying `spec:`/`covers:` linkage to a spec that now claims it was never tasked). Tasked-ness is RESIDENCE in `specs/tasked/` and must never be silently rewound. Instead, two honest mechanisms (use the lighter one that fits):
|
|
129
133
|
- **Annotate in place (drifted, not yet re-decomposed).** Set `needsAnswers: true` on the spec **while it stays in `specs/tasked/`**, with the drift + what must be re-decomposed in its body, AND set `needsAnswers: true` on every emitted task that is now premised on the dead mechanism so no agent builds it. `needsAnswers: true` on a `specs/tasked/` spec is legal and means exactly _"tasked, but the spec has drifted — do not RE-task or rely on it until reconciled."_ The non-drifted emitted tasks are unaffected and stay promotable.
|
|
@@ -160,7 +164,7 @@ All frontmatter and config field names are **camelCase** (`humanOnly`, `needsAns
|
|
|
160
164
|
---
|
|
161
165
|
title: Human Readable Title
|
|
162
166
|
slug: historical-store-schema
|
|
163
|
-
spec: historical-store # slug of the work/specs/ready/<slug>.md this task derives from. REQUIRED iff `covers` is set; OMIT for a self-contained chore/refactor (covers: []).
|
|
167
|
+
spec: historical-store # slug of the work/specs/ready/<slug>.md this task derives from. REQUIRED iff `covers` is set; OMIT for a self-contained chore/refactor (covers: []).
|
|
164
168
|
humanOnly: true # gate axis 1 (DECIDED): a human must drive this. true | omitted. MOST OMIT IT.
|
|
165
169
|
needsAnswers: true # gate axis 2 (DISCOVERED): open questions block autonomous work. true | omitted.
|
|
166
170
|
blockedBy: [] # list of slugs that must reach tasks/done/ first; [] = startable now
|
|
@@ -217,7 +221,7 @@ The `promptGuidance` NAMESPACE is a per-repo + per-item layer of PROMPT-TEXT NUD
|
|
|
217
221
|
The repo policy resolves like every other gate-family field: **CLI flag > env (`DORFL_PROMPT_GUIDANCE_TEST_FIRST`) > per-repo config > global config > built-in default (`false`)**. On top of THAT, a single task or spec may OVERRIDE the resolved repo policy for THAT item only by setting `promptGuidance.<member>: true | false` in its frontmatter — the same repo-default-plus-item-override shape `humanOnly`/`autoBuild` use. The per-item precedence chain (highest → lowest) is:
|
|
218
222
|
|
|
219
223
|
1. **Per-task frontmatter** — the task's own `promptGuidance.<member>` line (when present).
|
|
220
|
-
2. **Per-spec frontmatter** — the spec's `promptGuidance.<member>` line, consulted ONLY when the task carries a `spec:`
|
|
224
|
+
2. **Per-spec frontmatter** — the spec's `promptGuidance.<member>` line, consulted ONLY when the task carries a `spec:` and the spec file is found in `work/specs/ready/` or `work/specs/tasked/`.
|
|
221
225
|
3. **Repo-resolved policy** — the value the chain above resolves to, with the built-in default `false`.
|
|
222
226
|
|
|
223
227
|
Each nudge member resolves INDEPENDENTLY — a task's `promptGuidance.testFirst` override never bleeds into a sibling member. A task with no `spec:` (a self-contained chore) MAY still carry the override; the spec layer is simply absent and the chain reads task ⇒ repo. A missing spec file is NOT an error: the override is OPTIONAL by design, so the chain silently falls through to the repo policy. Form: the frontmatter parser reads the DOTTED scalar form `promptGuidance.<member>: <bool>` (a single line, mirroring the flat shape `humanOnly`/`needsAnswers` use at the item level); a mistyped value (e.g. `"yes"`) reads as undefined — the same silent-on-malformed behaviour `humanOnly` has — never a silent coerce.
|
|
@@ -266,7 +270,7 @@ It waits on **tasked-ness (`work/specs/tasked/`), not `tasks/done/`** on purpose
|
|
|
266
270
|
|
|
267
271
|
### The `spec` link (required _when `covers` is set_)
|
|
268
272
|
|
|
269
|
-
`spec` names the source document this task was tasked from — the slug of a `work/specs/ready/<slug>.md` in the same repo.
|
|
273
|
+
`spec` names the source document this task was tasked from — the slug of a `work/specs/ready/<slug>.md` in the same repo. Its load-bearing job is to make `covers` unambiguous: `covers: [4]` means nothing without knowing _which_ spec's story 4. So the requirement tracks that job:
|
|
270
274
|
|
|
271
275
|
- **`spec` is REQUIRED iff `covers` is non-empty.** Any task that points into spec user stories MUST name the spec those numbers belong to (a task spanning multiple specs names its primary one in `spec` and references the others in prose).
|
|
272
276
|
- **`spec` MAY be omitted for a self-contained task** — a refactor, chore, build fix, or dependency bump that derives from no spec and covers no user stories (`covers: []`). Such a task MUST instead carry a clear, standalone _What to build_ + _Prompt_ (it is its own source of truth). This is **in contract** — not all work is feature work; only _feature_ work flows from a spec.
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
title: <Human Readable Title>
|
|
3
3
|
slug: <url-safe-slug>
|
|
4
|
-
spec: <source-spec-slug> # slug of the work/specs/ready/<slug>.md this task derives from. REQUIRED iff `covers` is set; OMIT for a self-contained chore/refactor (covers: []).
|
|
4
|
+
spec: <source-spec-slug> # slug of the work/specs/ready/<slug>.md this task derives from. REQUIRED iff `covers` is set; OMIT for a self-contained chore/refactor (covers: []).
|
|
5
5
|
# humanOnly: true # gate axis 1 (DECIDED, NARROW): NEVER-for-agents BY NATURE (secrets/release/security). Survives even in the pool work/tasks/ready/. OMIT otherwise — "review this before the agent builds" is the POSITION's job (the task is BIRTHED in work/tasks/backlog/), NOT humanOnly's.
|
|
6
6
|
# needsAnswers: true # gate axis 2 (DISCOVERED): open questions block autonomous work. OMIT otherwise. List them in the body.
|
|
7
7
|
# promptGuidance.testFirst: true # optional per-item NUDGE override: pin the test-first nudge ON (true) or OFF (false) for THIS task, regardless of the repo's resolved policy. OMIT to inherit (spec, else repo). NEVER an acceptance criterion — `verify` still decides pass/fail.
|
package/dist/readiness.d.ts
CHANGED
|
@@ -12,7 +12,7 @@
|
|
|
12
12
|
* the shared {@link resolveBlockedBy} (no reimplemented dep resolution).
|
|
13
13
|
*
|
|
14
14
|
* The two axes are deliberately treated differently (see WORK-CONTRACT and the
|
|
15
|
-
* task
|
|
15
|
+
* task spec):
|
|
16
16
|
*
|
|
17
17
|
* - `blockedBy` unmet is a FACTUAL prerequisite (the dep work does not exist
|
|
18
18
|
* yet) → REFUSE by default. An override flag is the human escape hatch.
|
package/dist/reap-branches.d.ts
CHANGED
|
@@ -5,13 +5,15 @@
|
|
|
5
5
|
* the arbiter after their propose-mode PR has MERGED.
|
|
6
6
|
*
|
|
7
7
|
* The safety lynchpin is the SAME provably-merged predicate the worktree reaper
|
|
8
|
-
* uses (`gc.ts` `
|
|
9
|
-
* `work/<slug>` branch is reapable **iff**
|
|
10
|
-
* `git merge-base --is-ancestor <tip> <arbiter>/main`
|
|
11
|
-
*
|
|
12
|
-
*
|
|
13
|
-
*
|
|
14
|
-
*
|
|
8
|
+
* uses (`gc.ts` `isProvablyMergedForReap`, REUSED here, never a second one): a
|
|
9
|
+
* remote `work/<slug>` branch is reapable **iff** it is provably on
|
|
10
|
+
* `<arbiter>/main` — EITHER `git merge-base --is-ancestor <tip> <arbiter>/main`
|
|
11
|
+
* (fast path) OR the squash-aware fallback (durable done/dropped record on main
|
|
12
|
+
* AND branch carries nothing main lacks). A merely-pushed-but-unmerged branch
|
|
13
|
+
* (an in-flight, kept-for-continue recovery point) has no terminal record on
|
|
14
|
+
* main AND is not an ancestor, so the predicate AUTOMATICALLY excludes it — the
|
|
15
|
+
* never-delete-the-in-flight-branch invariant (ADR §4 deletion-safety) stays
|
|
16
|
+
* absolute. Deletion of a fully-merged ref needs NO force, so this NEVER
|
|
15
17
|
* `--force`s.
|
|
16
18
|
*
|
|
17
19
|
* It is provider-AGNOSTIC plain git (`git ls-remote` to enumerate, `git push
|
|
@@ -83,8 +85,9 @@ export interface SweepRemoteBranchesResult {
|
|
|
83
85
|
* 2. Fetch `<arbiter>/main` into a local tracking ref so the ancestor check
|
|
84
86
|
* resolves the descendant LOCALLY; fetch each candidate tip object too (so
|
|
85
87
|
* `merge-base` can read it) — best-effort, into a scratch ref.
|
|
86
|
-
* 3. For each branch
|
|
87
|
-
*
|
|
88
|
+
* 3. For each branch that is provably merged for reap (fast-path ancestor
|
|
89
|
+
* OR squash-aware fallback — {@link isProvablyMergedForReap}) ⇒ delete
|
|
90
|
+
* via `git push <arbiter> --delete <branch>`; else retain with a reason.
|
|
88
91
|
*/
|
|
89
92
|
export declare function sweepRemoteMergedBranches(input: SweepRemoteBranchesInput): SweepRemoteBranchesResult;
|
|
90
93
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"reap-branches.d.ts","sourceRoot":"","sources":["../src/reap-branches.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"reap-branches.d.ts","sourceRoot":"","sources":["../src/reap-branches.ts"],"names":[],"mappings":"AAKA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AAEH,4EAA4E;AAC5E,MAAM,MAAM,kBAAkB,GAC3B,YAAY,GACZ,iBAAiB,CAAC;AAErB,kFAAkF;AAClF,eAAO,MAAM,yBAAyB,EAAE,MAAM,CAAC,kBAAkB,EAAE,MAAM,CAKxE,CAAC;AAEF,wEAAwE;AACxE,MAAM,WAAW,YAAY;IAC5B,2CAA2C;IAC3C,MAAM,EAAE,MAAM,CAAC;IACf,gEAAgE;IAChE,GAAG,EAAE,MAAM,CAAC;CACZ;AAED,oFAAoF;AACpF,MAAM,WAAW,cAAc;IAC9B,MAAM,EAAE,MAAM,CAAC;IACf,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,kBAAkB,CAAC;IAC3B,wEAAwE;IACxE,UAAU,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,wBAAwB;IACxC;;;;OAIG;IACH,GAAG,EAAE,MAAM,CAAC;IACZ,mFAAmF;IACnF,OAAO,EAAE,MAAM,CAAC;IAChB,6EAA6E;IAC7E,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;IACjC;;;;OAIG;IACH,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,CAAC;CACxB;AAED,MAAM,WAAW,yBAAyB;IACzC,iFAAiF;IACjF,MAAM,EAAE,YAAY,EAAE,CAAC;IACvB,8DAA8D;IAC9D,QAAQ,EAAE,cAAc,EAAE,CAAC;IAC3B,6EAA6E;IAC7E,SAAS,EAAE,YAAY,EAAE,CAAC;CAC1B;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAgB,yBAAyB,CACxC,KAAK,EAAE,wBAAwB,GAC7B,yBAAyB,CAiG3B;AAeD;;;;;;;GAOG;AACH,wBAAgB,sBAAsB,CACrC,GAAG,EAAE,MAAM,EACX,OAAO,EAAE,MAAM,EACf,GAAG,EAAE,MAAM,CAAC,UAAU,GAAG,SAAS,GAChC,KAAK,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,MAAM,CAAA;CAAC,CAAC,CA4BtC"}
|
package/dist/reap-branches.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { run } from './git.js';
|
|
2
|
-
import {
|
|
2
|
+
import { isProvablyMergedForReap } from './gc.js';
|
|
3
3
|
import { parseWorkBranchRef } from './slug-namespace.js';
|
|
4
4
|
/** Human-readable text for each remote-branch retain reason (`sweep` reports). */
|
|
5
5
|
export const REMOTE_RETAIN_REASON_TEXT = {
|
|
@@ -21,8 +21,9 @@ export const REMOTE_RETAIN_REASON_TEXT = {
|
|
|
21
21
|
* 2. Fetch `<arbiter>/main` into a local tracking ref so the ancestor check
|
|
22
22
|
* resolves the descendant LOCALLY; fetch each candidate tip object too (so
|
|
23
23
|
* `merge-base` can read it) — best-effort, into a scratch ref.
|
|
24
|
-
* 3. For each branch
|
|
25
|
-
*
|
|
24
|
+
* 3. For each branch that is provably merged for reap (fast-path ancestor
|
|
25
|
+
* OR squash-aware fallback — {@link isProvablyMergedForReap}) ⇒ delete
|
|
26
|
+
* via `git push <arbiter> --delete <branch>`; else retain with a reason.
|
|
26
27
|
*/
|
|
27
28
|
export function sweepRemoteMergedBranches(input) {
|
|
28
29
|
const note = input.note ?? (() => { });
|
|
@@ -41,11 +42,28 @@ export function sweepRemoteMergedBranches(input) {
|
|
|
41
42
|
retain(retained, note, branch, tip, 'main-unresolved');
|
|
42
43
|
continue;
|
|
43
44
|
}
|
|
44
|
-
// Make the candidate tip OBJECT readable locally so `merge-base`
|
|
45
|
-
// (ls-remote gave us the sha, but the
|
|
45
|
+
// Make the candidate tip OBJECT readable locally so `merge-base` /
|
|
46
|
+
// `diff` / `cherry` can read it (ls-remote gave us the sha, but the
|
|
47
|
+
// object may not be in the local repo).
|
|
46
48
|
fetchScratch(input.cwd, input.arbiter, branch, env);
|
|
47
|
-
|
|
48
|
-
|
|
49
|
+
const parsed = parseWorkBranchRef(branch);
|
|
50
|
+
if (parsed === undefined) {
|
|
51
|
+
// Guarded above by `listRemoteWorkBranches` (which only enumerates
|
|
52
|
+
// parseable heads), but keep a defensive belt: without a slug the
|
|
53
|
+
// squash-aware fallback has no anchor ⇒ retain.
|
|
54
|
+
retain(retained, note, branch, tip, 'not-merged');
|
|
55
|
+
continue;
|
|
56
|
+
}
|
|
57
|
+
if (!isProvablyMergedForReap({
|
|
58
|
+
cwd: input.cwd,
|
|
59
|
+
tip,
|
|
60
|
+
arbiterMain: mainRef,
|
|
61
|
+
namespace: parsed.namespace,
|
|
62
|
+
slug: parsed.slug,
|
|
63
|
+
env,
|
|
64
|
+
})) {
|
|
65
|
+
// NOT provably merged (neither ancestor nor squash-aware equivalent)
|
|
66
|
+
// ⇒ still in-flight ⇒ NEVER delete (the invariant).
|
|
49
67
|
retain(retained, note, branch, tip, 'not-merged');
|
|
50
68
|
continue;
|
|
51
69
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"reap-branches.js","sourceRoot":"","sources":["../src/reap-branches.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,GAAG,EAAC,MAAM,UAAU,CAAC;AAC7B,OAAO,EAAC,
|
|
1
|
+
{"version":3,"file":"reap-branches.js","sourceRoot":"","sources":["../src/reap-branches.ts"],"names":[],"mappings":"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"}
|
|
@@ -14,6 +14,18 @@ export interface RecoverIsolatedOptions {
|
|
|
14
14
|
integration?: IntegrationMode;
|
|
15
15
|
/** Suppress the PR on the propose path (push the branch, open no review request). */
|
|
16
16
|
noPR?: boolean;
|
|
17
|
+
/**
|
|
18
|
+
* **The cross-job merge-serialiser CAS-retry cap** (config `mergeRetries`, spec
|
|
19
|
+
* `land-time-reverify-and-parallel-merge-ceiling` Story 5 / Applied Answer q1
|
|
20
|
+
* (a)). Threaded VERBATIM into {@link performIntegration} so a wide-matrix CI's
|
|
21
|
+
* raised cap actually reaches the cross-job land queue on the isolated-recovery
|
|
22
|
+
* path too (task `thread-merge-retries-cross-task-and-ratify-default`). Resolved
|
|
23
|
+
* ONCE at the CLI (the `complete --isolated` command) through the SAME
|
|
24
|
+
* gate-family precedence chain the plain `complete` path uses (flag > env >
|
|
25
|
+
* per-repo > global > default). Unset ⇒ the engine's `DEFAULT_MERGE_RETRIES =
|
|
26
|
+
* 1000` (byte-for-byte unchanged).
|
|
27
|
+
*/
|
|
28
|
+
mergeRetries?: number;
|
|
17
29
|
/** Optional fully-formed provider used verbatim (test/embedding seam). */
|
|
18
30
|
providerInstance?: ReviewProvider;
|
|
19
31
|
/** Optional injectable PR opener (legacy bridge); used in `propose` mode. */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"recover-isolated.d.ts","sourceRoot":"","sources":["../src/recover-isolated.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAC,eAAe,EAAC,MAAM,aAAa,CAAC;AACjD,OAAO,KAAK,EAAC,cAAc,EAAC,MAAM,iBAAiB,CAAC;AA8BpD,MAAM,MAAM,sBAAsB,GAC/B,WAAW,GACX,oBAAoB,GACpB,oBAAoB,GACpB,iBAAiB,GACjB,aAAa,CAAC;AAEjB,MAAM,WAAW,sBAAsB;IACtC,oFAAoF;IACpF,IAAI,EAAE,MAAM,CAAC;IACb,uFAAuF;IACvF,GAAG,EAAE,MAAM,CAAC;IACZ,uEAAuE;IACvE,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,qFAAqF;IACrF,aAAa,EAAE,MAAM,CAAC;IACtB,wDAAwD;IACxD,WAAW,CAAC,EAAE,eAAe,CAAC;IAC9B,qFAAqF;IACrF,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,0EAA0E;IAC1E,gBAAgB,CAAC,EAAE,cAAc,CAAC;IAClC,6EAA6E;IAC7E,MAAM,CAAC,EAAE,CAAC,IAAI,EAAE;QACf,GAAG,EAAE,MAAM,CAAC;QACZ,MAAM,EAAE,MAAM,CAAC;QACf,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,CAAC;KACxB,KAAK,IAAI,CAAC;IACX,8EAA8E;IAC9E,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,CAAC;IACxB,8CAA8C;IAC9C,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;CACjC;AAED,MAAM,WAAW,qBAAqB;IACrC,QAAQ,EAAE,CAAC,GAAG,CAAC,CAAC;IAChB,OAAO,EAAE,sBAAsB,CAAC;IAChC,uEAAuE;IACvE,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,uEAAuE;IACvE,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,iFAAiF;IACjF,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,wDAAwD;IACxD,OAAO,EAAE,MAAM,CAAC;CAChB;AAED;;;;;;;;GAQG;AACH,wBAAgB,sBAAsB,CAAC,MAAM,EAAE;IAC9C,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,MAAM,CAAC;IACZ,OAAO,EAAE,MAAM,CAAC;IAChB,aAAa,EAAE,MAAM,CAAC;IACtB,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,CAAC;CACxB,GACE;IAAC,GAAG,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,IAAI,CAAA;CAAC,GAChD;IAAC,OAAO,EAAE,KAAK,CAAA;CAAC,GAChB;IACA,KAAK,EAAE,MAAM,CAAC;CACb,CAmBH;AAED;;;;GAIG;AACH,wBAAsB,sBAAsB,CAC3C,OAAO,EAAE,sBAAsB,GAC7B,OAAO,CAAC,qBAAqB,CAAC,
|
|
1
|
+
{"version":3,"file":"recover-isolated.d.ts","sourceRoot":"","sources":["../src/recover-isolated.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAC,eAAe,EAAC,MAAM,aAAa,CAAC;AACjD,OAAO,KAAK,EAAC,cAAc,EAAC,MAAM,iBAAiB,CAAC;AA8BpD,MAAM,MAAM,sBAAsB,GAC/B,WAAW,GACX,oBAAoB,GACpB,oBAAoB,GACpB,iBAAiB,GACjB,aAAa,CAAC;AAEjB,MAAM,WAAW,sBAAsB;IACtC,oFAAoF;IACpF,IAAI,EAAE,MAAM,CAAC;IACb,uFAAuF;IACvF,GAAG,EAAE,MAAM,CAAC;IACZ,uEAAuE;IACvE,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,qFAAqF;IACrF,aAAa,EAAE,MAAM,CAAC;IACtB,wDAAwD;IACxD,WAAW,CAAC,EAAE,eAAe,CAAC;IAC9B,qFAAqF;IACrF,IAAI,CAAC,EAAE,OAAO,CAAC;IACf;;;;;;;;;;OAUG;IACH,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,0EAA0E;IAC1E,gBAAgB,CAAC,EAAE,cAAc,CAAC;IAClC,6EAA6E;IAC7E,MAAM,CAAC,EAAE,CAAC,IAAI,EAAE;QACf,GAAG,EAAE,MAAM,CAAC;QACZ,MAAM,EAAE,MAAM,CAAC;QACf,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,CAAC;KACxB,KAAK,IAAI,CAAC;IACX,8EAA8E;IAC9E,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,CAAC;IACxB,8CAA8C;IAC9C,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;CACjC;AAED,MAAM,WAAW,qBAAqB;IACrC,QAAQ,EAAE,CAAC,GAAG,CAAC,CAAC;IAChB,OAAO,EAAE,sBAAsB,CAAC;IAChC,uEAAuE;IACvE,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,uEAAuE;IACvE,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,iFAAiF;IACjF,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,wDAAwD;IACxD,OAAO,EAAE,MAAM,CAAC;CAChB;AAED;;;;;;;;GAQG;AACH,wBAAgB,sBAAsB,CAAC,MAAM,EAAE;IAC9C,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,MAAM,CAAC;IACZ,OAAO,EAAE,MAAM,CAAC;IAChB,aAAa,EAAE,MAAM,CAAC;IACtB,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,CAAC;CACxB,GACE;IAAC,GAAG,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,IAAI,CAAA;CAAC,GAChD;IAAC,OAAO,EAAE,KAAK,CAAA;CAAC,GAChB;IACA,KAAK,EAAE,MAAM,CAAC;CACb,CAmBH;AAED;;;;GAIG;AACH,wBAAsB,sBAAsB,CAC3C,OAAO,EAAE,sBAAsB,GAC7B,OAAO,CAAC,qBAAqB,CAAC,CAgHhC"}
|
package/dist/recover-isolated.js
CHANGED
|
@@ -8,7 +8,7 @@ import { workBranchRef } from './slug-namespace.js';
|
|
|
8
8
|
import { run } from './git.js';
|
|
9
9
|
/**
|
|
10
10
|
* **`complete --isolated <slug>` — FINISH an already-committed, already-done-moved
|
|
11
|
-
* STRANDED isolated worktree** (
|
|
11
|
+
* STRANDED isolated worktree** (spec `ledger-integrity` story 6, the
|
|
12
12
|
* `finish-already-committed-branch` task). The LOCATE-EXISTING inverse of
|
|
13
13
|
* `do --isolated` (which CREATES a worktree): it resolves the slug's RETAINED job
|
|
14
14
|
* worktree via the existing arbiter-URL-keyed naming
|
|
@@ -102,6 +102,11 @@ export async function performRecoverIsolated(options) {
|
|
|
102
102
|
recovering: false,
|
|
103
103
|
committedRecovery: true,
|
|
104
104
|
mode: options.integration ?? 'propose',
|
|
105
|
+
// The cross-job merge-serialiser CAS-retry cap (config `mergeRetries`) — the
|
|
106
|
+
// git-alone floor of the cross-job land queue, resolved through the gate-
|
|
107
|
+
// family precedence chain in the CLI and threaded here so the isolated-
|
|
108
|
+
// recovery land tail respects the per-repo cap.
|
|
109
|
+
mergeRetries: options.mergeRetries,
|
|
105
110
|
noPR: options.noPR,
|
|
106
111
|
providerInstance: options.providerInstance,
|
|
107
112
|
openPr: options.openPr,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"recover-isolated.js","sourceRoot":"","sources":["../src/recover-isolated.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,UAAU,EAAC,MAAM,SAAS,CAAC;AACnC,OAAO,EAAC,kBAAkB,EAAC,MAAM,uBAAuB,CAAC;AACzD,OAAO,EAAC,6BAA6B,EAAC,MAAM,SAAS,CAAC;AACtD,OAAO,EAAC,eAAe,EAAC,MAAM,gBAAgB,CAAC;AAC/C,OAAO,EAAC,UAAU,EAAC,MAAM,kBAAkB,CAAC;AAC5C,OAAO,EAAC,OAAO,EAAC,MAAM,SAAS,CAAC;AAChC,OAAO,EAAC,aAAa,EAAC,MAAM,qBAAqB,CAAC;AAClD,OAAO,EAAC,GAAG,EAAiB,MAAM,UAAU,CAAC;AAI7C;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAEH,MAAM,eAAe,GAAG,QAAQ,CAAC;AACjC,0FAA0F;AAC1F,MAAM,uBAAuB,GAAG,QAAQ,CAAC;
|
|
1
|
+
{"version":3,"file":"recover-isolated.js","sourceRoot":"","sources":["../src/recover-isolated.ts"],"names":[],"mappings":"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"}
|
package/dist/repo-config.d.ts
CHANGED
|
@@ -46,7 +46,7 @@ export declare const REPO_CONFIG_FILENAME: string;
|
|
|
46
46
|
* per-repo `.dorfl.json`. Deliberately a subset of {@link Config};
|
|
47
47
|
* extend this list as more keys become legitimately repo-scoped.
|
|
48
48
|
*/
|
|
49
|
-
export declare const REPO_ALLOWED_KEYS: readonly ["integration", "taskingIntegration", "tasksLandIn", "specsLandIn", "noPR", "verify", "prepare", "defaultArbiter", "autoBuild", "autoTask", "observationTriage", "mergeQuestions", "surfaceBlockers", "surfaceStaging", "selectionOrder", "model", "harness", "review", "reviewModel", "reviewMaxRounds", "taskerLoop", "taskerLoopMax", "taskerLoopModel", "freshWorktreeGate", "mergeRetries", "strictMergeApproval", "promptGuidance"];
|
|
49
|
+
export declare const REPO_ALLOWED_KEYS: readonly ["integration", "taskingIntegration", "tasksLandIn", "specsLandIn", "noPR", "verify", "prepare", "defaultArbiter", "autoBuild", "autoTask", "observationTriage", "mergeQuestions", "surfaceBlockers", "surfaceStaging", "selectionOrder", "model", "harness", "review", "reviewModel", "reviewMaxRounds", "taskerLoop", "taskerLoopMax", "taskerLoopModel", "freshWorktreeGate", "mergeRetries", "strictMergeApproval", "agentDeadlineMinutes", "checkpointHeadroomMinutes", "maxAutoCheckpoints", "promptGuidance"];
|
|
50
50
|
/** A key honoured in a per-repo file. */
|
|
51
51
|
export type RepoAllowedKey = (typeof REPO_ALLOWED_KEYS)[number];
|
|
52
52
|
/**
|
|
@@ -57,7 +57,28 @@ export type RepoAllowedKey = (typeof REPO_ALLOWED_KEYS)[number];
|
|
|
57
57
|
export declare const REPO_REJECTED_KEYS: readonly ["maxParallel", "perRepoMax", "agentCmd", "piBin", "sessionsDir", "identity", "humanWorktreesDir"];
|
|
58
58
|
/** A key rejected from a per-repo file. */
|
|
59
59
|
export type RepoRejectedKey = (typeof REPO_REJECTED_KEYS)[number];
|
|
60
|
-
/**
|
|
60
|
+
/**
|
|
61
|
+
* The LEGACY per-repo config filename (`.dorfl.json`, the original dotfile form)
|
|
62
|
+
* still honoured on READ for backward compatibility. Reads prefer
|
|
63
|
+
* {@link REPO_CONFIG_FILENAME} (`dorfl.json`) and fall back to this; writes /
|
|
64
|
+
* `setup` use the preferred name. Derived from the single brand identity so a
|
|
65
|
+
* rename flips it in lockstep (see `brand.ts`).
|
|
66
|
+
*/
|
|
67
|
+
export declare const REPO_CONFIG_FILENAME_LEGACY: string;
|
|
68
|
+
/**
|
|
69
|
+
* Resolve which per-repo config file a repo USES: the PREFERRED
|
|
70
|
+
* `dorfl.json` if present, else the LEGACY `.dorfl.json` if present, else the
|
|
71
|
+
* preferred path (the location a missing file WOULD live / be created at). So a
|
|
72
|
+
* repo that already committed the legacy dotfile keeps working, while a fresh
|
|
73
|
+
* repo (and every write) uses the plain name. If BOTH exist, the preferred
|
|
74
|
+
* `dorfl.json` wins (a deliberate, documented precedence, not a merge).
|
|
75
|
+
*/
|
|
76
|
+
export declare function resolveRepoConfigPath(repoPath: string): string;
|
|
77
|
+
/**
|
|
78
|
+
* The path to a repo's config file. Prefers the plain `dorfl.json`, falls back
|
|
79
|
+
* to the legacy `.dorfl.json` when only that exists (see
|
|
80
|
+
* {@link resolveRepoConfigPath}).
|
|
81
|
+
*/
|
|
61
82
|
export declare function repoConfigPath(repoPath: string): string;
|
|
62
83
|
/** The result of reading (and filtering) a repo's `.dorfl.json`. */
|
|
63
84
|
export interface LoadedRepoConfig {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"repo-config.d.ts","sourceRoot":"","sources":["../src/repo-config.ts"],"names":[],"mappings":"AAEA,OAAO,
|
|
1
|
+
{"version":3,"file":"repo-config.d.ts","sourceRoot":"","sources":["../src/repo-config.ts"],"names":[],"mappings":"AAEA,OAAO,EAIN,KAAK,MAAM,EACX,KAAK,aAAa,EAClB,MAAM,aAAa,CAAC;AACrB,OAAO,EAAe,KAAK,MAAM,EAAC,MAAM,iBAAiB,CAAC;AAG1D,OAAO,KAAK,EAAC,iBAAiB,EAAC,MAAM,sBAAsB,CAAC;AAG5D;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiCG;AAEH;;;;GAIG;AACH,eAAO,MAAM,oBAAoB,QAA2B,CAAC;AAE7D;;;;GAIG;AACH,eAAO,MAAM,iBAAiB,+fAsKgB,CAAC;AAE/C,yCAAyC;AACzC,MAAM,MAAM,cAAc,GAAG,CAAC,OAAO,iBAAiB,CAAC,CAAC,MAAM,CAAC,CAAC;AAEhE;;;;GAIG;AACH,eAAO,MAAM,kBAAkB,6GAyBrB,CAAC;AAEX,2CAA2C;AAC3C,MAAM,MAAM,eAAe,GAAG,CAAC,OAAO,kBAAkB,CAAC,CAAC,MAAM,CAAC,CAAC;AAIlE;;;;;;GAMG;AACH,eAAO,MAAM,2BAA2B,QAAiC,CAAC;AAE1E;;;;;;;GAOG;AACH,wBAAgB,qBAAqB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAU9D;AAED;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAEvD;AAED,oEAAoE;AACpE,MAAM,WAAW,gBAAgB;IAChC,wDAAwD;IACxD,IAAI,EAAE,MAAM,CAAC;IACb;;;OAGG;IACH,MAAM,EAAE,aAAa,CAAC;IACtB;;;OAGG;IACH,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB;;;OAGG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC;CACjB;AAED;;;;;;GAMG;AACH,wBAAgB,cAAc,CAAC,QAAQ,EAAE,MAAM,GAAG,gBAAgB,CAcjE;AAED;;;;;;;;;GASG;AACH,wBAAgB,yBAAyB,CACxC,OAAO,EAAE,MAAM,EACf,WAAW,EAAE,MAAM,GACjB,gBAAgB,CA0ClB;AAMD,2CAA2C;AAC3C,MAAM,WAAW,wBAAwB;IACxC,uEAAuE;IACvE,QAAQ,EAAE,MAAM,CAAC;IACjB;;;;;OAKG;IACH,MAAM,EAAE,MAAM,CAAC;IACf;;;;OAIG;IACH,KAAK,CAAC,EAAE,aAAa,CAAC;IACtB;;;;;;OAMG;IACH,GAAG,CAAC,EAAE,MAAM,CAAC;IACb;;;;;;;OAOG;IACH,QAAQ,CAAC,EAAE,iBAAiB,CAAC;IAC7B;;;;;;OAMG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;CACpB;AAyBD,4EAA4E;AAC5E,MAAM,WAAW,kBAAkB;IAClC,2DAA2D;IAC3D,MAAM,EAAE,MAAM,CAAC;IACf,sFAAsF;IACtF,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,mDAAmD;IACnD,OAAO,CAAC,EAAE,MAAM,CAAC;CACjB;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,iBAAiB,CAChC,OAAO,EAAE,wBAAwB,GAC/B,kBAAkB,CAiBpB;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,2BAA2B,CAC1C,IAAI,EAAE,gBAAgB,EACtB,OAAO,EAAE;IACR,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,aAAa,CAAC;IACtB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb;;;;OAIG;IACH,QAAQ,CAAC,EAAE,iBAAiB,CAAC;IAC7B;;;;OAIG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;CACpB,GACC,kBAAkB,CAsCpB"}
|
package/dist/repo-config.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { readFileSync, existsSync } from 'node:fs';
|
|
2
2
|
import { join } from 'node:path';
|
|
3
|
-
import { mergeConfig, warnDeprecatedConfigKeys, } from './config.js';
|
|
3
|
+
import { mergeConfig, validateDeadlineConfig, warnDeprecatedConfigKeys, } from './config.js';
|
|
4
4
|
import { envOverrides } from './env-config.js';
|
|
5
5
|
import { brand } from './brand.js';
|
|
6
6
|
import { encodeRepoKey } from './repo-key.js';
|
|
@@ -52,23 +52,23 @@ export const REPO_CONFIG_FILENAME = brand.repoConfigFilename;
|
|
|
52
52
|
*/
|
|
53
53
|
export const REPO_ALLOWED_KEYS = [
|
|
54
54
|
'integration',
|
|
55
|
-
// `taskingIntegration` (the per-TRANSITION override for the
|
|
55
|
+
// `taskingIntegration` (the per-TRANSITION override for the spec→tasks TASKING
|
|
56
56
|
// transition ONLY) is a genuine repo property exactly like `integration`: whether
|
|
57
|
-
// THIS repo tasks a
|
|
57
|
+
// THIS repo tasks a spec straight onto `main` (task FILES land, no PR) while it
|
|
58
58
|
// still BUILDS each task as a reviewable PR is agreed by all collaborators +
|
|
59
59
|
// travels with the repo. Resolved per-repo through the SAME chain as
|
|
60
60
|
// `integration`, then falls back to `integration` when unset. DISTINCT from
|
|
61
|
-
// intake's per-EMITTED-TYPE `{task,
|
|
61
|
+
// intake's per-EMITTED-TYPE `{task, spec}` resolver (front door, author-trust):
|
|
62
62
|
// this is a per-lifecycle-transition knob, inside the boundary, config-resolved.
|
|
63
63
|
'taskingIntegration',
|
|
64
|
-
// `tasksLandIn` (the per-repo TASK-PLACEMENT default — staging vs pool,
|
|
64
|
+
// `tasksLandIn` (the per-repo TASK-PLACEMENT default — staging vs pool, spec
|
|
65
65
|
// `staging-pool-position-gate-and-trust-model` US #5) is a genuine repo property
|
|
66
66
|
// exactly like `taskingIntegration`/`integration`: whether THIS repo's tasker
|
|
67
|
-
// output lands STAGED (`
|
|
67
|
+
// output lands STAGED (`tasks/backlog/`, review-without-PR human-promote path) or
|
|
68
68
|
// straight in the agent-eligible POOL (`ready/`, trusted fast-path) is agreed
|
|
69
69
|
// by all collaborators + travels with the repo. Resolved per-repo through the
|
|
70
70
|
// SAME chain as `taskingIntegration` (flag > env > per-repo > global > built-in
|
|
71
|
-
// `
|
|
71
|
+
// `backlog`). DISTINCT from intake's per-emitted-type stamps (front door):
|
|
72
72
|
// this is a per-lifecycle PLACEMENT knob, inside the trust boundary,
|
|
73
73
|
// config-resolved. Fed into the shared placement resolver as the
|
|
74
74
|
// configured-default rung (`src/placement.ts`).
|
|
@@ -82,7 +82,7 @@ export const REPO_ALLOWED_KEYS = [
|
|
|
82
82
|
// through the SAME chain as `tasksLandIn` (flag `--specs-land-in` > env
|
|
83
83
|
// `DORFL_SPECS_LAND_IN` > per-repo > global > built-in). Fed into the shared
|
|
84
84
|
// placement resolver as the configured-default rung for the spec lifecycle
|
|
85
|
-
// (`src/placement.ts`). The sole spec-placement key after the prd → spec HARD
|
|
85
|
+
// (`src/placement.ts`). The sole spec-placement key after the ''prd'' → `spec` HARD
|
|
86
86
|
// CUTOVER (the legacy `prdsLandIn` key is GONE — clean break, no accepted alias).
|
|
87
87
|
'specsLandIn',
|
|
88
88
|
// `noPR` (the PR-INTENT axis — push the branch but deliberately skip the PR) is
|
|
@@ -107,7 +107,7 @@ export const REPO_ALLOWED_KEYS = [
|
|
|
107
107
|
'autoBuild',
|
|
108
108
|
// `autoTask` (may an agent auto-task undeclared prds in this repo?) is a
|
|
109
109
|
// genuine repo property — the tasking-autonomy mirror of `autoBuild`
|
|
110
|
-
// (`work/
|
|
110
|
+
// (`work/specs/auto-task.md`), resolved per-repo through the same chain.
|
|
111
111
|
'autoTask',
|
|
112
112
|
// `observationTriage` (the 3-state `off|ask|auto` gate over the observation
|
|
113
113
|
// INBOX) is a genuine repo property — the observation-side question-surfacing
|
|
@@ -116,7 +116,7 @@ export const REPO_ALLOWED_KEYS = [
|
|
|
116
116
|
// boolean (no alias; no external users owed a migration window, 2026-06-12).
|
|
117
117
|
'observationTriage',
|
|
118
118
|
// `mergeQuestions` (the 3-state `off|ask|auto` gate over the MERGE-QUESTION
|
|
119
|
-
// SURFACER —
|
|
119
|
+
// SURFACER — spec `land-time-reverify-and-parallel-merge-ceiling` Story 17 /
|
|
120
120
|
// task `merge-questions-gate-axis`) is a genuine repo property exactly like
|
|
121
121
|
// `observationTriage`: whether THIS repo's unmerged `work/*` branches surface
|
|
122
122
|
// as merge-questions (and whether they auto-land) is agreed by all
|
|
@@ -127,13 +127,13 @@ export const REPO_ALLOWED_KEYS = [
|
|
|
127
127
|
// (flag > env > per-repo > global > default `ask`).
|
|
128
128
|
'mergeQuestions',
|
|
129
129
|
// `surfaceBlockers` (the BOOLEAN gate over DECLARED blocked work — whether a
|
|
130
|
-
// task/
|
|
130
|
+
// task/spec carrying `needsAnswers:true` is rendered into a question sidecar) is a
|
|
131
131
|
// genuine repo property — the blocked-work side of the question-surfacing gate
|
|
132
132
|
// family (ADR `ci-config-policy-and-gate-family`), the orthogonal peer of
|
|
133
133
|
// `observationTriage`, resolved per-repo through the same chain as `autoBuild`.
|
|
134
134
|
'surfaceBlockers',
|
|
135
135
|
// `surfaceStaging` (the BOOLEAN gate-family member that widens SURFACE into
|
|
136
|
-
// STAGING —
|
|
136
|
+
// STAGING — spec `staging-surface-and-apply-promote-safety` F2) is a genuine
|
|
137
137
|
// repo property exactly like its siblings (`surfaceBlockers`/`autoBuild`):
|
|
138
138
|
// whether THIS repo inspects staging for questions is agreed by all
|
|
139
139
|
// collaborators + travels with the repo. Default `true`; resolved per-repo
|
|
@@ -152,8 +152,8 @@ export const REPO_ALLOWED_KEYS = [
|
|
|
152
152
|
// (machine paths/commands), so they are rejected below.
|
|
153
153
|
'model',
|
|
154
154
|
'harness',
|
|
155
|
-
// Gate 2 (PR/code review) policy is a genuine repo property (GATES
|
|
156
|
-
// `work/
|
|
155
|
+
// Gate 2 (PR/code review) policy is a genuine repo property (GATES spec
|
|
156
|
+
// `work/specs/tasked/review.md`), resolved per-repo like `integration`/`autoBuild`:
|
|
157
157
|
// whether this repo runs Gate 2 (`review`), which model the review agent runs
|
|
158
158
|
// on (`reviewModel`), and the revise↔review loop bound (`reviewMaxRounds`).
|
|
159
159
|
// `reviewModel` is routing intent (not auth), so — like `model` — it is
|
|
@@ -176,7 +176,7 @@ export const REPO_ALLOWED_KEYS = [
|
|
|
176
176
|
// artifact (and pays the per-gate install cost) is agreed by all collaborators
|
|
177
177
|
// + travels with the repo. Resolved per-repo through the SAME chain.
|
|
178
178
|
'freshWorktreeGate',
|
|
179
|
-
// `mergeRetries` (the cross-job merge serialiser's CAS-retry cap —
|
|
179
|
+
// `mergeRetries` (the cross-job merge serialiser's CAS-retry cap — spec
|
|
180
180
|
// `land-time-reverify-and-parallel-merge-ceiling` Story 5 / Applied Answer q1 (a))
|
|
181
181
|
// is a genuine repo property exactly like `freshWorktreeGate`: "how many
|
|
182
182
|
// re-rebase-and-retry attempts before a contender bounces to needs-attention"
|
|
@@ -186,7 +186,7 @@ export const REPO_ALLOWED_KEYS = [
|
|
|
186
186
|
// CAS still costs only a re-rebase + re-gate retry, never a `--force`.
|
|
187
187
|
'mergeRetries',
|
|
188
188
|
// `strictMergeApproval` (the OPT-IN strictness layered on the OQ6
|
|
189
|
-
// stale-approval default —
|
|
189
|
+
// stale-approval default — spec `land-time-reverify-and-parallel-merge-ceiling`
|
|
190
190
|
// sidecar OQ6 / task `strict-merge-approval-gate`) is a genuine repo property
|
|
191
191
|
// exactly like `mergeQuestions`/`mergeRetries`: whether THIS repo re-surfaces
|
|
192
192
|
// the merge-question on a merge-base change (the host-agnostic analogue of
|
|
@@ -198,6 +198,16 @@ export const REPO_ALLOWED_KEYS = [
|
|
|
198
198
|
// default or shape. The re-surface vs. land branch is
|
|
199
199
|
// `apply-rung-merge-disposition`'s consumer, never here.
|
|
200
200
|
'strictMergeApproval',
|
|
201
|
+
// `agentDeadlineMinutes` / `checkpointHeadroomMinutes` / `maxAutoCheckpoints`
|
|
202
|
+
// (spec `graceful-pre-timeout-wip-checkpoint`) are genuine repo properties:
|
|
203
|
+
// how long an agent session runs before checkpointing, and how much head-room
|
|
204
|
+
// the GitHub backstop leaves above it, are agreed by all collaborators + travel
|
|
205
|
+
// with the repo. The dynamic GitHub `timeout-minutes` cap is rendered by the
|
|
206
|
+
// `enumerate` job at run time FROM this committed config, so an edit reflects
|
|
207
|
+
// EVERYWHERE (internal deadline AND GitHub cap) with no install-ci re-run.
|
|
208
|
+
'agentDeadlineMinutes',
|
|
209
|
+
'checkpointHeadroomMinutes',
|
|
210
|
+
'maxAutoCheckpoints',
|
|
201
211
|
// `promptGuidance` (the NUDGE namespace — prompt-text knobs that strengthen
|
|
202
212
|
// the worker's in-band wrapper line, e.g. `testFirst`) is a genuine repo
|
|
203
213
|
// property: "is this repo nudged toward test-first?" travels with the repo
|
|
@@ -239,9 +249,40 @@ export const REPO_REJECTED_KEYS = [
|
|
|
239
249
|
'humanWorktreesDir',
|
|
240
250
|
];
|
|
241
251
|
const ALLOWED_SET = new Set(REPO_ALLOWED_KEYS);
|
|
242
|
-
/**
|
|
252
|
+
/**
|
|
253
|
+
* The LEGACY per-repo config filename (`.dorfl.json`, the original dotfile form)
|
|
254
|
+
* still honoured on READ for backward compatibility. Reads prefer
|
|
255
|
+
* {@link REPO_CONFIG_FILENAME} (`dorfl.json`) and fall back to this; writes /
|
|
256
|
+
* `setup` use the preferred name. Derived from the single brand identity so a
|
|
257
|
+
* rename flips it in lockstep (see `brand.ts`).
|
|
258
|
+
*/
|
|
259
|
+
export const REPO_CONFIG_FILENAME_LEGACY = brand.repoConfigFilenameLegacy;
|
|
260
|
+
/**
|
|
261
|
+
* Resolve which per-repo config file a repo USES: the PREFERRED
|
|
262
|
+
* `dorfl.json` if present, else the LEGACY `.dorfl.json` if present, else the
|
|
263
|
+
* preferred path (the location a missing file WOULD live / be created at). So a
|
|
264
|
+
* repo that already committed the legacy dotfile keeps working, while a fresh
|
|
265
|
+
* repo (and every write) uses the plain name. If BOTH exist, the preferred
|
|
266
|
+
* `dorfl.json` wins (a deliberate, documented precedence, not a merge).
|
|
267
|
+
*/
|
|
268
|
+
export function resolveRepoConfigPath(repoPath) {
|
|
269
|
+
const preferred = join(repoPath, REPO_CONFIG_FILENAME);
|
|
270
|
+
if (existsSync(preferred)) {
|
|
271
|
+
return preferred;
|
|
272
|
+
}
|
|
273
|
+
const legacy = join(repoPath, REPO_CONFIG_FILENAME_LEGACY);
|
|
274
|
+
if (existsSync(legacy)) {
|
|
275
|
+
return legacy;
|
|
276
|
+
}
|
|
277
|
+
return preferred;
|
|
278
|
+
}
|
|
279
|
+
/**
|
|
280
|
+
* The path to a repo's config file. Prefers the plain `dorfl.json`, falls back
|
|
281
|
+
* to the legacy `.dorfl.json` when only that exists (see
|
|
282
|
+
* {@link resolveRepoConfigPath}).
|
|
283
|
+
*/
|
|
243
284
|
export function repoConfigPath(repoPath) {
|
|
244
|
-
return
|
|
285
|
+
return resolveRepoConfigPath(repoPath);
|
|
245
286
|
}
|
|
246
287
|
/**
|
|
247
288
|
* Read a repo's `.dorfl.json` and split it into the honoured subset and
|
|
@@ -405,6 +446,11 @@ export function resolveRepoConfigFromLoaded(repo, options) {
|
|
|
405
446
|
...envOverrides(env),
|
|
406
447
|
...(flags ?? {}),
|
|
407
448
|
});
|
|
449
|
+
// Fail-loud range validation for the deadline / backstop / ceiling triple
|
|
450
|
+
// (spec `graceful-pre-timeout-wip-checkpoint`): a bad value from ANY layer
|
|
451
|
+
// (flag / env / per-repo / global) throws with a clear message naming the
|
|
452
|
+
// field + range — NEVER silently clamped.
|
|
453
|
+
validateDeadlineConfig(config);
|
|
408
454
|
return {
|
|
409
455
|
config,
|
|
410
456
|
rejected: repo.rejected,
|
package/dist/repo-config.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"repo-config.js","sourceRoot":"","sources":["../src/repo-config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,YAAY,EAAE,UAAU,EAAC,MAAM,SAAS,CAAC;AACjD,OAAO,EAAC,IAAI,EAAC,MAAM,WAAW,CAAC;AAC/B,OAAO,EACN,WAAW,EACX,wBAAwB,GAGxB,MAAM,aAAa,CAAC;AACrB,OAAO,EAAC,YAAY,EAAc,MAAM,iBAAiB,CAAC;AAC1D,OAAO,EAAC,KAAK,EAAC,MAAM,YAAY,CAAC;AACjC,OAAO,EAAC,aAAa,EAAC,MAAM,eAAe,CAAC;AAE5C,OAAO,EAAC,GAAG,EAAC,MAAM,UAAU,CAAC;AAE7B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiCG;AAEH;;;;GAIG;AACH,MAAM,CAAC,MAAM,oBAAoB,GAAG,KAAK,CAAC,kBAAkB,CAAC;AAE7D;;;;GAIG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAAG;IAChC,aAAa;IACb
|
|
1
|
+
{"version":3,"file":"repo-config.js","sourceRoot":"","sources":["../src/repo-config.ts"],"names":[],"mappings":"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"}
|