dorfl 0.0.0 → 0.1.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 +73 -0
- package/dist/advance-ci-template.d.ts.map +1 -0
- package/dist/advance-ci-template.js +104 -0
- package/dist/advance-ci-template.js.map +1 -0
- package/dist/advance-classify.d.ts +132 -0
- package/dist/advance-classify.d.ts.map +1 -0
- package/dist/advance-classify.js +120 -0
- package/dist/advance-classify.js.map +1 -0
- package/dist/advance-drivers.d.ts +182 -0
- package/dist/advance-drivers.d.ts.map +1 -0
- package/dist/advance-drivers.js +231 -0
- package/dist/advance-drivers.js.map +1 -0
- package/dist/advance-isolated.d.ts +156 -0
- package/dist/advance-isolated.d.ts.map +1 -0
- package/dist/advance-isolated.js +256 -0
- package/dist/advance-isolated.js.map +1 -0
- package/dist/advance-lifecycle-template.d.ts +107 -0
- package/dist/advance-lifecycle-template.d.ts.map +1 -0
- package/dist/advance-lifecycle-template.js +668 -0
- package/dist/advance-lifecycle-template.js.map +1 -0
- package/dist/advance-loop-driver.d.ts +325 -0
- package/dist/advance-loop-driver.d.ts.map +1 -0
- package/dist/advance-loop-driver.js +437 -0
- package/dist/advance-loop-driver.js.map +1 -0
- package/dist/advance-treeless-publish.d.ts +108 -0
- package/dist/advance-treeless-publish.d.ts.map +1 -0
- package/dist/advance-treeless-publish.js +71 -0
- package/dist/advance-treeless-publish.js.map +1 -0
- package/dist/advance.d.ts +340 -0
- package/dist/advance.d.ts.map +1 -0
- package/dist/advance.js +1122 -0
- package/dist/advance.js.map +1 -0
- package/dist/advancing-lock.d.ts +294 -0
- package/dist/advancing-lock.d.ts.map +1 -0
- package/dist/advancing-lock.js +594 -0
- package/dist/advancing-lock.js.map +1 -0
- package/dist/agent-launch.d.ts +79 -0
- package/dist/agent-launch.d.ts.map +1 -0
- package/dist/agent-launch.js +61 -0
- package/dist/agent-launch.js.map +1 -0
- package/dist/agent-stop.d.ts +149 -0
- package/dist/agent-stop.d.ts.map +1 -0
- package/dist/agent-stop.js +307 -0
- package/dist/agent-stop.js.map +1 -0
- package/dist/apply-decide.d.ts +127 -0
- package/dist/apply-decide.d.ts.map +1 -0
- package/dist/apply-decide.js +176 -0
- package/dist/apply-decide.js.map +1 -0
- package/dist/apply-merge-action.d.ts +206 -0
- package/dist/apply-merge-action.d.ts.map +1 -0
- package/dist/apply-merge-action.js +307 -0
- package/dist/apply-merge-action.js.map +1 -0
- package/dist/apply-persist.d.ts +174 -0
- package/dist/apply-persist.d.ts.map +1 -0
- package/dist/apply-persist.js +359 -0
- package/dist/apply-persist.js.map +1 -0
- package/dist/arbiter.d.ts +120 -0
- package/dist/arbiter.d.ts.map +1 -0
- package/dist/arbiter.js +255 -0
- package/dist/arbiter.js.map +1 -0
- package/dist/brand.d.ts +70 -0
- package/dist/brand.d.ts.map +1 -0
- package/dist/brand.js +84 -0
- package/dist/brand.js.map +1 -0
- package/dist/buildable-body.d.ts +132 -0
- package/dist/buildable-body.d.ts.map +1 -0
- package/dist/buildable-body.js +131 -0
- package/dist/buildable-body.js.map +1 -0
- package/dist/categorise.d.ts +66 -0
- package/dist/categorise.d.ts.map +1 -0
- package/dist/categorise.js +106 -0
- package/dist/categorise.js.map +1 -0
- package/dist/claim-cas.d.ts +117 -0
- package/dist/claim-cas.d.ts.map +1 -0
- package/dist/claim-cas.js +312 -0
- package/dist/claim-cas.js.map +1 -0
- package/dist/cli-spinner.d.ts +112 -0
- package/dist/cli-spinner.d.ts.map +1 -0
- package/dist/cli-spinner.js +157 -0
- package/dist/cli-spinner.js.map +1 -0
- package/dist/cli.d.ts +11 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +3094 -0
- package/dist/cli.js.map +1 -0
- package/dist/close-job-template.d.ts +70 -0
- package/dist/close-job-template.d.ts.map +1 -0
- package/dist/close-job-template.js +180 -0
- package/dist/close-job-template.js.map +1 -0
- package/dist/close-job.d.ts +95 -0
- package/dist/close-job.d.ts.map +1 -0
- package/dist/close-job.js +226 -0
- package/dist/close-job.js.map +1 -0
- package/dist/complete.d.ts +361 -0
- package/dist/complete.d.ts.map +1 -0
- package/dist/complete.js +885 -0
- package/dist/complete.js.map +1 -0
- package/dist/concurrency.d.ts +68 -0
- package/dist/concurrency.d.ts.map +1 -0
- package/dist/concurrency.js +112 -0
- package/dist/concurrency.js.map +1 -0
- package/dist/config-override.d.ts +76 -0
- package/dist/config-override.d.ts.map +1 -0
- package/dist/config-override.js +50 -0
- package/dist/config-override.js.map +1 -0
- package/dist/config.d.ts +668 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +241 -0
- package/dist/config.js.map +1 -0
- package/dist/continue-branch.d.ts +249 -0
- package/dist/continue-branch.d.ts.map +1 -0
- package/dist/continue-branch.js +389 -0
- package/dist/continue-branch.js.map +1 -0
- package/dist/cwd-section.d.ts +186 -0
- package/dist/cwd-section.d.ts.map +1 -0
- package/dist/cwd-section.js +209 -0
- package/dist/cwd-section.js.map +1 -0
- package/dist/decision-engine.d.ts +170 -0
- package/dist/decision-engine.d.ts.map +1 -0
- package/dist/decision-engine.js +136 -0
- package/dist/decision-engine.js.map +1 -0
- package/dist/detect.d.ts +17 -0
- package/dist/detect.d.ts.map +1 -0
- package/dist/detect.js +118 -0
- package/dist/detect.js.map +1 -0
- package/dist/do-autopick.d.ts +85 -0
- package/dist/do-autopick.d.ts.map +1 -0
- package/dist/do-autopick.js +112 -0
- package/dist/do-autopick.js.map +1 -0
- package/dist/do-config.d.ts +312 -0
- package/dist/do-config.d.ts.map +1 -0
- package/dist/do-config.js +358 -0
- package/dist/do-config.js.map +1 -0
- package/dist/do-remote-auto.d.ts +75 -0
- package/dist/do-remote-auto.d.ts.map +1 -0
- package/dist/do-remote-auto.js +111 -0
- package/dist/do-remote-auto.js.map +1 -0
- package/dist/do.d.ts +621 -0
- package/dist/do.d.ts.map +1 -0
- package/dist/do.js +1882 -0
- package/dist/do.js.map +1 -0
- package/dist/drop-source.d.ts +96 -0
- package/dist/drop-source.d.ts.map +1 -0
- package/dist/drop-source.js +91 -0
- package/dist/drop-source.js.map +1 -0
- package/dist/eligibility.d.ts +46 -0
- package/dist/eligibility.d.ts.map +1 -0
- package/dist/eligibility.js +34 -0
- package/dist/eligibility.js.map +1 -0
- package/dist/env-config.d.ts +51 -0
- package/dist/env-config.d.ts.map +1 -0
- package/dist/env-config.js +272 -0
- package/dist/env-config.js.map +1 -0
- package/dist/failure-cause.d.ts +70 -0
- package/dist/failure-cause.d.ts.map +1 -0
- package/dist/failure-cause.js +126 -0
- package/dist/failure-cause.js.map +1 -0
- package/dist/format.d.ts +43 -0
- package/dist/format.d.ts.map +1 -0
- package/dist/format.js +256 -0
- package/dist/format.js.map +1 -0
- package/dist/frontmatter.d.ts +215 -0
- package/dist/frontmatter.d.ts.map +1 -0
- package/dist/frontmatter.js +345 -0
- package/dist/frontmatter.js.map +1 -0
- package/dist/gate-readiness.d.ts +84 -0
- package/dist/gate-readiness.d.ts.map +1 -0
- package/dist/gate-readiness.js +103 -0
- package/dist/gate-readiness.js.map +1 -0
- package/dist/gc.d.ts +165 -0
- package/dist/gc.d.ts.map +1 -0
- package/dist/gc.js +313 -0
- package/dist/gc.js.map +1 -0
- package/dist/gh-failure.d.ts +42 -0
- package/dist/gh-failure.d.ts.map +1 -0
- package/dist/gh-failure.js +49 -0
- package/dist/gh-failure.js.map +1 -0
- package/dist/git.d.ts +75 -0
- package/dist/git.d.ts.map +1 -0
- package/dist/git.js +130 -0
- package/dist/git.js.map +1 -0
- package/dist/github.d.ts +187 -0
- package/dist/github.d.ts.map +1 -0
- package/dist/github.js +343 -0
- package/dist/github.js.map +1 -0
- package/dist/harness.d.ts +242 -0
- package/dist/harness.d.ts.map +1 -0
- package/dist/harness.js +157 -0
- package/dist/harness.js.map +1 -0
- package/dist/identity.d.ts +167 -0
- package/dist/identity.d.ts.map +1 -0
- package/dist/identity.js +231 -0
- package/dist/identity.js.map +1 -0
- package/dist/index.d.ts +147 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +76 -0
- package/dist/index.js.map +1 -0
- package/dist/install-ci-branch-protection.d.ts +147 -0
- package/dist/install-ci-branch-protection.d.ts.map +1 -0
- package/dist/install-ci-branch-protection.js +166 -0
- package/dist/install-ci-branch-protection.js.map +1 -0
- package/dist/install-ci-capabilities/advance-lifecycle.d.ts +15 -0
- package/dist/install-ci-capabilities/advance-lifecycle.d.ts.map +1 -0
- package/dist/install-ci-capabilities/advance-lifecycle.js +28 -0
- package/dist/install-ci-capabilities/advance-lifecycle.js.map +1 -0
- package/dist/install-ci-capabilities/close-job.d.ts +13 -0
- package/dist/install-ci-capabilities/close-job.d.ts.map +1 -0
- package/dist/install-ci-capabilities/close-job.js +26 -0
- package/dist/install-ci-capabilities/close-job.js.map +1 -0
- package/dist/install-ci-capabilities/example-noop.d.ts +16 -0
- package/dist/install-ci-capabilities/example-noop.d.ts.map +1 -0
- package/dist/install-ci-capabilities/example-noop.js +23 -0
- package/dist/install-ci-capabilities/example-noop.js.map +1 -0
- package/dist/install-ci-capabilities/intake.d.ts +15 -0
- package/dist/install-ci-capabilities/intake.d.ts.map +1 -0
- package/dist/install-ci-capabilities/intake.js +28 -0
- package/dist/install-ci-capabilities/intake.js.map +1 -0
- package/dist/install-ci-capabilities/verify.d.ts +14 -0
- package/dist/install-ci-capabilities/verify.d.ts.map +1 -0
- package/dist/install-ci-capabilities/verify.js +27 -0
- package/dist/install-ci-capabilities/verify.js.map +1 -0
- package/dist/install-ci-core.d.ts +446 -0
- package/dist/install-ci-core.d.ts.map +1 -0
- package/dist/install-ci-core.js +760 -0
- package/dist/install-ci-core.js.map +1 -0
- package/dist/install-ci-github.d.ts +167 -0
- package/dist/install-ci-github.d.ts.map +1 -0
- package/dist/install-ci-github.js +315 -0
- package/dist/install-ci-github.js.map +1 -0
- package/dist/install-ci.d.ts +105 -0
- package/dist/install-ci.d.ts.map +1 -0
- package/dist/install-ci.js +363 -0
- package/dist/install-ci.js.map +1 -0
- package/dist/intake-event.d.ts +88 -0
- package/dist/intake-event.d.ts.map +1 -0
- package/dist/intake-event.js +66 -0
- package/dist/intake-event.js.map +1 -0
- package/dist/intake-marker.d.ts +95 -0
- package/dist/intake-marker.d.ts.map +1 -0
- package/dist/intake-marker.js +127 -0
- package/dist/intake-marker.js.map +1 -0
- package/dist/intake-triage.d.ts +48 -0
- package/dist/intake-triage.d.ts.map +1 -0
- package/dist/intake-triage.js +95 -0
- package/dist/intake-triage.js.map +1 -0
- package/dist/intake-trigger-template.d.ts +185 -0
- package/dist/intake-trigger-template.d.ts.map +1 -0
- package/dist/intake-trigger-template.js +449 -0
- package/dist/intake-trigger-template.js.map +1 -0
- package/dist/intake.d.ts +569 -0
- package/dist/intake.d.ts.map +1 -0
- package/dist/intake.js +1628 -0
- package/dist/intake.js.map +1 -0
- package/dist/integration-core.d.ts +539 -0
- package/dist/integration-core.d.ts.map +1 -0
- package/dist/integration-core.js +2195 -0
- package/dist/integration-core.js.map +1 -0
- package/dist/integrator.d.ts +343 -0
- package/dist/integrator.d.ts.map +1 -0
- package/dist/integrator.js +400 -0
- package/dist/integrator.js.map +1 -0
- package/dist/isolation.d.ts +219 -0
- package/dist/isolation.d.ts.map +1 -0
- package/dist/isolation.js +261 -0
- package/dist/isolation.js.map +1 -0
- package/dist/issue-provider.d.ts +349 -0
- package/dist/issue-provider.d.ts.map +1 -0
- package/dist/issue-provider.js +360 -0
- package/dist/issue-provider.js.map +1 -0
- package/dist/item-lock.d.ts +626 -0
- package/dist/item-lock.d.ts.map +1 -0
- package/dist/item-lock.js +1381 -0
- package/dist/item-lock.js.map +1 -0
- package/dist/item-path.d.ts +49 -0
- package/dist/item-path.d.ts.map +1 -0
- package/dist/item-path.js +66 -0
- package/dist/item-path.js.map +1 -0
- package/dist/ledger-lint.d.ts +129 -0
- package/dist/ledger-lint.d.ts.map +1 -0
- package/dist/ledger-lint.js +249 -0
- package/dist/ledger-lint.js.map +1 -0
- package/dist/ledger-read.d.ts +357 -0
- package/dist/ledger-read.d.ts.map +1 -0
- package/dist/ledger-read.js +442 -0
- package/dist/ledger-read.js.map +1 -0
- package/dist/ledger-write.d.ts +330 -0
- package/dist/ledger-write.d.ts.map +1 -0
- package/dist/ledger-write.js +411 -0
- package/dist/ledger-write.js.map +1 -0
- package/dist/lifecycle-gather.d.ts +30 -0
- package/dist/lifecycle-gather.d.ts.map +1 -0
- package/dist/lifecycle-gather.js +205 -0
- package/dist/lifecycle-gather.js.map +1 -0
- package/dist/lifecycle-pools.d.ts +180 -0
- package/dist/lifecycle-pools.d.ts.map +1 -0
- package/dist/lifecycle-pools.js +78 -0
- package/dist/lifecycle-pools.js.map +1 -0
- package/dist/merge-question-surfacer.d.ts +166 -0
- package/dist/merge-question-surfacer.d.ts.map +1 -0
- package/dist/merge-question-surfacer.js +297 -0
- package/dist/merge-question-surfacer.js.map +1 -0
- package/dist/mint-adr.d.ts +126 -0
- package/dist/mint-adr.d.ts.map +1 -0
- package/dist/mint-adr.js +257 -0
- package/dist/mint-adr.js.map +1 -0
- package/dist/mirror-pool-scan.d.ts +125 -0
- package/dist/mirror-pool-scan.d.ts.map +1 -0
- package/dist/mirror-pool-scan.js +104 -0
- package/dist/mirror-pool-scan.js.map +1 -0
- package/dist/needs-attention.d.ts +341 -0
- package/dist/needs-attention.d.ts.map +1 -0
- package/dist/needs-attention.js +900 -0
- package/dist/needs-attention.js.map +1 -0
- package/dist/orphan-sidecar.d.ts +79 -0
- package/dist/orphan-sidecar.d.ts.map +1 -0
- package/dist/orphan-sidecar.js +71 -0
- package/dist/orphan-sidecar.js.map +1 -0
- package/dist/output.d.ts +48 -0
- package/dist/output.d.ts.map +1 -0
- package/dist/output.js +66 -0
- package/dist/output.js.map +1 -0
- package/dist/pi-harness.d.ts +179 -0
- package/dist/pi-harness.d.ts.map +1 -0
- package/dist/pi-harness.js +342 -0
- package/dist/pi-harness.js.map +1 -0
- package/dist/placement.d.ts +99 -0
- package/dist/placement.d.ts.map +1 -0
- package/dist/placement.js +67 -0
- package/dist/placement.js.map +1 -0
- package/dist/prd-to-spec.d.ts +315 -0
- package/dist/prd-to-spec.d.ts.map +1 -0
- package/dist/prd-to-spec.js +684 -0
- package/dist/prd-to-spec.js.map +1 -0
- package/dist/prepare.d.ts +121 -0
- package/dist/prepare.d.ts.map +1 -0
- package/dist/prepare.js +140 -0
- package/dist/prepare.js.map +1 -0
- package/dist/prompt.d.ts +360 -0
- package/dist/prompt.d.ts.map +1 -0
- package/dist/prompt.js +499 -0
- package/dist/prompt.js.map +1 -0
- package/dist/protocol/ADR-FORMAT.md +47 -0
- package/dist/protocol/CLAIM-PROTOCOL.md +217 -0
- package/dist/protocol/REVIEW-PROTOCOL.md +119 -0
- package/dist/protocol/SURFACE-PROTOCOL.md +121 -0
- package/dist/protocol/TASKING-PROTOCOL.md +122 -0
- package/dist/protocol/WORK-CONTRACT.md +276 -0
- package/dist/protocol/spec-template.md +71 -0
- package/dist/protocol/task-template.md +65 -0
- package/dist/readiness.d.ts +66 -0
- package/dist/readiness.d.ts.map +1 -0
- package/dist/readiness.js +36 -0
- package/dist/readiness.js.map +1 -0
- package/dist/reap-branches.d.ts +102 -0
- package/dist/reap-branches.d.ts.map +1 -0
- package/dist/reap-branches.js +149 -0
- package/dist/reap-branches.js.map +1 -0
- package/dist/recover-isolated.d.ts +72 -0
- package/dist/recover-isolated.d.ts.map +1 -0
- package/dist/recover-isolated.js +188 -0
- package/dist/recover-isolated.js.map +1 -0
- package/dist/registry.d.ts +172 -0
- package/dist/registry.d.ts.map +1 -0
- package/dist/registry.js +296 -0
- package/dist/registry.js.map +1 -0
- package/dist/repo-config.d.ts +201 -0
- package/dist/repo-config.d.ts.map +1 -0
- package/dist/repo-config.js +414 -0
- package/dist/repo-config.js.map +1 -0
- package/dist/repo-key.d.ts +20 -0
- package/dist/repo-key.d.ts.map +1 -0
- package/dist/repo-key.js +68 -0
- package/dist/repo-key.js.map +1 -0
- package/dist/repo-mirror.d.ts +177 -0
- package/dist/repo-mirror.d.ts.map +1 -0
- package/dist/repo-mirror.js +271 -0
- package/dist/repo-mirror.js.map +1 -0
- package/dist/retry-backoff.d.ts +90 -0
- package/dist/retry-backoff.d.ts.map +1 -0
- package/dist/retry-backoff.js +98 -0
- package/dist/retry-backoff.js.map +1 -0
- package/dist/review-gate.d.ts +173 -0
- package/dist/review-gate.d.ts.map +1 -0
- package/dist/review-gate.js +261 -0
- package/dist/review-gate.js.map +1 -0
- package/dist/review-verdict.d.ts +149 -0
- package/dist/review-verdict.d.ts.map +1 -0
- package/dist/review-verdict.js +332 -0
- package/dist/review-verdict.js.map +1 -0
- package/dist/run.d.ts +221 -0
- package/dist/run.d.ts.map +1 -0
- package/dist/run.js +963 -0
- package/dist/run.js.map +1 -0
- package/dist/scan.d.ts +308 -0
- package/dist/scan.d.ts.map +1 -0
- package/dist/scan.js +374 -0
- package/dist/scan.js.map +1 -0
- package/dist/select-order.d.ts +75 -0
- package/dist/select-order.d.ts.map +1 -0
- package/dist/select-order.js +108 -0
- package/dist/select-order.js.map +1 -0
- package/dist/select-priority.d.ts +188 -0
- package/dist/select-priority.d.ts.map +1 -0
- package/dist/select-priority.js +80 -0
- package/dist/select-priority.js.map +1 -0
- package/dist/select.d.ts +25 -0
- package/dist/select.d.ts.map +1 -0
- package/dist/select.js +43 -0
- package/dist/select.js.map +1 -0
- package/dist/session-path.d.ts +36 -0
- package/dist/session-path.d.ts.map +1 -0
- package/dist/session-path.js +129 -0
- package/dist/session-path.js.map +1 -0
- package/dist/sidecar-apply.d.ts +83 -0
- package/dist/sidecar-apply.d.ts.map +1 -0
- package/dist/sidecar-apply.js +111 -0
- package/dist/sidecar-apply.js.map +1 -0
- package/dist/sidecar.d.ts +245 -0
- package/dist/sidecar.d.ts.map +1 -0
- package/dist/sidecar.js +481 -0
- package/dist/sidecar.js.map +1 -0
- package/dist/slug-namespace.d.ts +204 -0
- package/dist/slug-namespace.d.ts.map +1 -0
- package/dist/slug-namespace.js +229 -0
- package/dist/slug-namespace.js.map +1 -0
- package/dist/spec-complete.d.ts +44 -0
- package/dist/spec-complete.d.ts.map +1 -0
- package/dist/spec-complete.js +69 -0
- package/dist/spec-complete.js.map +1 -0
- package/dist/start.d.ts +97 -0
- package/dist/start.d.ts.map +1 -0
- package/dist/start.js +633 -0
- package/dist/start.js.map +1 -0
- package/dist/status.d.ts +199 -0
- package/dist/status.d.ts.map +1 -0
- package/dist/status.js +228 -0
- package/dist/status.js.map +1 -0
- package/dist/surface-gate.d.ts +162 -0
- package/dist/surface-gate.d.ts.map +1 -0
- package/dist/surface-gate.js +206 -0
- package/dist/surface-gate.js.map +1 -0
- package/dist/surface-persist.d.ts +86 -0
- package/dist/surface-persist.d.ts.map +1 -0
- package/dist/surface-persist.js +129 -0
- package/dist/surface-persist.js.map +1 -0
- package/dist/tasker-review-loop.d.ts +249 -0
- package/dist/tasker-review-loop.d.ts.map +1 -0
- package/dist/tasker-review-loop.js +369 -0
- package/dist/tasker-review-loop.js.map +1 -0
- package/dist/tasking-eligibility.d.ts +74 -0
- package/dist/tasking-eligibility.d.ts.map +1 -0
- package/dist/tasking-eligibility.js +52 -0
- package/dist/tasking-eligibility.js.map +1 -0
- package/dist/tasking-lock.d.ts +111 -0
- package/dist/tasking-lock.d.ts.map +1 -0
- package/dist/tasking-lock.js +256 -0
- package/dist/tasking-lock.js.map +1 -0
- package/dist/tasking.d.ts +275 -0
- package/dist/tasking.d.ts.map +1 -0
- package/dist/tasking.js +952 -0
- package/dist/tasking.js.map +1 -0
- package/dist/triage-gate.d.ts +127 -0
- package/dist/triage-gate.d.ts.map +1 -0
- package/dist/triage-gate.js +139 -0
- package/dist/triage-gate.js.map +1 -0
- package/dist/triage-persist.d.ts +163 -0
- package/dist/triage-persist.d.ts.map +1 -0
- package/dist/triage-persist.js +387 -0
- package/dist/triage-persist.js.map +1 -0
- package/dist/verdict-json.d.ts +32 -0
- package/dist/verdict-json.d.ts.map +1 -0
- package/dist/verdict-json.js +74 -0
- package/dist/verdict-json.js.map +1 -0
- package/dist/verify-workflow-template.d.ts +60 -0
- package/dist/verify-workflow-template.d.ts.map +1 -0
- package/dist/verify-workflow-template.js +126 -0
- package/dist/verify-workflow-template.js.map +1 -0
- package/dist/verify.d.ts +60 -0
- package/dist/verify.d.ts.map +1 -0
- package/dist/verify.js +62 -0
- package/dist/verify.js.map +1 -0
- package/dist/watch-session.d.ts +112 -0
- package/dist/watch-session.d.ts.map +1 -0
- package/dist/watch-session.js +347 -0
- package/dist/watch-session.js.map +1 -0
- package/dist/work-layout.d.ts +198 -0
- package/dist/work-layout.d.ts.map +1 -0
- package/dist/work-layout.js +217 -0
- package/dist/work-layout.js.map +1 -0
- package/dist/work-on.d.ts +154 -0
- package/dist/work-on.d.ts.map +1 -0
- package/dist/work-on.js +387 -0
- package/dist/work-on.js.map +1 -0
- package/dist/workspace.d.ts +224 -0
- package/dist/workspace.d.ts.map +1 -0
- package/dist/workspace.js +325 -0
- package/dist/workspace.js.map +1 -0
- package/package.json +46 -2
- package/src/advance-ci-template.ts +203 -0
- package/src/advance-classify.ts +197 -0
- package/src/advance-drivers.ts +414 -0
- package/src/advance-isolated.ts +432 -0
- package/src/advance-lifecycle-template.ts +791 -0
- package/src/advance-loop-driver.ts +745 -0
- package/src/advance-treeless-publish.ts +177 -0
- package/src/advance.ts +1564 -0
- package/src/advancing-lock.ts +988 -0
- package/src/agent-launch.ts +137 -0
- package/src/agent-stop.ts +361 -0
- package/src/apply-decide.ts +242 -0
- package/src/apply-merge-action.ts +502 -0
- package/src/apply-persist.ts +518 -0
- package/src/arbiter.ts +372 -0
- package/src/brand.ts +111 -0
- package/src/buildable-body.ts +196 -0
- package/src/categorise.ts +158 -0
- package/src/claim-cas.ts +513 -0
- package/src/cli-spinner.ts +225 -0
- package/src/cli.ts +4369 -0
- package/src/close-job-template.ts +236 -0
- package/src/close-job.ts +319 -0
- package/src/complete.ts +1379 -0
- package/src/concurrency.ts +151 -0
- package/src/config-override.ts +116 -0
- package/src/config.ts +883 -0
- package/src/continue-branch.ts +542 -0
- package/src/cwd-section.ts +392 -0
- package/src/decision-engine.ts +272 -0
- package/src/detect.ts +124 -0
- package/src/do-autopick.ts +223 -0
- package/src/do-config.ts +589 -0
- package/src/do-remote-auto.ts +197 -0
- package/src/do.ts +2623 -0
- package/src/drop-source.ts +194 -0
- package/src/eligibility.ts +79 -0
- package/src/env-config.ts +305 -0
- package/src/failure-cause.ts +142 -0
- package/src/format.ts +313 -0
- package/src/frontmatter.ts +485 -0
- package/src/gate-readiness.ts +147 -0
- package/src/gc.ts +510 -0
- package/src/gh-failure.ts +53 -0
- package/src/git.ts +186 -0
- package/src/github.ts +468 -0
- package/src/harness.ts +355 -0
- package/src/identity.ts +322 -0
- package/src/index.ts +785 -0
- package/src/install-ci-branch-protection.ts +255 -0
- package/src/install-ci-capabilities/advance-lifecycle.ts +34 -0
- package/src/install-ci-capabilities/close-job.ts +32 -0
- package/src/install-ci-capabilities/example-noop.ts +24 -0
- package/src/install-ci-capabilities/intake.ts +34 -0
- package/src/install-ci-capabilities/verify.ts +33 -0
- package/src/install-ci-core.ts +1088 -0
- package/src/install-ci-github.ts +376 -0
- package/src/install-ci.ts +552 -0
- package/src/intake-event.ts +102 -0
- package/src/intake-marker.ts +195 -0
- package/src/intake-triage.ts +138 -0
- package/src/intake-trigger-template.ts +591 -0
- package/src/intake.ts +2445 -0
- package/src/integration-core.ts +3065 -0
- package/src/integrator.ts +771 -0
- package/src/isolation.ts +484 -0
- package/src/issue-provider.ts +733 -0
- package/src/item-lock.ts +1858 -0
- package/src/item-path.ts +75 -0
- package/src/ledger-lint.ts +332 -0
- package/src/ledger-read.ts +924 -0
- package/src/ledger-write.ts +865 -0
- package/src/lifecycle-gather.ts +298 -0
- package/src/lifecycle-pools.ts +250 -0
- package/src/merge-question-surfacer.ts +496 -0
- package/src/mint-adr.ts +362 -0
- package/src/mirror-pool-scan.ts +240 -0
- package/src/needs-attention.ts +1506 -0
- package/src/orphan-sidecar.ts +150 -0
- package/src/output.ts +89 -0
- package/src/pi-harness.ts +403 -0
- package/src/placement.ts +131 -0
- package/src/prd-to-spec.ts +1023 -0
- package/src/prepare.ts +230 -0
- package/src/prompt.ts +760 -0
- package/src/readiness.ts +98 -0
- package/src/reap-branches.ts +278 -0
- package/src/recover-isolated.ts +276 -0
- package/src/registry.ts +475 -0
- package/src/repo-config.ts +550 -0
- package/src/repo-key.ts +74 -0
- package/src/repo-mirror.ts +367 -0
- package/src/retry-backoff.ts +130 -0
- package/src/review-gate.ts +389 -0
- package/src/review-verdict.ts +422 -0
- package/src/run.ts +1430 -0
- package/src/scan.ts +611 -0
- package/src/select-order.ts +143 -0
- package/src/select-priority.ts +266 -0
- package/src/select.ts +62 -0
- package/src/session-path.ts +153 -0
- package/src/sidecar-apply.ts +216 -0
- package/src/sidecar.ts +700 -0
- package/src/slug-namespace.ts +367 -0
- package/src/spec-complete.ts +118 -0
- package/src/start.ts +974 -0
- package/src/status.ts +441 -0
- package/src/surface-gate.ts +337 -0
- package/src/surface-persist.ts +241 -0
- package/src/tasker-review-loop.ts +671 -0
- package/src/tasking-eligibility.ts +114 -0
- package/src/tasking-lock.ts +416 -0
- package/src/tasking.ts +1438 -0
- package/src/triage-gate.ts +248 -0
- package/src/triage-persist.ts +570 -0
- package/src/verdict-json.ts +73 -0
- package/src/verify-workflow-template.ts +159 -0
- package/src/verify.ts +123 -0
- package/src/watch-session.ts +397 -0
- package/src/work-layout.ts +262 -0
- package/src/work-on.ts +660 -0
- package/src/workspace.ts +502 -0
package/dist/config.d.ts
ADDED
|
@@ -0,0 +1,668 @@
|
|
|
1
|
+
import { type Identity } from './identity.js';
|
|
2
|
+
import { type SelectionOrderConfig } from './select-order.js';
|
|
3
|
+
/**
|
|
4
|
+
* How a completed item is integrated back to the arbiter's `main`. `merge` lands
|
|
5
|
+
* it directly on `main` (ff/rebase + push); `propose` pushes a branch + requests
|
|
6
|
+
* review. (`propose` is provider-neutral; the old `pr` name was GitHub jargon.
|
|
7
|
+
* See ADR §6.)
|
|
8
|
+
*/
|
|
9
|
+
export type IntegrationMode = 'propose' | 'merge';
|
|
10
|
+
/**
|
|
11
|
+
* **Per-repo TASK-PLACEMENT default** (prd
|
|
12
|
+
* `staging-pool-position-gate-and-trust-model`, task
|
|
13
|
+
* `runner-deterministic-slice-placement-policy-and-precedence`, governing ADR
|
|
14
|
+
* `placement-is-runner-deterministic-humanonly-is-agent-judgement`). Which
|
|
15
|
+
* folder the runner lands the tasker's emitted task files in BY DEFAULT —
|
|
16
|
+
* `'pre-backlog'` (staging — durable + readable but NOT in the agent-eligible
|
|
17
|
+
* POOL; a runner/human promotion is needed to make an item claimable; the on-disk
|
|
18
|
+
* folder for this value is `work/tasks/backlog/`) or `'ready'` (the agent-eligible
|
|
19
|
+
* POOL — the trusted fast-path landing, on-disk `work/tasks/ready/`). The pool
|
|
20
|
+
* value was renamed `'backlog'` → `'todo'` → `'ready'` (ADR
|
|
21
|
+
* `rename-task-pool-folder-todo-to-ready`, a CLEAN BREAK matching the on-disk
|
|
22
|
+
* folder `tasks/ready/` and the spec-side `'ready'` pool spelling). The runner-deterministic
|
|
23
|
+
* placement RESOLVER (`src/placement.ts`) layers on top: `explicit operator flag
|
|
24
|
+
* > untrusted-origin ⇒ pre-backlog > tasksLandIn default > built-in
|
|
25
|
+
* (pre-backlog)`. An untrusted-origin tasker output is FORCED to staging even in
|
|
26
|
+
* a `'ready'` repo (the positional analogue of the existing
|
|
27
|
+
* `untrusted-origin-forces-build-propose` rule).
|
|
28
|
+
*/
|
|
29
|
+
export type TasksLandIn = 'pre-backlog' | 'ready';
|
|
30
|
+
/**
|
|
31
|
+
* **Per-repo PRD-PLACEMENT default** (prd
|
|
32
|
+
* `staging-pool-position-gate-and-trust-model`, task
|
|
33
|
+
* `pre-prd-staging-pool-split-and-untrusted-prd-placement`, governing ADR
|
|
34
|
+
* `placement-is-runner-deterministic-humanonly-is-agent-judgement`). Which
|
|
35
|
+
* folder the runner lands `intake`-authored prd files in BY DEFAULT —
|
|
36
|
+
* `'pre-proposed'` (staging — durable + readable but NOT in the auto-tasking
|
|
37
|
+
* POOL; a runner/human promotion is needed to make the prd auto-taskable; the
|
|
38
|
+
* on-disk folder for this value is `work/prds/proposed/`) or `'ready'` (the
|
|
39
|
+
* auto-tasking POOL — the trusted fast-path landing, on-disk
|
|
40
|
+
* `work/prds/ready/`). The same runner-deterministic placement RESOLVER
|
|
41
|
+
* (`src/placement.ts`) layers on top:
|
|
42
|
+
* `explicit operator flag > untrusted-origin ⇒ pre-proposed > specsLandIn
|
|
43
|
+
* default > built-in (pre-proposed)`. An untrusted-origin intake spec is FORCED
|
|
44
|
+
* to staging even in a `'ready'` repo (the positional analogue of the existing
|
|
45
|
+
* `untrusted-origin-forces-build-propose` rule). The PRD twin of
|
|
46
|
+
* {@link TasksLandIn}; the SAME shape, the SAME precedence chain. The value
|
|
47
|
+
* spellings mirror the live prd folders (`prds/proposed/` staging,
|
|
48
|
+
* `prds/ready/` pool), exactly as {@link TasksLandIn} mirrors the task folders.
|
|
49
|
+
*/
|
|
50
|
+
export type SpecsLandIn = 'pre-proposed' | 'ready';
|
|
51
|
+
/**
|
|
52
|
+
* The observation-triage gate (ADR `ci-config-policy-and-gate-family` §2): a
|
|
53
|
+
* 3-state ENUM governing the observation INBOX (raw captured signal). It REPLACES
|
|
54
|
+
* the old `autoTriage` boolean, whose name read like "is triage on?" but only
|
|
55
|
+
* gated the auto-DISPOSITION exception (the resolved naming trap). The three
|
|
56
|
+
* states say what they gate:
|
|
57
|
+
* - `off` (default): the triage rung is dropped from the auto-pick SELECTION —
|
|
58
|
+
* observations are left untouched (the NEW state the boolean could not
|
|
59
|
+
* express, "leave my observations alone entirely");
|
|
60
|
+
* - `ask`: the observation pool IS selected; surface a promote/keep/delete
|
|
61
|
+
* question for every untriaged observation (the old `autoTriage:false`);
|
|
62
|
+
* - `auto`: the observation pool is selected; auto-dispose ONLY the no-question
|
|
63
|
+
* cases (exact-duplicate ⇒ recommend delete; unambiguous map) and surface a
|
|
64
|
+
* question for the rest (the old `autoTriage:true`). It still NEVER
|
|
65
|
+
* auto-deletes a non-duplicate or auto-promotes a judgement call.
|
|
66
|
+
*/
|
|
67
|
+
export type ObservationTriage = 'off' | 'ask' | 'auto';
|
|
68
|
+
/**
|
|
69
|
+
* **The `mergeQuestions` gate axis** — the 3-state member of the question-
|
|
70
|
+
* surfacing gate family that governs the MERGE-QUESTION surfacer (prd
|
|
71
|
+
* `land-time-reverify-and-parallel-merge-ceiling` Story 17 / task
|
|
72
|
+
* `merge-questions-gate-axis`). MIRRORS `observationTriage`'s shape
|
|
73
|
+
* (`off | ask | auto`) but is a SEPARATE axis — "should this built work merge?"
|
|
74
|
+
* is materially more consequential than "is this observation worth promoting?",
|
|
75
|
+
* so a merge-question must NEVER ride `observationTriage` and must NOT default
|
|
76
|
+
* `off` (a silently-dropped merge-question means finished, pushed work never
|
|
77
|
+
* lands). The states:
|
|
78
|
+
* - `off` ⇒ the merge-question surfacer is not invoked (only correct for a
|
|
79
|
+
* repo that lands by some other means);
|
|
80
|
+
* - `ask` (DEFAULT) ⇒ the surfacer enumerates unmerged `work/*` branches +
|
|
81
|
+
* emits a merge-question sidecar; a human's plain `merge | hold | drop`
|
|
82
|
+
* answer is required before the land. The conservative default that honours
|
|
83
|
+
* propose semantics and never silently drops pushed work;
|
|
84
|
+
* - `auto` ⇒ the runner self-supplies the `merge` answer without surfacing
|
|
85
|
+
* and lands through the SAME deterministic answer-driven runner-action
|
|
86
|
+
* dispatch + apply-time re-verify (the merge-mode-like fast path). Does NOT
|
|
87
|
+
* invoke the agentic decider — a merge-land is never an agent decision.
|
|
88
|
+
* Resolved through the SAME precedence chain as the other gates (flag > env >
|
|
89
|
+
* per-repo > global > default `ask`). The exact name + default + shape were
|
|
90
|
+
* answered in this task's Applied answers 2026-06-26 (q1/q2/q3) + PRD sidecar
|
|
91
|
+
* Q3.
|
|
92
|
+
*/
|
|
93
|
+
export type MergeQuestions = 'off' | 'ask' | 'auto';
|
|
94
|
+
/**
|
|
95
|
+
* Which harness adapter (ADR §5) launches a job's agent and reports its
|
|
96
|
+
* liveness: `null` (shell out to `agentCmd`) or `pi` (the pi CLI). Selected via
|
|
97
|
+
* the `harness` config field; defaults to `null`.
|
|
98
|
+
*/
|
|
99
|
+
export type HarnessAdapter = 'null' | 'pi';
|
|
100
|
+
/**
|
|
101
|
+
* The `propose`-mode review-request provider (ADR §6): `github` (`gh pr
|
|
102
|
+
* create`) or `none` (push-only). This names which provider the ARBITER URL
|
|
103
|
+
* RESOLVES to (`selectProvider`) — it is NOT a config OVERRIDE axis (there is
|
|
104
|
+
* none; the provider is purely arbiter-derived: a GitHub remote ⇒ `github`, else
|
|
105
|
+
* `none`). Whether `gh` can actually open the PR is the identity's
|
|
106
|
+
* `providers.github` / ambient `gh` auth; whether to open a PR at all is the
|
|
107
|
+
* separate `noPR` intent. `merge` mode is provider-agnostic and ignores all of
|
|
108
|
+
* this.
|
|
109
|
+
*/
|
|
110
|
+
export type ReviewProviderName = 'none' | 'github';
|
|
111
|
+
/**
|
|
112
|
+
* The per-repo acceptance gate: a single shell command, or an ordered list of
|
|
113
|
+
* commands run in sequence (all must pass). See `verify.ts` / ADR §8.
|
|
114
|
+
*/
|
|
115
|
+
export type VerifyConfig = string | string[];
|
|
116
|
+
/**
|
|
117
|
+
* **The `promptGuidance` NAMESPACE** — per-repo prompt-text NUDGES the runner
|
|
118
|
+
* folds into the worker's in-band prompt (`prompt.ts` + `CLAIM-PROTOCOL.md`).
|
|
119
|
+
* Categorically SEPARATE from the gate family (`verify`/`autoBuild`/`humanOnly`):
|
|
120
|
+
* a nudge changes the agent's DISPOSITION, never the acceptance bar (the `verify`
|
|
121
|
+
* gate is still the sole pass/fail). The namespace name is deliberate — it
|
|
122
|
+
* signals "guidance, not guarantee" — and is shaped to grow (`testFirst` is just
|
|
123
|
+
* the first member; later siblings, e.g. `preferSmallDiffs`, land here too).
|
|
124
|
+
*/
|
|
125
|
+
export interface PromptGuidance {
|
|
126
|
+
/**
|
|
127
|
+
* Strengthen the wrapper's existing soft "TDD where the task asks for it"
|
|
128
|
+
* line into an explicit TEST-FIRST nudge ("at the agreed seam, write the
|
|
129
|
+
* failing test BEFORE the production code; this is guidance, not a gate —
|
|
130
|
+
* the `verify` step still decides pass/fail"). The strengthened text lives
|
|
131
|
+
* in `CLAIM-PROTOCOL.md` (the single source of truth), gated by the
|
|
132
|
+
* `<!-- if promptGuidance.testFirst --> … <!-- else --> … <!-- /if -->`
|
|
133
|
+
* conditional-fragment convention the extractor in `prompt.ts` honours.
|
|
134
|
+
* Default `false` (omitted ⇒ false); the worker prompt is byte-identical
|
|
135
|
+
* to today when this is off. Resolved like the gate family: flag > env
|
|
136
|
+
* (`DORFL_PROMPT_GUIDANCE_TEST_FIRST`) > per-repo > global >
|
|
137
|
+
* default (`false`). NEVER an enforced acceptance criterion.
|
|
138
|
+
*/
|
|
139
|
+
testFirst: boolean;
|
|
140
|
+
}
|
|
141
|
+
/**
|
|
142
|
+
* Resolve the `promptGuidance` namespace down to its concrete boolean fields
|
|
143
|
+
* with the documented defaults applied — so callers can read
|
|
144
|
+
* `resolvePromptGuidance(cfg).testFirst` without re-checking the namespace's
|
|
145
|
+
* presence (a per-repo file may legitimately omit `promptGuidance` entirely,
|
|
146
|
+
* or supply only a subset). Mirrors the gate family's defaults-resolved
|
|
147
|
+
* convention.
|
|
148
|
+
*/
|
|
149
|
+
export declare function resolvePromptGuidance(cfg: Config): PromptGuidance;
|
|
150
|
+
/**
|
|
151
|
+
* Resolved runner configuration. There is NO `roots`/`remotes` field: discovery
|
|
152
|
+
* is the registered hub-mirror set under `<workspacesDir>/repos/` (the registry,
|
|
153
|
+
* ADR `command-surface-and-journeys` §1), NOT a config roots walk. `scan` reads
|
|
154
|
+
* the eligibility fields per repo; `run --once` additionally consumes the
|
|
155
|
+
* execution fields (maxParallel, perRepoMax, defaultArbiter, integration,
|
|
156
|
+
* agentCmd).
|
|
157
|
+
*/
|
|
158
|
+
export interface Config {
|
|
159
|
+
/**
|
|
160
|
+
* Per-repo policy: may agents auto-BUILD *undeclared* (not `humanOnly`) tasks
|
|
161
|
+
* in this repo? `false` (default, strict) ⇒ agents claim nothing automatically;
|
|
162
|
+
* `true` ⇒ agents may claim any task that is not `humanOnly: true`. Resolved
|
|
163
|
+
* like `integration`: flag (`--auto-build`/`--no-auto-build`) > `DORFL_AUTO_BUILD`
|
|
164
|
+
* env > per-repo > global > default. The build member of the per-action gate family
|
|
165
|
+
* (`autoBuild`/`autoTask` + the question-surfacing gates `observationTriage`/
|
|
166
|
+
* `surfaceBlockers`).
|
|
167
|
+
*/
|
|
168
|
+
autoBuild: boolean;
|
|
169
|
+
/**
|
|
170
|
+
* **The `promptGuidance` NUDGE namespace** (see {@link PromptGuidance}). A
|
|
171
|
+
* NUDGE modifies the worker's IN-BAND PROMPT text (`prompt.ts` + the
|
|
172
|
+
* `CLAIM-PROTOCOL.md` wrapper); it is CATEGORICALLY SEPARATE from the gate
|
|
173
|
+
* family (`verify`/`autoBuild`/`humanOnly`) — guidance, never guarantee. The
|
|
174
|
+
* `verify` gate's semantics are unaffected regardless of any value here.
|
|
175
|
+
* Resolution mirrors the gate family per-member: flag > env > per-repo >
|
|
176
|
+
* global > default. Defaults to `{testFirst: false}` (worker prompt is
|
|
177
|
+
* byte-identical to today when every member is off). Designed to grow:
|
|
178
|
+
* later sibling nudges (e.g. `preferSmallDiffs`) land as new members.
|
|
179
|
+
*/
|
|
180
|
+
promptGuidance: PromptGuidance;
|
|
181
|
+
/**
|
|
182
|
+
* Per-repo policy: may an agent auto-task *undeclared* (not `humanOnly`,
|
|
183
|
+
* no open questions) prds in this repo? `false` (default, strict, human-first)
|
|
184
|
+
* ⇒ a human must drive every prd's tasking; `true` ⇒ an agent may auto-task
|
|
185
|
+
* any prd that is not `humanOnly: true` and has no `needsAnswers`. Resolved like
|
|
186
|
+
* `autoBuild`: flag > `DORFL_AUTO_TASK` env > per-repo > global >
|
|
187
|
+
* default. The two-axis tasking gate (`work/prds/auto-task.md`), one level up
|
|
188
|
+
* from the build gate's `autoBuild`.
|
|
189
|
+
*/
|
|
190
|
+
autoTask: boolean;
|
|
191
|
+
/**
|
|
192
|
+
* Per-repo policy governing the OBSERVATION INBOX (raw captured signal) — the
|
|
193
|
+
* 3-state member of the question-surfacing gate family (its sibling is
|
|
194
|
+
* `surfaceBlockers`, which governs DECLARED blocked work; the two are orthogonal
|
|
195
|
+
* peers, ADR `ci-config-policy-and-gate-family` §2). It REPLACES the old
|
|
196
|
+
* `autoTriage` boolean (cleanly, no alias — this repo has no external users yet,
|
|
197
|
+
* decided 2026-06-12). `off` (default) ⇒ the triage pool is dropped from the
|
|
198
|
+
* auto-pick SELECTION (observations untouched); `ask` ⇒ surface a
|
|
199
|
+
* promote/keep/delete question for every untriaged observation; `auto` ⇒
|
|
200
|
+
* auto-dispose ONLY the no-question cases (duplicate ⇒ recommend delete /
|
|
201
|
+
* unambiguous map) and surface a question for the rest (still NEVER auto-deletes
|
|
202
|
+
* a non-duplicate or auto-promotes). Resolved like `integration`/`autoBuild`:
|
|
203
|
+
* flag (`--observation-triage`) > `DORFL_OBSERVATION_TRIAGE` env >
|
|
204
|
+
* per-repo > global > default `off`. Gates the CREATE phase only; APPLY (consume
|
|
205
|
+
* a committed answer) stays ALWAYS allowed.
|
|
206
|
+
*/
|
|
207
|
+
observationTriage: ObservationTriage;
|
|
208
|
+
/**
|
|
209
|
+
* Per-repo policy governing the MERGE-QUESTION SURFACER — the 3-state member
|
|
210
|
+
* of the question-surfacing gate family (prd
|
|
211
|
+
* `land-time-reverify-and-parallel-merge-ceiling` Story 17 / task
|
|
212
|
+
* `merge-questions-gate-axis`). MIRRORS `observationTriage`'s SHAPE
|
|
213
|
+
* (`off | ask | auto`) but is a SEPARATE axis with a DIFFERENT default —
|
|
214
|
+
* `observationTriage` defaults `off` (a dropped observation is safely
|
|
215
|
+
* ignorable), `mergeQuestions` defaults `ask` (a dropped merge-question means
|
|
216
|
+
* pushed work never lands). `off` ⇒ the surfacer is NOT invoked (only for a
|
|
217
|
+
* repo that lands by some other means); `ask` (default) ⇒ the surfacer
|
|
218
|
+
* enumerates unmerged `work/*` branches and emits a merge-question sidecar a
|
|
219
|
+
* human answers; `auto` ⇒ the runner self-supplies the `merge` answer without
|
|
220
|
+
* surfacing and lands via the SAME deterministic answer-driven runner-action
|
|
221
|
+
* dispatch + apply-time re-verify (the merge-mode-like fast path; NOT the
|
|
222
|
+
* agentic decider). Resolved like `observationTriage`/`integration`: flag
|
|
223
|
+
* (`--merge-questions`) > `DORFL_MERGE_QUESTIONS` env > per-repo > global >
|
|
224
|
+
* default `ask`. Gates the SURFACE phase of the merge-question loop only;
|
|
225
|
+
* APPLY (consume a committed merge-answer) stays ALWAYS allowed (the
|
|
226
|
+
* create-vs-consume invariant the gate family obeys, ADR
|
|
227
|
+
* `ci-config-policy-and-gate-family` §4).
|
|
228
|
+
*/
|
|
229
|
+
mergeQuestions: MergeQuestions;
|
|
230
|
+
/**
|
|
231
|
+
* Per-repo policy governing DECLARED blocked work — the BOOLEAN member of the
|
|
232
|
+
* question-surfacing gate family (its orthogonal PEER is `observationTriage`,
|
|
233
|
+
* which governs the raw observation INBOX; ADR `ci-config-policy-and-gate-family`
|
|
234
|
+
* §2). It gates whether a task/prd carrying `needsAnswers: true` is rendered
|
|
235
|
+
* into an answerable question sidecar (`on`) or left silently blocked in the
|
|
236
|
+
* backlog (`off`). `false` (default, calm) ⇒ the `needsAnswers`-blocked pool is
|
|
237
|
+
* dropped from the auto-pick SELECTION, so a bare `advance` does NOT proactively
|
|
238
|
+
* surface a declared blocker; `true` ⇒ the blocked pool IS enumerated and
|
|
239
|
+
* `advance`'s surface rung renders the declared blocker into a sidecar the human
|
|
240
|
+
* can answer + unblock in-repo. This is a DIFFERENT job from `observationTriage`:
|
|
241
|
+
* it is about committed work items, not the raw inbox (so
|
|
242
|
+
* `observationTriage: ask|auto` + `surfaceBlockers: off` — "groom my inbox, leave
|
|
243
|
+
* my blocked work alone" — is expressible). Resolved like `autoBuild`: flag
|
|
244
|
+
* (`--surface-blockers`/`--no-surface-blockers`) > `DORFL_SURFACE_BLOCKERS`
|
|
245
|
+
* env > per-repo > global > default `false`. Gates the CREATE (surface) phase
|
|
246
|
+
* only; APPLY (consume a committed answer) stays ALWAYS allowed, and
|
|
247
|
+
* `needs-attention` (a stuck build) is a SEPARATE always-on mechanism this gate
|
|
248
|
+
* does NOT touch.
|
|
249
|
+
*/
|
|
250
|
+
surfaceBlockers: boolean;
|
|
251
|
+
/**
|
|
252
|
+
* Per-repo policy governing whether SURFACING (the question-minting polarity)
|
|
253
|
+
* inspects STAGING in addition to the agent pool — the BOOLEAN gate-family
|
|
254
|
+
* member added by prd `staging-surface-and-apply-promote-safety` (F2). The
|
|
255
|
+
* BUILD polarity is UNCHANGED in either mode: staging items stay non-claimable,
|
|
256
|
+
* the trust model is untouched. `true` (default) ⇒ the SURFACE candidate set
|
|
257
|
+
* draws from STAGING (`tasks/backlog/`, `prds/proposed/`) PLUS the pool, so
|
|
258
|
+
* a `needsAnswers` task/prd in staging surfaces its questions BEFORE a human
|
|
259
|
+
* promotes it (you promote an already-clarified item, not blind and then get
|
|
260
|
+
* asked after); `false` ⇒ the legacy POOL-ONLY behaviour (staging is not
|
|
261
|
+
* inspected for questions). Resolved like `surfaceBlockers`/`autoBuild`:
|
|
262
|
+
* flag > `DORFL_SURFACE_STAGING` env > per-repo > global > default
|
|
263
|
+
* `true`. Surfacing is read-only-ish (writes a question sidecar; touches only
|
|
264
|
+
* the item's per-item lock), so widening it into staging does NOT loosen the
|
|
265
|
+
* BUILD trust gate — it only stops the surface polarity from being
|
|
266
|
+
* gratuitously trust-gated identically to it.
|
|
267
|
+
*/
|
|
268
|
+
surfaceStaging: boolean;
|
|
269
|
+
/**
|
|
270
|
+
* Per-repo SELECTION ORDER across the four ORDERABLE auto-pick pools (`build` =
|
|
271
|
+
* eligible tasks, `task` = taskable prds, `surface` = `needsAnswers`
|
|
272
|
+
* blockers, `triage` = untriaged observations). `apply` (consume a committed
|
|
273
|
+
* answer) is PINNED FIRST and is NOT orderable (consume-always-wins). The value
|
|
274
|
+
* is EITHER a PRESET keyword (`drain` (default) ⇒ `[build, task, surface,
|
|
275
|
+
* triage]`, drain ready work then create then ask; `groom` ⇒ `[surface, triage,
|
|
276
|
+
* build, task]`) OR an explicit ordered pool-name list (the env comma form
|
|
277
|
+
* `build,task,surface,triage`); the preset is sugar over the list. It only
|
|
278
|
+
* REORDERS pools; the gates decide what is PRESENT (a gated-off pool named in
|
|
279
|
+
* the order is a no-op). SUBSUMES the old `prdsFirst` boolean: `drain`
|
|
280
|
+
* reproduces its default, `[task, build, ...]` reproduces `prdsFirst: true`.
|
|
281
|
+
* Resolved per-repo like `autoBuild`/`autoTask`: flag
|
|
282
|
+
* (`--selection-order`) > `DORFL_SELECTION_ORDER` env (the `'list'`
|
|
283
|
+
* coercion) > per-repo > global > default (`drain`). An unknown name/keyword
|
|
284
|
+
* FAILS LOUDLY (`select-order.ts` `resolveSelectionOrder`).
|
|
285
|
+
*/
|
|
286
|
+
selectionOrder: SelectionOrderConfig;
|
|
287
|
+
/** Global cap on how many items the runner claims+runs in one tick. */
|
|
288
|
+
maxParallel: number;
|
|
289
|
+
/** Per-repo cap on concurrent claims (≤ maxParallel in effect). */
|
|
290
|
+
perRepoMax: number;
|
|
291
|
+
/** Name of the git remote that serializes claims (the arbiter). */
|
|
292
|
+
defaultArbiter: string;
|
|
293
|
+
/**
|
|
294
|
+
* The execution working area: bare hub mirrors (`<dir>/repos/<key>.git`) and
|
|
295
|
+
* job worktrees (`<dir>/work/<work-id>/`). STATE, not cache (ADR §3) — lives
|
|
296
|
+
* under a single visible `~/.dorfl/`, NEVER `~/.cache`. Overridable so
|
|
297
|
+
* tests (and unusual setups) can relocate it.
|
|
298
|
+
*/
|
|
299
|
+
workspacesDir: string;
|
|
300
|
+
/**
|
|
301
|
+
* Where local `--bare` arbiters (offline source of truth) are provisioned:
|
|
302
|
+
* `<dir>/<host>/<org>/<name>.git` (hierarchical, reusing the repo→key
|
|
303
|
+
* encoding). Arbiters are precious DATA, not state/cache (ADR §7): they live
|
|
304
|
+
* under a visible `~/git/` and MUST NEVER be placed under `~/.dorfl/`
|
|
305
|
+
* (a `gc`/cleanup mishap could nuke the only copy). Overridable so tests can
|
|
306
|
+
* relocate it.
|
|
307
|
+
*/
|
|
308
|
+
arbitersDir: string;
|
|
309
|
+
/**
|
|
310
|
+
* Where the HUMAN `work-on` command checks out its parallel worktrees:
|
|
311
|
+
* `<dir>/<key>/<slug>/` on branch `work/<slug>`. This is a **human-only**,
|
|
312
|
+
* editor-facing area — deliberately NOT under `~/.dorfl/` (the agents'
|
|
313
|
+
* execution state, ADR §3), so a `work-on` worktree never carries the human's
|
|
314
|
+
* secrets into an agent context. It is intentionally OPTIONAL with **no silent
|
|
315
|
+
* default**: `work-on` prompts for it on first use and saves it here (offering a
|
|
316
|
+
* sensible suggestion that does NOT share a prefix with the user's code dirs, so
|
|
317
|
+
* shell tab-completion never collides). `undefined` ⇒ not yet configured.
|
|
318
|
+
*/
|
|
319
|
+
humanWorktreesDir?: string;
|
|
320
|
+
/** Integration mode for completed items: `propose` (default) or `merge`. */
|
|
321
|
+
integration: IntegrationMode;
|
|
322
|
+
/**
|
|
323
|
+
* **Per-TRANSITION override for the prd→tasks (TASKING) transition only.** When
|
|
324
|
+
* set, the tasking transition (a `do prd:<slug>` run: emit `work/tasks/backlog/*.md` +
|
|
325
|
+
* the `work/prds/ready/ → work/prds/tasked/` lifecycle move) integrates with THIS
|
|
326
|
+
* mode instead of the flat {@link integration}; the task-BUILD transition is
|
|
327
|
+
* unaffected (it always reads {@link integration}). UNSET (the default) ⇒ tasking
|
|
328
|
+
* falls back to {@link integration} — byte-for-byte today's behaviour for any repo
|
|
329
|
+
* that does not set it. The maintainer's target is `integration: 'propose'` +
|
|
330
|
+
* `taskingIntegration: 'merge'`: task a prd straight onto `main` (the task FILES
|
|
331
|
+
* land, no PR) but build each task as a reviewable PR. Resolved per-repo like
|
|
332
|
+
* {@link integration}: flag (`--merge`/`--propose`) > env
|
|
333
|
+
* (`DORFL_TASKING_INTEGRATION`) > per-repo > global > (fall back to)
|
|
334
|
+
* `integration` > default `propose`. DISTINCT from intake's per-EMITTED-TYPE
|
|
335
|
+
* `{task, prd}` resolver (front door, author-trust-resolved): this is a
|
|
336
|
+
* per-LIFECYCLE-TRANSITION knob, inside the trust boundary, operator/config-only.
|
|
337
|
+
*/
|
|
338
|
+
taskingIntegration?: IntegrationMode;
|
|
339
|
+
/**
|
|
340
|
+
* **Per-repo DEFAULT landing for the TASKER's emitted tasks** (prd
|
|
341
|
+
* `staging-pool-position-gate-and-trust-model` US #5, task
|
|
342
|
+
* `runner-deterministic-slice-placement-policy-and-precedence`). Resolved
|
|
343
|
+
* per-repo EXACTLY like {@link taskingIntegration} (flag `--tasks-land-in`
|
|
344
|
+
* > env `DORFL_TASKS_LAND_IN` > per-repo > global > built-in
|
|
345
|
+
* `'pre-backlog'`). The tasking path reads it and passes it as the
|
|
346
|
+
* CONFIGURED-DEFAULT rung into the shared placement resolver
|
|
347
|
+
* (`src/placement.ts`); the resolver overlays an EXPLICIT operator flag
|
|
348
|
+
* (top) and the UNTRUSTED-ORIGIN force (staging) on top, in that order. The
|
|
349
|
+
* tasker NEVER sets placement itself. Prd US #6 / the governing ADR: the
|
|
350
|
+
* runner OWNS placement from unforgeable inputs; the agent cannot
|
|
351
|
+
* influence it.
|
|
352
|
+
*/
|
|
353
|
+
tasksLandIn: TasksLandIn;
|
|
354
|
+
/**
|
|
355
|
+
* **Per-repo DEFAULT landing for `intake`-authored spec files** (spec
|
|
356
|
+
* `staging-pool-position-gate-and-trust-model` US #2/#5/#6/#12). The SPEC twin
|
|
357
|
+
* of {@link tasksLandIn}: resolved per-repo EXACTLY like it (flag
|
|
358
|
+
* `--specs-land-in` > env `DORFL_SPECS_LAND_IN` > per-repo > global >
|
|
359
|
+
* built-in `'pre-proposed'`). `intake`'s spec dispatch reads it and passes it as
|
|
360
|
+
* the CONFIGURED-DEFAULT rung into the shared placement resolver
|
|
361
|
+
* (`src/placement.ts`); the resolver overlays an EXPLICIT operator flag
|
|
362
|
+
* (top) and the UNTRUSTED-ORIGIN force (staging) on top, in that order.
|
|
363
|
+
* `intake` NEVER sets placement itself. Spec US #6 / the governing ADR: the
|
|
364
|
+
* runner OWNS placement from unforgeable inputs; the agent cannot
|
|
365
|
+
* influence it. KEY-LEVEL SYMMETRY with `tasksLandIn` — one resolver, two
|
|
366
|
+
* lifecycles, one precedence change touches ONE place.
|
|
367
|
+
*
|
|
368
|
+
* The sole spec-placement key after the prd → spec HARD CUTOVER (spec
|
|
369
|
+
* `prd-to-spec-vocabulary-cutover-and-migration-command`): the legacy
|
|
370
|
+
* `prdsLandIn` config key + `--prds-land-in` flag are GONE (clean break).
|
|
371
|
+
*/
|
|
372
|
+
specsLandIn: SpecsLandIn;
|
|
373
|
+
/**
|
|
374
|
+
* **The PR-INTENT axis** (ADR §6): on the `propose` path, do NOT open a review
|
|
375
|
+
* request even on a GitHub arbiter with auth — push the branch (the
|
|
376
|
+
* safety-bearing recovery point) but SKIP `openRequest`. `true` ⇒ deliberately
|
|
377
|
+
* no PR (the explicit, no-warning "suppress the PR" intent that re-homes the old
|
|
378
|
+
* `provider: none` use); `false`/unset (default) ⇒ "I want a PR", so propose
|
|
379
|
+
* opens it via the arbiter-derived provider as normal. This is NOT a provider
|
|
380
|
+
* choice — `selectProvider` stays purely arbiter-derived; `noPR` is an intent
|
|
381
|
+
* LAYERED on top. Its honest-failure twin: when `noPR` is unset + propose + a
|
|
382
|
+
* GitHub arbiter but a `gh` auth PROBE says `gh` cannot open a PR, the run FAILS
|
|
383
|
+
* UP FRONT (a pre-flight guard) instead of silently degrading. `merge` mode
|
|
384
|
+
* ignores it (it never opens a PR). Resolved per-repo like `review`: flag
|
|
385
|
+
* (`--no-pr`) > env > per-repo > global > default `false`.
|
|
386
|
+
*/
|
|
387
|
+
noPR: boolean;
|
|
388
|
+
/**
|
|
389
|
+
* The command the runner shells out to for one task. The runner appends the
|
|
390
|
+
* built prompt on stdin; the command does NO git ops on the repo (the runner
|
|
391
|
+
* owns those). Empty string ⇒ no agent configured (run will refuse). Consumed
|
|
392
|
+
* by the **null** harness adapter (it shells out to this verbatim); the **pi**
|
|
393
|
+
* adapter ignores it (it invokes the pi CLI directly — see `harness`).
|
|
394
|
+
*/
|
|
395
|
+
agentCmd: string;
|
|
396
|
+
/**
|
|
397
|
+
* The model a job's agent runs on (harness-agnostic ROUTING intent, ADR §13).
|
|
398
|
+
* dorfl decides WHICH model; it never touches auth/keys (those stay the
|
|
399
|
+
* harness's job). Optional with NO default so "unset" is meaningful: unset ⇒
|
|
400
|
+
* dorfl forces no model (the harness's own default / a model baked into
|
|
401
|
+
* `agentCmd` is used untouched). Carried through the harness seam
|
|
402
|
+
* (`LaunchInput.model`); the ADAPTER decides HOW it reaches its tool — the pi
|
|
403
|
+
* adapter passes `--model <model>` natively, the null/shell adapter substitutes
|
|
404
|
+
* a `{model}` placeholder in `agentCmd`. Resolved per-repo like `integration`:
|
|
405
|
+
* flag (`--model`) > env > per-repo > global > default (unset).
|
|
406
|
+
*/
|
|
407
|
+
model?: string;
|
|
408
|
+
/**
|
|
409
|
+
* Which harness adapter launches + reports liveness for a job's agent (the
|
|
410
|
+
* harness seam, ADR §5): `null` (default — shells out to `agentCmd`,
|
|
411
|
+
* PID-only liveness) or `pi` (invokes the pi CLI with the work-agent prompt;
|
|
412
|
+
* liveness from PID + the pi session dir/log, never mtime). pi specifics stay
|
|
413
|
+
* behind the adapter; the core only sees the `Harness` interface.
|
|
414
|
+
*/
|
|
415
|
+
harness?: HarnessAdapter;
|
|
416
|
+
/**
|
|
417
|
+
* The pi CLI binary the `pi` harness invokes (default `pi` on `PATH`).
|
|
418
|
+
* Overridable so an operator can pin a path; tests stub it. Ignored unless
|
|
419
|
+
* `harness` is `pi`.
|
|
420
|
+
*/
|
|
421
|
+
piBin?: string;
|
|
422
|
+
/**
|
|
423
|
+
* The ROOT folder under which the runner generates a job's pi session FILE —
|
|
424
|
+
* the adapter passes `--session <sessionsDir>/<unique-id>.jsonl` (a literal
|
|
425
|
+
* file path pi creates + writes; never `--session-dir`). A **HOST-ONLY machine
|
|
426
|
+
* path** (same class as `piBin`/`workspacesDir`): resolved flag (`--sessions-
|
|
427
|
+
* dir`) > env (`DORFL_SESSIONS_DIR`) > global > default — there is NO
|
|
428
|
+
* per-repo layer (a committed repo file must not redirect where the host writes
|
|
429
|
+
* session logs), so it is in `REPO_REJECTED_KEYS`. Optional with a DYNAMIC
|
|
430
|
+
* default (NOT a `DEFAULT_CONFIG` entry): unset ⇒ the path generator derives
|
|
431
|
+
* pi's default per-cwd sessions folder at launch from the job cwd (a direct
|
|
432
|
+
* child of `~/.pi/agent/sessions/`, so the dashboard's non-recursive `listAll`
|
|
433
|
+
* scans it). Set ⇒ any folder (e.g. a dedicated `run` fleet folder).
|
|
434
|
+
*/
|
|
435
|
+
sessionsDir?: string;
|
|
436
|
+
/**
|
|
437
|
+
* The per-repo ENV-PREP step (install deps, fetch submodules, run codegen) —
|
|
438
|
+
* the SIBLING of `verify`, NOT part of it. `prepare` makes a freshly-
|
|
439
|
+
* materialised worktree's environment READY; `verify` checks the tree is
|
|
440
|
+
* GREEN. The runner sequences `prepare` THEN `verify`: `prepare` runs ONCE,
|
|
441
|
+
* before the FIRST `verify`, on a worktree that needs deps but does not have
|
|
442
|
+
* them (a fresh job worktree off the hub mirror). Install MUST NOT be baked
|
|
443
|
+
* into `verify` — that would make `verify` stop being a pure, cheaply-re-
|
|
444
|
+
* runnable acceptance check and make every gate run pay the install cost.
|
|
445
|
+
* `prepare` is where install belongs. A deterministic shell command (or an
|
|
446
|
+
* ordered list, all must pass); no model in the loop. Same shape and the SAME
|
|
447
|
+
* resolution/precedence as `verify` (flag > env > per-repo > global > default).
|
|
448
|
+
* The ONE difference from `verify`: unset (omitted) ⇒ NO prepare step (a
|
|
449
|
+
* no-op) — there is NO default install (a repo with no deps needs none; we
|
|
450
|
+
* never invent a default that would run `pnpm install` in a repo that has no
|
|
451
|
+
* lockfile). See `prepare.ts`.
|
|
452
|
+
*/
|
|
453
|
+
prepare?: VerifyConfig;
|
|
454
|
+
/**
|
|
455
|
+
* The per-repo acceptance gate run by `dorfl verify` (a deterministic
|
|
456
|
+
* shell command, or an ordered list of commands). NOT per-task and NOT model-
|
|
457
|
+
* interpreted — it is declared, auditable config (ADR §8). Unset (omitted) ⇒
|
|
458
|
+
* a sensible `pnpm -r build && test && format:check` default; the field is
|
|
459
|
+
* intentionally optional so "unset" is distinguishable from "empty". Install
|
|
460
|
+
* must NOT be baked into `verify` — env-prep belongs in the sibling `prepare`
|
|
461
|
+
* field, which the runner runs ONCE before the first `verify` on a fresh
|
|
462
|
+
* worktree (the prepare=env-ready / verify=tree-green split).
|
|
463
|
+
*/
|
|
464
|
+
verify?: VerifyConfig;
|
|
465
|
+
/**
|
|
466
|
+
* **Gate 2 — the PR/code review gate** (GATES prd `work/prds/tasked/review.md`): run the
|
|
467
|
+
* `review` SKILL as a fresh-context judgement gate ON TOP of the deterministic
|
|
468
|
+
* `verify` floor, AFTER `verify` passes and BEFORE the done-move, on the
|
|
469
|
+
* `do`/`complete` path. Default **OFF** (it puts a model on the merge path —
|
|
470
|
+
* opt-in, ADR §8). Resolved per-repo like `integration`: flag
|
|
471
|
+
* (`--review`/`--no-review`) > env > per-repo > global > default false.
|
|
472
|
+
* `verify` is never replaced — review is layered, never a substitute.
|
|
473
|
+
*/
|
|
474
|
+
review: boolean;
|
|
475
|
+
/**
|
|
476
|
+
* The model the REVIEW agent runs on (de-correlation from the builder's
|
|
477
|
+
* `model`). Optional with NO default so "unset" means "no forced review model"
|
|
478
|
+
* (the harness's own default). Carried to the review-agent launch through the
|
|
479
|
+
* EXISTING harness seam (`LaunchInput.model` / `substituteModel`) — NOT a new
|
|
480
|
+
* mechanism. Resolved like `model`: flag (`--review-model`) > env > per-repo >
|
|
481
|
+
* global > default (unset). Distinct from the builder's `model`.
|
|
482
|
+
*/
|
|
483
|
+
reviewModel?: string;
|
|
484
|
+
/**
|
|
485
|
+
* How many CORROBORATING review rounds Gate 2 runs on the SAME tip. Semantics are
|
|
486
|
+
* UNANIMOUS-APPROVAL, not retry-until-pass: the gate approves ONLY if EVERY round
|
|
487
|
+
* approves, and a `block` is TERMINAL (it short-circuits the loop and is never
|
|
488
|
+
* re-rolled — re-reviewing an unchanged tip after a block would just be a
|
|
489
|
+
* stochastic dice re-roll that could launder a real reject into a pass). So a
|
|
490
|
+
* value > 1 makes a FALSE APPROVE harder to slip through (each extra round is a
|
|
491
|
+
* veto), it does NOT give blocked work a second chance. A non-approve forces
|
|
492
|
+
* `needs-attention/` (never silently merges or loops), per the maintainer
|
|
493
|
+
* decision. Default a small N (2): two independent approvals required. (A future
|
|
494
|
+
* builder-REVISE step that MUTATES the tree between rounds is the only thing that
|
|
495
|
+
* should make a block retryable, because it changes the artifact under review; it
|
|
496
|
+
* is not implemented yet.) Resolved like `integration`: flag
|
|
497
|
+
* (`--review-max-rounds`) > env > per-repo > global > default.
|
|
498
|
+
*/
|
|
499
|
+
reviewMaxRounds: number;
|
|
500
|
+
/**
|
|
501
|
+
* **The tasker IMPROVER loop on/off toggle** (`--tasker-loop` /
|
|
502
|
+
* `--no-tasker-loop`). On the `do prd:<slug>` tasking path the improver loop is
|
|
503
|
+
* the task path's quality engine (auto-tasking has no `verify` floor), so it is
|
|
504
|
+
* ON by default; setting this false gates wiring the loop seam (the candidate
|
|
505
|
+
* tasks land as-is). Resolved per-repo like `integration`: flag
|
|
506
|
+
* (`--tasker-loop`/`--no-tasker-loop`) > env > per-repo > global > default (on).
|
|
507
|
+
* DISTINCT from the acceptance gate's `review` toggle.
|
|
508
|
+
*/
|
|
509
|
+
taskerLoop: boolean;
|
|
510
|
+
/**
|
|
511
|
+
* **The tasker IMPROVER loop's convergence cap** (`slicer-review-edit-loop`,
|
|
512
|
+
* GATES prd `work/prds/tasked/review.md` RESOLVED DESIGN — Shape 2 / insertion point
|
|
513
|
+
* A). On the `do prd:<slug>` tasking path, AFTER the agent produces candidate
|
|
514
|
+
* tasks the loop runs the `review` SKILL, APPLIES its edits, and re-reviews
|
|
515
|
+
* until a pass finds no NEW blocking issue (the natural terminator).
|
|
516
|
+
* `taskerLoopMax` is the HARD CAP on the in-context review passes (N) so the
|
|
517
|
+
* loop can never run forever; on hitting it WITH unresolved blockers the loop
|
|
518
|
+
* REJECTS via the needsAnswers / needs-attention sink. It lives on the LOOP,
|
|
519
|
+
* never on a gate (the orphaned `reviewMaxRounds` belongs to the Gate-2 path —
|
|
520
|
+
* separate cleanup). A cheap default (3). Resolved per-repo like `integration`:
|
|
521
|
+
* flag (`--tasker-loop-max`) > env > per-repo > global > default. Distinct from
|
|
522
|
+
* Gate-2's `reviewMaxRounds`.
|
|
523
|
+
*/
|
|
524
|
+
taskerLoopMax: number;
|
|
525
|
+
/**
|
|
526
|
+
* The model the tasker IMPROVER loop's review agent runs on (de-correlation
|
|
527
|
+
* from the tasker). Optional with NO default so "unset" means "no forced model"
|
|
528
|
+
* (the harness's own default). Carried to the review-agent launch through the
|
|
529
|
+
* EXISTING harness seam (`LaunchInput.model` / `substituteModel`). Resolved like
|
|
530
|
+
* `model`: flag (`--tasker-loop-model`) > env > per-repo > global > default
|
|
531
|
+
* (unset). DISTINCT from the acceptance gate's `reviewModel` (build
|
|
532
|
+
* `--review-model`).
|
|
533
|
+
*/
|
|
534
|
+
taskerLoopModel?: string;
|
|
535
|
+
/**
|
|
536
|
+
* **The fresh-worktree acceptance-gate toggle** (`--fresh-worktree-gate` /
|
|
537
|
+
* `--no-fresh-worktree-gate`). When ON (the default), the acceptance gate
|
|
538
|
+
* (`prepare` then `verify`) runs in a CLEAN throwaway worktree cut from the
|
|
539
|
+
* work branch REBASED onto the latest `<arbiter>/main` — i.e. the exact tree
|
|
540
|
+
* the arbiter will integrate — rather than the agent's pre-rebase working
|
|
541
|
+
* checkout. So a green gate provably describes the merged artifact: a
|
|
542
|
+
* gitignored/uncommitted file the checkout has but the committed/pushed tree
|
|
543
|
+
* does NOT cannot leak into a falsely-green gate, and a change introduced only
|
|
544
|
+
* by the integration rebase IS gated. When OFF (`freshWorktreeGate: false` /
|
|
545
|
+
* `--no-fresh-worktree-gate`), `verify` runs in the agent's build worktree
|
|
546
|
+
* exactly as before (the PRE-rebase gate) — the opt-out for when the per-gate
|
|
547
|
+
* install cost is too high. The throwaway gate worktree is fresh (no deps), so
|
|
548
|
+
* `prepare` runs in it before `verify` (the per-gate install cost the opt-out
|
|
549
|
+
* exists for). Modelled EXACTLY on `taskerLoop`: a POSITIVE boolean, default
|
|
550
|
+
* ON, `--no-` negation. Resolved per-repo like `integration`: flag
|
|
551
|
+
* (`--fresh-worktree-gate`/`--no-fresh-worktree-gate`) > env > per-repo >
|
|
552
|
+
* global > default (on). DISTINCT from `review`/`taskerLoop` (a separate
|
|
553
|
+
* concern: WHICH tree the gate runs against, not whether a review runs).
|
|
554
|
+
*
|
|
555
|
+
* The shared gate→integrate band (`performIntegration`) simply HONOURS the
|
|
556
|
+
* boolean it is handed (caller-agnostic). The `run` FLEET caller passes
|
|
557
|
+
* `(resolvedFlag && perRepoMax === 1)` so the fresh gate is used only when
|
|
558
|
+
* same-repo concurrency is OFF (two pre-existing run-fleet races would
|
|
559
|
+
* otherwise fire at `perRepoMax > 1`; they are their own task). Single-job
|
|
560
|
+
* callers (`do` in-place / `--isolated` / `--remote` / `complete`) pass the
|
|
561
|
+
* resolved flag UNCONDITIONALLY.
|
|
562
|
+
*/
|
|
563
|
+
freshWorktreeGate: boolean;
|
|
564
|
+
/**
|
|
565
|
+
* **The cross-job merge serialiser's CAS-retry cap** — the git-alone FLOOR of the
|
|
566
|
+
* land-time cross-job queue (prd `land-time-reverify-and-parallel-merge-ceiling`,
|
|
567
|
+
* Story 5 + Applied Answer q1 (a)). The merge-mode `${branch}:main` push retries
|
|
568
|
+
* a non-fast-forward rejection by re-rebasing onto the moved `<arbiter>/main` and
|
|
569
|
+
* pushing again, up to this cap; only after exhaustion does a loser bounce to
|
|
570
|
+
* needs-attention. The in-process `integrateLock` only serialises sibling
|
|
571
|
+
* INTEGRATES in ONE process; across separate CI jobs the CAS loop IS the queue,
|
|
572
|
+
* and this cap is what determines how wide a matrix burst converges before any
|
|
573
|
+
* spurious bounce. A wide-matrix CI raises it; the default stays modest. Race-1
|
|
574
|
+
* safety is unchanged (a lost CAS costs only a re-rebase + re-gate retry, never a
|
|
575
|
+
* `--force`, never a both-land-broken) — scaling the cap only changes WHEN a
|
|
576
|
+
* genuinely-stuck loser gives up. Resolved per-repo like `freshWorktreeGate`:
|
|
577
|
+
* flag (`--merge-retries`) > env (`DORFL_MERGE_RETRIES`) > per-repo > global >
|
|
578
|
+
* default. The default matches `integration-core.ts`'s built-in fallback (1000 —
|
|
579
|
+
* the C2 rebase-until-real-conflict liveness ceiling, not a small Race-1 budget),
|
|
580
|
+
* so resolving it through this layer is byte-for-byte today's behaviour when no
|
|
581
|
+
* source sets it. Forwarded into `performIntegration`'s `mergeRetries` (resolved
|
|
582
|
+
* ONCE per `performIntegration` call, fixed across that call's CAS-retry loop —
|
|
583
|
+
* the same per-item resolution `freshWorktreeGate` / `review` use).
|
|
584
|
+
*/
|
|
585
|
+
mergeRetries: number;
|
|
586
|
+
/**
|
|
587
|
+
* **Per-repo OPT-IN strictness layered on the OQ6 stale-approval default**
|
|
588
|
+
* (prd `land-time-reverify-and-parallel-merge-ceiling`, sidecar OQ6 / task
|
|
589
|
+
* `strict-merge-approval-gate`). Controls how the apply rung treats a prior
|
|
590
|
+
* merge-answer when the merge-base CHANGED between the human's answer and
|
|
591
|
+
* the apply step. The default (`false`) honours the prior answer and lands
|
|
592
|
+
* when the rebased tip re-verifies GREEN — a green re-verify is trusted as
|
|
593
|
+
* sufficient (the cheap fast-path). `true` re-surfaces the merge-question
|
|
594
|
+
* (clears the answer back to no-answer and re-authors the question on
|
|
595
|
+
* `main`/runner under the `advancing` lock — no branch-side mutation)
|
|
596
|
+
* instead of auto-landing on a merge-base change, even on a green re-verify
|
|
597
|
+
* — the host-agnostic analogue of GitHub's "dismiss stale approvals when
|
|
598
|
+
* the base changes". Story #16's RED-re-verify refusal is UNCHANGED and
|
|
599
|
+
* independent of this flag.
|
|
600
|
+
*
|
|
601
|
+
* This module ONLY resolves the boolean; the re-surface vs. land branch
|
|
602
|
+
* lives in `apply-rung-merge-disposition`'s consumer. Resolved per-repo
|
|
603
|
+
* through the SAME gate-family precedence chain as the sibling gates
|
|
604
|
+
* (flag `--strict-merge-approval` > env `DORFL_STRICT_MERGE_APPROVAL` >
|
|
605
|
+
* per-repo > global > default `false`). DOES NOT alter `mergeQuestions` /
|
|
606
|
+
* `observationTriage` default or shape — a SEPARATE, independent axis.
|
|
607
|
+
*/
|
|
608
|
+
strictMergeApproval: boolean;
|
|
609
|
+
/**
|
|
610
|
+
* The optional runner **identity** (a bot): run the runner's git + provider
|
|
611
|
+
* operations as a configured entity via process-scoped env overrides, without
|
|
612
|
+
* mutating the user's global git/`gh` config (see `identity.ts`). HOST-ONLY
|
|
613
|
+
* (it carries secrets and is per-machine) ⇒ rejected in a per-repo file
|
|
614
|
+
* (`REPO_REJECTED_KEYS`); it lives only in the global config. Optional with NO
|
|
615
|
+
* default: unset ⇒ fully ambient (today's behaviour, byte-for-byte) — the CI
|
|
616
|
+
* path relies on `actions/checkout`'s ambient HTTPS+`GITHUB_TOKEN`. When set,
|
|
617
|
+
* `auth` is mandatory and validated at load time ({@link validateIdentity}).
|
|
618
|
+
*/
|
|
619
|
+
identity?: Identity;
|
|
620
|
+
}
|
|
621
|
+
/** A partial config, e.g. loaded from a JSON file or built from CLI flags. */
|
|
622
|
+
export type PartialConfig = Partial<Config>;
|
|
623
|
+
/**
|
|
624
|
+
* The DEPRECATED config/env keys: present in an OLD config keeps working but is
|
|
625
|
+
* IGNORED with a one-line warning (never a hard error), so an existing setup is
|
|
626
|
+
* not broken by a removal. Each maps to the human-facing replacement hint. Mirrors
|
|
627
|
+
* the `allowAgents`→`autoBuild` removal-with-warning precedent.
|
|
628
|
+
*
|
|
629
|
+
* `provider` (the review-request provider OVERRIDE + `--provider` flag) was
|
|
630
|
+
* removed: the provider is purely ARBITER-derived now (a GitHub remote ⇒ the
|
|
631
|
+
* GitHub provider, else `none`), so an override could only contradict the arbiter.
|
|
632
|
+
* The legitimate `provider: none` use ("suppress the PR") is re-homed to the
|
|
633
|
+
* `noPR` intent axis.
|
|
634
|
+
*/
|
|
635
|
+
export declare const DEPRECATED_CONFIG_KEYS: Readonly<Record<string, string>>;
|
|
636
|
+
/**
|
|
637
|
+
* Warn (once per offending key) for any DEPRECATED key present in a parsed config
|
|
638
|
+
* object, then DELETE it from the object so it never lingers in the resolved
|
|
639
|
+
* config. A stale key is IGNORED, not an error — an existing config keeps working.
|
|
640
|
+
* For `provider`, the warning points specifically at the `noPR` replacement when
|
|
641
|
+
* the stale value was the old `none` ("suppress the PR") use.
|
|
642
|
+
*/
|
|
643
|
+
export declare function warnDeprecatedConfigKeys(parsed: Record<string, unknown>, source: string, warn?: (message: string) => void): void;
|
|
644
|
+
/**
|
|
645
|
+
* Built-in defaults. Chosen so that zero-config is useful: stay strict about the
|
|
646
|
+
* autonomy gate (agents claim nothing unless a repo opts in via `autoBuild`).
|
|
647
|
+
* Discovery has no default `roots` — it is the registered hub-mirror set (empty
|
|
648
|
+
* until `remote add`/`remote find` registers a target).
|
|
649
|
+
*/
|
|
650
|
+
export declare const DEFAULT_CONFIG: Config;
|
|
651
|
+
/** The conventional config location (`~/.config/dorfl/config.json`). */
|
|
652
|
+
export declare function defaultConfigPath(): string;
|
|
653
|
+
/** Merge a partial config over the built-in defaults; arrays are replaced. */
|
|
654
|
+
export declare function mergeConfig(overrides: PartialConfig): Config;
|
|
655
|
+
/**
|
|
656
|
+
* Persist `config` to `path` as pretty JSON (creating the parent dir). Used by
|
|
657
|
+
* `work-on` to SAVE the prompted `humanWorktreesDir` on first use so the human is
|
|
658
|
+
* never asked again. Only the keys present in `config` are written — we round-trip
|
|
659
|
+
* whatever the loader produced (defaults + file + the new key), which keeps the
|
|
660
|
+
* on-disk file explicit and stable.
|
|
661
|
+
*/
|
|
662
|
+
export declare function saveConfig(config: PartialConfig, path: string): void;
|
|
663
|
+
/**
|
|
664
|
+
* Load config from `path`, merged over defaults. A missing file is not an error
|
|
665
|
+
* (defaults make the tool work out of the box); invalid JSON is.
|
|
666
|
+
*/
|
|
667
|
+
export declare function loadConfig(path?: string): Config;
|
|
668
|
+
//# sourceMappingURL=config.d.ts.map
|