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
|
@@ -0,0 +1,231 @@
|
|
|
1
|
+
import { performAdvance, } from './advance.js';
|
|
2
|
+
import { pushTreelessResult, TREELESS_RUNGS, } from './advance-treeless-publish.js';
|
|
3
|
+
import { scanRepoPaths } from './scan.js';
|
|
4
|
+
import { ledgerRead } from './ledger-read.js';
|
|
5
|
+
import { selectPrioritised, taskableSpecs, } from './select-priority.js';
|
|
6
|
+
import { gatherLifecycleInPlace } from './lifecycle-gather.js';
|
|
7
|
+
/**
|
|
8
|
+
* The task-pool caps for an in-place `advance` selection. `advance` (one-shot) is
|
|
9
|
+
* per-repo + SEQUENTIAL, so the REAL bound is the requested `count`. We cap the
|
|
10
|
+
* task pool at "all eligible" and let {@link selectPrioritised}'s `count` trim
|
|
11
|
+
* across both pools — identical to `do-autopick`'s {@link performDoAuto}.
|
|
12
|
+
*/
|
|
13
|
+
const ALL_ELIGIBLE = Number.MAX_SAFE_INTEGER;
|
|
14
|
+
/**
|
|
15
|
+
* Run the BARE / `-n <x>` form: build the two ELIGIBLE pools for `cwd` (eligible
|
|
16
|
+
* TASKS gated by `autoBuild`, taskable prds gated by `autoTask`), order them
|
|
17
|
+
* (plus the lifecycle pools) per the resolved `selectionOrder` with `apply`
|
|
18
|
+
* pinned first, take `count` (default 1), and run the EXISTING advance tick per
|
|
19
|
+
* selected item, SEQUENTIALLY. The pools are the EXACT
|
|
20
|
+
* `do-autopick` pools (the SAME `scoreItems`/`taskableSpecs` predicates), so the
|
|
21
|
+
* per-action gate family is honoured by construction.
|
|
22
|
+
*
|
|
23
|
+
* The bare/`-n` selection draws ONLY from the autonomous pools (eligible tasks +
|
|
24
|
+
* taskable prds); SURFACE + APPLY of a gated item are reached by NAMING the item
|
|
25
|
+
* ({@link performAdvanceArgs}) — they are always-allowed and not pool-gated, so the
|
|
26
|
+
* bare form with every flag off correctly selects NOTHING (zero autonomy) while a
|
|
27
|
+
* named `advance <slug>` still surfaces/applies.
|
|
28
|
+
*/
|
|
29
|
+
export async function performAdvanceAuto(options) {
|
|
30
|
+
const run = options.run ?? performAdvance;
|
|
31
|
+
const read = options.read ?? ledgerRead;
|
|
32
|
+
const note = options.note ?? (() => { });
|
|
33
|
+
const cwd = options.cwd;
|
|
34
|
+
const count = options.count ?? 1;
|
|
35
|
+
// Pool 1 — eligible TASKS via the EXISTING scan/select path. `scoreItems`
|
|
36
|
+
// inside `scanRepoPaths` gates eligibility on `autoBuild` (the build gate), so
|
|
37
|
+
// with `autoBuild` off NO task is selected — the build rung is never reached
|
|
38
|
+
// by the bare/`-n` selection.
|
|
39
|
+
const report = scanRepoPaths([cwd], options.config, new Set(), options.override);
|
|
40
|
+
// Pool 2 — TASKABLE prds filtered by `autoslice-gate`'s predicate (gated on
|
|
41
|
+
// `autoTask`). With `autoTask` off NO prd is selected — the task rung is
|
|
42
|
+
// never reached by the bare/`-n` selection.
|
|
43
|
+
const pool = read.resolveSpecPool({ repoPath: cwd });
|
|
44
|
+
const specCandidates = pool.specs.map((spec) => ({
|
|
45
|
+
repoPath: cwd,
|
|
46
|
+
slug: spec.slug,
|
|
47
|
+
humanOnly: spec.humanOnly,
|
|
48
|
+
needsAnswers: spec.needsAnswers,
|
|
49
|
+
taskedAfter: spec.taskedAfter,
|
|
50
|
+
}));
|
|
51
|
+
const eligibleSpecs = taskableSpecs({
|
|
52
|
+
candidates: specCandidates,
|
|
53
|
+
taskedSlugs: pool.taskedSlugs,
|
|
54
|
+
autoTask: options.config.autoTask,
|
|
55
|
+
});
|
|
56
|
+
// Pools 3 + 4 — the LIFECYCLE pools (untriaged observations + `needsAnswers`-
|
|
57
|
+
// blocked tasks/prds + answered-sidecar items), built CALLER-SIDE (here, the
|
|
58
|
+
// `advance` caller) through the SHARED enumeration unit and passed in — NOT baked
|
|
59
|
+
// into `selectPrioritised` (so `do` is provably unchanged). The create-gates
|
|
60
|
+
// default OFF (interim hardcoded-off): triage + surface contribute nothing; the
|
|
61
|
+
// apply sub-pool is always-on (consume), so an answered sidecar still applies.
|
|
62
|
+
const lifecycle = gatherLifecycleInPlace({
|
|
63
|
+
repoPath: cwd,
|
|
64
|
+
read,
|
|
65
|
+
gates: options.lifecycleGates,
|
|
66
|
+
});
|
|
67
|
+
// Order across the (up to) FIVE pools per the resolved `selectionOrder` (apply
|
|
68
|
+
// pinned first) + bound by count — the SAME shared, pure `selectPrioritised` the
|
|
69
|
+
// `do` auto-pick driver uses (which passes NO lifecycle pools, so it is unchanged).
|
|
70
|
+
const selected = selectPrioritised({
|
|
71
|
+
report,
|
|
72
|
+
caps: { maxParallel: ALL_ELIGIBLE, perRepoMax: ALL_ELIGIBLE },
|
|
73
|
+
specs: eligibleSpecs,
|
|
74
|
+
selectionOrder: options.config.selectionOrder,
|
|
75
|
+
lifecycle,
|
|
76
|
+
count,
|
|
77
|
+
});
|
|
78
|
+
if (selected.length === 0) {
|
|
79
|
+
// With every gate off this is the "zero autonomy" case: nothing autonomous to
|
|
80
|
+
// select. The question loop (surface/apply) is reached by NAMING an item, not
|
|
81
|
+
// the bare form — so this is calm-at-rest, NOT a failure.
|
|
82
|
+
const message = 'Nothing eligible to advance (no eligible tasks and no taskable prds ' +
|
|
83
|
+
'under the per-action gates; name an item to surface/apply its questions).';
|
|
84
|
+
note(message);
|
|
85
|
+
return { results: [], exitCode: 0, message };
|
|
86
|
+
}
|
|
87
|
+
return runSelectedInSequence(selected, options, run);
|
|
88
|
+
}
|
|
89
|
+
/**
|
|
90
|
+
* Run the EXPLICIT multi-arg form (`advance <a> <b> …`): the named items in the
|
|
91
|
+
* GIVEN order (no pool/priority — the operator chose them). Each arg is run
|
|
92
|
+
* through the existing advance tick, which itself resolves bare/`task:`/`prd:`/
|
|
93
|
+
* `obs:` (so a named prd drives the task rung, an `obs:` the triage rung, a
|
|
94
|
+
* collision errors), SEQUENTIALLY. A NAMED item is the always-allowed path — its
|
|
95
|
+
* surface/apply rung runs regardless of the per-action gates.
|
|
96
|
+
*/
|
|
97
|
+
export async function performAdvanceArgs(args, options) {
|
|
98
|
+
const run = options.run ?? performAdvance;
|
|
99
|
+
const selected = args.map((arg) => ({
|
|
100
|
+
repoPath: options.cwd,
|
|
101
|
+
slug: arg,
|
|
102
|
+
// The arg is passed VERBATIM to the tick (it does its own slug resolution
|
|
103
|
+
// across task/prd/observation); the namespace is irrelevant for explicit args.
|
|
104
|
+
namespace: 'task',
|
|
105
|
+
}));
|
|
106
|
+
return runSelectedInSequence(selected, options, run, { verbatimArg: true });
|
|
107
|
+
}
|
|
108
|
+
/**
|
|
109
|
+
* Run a list of selected items through the existing advance tick, SEQUENTIALLY
|
|
110
|
+
* (US #25 — `-n` is always sequential), threading the shared context to each. For
|
|
111
|
+
* the pool path the arg encodes the namespace (`prd:<slug>` for a selected prd,
|
|
112
|
+
* bare slug for a task); for the explicit-arg path the caller's raw arg is passed
|
|
113
|
+
* verbatim. Each tick is INDEPENDENTLY `advancing`-lock-guarded inside
|
|
114
|
+
* {@link performAdvance} — sequential here means one item at a time, never a
|
|
115
|
+
* parallelism knob.
|
|
116
|
+
*/
|
|
117
|
+
async function runSelectedInSequence(selected, options, run, mode = {}) {
|
|
118
|
+
const shared = sharedAdvanceContext(options);
|
|
119
|
+
const results = [];
|
|
120
|
+
for (const item of selected) {
|
|
121
|
+
const arg = mode.verbatimArg ? item.slug : argForSelectedItem(item);
|
|
122
|
+
const result = await runAdvanceTickWithTreelessPublish({ ...shared, arg, read: options.read }, run);
|
|
123
|
+
results.push(result);
|
|
124
|
+
}
|
|
125
|
+
const firstFailure = results.find((r) => r.exitCode !== 0);
|
|
126
|
+
const exitCode = firstFailure ? firstFailure.exitCode : 0;
|
|
127
|
+
const ok = results.filter((r) => r.exitCode === 0).length;
|
|
128
|
+
const message = `advanced ${results.length} item${results.length === 1 ? '' : 's'} ` +
|
|
129
|
+
`(${ok} ok, ${results.length - ok} not).`;
|
|
130
|
+
return { results, exitCode, message };
|
|
131
|
+
}
|
|
132
|
+
/**
|
|
133
|
+
* Run ONE in-place advance tick + ff-push a tree-less rung's result to the
|
|
134
|
+
* arbiter — task `advance-in-place-publishes-treeless-results`. Wraps the
|
|
135
|
+
* substrate-agnostic tick ({@link AdvanceTickRunner}) with the shared
|
|
136
|
+
* {@link pushTreelessResult} so a surfaced sidecar / `triaged:` marker /
|
|
137
|
+
* applied-answer commit committed LOCALLY in the in-place cwd LANDS on the
|
|
138
|
+
* arbiter's `main` (today the in-place tick commits locally and the work is lost
|
|
139
|
+
* on an ephemeral CI runner). Mirrors the `--isolated` one-shot + `run` loop
|
|
140
|
+
* driver call sites byte-for-byte:
|
|
141
|
+
*
|
|
142
|
+
* - gates PURELY on `result.exitCode === 0 && TREELESS_RUNGS.has(result.rung)
|
|
143
|
+
* && context.arbiter !== undefined` — the SAME gate the existing drivers
|
|
144
|
+
* use, no cleverer guard (a build/task rung integrates through the
|
|
145
|
+
* `doDriver` band; a no-arbiter laptop checkout already sits on the real
|
|
146
|
+
* `main`);
|
|
147
|
+
* - reuses `pushTreelessResult` VERBATIM (its bounded re-fetch+rebase retry is
|
|
148
|
+
* LOAD-BEARING for a sequential `-n` batch that integrates a build/task rung
|
|
149
|
+
* mid-batch and then runs a later tree-less rung whose `HEAD:main` push is
|
|
150
|
+
* non-fast-forward by construction);
|
|
151
|
+
* - NEVER `--force`. A push that keeps failing (or a genuine rebase conflict)
|
|
152
|
+
* is REPORTED via the `note` sink and does NOT crash the tick — the work
|
|
153
|
+
* stays committed in the cwd for the next pass / a human.
|
|
154
|
+
*
|
|
155
|
+
* Used by BOTH in-place entry points: {@link runSelectedInSequence} (the
|
|
156
|
+
* multi-item `-n` / auto-pick / multi-arg path) AND the CLI single-named-item
|
|
157
|
+
* path (which calls {@link performAdvance} directly, bypassing the sequence
|
|
158
|
+
* runner — the easy-to-miss site).
|
|
159
|
+
*
|
|
160
|
+
* The promote-apply edge mirrors the existing drivers without a special case: an
|
|
161
|
+
* `apply` rung whose agentic verdict mints an artifact (`mint-task`/`mint-prd`)
|
|
162
|
+
* runs `promoteObservation`'s OWN arbiter CAS and commits NOTHING tree-less, so the
|
|
163
|
+
* ff-push here is a harmless no-op (a `HEAD` with nothing new) — it does NOT
|
|
164
|
+
* double-publish nor clobber the promote CAS.
|
|
165
|
+
*/
|
|
166
|
+
export async function runAdvanceTickWithTreelessPublish(options, run) {
|
|
167
|
+
const result = await run(options);
|
|
168
|
+
if (result.exitCode === 0 &&
|
|
169
|
+
result.rung !== undefined &&
|
|
170
|
+
TREELESS_RUNGS.has(result.rung) &&
|
|
171
|
+
options.arbiter !== undefined) {
|
|
172
|
+
await pushTreelessResult({
|
|
173
|
+
cwd: options.cwd,
|
|
174
|
+
arbiter: options.arbiter,
|
|
175
|
+
// Large liveness ceiling — see `pushTreelessResult`'s C2 docs (task
|
|
176
|
+
// `c2-rebase-until-real-on-durable-main-promotions`). A clean re-rebase
|
|
177
|
+
// no longer counts against a small budget; a genuine conflict (slug gone
|
|
178
|
+
// from its source folder on the new `main`) still stops definitively.
|
|
179
|
+
retries: 1000,
|
|
180
|
+
env: undefined,
|
|
181
|
+
note: options.note ?? (() => { }),
|
|
182
|
+
});
|
|
183
|
+
}
|
|
184
|
+
return result;
|
|
185
|
+
}
|
|
186
|
+
/**
|
|
187
|
+
* The advance TICK arg for a pool-selected item — the SELECTION->ARG dispatch
|
|
188
|
+
* (task `advance-autopick-lifecycle-pools`, F-NAMESPACE). The `namespace`
|
|
189
|
+
* discriminator the selection carried maps to the tick arg the tick then
|
|
190
|
+
* classifies into the right rung:
|
|
191
|
+
* - `observation` → `obs:<slug>` (the triage rung; bare would resolve to a
|
|
192
|
+
* task, so the `obs:` prefix is required);
|
|
193
|
+
* - `spec` → `spec:<slug>` (a taskable spec's task rung, OR a `needsAnswers` spec
|
|
194
|
+
* the tick surfaces/applies);
|
|
195
|
+
* - `task` → bare `<slug>` (an eligible task's build rung, OR a `needsAnswers`
|
|
196
|
+
* task the tick surfaces/applies).
|
|
197
|
+
* The tick re-classifies each arg, so a `needsAnswers`-blocked task/prd reaches
|
|
198
|
+
* surface/apply and an untriaged observation reaches triage — the classifier +
|
|
199
|
+
* rung bodies are unchanged; only this selection->arg mapping is new.
|
|
200
|
+
*/
|
|
201
|
+
function argForSelectedItem(item) {
|
|
202
|
+
if (item.namespace === 'observation') {
|
|
203
|
+
return `obs:${item.slug}`;
|
|
204
|
+
}
|
|
205
|
+
if (item.namespace === 'spec') {
|
|
206
|
+
return `spec:${item.slug}`;
|
|
207
|
+
}
|
|
208
|
+
return item.slug;
|
|
209
|
+
}
|
|
210
|
+
/** Strip the multi-only fields, leaving exactly the per-item {@link AdvanceContext}. */
|
|
211
|
+
function sharedAdvanceContext(options) {
|
|
212
|
+
const { config: _config, count: _count, run: _run, read: _read, lifecycleGates: _lifecycleGates, ...rest } = options;
|
|
213
|
+
void _config;
|
|
214
|
+
void _count;
|
|
215
|
+
void _run;
|
|
216
|
+
void _read;
|
|
217
|
+
void _lifecycleGates;
|
|
218
|
+
return rest;
|
|
219
|
+
}
|
|
220
|
+
/**
|
|
221
|
+
* Is this aggregate result a CALM-AT-REST (US #31 convergence) one — every item
|
|
222
|
+
* that ran was a NO-OP (a pending sidecar idling) AND nothing failed? The
|
|
223
|
+
* convergence/drain tests use this to assert the loop IDLES when there are no
|
|
224
|
+
* answers (no thrash) and DRAINS monotonically as answers arrive. A pool of
|
|
225
|
+
* pending-sidecar items advances NOTHING (every tick a clean no-op); as the human
|
|
226
|
+
* answers, the answered items flip to `apply` and the no-op count shrinks.
|
|
227
|
+
*/
|
|
228
|
+
export function isCalmAtRest(result) {
|
|
229
|
+
return (result.exitCode === 0 && result.results.every((r) => r.outcome === 'no-op'));
|
|
230
|
+
}
|
|
231
|
+
//# sourceMappingURL=advance-drivers.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"advance-drivers.js","sourceRoot":"","sources":["../src/advance-drivers.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,156 @@
|
|
|
1
|
+
import { type AdvanceContext, type AdvanceResult } from './advance.js';
|
|
2
|
+
import { type LedgerReadStrategy } from './ledger-read.js';
|
|
3
|
+
import type { LifecyclePoolGates } from './lifecycle-pools.js';
|
|
4
|
+
import type { Config } from './config.js';
|
|
5
|
+
import type { AdvanceTickRunner, AdvanceMultiResult } from './advance-drivers.js';
|
|
6
|
+
/**
|
|
7
|
+
* The **ISOLATED advance-tick RUNNER** + its sequential drivers (prd
|
|
8
|
+
* `advance-loop`, task `advance-isolated-one-shot`, US #25/26) — the "isolated
|
|
9
|
+
* one-shot" cell `advance` was missing. It gives `advance` the SAME isolation
|
|
10
|
+
* ergonomic `do --isolated` has: run the advance TICK ({@link performAdvance}) in
|
|
11
|
+
* an ISOLATED worktree off THIS repo's arbiter (resolved from cwd), then integrate
|
|
12
|
+
* + reap — instead of taking over the current checkout in-place.
|
|
13
|
+
*
|
|
14
|
+
* **HONEST SCOPE — what is REUSED vs what is NEW here.** The isolation SUBSTRATE is
|
|
15
|
+
* reused verbatim; the per-item EXECUTION is genuinely new:
|
|
16
|
+
*
|
|
17
|
+
* - REUSED: `resolveArbiterUrlFromCheckout` (`do.ts`, the CLI resolves the
|
|
18
|
+
* arbiter URL from cwd and threads it in here); the hub-mirror + isolation
|
|
19
|
+
* seam (`ensureMirror` + {@link jobWorktreeDoDriver}, which materialises its
|
|
20
|
+
* own job worktree off the arbiter for the build/task rungs + reaps it); and
|
|
21
|
+
* the SCAN→SELECT→REFETCH SKELETON of `performDoRemoteAuto` (`do-remote-auto.ts`).
|
|
22
|
+
* - NEW: the **isolated advance-tick runner** ({@link performAdvanceIsolated}) —
|
|
23
|
+
* the per-item unit that runs `performAdvance` (classify → `advancing` lock →
|
|
24
|
+
* surface/apply/triage/build-orchestrate) inside a working clone off the
|
|
25
|
+
* cwd-resolved arbiter, then reaps it. `do --isolated`'s per-item runner is
|
|
26
|
+
* `performDoRemote` (the DO BUILD/TASK pipeline), which does NOT run the
|
|
27
|
+
* advance tick — so it is NOT reusable as the per-item step; only the loop
|
|
28
|
+
* SKELETON is. This module builds the advance analogue + its driver wiring; it
|
|
29
|
+
* introduces NO new isolation MECHANISM (US #26 stays true).
|
|
30
|
+
*
|
|
31
|
+
* **Why an isolated cwd composes with all five rungs (only the runner is new).**
|
|
32
|
+
* The advance tick threads a `cwd` + `arbiter` + a build/task `doDriver`:
|
|
33
|
+
*
|
|
34
|
+
* - the **build-task / task-spec** rungs ORCHESTRATE `do`/`do spec:` via the
|
|
35
|
+
* `doDriver` seam — we inject {@link jobWorktreeDoDriver} (off the cwd-resolved
|
|
36
|
+
* arbiter), so they build/task ISOLATED in their OWN job worktree (the SAME
|
|
37
|
+
* isolation `do --isolated` gives the build tick) instead of in `process.cwd()`;
|
|
38
|
+
* - the **surface / apply / triage** rungs do tree-less, identity-keyed,
|
|
39
|
+
* ARBITER-resolved CAS writes (the sidecar + `needsAnswers`, the `advancing`
|
|
40
|
+
* borrow, observation→promote new-item creation) — they target the arbiter
|
|
41
|
+
* regardless of which checkout the tick runs in, so they compose with an
|
|
42
|
+
* isolated cwd unchanged. The isolated cwd is a working CLONE of the arbiter
|
|
43
|
+
* (origin = the arbiter), so those rungs commit/CAS against the arbiter exactly
|
|
44
|
+
* as the in-place tick does in the human's participating checkout.
|
|
45
|
+
*
|
|
46
|
+
* That composition is WHY only the per-item runner is new — the rungs need no
|
|
47
|
+
* change, just an isolated cwd to run in.
|
|
48
|
+
*/
|
|
49
|
+
/** The per-item context an isolated advance tick consumes (everything BUT `arg`). */
|
|
50
|
+
export interface IsolatedAdvanceContext extends Omit<AdvanceContext, 'cwd'> {
|
|
51
|
+
/**
|
|
52
|
+
* The arbiter URL the isolated worktree is off — resolved from the CWD's
|
|
53
|
+
* arbiter remote by the CLI (`resolveArbiterUrlFromCheckout`), exactly as
|
|
54
|
+
* `do --isolated` resolves its `remote`. `--remote <url>` supplies a foreign
|
|
55
|
+
* arbiter URL here instead (mirroring `do`: `--remote` wins over `--isolated`).
|
|
56
|
+
*/
|
|
57
|
+
remote: string;
|
|
58
|
+
/**
|
|
59
|
+
* The agents' execution area (config `workspacesDir`) — where the hub mirror +
|
|
60
|
+
* the per-item working clone + the build/task job worktrees live. NEVER the
|
|
61
|
+
* human area.
|
|
62
|
+
*/
|
|
63
|
+
workspacesDir: string;
|
|
64
|
+
}
|
|
65
|
+
/** Options for {@link performAdvanceIsolated} — the per-item isolated tick. */
|
|
66
|
+
export interface PerformAdvanceIsolatedOptions extends IsolatedAdvanceContext {
|
|
67
|
+
/** The raw advance arg: bare (= task), `prd:<slug>`, or `obs:<slug>`. */
|
|
68
|
+
arg: string;
|
|
69
|
+
/** The read seam (slug resolution / pool); defaults to {@link ledgerRead}. */
|
|
70
|
+
read?: LedgerReadStrategy;
|
|
71
|
+
/** Environment for child git/agent processes. */
|
|
72
|
+
env?: NodeJS.ProcessEnv;
|
|
73
|
+
/**
|
|
74
|
+
* Override the per-item tick runner (tests inject a stub to assert the cwd is
|
|
75
|
+
* the isolated clone, never the checkout). Defaults to {@link performAdvance}.
|
|
76
|
+
*/
|
|
77
|
+
run?: AdvanceTickRunner;
|
|
78
|
+
}
|
|
79
|
+
/**
|
|
80
|
+
* Run ONE advance tick ISOLATED off the resolved arbiter — the per-item runner.
|
|
81
|
+
*
|
|
82
|
+
* It materialises a per-item working CLONE of the arbiter under the agents' area
|
|
83
|
+
* (via the shared hub mirror — `ensureMirror` once + a cheap local clone of the
|
|
84
|
+
* bare mirror, refetched so its `main` is current), points the advance tick's cwd
|
|
85
|
+
* at it, threads a {@link jobWorktreeDoDriver} so the build/task rungs isolate in
|
|
86
|
+
* their OWN worktree off the SAME arbiter, runs the tick, then REAPS the clone.
|
|
87
|
+
* The current checkout is NEVER touched (the isolation point), and a failed tick
|
|
88
|
+
* reaps its clone like a failed `do --isolated`.
|
|
89
|
+
*/
|
|
90
|
+
export declare function performAdvanceIsolated(options: PerformAdvanceIsolatedOptions): Promise<AdvanceResult>;
|
|
91
|
+
/** Options shared with every per-item isolated tick run, threaded verbatim. */
|
|
92
|
+
type SharedIsolatedContext = IsolatedAdvanceContext;
|
|
93
|
+
export interface PerformAdvanceIsolatedMultiOptions extends SharedIsolatedContext {
|
|
94
|
+
/**
|
|
95
|
+
* The resolved (remote) repo config — provides `autoBuild`/`autoTask` (the
|
|
96
|
+
* mirror scan applies them at the SELECTION layer) + `selectionOrder` (the
|
|
97
|
+
* cross-pool order), exactly as the in-place one-shot driver applies them.
|
|
98
|
+
*/
|
|
99
|
+
config: Config;
|
|
100
|
+
/**
|
|
101
|
+
* `advance --isolated -n <x>`: how many eligible items to advance, IN SEQUENCE.
|
|
102
|
+
* Auto-pick (no arg, no count) ⇒ 1. SEQUENTIAL — never a parallelism knob
|
|
103
|
+
* (US #25; parallelism is `run` / the CI matrix).
|
|
104
|
+
*/
|
|
105
|
+
count?: number;
|
|
106
|
+
/** The read seam (mirror pool); defaults to {@link ledgerRead}. */
|
|
107
|
+
read?: LedgerReadStrategy;
|
|
108
|
+
/** Environment for child git/agent processes. */
|
|
109
|
+
env?: NodeJS.ProcessEnv;
|
|
110
|
+
/** Override the per-item isolated tick runner (tests). Defaults to {@link performAdvanceIsolated}. */
|
|
111
|
+
runIsolated?: (options: PerformAdvanceIsolatedOptions) => Promise<AdvanceResult>;
|
|
112
|
+
/** Override the per-tick runner forwarded to {@link performAdvanceIsolated} (tests). */
|
|
113
|
+
run?: AdvanceTickRunner;
|
|
114
|
+
/** Sink for a non-fatal mirror-config-read warning, forwarded to the scan. */
|
|
115
|
+
warn?: (message: string) => void;
|
|
116
|
+
/**
|
|
117
|
+
* The LIFECYCLE-POOL create-gates forwarded to {@link scanMirrorPool} (triage /
|
|
118
|
+
* surface sub-pools), the SAME gates the in-place auto-pick + the loop driver
|
|
119
|
+
* apply. Omitted ⇒ both off (the apply sub-pool is always-on).
|
|
120
|
+
*/
|
|
121
|
+
lifecycleGates?: LifecyclePoolGates;
|
|
122
|
+
}
|
|
123
|
+
/**
|
|
124
|
+
* Run the `advance --isolated` AUTO-PICK / `-n <x>` form — the advance analogue of
|
|
125
|
+
* `performDoRemoteAuto`, SHARING its scan/select/refetch SKELETON but using the
|
|
126
|
+
* ISOLATED advance-tick runner as the per-item unit:
|
|
127
|
+
*
|
|
128
|
+
* 1. `ensureMirror` ONCE up front (the per-item runner re-`ensureMirror`s the
|
|
129
|
+
* SAME mirror idempotently — a fetch, never a re-clone);
|
|
130
|
+
* 2. {@link scanMirrorPool} over the bare hub mirror's committed `main` (the
|
|
131
|
+
* isolated counterpart of the in-place pool scan, gated per-action);
|
|
132
|
+
* 3. {@link selectPrioritised} (tasks-first / prds-first per `selectionOrder`, bounded by `count`);
|
|
133
|
+
* 4. a SEQUENTIAL loop over the FROZEN selected set (selected ONCE in 2–3, NEVER
|
|
134
|
+
* re-scanned) where each per-item {@link performAdvanceIsolated} re-fetches the
|
|
135
|
+
* SAME mirror, so item N's clone branches off a `main` that contains item N-1's
|
|
136
|
+
* result (FRESHNESS, not re-selection — the SNAPSHOT-ONCE parity with
|
|
137
|
+
* `do --isolated -n`).
|
|
138
|
+
*
|
|
139
|
+
* **`-n` is ALWAYS SEQUENTIAL (US #25)** — selecting N items from the mirror and
|
|
140
|
+
* running them one at a time is a dumb "run the tick N times" loop; parallelism is
|
|
141
|
+
* `run`'s concurrent loop or the CI matrix, NEVER `-n`. **SNAPSHOT-ONCE, NOT
|
|
142
|
+
* dependency-aware:** a `blockedBy` dependent ineligible at scan time is NOT
|
|
143
|
+
* selected and is NOT drained in the same run — IDENTICAL to `do --isolated -n`
|
|
144
|
+
* (dependency-aware scheduling is a SEPARATE cross-verb enhancement,
|
|
145
|
+
* `work/notes/observations/do-autopick-no-dependency-aware-scheduling.md`).
|
|
146
|
+
*/
|
|
147
|
+
export declare function performAdvanceIsolatedAuto(options: PerformAdvanceIsolatedMultiOptions): Promise<AdvanceMultiResult>;
|
|
148
|
+
/**
|
|
149
|
+
* Run the EXPLICIT multi-arg form (`advance --isolated <a> <b> …`): the NAMED items
|
|
150
|
+
* in the GIVEN order (no pool/priority — the operator chose them), each through the
|
|
151
|
+
* ISOLATED advance-tick runner, SEQUENTIALLY. No mirror scan is needed (the args
|
|
152
|
+
* are explicit); the per-item tick resolves each bare/`prd:`/`obs:` arg itself.
|
|
153
|
+
*/
|
|
154
|
+
export declare function performAdvanceIsolatedArgs(args: string[], options: PerformAdvanceIsolatedMultiOptions): Promise<AdvanceMultiResult>;
|
|
155
|
+
export {};
|
|
156
|
+
//# sourceMappingURL=advance-isolated.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"advance-isolated.d.ts","sourceRoot":"","sources":["../src/advance-isolated.ts"],"names":[],"mappings":"AASA,OAAO,EAEN,KAAK,cAAc,EACnB,KAAK,aAAa,EAElB,MAAM,cAAc,CAAC;AAEtB,OAAO,EAAa,KAAK,kBAAkB,EAAC,MAAM,kBAAkB,CAAC;AAErE,OAAO,KAAK,EAAC,kBAAkB,EAAC,MAAM,sBAAsB,CAAC;AAC7D,OAAO,KAAK,EAAC,MAAM,EAAC,MAAM,aAAa,CAAC;AACxC,OAAO,KAAK,EAAC,iBAAiB,EAAE,kBAAkB,EAAC,MAAM,sBAAsB,CAAC;AAEhF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA0CG;AAEH,qFAAqF;AACrF,MAAM,WAAW,sBAAuB,SAAQ,IAAI,CAAC,cAAc,EAAE,KAAK,CAAC;IAC1E;;;;;OAKG;IACH,MAAM,EAAE,MAAM,CAAC;IACf;;;;OAIG;IACH,aAAa,EAAE,MAAM,CAAC;CACtB;AAED,+EAA+E;AAC/E,MAAM,WAAW,6BAA8B,SAAQ,sBAAsB;IAC5E,yEAAyE;IACzE,GAAG,EAAE,MAAM,CAAC;IACZ,8EAA8E;IAC9E,IAAI,CAAC,EAAE,kBAAkB,CAAC;IAC1B,iDAAiD;IACjD,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,CAAC;IACxB;;;OAGG;IACH,GAAG,CAAC,EAAE,iBAAiB,CAAC;CACxB;AAID;;;;;;;;;;GAUG;AACH,wBAAsB,sBAAsB,CAC3C,OAAO,EAAE,6BAA6B,GACpC,OAAO,CAAC,aAAa,CAAC,CAuGxB;AA0BD,+EAA+E;AAC/E,KAAK,qBAAqB,GAAG,sBAAsB,CAAC;AAEpD,MAAM,WAAW,kCAAmC,SAAQ,qBAAqB;IAChF;;;;OAIG;IACH,MAAM,EAAE,MAAM,CAAC;IACf;;;;OAIG;IACH,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,mEAAmE;IACnE,IAAI,CAAC,EAAE,kBAAkB,CAAC;IAC1B,iDAAiD;IACjD,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,CAAC;IACxB,sGAAsG;IACtG,WAAW,CAAC,EAAE,CACb,OAAO,EAAE,6BAA6B,KAClC,OAAO,CAAC,aAAa,CAAC,CAAC;IAC5B,wFAAwF;IACxF,GAAG,CAAC,EAAE,iBAAiB,CAAC;IACxB,8EAA8E;IAC9E,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;IACjC;;;;OAIG;IACH,cAAc,CAAC,EAAE,kBAAkB,CAAC;CACpC;AAED;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,wBAAsB,0BAA0B,CAC/C,OAAO,EAAE,kCAAkC,GACzC,OAAO,CAAC,kBAAkB,CAAC,CAiE7B;AAED;;;;;GAKG;AACH,wBAAsB,0BAA0B,CAC/C,IAAI,EAAE,MAAM,EAAE,EACd,OAAO,EAAE,kCAAkC,GACzC,OAAO,CAAC,kBAAkB,CAAC,CAQ7B"}
|
|
@@ -0,0 +1,256 @@
|
|
|
1
|
+
import { mkdirSync, rmSync } from 'node:fs';
|
|
2
|
+
import { dirname, join } from 'node:path';
|
|
3
|
+
import { git } from './git.js';
|
|
4
|
+
import { ensureMirror, encodeRepoKey } from './repo-mirror.js';
|
|
5
|
+
import { jobWorktreeDoDriver } from './do.js';
|
|
6
|
+
import { pushTreelessResult, TREELESS_RUNGS, } from './advance-treeless-publish.js';
|
|
7
|
+
import { performAdvance, } from './advance.js';
|
|
8
|
+
import { scanMirrorPool } from './mirror-pool-scan.js';
|
|
9
|
+
import { ledgerRead } from './ledger-read.js';
|
|
10
|
+
import { selectPrioritised } from './select-priority.js';
|
|
11
|
+
const DEFAULT_ARBITER = 'origin';
|
|
12
|
+
/**
|
|
13
|
+
* Run ONE advance tick ISOLATED off the resolved arbiter — the per-item runner.
|
|
14
|
+
*
|
|
15
|
+
* It materialises a per-item working CLONE of the arbiter under the agents' area
|
|
16
|
+
* (via the shared hub mirror — `ensureMirror` once + a cheap local clone of the
|
|
17
|
+
* bare mirror, refetched so its `main` is current), points the advance tick's cwd
|
|
18
|
+
* at it, threads a {@link jobWorktreeDoDriver} so the build/task rungs isolate in
|
|
19
|
+
* their OWN worktree off the SAME arbiter, runs the tick, then REAPS the clone.
|
|
20
|
+
* The current checkout is NEVER touched (the isolation point), and a failed tick
|
|
21
|
+
* reaps its clone like a failed `do --isolated`.
|
|
22
|
+
*/
|
|
23
|
+
export async function performAdvanceIsolated(options) {
|
|
24
|
+
const note = options.note ?? (() => { });
|
|
25
|
+
const env = options.env;
|
|
26
|
+
const run = options.run ?? performAdvance;
|
|
27
|
+
const arbiterRemoteName = options.arbiter ?? DEFAULT_ARBITER;
|
|
28
|
+
// 1. Ensure (create/fetch) the hub mirror for the resolved arbiter URL ONCE — the
|
|
29
|
+
// SAME isolation substrate `do --isolated` / `run` use. The per-item clone is
|
|
30
|
+
// cut from this freshly-fetched bare mirror (a cheap LOCAL clone, never a
|
|
31
|
+
// re-clone of the arbiter), so the tick reads the latest committed `main`.
|
|
32
|
+
let mirror;
|
|
33
|
+
try {
|
|
34
|
+
mirror = ensureMirror({
|
|
35
|
+
url: options.remote,
|
|
36
|
+
workspacesDir: options.workspacesDir,
|
|
37
|
+
env,
|
|
38
|
+
});
|
|
39
|
+
}
|
|
40
|
+
catch (err) {
|
|
41
|
+
const message = err instanceof Error ? err.message : String(err);
|
|
42
|
+
note(message);
|
|
43
|
+
return { exitCode: 1, outcome: 'usage-error', message };
|
|
44
|
+
}
|
|
45
|
+
// 2. A per-item working CLONE of the mirror (the tree-less surface/apply/triage
|
|
46
|
+
// rungs' ledger-write cwd — a bare mirror cannot `git mv`/`git commit`). Keyed
|
|
47
|
+
// per ARG so two sequential items get DISTINCT clones (the SAME per-job keying
|
|
48
|
+
// the remote claim clone uses). Its arbiter remote is wired to the REAL
|
|
49
|
+
// arbiter URL so the `advancing` borrow + the observation→promote new-item CAS
|
|
50
|
+
// target the arbiter, exactly as the in-place tick does from the human checkout.
|
|
51
|
+
const argKey = options.arg.replace(/[^a-zA-Z0-9._-]/g, '_');
|
|
52
|
+
const cloneDir = join(options.workspacesDir, 'advance-cwd', `${encodeRepoKey(mirror.url).split('/').join('__')}__${argKey}`);
|
|
53
|
+
rmSync(cloneDir, { recursive: true, force: true });
|
|
54
|
+
mkdirSync(dirname(cloneDir), { recursive: true });
|
|
55
|
+
try {
|
|
56
|
+
git(['clone', '--quiet', mirror.path, cloneDir], dirname(cloneDir), { env });
|
|
57
|
+
// Re-point the clone's arbiter remote at the REAL arbiter URL (a `git clone` of
|
|
58
|
+
// the bare MIRROR leaves `origin` pointing at the mirror). The tree-less rungs'
|
|
59
|
+
// ARBITER-resolved CAS writes (`advancing` borrow, observation->promote) + the
|
|
60
|
+
// ff-push of the result then target the arbiter — so they land there REGARDLESS
|
|
61
|
+
// of which checkout the tick ran in (the property that lets an isolated cwd
|
|
62
|
+
// compose with the surface/apply/triage rungs unchanged). When the configured
|
|
63
|
+
// arbiter remote is NOT `origin`, ADD it alongside the clone's `origin`.
|
|
64
|
+
if (arbiterRemoteName === 'origin') {
|
|
65
|
+
git(['remote', 'set-url', 'origin', mirror.url], cloneDir, { env });
|
|
66
|
+
}
|
|
67
|
+
else {
|
|
68
|
+
git(['remote', 'add', arbiterRemoteName, mirror.url], cloneDir, { env });
|
|
69
|
+
}
|
|
70
|
+
git(['fetch', '--quiet', arbiterRemoteName], cloneDir, { env });
|
|
71
|
+
// 3. Run the advance TICK against the isolated clone. The build/task rungs
|
|
72
|
+
// ORCHESTRATE `do` through the INJECTED job-worktree driver (their OWN
|
|
73
|
+
// worktree off the arbiter — the SAME isolation `run`'s build tick gives),
|
|
74
|
+
// NOT in `process.cwd()`. The surface/apply/triage rungs run tree-less in
|
|
75
|
+
// the clone, targeting the arbiter remote wired above.
|
|
76
|
+
const context = {
|
|
77
|
+
...stripIsolatedFields(options),
|
|
78
|
+
cwd: cloneDir,
|
|
79
|
+
arbiter: arbiterRemoteName,
|
|
80
|
+
doDriver: jobWorktreeDoDriver({
|
|
81
|
+
// Off the REAL arbiter URL (NOT the local mirror path) so `performDoRemote`
|
|
82
|
+
// reuses the SAME hub mirror `ensureMirror` already created above (keyed on
|
|
83
|
+
// `mirror.url` = the resolved arbiter URL) + integrates back to the arbiter.
|
|
84
|
+
remote: mirror.url,
|
|
85
|
+
workspacesDir: options.workspacesDir,
|
|
86
|
+
}),
|
|
87
|
+
};
|
|
88
|
+
const result = await run({
|
|
89
|
+
...context,
|
|
90
|
+
arg: options.arg,
|
|
91
|
+
read: options.read,
|
|
92
|
+
});
|
|
93
|
+
// A TREE-LESS rung (surface/apply/triage) committed the sidecar / marker
|
|
94
|
+
// LOCALLY in the clone; ff-push it to the arbiter so the result LANDS (a
|
|
95
|
+
// one-shot from a busy checkout would otherwise vanish with the reaped clone).
|
|
96
|
+
// The build/task rungs already pushed via the job-worktree `doDriver`.
|
|
97
|
+
if (result.exitCode === 0 &&
|
|
98
|
+
result.rung !== undefined &&
|
|
99
|
+
TREELESS_RUNGS.has(result.rung)) {
|
|
100
|
+
await pushTreelessResult({
|
|
101
|
+
cwd: cloneDir,
|
|
102
|
+
arbiter: arbiterRemoteName,
|
|
103
|
+
// Large liveness ceiling (C2, task `c2-rebase-until-real-on-durable-main-
|
|
104
|
+
// promotions`): a clean re-rebase no longer counts against a small budget;
|
|
105
|
+
// a genuine same-path conflict still stops definitively.
|
|
106
|
+
retries: 1000,
|
|
107
|
+
env,
|
|
108
|
+
note,
|
|
109
|
+
});
|
|
110
|
+
}
|
|
111
|
+
return result;
|
|
112
|
+
}
|
|
113
|
+
finally {
|
|
114
|
+
// 4. REAP the per-item clone (a disposable working tree, like a failed
|
|
115
|
+
// `do --isolated`'s worktree). The durable artifact is the arbiter; the
|
|
116
|
+
// clone is never the recovery surface.
|
|
117
|
+
rmSync(cloneDir, { recursive: true, force: true });
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
/** Strip the isolated-only fields, leaving exactly the per-item {@link AdvanceContext} base. */
|
|
121
|
+
function stripIsolatedFields(options) {
|
|
122
|
+
const { remote: _remote, workspacesDir: _workspacesDir, arg: _arg, read: _read, env: _env, run: _run, arbiter: _arbiter, ...rest } = options;
|
|
123
|
+
void _remote;
|
|
124
|
+
void _workspacesDir;
|
|
125
|
+
void _arg;
|
|
126
|
+
void _read;
|
|
127
|
+
void _env;
|
|
128
|
+
void _run;
|
|
129
|
+
void _arbiter;
|
|
130
|
+
return rest;
|
|
131
|
+
}
|
|
132
|
+
/**
|
|
133
|
+
* Run the `advance --isolated` AUTO-PICK / `-n <x>` form — the advance analogue of
|
|
134
|
+
* `performDoRemoteAuto`, SHARING its scan/select/refetch SKELETON but using the
|
|
135
|
+
* ISOLATED advance-tick runner as the per-item unit:
|
|
136
|
+
*
|
|
137
|
+
* 1. `ensureMirror` ONCE up front (the per-item runner re-`ensureMirror`s the
|
|
138
|
+
* SAME mirror idempotently — a fetch, never a re-clone);
|
|
139
|
+
* 2. {@link scanMirrorPool} over the bare hub mirror's committed `main` (the
|
|
140
|
+
* isolated counterpart of the in-place pool scan, gated per-action);
|
|
141
|
+
* 3. {@link selectPrioritised} (tasks-first / prds-first per `selectionOrder`, bounded by `count`);
|
|
142
|
+
* 4. a SEQUENTIAL loop over the FROZEN selected set (selected ONCE in 2–3, NEVER
|
|
143
|
+
* re-scanned) where each per-item {@link performAdvanceIsolated} re-fetches the
|
|
144
|
+
* SAME mirror, so item N's clone branches off a `main` that contains item N-1's
|
|
145
|
+
* result (FRESHNESS, not re-selection — the SNAPSHOT-ONCE parity with
|
|
146
|
+
* `do --isolated -n`).
|
|
147
|
+
*
|
|
148
|
+
* **`-n` is ALWAYS SEQUENTIAL (US #25)** — selecting N items from the mirror and
|
|
149
|
+
* running them one at a time is a dumb "run the tick N times" loop; parallelism is
|
|
150
|
+
* `run`'s concurrent loop or the CI matrix, NEVER `-n`. **SNAPSHOT-ONCE, NOT
|
|
151
|
+
* dependency-aware:** a `blockedBy` dependent ineligible at scan time is NOT
|
|
152
|
+
* selected and is NOT drained in the same run — IDENTICAL to `do --isolated -n`
|
|
153
|
+
* (dependency-aware scheduling is a SEPARATE cross-verb enhancement,
|
|
154
|
+
* `work/notes/observations/do-autopick-no-dependency-aware-scheduling.md`).
|
|
155
|
+
*/
|
|
156
|
+
export async function performAdvanceIsolatedAuto(options) {
|
|
157
|
+
const runIsolated = options.runIsolated ?? performAdvanceIsolated;
|
|
158
|
+
const read = options.read ?? ledgerRead;
|
|
159
|
+
const note = options.note ?? (() => { });
|
|
160
|
+
const count = options.count ?? 1;
|
|
161
|
+
// Ensure the bare hub mirror ONCE up front so the pool scan reads the freshest
|
|
162
|
+
// committed `main`. Each per-item `performAdvanceIsolated` re-ensures the SAME
|
|
163
|
+
// mirror idempotently (a fetch, never a re-clone).
|
|
164
|
+
let mirror;
|
|
165
|
+
try {
|
|
166
|
+
mirror = ensureMirror({
|
|
167
|
+
url: options.remote,
|
|
168
|
+
workspacesDir: options.workspacesDir,
|
|
169
|
+
env: options.env,
|
|
170
|
+
});
|
|
171
|
+
}
|
|
172
|
+
catch (err) {
|
|
173
|
+
const message = err instanceof Error ? err.message : String(err);
|
|
174
|
+
note(message);
|
|
175
|
+
return { results: [], exitCode: 1, message };
|
|
176
|
+
}
|
|
177
|
+
// Scan the mirror's committed `main` for the SAME pools the in-place scan
|
|
178
|
+
// enumerates (eligible tasks gated on `autoBuild`, taskable prds gated on
|
|
179
|
+
// `autoTask`, + the lifecycle sub-pools), through the SHARED mirror-pool scan.
|
|
180
|
+
const scan = await scanMirrorPool({
|
|
181
|
+
mirrorPath: mirror.path,
|
|
182
|
+
config: options.config,
|
|
183
|
+
read,
|
|
184
|
+
warn: options.warn,
|
|
185
|
+
env: options.env,
|
|
186
|
+
lifecycleGates: options.lifecycleGates,
|
|
187
|
+
});
|
|
188
|
+
// Order across the pools per the resolved `selectionOrder` + bound by count —
|
|
189
|
+
// the SAME shared, pure `selectPrioritised` the in-place + `run` drivers use.
|
|
190
|
+
// Selected ONCE here; the loop iterates the FROZEN set (snapshot-once).
|
|
191
|
+
const selected = selectPrioritised({
|
|
192
|
+
report: scan.report,
|
|
193
|
+
caps: {
|
|
194
|
+
maxParallel: Number.MAX_SAFE_INTEGER,
|
|
195
|
+
perRepoMax: Number.MAX_SAFE_INTEGER,
|
|
196
|
+
},
|
|
197
|
+
specs: scan.specs,
|
|
198
|
+
selectionOrder: options.config.selectionOrder,
|
|
199
|
+
lifecycle: scan.lifecycle,
|
|
200
|
+
count,
|
|
201
|
+
});
|
|
202
|
+
if (selected.length === 0) {
|
|
203
|
+
const message = 'Nothing eligible to advance on the remote (no eligible tasks and no ' +
|
|
204
|
+
'taskable prds under the per-action gates).';
|
|
205
|
+
note(message);
|
|
206
|
+
return { results: [], exitCode: 0, message };
|
|
207
|
+
}
|
|
208
|
+
const results = [];
|
|
209
|
+
for (const item of selected) {
|
|
210
|
+
const result = await runIsolated(perItemOptions(options, argForSelected(item)));
|
|
211
|
+
results.push(result);
|
|
212
|
+
}
|
|
213
|
+
return aggregate(results);
|
|
214
|
+
}
|
|
215
|
+
/**
|
|
216
|
+
* Run the EXPLICIT multi-arg form (`advance --isolated <a> <b> …`): the NAMED items
|
|
217
|
+
* in the GIVEN order (no pool/priority — the operator chose them), each through the
|
|
218
|
+
* ISOLATED advance-tick runner, SEQUENTIALLY. No mirror scan is needed (the args
|
|
219
|
+
* are explicit); the per-item tick resolves each bare/`prd:`/`obs:` arg itself.
|
|
220
|
+
*/
|
|
221
|
+
export async function performAdvanceIsolatedArgs(args, options) {
|
|
222
|
+
const runIsolated = options.runIsolated ?? performAdvanceIsolated;
|
|
223
|
+
const results = [];
|
|
224
|
+
for (const arg of args) {
|
|
225
|
+
const result = await runIsolated(perItemOptions(options, arg));
|
|
226
|
+
results.push(result);
|
|
227
|
+
}
|
|
228
|
+
return aggregate(results);
|
|
229
|
+
}
|
|
230
|
+
/** The advance arg for a pool-selected item (the SELECTION->ARG dispatch). */
|
|
231
|
+
function argForSelected(item) {
|
|
232
|
+
if (item.namespace === 'observation') {
|
|
233
|
+
return `obs:${item.slug}`;
|
|
234
|
+
}
|
|
235
|
+
return item.namespace === 'spec' ? `spec:${item.slug}` : item.slug;
|
|
236
|
+
}
|
|
237
|
+
/** Build the per-item {@link PerformAdvanceIsolatedOptions} for one arg. */
|
|
238
|
+
function perItemOptions(options, arg) {
|
|
239
|
+
const { config: _config, count: _count, read, env, runIsolated: _runIsolated, run, warn: _warn, lifecycleGates: _lifecycleGates, ...rest } = options;
|
|
240
|
+
void _config;
|
|
241
|
+
void _count;
|
|
242
|
+
void _runIsolated;
|
|
243
|
+
void _warn;
|
|
244
|
+
void _lifecycleGates;
|
|
245
|
+
return { ...rest, arg, read, env, run };
|
|
246
|
+
}
|
|
247
|
+
/** Aggregate per-item results into the multi-item contract (mirrors `do`'s). */
|
|
248
|
+
function aggregate(results) {
|
|
249
|
+
const firstFailure = results.find((r) => r.exitCode !== 0);
|
|
250
|
+
const exitCode = firstFailure ? firstFailure.exitCode : 0;
|
|
251
|
+
const ok = results.filter((r) => r.exitCode === 0).length;
|
|
252
|
+
const message = `advanced ${results.length} item${results.length === 1 ? '' : 's'} ` +
|
|
253
|
+
`(${ok} ok, ${results.length - ok} not).`;
|
|
254
|
+
return { results, exitCode, message };
|
|
255
|
+
}
|
|
256
|
+
//# sourceMappingURL=advance-isolated.js.map
|