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/dist/intake-event.js
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* **`intake`'s PURE event-classification** (task `intake-event-classification`,
|
|
2
|
+
* **`intake`'s PURE event-classification** (task `intake-event-classification`, spec
|
|
3
3
|
* `issue-intake` US #2 — the resume-on-thread-change behaviour).
|
|
4
4
|
*
|
|
5
5
|
* `intake` is a CONVERSATION on an issue thread: a run may ASK a clarifying question
|
|
6
|
-
* and STOP, expecting a LATER run to resume from the updated thread (
|
|
6
|
+
* and STOP, expecting a LATER run to resume from the updated thread (spec "Loop
|
|
7
7
|
* closure" / the decision table's ASK row). This module is the PURE CONTROL-PATH
|
|
8
8
|
* classifier the re-run depends on: given an issue EVENT, it decides whether `intake`
|
|
9
9
|
* should RE-EVALUATE the whole thread or IGNORE the event.
|
|
10
10
|
*
|
|
11
|
-
* THE CANONICAL RULE (from
|
|
11
|
+
* THE CANONICAL RULE (from spec `issue-intake`, "The engine shape"): *"The loop
|
|
12
12
|
* re-runs on a new comment OR an issue-body edit (re-evaluate the whole thread); a
|
|
13
13
|
* buried prior-comment edit is IGNORED."*
|
|
14
14
|
*
|
|
@@ -23,7 +23,7 @@
|
|
|
23
23
|
* distinction the rule turns on is "a NEW turn vs an edit of a BURIED prior turn",
|
|
24
24
|
* NOT "edit vs reply".
|
|
25
25
|
*
|
|
26
|
-
* SCOPE FENCE (
|
|
26
|
+
* SCOPE FENCE (spec "Scope: the engine only"): this is ONLY the pure classifier. It is
|
|
27
27
|
* NOT CI's TRIGGER POLICY (command/every-issue, maintainer/anyone) — that is
|
|
28
28
|
* `runner-in-ci`'s. CI's trigger LATER CONSULTS this classifier, but the policy of
|
|
29
29
|
* WHO/WHAT may trigger lives in CI, not here. This module touches no seam, no git, no
|
|
@@ -32,10 +32,10 @@
|
|
|
32
32
|
*/
|
|
33
33
|
/**
|
|
34
34
|
* Classify an issue EVENT into the CONTROL-PATH decision: RE-EVALUATE the whole
|
|
35
|
-
* thread, or IGNORE the event. The PURE realisation of the
|
|
35
|
+
* thread, or IGNORE the event. The PURE realisation of the spec's canonical rule
|
|
36
36
|
* (no seam, no git, no `gh`).
|
|
37
37
|
*
|
|
38
|
-
* The table (
|
|
38
|
+
* The table (spec `issue-intake` US #2):
|
|
39
39
|
*
|
|
40
40
|
* | event kind | decision | why |
|
|
41
41
|
* | ----------------------- | ------------- | -------------------------------------------- |
|
package/dist/intake-marker.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import type { IssueComment } from './issue-provider.js';
|
|
2
2
|
/**
|
|
3
|
-
* **The intake MARKER** (task `intake-self-awareness-resumption-tracking`,
|
|
3
|
+
* **The intake MARKER** (task `intake-self-awareness-resumption-tracking`, spec
|
|
4
4
|
* `issue-intake` US #2/#10): the ONE primitive the deterministic pre-decision
|
|
5
5
|
* TRIAGE GATE is built on. A machine-readable HIDDEN HTML comment intake stamps on
|
|
6
6
|
* EVERY comment it posts, recording a neutral FACT about what intake did:
|
|
@@ -24,7 +24,7 @@ import type { IssueComment } from './issue-provider.js';
|
|
|
24
24
|
* TERMINAL is the TRIAGE's interpretation, NEVER data in the marker (no `terminal`
|
|
25
25
|
* field): if a kind's terminal-ness ever changes that is a triage change and old
|
|
26
26
|
* markers stay valid.
|
|
27
|
-
* - **`slug`** \u2014 present only on `kind=created` (which task/
|
|
27
|
+
* - **`slug`** \u2014 present only on `kind=created` (which task/spec intake produced).
|
|
28
28
|
* - **`seen=<id>,\u2026`** \u2014 the per-run DELTA of HUMAN comment ids intake READ this run
|
|
29
29
|
* (EXCLUDING intake's own marker-comments AND any human id already in a prior
|
|
30
30
|
* marker's `seen=`). Ids, not a count, because a count cannot distinguish "a new
|
|
@@ -43,7 +43,7 @@ export interface IntakeMarker {
|
|
|
43
43
|
kind: IntakeMarkerKind;
|
|
44
44
|
/** The HUMAN comment ids intake READ this run (the per-run delta; may be empty). */
|
|
45
45
|
seen: string[];
|
|
46
|
-
/** The created task/
|
|
46
|
+
/** The created task/spec slug \u2014 present only on `kind=created`. */
|
|
47
47
|
slug?: string;
|
|
48
48
|
}
|
|
49
49
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"intake-marker.d.ts","sourceRoot":"","sources":["../src/intake-marker.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAC,YAAY,EAAC,MAAM,qBAAqB,CAAC;AAEtD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAmCG;AAEH,iGAAiG;AACjG,MAAM,MAAM,gBAAgB,GAAG,KAAK,GAAG,SAAS,GAAG,SAAS,CAAC;AAE7D,4FAA4F;AAC5F,MAAM,WAAW,YAAY;IAC5B,iFAAiF;IACjF,IAAI,EAAE,gBAAgB,CAAC;IACvB,oFAAoF;IACpF,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,
|
|
1
|
+
{"version":3,"file":"intake-marker.d.ts","sourceRoot":"","sources":["../src/intake-marker.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAC,YAAY,EAAC,MAAM,qBAAqB,CAAC;AAEtD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAmCG;AAEH,iGAAiG;AACjG,MAAM,MAAM,gBAAgB,GAAG,KAAK,GAAG,SAAS,GAAG,SAAS,CAAC;AAE7D,4FAA4F;AAC5F,MAAM,WAAW,YAAY;IAC5B,iFAAiF;IACjF,IAAI,EAAE,gBAAgB,CAAC;IACvB,oFAAoF;IACpF,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,wEAAwE;IACxE,IAAI,CAAC,EAAE,MAAM,CAAC;CACd;AAiBD;;;;;;;;;;;GAWG;AACH,wBAAgB,iBAAiB,CAChC,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE;IAAC,IAAI,EAAE,gBAAgB,CAAC;IAAC,IAAI,EAAE,MAAM,EAAE,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAA;CAAC,GAC7D,MAAM,CAaR;AAED;;;;;;;GAOG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,YAAY,GAAG,SAAS,CAsBxE;AAED,4FAA4F;AAC5F,wBAAgB,eAAe,CAAC,OAAO,EAAE,YAAY,GAAG,OAAO,CAE9D;AAED;;;;;;;;GAQG;AACH,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,YAAY,EAAE,GAAG,MAAM,EAAE,CAiBnE;AAED;;;;;;GAMG;AACH,wBAAgB,WAAW,CAAC,QAAQ,EAAE,YAAY,EAAE,GAAG,GAAG,CAAC,MAAM,CAAC,CAYjE"}
|
package/dist/intake-triage.d.ts
CHANGED
|
@@ -25,7 +25,7 @@ export type IntakeTriageDecision = {
|
|
|
25
25
|
};
|
|
26
26
|
/**
|
|
27
27
|
* Run the TRIAGE over the issue's full comment thread (oldest-first, as
|
|
28
|
-
* `listComments` returns it). The canonical branches (
|
|
28
|
+
* `listComments` returns it). The canonical branches (spec `issue-intake`):
|
|
29
29
|
*
|
|
30
30
|
* 1. **Last comment is INTAKE's** (carries a marker). Build `seenSet` = the UNION of
|
|
31
31
|
* every intake marker's `seen=` id-list, then:
|
package/dist/intake-triage.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { parseIntakeMarker, seenSetFrom, } from './intake-marker.js';
|
|
2
2
|
/**
|
|
3
|
-
* **The intake TRIAGE GATE** (task `intake-self-awareness-resumption-tracking`,
|
|
3
|
+
* **The intake TRIAGE GATE** (task `intake-self-awareness-resumption-tracking`, spec
|
|
4
4
|
* `issue-intake` US #2/#10): a DETERMINISTIC pre-decision gate that runs UNDER the
|
|
5
5
|
* processing lock, BEFORE the decision prompt, deciding whether intake should run
|
|
6
6
|
* the prompt at all. Built ENTIRELY on the thread MARKER (no sidecar, no cursor, no
|
|
@@ -21,7 +21,7 @@ import { parseIntakeMarker, seenSetFrom, } from './intake-marker.js';
|
|
|
21
21
|
const TERMINAL_KINDS = new Set(['bounced', 'created']);
|
|
22
22
|
/**
|
|
23
23
|
* Run the TRIAGE over the issue's full comment thread (oldest-first, as
|
|
24
|
-
* `listComments` returns it). The canonical branches (
|
|
24
|
+
* `listComments` returns it). The canonical branches (spec `issue-intake`):
|
|
25
25
|
*
|
|
26
26
|
* 1. **Last comment is INTAKE's** (carries a marker). Build `seenSet` = the UNION of
|
|
27
27
|
* every intake marker's `seen=` id-list, then:
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* The `install-ci` ISSUE-INTAKE capability (
|
|
2
|
+
* The `install-ci` ISSUE-INTAKE capability (spec `runner-in-ci`, task
|
|
3
3
|
* `install-ci-intake-trigger-and-review-surface`; capability D: consider incoming
|
|
4
|
-
* issues → task/
|
|
4
|
+
* issues → task/spec, AND insertion point E: surface the review verdict back into
|
|
5
5
|
* the issue thread). This module GENERATES the one fixed intake workflow file and
|
|
6
6
|
* STRUCTURALLY VALIDATES it, mirroring the snapshot-assertion style of
|
|
7
7
|
* `advance-lifecycle-template.ts` / `advance-ci-template.ts` (the package depends on
|
|
@@ -10,13 +10,13 @@
|
|
|
10
10
|
* ({@link deriveIntakeFlags}) — CI's merge-vs-propose POLICY, the load-bearing
|
|
11
11
|
* testable logic the workflow encodes at runtime.
|
|
12
12
|
*
|
|
13
|
-
* SCOPE FENCE (
|
|
13
|
+
* SCOPE FENCE (spec Out-of-Scope): the issue→artifact TRANSFORM engine is
|
|
14
14
|
* `issue-intake`'s (`intake <N>` + its four-outcome dispatch + the per-outcome
|
|
15
15
|
* KNOBS + the lone-task review that posts to the issue thread). CI only
|
|
16
16
|
* WIRES/SCHEDULES/INVOKES it and owns the merge-vs-propose POLICY + the delivery
|
|
17
17
|
* surface. This module emits NO transform; it emits the WORKFLOW that calls it.
|
|
18
18
|
*
|
|
19
|
-
* The discipline (
|
|
19
|
+
* The discipline (spec capability-D row + the merge-vs-propose POLICY + the two
|
|
20
20
|
* RESOLVED design decisions in the task):
|
|
21
21
|
*
|
|
22
22
|
* - TRIGGERS: `issues` opened, `issue_comment` created, and a label
|
|
@@ -36,7 +36,7 @@
|
|
|
36
36
|
* everywhere" path is a LOUD, NON-DEFAULT opt-in — the default is conservative
|
|
37
37
|
* (propose / human-in-the-loop).
|
|
38
38
|
* - INSERTION POINT E (the issue-thread review surface): the review verdict over
|
|
39
|
-
* intake's generated
|
|
39
|
+
* intake's generated specs/tasks is surfaced into the ISSUE THREAD via the
|
|
40
40
|
* `IssueProvider.postIssueComment` seam (issue thread, by NUMBER — NOT the PR
|
|
41
41
|
* seam `postPRComment`, which is keyed by url). This is REUSED, not new:
|
|
42
42
|
* `intake <N>` already runs the lone-task review/edit loop and posts its
|
|
@@ -59,7 +59,7 @@ import type { ResolvedCIConfig } from './install-ci-core.js';
|
|
|
59
59
|
/** The capability id (the registry key + the emitted workflow file stem). */
|
|
60
60
|
export declare const INTAKE_TRIGGER_CAPABILITY_ID = "intake";
|
|
61
61
|
/** The wizard-facing label for the issue-intake capability. */
|
|
62
|
-
export declare const INTAKE_TRIGGER_CAPABILITY_LABEL = "Consider incoming issues \u2192 task/
|
|
62
|
+
export declare const INTAKE_TRIGGER_CAPABILITY_LABEL = "Consider incoming issues \u2192 task/spec + surface the review verdict into the issue thread (the intake trigger: issues / issue_comment / label)";
|
|
63
63
|
/** The repo-relative path (under the output base) of the emitted workflow. */
|
|
64
64
|
export declare const INTAKE_TRIGGER_WORKFLOW_PATH = "workflows/intake.yml";
|
|
65
65
|
/**
|
|
@@ -90,7 +90,7 @@ export interface IntakeIntegrationFlags {
|
|
|
90
90
|
task: 'merge' | 'propose';
|
|
91
91
|
/**
|
|
92
92
|
* The ORIGIN-TRUST verdict CI passes to `intake <N>` via `--origin-trust`
|
|
93
|
-
* (task `untrusted-origin-forces-build-propose`) so the emitted
|
|
93
|
+
* (task `untrusted-origin-forces-build-propose`) so the emitted spec/task is
|
|
94
94
|
* STAMPED with how it was born. Derived from the SAME `author_association` case
|
|
95
95
|
* as the integration flags (it IS `authorTrusted` collapsed to the wire value),
|
|
96
96
|
* so the stamp and the integration mode CANNOT desync. `intake.ts` writes it
|
|
@@ -116,7 +116,7 @@ export interface IntakeGateState {
|
|
|
116
116
|
}
|
|
117
117
|
/**
|
|
118
118
|
* DERIVE the per-outcome merge-vs-propose flags from the gate state COMPOSED with
|
|
119
|
-
* author-trust — CI's merge-vs-propose POLICY (
|
|
119
|
+
* author-trust — CI's merge-vs-propose POLICY (spec "merge-vs-propose POLICY" +
|
|
120
120
|
* "Composed with AUTHOR-TRUST"; task Decision 1). This is the load-bearing pure
|
|
121
121
|
* logic the workflow encodes at runtime (it reads `author_association` off the
|
|
122
122
|
* event payload and sets the flags accordingly):
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"intake-trigger-template.d.ts","sourceRoot":"","sources":["../src/intake-trigger-template.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAwDG;AAGH,OAAO,KAAK,EAAC,gBAAgB,EAAC,MAAM,sBAAsB,CAAC;AAG3D,6EAA6E;AAC7E,eAAO,MAAM,4BAA4B,WAAW,CAAC;AAErD,+DAA+D;AAC/D,eAAO,MAAM,+BAA+B,
|
|
1
|
+
{"version":3,"file":"intake-trigger-template.d.ts","sourceRoot":"","sources":["../src/intake-trigger-template.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAwDG;AAGH,OAAO,KAAK,EAAC,gBAAgB,EAAC,MAAM,sBAAsB,CAAC;AAG3D,6EAA6E;AAC7E,eAAO,MAAM,4BAA4B,WAAW,CAAC;AAErD,+DAA+D;AAC/D,eAAO,MAAM,+BAA+B,sJACmG,CAAC;AAEhJ,8EAA8E;AAC9E,eAAO,MAAM,4BAA4B,yBAAyB,CAAC;AAEnE;;;;;;GAMG;AACH,eAAO,MAAM,oBAAoB,QAAyB,CAAC;AAI3D;;;;;;GAMG;AACH,eAAO,MAAM,2BAA2B,8CAI9B,CAAC;AAEX;;;;GAIG;AACH,MAAM,WAAW,sBAAsB;IACtC,mEAAmE;IACnE,IAAI,EAAE,OAAO,GAAG,SAAS,CAAC;IAC1B,mEAAmE;IACnE,IAAI,EAAE,OAAO,GAAG,SAAS,CAAC;IAC1B;;;;;;;;OAQG;IACH,WAAW,EAAE,SAAS,GAAG,WAAW,CAAC;CACrC;AAED,oFAAoF;AACpF,MAAM,WAAW,eAAe;IAC/B;;;;OAIG;IACH,SAAS,EAAE,OAAO,CAAC;IACnB;;;;OAIG;IACH,QAAQ,EAAE,OAAO,CAAC;CAClB;AAED;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAgB,iBAAiB,CAAC,OAAO,EAAE;IAC1C,IAAI,EAAE,eAAe,CAAC;IACtB,aAAa,EAAE,OAAO,CAAC;CACvB,GAAG,sBAAsB,CAoBzB;AAED;;;;;GAKG;AACH,wBAAgB,eAAe,CAC9B,iBAAiB,EAAE,MAAM,GAAG,SAAS,GACnC,OAAO,CAMT;AAID;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,gBAAgB,GAAG,MAAM,CA4LvE;AAED,mEAAmE;AACnE,MAAM,WAAW,oBAAoB;IACpC,4EAA4E;IAC5E,EAAE,EAAE,MAAM,CAAC;IACX,8DAA8D;IAC9D,OAAO,EAAE,MAAM,CAAC;CAChB;AAED,oDAAoD;AACpD,MAAM,WAAW,uBAAuB;IACvC,kEAAkE;IAClE,EAAE,EAAE,OAAO,CAAC;IACZ,iDAAiD;IACjD,QAAQ,EAAE,oBAAoB,EAAE,CAAC;CACjC;AAED;;;;;GAKG;AACH,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,MAAM,GAAG,uBAAuB,CAsK5E"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* The `install-ci` ISSUE-INTAKE capability (
|
|
2
|
+
* The `install-ci` ISSUE-INTAKE capability (spec `runner-in-ci`, task
|
|
3
3
|
* `install-ci-intake-trigger-and-review-surface`; capability D: consider incoming
|
|
4
|
-
* issues → task/
|
|
4
|
+
* issues → task/spec, AND insertion point E: surface the review verdict back into
|
|
5
5
|
* the issue thread). This module GENERATES the one fixed intake workflow file and
|
|
6
6
|
* STRUCTURALLY VALIDATES it, mirroring the snapshot-assertion style of
|
|
7
7
|
* `advance-lifecycle-template.ts` / `advance-ci-template.ts` (the package depends on
|
|
@@ -10,13 +10,13 @@
|
|
|
10
10
|
* ({@link deriveIntakeFlags}) — CI's merge-vs-propose POLICY, the load-bearing
|
|
11
11
|
* testable logic the workflow encodes at runtime.
|
|
12
12
|
*
|
|
13
|
-
* SCOPE FENCE (
|
|
13
|
+
* SCOPE FENCE (spec Out-of-Scope): the issue→artifact TRANSFORM engine is
|
|
14
14
|
* `issue-intake`'s (`intake <N>` + its four-outcome dispatch + the per-outcome
|
|
15
15
|
* KNOBS + the lone-task review that posts to the issue thread). CI only
|
|
16
16
|
* WIRES/SCHEDULES/INVOKES it and owns the merge-vs-propose POLICY + the delivery
|
|
17
17
|
* surface. This module emits NO transform; it emits the WORKFLOW that calls it.
|
|
18
18
|
*
|
|
19
|
-
* The discipline (
|
|
19
|
+
* The discipline (spec capability-D row + the merge-vs-propose POLICY + the two
|
|
20
20
|
* RESOLVED design decisions in the task):
|
|
21
21
|
*
|
|
22
22
|
* - TRIGGERS: `issues` opened, `issue_comment` created, and a label
|
|
@@ -36,7 +36,7 @@
|
|
|
36
36
|
* everywhere" path is a LOUD, NON-DEFAULT opt-in — the default is conservative
|
|
37
37
|
* (propose / human-in-the-loop).
|
|
38
38
|
* - INSERTION POINT E (the issue-thread review surface): the review verdict over
|
|
39
|
-
* intake's generated
|
|
39
|
+
* intake's generated specs/tasks is surfaced into the ISSUE THREAD via the
|
|
40
40
|
* `IssueProvider.postIssueComment` seam (issue thread, by NUMBER — NOT the PR
|
|
41
41
|
* seam `postPRComment`, which is keyed by url). This is REUSED, not new:
|
|
42
42
|
* `intake <N>` already runs the lone-task review/edit loop and posts its
|
|
@@ -60,7 +60,7 @@ import { providerSecretsWithBlock } from './install-ci-core.js';
|
|
|
60
60
|
/** The capability id (the registry key + the emitted workflow file stem). */
|
|
61
61
|
export const INTAKE_TRIGGER_CAPABILITY_ID = 'intake';
|
|
62
62
|
/** The wizard-facing label for the issue-intake capability. */
|
|
63
|
-
export const INTAKE_TRIGGER_CAPABILITY_LABEL = 'Consider incoming issues → task/
|
|
63
|
+
export const INTAKE_TRIGGER_CAPABILITY_LABEL = 'Consider incoming issues → task/spec + surface the review verdict into the issue thread (the intake trigger: issues / issue_comment / label)';
|
|
64
64
|
/** The repo-relative path (under the output base) of the emitted workflow. */
|
|
65
65
|
export const INTAKE_TRIGGER_WORKFLOW_PATH = 'workflows/intake.yml';
|
|
66
66
|
/**
|
|
@@ -86,7 +86,7 @@ export const TRUSTED_AUTHOR_ASSOCIATIONS = [
|
|
|
86
86
|
];
|
|
87
87
|
/**
|
|
88
88
|
* DERIVE the per-outcome merge-vs-propose flags from the gate state COMPOSED with
|
|
89
|
-
* author-trust — CI's merge-vs-propose POLICY (
|
|
89
|
+
* author-trust — CI's merge-vs-propose POLICY (spec "merge-vs-propose POLICY" +
|
|
90
90
|
* "Composed with AUTHOR-TRUST"; task Decision 1). This is the load-bearing pure
|
|
91
91
|
* logic the workflow encodes at runtime (it reads `author_association` off the
|
|
92
92
|
* event payload and sets the flags accordingly):
|
|
@@ -115,9 +115,9 @@ export function deriveIntakeFlags(options) {
|
|
|
115
115
|
// ORIGIN-TRUST stamp (task `untrusted-origin-forces-build-propose`): the SAME
|
|
116
116
|
// author-trust verdict, collapsed to the wire value `intake` stamps onto the
|
|
117
117
|
// emitted artifact. Derived HERE — next to the integration flags, off the SAME
|
|
118
|
-
// `authorTrusted` input — so the stamp and the task/
|
|
118
|
+
// `authorTrusted` input — so the stamp and the task/spec modes cannot desync.
|
|
119
119
|
// It is NOT a re-resolution of trust (CI already resolved it); it is the verdict
|
|
120
|
-
// being CARRIED so it survives the
|
|
120
|
+
// being CARRIED so it survives the spec/task merge boundary (the becomes-code
|
|
121
121
|
// checkpoint is not laundered when the file lands on main).
|
|
122
122
|
const originTrust = authorTrusted
|
|
123
123
|
? 'trusted'
|
|
@@ -159,12 +159,12 @@ export function generateIntakeWorkflow(config) {
|
|
|
159
159
|
const setupWith = providerSecretsWithBlock(config);
|
|
160
160
|
return `\
|
|
161
161
|
# dorfl — the ISSUE INTAKE trigger in CI (capability D: consider incoming
|
|
162
|
-
# issues → task/
|
|
163
|
-
# issue thread,
|
|
162
|
+
# issues → task/spec, PLUS insertion point E: surface the review verdict into the
|
|
163
|
+
# issue thread, spec runner-in-ci). EMITTED by \`dorfl install-ci\`; the human
|
|
164
164
|
# commits it. DO NOT hand-edit a copy — re-run install-ci to upgrade the shell.
|
|
165
165
|
#
|
|
166
166
|
# WHAT IT DOES — \`dorfl intake <N>\` reads issue #N + its comment thread,
|
|
167
|
-
# runs a prompt→verdict decision (ask / task /
|
|
167
|
+
# runs a prompt→verdict decision (ask / task / SPEC / bounce), and dispatches it.
|
|
168
168
|
# CI owns ONLY the trigger + the merge-vs-propose POLICY + the delivery surface;
|
|
169
169
|
# the TRANSFORM is the engine's (the Out-of-Scope fence — CI re-implements none of
|
|
170
170
|
# it). The lone-task review/edit loop \`intake\` already runs ALSO surfaces its
|
|
@@ -250,7 +250,7 @@ env:
|
|
|
250
250
|
# permissive merge side; author-trust then forces propose for a task from an
|
|
251
251
|
# untrusted author.
|
|
252
252
|
DORFL_AUTO_BUILD: 'false' # gate: will an agent auto-build the emitted task next?
|
|
253
|
-
DORFL_AUTO_TASK: 'false' # gate: will an agent auto-task the emitted
|
|
253
|
+
DORFL_AUTO_TASK: 'false' # gate: will an agent auto-task the emitted spec next?
|
|
254
254
|
|
|
255
255
|
jobs:
|
|
256
256
|
intake:
|
|
@@ -260,7 +260,7 @@ jobs:
|
|
|
260
260
|
if: \${{ github.event.issue.number && !github.event.issue.pull_request }}
|
|
261
261
|
runs-on: ubuntu-latest
|
|
262
262
|
steps:
|
|
263
|
-
- uses: actions/checkout@
|
|
263
|
+
- uses: actions/checkout@v5
|
|
264
264
|
with:
|
|
265
265
|
fetch-depth: 0
|
|
266
266
|
- uses: ./.github/actions/dorfl-setup${setupWith}
|
|
@@ -308,8 +308,8 @@ jobs:
|
|
|
308
308
|
|
|
309
309
|
# ORIGIN-TRUST stamp (task untrusted-origin-forces-build-propose):
|
|
310
310
|
# derived from the SAME \${trusted} case above (one author-trust read,
|
|
311
|
-
# two consumers — the task/
|
|
312
|
-
# desync). \`intake\` STAMPS this onto the emitted
|
|
311
|
+
# two consumers — the task/spec modes AND the stamp — so they cannot
|
|
312
|
+
# desync). \`intake\` STAMPS this onto the emitted spec/task frontmatter
|
|
313
313
|
# (origin: issue + originTrust: <value>); it does NOT re-resolve trust
|
|
314
314
|
# (that is CI's policy, passed IN). The stamp SURVIVES the merge boundary
|
|
315
315
|
# so a later auto-task/auto-build of an untrusted-origin artifact still
|
|
@@ -410,7 +410,7 @@ export function validateIntakeWorkflow(text) {
|
|
|
410
410
|
require('derives-propose-spec', /--propose-spec\b/.test(operative), 'the policy derivation must be able to emit `--propose-spec` (autoTask on).');
|
|
411
411
|
// ORIGIN-TRUST stamp (task untrusted-origin-forces-build-propose): the shell
|
|
412
412
|
// must derive `--origin-trust <trusted|untrusted>` from the SAME author-trust
|
|
413
|
-
// case it uses for the task/
|
|
413
|
+
// case it uses for the task/SPEC modes, and pass it to `intake` so the emitted
|
|
414
414
|
// artifact is stamped (the stamp + the modes cannot desync).
|
|
415
415
|
require('derives-origin-trust-untrusted', /--origin-trust=untrusted\b/.test(operative), 'the policy derivation must emit `--origin-trust=untrusted` for a non-trusted ' +
|
|
416
416
|
'author (so the emitted artifact is stamped untrusted; task ' +
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"intake-trigger-template.js","sourceRoot":"","sources":["../src/intake-trigger-template.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAwDG;AAEH,OAAO,EAAC,KAAK,EAAC,MAAM,YAAY,CAAC;AAEjC,OAAO,EAAC,wBAAwB,EAAC,MAAM,sBAAsB,CAAC;AAE9D,6EAA6E;AAC7E,MAAM,CAAC,MAAM,4BAA4B,GAAG,QAAQ,CAAC;AAErD,+DAA+D;AAC/D,MAAM,CAAC,MAAM,+BAA+B,GAC3C,
|
|
1
|
+
{"version":3,"file":"intake-trigger-template.js","sourceRoot":"","sources":["../src/intake-trigger-template.ts"],"names":[],"mappings":"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"}
|
package/dist/intake.d.ts
CHANGED
|
@@ -7,7 +7,7 @@ import { type Issue, type IssueComment, type IssueProvider } from './issue-provi
|
|
|
7
7
|
import { parseReviewVerdict, type ReviewFinding, type ReviewVerdict } from './review-verdict.js';
|
|
8
8
|
import { type IntakeTriageDecision } from './intake-triage.js';
|
|
9
9
|
/**
|
|
10
|
-
* **`intake <N>`** (
|
|
10
|
+
* **`intake <N>`** (spec `issue-intake`, task `intake-tracer-slice-outcome`): the
|
|
11
11
|
* KEYSTONE of the issue front-door. A new, GATE-FREE command — explicit invocation
|
|
12
12
|
* IS the authorization (precedent: `explicit-do-prd-not-gated-by-autoslice`), so
|
|
13
13
|
* `autoTask`/`autoBuild` config does NOT apply — that reads a GitHub issue + its
|
|
@@ -21,24 +21,24 @@ import { type IntakeTriageDecision } from './intake-triage.js';
|
|
|
21
21
|
* prompt's JUDGEMENT is NOT unit-tested (like the review prompt's is not); only the
|
|
22
22
|
* dispatch is.
|
|
23
23
|
*
|
|
24
|
-
* The dispatcher implements the FULL four-outcome decision table (
|
|
24
|
+
* The dispatcher implements the FULL four-outcome decision table (spec
|
|
25
25
|
* `issue-intake` — the source of truth):
|
|
26
26
|
* - **ASK** (not clear enough to act on): `postIssueComment` the next clarifying
|
|
27
27
|
* question; emit NOTHING; STOP.
|
|
28
28
|
* - **TASK** (clear AND fits ONE tracer-bullet task): write
|
|
29
|
-
* `work/backlog/<slug>.md` (`covers: []`, NO `
|
|
29
|
+
* `work/backlog/<slug>.md` (`covers: []`, NO `spec:`) carrying `issue: N` (the
|
|
30
30
|
* lone-task closure link, NOT `Fixes #N`), integrate via {@link
|
|
31
31
|
* performIntegration} (default `propose`).
|
|
32
|
-
* - **
|
|
33
|
-
* which is NEVER bounced): write the
|
|
34
|
-
* axes the verdict carried), integrate, STOP (tasking is the separate `do
|
|
32
|
+
* - **SPEC** (clear AND coherent but >1 task — INCLUDING a coupled-but-SMALL pair,
|
|
33
|
+
* which is NEVER bounced): write the spec file (`work/specs/ready/<slug>.md`) with `issue: N` (+ the gate
|
|
34
|
+
* axes the verdict carried), integrate, STOP (tasking is the separate `do spec:`
|
|
35
35
|
* step).
|
|
36
36
|
* - **BOUNCE** (genuinely UNRELATED concerns — no shared vision): the bounce is
|
|
37
37
|
* TERMINAL (the asks are unrelated and must be re-filed), so intake CLOSES the
|
|
38
38
|
* issue ATOMICALLY — the "file separate issues" text as the closing comment +
|
|
39
39
|
* `reason: not planned` (the honest GitHub-native signal) in ONE `closeIssue`
|
|
40
40
|
* call; emit NOTHING. Intake closes on BOUNCE (as not planned); NEVER on
|
|
41
|
-
* task/
|
|
41
|
+
* task/spec (CI's close-job closes those via the `issue:` field) / ask.
|
|
42
42
|
*
|
|
43
43
|
* The per-outcome integration KNOBS, the processing LOCK, and event-classification
|
|
44
44
|
* are LATER tasks and are NOT built here (default `propose` is fine here).
|
|
@@ -50,10 +50,10 @@ import { type IntakeTriageDecision } from './intake-triage.js';
|
|
|
50
50
|
*/
|
|
51
51
|
/**
|
|
52
52
|
* The four outcomes the decision prompt classifies an issue into (the decision
|
|
53
|
-
* table). EXPAND step (
|
|
53
|
+
* table). EXPAND step (spec
|
|
54
54
|
* `prd-to-spec-vocabulary-cutover-and-migration-command`): the `spec` outcome
|
|
55
55
|
* names the "clear + coherent but >1 task" classification (a parent SPEC). HARD
|
|
56
|
-
* CUTOVER (contract step): the legacy
|
|
56
|
+
* CUTOVER (contract step): the legacy ''prd'' outcome token is GONE — the prompt
|
|
57
57
|
* emits `spec` and the parser rejects any other token.
|
|
58
58
|
*/
|
|
59
59
|
export type IntakeOutcome = 'ask' | 'task' | 'spec' | 'bounce';
|
|
@@ -79,7 +79,7 @@ export interface IntakeVerdict {
|
|
|
79
79
|
/**
|
|
80
80
|
* The drafted task BODY (`task` outcome) — the markdown AFTER the frontmatter
|
|
81
81
|
* (the `## What to build` / `## Acceptance criteria` / `## Prompt` sections). The
|
|
82
|
-
* dispatcher writes the frontmatter (slug/title/`covers: []`, NO `
|
|
82
|
+
* dispatcher writes the frontmatter (slug/title/`covers: []`, NO `spec:`) carrying
|
|
83
83
|
* the lone-task `issue: N` closure link itself; the agent never writes
|
|
84
84
|
* git-visible files.
|
|
85
85
|
*/
|
|
@@ -108,7 +108,7 @@ export interface IntakeVerdict {
|
|
|
108
108
|
specBody?: string;
|
|
109
109
|
/**
|
|
110
110
|
* The spec's gate axes (`spec` outcome) AS THE PROMPT JUDGED THEM — surfaced onto
|
|
111
|
-
* the emitted spec frontmatter (
|
|
111
|
+
* the emitted spec frontmatter (spec `issue-intake` US #8: "the emitted artifact
|
|
112
112
|
* carries … its own gate axes"). Both omitted (undeclared) by default; the prompt
|
|
113
113
|
* sets `specHumanOnly: true` when a human should drive the TASKING and/or
|
|
114
114
|
* `specNeedsAnswers: true` when open questions remain.
|
|
@@ -130,16 +130,16 @@ export interface IntakeResult {
|
|
|
130
130
|
outcome: IntakeRunOutcome;
|
|
131
131
|
/** The issue number acted on. */
|
|
132
132
|
issueNumber: number;
|
|
133
|
-
/** The slug of the emitted artifact (task OR
|
|
133
|
+
/** The slug of the emitted artifact (task OR spec outcome). */
|
|
134
134
|
emittedSlug?: string;
|
|
135
|
-
/** Repo-relative path of the emitted artifact (task OR
|
|
135
|
+
/** Repo-relative path of the emitted artifact (task OR spec outcome). */
|
|
136
136
|
emitted?: string;
|
|
137
137
|
/** True iff a comment was posted on the issue (ask / bounce outcomes). */
|
|
138
138
|
commented?: boolean;
|
|
139
139
|
/**
|
|
140
140
|
* True iff the ISSUE was closed (the BOUNCE outcome — a terminal bounce closes
|
|
141
141
|
* the issue atomically as `not planned`). Additive (mirrors {@link commented}),
|
|
142
|
-
* so CI / callers can observe the close. Never set on ask/task/
|
|
142
|
+
* so CI / callers can observe the close. Never set on ask/task/spec.
|
|
143
143
|
*/
|
|
144
144
|
closed?: boolean;
|
|
145
145
|
/** Human-readable summary of the terminal condition. */
|
|
@@ -195,10 +195,10 @@ export interface PerformIntakeOptions {
|
|
|
195
195
|
/** The HOST-ONLY sessions root for the pi session file. */
|
|
196
196
|
sessionsDir?: string;
|
|
197
197
|
/**
|
|
198
|
-
* The PER-OUTCOME integration modes (
|
|
198
|
+
* The PER-OUTCOME integration modes (spec `issue-intake` US #9) the emitted artifact integrates
|
|
199
199
|
* THROUGH the shared core with. Because `intake` decides the artifact TYPE at
|
|
200
200
|
* RUNTIME, the mode is keyed per type: an emitted task integrates with
|
|
201
|
-
* `integration.task`, an emitted
|
|
201
|
+
* `integration.task`, an emitted spec with `integration.spec` (`propose` =
|
|
202
202
|
* push the `work/<slug>` branch + open a PR, NO `main` touch; `merge` = land on
|
|
203
203
|
* `main`). The CLI resolves this from the granular + aggregate flags via
|
|
204
204
|
* {@link resolveIntakeIntegrationModes}; ask/bounce emit nothing, so the modes
|
|
@@ -208,8 +208,8 @@ export interface PerformIntakeOptions {
|
|
|
208
208
|
/**
|
|
209
209
|
* **The ORIGIN-TRUST verdict, passed IN** (task
|
|
210
210
|
* `untrusted-origin-forces-build-propose`; the `--origin-trust <trusted|untrusted>`
|
|
211
|
-
* CLI flag). `intake` STAMPS `origin: issue` + this `originTrust` onto every
|
|
212
|
-
* task it emits, so the author-trust signal SURVIVES the
|
|
211
|
+
* CLI flag). `intake` STAMPS `origin: issue` + this `originTrust` onto every spec/
|
|
212
|
+
* task it emits, so the author-trust signal SURVIVES the spec/task merge
|
|
213
213
|
* boundary (a landed-on-main artifact otherwise erases how it was born, the
|
|
214
214
|
* laundering gap). `intake` does NOT resolve trust itself: the verdict is CI's
|
|
215
215
|
* POLICY, computed in the `intake.yml` shell from the SAME `author_association`
|
|
@@ -227,7 +227,7 @@ export interface PerformIntakeOptions {
|
|
|
227
227
|
*/
|
|
228
228
|
noPR?: boolean;
|
|
229
229
|
/**
|
|
230
|
-
* **The per-repo
|
|
230
|
+
* **The per-repo SPEC-PLACEMENT default, passed IN** (spec
|
|
231
231
|
* `staging-pool-position-gate-and-trust-model` US #2/#5, task
|
|
232
232
|
* `pre-prd-staging-pool-split-and-untrusted-prd-placement`). The resolved
|
|
233
233
|
* per-repo default landing for `intake`-authored prds (`pre-proposed` =
|
|
@@ -235,8 +235,8 @@ export interface PerformIntakeOptions {
|
|
|
235
235
|
* into the shared placement resolver (`src/placement.ts`). The resolver
|
|
236
236
|
* overlays an EXPLICIT operator flag ({@link explicitSpecsLandIn}, top) and
|
|
237
237
|
* the UNTRUSTED-ORIGIN force (`originTrust: untrusted` ⇒ staging) on top.
|
|
238
|
-
* Unset ⇒ the resolver's built-in floor applies (`staging` = `
|
|
239
|
-
* the conservative landing). The
|
|
238
|
+
* Unset ⇒ the resolver's built-in floor applies (`staging` = `specs/proposed/`,
|
|
239
|
+
* the conservative landing). The SPEC TWIN of `tasksLandIn` on the tasker
|
|
240
240
|
* path — one resolver, two lifecycles.
|
|
241
241
|
*/
|
|
242
242
|
specsLandIn?: SpecsLandIn;
|
|
@@ -267,35 +267,48 @@ export interface PerformIntakeOptions {
|
|
|
267
267
|
* must not act as the bot. Absent ⇒ ambient (today's behaviour).
|
|
268
268
|
*/
|
|
269
269
|
identity?: Identity;
|
|
270
|
+
/**
|
|
271
|
+
* **The cross-job merge-serialiser CAS-retry cap** (config `mergeRetries`, spec
|
|
272
|
+
* `land-time-reverify-and-parallel-merge-ceiling` Story 5 / Applied Answer q1
|
|
273
|
+
* (a)). Threaded VERBATIM into the shared integrate core so a wide-matrix CI's
|
|
274
|
+
* raised cap reaches intake's task/spec emit land tail too (task
|
|
275
|
+
* `thread-merge-retries-cross-task-and-ratify-default`). Resolved ONCE at the
|
|
276
|
+
* entry point (the CLI) through the env + per-repo layers of the gate-family
|
|
277
|
+
* precedence chain — the `intake` command has NO `--merge-retries` flag today
|
|
278
|
+
* (the flag layer legitimately does not apply here; intake is
|
|
279
|
+
* unattended-CI-first, env + per-repo cover the need). Unset ⇒ the engine's
|
|
280
|
+
* `DEFAULT_MERGE_RETRIES = 1000` (byte-for-byte unchanged).
|
|
281
|
+
*/
|
|
282
|
+
mergeRetries?: number;
|
|
270
283
|
/** Environment for child git/agent processes (the AGENT-launch ambient env). */
|
|
271
284
|
env?: NodeJS.ProcessEnv;
|
|
272
285
|
/** Sink for human-readable progress notes. */
|
|
273
286
|
note?: (message: string) => void;
|
|
274
287
|
}
|
|
275
288
|
/**
|
|
276
|
-
* **The STAGED-prds dir** (
|
|
289
|
+
* **The STAGED-prds dir** (spec `staging-pool-position-gate-and-trust-model`,
|
|
277
290
|
* task `pre-prd-staging-pool-split-and-untrusted-prd-placement`, governing
|
|
278
291
|
* ADR `placement-is-runner-deterministic-humanonly-is-agent-judgement`). When
|
|
279
292
|
* the runner-deterministic placement resolver picks the staging side for an
|
|
280
|
-
* `intake`-authored
|
|
281
|
-
* `work/
|
|
282
|
-
* the tasking candidate POOL (`work/
|
|
283
|
-
* ({@link promoteFromPreSpec} in `needs-attention.ts`) moves an approved
|
|
284
|
-
* `
|
|
293
|
+
* `intake`-authored spec, the runner writes the spec file HERE instead of in
|
|
294
|
+
* `work/specs/ready/`. An item born in `specs/proposed/` is durable + readable but NOT in
|
|
295
|
+
* the tasking candidate POOL (`work/specs/ready/` is the pool). A runner/human-owned promotion
|
|
296
|
+
* ({@link promoteFromPreSpec} in `needs-attention.ts`) moves an approved spec
|
|
297
|
+
* `specs/proposed/ → specs/ready/` to make it taskable.
|
|
285
298
|
*/
|
|
286
299
|
export declare const STAGED_SPECS_DIR: string;
|
|
287
300
|
/**
|
|
288
301
|
* The emitted artifact TYPE `intake` decides at RUNTIME — a `task` verdict emits
|
|
289
|
-
* `work/backlog/<slug>.md`, a `
|
|
302
|
+
* `work/backlog/<slug>.md`, a `spec` verdict emits the spec file (`work/specs/ready/<slug>.md`). The two
|
|
290
303
|
* granular flag axes (`--merge-task`/`--propose-task` vs `--merge-spec`/
|
|
291
304
|
* `--propose-spec`) are keyed on this. (ask/bounce emit NOTHING, so the modes are
|
|
292
305
|
* no-ops for them.)
|
|
293
306
|
*/
|
|
294
307
|
export type IntakeArtifactType = 'task' | 'spec';
|
|
295
308
|
/**
|
|
296
|
-
* The PER-OUTCOME integration mode FLAG SET (
|
|
309
|
+
* The PER-OUTCOME integration mode FLAG SET (spec `issue-intake` US #9). Because
|
|
297
310
|
* `intake` decides the artifact TYPE at runtime, a single `--merge`/`--propose`
|
|
298
|
-
* cannot express a type-conditional policy ("merge a
|
|
311
|
+
* cannot express a type-conditional policy ("merge a spec but propose a task") —
|
|
299
312
|
* hence the four GRANULAR per-type flags layered over the two AGGREGATES:
|
|
300
313
|
*
|
|
301
314
|
* - **granular:** `--merge-spec`/`--propose-spec` apply iff the outcome is a spec;
|
|
@@ -306,9 +319,9 @@ export type IntakeArtifactType = 'task' | 'spec';
|
|
|
306
319
|
* author-trust) is CI's POLICY, authored in `runner-in-ci` — NOT here.
|
|
307
320
|
*/
|
|
308
321
|
export interface IntakeIntegrationFlags {
|
|
309
|
-
/** Aggregate: merge BOTH a task and a
|
|
322
|
+
/** Aggregate: merge BOTH a task and a spec (the broad knob, overridden per type). */
|
|
310
323
|
merge?: boolean;
|
|
311
|
-
/** Aggregate: propose BOTH a task and a
|
|
324
|
+
/** Aggregate: propose BOTH a task and a spec. */
|
|
312
325
|
propose?: boolean;
|
|
313
326
|
/** Granular: merge a spec (overrides the aggregate for the spec outcome). */
|
|
314
327
|
mergeSpec?: boolean;
|
|
@@ -324,17 +337,17 @@ export interface IntakeIntegrationModes {
|
|
|
324
337
|
/** The mode an EMITTED task integrates with. */
|
|
325
338
|
task: IntegrationMode;
|
|
326
339
|
/**
|
|
327
|
-
* The mode an EMITTED spec integrates with. `spec` is the CANONICAL key (
|
|
340
|
+
* The mode an EMITTED spec integrates with. `spec` is the CANONICAL key (spec →
|
|
328
341
|
* spec cutover); the user-facing `--merge-spec`/`--propose-spec` flags that FEED
|
|
329
342
|
* it carry the same `spec` spelling (the cli-flag rename landed in batch 4f).
|
|
330
343
|
*/
|
|
331
344
|
spec: IntegrationMode;
|
|
332
345
|
}
|
|
333
346
|
/**
|
|
334
|
-
* The PURE per-outcome integration mode resolution (
|
|
347
|
+
* The PURE per-outcome integration mode resolution (spec `issue-intake` US #9 —
|
|
335
348
|
* the canonical table). Given ONLY the flag set, resolve BOTH per-type modes in
|
|
336
349
|
* one eager pass (so a usage error is caught before the runtime verdict is even
|
|
337
|
-
* known). The rules, all decided in the
|
|
350
|
+
* known). The rules, all decided in the spec:
|
|
338
351
|
*
|
|
339
352
|
* - **unset ⇒ propose for BOTH** (conservative default; matches `do`).
|
|
340
353
|
* - **aggregates:** `--merge` ⇒ merge both; `--propose` ⇒ propose both (this axis
|
|
@@ -377,7 +390,7 @@ export declare function performIntake(options: PerformIntakeOptions): Promise<In
|
|
|
377
390
|
* `commit` (the additive {@link IntegrateResult.commit}) in merge. A degraded
|
|
378
391
|
* propose (no `url`) or a failed merge-tip read (no `commit`) simply OMITS the
|
|
379
392
|
* link — the comment still confirms what was created (the artifact is safe on the
|
|
380
|
-
* branch/main regardless). No
|
|
393
|
+
* branch/main regardless). No spec link beyond the slug.
|
|
381
394
|
* - carries the FULL intake MARKER via the SHARED {@link stampIntakeMarker} helper
|
|
382
395
|
* (`kind=created slug=<slug> seen=<id>,…`) so the triage's `already-terminal`
|
|
383
396
|
* branch consumes it — the comment cannot re-trigger intake.
|
|
@@ -390,13 +403,13 @@ export declare function composeIntakeCompletionComment(params: {
|
|
|
390
403
|
}): string;
|
|
391
404
|
/**
|
|
392
405
|
* Render the backlog task file: the frontmatter (`title`/`slug`/`covers: []`, NO
|
|
393
|
-
* `
|
|
406
|
+
* `spec:` — its own source of truth, spec `issue-intake` decision table) carrying the lone-task
|
|
394
407
|
* `issue: N` closure link + the drafted body. The task closes its source issue
|
|
395
408
|
* via its `issue:` field (the provider-agnostic link a FUTURE CI close-job reads
|
|
396
409
|
* from folder + field state); it carries NO `Fixes #N` (a deferred GitHub-only
|
|
397
410
|
* optimisation, structurally unplaceable on the `--merge` path). The number is
|
|
398
|
-
* the task's own closure path — `issue:` XOR `
|
|
399
|
-
* `
|
|
411
|
+
* the task's own closure path — `issue:` XOR `spec:`; a lone task never carries a
|
|
412
|
+
* `spec:` (spec `issue-intake` decision table). When the agent drafted no body, a thin default
|
|
400
413
|
* scaffold keeps the file a valid task.
|
|
401
414
|
*/
|
|
402
415
|
export declare function renderBacklogTask(params: {
|
|
@@ -413,16 +426,16 @@ export declare function renderBacklogTask(params: {
|
|
|
413
426
|
originTrust?: OriginTrust;
|
|
414
427
|
}): string;
|
|
415
428
|
/**
|
|
416
|
-
* Render the emitted
|
|
417
|
-
* `issue: N` + the gate axes the prompt JUDGED) followed by the drafted
|
|
418
|
-
* For a FANNED
|
|
419
|
-
* the N fanned tasks, which reach it via `task.
|
|
420
|
-
* task carries `
|
|
421
|
-
* one that puts `issue:` on a task). The close JOB reaches the
|
|
422
|
-
* `task.
|
|
429
|
+
* Render the emitted spec file: the frontmatter (`title`/`slug` + the loop-closure
|
|
430
|
+
* `issue: N` + the gate axes the prompt JUDGED) followed by the drafted spec body.
|
|
431
|
+
* For a FANNED spec the `issue: N` lives ONLY on the spec — never duplicated across
|
|
432
|
+
* the N fanned tasks, which reach it via `task.spec: → spec issue:` (a fanned
|
|
433
|
+
* task carries `spec:`, NOT its own `issue:`; the lone-task outcome is the only
|
|
434
|
+
* one that puts `issue:` on a task). The close JOB reaches the spec's number via
|
|
435
|
+
* `task.spec: → spec issue:`. The gate axes (`humanOnly`/`needsAnswers`) are emitted ONLY when the
|
|
423
436
|
* verdict declared them `true` — an omitted axis is `undefined` (undeclared), the
|
|
424
437
|
* same convention `frontmatter.ts` parses. When the agent drafted no body, a thin
|
|
425
|
-
* default scaffold keeps the file a valid
|
|
438
|
+
* default scaffold keeps the file a valid spec that `do spec:` can later task.
|
|
426
439
|
*/
|
|
427
440
|
export declare function renderSpec(params: {
|
|
428
441
|
slug: string;
|
|
@@ -544,20 +557,20 @@ export declare function buildLoneTaskReviewPrompt(input: LoneTaskReviewGateInput
|
|
|
544
557
|
*/
|
|
545
558
|
export declare const parseLoneTaskReviewVerdict: typeof parseReviewVerdict;
|
|
546
559
|
/**
|
|
547
|
-
* Build the intake decision
|
|
560
|
+
* Build the intake decision SPEC (an inline prompt builder, like `buildTaskingPrd`
|
|
548
561
|
* in `tasking.ts` / the reviewer prompts in `review-gate.ts` — NOT a standalone
|
|
549
562
|
* asset/`.md` file; no such convention exists in this package). It encodes the FULL
|
|
550
|
-
* four-outcome decision table (
|
|
563
|
+
* four-outcome decision table (spec `issue-intake` — the source of truth) and the
|
|
551
564
|
* three DECISION AIDS stated once there:
|
|
552
565
|
*
|
|
553
566
|
* 1. the **"clear?" bar** = `to-task`/`needsAnswers`' "would I build the wrong
|
|
554
567
|
* thing if I guessed?" — if a material requirement/scope/acceptance question is
|
|
555
568
|
* unanswered, ASK (never guess a spec from a vague issue);
|
|
556
569
|
* 2. the **"one task?" bar** = `to-task`' tracer-bullet test (one thin end-to-end
|
|
557
|
-
* path, demoable on its own) — fits → TASK, needs splitting →
|
|
558
|
-
* 3. **
|
|
570
|
+
* path, demoable on its own) — fits → TASK, needs splitting → SPEC;
|
|
571
|
+
* 3. **SPEC vs BOUNCE** turns on a **SHARED VISION**: coupled (even if small) → SPEC;
|
|
559
572
|
* genuinely unrelated → BOUNCE. Size NEVER forces a bounce — only unrelatedness
|
|
560
|
-
* (the over-bounce guard: a coupled-but-small pair gets a light
|
|
573
|
+
* (the over-bounce guard: a coupled-but-small pair gets a light SPEC, never a
|
|
561
574
|
* bounce).
|
|
562
575
|
*
|
|
563
576
|
* The prompt anchors to `to-task`/`to-spec` for the task/spec SHAPES it drafts. Its
|