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
package/src/tasking-lock.ts
CHANGED
|
@@ -1,25 +1,22 @@
|
|
|
1
1
|
import {runAsync, type RunResult} from './git.js';
|
|
2
|
-
import {
|
|
3
|
-
|
|
4
|
-
releaseItemLock,
|
|
5
|
-
markStuckItemLock,
|
|
6
|
-
} from './item-lock.js';
|
|
2
|
+
import {acquireItemLock, releaseItemLock, readItemLock} from './item-lock.js';
|
|
3
|
+
import {surfaceStuckToNeedsAttention} from './needs-attention.js';
|
|
7
4
|
import {workItemRel} from './work-layout.js';
|
|
8
5
|
|
|
9
6
|
/**
|
|
10
|
-
* The **tasking concurrency lock** (
|
|
7
|
+
* The **tasking concurrency lock** (spec `auto-slice`, task `autoslice-lock`).
|
|
11
8
|
*
|
|
12
|
-
* Serialises *concurrent* taskers (two CI runs, or human + CI) so a
|
|
9
|
+
* Serialises *concurrent* taskers (two CI runs, or human + CI) so a spec is never
|
|
13
10
|
* double-tasked. As of the capstone cut-over (task
|
|
14
|
-
* `cutover-retire-slicing-advancing-markers-and-trim-folder-sets`,
|
|
11
|
+
* `cutover-retire-slicing-advancing-markers-and-trim-folder-sets`, spec
|
|
15
12
|
* `ledger-status-per-item-lock-refs`; ADR `ledger-status-on-per-item-lock-refs`)
|
|
16
|
-
* the legacy `git mv work/
|
|
13
|
+
* the legacy `git mv work/specs/ready/<slug>.md → work/tasking/<slug>.md` MARKER on `main`
|
|
17
14
|
* is GONE: the body NEVER relocates until the durable promotion, exactly as claim
|
|
18
15
|
* no longer moves the task body (task
|
|
19
16
|
* `cutover-claim-body-stays-and-complete-sources-from-backlog`). The tasking lock
|
|
20
17
|
* is now ONLY the UNIFIED per-item lock (`refs/dorfl/lock/<entry>`,
|
|
21
|
-
* `action: task`, keyed `
|
|
22
|
-
* the same item, so tasking a
|
|
18
|
+
* `action: task`, keyed `spec:<slug>`) — the SAME ref claim and advance use for
|
|
19
|
+
* the same item, so tasking a spec is mutually exclusive with claiming/advancing
|
|
23
20
|
* the SAME item BY CONSTRUCTION (the second acquirer loses the SAME create-only
|
|
24
21
|
* ref CAS, with NO retry budget and NO false contention). There is no transient
|
|
25
22
|
* status in `main`'s tree anymore, so a work branch cut from `main` inherits no
|
|
@@ -29,15 +26,16 @@ import {workItemRel} from './work-layout.js';
|
|
|
29
26
|
* A `lost` (the item is already held for implement/task/advance) makes the
|
|
30
27
|
* tasking acquire lose DEFINITIVELY (exit 2, no retry). On a successful acquire
|
|
31
28
|
* it returns {@link AcquireTaskingLockResult.lockedBlob}: the git blob sha of the
|
|
32
|
-
*
|
|
29
|
+
* spec body the lock TOOK, read from `work/specs/ready/<slug>.md` on the arbiter — the
|
|
33
30
|
* snapshot the tasker reads + tasks from, handed back so the integrate
|
|
34
|
-
* transition can fail loud if the held
|
|
31
|
+
* transition can fail loud if the held spec was edited concurrently (the
|
|
35
32
|
* read-stability backstop). A dry-run takes no lock (it mutates nothing).
|
|
36
33
|
*
|
|
37
34
|
* - **Release** ({@link releaseTaskingLock}) DELETES the unified lock ref. It
|
|
38
|
-
* moves NO lifecycle file: the durable `
|
|
39
|
-
* by the integrate band (`tasking.ts`/`integration-core.ts`), and there
|
|
40
|
-
* `tasking/ →
|
|
35
|
+
* moves NO lifecycle file: the durable `specs/ready → specs/tasked` success move
|
|
36
|
+
* is owned by the integrate band (`tasking.ts`/`integration-core.ts`), and there
|
|
37
|
+
* is no `tasking/ → specs/ready/` abort bounce anymore (the body never left
|
|
38
|
+
* `specs/ready/`). When
|
|
41
39
|
* `routeToNeedsAttention` is set (the tasker review/edit loop's
|
|
42
40
|
* decomposition-unclear verdict, or the task-SET acceptance gate's `block`),
|
|
43
41
|
* release amends the lock `active → stuck` with the reason on the entry INSTEAD
|
|
@@ -51,13 +49,13 @@ import {workItemRel} from './work-layout.js';
|
|
|
51
49
|
* The READ-STABILITY backstop (the content-identity stale check that used to live
|
|
52
50
|
* in the release, comparing the held `work/tasking/<slug>.md` blob against the
|
|
53
51
|
* acquire-time snapshot) now lives at the integrate seam (`tasking.ts`
|
|
54
|
-
* `heldSpecIsStale`, comparing `work/
|
|
52
|
+
* `heldSpecIsStale`, comparing `work/specs/ready/<slug>.md`) — relocated because the
|
|
55
53
|
* completing transition, not the release, owns the commit. See
|
|
56
54
|
* `work/notes/observations/tasking-lock-does-not-stabilise-prd-content.md`.
|
|
57
55
|
*
|
|
58
|
-
* This module provides the lock PRIMITIVES only. The orchestrating `do
|
|
56
|
+
* This module provides the lock PRIMITIVES only. The orchestrating `do spec:<slug>`
|
|
59
57
|
* tasking command (`tasking.ts`) acquires, drives the agent's tasking, integrates
|
|
60
|
-
* the emitted tasks + the durable `
|
|
58
|
+
* the emitted tasks + the durable `specs/ready → specs/tasked` move, and releases. The
|
|
61
59
|
* human path (no contention) may task on `main` directly without the lock.
|
|
62
60
|
*/
|
|
63
61
|
|
|
@@ -74,7 +72,7 @@ export type AcquireTaskingLockOutcome =
|
|
|
74
72
|
export type AcquireTaskingLockExitCode = 0 | 1 | 2 | 3;
|
|
75
73
|
|
|
76
74
|
export interface AcquireTaskingLockOptions {
|
|
77
|
-
/** The
|
|
75
|
+
/** The spec slug to lock (`work/specs/ready/<slug>.md`). */
|
|
78
76
|
slug: string;
|
|
79
77
|
/** Working clone/worktree the lock acquire runs in. */
|
|
80
78
|
cwd: string;
|
|
@@ -98,10 +96,10 @@ export interface AcquireTaskingLockResult {
|
|
|
98
96
|
/** Human-readable summary of the terminal condition. */
|
|
99
97
|
message: string;
|
|
100
98
|
/**
|
|
101
|
-
* On a successful acquire (`acquired`), the git BLOB sha of the
|
|
102
|
-
* the lock TOOK (`work/
|
|
99
|
+
* On a successful acquire (`acquired`), the git BLOB sha of the spec body that
|
|
100
|
+
* the lock TOOK (`work/specs/ready/<slug>.md` on the arbiter). This IS the snapshot the
|
|
103
101
|
* tasker reads + tasks from; the integrate transition compares the current
|
|
104
|
-
* `work/
|
|
102
|
+
* `work/specs/ready/<slug>.md` blob against it to fail loud on a concurrent edit (the
|
|
105
103
|
* read-stability backstop). `undefined` unless `outcome === 'acquired'` (and on
|
|
106
104
|
* dry-run, where nothing was published).
|
|
107
105
|
*/
|
|
@@ -157,7 +155,7 @@ async function runAcquire(
|
|
|
157
155
|
}
|
|
158
156
|
const by = options.by || (await resolveBy(cwd, env));
|
|
159
157
|
|
|
160
|
-
// Is the
|
|
158
|
+
// Is the spec still lockable (present in work/specs/ready/ on the arbiter's main)?
|
|
161
159
|
await gitHard(['fetch', '--quiet', arbiter], cwd, env);
|
|
162
160
|
const spec = workItemRel('specs-ready', `${slug}.md`);
|
|
163
161
|
const specBlob = await gitSoft(
|
|
@@ -166,7 +164,7 @@ async function runAcquire(
|
|
|
166
164
|
env,
|
|
167
165
|
);
|
|
168
166
|
if (specBlob.status !== 0) {
|
|
169
|
-
const message = `'${spec}' not found on ${arbiter}/main (no such
|
|
167
|
+
const message = `'${spec}' not found on ${arbiter}/main (no such spec, or it was already moved/tasked).`;
|
|
170
168
|
note(message);
|
|
171
169
|
return {exitCode: 2, outcome: 'lost', message};
|
|
172
170
|
}
|
|
@@ -180,18 +178,17 @@ async function runAcquire(
|
|
|
180
178
|
return {exitCode: 0, outcome: 'acquired', message, lockedBlob};
|
|
181
179
|
}
|
|
182
180
|
|
|
183
|
-
// Acquire the UNIFIED per-item lock (`action: task`, keyed `
|
|
181
|
+
// Acquire the UNIFIED per-item lock (`action: task`, keyed `spec:<slug>` so it
|
|
184
182
|
// shares the ONE ref with claim/advance of the SAME item). A create-only ref
|
|
185
183
|
// CAS: the winner holds it, the loser is DEFINITIVELY `lost` (exit 2, no retry
|
|
186
184
|
// budget). No auto-steal of an orphaned lock, consistent with claim/advance and
|
|
187
185
|
// the ADR's recovery model (no liveness heartbeat / auto-sweep; a human asserts
|
|
188
186
|
// a lock is dead via `release-lock` + `gc --ledger`).
|
|
189
|
-
//
|
|
190
|
-
//
|
|
191
|
-
//
|
|
192
|
-
//
|
|
193
|
-
//
|
|
194
|
-
// contract task removes the legacy form.
|
|
187
|
+
// Spec `prd-to-spec-vocabulary-cutover-and-migration-command`: the parent-spec
|
|
188
|
+
// item identity is `spec:<slug>`, so the unified per-item lock ref is
|
|
189
|
+
// `refs/dorfl/lock/spec-<slug>`. HARD CUTOVER: the legacy ''prd:<slug>'' identity
|
|
190
|
+
// is GONE — the resolver no longer treats ''prd:'' as the spec namespace (a
|
|
191
|
+
// ''prd:<slug>'' arg is a bare literal task slug now).
|
|
195
192
|
const lock = await acquireItemLock({
|
|
196
193
|
item: `spec:${slug}`,
|
|
197
194
|
action: 'task',
|
|
@@ -228,7 +225,7 @@ export type ReleaseTaskingLockOutcome =
|
|
|
228
225
|
export type ReleaseTaskingLockExitCode = 0 | 1 | 2 | 3 | 4;
|
|
229
226
|
|
|
230
227
|
export interface ReleaseTaskingLockOptions {
|
|
231
|
-
/** The
|
|
228
|
+
/** The spec slug whose lock to release. */
|
|
232
229
|
slug: string;
|
|
233
230
|
/** Working clone/worktree the release runs in. */
|
|
234
231
|
cwd: string;
|
|
@@ -249,9 +246,9 @@ export interface ReleaseTaskingLockOptions {
|
|
|
249
246
|
/**
|
|
250
247
|
* The tasker review→edit LOOP's **decomposition-unclear** verdict
|
|
251
248
|
* (`slicer-review-edit-loop`), or the task-SET acceptance gate's `block`:
|
|
252
|
-
* instead of DELETING the lock (returning the
|
|
249
|
+
* instead of DELETING the lock (returning the spec to the claimable/taskable
|
|
253
250
|
* pool), amend it `active → stuck` with this reason recorded on the entry,
|
|
254
|
-
* emitting NO guessed tasks. The
|
|
251
|
+
* emitting NO guessed tasks. The spec body stays in `work/specs/ready/` (it never moved
|
|
255
252
|
* under the lock); the stuck lock IS the tasking needs-attention surface (no
|
|
256
253
|
* `work/needs-attention/` folder write), so it is NOT re-taskable until a human
|
|
257
254
|
* resolves it via `release-lock`/`resume`. Omitted ⇒ the normal release DELETES
|
|
@@ -274,9 +271,9 @@ export interface ReleaseTaskingLockResult {
|
|
|
274
271
|
/**
|
|
275
272
|
* Release the tasking lock for `slug`: DELETE the unified `action: task` lock ref
|
|
276
273
|
* (idempotent — an already-absent ref is a clean `released`). It moves NO lifecycle
|
|
277
|
-
* file: the durable `
|
|
278
|
-
* and the
|
|
279
|
-
* `tasking/ →
|
|
274
|
+
* file: the durable `specs/ready → specs/tasked` success move is owned by the integrate band,
|
|
275
|
+
* and the spec body never left `work/specs/ready/` under the lock, so there is no
|
|
276
|
+
* `tasking/ → specs/ready/` restore.
|
|
280
277
|
*
|
|
281
278
|
* When `routeToNeedsAttention` is set (the tasker decomposition-unclear verdict /
|
|
282
279
|
* the task-SET acceptance gate `block`), the lock is AMENDED `active → stuck`
|
|
@@ -326,33 +323,51 @@ async function runRelease(
|
|
|
326
323
|
);
|
|
327
324
|
}
|
|
328
325
|
|
|
329
|
-
// DECOMPOSITION-UNCLEAR / TASK-GATE BLOCK:
|
|
330
|
-
//
|
|
331
|
-
//
|
|
332
|
-
//
|
|
326
|
+
// DECOMPOSITION-UNCLEAR / TASK-GATE BLOCK: surface the spec as a `stuck`-kind
|
|
327
|
+
// sidecar + `needsAnswers:true` on the spec body in ONE commit on
|
|
328
|
+
// `<arbiter>/main`, THEN release the tasking lock (PR-2b, spec
|
|
329
|
+
// `surface-stuck-as-questions-and-retire-stuck-lock-state`, decision #1). The
|
|
330
|
+
// spec body stays in `work/specs/ready/` (or `work/specs/proposed/` — the D1
|
|
331
|
+
// probe finds it); the surfaced question keeps the spec out of the taskable
|
|
332
|
+
// pool via `needsAnswers:true` (eligibility `false`) until a human answers.
|
|
333
333
|
if (options.routeToNeedsAttention !== undefined) {
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
// `wrong-state` (already stuck) is a tolerated idempotent re-surface.
|
|
344
|
-
const message = `Routed the tasking of '${slug}' to needs-attention (per-item lock marked stuck).`;
|
|
334
|
+
const item = `spec:${slug}`;
|
|
335
|
+
// Detect a genuinely NOT-HELD lock BEFORE the surface (so a bounce of an
|
|
336
|
+
// unlocked spec still returns the exit-2 `lost` contract). The surface itself
|
|
337
|
+
// is idempotent, but without this pre-check a not-held spec would surface
|
|
338
|
+
// silently on main with no lock to release — losing the caller-visible
|
|
339
|
+
// "nothing to route" signal.
|
|
340
|
+
const held = await readItemLock({item, cwd, arbiter, env});
|
|
341
|
+
if (held === undefined) {
|
|
342
|
+
const message = `'${slug}' is not locked for tasking — nothing to route to needs-attention.`;
|
|
345
343
|
note(message);
|
|
346
|
-
return {exitCode:
|
|
344
|
+
return {exitCode: 2, outcome: 'lost', message};
|
|
347
345
|
}
|
|
348
|
-
|
|
349
|
-
const
|
|
346
|
+
try {
|
|
347
|
+
const surfaced = await surfaceStuckToNeedsAttention({
|
|
348
|
+
cwd,
|
|
349
|
+
slug,
|
|
350
|
+
item,
|
|
351
|
+
reason: options.routeToNeedsAttention.reason,
|
|
352
|
+
arbiter,
|
|
353
|
+
env,
|
|
354
|
+
note,
|
|
355
|
+
});
|
|
356
|
+
if (surfaced.surfaced || surfaced.bodyAbsent) {
|
|
357
|
+
const message = surfaced.surfaced
|
|
358
|
+
? `Routed the tasking of '${slug}' to needs-attention (surfaced on ${arbiter}/main; tasking lock released).`
|
|
359
|
+
: `Routed the tasking of '${slug}' to needs-attention (no spec body on ${arbiter}/main — clean no-op surface; tasking lock released).`;
|
|
360
|
+
note(message);
|
|
361
|
+
return {exitCode: 0, outcome: 'released', message};
|
|
362
|
+
}
|
|
363
|
+
const message = `could not surface '${item}' on ${arbiter}/main (${surfaced.reasonNotSurfaced ?? 'unknown'}).`;
|
|
350
364
|
note(message);
|
|
351
|
-
return {exitCode:
|
|
365
|
+
return {exitCode: 1, outcome: 'usage-error', message};
|
|
366
|
+
} catch (err) {
|
|
367
|
+
const message = `could not surface '${item}' on ${arbiter}/main (${err instanceof Error ? err.message : String(err)}).`;
|
|
368
|
+
note(message);
|
|
369
|
+
return {exitCode: 1, outcome: 'usage-error', message};
|
|
352
370
|
}
|
|
353
|
-
const message = `could not mark the per-item lock for '${slug}' stuck (${stuck.outcome}: ${stuck.message}).`;
|
|
354
|
-
note(message);
|
|
355
|
-
return {exitCode: 1, outcome: 'usage-error', message};
|
|
356
371
|
}
|
|
357
372
|
|
|
358
373
|
// NORMAL release: delete the lock ref (idempotent).
|