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,73 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The CI-integration deliverable for the `advance` loop (prd `advance-loop`,
|
|
3
|
+
* task `advance-install-ci`, US #27/28): the advance-loop CAPABILITY as a
|
|
4
|
+
* DOCUMENTED workflow TEMPLATE (not a CLI subcommand; see the task's `##
|
|
5
|
+
* Decisions`). The template at `docs/ci/advance-loop.yml.template` wires "on cron
|
|
6
|
+
* / on-answer-committed, run the RIGHT shape" and only INVOKES the existing
|
|
7
|
+
* `advance` driver; it is NOT entangled with the tick.
|
|
8
|
+
*
|
|
9
|
+
* The unified, per-capability `install-ci` CLI (auth/secrets wizard + GitHub
|
|
10
|
+
* adapter) is owned by the separate `runner-in-ci` prd
|
|
11
|
+
* (`work/prds/tasked/runner-in-ci.md`); when built it EMITS this template as its
|
|
12
|
+
* advance-loop capability. This module's job is unchanged either way: locate +
|
|
13
|
+
* STRUCTURALLY VALIDATE the template, so its shape is a contract the CLI can
|
|
14
|
+
* safely emit (see `docs/ci/README.md` "Relationship to the `install-ci` CLI").
|
|
15
|
+
*
|
|
16
|
+
* This module locates + reads that template and STRUCTURALLY VALIDATES it. The
|
|
17
|
+
* package depends on NO YAML library (see `frontmatter.ts` for the same
|
|
18
|
+
* constraint), so {@link validateAdvanceCiTemplate} checks the small set of
|
|
19
|
+
* invariants the task's acceptance criteria require directly:
|
|
20
|
+
*
|
|
21
|
+
* - triggers on a CRON schedule AND on-answer-committed (a push touching
|
|
22
|
+
* `work/questions/**`);
|
|
23
|
+
* - `propose` mode → a MATRIX of independent jobs enumerated via the
|
|
24
|
+
* mirror-side pool scan (`dorfl scan --json`), one `advance … --propose`
|
|
25
|
+
* per item (the `--propose` flag TIES the integration mode to the matrix shape,
|
|
26
|
+
* so a leg can never merge to main);
|
|
27
|
+
* - `merge` mode → a MATRIX of independent jobs (one per item), each leg
|
|
28
|
+
* running `dorfl advance <item> --merge` so build/gate/review run
|
|
29
|
+
* concurrently across siblings; the LAND TAIL is serialised by the engine's
|
|
30
|
+
* `mergeRetries` CAS-retry loop (the git-alone floor), NOT by this
|
|
31
|
+
* workflow's job shape — a host-specific `concurrency:` group would be
|
|
32
|
+
* load-bearing for safety, which the floor framing forbids;
|
|
33
|
+
* - the dispatch input is `integrationMode` (ONE word, ONE meaning): it drives
|
|
34
|
+
* BOTH the integration flag the legs pass AND the job shape, so they cannot
|
|
35
|
+
* desync;
|
|
36
|
+
* - it references the EXISTING `advance` driver only (no new execution model);
|
|
37
|
+
* - it is a `.template` (so it never self-triggers in THIS repo).
|
|
38
|
+
*
|
|
39
|
+
* The check is deliberately a set of presence/shape assertions over the raw text
|
|
40
|
+
* rather than a full YAML parse — it is the dependency-free counterpart of "the
|
|
41
|
+
* template parses + references the right driver invocations" the task asks for.
|
|
42
|
+
*/
|
|
43
|
+
/** A single structural problem found in the template. */
|
|
44
|
+
export interface AdvanceCiTemplateProblem {
|
|
45
|
+
/** A short, stable id for the violated invariant (for tests/assertions). */
|
|
46
|
+
id: string;
|
|
47
|
+
/** Human-readable description of what is missing or wrong. */
|
|
48
|
+
message: string;
|
|
49
|
+
}
|
|
50
|
+
/** The result of {@link validateAdvanceCiTemplate}. */
|
|
51
|
+
export interface AdvanceCiTemplateValidation {
|
|
52
|
+
/** True iff the template satisfies EVERY structural invariant. */
|
|
53
|
+
ok: boolean;
|
|
54
|
+
/** Each violated invariant (empty when `ok`). */
|
|
55
|
+
problems: AdvanceCiTemplateProblem[];
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* Locate the workflow template `docs/ci/advance-loop.yml.template`. It is a
|
|
59
|
+
* REPO doc (the maintainer copies it into a consumer's `.github/workflows/`), so
|
|
60
|
+
* it is resolved relative to this source file's monorepo position — the same
|
|
61
|
+
* dev-monorepo walk `resolveProtocolDoc`'s last candidates use. `override`
|
|
62
|
+
* short-circuits for tests / unusual layouts.
|
|
63
|
+
*/
|
|
64
|
+
export declare function resolveAdvanceCiTemplatePath(override?: string): string;
|
|
65
|
+
/** Read the raw template text. Throws (ENOENT) if it cannot be located. */
|
|
66
|
+
export declare function loadAdvanceCiTemplate(override?: string): string;
|
|
67
|
+
/**
|
|
68
|
+
* Structurally validate the advance-loop CI workflow template against the task's
|
|
69
|
+
* acceptance criteria. Dependency-free (no YAML lib): a set of presence/shape
|
|
70
|
+
* assertions over the raw text.
|
|
71
|
+
*/
|
|
72
|
+
export declare function validateAdvanceCiTemplate(text: string): AdvanceCiTemplateValidation;
|
|
73
|
+
//# sourceMappingURL=advance-ci-template.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"advance-ci-template.d.ts","sourceRoot":"","sources":["../src/advance-ci-template.ts"],"names":[],"mappings":"AAIA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAyCG;AAEH,yDAAyD;AACzD,MAAM,WAAW,wBAAwB;IACxC,4EAA4E;IAC5E,EAAE,EAAE,MAAM,CAAC;IACX,8DAA8D;IAC9D,OAAO,EAAE,MAAM,CAAC;CAChB;AAED,uDAAuD;AACvD,MAAM,WAAW,2BAA2B;IAC3C,kEAAkE;IAClE,EAAE,EAAE,OAAO,CAAC;IACZ,iDAAiD;IACjD,QAAQ,EAAE,wBAAwB,EAAE,CAAC;CACrC;AAED;;;;;;GAMG;AACH,wBAAgB,4BAA4B,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,MAAM,CA2BtE;AAED,2EAA2E;AAC3E,wBAAgB,qBAAqB,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,MAAM,CAE/D;AAED;;;;GAIG;AACH,wBAAgB,yBAAyB,CACxC,IAAI,EAAE,MAAM,GACV,2BAA2B,CA2F7B"}
|
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
import { existsSync, readFileSync } from 'node:fs';
|
|
2
|
+
import { dirname, resolve } from 'node:path';
|
|
3
|
+
import { fileURLToPath } from 'node:url';
|
|
4
|
+
/**
|
|
5
|
+
* Locate the workflow template `docs/ci/advance-loop.yml.template`. It is a
|
|
6
|
+
* REPO doc (the maintainer copies it into a consumer's `.github/workflows/`), so
|
|
7
|
+
* it is resolved relative to this source file's monorepo position — the same
|
|
8
|
+
* dev-monorepo walk `resolveProtocolDoc`'s last candidates use. `override`
|
|
9
|
+
* short-circuits for tests / unusual layouts.
|
|
10
|
+
*/
|
|
11
|
+
export function resolveAdvanceCiTemplatePath(override) {
|
|
12
|
+
if (override) {
|
|
13
|
+
return override;
|
|
14
|
+
}
|
|
15
|
+
const here = dirname(fileURLToPath(import.meta.url));
|
|
16
|
+
// here = .../packages/dorfl/{src,dist}; the doc lives at the monorepo
|
|
17
|
+
// root under docs/ci/. Walk up to the root from either src/ or dist/.
|
|
18
|
+
const candidates = [
|
|
19
|
+
resolve(here, '..', '..', '..', 'docs', 'ci', 'advance-loop.yml.template'),
|
|
20
|
+
resolve(here, '..', '..', '..', '..', 'docs', 'ci', 'advance-loop.yml.template'),
|
|
21
|
+
];
|
|
22
|
+
for (const candidate of candidates) {
|
|
23
|
+
if (existsSync(candidate)) {
|
|
24
|
+
return candidate;
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
// Fall back to the first candidate so the error names the expected path.
|
|
28
|
+
return candidates[0];
|
|
29
|
+
}
|
|
30
|
+
/** Read the raw template text. Throws (ENOENT) if it cannot be located. */
|
|
31
|
+
export function loadAdvanceCiTemplate(override) {
|
|
32
|
+
return readFileSync(resolveAdvanceCiTemplatePath(override), 'utf8');
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* Structurally validate the advance-loop CI workflow template against the task's
|
|
36
|
+
* acceptance criteria. Dependency-free (no YAML lib): a set of presence/shape
|
|
37
|
+
* assertions over the raw text.
|
|
38
|
+
*/
|
|
39
|
+
export function validateAdvanceCiTemplate(text) {
|
|
40
|
+
const problems = [];
|
|
41
|
+
const require = (id, present, message) => {
|
|
42
|
+
if (!present) {
|
|
43
|
+
problems.push({ id, message });
|
|
44
|
+
}
|
|
45
|
+
};
|
|
46
|
+
// --- Triggers: cron AND on-answer-committed ---------------------------------
|
|
47
|
+
require('trigger-cron', /\bschedule:\s*[\s\S]*?-\s*cron:/.test(text), 'must trigger on a cron schedule (`on.schedule[].cron`).');
|
|
48
|
+
require('trigger-on-answer-committed', /\bpush:\s*[\s\S]*?paths:[\s\S]*?work\/questions\//.test(text), 'must trigger on-answer-committed (a push touching `work/questions/**`).');
|
|
49
|
+
// --- propose ⇒ a MATRIX enumerated via the mirror-side pool scan -------------
|
|
50
|
+
require('propose-matrix', /strategy:\s*[\s\S]*?matrix:/.test(text), '`propose` mode must emit a MATRIX of jobs (`strategy.matrix`).');
|
|
51
|
+
require('propose-enumerates-via-scan', /dorfl scan --json/.test(text), 'the matrix items must be ENUMERATED via the mirror-side pool scan ' +
|
|
52
|
+
'(`dorfl scan --json`).');
|
|
53
|
+
// The `enumerate` `jq` must UNION taskable prds into the matrix
|
|
54
|
+
// (`ci-propose-matrix-must-enumerate-sliceable-prds-not-only-slices`): a
|
|
55
|
+
// task-only `jq` would render `DORFL_AUTO_TASK` dead on the hourly
|
|
56
|
+
// cron — a ready ungated PRD would never become a matrix leg. The `jq` must
|
|
57
|
+
// read `scan --json`'s taskable-SPEC pool (`repos[].specs[]` + `cwd.repo.specs[]`)
|
|
58
|
+
// and emit `spec:<slug>` legs alongside the `task:<slug>` legs.
|
|
59
|
+
require('propose-enumerates-taskable-specs', /"spec:" \+ \.slug/.test(text) &&
|
|
60
|
+
/\.specs\[\]/.test(text), 'the propose-mode `enumerate` `jq` must union taskable specs into the ' +
|
|
61
|
+
"matrix as `spec:<slug>` legs (read from `scan --json`'s `repos[].specs[]` " +
|
|
62
|
+
'+ `cwd.repo.specs[]` pools), so a ready ungated SPEC becomes one auto-task ' +
|
|
63
|
+
'matrix leg alongside the eligible-task legs ' +
|
|
64
|
+
'(`ci-propose-matrix-must-enumerate-sliceable-prds-not-only-slices`).');
|
|
65
|
+
require('propose-one-advance-per-item', /dorfl advance "?\$\{\{\s*matrix\./.test(text), 'each matrix leg must run one `dorfl advance <matrix item>` ' +
|
|
66
|
+
'(one PR per item).');
|
|
67
|
+
// The matrix leg must carry `--propose` so the integration mode is TIED to the
|
|
68
|
+
// matrix shape (it cannot desync from the dispatch `integrationMode` input nor
|
|
69
|
+
// fall back to a repo config default of `merge`). Scoped to the `advance-propose`
|
|
70
|
+
// job so it is the LEG that carries it, not merely the file somewhere.
|
|
71
|
+
require('propose-leg-carries-propose-flag', /advance-propose:[\s\S]*?dorfl advance "?\$\{\{\s*matrix\.[\s\S]*?--propose\b/.test(text), 'each `propose` matrix leg must pass `--propose` so the integration mode is ' +
|
|
72
|
+
'TIED to the matrix shape (a leg can never merge to main / desync from the ' +
|
|
73
|
+
'dispatch mode).');
|
|
74
|
+
// --- merge ⇒ a MATRIX per item (parallel build/gate/review, serialised land) -
|
|
75
|
+
// The engine's `integrateLock` + `mergeRetries` CAS-retry loop is what makes
|
|
76
|
+
// concurrent merge jobs LAND-SAFE (`land-time-reverify-and-parallel-merge-ceiling`):
|
|
77
|
+
// build/gate/review fan out across siblings, and a non-fast-forward push
|
|
78
|
+
// triggers re-rebase + re-gate + retry up to the resolved `mergeRetries` cap.
|
|
79
|
+
// The cross-job serialiser is the CAS-retry loop itself — the git-alone floor.
|
|
80
|
+
require('merge-matrix', /advance-merge:[\s\S]*?strategy:\s*[\s\S]*?matrix:/.test(text), 'the `merge` job must use a MATRIX (parallel build/gate/review per item; ' +
|
|
81
|
+
"the land tail is serialised by the engine's `mergeRetries` CAS-retry " +
|
|
82
|
+
"loop, not by the workflow's job shape).");
|
|
83
|
+
// Each merge matrix leg must run one `dorfl advance <matrix.item> --merge`,
|
|
84
|
+
// scoped to the `advance-merge:` job so the `--merge` flag is TIED to its leg
|
|
85
|
+
// (cannot desync from the dispatch `integrationMode` input nor fall back to a
|
|
86
|
+
// repo config default of `propose`).
|
|
87
|
+
require('merge-leg-carries-merge-flag', /advance-merge:[\s\S]*?dorfl advance "?\$\{\{\s*matrix\.[\s\S]*?--merge\b/.test(text), 'each `merge` matrix leg must pass `--merge` so the integration mode is ' +
|
|
88
|
+
'TIED to the matrix shape (a leg can never propose-only / desync from the ' +
|
|
89
|
+
'dispatch mode).');
|
|
90
|
+
// The merge fan-out is the SAFETY-FLOOR shape: no `concurrency:` group on the
|
|
91
|
+
// `advance-merge:` job, because a GitHub Actions `concurrency:` serialiser
|
|
92
|
+
// would be load-bearing for cross-job land safety, and the floor must work on
|
|
93
|
+
// a bare arbiter with no host (Applied Answer q1: scaled CAS-retry is the
|
|
94
|
+
// floor; the portable cross-job ref-lock is the planned accelerator; GitHub
|
|
95
|
+
// `concurrency:` is OPTIONAL host sugar only, deliberately not used here).
|
|
96
|
+
require('merge-no-host-concurrency-serialiser', !/advance-merge:[\s\S]*?\n\s{4}concurrency:/.test(text), 'the `merge` job must NOT carry a `concurrency:` group: a host-specific ' +
|
|
97
|
+
'serialiser would make the cross-job land safety depend on a GitHub Actions ' +
|
|
98
|
+
"feature; the engine's `mergeRetries` CAS-retry loop is the git-alone " +
|
|
99
|
+
'floor.');
|
|
100
|
+
// --- It only INVOKES the existing `advance` driver (no new execution model) --
|
|
101
|
+
require('invokes-advance-driver', /dorfl advance\b/.test(text), 'the workflow must INVOKE the existing `advance` driver.');
|
|
102
|
+
return { ok: problems.length === 0, problems };
|
|
103
|
+
}
|
|
104
|
+
//# sourceMappingURL=advance-ci-template.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"advance-ci-template.js","sourceRoot":"","sources":["../src/advance-ci-template.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,UAAU,EAAE,YAAY,EAAC,MAAM,SAAS,CAAC;AACjD,OAAO,EAAC,OAAO,EAAE,OAAO,EAAC,MAAM,WAAW,CAAC;AAC3C,OAAO,EAAC,aAAa,EAAC,MAAM,UAAU,CAAC;AA6DvC;;;;;;GAMG;AACH,MAAM,UAAU,4BAA4B,CAAC,QAAiB;IAC7D,IAAI,QAAQ,EAAE,CAAC;QACd,OAAO,QAAQ,CAAC;IACjB,CAAC;IACD,MAAM,IAAI,GAAG,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;IACrD,sEAAsE;IACtE,sEAAsE;IACtE,MAAM,UAAU,GAAG;QAClB,OAAO,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,2BAA2B,CAAC;QAC1E,OAAO,CACN,IAAI,EACJ,IAAI,EACJ,IAAI,EACJ,IAAI,EACJ,IAAI,EACJ,MAAM,EACN,IAAI,EACJ,2BAA2B,CAC3B;KACD,CAAC;IACF,KAAK,MAAM,SAAS,IAAI,UAAU,EAAE,CAAC;QACpC,IAAI,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;YAC3B,OAAO,SAAS,CAAC;QAClB,CAAC;IACF,CAAC;IACD,yEAAyE;IACzE,OAAO,UAAU,CAAC,CAAC,CAAC,CAAC;AACtB,CAAC;AAED,2EAA2E;AAC3E,MAAM,UAAU,qBAAqB,CAAC,QAAiB;IACtD,OAAO,YAAY,CAAC,4BAA4B,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC,CAAC;AACrE,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,yBAAyB,CACxC,IAAY;IAEZ,MAAM,QAAQ,GAA+B,EAAE,CAAC;IAChD,MAAM,OAAO,GAAG,CAAC,EAAU,EAAE,OAAgB,EAAE,OAAe,EAAQ,EAAE;QACvE,IAAI,CAAC,OAAO,EAAE,CAAC;YACd,QAAQ,CAAC,IAAI,CAAC,EAAC,EAAE,EAAE,OAAO,EAAC,CAAC,CAAC;QAC9B,CAAC;IACF,CAAC,CAAC;IAEF,+EAA+E;IAC/E,OAAO,CAAC,cAAc,EAAE,iCAAiC,CAAC,IAAI,CAC7D,IAAI,CACJ,EAAE,yDAAyD,CAAC,CAAC;IAC9D,OAAO,CAAC,6BAA6B,EAAE,mDAAmD,CAAC,IAAI,CAC9F,IAAI,CACJ,EAAE,yEAAyE,CAAC,CAAC;IAE9E,gFAAgF;IAChF,OAAO,CAAC,gBAAgB,EAAE,6BAA6B,CAAC,IAAI,CAC3D,IAAI,CACJ,EAAE,gEAAgE,CAAC,CAAC;IACrE,OAAO,CAAC,6BAA6B,EAAE,mBAAmB,CAAC,IAAI,CAC9D,IAAI,CACJ,EAAE,oEAAoE;QACtE,wBAAwB,CAAC,CAAC;IAC3B,gEAAgE;IAChE,yEAAyE;IACzE,mEAAmE;IACnE,4EAA4E;IAC5E,mFAAmF;IACnF,gEAAgE;IAChE,OAAO,CAAC,mCAAmC,EAAE,mBAAmB,CAAC,IAAI,CAAC,IAAI,CAAC;QAC1E,aAAa,CAAC,IAAI,CACjB,IAAI,CACJ,EAAE,uEAAuE;QAC1E,4EAA4E;QAC5E,6EAA6E;QAC7E,8CAA8C;QAC9C,sEAAsE,CAAC,CAAC;IACzE,OAAO,CAAC,8BAA8B,EAAE,mCAAmC,CAAC,IAAI,CAC/E,IAAI,CACJ,EAAE,6DAA6D;QAC/D,oBAAoB,CAAC,CAAC;IACvB,+EAA+E;IAC/E,+EAA+E;IAC/E,kFAAkF;IAClF,uEAAuE;IACvE,OAAO,CAAC,kCAAkC,EAAE,8EAA8E,CAAC,IAAI,CAC9H,IAAI,CACJ,EAAE,6EAA6E;QAC/E,4EAA4E;QAC5E,iBAAiB,CAAC,CAAC;IAEpB,gFAAgF;IAChF,6EAA6E;IAC7E,qFAAqF;IACrF,yEAAyE;IACzE,8EAA8E;IAC9E,+EAA+E;IAC/E,OAAO,CAAC,cAAc,EAAE,mDAAmD,CAAC,IAAI,CAC/E,IAAI,CACJ,EAAE,0EAA0E;QAC5E,uEAAuE;QACvE,yCAAyC,CAAC,CAAC;IAC5C,4EAA4E;IAC5E,8EAA8E;IAC9E,8EAA8E;IAC9E,qCAAqC;IACrC,OAAO,CAAC,8BAA8B,EAAE,0EAA0E,CAAC,IAAI,CACtH,IAAI,CACJ,EAAE,yEAAyE;QAC3E,2EAA2E;QAC3E,iBAAiB,CAAC,CAAC;IACpB,8EAA8E;IAC9E,2EAA2E;IAC3E,8EAA8E;IAC9E,0EAA0E;IAC1E,4EAA4E;IAC5E,2EAA2E;IAC3E,OAAO,CAAC,sCAAsC,EAAE,CAAC,2CAA2C,CAAC,IAAI,CAChG,IAAI,CACJ,EAAE,yEAAyE;QAC3E,6EAA6E;QAC7E,uEAAuE;QACvE,QAAQ,CAAC,CAAC;IAEX,gFAAgF;IAChF,OAAO,CAAC,wBAAwB,EAAE,iBAAiB,CAAC,IAAI,CACvD,IAAI,CACJ,EAAE,yDAAyD,CAAC,CAAC;IAE9D,OAAO,EAAC,EAAE,EAAE,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,QAAQ,EAAC,CAAC;AAC9C,CAAC"}
|
|
@@ -0,0 +1,132 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The pure `advance` TICK classifier (prd `advance-loop`, task
|
|
3
|
+
* `advance-tick-classifier`) — the substrate-agnostic, read-only seam BOTH the
|
|
4
|
+
* one-shot driver and the loop (`run`) driver wrap. Mirrors the existing pure
|
|
5
|
+
* `categorise.ts` / `eligibility.ts` seams: NO model, NO lock, NO file mutation
|
|
6
|
+
* — it returns WHICH rung on WHICH item from EXACTLY two signals plus the item
|
|
7
|
+
* type, and nothing executes here (the rung EXECUTION is later tasks).
|
|
8
|
+
*
|
|
9
|
+
* The two signals (and ONLY these two):
|
|
10
|
+
* 1. the item's `needsAnswers` flag (from `frontmatter.ts`); and
|
|
11
|
+
* 2. the sidecar's ANSWERED-STATE (from the `advance-sidecar-contract`
|
|
12
|
+
* keystone: {@link allAnswered} / {@link pendingEntries} over the entries).
|
|
13
|
+
*
|
|
14
|
+
* The per-item state machine (the deterministic trigger — two signals only):
|
|
15
|
+
*
|
|
16
|
+
* needsAnswers: true?
|
|
17
|
+
* ├─ NO → ANALYSE (state-appropriate rung: build a ready task / task a ready
|
|
18
|
+
* │ prd / triage an untriaged observation). Analysis MAY advance, OR
|
|
19
|
+
* │ SURFACE questions.
|
|
20
|
+
* └─ YES → sidecar exists?
|
|
21
|
+
* ├─ NO → ANALYSE (first pass: generate questions → write the sidecar)
|
|
22
|
+
* │ [transitional — surfacing normally writes the sidecar atomically]
|
|
23
|
+
* └─ YES → all entries answered?
|
|
24
|
+
* ├─ YES → ANALYSE: apply the answers + advance.
|
|
25
|
+
* └─ NO → NO-OP (awaiting human).
|
|
26
|
+
*
|
|
27
|
+
* Two invariants this classifier (and the downstream that executes the rung)
|
|
28
|
+
* MUST preserve:
|
|
29
|
+
* 1. `needsAnswers:false ⟺ NO active sidecar` (clear-flag and delete-sidecar are
|
|
30
|
+
* the SAME atomic step — enforced in `advance-sidecar-contract`'s
|
|
31
|
+
* `applyAtomic`, asserted HERE at the classifier boundary). A
|
|
32
|
+
* contradictory input (one set without the other) is the only state the
|
|
33
|
+
* classifier REFUSES to classify into an ANALYSE/NO-OP rung — it returns the
|
|
34
|
+
* explicit `invariant-violation` kind so a caller can route it rather than
|
|
35
|
+
* silently mis-advance.
|
|
36
|
+
* 2. A PENDING (not-all-answered) sidecar makes the tick a clean NO-OP (so a
|
|
37
|
+
* `run` daemon never spins hot re-surfacing the same question). A SUBSET of
|
|
38
|
+
* answered entries is still pending ⇒ SKIP (NO-OP).
|
|
39
|
+
*
|
|
40
|
+
* "ANALYSE" is NOT "always advance" — surface-and-pause is itself a rung, so the
|
|
41
|
+
* ANALYSE branch resolves to the per-TYPE rung the executor will run (the cells
|
|
42
|
+
* of the prd's "Per-item-type transitions" table): `build-task` (task),
|
|
43
|
+
* `task-spec` (spec), `triage-observation` (observation) when there are no open
|
|
44
|
+
* questions; `surface` (first-pass question generation) when `needsAnswers` but
|
|
45
|
+
* no sidecar yet; `apply` when all entries are answered.
|
|
46
|
+
*/
|
|
47
|
+
import type { SidecarModel, SidecarType } from './sidecar.js';
|
|
48
|
+
/**
|
|
49
|
+
* One TICK input: an item's TYPE + its two classification signals. `needsAnswers`
|
|
50
|
+
* is the item-body flag (`undefined`/`false` ⇒ not gated; `true` ⇒ gated). The
|
|
51
|
+
* `sidecar` is the parsed ACTIVE sidecar model when one exists, else `undefined`
|
|
52
|
+
* — the classifier reads its answered-state via the keystone's derived helpers,
|
|
53
|
+
* never a third state store.
|
|
54
|
+
*/
|
|
55
|
+
export interface TickItem {
|
|
56
|
+
/** The item type — the state machine is per-TYPE (task / prd / observation). */
|
|
57
|
+
type: SidecarType;
|
|
58
|
+
/** Autonomy axis 2 (DISCOVERED): `true` ⇒ open questions block autonomous work. */
|
|
59
|
+
needsAnswers: boolean | undefined;
|
|
60
|
+
/** The parsed ACTIVE sidecar, or `undefined` when none exists. */
|
|
61
|
+
sidecar: SidecarModel | undefined;
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
* The CLASSIFIED rung kinds (a discriminated union NAMING the rung WITHOUT
|
|
65
|
+
* executing it). The ANALYSE rungs split per-type; `surface`/`apply` are
|
|
66
|
+
* type-agnostic transitions; `no-op` is the calm-at-rest result; and
|
|
67
|
+
* `invariant-violation` is the explicit refusal an inconsistent input yields.
|
|
68
|
+
*/
|
|
69
|
+
export type TickRungKind =
|
|
70
|
+
/** A ready task → build it (later: invoke the `do <slug>` machinery). */
|
|
71
|
+
'build-task'
|
|
72
|
+
/** A ready spec → task it (later: invoke the `do spec:<slug>` machinery). */
|
|
73
|
+
| 'task-spec'
|
|
74
|
+
/** An untriaged observation → triage it (auto-disposition or surface a question). */
|
|
75
|
+
| 'triage-observation'
|
|
76
|
+
/** `needsAnswers` but NO sidecar yet → first-pass question generation. */
|
|
77
|
+
| 'surface'
|
|
78
|
+
/** A sidecar with EVERY entry answered → apply the answers + advance. */
|
|
79
|
+
| 'apply'
|
|
80
|
+
/** Nothing to do: a PENDING sidecar (awaiting human) or nothing eligible. */
|
|
81
|
+
| 'no-op'
|
|
82
|
+
/** The `needsAnswers:false ⟺ no active sidecar` invariant is broken. */
|
|
83
|
+
| 'invariant-violation';
|
|
84
|
+
/**
|
|
85
|
+
* The classifier's verdict: the rung kind, the item type it was classified for,
|
|
86
|
+
* and a short machine-stable `reason` tag for the NO-OP / refusal cases (so a
|
|
87
|
+
* caller — or a test — can distinguish "pending sidecar" from "nothing eligible"
|
|
88
|
+
* without re-deriving the signals).
|
|
89
|
+
*/
|
|
90
|
+
export interface TickClassification {
|
|
91
|
+
kind: TickRungKind;
|
|
92
|
+
type: SidecarType;
|
|
93
|
+
/**
|
|
94
|
+
* A machine-stable tag explaining a `no-op` / `invariant-violation`:
|
|
95
|
+
* - `pending-sidecar` — an active sidecar still has unanswered entries.
|
|
96
|
+
* - `needsAnswers-without-sidecar` — `needsAnswers:true` but no sidecar AND
|
|
97
|
+
* this should have surfaced (kept for completeness; `surface` covers the
|
|
98
|
+
* normal first pass, so this only appears on the refusal path below).
|
|
99
|
+
* - `sidecar-without-needsAnswers` — a sidecar exists but `needsAnswers` is
|
|
100
|
+
* not `true` (invariant 1 broken — the flag and the sidecar disagree).
|
|
101
|
+
* `undefined` for the ANALYSE rungs and `apply`/`surface`.
|
|
102
|
+
*/
|
|
103
|
+
reason?: 'pending-sidecar' | 'needsAnswers-without-sidecar' | 'sidecar-without-needsAnswers';
|
|
104
|
+
}
|
|
105
|
+
/**
|
|
106
|
+
* Classify ONE tick PURELY from the item's two signals + its type — read-only,
|
|
107
|
+
* no model, no lock, no file mutation. Returns the classified rung the executor
|
|
108
|
+
* will later run (or `no-op` / `invariant-violation`). The decision tree is the
|
|
109
|
+
* prd's per-item state machine, with invariant 1 asserted at the boundary:
|
|
110
|
+
*
|
|
111
|
+
* - `needsAnswers` NOT true:
|
|
112
|
+
* - a sidecar present ⇒ INVARIANT 1 BROKEN (`sidecar-without-needsAnswers`)
|
|
113
|
+
* → `invariant-violation`. (`needsAnswers:false ⟺ no active sidecar`.)
|
|
114
|
+
* - no sidecar ⇒ ANALYSE: the per-type rung (`build-task` / `task-spec` /
|
|
115
|
+
* `triage-observation`).
|
|
116
|
+
* - `needsAnswers` true:
|
|
117
|
+
* - NO sidecar ⇒ `surface` (first-pass question generation — transitional).
|
|
118
|
+
* - a PENDING sidecar (a subset/none answered) ⇒ `no-op` (`pending-sidecar`)
|
|
119
|
+
* — the clean NO-OP that keeps a `run` daemon from spinning hot; a SUBSET
|
|
120
|
+
* of answered entries SKIPS here too.
|
|
121
|
+
* - an ALL-ANSWERED sidecar ⇒ `apply` (apply the answers + advance; the
|
|
122
|
+
* executor may append new Qs and re-pause, or resolve fully).
|
|
123
|
+
*/
|
|
124
|
+
export declare function classifyTick(item: TickItem): TickClassification;
|
|
125
|
+
/**
|
|
126
|
+
* Is this classified rung a CLASSIFIED-NO-OP (the calm-at-rest result)? A small
|
|
127
|
+
* predicate the loop/convergence tests use to assert "the candidate pool is
|
|
128
|
+
* STABLE" — a `no-op` OR an `invariant-violation` is NOT an advanceable rung. The
|
|
129
|
+
* ANALYSE rungs + `surface` + `apply` ARE advanceable.
|
|
130
|
+
*/
|
|
131
|
+
export declare function isAdvanceable(classification: TickClassification): boolean;
|
|
132
|
+
//# sourceMappingURL=advance-classify.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"advance-classify.d.ts","sourceRoot":"","sources":["../src/advance-classify.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6CG;AAEH,OAAO,KAAK,EAAC,YAAY,EAAE,WAAW,EAAC,MAAM,cAAc,CAAC;AAG5D;;;;;;GAMG;AACH,MAAM,WAAW,QAAQ;IACxB,gFAAgF;IAChF,IAAI,EAAE,WAAW,CAAC;IAClB,mFAAmF;IACnF,YAAY,EAAE,OAAO,GAAG,SAAS,CAAC;IAClC,kEAAkE;IAClE,OAAO,EAAE,YAAY,GAAG,SAAS,CAAC;CAClC;AAED;;;;;GAKG;AACH,MAAM,MAAM,YAAY;AAEvB,yEAAyE;AACvE,YAAY;AACd,6EAA6E;GAC3E,WAAW;AACb,qFAAqF;GACnF,oBAAoB;AAEtB,0EAA0E;GACxE,SAAS;AACX,yEAAyE;GACvE,OAAO;AAET,6EAA6E;GAC3E,OAAO;AAET,wEAAwE;GACtE,qBAAqB,CAAC;AAEzB;;;;;GAKG;AACH,MAAM,WAAW,kBAAkB;IAClC,IAAI,EAAE,YAAY,CAAC;IACnB,IAAI,EAAE,WAAW,CAAC;IAClB;;;;;;;;;OASG;IACH,MAAM,CAAC,EACJ,iBAAiB,GACjB,8BAA8B,GAC9B,8BAA8B,CAAC;CAClC;AAWD;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAgB,YAAY,CAAC,IAAI,EAAE,QAAQ,GAAG,kBAAkB,CAsC/D;AAED;;;;;GAKG;AACH,wBAAgB,aAAa,CAAC,cAAc,EAAE,kBAAkB,GAAG,OAAO,CAKzE"}
|
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The pure `advance` TICK classifier (prd `advance-loop`, task
|
|
3
|
+
* `advance-tick-classifier`) — the substrate-agnostic, read-only seam BOTH the
|
|
4
|
+
* one-shot driver and the loop (`run`) driver wrap. Mirrors the existing pure
|
|
5
|
+
* `categorise.ts` / `eligibility.ts` seams: NO model, NO lock, NO file mutation
|
|
6
|
+
* — it returns WHICH rung on WHICH item from EXACTLY two signals plus the item
|
|
7
|
+
* type, and nothing executes here (the rung EXECUTION is later tasks).
|
|
8
|
+
*
|
|
9
|
+
* The two signals (and ONLY these two):
|
|
10
|
+
* 1. the item's `needsAnswers` flag (from `frontmatter.ts`); and
|
|
11
|
+
* 2. the sidecar's ANSWERED-STATE (from the `advance-sidecar-contract`
|
|
12
|
+
* keystone: {@link allAnswered} / {@link pendingEntries} over the entries).
|
|
13
|
+
*
|
|
14
|
+
* The per-item state machine (the deterministic trigger — two signals only):
|
|
15
|
+
*
|
|
16
|
+
* needsAnswers: true?
|
|
17
|
+
* ├─ NO → ANALYSE (state-appropriate rung: build a ready task / task a ready
|
|
18
|
+
* │ prd / triage an untriaged observation). Analysis MAY advance, OR
|
|
19
|
+
* │ SURFACE questions.
|
|
20
|
+
* └─ YES → sidecar exists?
|
|
21
|
+
* ├─ NO → ANALYSE (first pass: generate questions → write the sidecar)
|
|
22
|
+
* │ [transitional — surfacing normally writes the sidecar atomically]
|
|
23
|
+
* └─ YES → all entries answered?
|
|
24
|
+
* ├─ YES → ANALYSE: apply the answers + advance.
|
|
25
|
+
* └─ NO → NO-OP (awaiting human).
|
|
26
|
+
*
|
|
27
|
+
* Two invariants this classifier (and the downstream that executes the rung)
|
|
28
|
+
* MUST preserve:
|
|
29
|
+
* 1. `needsAnswers:false ⟺ NO active sidecar` (clear-flag and delete-sidecar are
|
|
30
|
+
* the SAME atomic step — enforced in `advance-sidecar-contract`'s
|
|
31
|
+
* `applyAtomic`, asserted HERE at the classifier boundary). A
|
|
32
|
+
* contradictory input (one set without the other) is the only state the
|
|
33
|
+
* classifier REFUSES to classify into an ANALYSE/NO-OP rung — it returns the
|
|
34
|
+
* explicit `invariant-violation` kind so a caller can route it rather than
|
|
35
|
+
* silently mis-advance.
|
|
36
|
+
* 2. A PENDING (not-all-answered) sidecar makes the tick a clean NO-OP (so a
|
|
37
|
+
* `run` daemon never spins hot re-surfacing the same question). A SUBSET of
|
|
38
|
+
* answered entries is still pending ⇒ SKIP (NO-OP).
|
|
39
|
+
*
|
|
40
|
+
* "ANALYSE" is NOT "always advance" — surface-and-pause is itself a rung, so the
|
|
41
|
+
* ANALYSE branch resolves to the per-TYPE rung the executor will run (the cells
|
|
42
|
+
* of the prd's "Per-item-type transitions" table): `build-task` (task),
|
|
43
|
+
* `task-spec` (spec), `triage-observation` (observation) when there are no open
|
|
44
|
+
* questions; `surface` (first-pass question generation) when `needsAnswers` but
|
|
45
|
+
* no sidecar yet; `apply` when all entries are answered.
|
|
46
|
+
*/
|
|
47
|
+
import { allAnswered } from './sidecar.js';
|
|
48
|
+
/** The per-TYPE ANALYSE rung when there are no open questions (the no-gate path). */
|
|
49
|
+
const ANALYSE_RUNG_FOR_TYPE = {
|
|
50
|
+
task: 'build-task',
|
|
51
|
+
// A `spec` analyses through the `task-spec` rung (spec IS the parent-spec
|
|
52
|
+
// artifact tasked into build tasks).
|
|
53
|
+
spec: 'task-spec',
|
|
54
|
+
observation: 'triage-observation',
|
|
55
|
+
};
|
|
56
|
+
/**
|
|
57
|
+
* Classify ONE tick PURELY from the item's two signals + its type — read-only,
|
|
58
|
+
* no model, no lock, no file mutation. Returns the classified rung the executor
|
|
59
|
+
* will later run (or `no-op` / `invariant-violation`). The decision tree is the
|
|
60
|
+
* prd's per-item state machine, with invariant 1 asserted at the boundary:
|
|
61
|
+
*
|
|
62
|
+
* - `needsAnswers` NOT true:
|
|
63
|
+
* - a sidecar present ⇒ INVARIANT 1 BROKEN (`sidecar-without-needsAnswers`)
|
|
64
|
+
* → `invariant-violation`. (`needsAnswers:false ⟺ no active sidecar`.)
|
|
65
|
+
* - no sidecar ⇒ ANALYSE: the per-type rung (`build-task` / `task-spec` /
|
|
66
|
+
* `triage-observation`).
|
|
67
|
+
* - `needsAnswers` true:
|
|
68
|
+
* - NO sidecar ⇒ `surface` (first-pass question generation — transitional).
|
|
69
|
+
* - a PENDING sidecar (a subset/none answered) ⇒ `no-op` (`pending-sidecar`)
|
|
70
|
+
* — the clean NO-OP that keeps a `run` daemon from spinning hot; a SUBSET
|
|
71
|
+
* of answered entries SKIPS here too.
|
|
72
|
+
* - an ALL-ANSWERED sidecar ⇒ `apply` (apply the answers + advance; the
|
|
73
|
+
* executor may append new Qs and re-pause, or resolve fully).
|
|
74
|
+
*/
|
|
75
|
+
export function classifyTick(item) {
|
|
76
|
+
const { type, needsAnswers, sidecar } = item;
|
|
77
|
+
const gated = needsAnswers === true;
|
|
78
|
+
if (!gated) {
|
|
79
|
+
// Invariant 1: `needsAnswers:false ⟺ no active sidecar`. A sidecar present
|
|
80
|
+
// here means the flag and the sidecar DISAGREE — refuse rather than
|
|
81
|
+
// silently advance past an open question the flag forgot to declare.
|
|
82
|
+
if (sidecar !== undefined) {
|
|
83
|
+
return {
|
|
84
|
+
kind: 'invariant-violation',
|
|
85
|
+
type,
|
|
86
|
+
reason: 'sidecar-without-needsAnswers',
|
|
87
|
+
};
|
|
88
|
+
}
|
|
89
|
+
// ANALYSE: the per-type lifecycle rung (read-only classification only).
|
|
90
|
+
return { kind: ANALYSE_RUNG_FOR_TYPE[type], type };
|
|
91
|
+
}
|
|
92
|
+
// `needsAnswers` is true.
|
|
93
|
+
if (sidecar === undefined) {
|
|
94
|
+
// First pass: no sidecar yet → surface the questions (write it). This is the
|
|
95
|
+
// transitional cell — surfacing normally writes the sidecar atomically, so a
|
|
96
|
+
// gated item without a sidecar is the moment to generate questions.
|
|
97
|
+
return { kind: 'surface', type };
|
|
98
|
+
}
|
|
99
|
+
// A sidecar exists: the two signals AGREE (invariant 1 holds). The answered-
|
|
100
|
+
// state — derived from the ENTRIES, never the frontmatter mirror — decides.
|
|
101
|
+
if (allAnswered(sidecar)) {
|
|
102
|
+
// Every entry answered → apply + advance (the executor may re-pause).
|
|
103
|
+
return { kind: 'apply', type };
|
|
104
|
+
}
|
|
105
|
+
// A PENDING sidecar (a SUBSET answered, or none) ⇒ clean NO-OP. This is the
|
|
106
|
+
// invariant-2 cell: the loop never thrashes on a half-answered item; it idles
|
|
107
|
+
// until the human answers the rest (equivalent to `pendingEntries.length > 0`).
|
|
108
|
+
return { kind: 'no-op', type, reason: 'pending-sidecar' };
|
|
109
|
+
}
|
|
110
|
+
/**
|
|
111
|
+
* Is this classified rung a CLASSIFIED-NO-OP (the calm-at-rest result)? A small
|
|
112
|
+
* predicate the loop/convergence tests use to assert "the candidate pool is
|
|
113
|
+
* STABLE" — a `no-op` OR an `invariant-violation` is NOT an advanceable rung. The
|
|
114
|
+
* ANALYSE rungs + `surface` + `apply` ARE advanceable.
|
|
115
|
+
*/
|
|
116
|
+
export function isAdvanceable(classification) {
|
|
117
|
+
return (classification.kind !== 'no-op' &&
|
|
118
|
+
classification.kind !== 'invariant-violation');
|
|
119
|
+
}
|
|
120
|
+
//# sourceMappingURL=advance-classify.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"advance-classify.js","sourceRoot":"","sources":["../src/advance-classify.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6CG;AAGH,OAAO,EAAC,WAAW,EAAC,MAAM,cAAc,CAAC;AAqEzC,qFAAqF;AACrF,MAAM,qBAAqB,GAAsC;IAChE,IAAI,EAAE,YAAY;IAClB,0EAA0E;IAC1E,qCAAqC;IACrC,IAAI,EAAE,WAAW;IACjB,WAAW,EAAE,oBAAoB;CACjC,CAAC;AAEF;;;;;;;;;;;;;;;;;;GAkBG;AACH,MAAM,UAAU,YAAY,CAAC,IAAc;IAC1C,MAAM,EAAC,IAAI,EAAE,YAAY,EAAE,OAAO,EAAC,GAAG,IAAI,CAAC;IAC3C,MAAM,KAAK,GAAG,YAAY,KAAK,IAAI,CAAC;IAEpC,IAAI,CAAC,KAAK,EAAE,CAAC;QACZ,2EAA2E;QAC3E,oEAAoE;QACpE,qEAAqE;QACrE,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;YAC3B,OAAO;gBACN,IAAI,EAAE,qBAAqB;gBAC3B,IAAI;gBACJ,MAAM,EAAE,8BAA8B;aACtC,CAAC;QACH,CAAC;QACD,wEAAwE;QACxE,OAAO,EAAC,IAAI,EAAE,qBAAqB,CAAC,IAAI,CAAC,EAAE,IAAI,EAAC,CAAC;IAClD,CAAC;IAED,0BAA0B;IAC1B,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;QAC3B,6EAA6E;QAC7E,6EAA6E;QAC7E,oEAAoE;QACpE,OAAO,EAAC,IAAI,EAAE,SAAS,EAAE,IAAI,EAAC,CAAC;IAChC,CAAC;IAED,6EAA6E;IAC7E,4EAA4E;IAC5E,IAAI,WAAW,CAAC,OAAO,CAAC,EAAE,CAAC;QAC1B,sEAAsE;QACtE,OAAO,EAAC,IAAI,EAAE,OAAO,EAAE,IAAI,EAAC,CAAC;IAC9B,CAAC;IAED,4EAA4E;IAC5E,8EAA8E;IAC9E,gFAAgF;IAChF,OAAO,EAAC,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,iBAAiB,EAAC,CAAC;AACzD,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,aAAa,CAAC,cAAkC;IAC/D,OAAO,CACN,cAAc,CAAC,IAAI,KAAK,OAAO;QAC/B,cAAc,CAAC,IAAI,KAAK,qBAAqB,CAC7C,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,182 @@
|
|
|
1
|
+
import { type AdvanceContext, type AdvanceResult, type AdvanceExitCode, type AdvanceOutcome } 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 { ConfigOverrideMap } from './config-override.js';
|
|
6
|
+
/**
|
|
7
|
+
* The **`advance` one-shot DRIVER** (prd `advance-loop`, task
|
|
8
|
+
* `advance-drivers-and-gates`, US #2/7/23/25/26) — the SEQUENTIAL driver that
|
|
9
|
+
* WRAPS the substrate-agnostic advance TICK ({@link performAdvance}) over named
|
|
10
|
+
* item(s) or the bare eligible-SET form. It is the in-place counterpart of
|
|
11
|
+
* `do-autopick`'s {@link performDoAuto}/{@link performDoArgs}: it SELECTS +
|
|
12
|
+
* ORDERS items and runs the EXISTING tick per item, SEQUENTIALLY.
|
|
13
|
+
*
|
|
14
|
+
* **One substrate-agnostic TICK, two drivers (US #7).** The tick (classify →
|
|
15
|
+
* lock → execute, already built in {@link performAdvance}) is the shared
|
|
16
|
+
* contract. The TWO drivers wrap it:
|
|
17
|
+
*
|
|
18
|
+
* - the **one-shot driver** (this module) — human `advance`-style or a CI
|
|
19
|
+
* invocation: runs the tick over named item(s) / the eligible set
|
|
20
|
+
* SEQUENTIALLY (`advance` is sequential, exactly like `do`);
|
|
21
|
+
* - the **loop driver** (`run`, `run.ts`) — loops the tick over the eligible
|
|
22
|
+
* set with genuine parallelism, each item lock-guarded by the `advancing`
|
|
23
|
+
* borrow (already in {@link performAdvance}). `run` ≡ CI (same tick, different
|
|
24
|
+
* substrate); NO new execution model is introduced.
|
|
25
|
+
*
|
|
26
|
+
* **`-n x` is ALWAYS SEQUENTIAL (US #25)** — a dumb "run the tick N times" loop,
|
|
27
|
+
* for BOTH `do -n` ({@link performDoAuto}) and `advance -n` (here). Parallelism is
|
|
28
|
+
* NEVER a property of `-n`; it comes only from `run` (the concurrent loop) or the
|
|
29
|
+
* CI matrix.
|
|
30
|
+
*
|
|
31
|
+
* **The FLAT per-action gate family (US #23)** falls out of the SELECTION layer,
|
|
32
|
+
* exactly as it does for `do`: the eligible-pool scan only SURFACES a build item
|
|
33
|
+
* when `autoBuild` is on and a task-a-prd item when `autoTask` is on (the gate
|
|
34
|
+
* is a policy on the autonomous-SELECTION step, NOT on the explicit verb a human
|
|
35
|
+
* typed — an explicitly-NAMED `advance <slug>` builds regardless, mirroring
|
|
36
|
+
* `do <task>` vs `autoBuild`). SURFACE + APPLY are ALWAYS allowed — they run
|
|
37
|
+
* through the tick on any named item and are never pool-gated, so a repo with
|
|
38
|
+
* EVERY flag off still gets the QUESTION LOOP (surface + apply) but no autonomous
|
|
39
|
+
* build/task in the bare/`-n` selection ("question loop with zero autonomy").
|
|
40
|
+
* The triage rung's ask-vs-auto distinction (`observationTriage`) is read inside
|
|
41
|
+
* the tick; its SELECTION-layer `off` gate drops the observation pool here.
|
|
42
|
+
*
|
|
43
|
+
* **Isolation + chaining FALL OUT (US #26):** this driver builds NO new isolation
|
|
44
|
+
* or chaining machinery — it threads the SAME `AdvanceContext` the tick already
|
|
45
|
+
* consumes (which orchestrates `do`/`do prd:` through the isolation-strategy seam
|
|
46
|
+
* and rebase-before-integrate); a chain conflict routes to needs-attention as
|
|
47
|
+
* today, inside the orchestrated `do`.
|
|
48
|
+
*/
|
|
49
|
+
/** The single-`advance` tick runner this driver drives per selected item. */
|
|
50
|
+
export type AdvanceTickRunner = (options: AdvanceTickOptions) => Promise<AdvanceResult>;
|
|
51
|
+
/** The per-item tick options: the run context + the one resolved arg. */
|
|
52
|
+
export interface AdvanceTickOptions extends AdvanceContext {
|
|
53
|
+
arg: string;
|
|
54
|
+
read?: LedgerReadStrategy;
|
|
55
|
+
}
|
|
56
|
+
/** Options shared with every per-item tick run, threaded verbatim. */
|
|
57
|
+
type SharedAdvanceContext = AdvanceContext;
|
|
58
|
+
export interface PerformAdvanceMultiOptions extends SharedAdvanceContext {
|
|
59
|
+
/**
|
|
60
|
+
* The resolved repo config — provides `autoBuild` (the build gate for the
|
|
61
|
+
* task pool), `autoTask` (the task-a-prd gate for the prd pool), and
|
|
62
|
+
* `selectionOrder` (the configurable cross-pool order). The per-action gate
|
|
63
|
+
* family is APPLIED HERE, at the selection layer (the policy-on-autonomous-
|
|
64
|
+
* selection point).
|
|
65
|
+
*/
|
|
66
|
+
config: Config;
|
|
67
|
+
/**
|
|
68
|
+
* The per-machine {@link ConfigOverrideMap}. Threaded into the in-place pool
|
|
69
|
+
* scan (`scanRepoPaths`) so the per-machine override applies to advance
|
|
70
|
+
* autopick eligibility — WITHOUT it the committed `.dorfl.json` silently
|
|
71
|
+
* beats the override on this path (the in-place advance autopick mirror of the
|
|
72
|
+
* `do` autopick defect).
|
|
73
|
+
*/
|
|
74
|
+
override?: ConfigOverrideMap;
|
|
75
|
+
/**
|
|
76
|
+
* `advance -n <x>`: how many eligible items to advance, IN SEQUENCE. Bare
|
|
77
|
+
* `advance` (no arg, no count) ⇒ 1. SEQUENTIAL — never a parallelism knob
|
|
78
|
+
* (US #25; parallelism is `run` or the CI matrix).
|
|
79
|
+
*/
|
|
80
|
+
count?: number;
|
|
81
|
+
/** Override the single-tick runner (tests inject a stub). Defaults to {@link performAdvance}. */
|
|
82
|
+
run?: AdvanceTickRunner;
|
|
83
|
+
/** Override the read seam (prd pool); defaults to the active {@link ledgerRead}. */
|
|
84
|
+
read?: LedgerReadStrategy;
|
|
85
|
+
/**
|
|
86
|
+
* The LIFECYCLE-POOL create-gates (task `advance-autopick-lifecycle-pools`),
|
|
87
|
+
* the internal hook the gate tasks (`observation-triage-tri-state-gate` /
|
|
88
|
+
* `surface-blockers-gate`) will wire to the `observationTriage` /
|
|
89
|
+
* `surfaceBlockers` config read. INTERIM, born OFF: omitted ⇒ BOTH create-gates
|
|
90
|
+
* OFF, so the triage + surface sub-pools contribute NOTHING and a bare/`-n`
|
|
91
|
+
* `advance` auto-triages / auto-surfaces nothing (it changes no repo's
|
|
92
|
+
* behaviour). The apply sub-pool is NOT gated (consume is always-on), so an
|
|
93
|
+
* answered sidecar applies regardless. Tests FORCE the create-gates on through
|
|
94
|
+
* this same hook to exercise the triage/surface paths.
|
|
95
|
+
*/
|
|
96
|
+
lifecycleGates?: LifecyclePoolGates;
|
|
97
|
+
}
|
|
98
|
+
/** The aggregate result of a multi-item `advance` invocation. */
|
|
99
|
+
export interface AdvanceMultiResult {
|
|
100
|
+
/** Each per-item {@link AdvanceResult}, in the order they ran. */
|
|
101
|
+
results: AdvanceResult[];
|
|
102
|
+
/**
|
|
103
|
+
* The process exit code for the whole invocation: 0 iff EVERY item that ran
|
|
104
|
+
* succeeded (or there was nothing eligible — an empty bare `advance` is not a
|
|
105
|
+
* failure); otherwise the first non-zero per-item exit code (the worst outcome
|
|
106
|
+
* surfaces). Mirrors `do`'s multi-item exit contract.
|
|
107
|
+
*/
|
|
108
|
+
exitCode: AdvanceExitCode;
|
|
109
|
+
/** Human-readable summary (printed by the CLI). */
|
|
110
|
+
message: string;
|
|
111
|
+
}
|
|
112
|
+
/**
|
|
113
|
+
* Run the BARE / `-n <x>` form: build the two ELIGIBLE pools for `cwd` (eligible
|
|
114
|
+
* TASKS gated by `autoBuild`, taskable prds gated by `autoTask`), order them
|
|
115
|
+
* (plus the lifecycle pools) per the resolved `selectionOrder` with `apply`
|
|
116
|
+
* pinned first, take `count` (default 1), and run the EXISTING advance tick per
|
|
117
|
+
* selected item, SEQUENTIALLY. The pools are the EXACT
|
|
118
|
+
* `do-autopick` pools (the SAME `scoreItems`/`taskableSpecs` predicates), so the
|
|
119
|
+
* per-action gate family is honoured by construction.
|
|
120
|
+
*
|
|
121
|
+
* The bare/`-n` selection draws ONLY from the autonomous pools (eligible tasks +
|
|
122
|
+
* taskable prds); SURFACE + APPLY of a gated item are reached by NAMING the item
|
|
123
|
+
* ({@link performAdvanceArgs}) — they are always-allowed and not pool-gated, so the
|
|
124
|
+
* bare form with every flag off correctly selects NOTHING (zero autonomy) while a
|
|
125
|
+
* named `advance <slug>` still surfaces/applies.
|
|
126
|
+
*/
|
|
127
|
+
export declare function performAdvanceAuto(options: PerformAdvanceMultiOptions): Promise<AdvanceMultiResult>;
|
|
128
|
+
/**
|
|
129
|
+
* Run the EXPLICIT multi-arg form (`advance <a> <b> …`): the named items in the
|
|
130
|
+
* GIVEN order (no pool/priority — the operator chose them). Each arg is run
|
|
131
|
+
* through the existing advance tick, which itself resolves bare/`task:`/`prd:`/
|
|
132
|
+
* `obs:` (so a named prd drives the task rung, an `obs:` the triage rung, a
|
|
133
|
+
* collision errors), SEQUENTIALLY. A NAMED item is the always-allowed path — its
|
|
134
|
+
* surface/apply rung runs regardless of the per-action gates.
|
|
135
|
+
*/
|
|
136
|
+
export declare function performAdvanceArgs(args: string[], options: PerformAdvanceMultiOptions): Promise<AdvanceMultiResult>;
|
|
137
|
+
/**
|
|
138
|
+
* Run ONE in-place advance tick + ff-push a tree-less rung's result to the
|
|
139
|
+
* arbiter — task `advance-in-place-publishes-treeless-results`. Wraps the
|
|
140
|
+
* substrate-agnostic tick ({@link AdvanceTickRunner}) with the shared
|
|
141
|
+
* {@link pushTreelessResult} so a surfaced sidecar / `triaged:` marker /
|
|
142
|
+
* applied-answer commit committed LOCALLY in the in-place cwd LANDS on the
|
|
143
|
+
* arbiter's `main` (today the in-place tick commits locally and the work is lost
|
|
144
|
+
* on an ephemeral CI runner). Mirrors the `--isolated` one-shot + `run` loop
|
|
145
|
+
* driver call sites byte-for-byte:
|
|
146
|
+
*
|
|
147
|
+
* - gates PURELY on `result.exitCode === 0 && TREELESS_RUNGS.has(result.rung)
|
|
148
|
+
* && context.arbiter !== undefined` — the SAME gate the existing drivers
|
|
149
|
+
* use, no cleverer guard (a build/task rung integrates through the
|
|
150
|
+
* `doDriver` band; a no-arbiter laptop checkout already sits on the real
|
|
151
|
+
* `main`);
|
|
152
|
+
* - reuses `pushTreelessResult` VERBATIM (its bounded re-fetch+rebase retry is
|
|
153
|
+
* LOAD-BEARING for a sequential `-n` batch that integrates a build/task rung
|
|
154
|
+
* mid-batch and then runs a later tree-less rung whose `HEAD:main` push is
|
|
155
|
+
* non-fast-forward by construction);
|
|
156
|
+
* - NEVER `--force`. A push that keeps failing (or a genuine rebase conflict)
|
|
157
|
+
* is REPORTED via the `note` sink and does NOT crash the tick — the work
|
|
158
|
+
* stays committed in the cwd for the next pass / a human.
|
|
159
|
+
*
|
|
160
|
+
* Used by BOTH in-place entry points: {@link runSelectedInSequence} (the
|
|
161
|
+
* multi-item `-n` / auto-pick / multi-arg path) AND the CLI single-named-item
|
|
162
|
+
* path (which calls {@link performAdvance} directly, bypassing the sequence
|
|
163
|
+
* runner — the easy-to-miss site).
|
|
164
|
+
*
|
|
165
|
+
* The promote-apply edge mirrors the existing drivers without a special case: an
|
|
166
|
+
* `apply` rung whose agentic verdict mints an artifact (`mint-task`/`mint-prd`)
|
|
167
|
+
* runs `promoteObservation`'s OWN arbiter CAS and commits NOTHING tree-less, so the
|
|
168
|
+
* ff-push here is a harmless no-op (a `HEAD` with nothing new) — it does NOT
|
|
169
|
+
* double-publish nor clobber the promote CAS.
|
|
170
|
+
*/
|
|
171
|
+
export declare function runAdvanceTickWithTreelessPublish(options: AdvanceTickOptions, run: AdvanceTickRunner): Promise<AdvanceResult>;
|
|
172
|
+
/**
|
|
173
|
+
* Is this aggregate result a CALM-AT-REST (US #31 convergence) one — every item
|
|
174
|
+
* that ran was a NO-OP (a pending sidecar idling) AND nothing failed? The
|
|
175
|
+
* convergence/drain tests use this to assert the loop IDLES when there are no
|
|
176
|
+
* answers (no thrash) and DRAINS monotonically as answers arrive. A pool of
|
|
177
|
+
* pending-sidecar items advances NOTHING (every tick a clean no-op); as the human
|
|
178
|
+
* answers, the answered items flip to `apply` and the no-op count shrinks.
|
|
179
|
+
*/
|
|
180
|
+
export declare function isCalmAtRest(result: AdvanceMultiResult): boolean;
|
|
181
|
+
export type { AdvanceOutcome };
|
|
182
|
+
//# sourceMappingURL=advance-drivers.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"advance-drivers.d.ts","sourceRoot":"","sources":["../src/advance-drivers.ts"],"names":[],"mappings":"AAAA,OAAO,EAEN,KAAK,cAAc,EACnB,KAAK,aAAa,EAClB,KAAK,eAAe,EACpB,KAAK,cAAc,EACnB,MAAM,cAAc,CAAC;AAMtB,OAAO,EAAa,KAAK,kBAAkB,EAAC,MAAM,kBAAkB,CAAC;AAQrE,OAAO,KAAK,EAAC,kBAAkB,EAAC,MAAM,sBAAsB,CAAC;AAC7D,OAAO,KAAK,EAAC,MAAM,EAAC,MAAM,aAAa,CAAC;AACxC,OAAO,KAAK,EAAC,iBAAiB,EAAC,MAAM,sBAAsB,CAAC;AAE5D;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA0CG;AAEH,6EAA6E;AAC7E,MAAM,MAAM,iBAAiB,GAAG,CAC/B,OAAO,EAAE,kBAAkB,KACvB,OAAO,CAAC,aAAa,CAAC,CAAC;AAE5B,yEAAyE;AACzE,MAAM,WAAW,kBAAmB,SAAQ,cAAc;IACzD,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,CAAC,EAAE,kBAAkB,CAAC;CAC1B;AAED,sEAAsE;AACtE,KAAK,oBAAoB,GAAG,cAAc,CAAC;AAE3C,MAAM,WAAW,0BAA2B,SAAQ,oBAAoB;IACvE;;;;;;OAMG;IACH,MAAM,EAAE,MAAM,CAAC;IACf;;;;;;OAMG;IACH,QAAQ,CAAC,EAAE,iBAAiB,CAAC;IAC7B;;;;OAIG;IACH,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,iGAAiG;IACjG,GAAG,CAAC,EAAE,iBAAiB,CAAC;IACxB,oFAAoF;IACpF,IAAI,CAAC,EAAE,kBAAkB,CAAC;IAC1B;;;;;;;;;;OAUG;IACH,cAAc,CAAC,EAAE,kBAAkB,CAAC;CACpC;AAED,iEAAiE;AACjE,MAAM,WAAW,kBAAkB;IAClC,kEAAkE;IAClE,OAAO,EAAE,aAAa,EAAE,CAAC;IACzB;;;;;OAKG;IACH,QAAQ,EAAE,eAAe,CAAC;IAC1B,mDAAmD;IACnD,OAAO,EAAE,MAAM,CAAC;CAChB;AAUD;;;;;;;;;;;;;;GAcG;AACH,wBAAsB,kBAAkB,CACvC,OAAO,EAAE,0BAA0B,GACjC,OAAO,CAAC,kBAAkB,CAAC,CAuE7B;AAED;;;;;;;GAOG;AACH,wBAAsB,kBAAkB,CACvC,IAAI,EAAE,MAAM,EAAE,EACd,OAAO,EAAE,0BAA0B,GACjC,OAAO,CAAC,kBAAkB,CAAC,CAU7B;AAqCD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiCG;AACH,wBAAsB,iCAAiC,CACtD,OAAO,EAAE,kBAAkB,EAC3B,GAAG,EAAE,iBAAiB,GACpB,OAAO,CAAC,aAAa,CAAC,CAqBxB;AA+CD;;;;;;;GAOG;AACH,wBAAgB,YAAY,CAAC,MAAM,EAAE,kBAAkB,GAAG,OAAO,CAIhE;AAED,YAAY,EAAC,cAAc,EAAC,CAAC"}
|