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
|
@@ -0,0 +1,260 @@
|
|
|
1
|
+
import {existsSync, readFileSync} from 'node:fs';
|
|
2
|
+
import {join} from 'node:path';
|
|
3
|
+
import {
|
|
4
|
+
isEntryAnswered,
|
|
5
|
+
parseSidecar,
|
|
6
|
+
sidecarPathFor,
|
|
7
|
+
type SidecarEntry,
|
|
8
|
+
type SidecarModel,
|
|
9
|
+
} from './sidecar.js';
|
|
10
|
+
import {deleteRemoteWorkBranchIfPresent} from './needs-attention.js';
|
|
11
|
+
|
|
12
|
+
/**
|
|
13
|
+
* The **answered STUCK-QUESTION ACTION DISPATCH** (spec
|
|
14
|
+
* `surface-stuck-as-questions-and-retire-stuck-lock-state`, task
|
|
15
|
+
* `apply-resolve-reset-flag-discards-work-branch`; user story 2, resolved
|
|
16
|
+
* decision #6) — the deterministic, answer-driven RUNNER-ACTION layer that
|
|
17
|
+
* turns an answered `kind: 'stuck'` sidecar entry (the shape the bounce-surface
|
|
18
|
+
* path stamps when a task's build bounces) into one of three verbs:
|
|
19
|
+
*
|
|
20
|
+
* - `keep` -> today's continue-from-WIP: leave the `work/<slug>` branch
|
|
21
|
+
* alone; the apply rung falls through to the normal
|
|
22
|
+
* `applyAnsweredQuestions` resolve so the next claim continues
|
|
23
|
+
* from the branch tip.
|
|
24
|
+
* - `reset` -> discard the WIP branch, rebuild clean: DELETE the remote
|
|
25
|
+
* `work/<slug>` branch on the arbiter (via the SHARED
|
|
26
|
+
* {@link deleteRemoteWorkBranchIfPresent} primitive the
|
|
27
|
+
* `requeue --reset` recovery verb also uses) BEFORE the apply
|
|
28
|
+
* rung clears `needsAnswers`, so the next claim starts fresh.
|
|
29
|
+
* Safely IDEMPOTENT when no branch exists (an observation, or a
|
|
30
|
+
* task never built) — a `remote ref does not exist` push error
|
|
31
|
+
* is tolerated as an already-gone no-op.
|
|
32
|
+
* - `cancel` -> the existing `dispose` terminal: `git mv` the task to
|
|
33
|
+
* `tasks/cancelled/` via `applyAnsweredQuestions`' `dispose`
|
|
34
|
+
* option (the answer text is recorded as the human's reason).
|
|
35
|
+
*
|
|
36
|
+
* A direct SIBLING of the `apply-merge-action.ts` machinery: the apply rung
|
|
37
|
+
* KIND-CHECKS the sidecar BEFORE the fall-through persist, so an answered
|
|
38
|
+
* `kind: 'stuck'` entry dispatches HERE deterministically (mirroring how a
|
|
39
|
+
* `kind: 'merge'` entry dispatches through `apply-merge-action.ts`). There is
|
|
40
|
+
* NO agentic decider on the TASK apply-persist path (the `runAgenticDecision`
|
|
41
|
+
* gate at `advance.ts` fires only for `namespace === 'observation'`), so this
|
|
42
|
+
* MUST be a deterministic parse+dispatch — the flag SOURCE on the task path
|
|
43
|
+
* (see the task's `## Re-scope 2026-07-14`).
|
|
44
|
+
*
|
|
45
|
+
* # Ordering (delete-before-clear) and partial-failure decision
|
|
46
|
+
*
|
|
47
|
+
* The `reset` verb DELETES the remote work branch BEFORE the apply rung
|
|
48
|
+
* clears `needsAnswers`. On a partial failure (arbiter delete FAILS after the
|
|
49
|
+
* local tracking ref was cleared), we REFUSE the apply and leave the sidecar
|
|
50
|
+
* in place (`needsAnswers` stays `true`), so the human sees the failure and
|
|
51
|
+
* can re-answer. The alternative (clear-then-delete, or clear-anyway on a
|
|
52
|
+
* failed delete) would leave the item `needsAnswers:false` and CLAIMABLE while
|
|
53
|
+
* still carrying the WIP branch we meant to discard — exactly the stale-
|
|
54
|
+
* continue trap the `requeue --reset` code path spends a page of comment
|
|
55
|
+
* defending against. The two callers (this verb + `requeue --reset`) MUST
|
|
56
|
+
* stay behaviourally identical; both fail the whole recovery on a genuine
|
|
57
|
+
* push-delete failure. This is the `## Decisions` entry the done record
|
|
58
|
+
* links.
|
|
59
|
+
*/
|
|
60
|
+
|
|
61
|
+
/** The three deterministic verbs a stuck-question answer encodes. */
|
|
62
|
+
export type StuckActionVerb = 'keep' | 'reset' | 'cancel';
|
|
63
|
+
|
|
64
|
+
/** A detected, answer-driven stuck-action keyed off ONE answered `kind: 'stuck'` entry. */
|
|
65
|
+
export interface DetectedStuckAction {
|
|
66
|
+
/** The deterministic verb parsed from the entry's answer text. */
|
|
67
|
+
verb: StuckActionVerb;
|
|
68
|
+
/** The answered `kind: 'stuck'` entry the verb came from. */
|
|
69
|
+
entry: SidecarEntry;
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
/**
|
|
73
|
+
* Parse the human's plain free-text answer into a {@link StuckActionVerb}.
|
|
74
|
+
* MIRRORS `parseMergeAnswer` EXACTLY: first whole ASCII word, case-insensitive,
|
|
75
|
+
* trailing commentary tolerated; `undefined` on anything else (empty / typo /
|
|
76
|
+
* narrative). NEVER default-guesses a destructive `reset` — an ambiguous
|
|
77
|
+
* answer falls through to today's plain persist (the safe "keep the branch,
|
|
78
|
+
* clear the flag" behaviour), never invents a branch discard.
|
|
79
|
+
*/
|
|
80
|
+
export function parseStuckAnswer(text: string): StuckActionVerb | undefined {
|
|
81
|
+
const trimmed = text.trim().toLowerCase();
|
|
82
|
+
if (trimmed === '') return undefined;
|
|
83
|
+
const match = /^([a-z]+)/.exec(trimmed);
|
|
84
|
+
if (match === null) return undefined;
|
|
85
|
+
const word = match[1];
|
|
86
|
+
if (word === 'keep' || word === 'reset' || word === 'cancel') {
|
|
87
|
+
return word;
|
|
88
|
+
}
|
|
89
|
+
return undefined;
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
/**
|
|
93
|
+
* Detect the `kind: 'stuck'` action verb that should drive the next apply run.
|
|
94
|
+
*
|
|
95
|
+
* ORDERING (mirrors `detectAnsweredMergeAction`'s re-stale re-surface rule):
|
|
96
|
+
*
|
|
97
|
+
* 1. If ANY `kind: 'stuck'` entry is UNANSWERED, return `undefined` —
|
|
98
|
+
* that is the re-paused state (a freshly-appended follow-up awaiting an
|
|
99
|
+
* answer), and the apply MUST NOT fire against a stale prior sibling.
|
|
100
|
+
* 2. Otherwise return the LATEST answered `kind: 'stuck'` entry — a fresh
|
|
101
|
+
* follow-up answer wins over the stale one.
|
|
102
|
+
*
|
|
103
|
+
* Returns `undefined` on a missing/unparseable sidecar or when no
|
|
104
|
+
* `kind: 'stuck'` entry parses to one of the three verbs (the apply rung then
|
|
105
|
+
* falls through to today's plain persist, which is the `keep` semantic — a
|
|
106
|
+
* malformed answer NEVER discards a branch).
|
|
107
|
+
*/
|
|
108
|
+
export function detectAnsweredStuckAction(
|
|
109
|
+
cwd: string,
|
|
110
|
+
item: string,
|
|
111
|
+
): DetectedStuckAction | undefined {
|
|
112
|
+
const abs = join(cwd, sidecarPathFor(item));
|
|
113
|
+
if (!existsSync(abs)) return undefined;
|
|
114
|
+
let model: SidecarModel;
|
|
115
|
+
try {
|
|
116
|
+
model = parseSidecar(readFileSync(abs, 'utf8'));
|
|
117
|
+
} catch {
|
|
118
|
+
return undefined;
|
|
119
|
+
}
|
|
120
|
+
for (const entry of model.entries) {
|
|
121
|
+
if (entry.kind === 'stuck' && !isEntryAnswered(entry)) return undefined;
|
|
122
|
+
}
|
|
123
|
+
for (let i = model.entries.length - 1; i >= 0; i--) {
|
|
124
|
+
const entry = model.entries[i];
|
|
125
|
+
if (entry.kind !== 'stuck') continue;
|
|
126
|
+
if (!isEntryAnswered(entry)) continue;
|
|
127
|
+
const verb = parseStuckAnswer(entry.answer);
|
|
128
|
+
if (verb !== undefined) {
|
|
129
|
+
return {verb, entry};
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
return undefined;
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
/** Input the production stuck-action handler consumes. */
|
|
136
|
+
export interface StuckActionInput {
|
|
137
|
+
/** The detected action (verb + source entry). */
|
|
138
|
+
action: DetectedStuckAction;
|
|
139
|
+
/** The namespaced item identity (`task:<slug>`). */
|
|
140
|
+
item: string;
|
|
141
|
+
/** The bare slug (the work branch is `work/task-<slug>`). */
|
|
142
|
+
slug: string;
|
|
143
|
+
/** The apply rung's working clone. */
|
|
144
|
+
cwd: string;
|
|
145
|
+
/** The arbiter remote NAME in `cwd` (defaults to `origin`). */
|
|
146
|
+
arbiter: string;
|
|
147
|
+
/** Environment for child git processes. */
|
|
148
|
+
env?: NodeJS.ProcessEnv;
|
|
149
|
+
/** Sink for human-readable progress notes. */
|
|
150
|
+
note?: (message: string) => void;
|
|
151
|
+
}
|
|
152
|
+
|
|
153
|
+
/** The terminal verbs the dispatcher reports to the apply rung. */
|
|
154
|
+
export type StuckActionOutcome =
|
|
155
|
+
/** `answer=keep` -> no action; fall through to the normal apply persist. */
|
|
156
|
+
| 'keep'
|
|
157
|
+
/**
|
|
158
|
+
* `answer=reset` -> the remote `work/<slug>` branch was DELETED (or was
|
|
159
|
+
* already gone); fall through to the normal apply persist so
|
|
160
|
+
* `needsAnswers` clears. The `already-gone` sub-case is the safe idempotent
|
|
161
|
+
* no-op for an item with no work branch.
|
|
162
|
+
*/
|
|
163
|
+
| 'reset'
|
|
164
|
+
/**
|
|
165
|
+
* `answer=cancel` -> the apply rung dispatches through
|
|
166
|
+
* `applyAnsweredQuestions`' `dispose` option (task -> `tasks/cancelled/`).
|
|
167
|
+
* The answer text is the human's reason.
|
|
168
|
+
*/
|
|
169
|
+
| 'cancel'
|
|
170
|
+
/**
|
|
171
|
+
* `answer=reset` -> the branch delete FAILED (a real push-delete error, not
|
|
172
|
+
* `already-gone`). The apply rung SHORT-CIRCUITS: the sidecar stays,
|
|
173
|
+
* `needsAnswers` stays `true`, no clear — the human sees the failure and
|
|
174
|
+
* re-answers. Matches the `requeue --reset` "abort the requeue on a failed
|
|
175
|
+
* arbiter delete" behaviour (delete-before-clear ordering, see the module
|
|
176
|
+
* docs' partial-failure decision).
|
|
177
|
+
*/
|
|
178
|
+
| 'refused';
|
|
179
|
+
|
|
180
|
+
/** What the production handler returns to the apply rung. */
|
|
181
|
+
export interface StuckActionResult {
|
|
182
|
+
outcome: StuckActionOutcome;
|
|
183
|
+
/** Human-readable summary for the rung's message. */
|
|
184
|
+
message: string;
|
|
185
|
+
}
|
|
186
|
+
|
|
187
|
+
/**
|
|
188
|
+
* The injectable dispatch SEAM. Production wires {@link performStuckAction};
|
|
189
|
+
* tests inject a stub to assert on the apply-rung's routing WITHOUT touching a
|
|
190
|
+
* real arbiter.
|
|
191
|
+
*/
|
|
192
|
+
export type StuckActionHandler = (
|
|
193
|
+
input: StuckActionInput,
|
|
194
|
+
) => Promise<StuckActionResult>;
|
|
195
|
+
|
|
196
|
+
/**
|
|
197
|
+
* The PRODUCTION dispatcher: an answered `kind: 'stuck'` entry's verb drives
|
|
198
|
+
* one of the four terminals (`keep` / `reset` / `refused` / `cancel`). For
|
|
199
|
+
* `answer=reset` it dispatches through the SHARED
|
|
200
|
+
* {@link deleteRemoteWorkBranchIfPresent} primitive the `requeue --reset` verb
|
|
201
|
+
* also uses — delete-before-clear ordering, local-first write-through,
|
|
202
|
+
* already-gone tolerance (safe no-op when no branch exists). For `keep` and
|
|
203
|
+
* `cancel` there is nothing to do on the git side; the apply rung's normal
|
|
204
|
+
* fall-through handles the persist (`cancel` via the `dispose` option).
|
|
205
|
+
*/
|
|
206
|
+
export async function performStuckAction(
|
|
207
|
+
input: StuckActionInput,
|
|
208
|
+
): Promise<StuckActionResult> {
|
|
209
|
+
const note = input.note ?? (() => {});
|
|
210
|
+
const {verb} = input.action;
|
|
211
|
+
|
|
212
|
+
if (verb === 'keep') {
|
|
213
|
+
return {
|
|
214
|
+
outcome: 'keep',
|
|
215
|
+
message:
|
|
216
|
+
`stuck-question for ${input.item} answered KEEP — leaving ` +
|
|
217
|
+
`\`work/task-${input.slug}\` untouched (continue-from-WIP; the answer ` +
|
|
218
|
+
`is recorded in the item body via the normal apply path).`,
|
|
219
|
+
};
|
|
220
|
+
}
|
|
221
|
+
|
|
222
|
+
if (verb === 'cancel') {
|
|
223
|
+
return {
|
|
224
|
+
outcome: 'cancel',
|
|
225
|
+
message:
|
|
226
|
+
`stuck-question for ${input.item} answered CANCEL — dispatching ` +
|
|
227
|
+
`through the \`dispose\` terminal (\`git mv -> tasks/cancelled/\`).`,
|
|
228
|
+
};
|
|
229
|
+
}
|
|
230
|
+
|
|
231
|
+
// verb === 'reset'
|
|
232
|
+
const dropped = await deleteRemoteWorkBranchIfPresent({
|
|
233
|
+
cwd: input.cwd,
|
|
234
|
+
arbiter: input.arbiter,
|
|
235
|
+
slug: input.slug,
|
|
236
|
+
env: input.env,
|
|
237
|
+
});
|
|
238
|
+
if (dropped.status === 'failed') {
|
|
239
|
+
const stderr = dropped.stderr;
|
|
240
|
+
const message =
|
|
241
|
+
`stuck-question for ${input.item} answered RESET — but the arbiter ` +
|
|
242
|
+
`delete of ${dropped.branch} on ${input.arbiter} failed ` +
|
|
243
|
+
`(${stderr || 'unknown error'}). NOT clearing needsAnswers; the sidecar ` +
|
|
244
|
+
`stays surfaced for a re-answer. The local tracking ref was already ` +
|
|
245
|
+
`cleared (write-through ordering); a subsequent fetch will restore it ` +
|
|
246
|
+
`from the arbiter — the local store is BEHIND the arbiter ` +
|
|
247
|
+
`(self-healing), never AHEAD (which would drive a stale continue).`;
|
|
248
|
+
note(message);
|
|
249
|
+
return {outcome: 'refused', message};
|
|
250
|
+
}
|
|
251
|
+
const droppedLabel =
|
|
252
|
+
dropped.status === 'deleted'
|
|
253
|
+
? `Deleted the remote branch ${dropped.branch} on ${input.arbiter}`
|
|
254
|
+
: `Remote branch ${dropped.branch} on ${input.arbiter} was already gone`;
|
|
255
|
+
const message =
|
|
256
|
+
`stuck-question for ${input.item} answered RESET — ${droppedLabel} ` +
|
|
257
|
+
`(next claim starts fresh).`;
|
|
258
|
+
note(message);
|
|
259
|
+
return {outcome: 'reset', message};
|
|
260
|
+
}
|
package/src/brand.ts
CHANGED
|
@@ -77,8 +77,19 @@ export interface Brand {
|
|
|
77
77
|
readonly base: string;
|
|
78
78
|
/** The shared env-var prefix: `constantCase(base) + '_'` ⇒ `DORFL_`. */
|
|
79
79
|
readonly envPrefix: string;
|
|
80
|
-
/**
|
|
80
|
+
/**
|
|
81
|
+
* The per-repo config filename PREFERRED + written by default:
|
|
82
|
+
* `{paramCase(base)}.json` ⇒ `dorfl.json` (a plain, non-dotfile name, so it is
|
|
83
|
+
* visible in a normal `ls` and reads like other tool configs).
|
|
84
|
+
*/
|
|
81
85
|
readonly repoConfigFilename: string;
|
|
86
|
+
/**
|
|
87
|
+
* The LEGACY per-repo config filename still honoured on READ for backward
|
|
88
|
+
* compatibility: `.{paramCase(base)}.json` ⇒ `.dorfl.json` (the original
|
|
89
|
+
* dotfile form). Reads prefer {@link repoConfigFilename} and fall back to this;
|
|
90
|
+
* writes/`setup` use {@link repoConfigFilename}.
|
|
91
|
+
*/
|
|
92
|
+
readonly repoConfigFilenameLegacy: string;
|
|
82
93
|
/** The workspaces-dir name (a dotfile dir): `.{paramCase(base)}` ⇒ `.dorfl`. */
|
|
83
94
|
readonly workdirName: string;
|
|
84
95
|
/** The per-job record filename: `.{paramCase(base)}-job.json` ⇒ `.dorfl-job.json`. */
|
|
@@ -95,7 +106,8 @@ export function deriveBrand(base: string): Brand {
|
|
|
95
106
|
return {
|
|
96
107
|
base,
|
|
97
108
|
envPrefix: constantCase(base) + '_',
|
|
98
|
-
repoConfigFilename:
|
|
109
|
+
repoConfigFilename: `${param}.json`,
|
|
110
|
+
repoConfigFilenameLegacy: `.${param}.json`,
|
|
99
111
|
workdirName: `.${param}`,
|
|
100
112
|
jobRecordFilename: `.${param}-job.json`,
|
|
101
113
|
configDirName: param,
|
package/src/buildable-body.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* The SINGLE owner of the buildable-task (and
|
|
3
|
-
* (
|
|
4
|
-
* #1/#4/#7). dorfl has TWO independent producers of a buildable task/
|
|
2
|
+
* The SINGLE owner of the buildable-task (and SPEC-body) markdown SECTION SCHEMA
|
|
3
|
+
* (spec `centralize-buildable-task-renderer-shared-by-intake-and-promotion`, US
|
|
4
|
+
* #1/#4/#7). dorfl has TWO independent producers of a buildable task/SPEC body —
|
|
5
5
|
* `intake.ts` (`renderBacklogTask`/`renderSpec`, a wrapper+fallback) and
|
|
6
6
|
* `triage-persist.ts` (`buildPromotedBody`, a structured renderer) — and until
|
|
7
7
|
* this module they each HAND-ROLLED the `## What to build` / `## Acceptance
|
|
@@ -28,14 +28,14 @@
|
|
|
28
28
|
* mechanism prose, and NO `## Acceptance criteria`. Reproduced by omitting
|
|
29
29
|
* `acceptanceCriteria` and passing the open-questions block + the seed prose.
|
|
30
30
|
*
|
|
31
|
-
* Symmetrically, {@link renderSpecBody} owns the FULL
|
|
32
|
-
* producers need: intake's default
|
|
31
|
+
* Symmetrically, {@link renderSpecBody} owns the FULL SPEC section schema both SPEC
|
|
32
|
+
* producers need: intake's default SPEC scaffold is `## Problem Statement` +
|
|
33
33
|
* `## Solution` + `## User Stories` (reproduced by passing all three), while
|
|
34
|
-
* promotion's structured
|
|
34
|
+
* promotion's structured SPEC body is `## Problem Statement` + optional
|
|
35
35
|
* `## Open questions` (reproduced by omitting `solution`/`userStories`). Each
|
|
36
36
|
* optional section is emitted only when its input is non-empty.
|
|
37
37
|
*
|
|
38
|
-
* `## Prompt` is TASK-ONLY: a
|
|
38
|
+
* `## Prompt` is TASK-ONLY: a SPEC is not dispatched by `do`/`run`, so a SPEC body
|
|
39
39
|
* carries none (the symmetric reason the task body MUST carry one — the consumer
|
|
40
40
|
* `extractPromptSection`/`resolveTask` in `prompt.ts` throws "has no '## Prompt'
|
|
41
41
|
* section" at dispatch time without it). {@link renderTaskBody} always emits a
|
|
@@ -136,28 +136,28 @@ export interface RenderSpecBodyInput {
|
|
|
136
136
|
problemStatement: string;
|
|
137
137
|
/**
|
|
138
138
|
* The `## Solution` prose (markdown). OMIT it (or pass empty) to drop the
|
|
139
|
-
* section — promotion's structured
|
|
140
|
-
* default
|
|
139
|
+
* section — promotion's structured SPEC body carries no Solution section, intake's
|
|
140
|
+
* default SPEC scaffold does.
|
|
141
141
|
*/
|
|
142
142
|
solution?: string;
|
|
143
143
|
/**
|
|
144
144
|
* The `## User Stories` block (markdown, e.g. a numbered list). OMIT it (or pass
|
|
145
|
-
* empty) to drop the section — promotion's structured
|
|
146
|
-
* Stories section, intake's default
|
|
145
|
+
* empty) to drop the section — promotion's structured SPEC body carries no User
|
|
146
|
+
* Stories section, intake's default SPEC scaffold does.
|
|
147
147
|
*/
|
|
148
148
|
userStories?: string;
|
|
149
149
|
/**
|
|
150
150
|
* The `## Open questions` block (markdown). OMIT it (or pass empty) to drop the
|
|
151
|
-
* section. A
|
|
151
|
+
* section. A SPEC carries NO `## Prompt` (it is not dispatched).
|
|
152
152
|
*/
|
|
153
153
|
openQuestions?: string;
|
|
154
154
|
}
|
|
155
155
|
|
|
156
156
|
/**
|
|
157
|
-
* Render a
|
|
157
|
+
* Render a SPEC body (the markdown AFTER the frontmatter fence). Emits, in the
|
|
158
158
|
* canonical order, `## Problem Statement`, then `## Solution`, `## User Stories`,
|
|
159
159
|
* and `## Open questions` (each only when its input is given), and NEVER a
|
|
160
|
-
* `## Prompt` — a
|
|
160
|
+
* `## Prompt` — a SPEC is a north-star doc, not a dispatchable task. The symmetric twin of
|
|
161
161
|
* {@link renderTaskBody}, owning the FULL SPEC section schema both producers need
|
|
162
162
|
* (intake's default scaffold supplies Problem Statement + Solution + User Stories;
|
|
163
163
|
* promotion's structured body supplies Problem Statement + optional Open
|
package/src/claim-cas.ts
CHANGED
|
@@ -10,7 +10,7 @@ import {workItemRel} from './work-layout.js';
|
|
|
10
10
|
* `scripts/CLAIM-PROTOCOL.md`. This is the first-class `dorfl claim`
|
|
11
11
|
* command (ADR §9: dorfl is the PRIMARY implementation of the claim
|
|
12
12
|
* protocol; `scripts/claim.sh` is retained as the portable, zero-dependency
|
|
13
|
-
* bootstrap / reference). The lock-substrate cut-over (
|
|
13
|
+
* bootstrap / reference). The lock-substrate cut-over (spec
|
|
14
14
|
* `ledger-status-per-item-lock-refs`) has since diverged it from `claim.sh`'s
|
|
15
15
|
* body-move semantics — see the lock note below — but the exit codes are the same.
|
|
16
16
|
*
|
|
@@ -26,7 +26,7 @@ import {workItemRel} from './work-layout.js';
|
|
|
26
26
|
* 3 (legacy) push contention — no longer reachable: the per-item lock never
|
|
27
27
|
* falsely contends, so there is no retry budget to exhaust
|
|
28
28
|
*
|
|
29
|
-
* UNIFIED PER-ITEM LOCK (
|
|
29
|
+
* UNIFIED PER-ITEM LOCK (spec `ledger-status-per-item-lock-refs` US #1/#15/#16,
|
|
30
30
|
* ADR `ledger-status-on-per-item-lock-refs`): a claim ACQUIRES the item's
|
|
31
31
|
* per-item lock (`action: implement`) via the lock module and writes NOTHING to
|
|
32
32
|
* `main` — the body STAYS at `work/backlog/<slug>.md`. The claimable predicate is
|
|
@@ -86,7 +86,7 @@ export interface ClaimCasOptions {
|
|
|
86
86
|
*/
|
|
87
87
|
override?: boolean;
|
|
88
88
|
/**
|
|
89
|
-
* `--allow-backlog` (
|
|
89
|
+
* `--allow-backlog` (spec
|
|
90
90
|
* `do-allow-backlog-drive-staged-tasks-without-promotion`): WIDEN the claimable
|
|
91
91
|
* predicate to ALSO accept a `tasks/backlog/`-resident body (staging), so a
|
|
92
92
|
* human can drive a staged task in place WITHOUT promoting it to the pool. The
|
|
@@ -336,7 +336,7 @@ async function runClaim(
|
|
|
336
336
|
}
|
|
337
337
|
}
|
|
338
338
|
|
|
339
|
-
// UNIFIED PER-ITEM LOCK — the WHOLE of the claim now (
|
|
339
|
+
// UNIFIED PER-ITEM LOCK — the WHOLE of the claim now (spec
|
|
340
340
|
// `ledger-status-per-item-lock-refs` US #1/#15/#16; ADR
|
|
341
341
|
// `ledger-status-on-per-item-lock-refs`). The interim dual-write is GONE: claim
|
|
342
342
|
// acquires the item's per-item lock (`action: implement`) and writes NOTHING to
|
package/src/cli-spinner.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* A small, isolated terminal-spinner helper for the standalone
|
|
3
|
-
* `dorfl claim <slug>` CLI command (
|
|
3
|
+
* `dorfl claim <slug>` CLI command (spec/task `claim-cas-spinner`).
|
|
4
4
|
*
|
|
5
5
|
* The push the claim CAS performs can take a few seconds (network +
|
|
6
6
|
* arbiter round-trip), so the terminal looked frozen. This helper wraps
|