dorfl 0.0.0 → 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/advance-ci-template.d.ts +73 -0
- package/dist/advance-ci-template.d.ts.map +1 -0
- package/dist/advance-ci-template.js +104 -0
- package/dist/advance-ci-template.js.map +1 -0
- package/dist/advance-classify.d.ts +132 -0
- package/dist/advance-classify.d.ts.map +1 -0
- package/dist/advance-classify.js +120 -0
- package/dist/advance-classify.js.map +1 -0
- package/dist/advance-drivers.d.ts +182 -0
- package/dist/advance-drivers.d.ts.map +1 -0
- package/dist/advance-drivers.js +231 -0
- package/dist/advance-drivers.js.map +1 -0
- package/dist/advance-isolated.d.ts +156 -0
- package/dist/advance-isolated.d.ts.map +1 -0
- package/dist/advance-isolated.js +256 -0
- package/dist/advance-isolated.js.map +1 -0
- package/dist/advance-lifecycle-template.d.ts +107 -0
- package/dist/advance-lifecycle-template.d.ts.map +1 -0
- package/dist/advance-lifecycle-template.js +668 -0
- package/dist/advance-lifecycle-template.js.map +1 -0
- package/dist/advance-loop-driver.d.ts +325 -0
- package/dist/advance-loop-driver.d.ts.map +1 -0
- package/dist/advance-loop-driver.js +437 -0
- package/dist/advance-loop-driver.js.map +1 -0
- package/dist/advance-treeless-publish.d.ts +108 -0
- package/dist/advance-treeless-publish.d.ts.map +1 -0
- package/dist/advance-treeless-publish.js +71 -0
- package/dist/advance-treeless-publish.js.map +1 -0
- package/dist/advance.d.ts +340 -0
- package/dist/advance.d.ts.map +1 -0
- package/dist/advance.js +1122 -0
- package/dist/advance.js.map +1 -0
- package/dist/advancing-lock.d.ts +294 -0
- package/dist/advancing-lock.d.ts.map +1 -0
- package/dist/advancing-lock.js +594 -0
- package/dist/advancing-lock.js.map +1 -0
- package/dist/agent-launch.d.ts +79 -0
- package/dist/agent-launch.d.ts.map +1 -0
- package/dist/agent-launch.js +61 -0
- package/dist/agent-launch.js.map +1 -0
- package/dist/agent-stop.d.ts +149 -0
- package/dist/agent-stop.d.ts.map +1 -0
- package/dist/agent-stop.js +307 -0
- package/dist/agent-stop.js.map +1 -0
- package/dist/apply-decide.d.ts +127 -0
- package/dist/apply-decide.d.ts.map +1 -0
- package/dist/apply-decide.js +176 -0
- package/dist/apply-decide.js.map +1 -0
- package/dist/apply-merge-action.d.ts +206 -0
- package/dist/apply-merge-action.d.ts.map +1 -0
- package/dist/apply-merge-action.js +307 -0
- package/dist/apply-merge-action.js.map +1 -0
- package/dist/apply-persist.d.ts +174 -0
- package/dist/apply-persist.d.ts.map +1 -0
- package/dist/apply-persist.js +359 -0
- package/dist/apply-persist.js.map +1 -0
- package/dist/arbiter.d.ts +120 -0
- package/dist/arbiter.d.ts.map +1 -0
- package/dist/arbiter.js +255 -0
- package/dist/arbiter.js.map +1 -0
- package/dist/brand.d.ts +70 -0
- package/dist/brand.d.ts.map +1 -0
- package/dist/brand.js +84 -0
- package/dist/brand.js.map +1 -0
- package/dist/buildable-body.d.ts +132 -0
- package/dist/buildable-body.d.ts.map +1 -0
- package/dist/buildable-body.js +131 -0
- package/dist/buildable-body.js.map +1 -0
- package/dist/categorise.d.ts +66 -0
- package/dist/categorise.d.ts.map +1 -0
- package/dist/categorise.js +106 -0
- package/dist/categorise.js.map +1 -0
- package/dist/claim-cas.d.ts +117 -0
- package/dist/claim-cas.d.ts.map +1 -0
- package/dist/claim-cas.js +312 -0
- package/dist/claim-cas.js.map +1 -0
- package/dist/cli-spinner.d.ts +112 -0
- package/dist/cli-spinner.d.ts.map +1 -0
- package/dist/cli-spinner.js +157 -0
- package/dist/cli-spinner.js.map +1 -0
- package/dist/cli.d.ts +11 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +3094 -0
- package/dist/cli.js.map +1 -0
- package/dist/close-job-template.d.ts +70 -0
- package/dist/close-job-template.d.ts.map +1 -0
- package/dist/close-job-template.js +180 -0
- package/dist/close-job-template.js.map +1 -0
- package/dist/close-job.d.ts +95 -0
- package/dist/close-job.d.ts.map +1 -0
- package/dist/close-job.js +226 -0
- package/dist/close-job.js.map +1 -0
- package/dist/complete.d.ts +361 -0
- package/dist/complete.d.ts.map +1 -0
- package/dist/complete.js +885 -0
- package/dist/complete.js.map +1 -0
- package/dist/concurrency.d.ts +68 -0
- package/dist/concurrency.d.ts.map +1 -0
- package/dist/concurrency.js +112 -0
- package/dist/concurrency.js.map +1 -0
- package/dist/config-override.d.ts +76 -0
- package/dist/config-override.d.ts.map +1 -0
- package/dist/config-override.js +50 -0
- package/dist/config-override.js.map +1 -0
- package/dist/config.d.ts +668 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +241 -0
- package/dist/config.js.map +1 -0
- package/dist/continue-branch.d.ts +249 -0
- package/dist/continue-branch.d.ts.map +1 -0
- package/dist/continue-branch.js +389 -0
- package/dist/continue-branch.js.map +1 -0
- package/dist/cwd-section.d.ts +186 -0
- package/dist/cwd-section.d.ts.map +1 -0
- package/dist/cwd-section.js +209 -0
- package/dist/cwd-section.js.map +1 -0
- package/dist/decision-engine.d.ts +170 -0
- package/dist/decision-engine.d.ts.map +1 -0
- package/dist/decision-engine.js +136 -0
- package/dist/decision-engine.js.map +1 -0
- package/dist/detect.d.ts +17 -0
- package/dist/detect.d.ts.map +1 -0
- package/dist/detect.js +118 -0
- package/dist/detect.js.map +1 -0
- package/dist/do-autopick.d.ts +85 -0
- package/dist/do-autopick.d.ts.map +1 -0
- package/dist/do-autopick.js +112 -0
- package/dist/do-autopick.js.map +1 -0
- package/dist/do-config.d.ts +312 -0
- package/dist/do-config.d.ts.map +1 -0
- package/dist/do-config.js +358 -0
- package/dist/do-config.js.map +1 -0
- package/dist/do-remote-auto.d.ts +75 -0
- package/dist/do-remote-auto.d.ts.map +1 -0
- package/dist/do-remote-auto.js +111 -0
- package/dist/do-remote-auto.js.map +1 -0
- package/dist/do.d.ts +621 -0
- package/dist/do.d.ts.map +1 -0
- package/dist/do.js +1882 -0
- package/dist/do.js.map +1 -0
- package/dist/drop-source.d.ts +96 -0
- package/dist/drop-source.d.ts.map +1 -0
- package/dist/drop-source.js +91 -0
- package/dist/drop-source.js.map +1 -0
- package/dist/eligibility.d.ts +46 -0
- package/dist/eligibility.d.ts.map +1 -0
- package/dist/eligibility.js +34 -0
- package/dist/eligibility.js.map +1 -0
- package/dist/env-config.d.ts +51 -0
- package/dist/env-config.d.ts.map +1 -0
- package/dist/env-config.js +272 -0
- package/dist/env-config.js.map +1 -0
- package/dist/failure-cause.d.ts +70 -0
- package/dist/failure-cause.d.ts.map +1 -0
- package/dist/failure-cause.js +126 -0
- package/dist/failure-cause.js.map +1 -0
- package/dist/format.d.ts +43 -0
- package/dist/format.d.ts.map +1 -0
- package/dist/format.js +256 -0
- package/dist/format.js.map +1 -0
- package/dist/frontmatter.d.ts +215 -0
- package/dist/frontmatter.d.ts.map +1 -0
- package/dist/frontmatter.js +345 -0
- package/dist/frontmatter.js.map +1 -0
- package/dist/gate-readiness.d.ts +84 -0
- package/dist/gate-readiness.d.ts.map +1 -0
- package/dist/gate-readiness.js +103 -0
- package/dist/gate-readiness.js.map +1 -0
- package/dist/gc.d.ts +165 -0
- package/dist/gc.d.ts.map +1 -0
- package/dist/gc.js +313 -0
- package/dist/gc.js.map +1 -0
- package/dist/gh-failure.d.ts +42 -0
- package/dist/gh-failure.d.ts.map +1 -0
- package/dist/gh-failure.js +49 -0
- package/dist/gh-failure.js.map +1 -0
- package/dist/git.d.ts +75 -0
- package/dist/git.d.ts.map +1 -0
- package/dist/git.js +130 -0
- package/dist/git.js.map +1 -0
- package/dist/github.d.ts +187 -0
- package/dist/github.d.ts.map +1 -0
- package/dist/github.js +343 -0
- package/dist/github.js.map +1 -0
- package/dist/harness.d.ts +242 -0
- package/dist/harness.d.ts.map +1 -0
- package/dist/harness.js +157 -0
- package/dist/harness.js.map +1 -0
- package/dist/identity.d.ts +167 -0
- package/dist/identity.d.ts.map +1 -0
- package/dist/identity.js +231 -0
- package/dist/identity.js.map +1 -0
- package/dist/index.d.ts +147 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +76 -0
- package/dist/index.js.map +1 -0
- package/dist/install-ci-branch-protection.d.ts +147 -0
- package/dist/install-ci-branch-protection.d.ts.map +1 -0
- package/dist/install-ci-branch-protection.js +166 -0
- package/dist/install-ci-branch-protection.js.map +1 -0
- package/dist/install-ci-capabilities/advance-lifecycle.d.ts +15 -0
- package/dist/install-ci-capabilities/advance-lifecycle.d.ts.map +1 -0
- package/dist/install-ci-capabilities/advance-lifecycle.js +28 -0
- package/dist/install-ci-capabilities/advance-lifecycle.js.map +1 -0
- package/dist/install-ci-capabilities/close-job.d.ts +13 -0
- package/dist/install-ci-capabilities/close-job.d.ts.map +1 -0
- package/dist/install-ci-capabilities/close-job.js +26 -0
- package/dist/install-ci-capabilities/close-job.js.map +1 -0
- package/dist/install-ci-capabilities/example-noop.d.ts +16 -0
- package/dist/install-ci-capabilities/example-noop.d.ts.map +1 -0
- package/dist/install-ci-capabilities/example-noop.js +23 -0
- package/dist/install-ci-capabilities/example-noop.js.map +1 -0
- package/dist/install-ci-capabilities/intake.d.ts +15 -0
- package/dist/install-ci-capabilities/intake.d.ts.map +1 -0
- package/dist/install-ci-capabilities/intake.js +28 -0
- package/dist/install-ci-capabilities/intake.js.map +1 -0
- package/dist/install-ci-capabilities/verify.d.ts +14 -0
- package/dist/install-ci-capabilities/verify.d.ts.map +1 -0
- package/dist/install-ci-capabilities/verify.js +27 -0
- package/dist/install-ci-capabilities/verify.js.map +1 -0
- package/dist/install-ci-core.d.ts +446 -0
- package/dist/install-ci-core.d.ts.map +1 -0
- package/dist/install-ci-core.js +760 -0
- package/dist/install-ci-core.js.map +1 -0
- package/dist/install-ci-github.d.ts +167 -0
- package/dist/install-ci-github.d.ts.map +1 -0
- package/dist/install-ci-github.js +315 -0
- package/dist/install-ci-github.js.map +1 -0
- package/dist/install-ci.d.ts +105 -0
- package/dist/install-ci.d.ts.map +1 -0
- package/dist/install-ci.js +363 -0
- package/dist/install-ci.js.map +1 -0
- package/dist/intake-event.d.ts +88 -0
- package/dist/intake-event.d.ts.map +1 -0
- package/dist/intake-event.js +66 -0
- package/dist/intake-event.js.map +1 -0
- package/dist/intake-marker.d.ts +95 -0
- package/dist/intake-marker.d.ts.map +1 -0
- package/dist/intake-marker.js +127 -0
- package/dist/intake-marker.js.map +1 -0
- package/dist/intake-triage.d.ts +48 -0
- package/dist/intake-triage.d.ts.map +1 -0
- package/dist/intake-triage.js +95 -0
- package/dist/intake-triage.js.map +1 -0
- package/dist/intake-trigger-template.d.ts +185 -0
- package/dist/intake-trigger-template.d.ts.map +1 -0
- package/dist/intake-trigger-template.js +449 -0
- package/dist/intake-trigger-template.js.map +1 -0
- package/dist/intake.d.ts +569 -0
- package/dist/intake.d.ts.map +1 -0
- package/dist/intake.js +1628 -0
- package/dist/intake.js.map +1 -0
- package/dist/integration-core.d.ts +539 -0
- package/dist/integration-core.d.ts.map +1 -0
- package/dist/integration-core.js +2195 -0
- package/dist/integration-core.js.map +1 -0
- package/dist/integrator.d.ts +343 -0
- package/dist/integrator.d.ts.map +1 -0
- package/dist/integrator.js +400 -0
- package/dist/integrator.js.map +1 -0
- package/dist/isolation.d.ts +219 -0
- package/dist/isolation.d.ts.map +1 -0
- package/dist/isolation.js +261 -0
- package/dist/isolation.js.map +1 -0
- package/dist/issue-provider.d.ts +349 -0
- package/dist/issue-provider.d.ts.map +1 -0
- package/dist/issue-provider.js +360 -0
- package/dist/issue-provider.js.map +1 -0
- package/dist/item-lock.d.ts +626 -0
- package/dist/item-lock.d.ts.map +1 -0
- package/dist/item-lock.js +1381 -0
- package/dist/item-lock.js.map +1 -0
- package/dist/item-path.d.ts +49 -0
- package/dist/item-path.d.ts.map +1 -0
- package/dist/item-path.js +66 -0
- package/dist/item-path.js.map +1 -0
- package/dist/ledger-lint.d.ts +129 -0
- package/dist/ledger-lint.d.ts.map +1 -0
- package/dist/ledger-lint.js +249 -0
- package/dist/ledger-lint.js.map +1 -0
- package/dist/ledger-read.d.ts +357 -0
- package/dist/ledger-read.d.ts.map +1 -0
- package/dist/ledger-read.js +442 -0
- package/dist/ledger-read.js.map +1 -0
- package/dist/ledger-write.d.ts +330 -0
- package/dist/ledger-write.d.ts.map +1 -0
- package/dist/ledger-write.js +411 -0
- package/dist/ledger-write.js.map +1 -0
- package/dist/lifecycle-gather.d.ts +30 -0
- package/dist/lifecycle-gather.d.ts.map +1 -0
- package/dist/lifecycle-gather.js +205 -0
- package/dist/lifecycle-gather.js.map +1 -0
- package/dist/lifecycle-pools.d.ts +180 -0
- package/dist/lifecycle-pools.d.ts.map +1 -0
- package/dist/lifecycle-pools.js +78 -0
- package/dist/lifecycle-pools.js.map +1 -0
- package/dist/merge-question-surfacer.d.ts +166 -0
- package/dist/merge-question-surfacer.d.ts.map +1 -0
- package/dist/merge-question-surfacer.js +297 -0
- package/dist/merge-question-surfacer.js.map +1 -0
- package/dist/mint-adr.d.ts +126 -0
- package/dist/mint-adr.d.ts.map +1 -0
- package/dist/mint-adr.js +257 -0
- package/dist/mint-adr.js.map +1 -0
- package/dist/mirror-pool-scan.d.ts +125 -0
- package/dist/mirror-pool-scan.d.ts.map +1 -0
- package/dist/mirror-pool-scan.js +104 -0
- package/dist/mirror-pool-scan.js.map +1 -0
- package/dist/needs-attention.d.ts +341 -0
- package/dist/needs-attention.d.ts.map +1 -0
- package/dist/needs-attention.js +900 -0
- package/dist/needs-attention.js.map +1 -0
- package/dist/orphan-sidecar.d.ts +79 -0
- package/dist/orphan-sidecar.d.ts.map +1 -0
- package/dist/orphan-sidecar.js +71 -0
- package/dist/orphan-sidecar.js.map +1 -0
- package/dist/output.d.ts +48 -0
- package/dist/output.d.ts.map +1 -0
- package/dist/output.js +66 -0
- package/dist/output.js.map +1 -0
- package/dist/pi-harness.d.ts +179 -0
- package/dist/pi-harness.d.ts.map +1 -0
- package/dist/pi-harness.js +342 -0
- package/dist/pi-harness.js.map +1 -0
- package/dist/placement.d.ts +99 -0
- package/dist/placement.d.ts.map +1 -0
- package/dist/placement.js +67 -0
- package/dist/placement.js.map +1 -0
- package/dist/prd-to-spec.d.ts +315 -0
- package/dist/prd-to-spec.d.ts.map +1 -0
- package/dist/prd-to-spec.js +684 -0
- package/dist/prd-to-spec.js.map +1 -0
- package/dist/prepare.d.ts +121 -0
- package/dist/prepare.d.ts.map +1 -0
- package/dist/prepare.js +140 -0
- package/dist/prepare.js.map +1 -0
- package/dist/prompt.d.ts +360 -0
- package/dist/prompt.d.ts.map +1 -0
- package/dist/prompt.js +499 -0
- package/dist/prompt.js.map +1 -0
- package/dist/protocol/ADR-FORMAT.md +47 -0
- package/dist/protocol/CLAIM-PROTOCOL.md +217 -0
- package/dist/protocol/REVIEW-PROTOCOL.md +119 -0
- package/dist/protocol/SURFACE-PROTOCOL.md +121 -0
- package/dist/protocol/TASKING-PROTOCOL.md +122 -0
- package/dist/protocol/WORK-CONTRACT.md +276 -0
- package/dist/protocol/spec-template.md +71 -0
- package/dist/protocol/task-template.md +65 -0
- package/dist/readiness.d.ts +66 -0
- package/dist/readiness.d.ts.map +1 -0
- package/dist/readiness.js +36 -0
- package/dist/readiness.js.map +1 -0
- package/dist/reap-branches.d.ts +102 -0
- package/dist/reap-branches.d.ts.map +1 -0
- package/dist/reap-branches.js +149 -0
- package/dist/reap-branches.js.map +1 -0
- package/dist/recover-isolated.d.ts +72 -0
- package/dist/recover-isolated.d.ts.map +1 -0
- package/dist/recover-isolated.js +188 -0
- package/dist/recover-isolated.js.map +1 -0
- package/dist/registry.d.ts +172 -0
- package/dist/registry.d.ts.map +1 -0
- package/dist/registry.js +296 -0
- package/dist/registry.js.map +1 -0
- package/dist/repo-config.d.ts +201 -0
- package/dist/repo-config.d.ts.map +1 -0
- package/dist/repo-config.js +414 -0
- package/dist/repo-config.js.map +1 -0
- package/dist/repo-key.d.ts +20 -0
- package/dist/repo-key.d.ts.map +1 -0
- package/dist/repo-key.js +68 -0
- package/dist/repo-key.js.map +1 -0
- package/dist/repo-mirror.d.ts +177 -0
- package/dist/repo-mirror.d.ts.map +1 -0
- package/dist/repo-mirror.js +271 -0
- package/dist/repo-mirror.js.map +1 -0
- package/dist/retry-backoff.d.ts +90 -0
- package/dist/retry-backoff.d.ts.map +1 -0
- package/dist/retry-backoff.js +98 -0
- package/dist/retry-backoff.js.map +1 -0
- package/dist/review-gate.d.ts +173 -0
- package/dist/review-gate.d.ts.map +1 -0
- package/dist/review-gate.js +261 -0
- package/dist/review-gate.js.map +1 -0
- package/dist/review-verdict.d.ts +149 -0
- package/dist/review-verdict.d.ts.map +1 -0
- package/dist/review-verdict.js +332 -0
- package/dist/review-verdict.js.map +1 -0
- package/dist/run.d.ts +221 -0
- package/dist/run.d.ts.map +1 -0
- package/dist/run.js +963 -0
- package/dist/run.js.map +1 -0
- package/dist/scan.d.ts +308 -0
- package/dist/scan.d.ts.map +1 -0
- package/dist/scan.js +374 -0
- package/dist/scan.js.map +1 -0
- package/dist/select-order.d.ts +75 -0
- package/dist/select-order.d.ts.map +1 -0
- package/dist/select-order.js +108 -0
- package/dist/select-order.js.map +1 -0
- package/dist/select-priority.d.ts +188 -0
- package/dist/select-priority.d.ts.map +1 -0
- package/dist/select-priority.js +80 -0
- package/dist/select-priority.js.map +1 -0
- package/dist/select.d.ts +25 -0
- package/dist/select.d.ts.map +1 -0
- package/dist/select.js +43 -0
- package/dist/select.js.map +1 -0
- package/dist/session-path.d.ts +36 -0
- package/dist/session-path.d.ts.map +1 -0
- package/dist/session-path.js +129 -0
- package/dist/session-path.js.map +1 -0
- package/dist/sidecar-apply.d.ts +83 -0
- package/dist/sidecar-apply.d.ts.map +1 -0
- package/dist/sidecar-apply.js +111 -0
- package/dist/sidecar-apply.js.map +1 -0
- package/dist/sidecar.d.ts +245 -0
- package/dist/sidecar.d.ts.map +1 -0
- package/dist/sidecar.js +481 -0
- package/dist/sidecar.js.map +1 -0
- package/dist/slug-namespace.d.ts +204 -0
- package/dist/slug-namespace.d.ts.map +1 -0
- package/dist/slug-namespace.js +229 -0
- package/dist/slug-namespace.js.map +1 -0
- package/dist/spec-complete.d.ts +44 -0
- package/dist/spec-complete.d.ts.map +1 -0
- package/dist/spec-complete.js +69 -0
- package/dist/spec-complete.js.map +1 -0
- package/dist/start.d.ts +97 -0
- package/dist/start.d.ts.map +1 -0
- package/dist/start.js +633 -0
- package/dist/start.js.map +1 -0
- package/dist/status.d.ts +199 -0
- package/dist/status.d.ts.map +1 -0
- package/dist/status.js +228 -0
- package/dist/status.js.map +1 -0
- package/dist/surface-gate.d.ts +162 -0
- package/dist/surface-gate.d.ts.map +1 -0
- package/dist/surface-gate.js +206 -0
- package/dist/surface-gate.js.map +1 -0
- package/dist/surface-persist.d.ts +86 -0
- package/dist/surface-persist.d.ts.map +1 -0
- package/dist/surface-persist.js +129 -0
- package/dist/surface-persist.js.map +1 -0
- package/dist/tasker-review-loop.d.ts +249 -0
- package/dist/tasker-review-loop.d.ts.map +1 -0
- package/dist/tasker-review-loop.js +369 -0
- package/dist/tasker-review-loop.js.map +1 -0
- package/dist/tasking-eligibility.d.ts +74 -0
- package/dist/tasking-eligibility.d.ts.map +1 -0
- package/dist/tasking-eligibility.js +52 -0
- package/dist/tasking-eligibility.js.map +1 -0
- package/dist/tasking-lock.d.ts +111 -0
- package/dist/tasking-lock.d.ts.map +1 -0
- package/dist/tasking-lock.js +256 -0
- package/dist/tasking-lock.js.map +1 -0
- package/dist/tasking.d.ts +275 -0
- package/dist/tasking.d.ts.map +1 -0
- package/dist/tasking.js +952 -0
- package/dist/tasking.js.map +1 -0
- package/dist/triage-gate.d.ts +127 -0
- package/dist/triage-gate.d.ts.map +1 -0
- package/dist/triage-gate.js +139 -0
- package/dist/triage-gate.js.map +1 -0
- package/dist/triage-persist.d.ts +163 -0
- package/dist/triage-persist.d.ts.map +1 -0
- package/dist/triage-persist.js +387 -0
- package/dist/triage-persist.js.map +1 -0
- package/dist/verdict-json.d.ts +32 -0
- package/dist/verdict-json.d.ts.map +1 -0
- package/dist/verdict-json.js +74 -0
- package/dist/verdict-json.js.map +1 -0
- package/dist/verify-workflow-template.d.ts +60 -0
- package/dist/verify-workflow-template.d.ts.map +1 -0
- package/dist/verify-workflow-template.js +126 -0
- package/dist/verify-workflow-template.js.map +1 -0
- package/dist/verify.d.ts +60 -0
- package/dist/verify.d.ts.map +1 -0
- package/dist/verify.js +62 -0
- package/dist/verify.js.map +1 -0
- package/dist/watch-session.d.ts +112 -0
- package/dist/watch-session.d.ts.map +1 -0
- package/dist/watch-session.js +347 -0
- package/dist/watch-session.js.map +1 -0
- package/dist/work-layout.d.ts +198 -0
- package/dist/work-layout.d.ts.map +1 -0
- package/dist/work-layout.js +217 -0
- package/dist/work-layout.js.map +1 -0
- package/dist/work-on.d.ts +154 -0
- package/dist/work-on.d.ts.map +1 -0
- package/dist/work-on.js +387 -0
- package/dist/work-on.js.map +1 -0
- package/dist/workspace.d.ts +224 -0
- package/dist/workspace.d.ts.map +1 -0
- package/dist/workspace.js +325 -0
- package/dist/workspace.js.map +1 -0
- package/package.json +46 -2
- package/src/advance-ci-template.ts +203 -0
- package/src/advance-classify.ts +197 -0
- package/src/advance-drivers.ts +414 -0
- package/src/advance-isolated.ts +432 -0
- package/src/advance-lifecycle-template.ts +791 -0
- package/src/advance-loop-driver.ts +745 -0
- package/src/advance-treeless-publish.ts +177 -0
- package/src/advance.ts +1564 -0
- package/src/advancing-lock.ts +988 -0
- package/src/agent-launch.ts +137 -0
- package/src/agent-stop.ts +361 -0
- package/src/apply-decide.ts +242 -0
- package/src/apply-merge-action.ts +502 -0
- package/src/apply-persist.ts +518 -0
- package/src/arbiter.ts +372 -0
- package/src/brand.ts +111 -0
- package/src/buildable-body.ts +196 -0
- package/src/categorise.ts +158 -0
- package/src/claim-cas.ts +513 -0
- package/src/cli-spinner.ts +225 -0
- package/src/cli.ts +4369 -0
- package/src/close-job-template.ts +236 -0
- package/src/close-job.ts +319 -0
- package/src/complete.ts +1379 -0
- package/src/concurrency.ts +151 -0
- package/src/config-override.ts +116 -0
- package/src/config.ts +883 -0
- package/src/continue-branch.ts +542 -0
- package/src/cwd-section.ts +392 -0
- package/src/decision-engine.ts +272 -0
- package/src/detect.ts +124 -0
- package/src/do-autopick.ts +223 -0
- package/src/do-config.ts +589 -0
- package/src/do-remote-auto.ts +197 -0
- package/src/do.ts +2623 -0
- package/src/drop-source.ts +194 -0
- package/src/eligibility.ts +79 -0
- package/src/env-config.ts +305 -0
- package/src/failure-cause.ts +142 -0
- package/src/format.ts +313 -0
- package/src/frontmatter.ts +485 -0
- package/src/gate-readiness.ts +147 -0
- package/src/gc.ts +510 -0
- package/src/gh-failure.ts +53 -0
- package/src/git.ts +186 -0
- package/src/github.ts +468 -0
- package/src/harness.ts +355 -0
- package/src/identity.ts +322 -0
- package/src/index.ts +785 -0
- package/src/install-ci-branch-protection.ts +255 -0
- package/src/install-ci-capabilities/advance-lifecycle.ts +34 -0
- package/src/install-ci-capabilities/close-job.ts +32 -0
- package/src/install-ci-capabilities/example-noop.ts +24 -0
- package/src/install-ci-capabilities/intake.ts +34 -0
- package/src/install-ci-capabilities/verify.ts +33 -0
- package/src/install-ci-core.ts +1088 -0
- package/src/install-ci-github.ts +376 -0
- package/src/install-ci.ts +552 -0
- package/src/intake-event.ts +102 -0
- package/src/intake-marker.ts +195 -0
- package/src/intake-triage.ts +138 -0
- package/src/intake-trigger-template.ts +591 -0
- package/src/intake.ts +2445 -0
- package/src/integration-core.ts +3065 -0
- package/src/integrator.ts +771 -0
- package/src/isolation.ts +484 -0
- package/src/issue-provider.ts +733 -0
- package/src/item-lock.ts +1858 -0
- package/src/item-path.ts +75 -0
- package/src/ledger-lint.ts +332 -0
- package/src/ledger-read.ts +924 -0
- package/src/ledger-write.ts +865 -0
- package/src/lifecycle-gather.ts +298 -0
- package/src/lifecycle-pools.ts +250 -0
- package/src/merge-question-surfacer.ts +496 -0
- package/src/mint-adr.ts +362 -0
- package/src/mirror-pool-scan.ts +240 -0
- package/src/needs-attention.ts +1506 -0
- package/src/orphan-sidecar.ts +150 -0
- package/src/output.ts +89 -0
- package/src/pi-harness.ts +403 -0
- package/src/placement.ts +131 -0
- package/src/prd-to-spec.ts +1023 -0
- package/src/prepare.ts +230 -0
- package/src/prompt.ts +760 -0
- package/src/readiness.ts +98 -0
- package/src/reap-branches.ts +278 -0
- package/src/recover-isolated.ts +276 -0
- package/src/registry.ts +475 -0
- package/src/repo-config.ts +550 -0
- package/src/repo-key.ts +74 -0
- package/src/repo-mirror.ts +367 -0
- package/src/retry-backoff.ts +130 -0
- package/src/review-gate.ts +389 -0
- package/src/review-verdict.ts +422 -0
- package/src/run.ts +1430 -0
- package/src/scan.ts +611 -0
- package/src/select-order.ts +143 -0
- package/src/select-priority.ts +266 -0
- package/src/select.ts +62 -0
- package/src/session-path.ts +153 -0
- package/src/sidecar-apply.ts +216 -0
- package/src/sidecar.ts +700 -0
- package/src/slug-namespace.ts +367 -0
- package/src/spec-complete.ts +118 -0
- package/src/start.ts +974 -0
- package/src/status.ts +441 -0
- package/src/surface-gate.ts +337 -0
- package/src/surface-persist.ts +241 -0
- package/src/tasker-review-loop.ts +671 -0
- package/src/tasking-eligibility.ts +114 -0
- package/src/tasking-lock.ts +416 -0
- package/src/tasking.ts +1438 -0
- package/src/triage-gate.ts +248 -0
- package/src/triage-persist.ts +570 -0
- package/src/verdict-json.ts +73 -0
- package/src/verify-workflow-template.ts +159 -0
- package/src/verify.ts +123 -0
- package/src/watch-session.ts +397 -0
- package/src/work-layout.ts +262 -0
- package/src/work-on.ts +660 -0
- package/src/workspace.ts +502 -0
package/dist/scan.js
ADDED
|
@@ -0,0 +1,374 @@
|
|
|
1
|
+
import { resolveEligibility } from './eligibility.js';
|
|
2
|
+
import { ledgerRead, } from './ledger-read.js';
|
|
3
|
+
import { listMirrors } from './registry.js';
|
|
4
|
+
import { fetchMirrorMainOrWarn, resolveRepoConfigFromMirror, } from './repo-mirror.js';
|
|
5
|
+
import { resolveRepoConfig } from './repo-config.js';
|
|
6
|
+
import { taskableSpecs } from './select-priority.js';
|
|
7
|
+
import { lintLocalLedger, lintRefLedger, } from './ledger-lint.js';
|
|
8
|
+
import { gatherLifecycleInPlace, gatherLifecycleMirror, } from './lifecycle-gather.js';
|
|
9
|
+
import { heldTaskSlugs, listItemLockEntries, } from './item-lock.js';
|
|
10
|
+
/**
|
|
11
|
+
* The CREATE-side lifecycle gates for the propose-matrix lifecycle pool, derived
|
|
12
|
+
* from a repo's resolved config. Maps the config's question-surfacing gate family
|
|
13
|
+
* onto the boolean {@link LifecyclePoolGates} `buildLifecyclePools` takes:
|
|
14
|
+
*
|
|
15
|
+
* - `observationTriage !== 'off'` ⇒ `triage` ON (BOTH `ask` and `auto` enumerate
|
|
16
|
+
* triage candidates into the matrix identically; the ask/auto distinction is a
|
|
17
|
+
* DISPOSITION concern enforced LATER by the triage rung itself, not by whether
|
|
18
|
+
* a leg exists — the matrix only decides "is there a leg at all?").
|
|
19
|
+
* - `surfaceBlockers` ⇒ `surface` ON.
|
|
20
|
+
*
|
|
21
|
+
* `apply` is NOT a gate (CONSUME is always-on; `buildLifecyclePools` enumerates
|
|
22
|
+
* answered sidecars regardless), so a committed answer always applies even with
|
|
23
|
+
* both create-gates calm — the same create-vs-consume invariant the autopick
|
|
24
|
+
* drivers honour (ADR `ci-config-policy-and-gate-family` §4). Reused on BOTH the
|
|
25
|
+
* mirror (`scan`) and in-place (`scanRepoPaths`) substrates so the propose matrix
|
|
26
|
+
* agrees with the `advance -n` / `run` selection.
|
|
27
|
+
*/
|
|
28
|
+
export function lifecycleGatesFrom(config) {
|
|
29
|
+
return {
|
|
30
|
+
triage: config.observationTriage !== 'off',
|
|
31
|
+
surface: config.surfaceBlockers === true,
|
|
32
|
+
surfaceStaging: config.surfaceStaging === true,
|
|
33
|
+
};
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Collect the set of slugs present in a repo's `work/done/`. Used to resolve
|
|
37
|
+
* `blockedBy` (per-repo only). Falls back to the filename when an item has no
|
|
38
|
+
* `slug` frontmatter. Resolves THROUGH the read seam's local-tree method
|
|
39
|
+
* ({@link ledgerRead}) — the single insertion point for the `work/` state read.
|
|
40
|
+
*/
|
|
41
|
+
export function readDoneSlugs(repoPath) {
|
|
42
|
+
return ledgerRead.resolveLocalState({ repoPath }).doneSlugs;
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Read and parse every `work/tasks/ready/*.md` (the agent POOL) for a repo, sorted
|
|
46
|
+
* by slug. Resolves THROUGH the read seam's local-tree method
|
|
47
|
+
* ({@link ledgerRead}).
|
|
48
|
+
*/
|
|
49
|
+
export function readReadyItems(repoPath) {
|
|
50
|
+
return ledgerRead.resolveLocalState({ repoPath }).ready;
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* Resolve a per-repo `ScannedItem[]` from an already-resolved `work/` state +
|
|
54
|
+
* the repo's `autoBuild` policy. The shared core of BOTH the registry scan
|
|
55
|
+
* (mirror-ref state) and the working-tree scan (`run`/in-place) — neither learns
|
|
56
|
+
* how the `work/` state was read; they just hand it here. Exported so the
|
|
57
|
+
* MIRROR-SIDE pool scan (`mirror-pool-scan.ts`) scores the bare-mirror task pool
|
|
58
|
+
* through the EXACT same eligibility path as in-place (`do-autopick`), not a fork.
|
|
59
|
+
*/
|
|
60
|
+
/**
|
|
61
|
+
* Score a prd pool down to its TASKABLE subset, then label every prd with
|
|
62
|
+
* `eligibility.eligible` (true ⇔ taskable). REUSES {@link taskableSpecs} —
|
|
63
|
+
* the SAME `autoslice-gate` predicate the mirror-side `scanMirrorPool` + the
|
|
64
|
+
* in-place `do-autopick` pool already run — so what is taskable does not
|
|
65
|
+
* fork between the autopick paths and the propose-matrix `scan --json` pool.
|
|
66
|
+
* The `autoTask` gate BINDS through that predicate; a config-less repo with
|
|
67
|
+
* `autoTask` off yields an all-`eligible:false` pool (no `spec:` legs).
|
|
68
|
+
*/
|
|
69
|
+
export function scoreSpecs(repoPath, pool, autoTask) {
|
|
70
|
+
const taskable = new Set(taskableSpecs({
|
|
71
|
+
candidates: pool.specs.map((p) => ({
|
|
72
|
+
repoPath,
|
|
73
|
+
slug: p.slug,
|
|
74
|
+
humanOnly: p.humanOnly,
|
|
75
|
+
needsAnswers: p.needsAnswers,
|
|
76
|
+
taskedAfter: p.taskedAfter,
|
|
77
|
+
})),
|
|
78
|
+
taskedSlugs: pool.taskedSlugs,
|
|
79
|
+
autoTask,
|
|
80
|
+
}).map((p) => p.slug));
|
|
81
|
+
return pool.specs.map((p) => ({
|
|
82
|
+
slug: p.slug,
|
|
83
|
+
eligibility: { eligible: taskable.has(p.slug) },
|
|
84
|
+
}));
|
|
85
|
+
}
|
|
86
|
+
/**
|
|
87
|
+
* Project the shared {@link buildLifecyclePools} result (via `gatherLifecycle*`)
|
|
88
|
+
* onto the `scan --json` {@link ScannedLifecycle} shape: triage items keep only
|
|
89
|
+
* their `slug` (the `obs:` prefix is fixed in the matrix `jq`), surface/apply keep
|
|
90
|
+
* `{namespace, slug}` so the `jq` projects the right `task:`/`spec:` prefix. NOT a
|
|
91
|
+
* re-enumeration — a pure shape map over the already-gated pools.
|
|
92
|
+
*
|
|
93
|
+
* The pool items' `namespace` is the wider {@link SelectedNamespace}. SURFACE by
|
|
94
|
+
* construction only carries `'task'`/`'prd'` (an observation with no sidecar is a
|
|
95
|
+
* `triage` candidate, never `surface`), so it narrows + drops any non-task/prd
|
|
96
|
+
* defensively. APPLY additionally admits `'observation'` (an answered observation
|
|
97
|
+
* sidecar → apply), and it MUST be kept so the matrix `jq` emits its
|
|
98
|
+
* `observation:<slug>` apply leg — narrowing it away here is exactly what stranded
|
|
99
|
+
* answered observations (present in neither `triage` nor `apply`). Any OTHER
|
|
100
|
+
* namespace is still dropped defensively.
|
|
101
|
+
*/
|
|
102
|
+
export function toScannedLifecycle(pools) {
|
|
103
|
+
const BLOCKED_NAMESPACES = new Set(['task', 'spec', 'observation']);
|
|
104
|
+
// SURFACE stays task/spec-only; APPLY additionally keeps an answered observation.
|
|
105
|
+
const asBlocked = (items, allowObservation) => items
|
|
106
|
+
.filter((i) => i.namespace === 'task' ||
|
|
107
|
+
i.namespace === 'spec' ||
|
|
108
|
+
(allowObservation && i.namespace === 'observation'))
|
|
109
|
+
.filter((i) => BLOCKED_NAMESPACES.has(i.namespace))
|
|
110
|
+
.map((i) => ({
|
|
111
|
+
namespace: i.namespace,
|
|
112
|
+
slug: i.slug,
|
|
113
|
+
}));
|
|
114
|
+
return {
|
|
115
|
+
triage: pools.triage.map((t) => ({ slug: t.slug })),
|
|
116
|
+
surface: asBlocked(pools.surface, false),
|
|
117
|
+
apply: asBlocked(pools.apply, true),
|
|
118
|
+
};
|
|
119
|
+
}
|
|
120
|
+
export function scoreItems(state, autoBuild, counts, heldSlugs = new Set()) {
|
|
121
|
+
// HELD-SLUG SUBTRACTION (prd `ledger-status-per-item-lock-refs` US #15; task
|
|
122
|
+
// `claim-acquires-unified-lock-no-body-move`): exclude any pool slug whose
|
|
123
|
+
// per-item lock is currently held — the eligible pool is "in `tasks/ready/` on
|
|
124
|
+
// `main` AND no lock held".
|
|
125
|
+
//
|
|
126
|
+
// LOAD-BEARING since the lock cut-over: the claim NO LONGER moves the body to
|
|
127
|
+
// `in-progress/` (it stays at `tasks/ready/` on `main`, the held lock IS the
|
|
128
|
+
// claim), so this subtraction is the ONLY thing keeping a claimed / in-flight
|
|
129
|
+
// item out of the eligible pool, NOT the redundant belt-and-suspenders it was
|
|
130
|
+
// while the body-move still removed claimed items. An ACTIVE (in-progress) lock
|
|
131
|
+
// is a legitimate, primary claim signal here.
|
|
132
|
+
//
|
|
133
|
+
// FAIL-OPEN CAVEAT (known defect; selection should fail CLOSED): the held set
|
|
134
|
+
// is gathered by the CALLER and is EMPTY when the lock read is
|
|
135
|
+
// unavailable/offline, so a READ FAULT currently degrades to "subtract nothing"
|
|
136
|
+
// and an in-flight item can leak back into the pool (re-claimed → empty diff →
|
|
137
|
+
// spurious `stuck`). Now that the subtraction is load-bearing this is wrong for
|
|
138
|
+
// SELECTION: a failed lock read must not re-make a held item eligible. See the
|
|
139
|
+
// observation/task on fail-closed lock-read for selection.
|
|
140
|
+
return state.ready
|
|
141
|
+
.filter((item) => !heldSlugs.has(item.slug))
|
|
142
|
+
.map((item) => {
|
|
143
|
+
const eligibility = resolveEligibility({
|
|
144
|
+
humanOnly: item.humanOnly,
|
|
145
|
+
needsAnswers: item.needsAnswers,
|
|
146
|
+
blockedBy: item.blockedBy,
|
|
147
|
+
doneSlugs: state.doneSlugs,
|
|
148
|
+
autoBuild,
|
|
149
|
+
});
|
|
150
|
+
counts.totalItems++;
|
|
151
|
+
if (eligibility.eligible) {
|
|
152
|
+
counts.totalEligible++;
|
|
153
|
+
}
|
|
154
|
+
return { ...item, eligibility };
|
|
155
|
+
});
|
|
156
|
+
}
|
|
157
|
+
/**
|
|
158
|
+
* Read-only end-to-end scan over the REGISTRY (ADR §1): enumerate the registered
|
|
159
|
+
* hub mirrors under `<workspacesDir>/repos/`, **fetch each mirror's `main` first**
|
|
160
|
+
* (ADR §5/§6 — the remote is the source of truth in the registry model), then read
|
|
161
|
+
* each one's full `work/` lifecycle from its BARE `main` ref through the read
|
|
162
|
+
* seam's mirror method (mirrors have no working tree — `resolveLocalState`'s
|
|
163
|
+
* `readdirSync` cannot read them), and resolve eligibility per item (autonomy
|
|
164
|
+
* gate + per-repo `blockedBy`). Claims and runs nothing.
|
|
165
|
+
*
|
|
166
|
+
* **Fetch-first, never fatal:** the old "scan is always offline" invariant is
|
|
167
|
+
* RETIRED (it was the roots-local model); `scan` now refreshes each mirror's
|
|
168
|
+
* `main` before reading. A failed fetch (offline, dead arbiter) is NOT an error —
|
|
169
|
+
* it WARNS via `warn` and falls back to that mirror's last-known `main`, so the
|
|
170
|
+
* queue still reports (its freshness = the last successful fetch). This does NOT
|
|
171
|
+
* change the ledger read STRATEGY (`claim-ledger-vs-protected-main.md`): the
|
|
172
|
+
* offline read of `<mirror>/main:work/...` stays the single strategy — `scan`
|
|
173
|
+
* merely ensures that ref is fresh before reading it.
|
|
174
|
+
*
|
|
175
|
+
* Discovery is the registered hub-mirror set, NOT a config `roots` walk (there is
|
|
176
|
+
* no `roots`/`remotes` field). `scan`/`status` share the {@link listMirrors}
|
|
177
|
+
* primitive; the per-repo `work/` read goes through the seam's mirror-ref method.
|
|
178
|
+
*
|
|
179
|
+
* The autonomy gate's `autoBuild` policy is resolved PER REPO. NOTE: a bare
|
|
180
|
+
* mirror has no checked-out `.dorfl.json`, so the per-repo file cannot be
|
|
181
|
+
* read from it — the global/env-resolved policy applies (the per-repo override is
|
|
182
|
+
* a working-checkout concern, served by {@link scanRepoPaths}).
|
|
183
|
+
*/
|
|
184
|
+
export async function scan(config, options = {}) {
|
|
185
|
+
const mirrors = listMirrors({
|
|
186
|
+
workspacesDir: config.workspacesDir,
|
|
187
|
+
env: options.env,
|
|
188
|
+
});
|
|
189
|
+
const repos = [];
|
|
190
|
+
const counts = { totalItems: 0, totalEligible: 0 };
|
|
191
|
+
for (const mirror of mirrors) {
|
|
192
|
+
// Fetch-first (ADR §5/§6): refresh this mirror's `main` so the read below
|
|
193
|
+
// sees the remote truth. Never fatal — a failed fetch WARNS and falls back to
|
|
194
|
+
// the mirror's last-known `main` (the read strategy is unchanged).
|
|
195
|
+
fetchMirrorMainOrWarn({
|
|
196
|
+
mirrorPath: mirror.path,
|
|
197
|
+
warn: options.warn,
|
|
198
|
+
env: options.env,
|
|
199
|
+
});
|
|
200
|
+
// Read the full `work/` lifecycle from the mirror's bare `main` ref through
|
|
201
|
+
// the read seam (git ls-tree/show; NOT a working-tree read).
|
|
202
|
+
const state = await ledgerRead.resolveMirrorState({
|
|
203
|
+
mirrorPath: mirror.path,
|
|
204
|
+
env: options.env,
|
|
205
|
+
});
|
|
206
|
+
const autoBuild = resolveRepoConfig({
|
|
207
|
+
repoPath: mirror.path,
|
|
208
|
+
global: config,
|
|
209
|
+
override: options.override,
|
|
210
|
+
}).config.autoBuild;
|
|
211
|
+
// Held-slug subtraction: a bare hub mirror's arbiter is its `origin`. Reads
|
|
212
|
+
// the lock refs from the mirror's origin; non-fatal (empty set on any fault),
|
|
213
|
+
// so the read-only scan degrades gracefully exactly as its config reads do.
|
|
214
|
+
const heldSlugs = await heldTaskSlugs(mirror.path, 'origin', options.env);
|
|
215
|
+
// The PER-ITEM LOCK in-flight view (prd US #8; task
|
|
216
|
+
// `needs-attention-as-stuck-lock-state`): ADDITIONALLY read the full held
|
|
217
|
+
// lock entries (action × state + reason) from the mirror's lock refs, so the
|
|
218
|
+
// scan surfaces held (in-progress) + stuck (needs-attention) items. Read from
|
|
219
|
+
// the mirror's `origin` (the SAME handle the held-slug subtraction uses);
|
|
220
|
+
// best-effort (empty list on any fault), so the read-only scan degrades
|
|
221
|
+
// gracefully. This is a SURFACE only — eligibility/selection stay offline on
|
|
222
|
+
// `main` (the subtraction above), not gated on this view.
|
|
223
|
+
const lockHeld = await listItemLockEntries(mirror.path, 'origin', options.env);
|
|
224
|
+
// Spec pool — the TASKABLE-PRD companion of the task pool above
|
|
225
|
+
// (`ci-propose-matrix-must-enumerate-sliceable-prds-not-only-slices`). Resolve
|
|
226
|
+
// `autoTask` PER REPO from the mirror's COMMITTED `.dorfl.json`
|
|
227
|
+
// (exactly as the mirror-side pool scan does — NOT forked); a read fault is
|
|
228
|
+
// non-fatal (warn + global fall-back), since `scan` is read-only and must
|
|
229
|
+
// degrade gracefully (ADR §5/§6).
|
|
230
|
+
let repoAutoTask = config.autoTask;
|
|
231
|
+
try {
|
|
232
|
+
repoAutoTask = resolveRepoConfigFromMirror({
|
|
233
|
+
mirrorPath: mirror.path,
|
|
234
|
+
global: config,
|
|
235
|
+
env: options.env,
|
|
236
|
+
override: options.override,
|
|
237
|
+
}).autoTask;
|
|
238
|
+
}
|
|
239
|
+
catch (err) {
|
|
240
|
+
const reason = err instanceof Error ? err.message : String(err);
|
|
241
|
+
options.warn?.(`could not read the target repo's config from ${mirror.path}/main; ` +
|
|
242
|
+
`resolving autoTask from global + default. ${reason}`);
|
|
243
|
+
}
|
|
244
|
+
const specPool = await ledgerRead.resolveMirrorSpecPool({
|
|
245
|
+
mirrorPath: mirror.path,
|
|
246
|
+
env: options.env,
|
|
247
|
+
});
|
|
248
|
+
const specs = scoreSpecs(mirror.path, specPool, repoAutoTask);
|
|
249
|
+
// The per-repo LIFECYCLE pool (`ci-propose-matrix-enumerates-lifecycle-items`),
|
|
250
|
+
// gated by this mirror's question-surfacing config (resolved from its committed
|
|
251
|
+
// `.dorfl.json`, with the same non-fatal global fall-back as `autoTask`
|
|
252
|
+
// above) and computed by REUSING `gatherLifecycleMirror` → `buildLifecyclePools`
|
|
253
|
+
// (NOT a forked predicate), so it AGREES with the `run` selection.
|
|
254
|
+
let repoLifecycleConfig = {
|
|
255
|
+
observationTriage: config.observationTriage,
|
|
256
|
+
surfaceBlockers: config.surfaceBlockers,
|
|
257
|
+
surfaceStaging: config.surfaceStaging,
|
|
258
|
+
};
|
|
259
|
+
try {
|
|
260
|
+
const resolved = resolveRepoConfigFromMirror({
|
|
261
|
+
mirrorPath: mirror.path,
|
|
262
|
+
global: config,
|
|
263
|
+
env: options.env,
|
|
264
|
+
override: options.override,
|
|
265
|
+
});
|
|
266
|
+
repoLifecycleConfig = {
|
|
267
|
+
observationTriage: resolved.observationTriage,
|
|
268
|
+
surfaceBlockers: resolved.surfaceBlockers,
|
|
269
|
+
surfaceStaging: resolved.surfaceStaging,
|
|
270
|
+
};
|
|
271
|
+
}
|
|
272
|
+
catch {
|
|
273
|
+
// Non-fatal: a config read fault already WARNED on the `autoTask` read
|
|
274
|
+
// above; fall back to the global-resolved gates (scan is read-only and must
|
|
275
|
+
// degrade gracefully, ADR §5/§6).
|
|
276
|
+
}
|
|
277
|
+
const lifecycle = toScannedLifecycle(await gatherLifecycleMirror({
|
|
278
|
+
mirrorPath: mirror.path,
|
|
279
|
+
gates: lifecycleGatesFrom(repoLifecycleConfig),
|
|
280
|
+
env: options.env,
|
|
281
|
+
}));
|
|
282
|
+
// The one-slug-one-folder LINT (prd story 3): derive any slug residing in >1
|
|
283
|
+
// status folder from the mirror's committed `main` tree (the SAME `ls-tree`
|
|
284
|
+
// read the seam uses), so a corrupt ledger is surfaced LOUDLY by the formatter.
|
|
285
|
+
const ledgerDuplicates = lintRefLedger('main', mirror.path, options.env);
|
|
286
|
+
repos.push({
|
|
287
|
+
path: mirror.path,
|
|
288
|
+
items: scoreItems(state, autoBuild, counts, heldSlugs),
|
|
289
|
+
specs,
|
|
290
|
+
lifecycle,
|
|
291
|
+
ledgerDuplicates,
|
|
292
|
+
lockHeld,
|
|
293
|
+
});
|
|
294
|
+
}
|
|
295
|
+
return {
|
|
296
|
+
repos,
|
|
297
|
+
totalItems: counts.totalItems,
|
|
298
|
+
totalEligible: counts.totalEligible,
|
|
299
|
+
};
|
|
300
|
+
}
|
|
301
|
+
/**
|
|
302
|
+
* Read-only scan over an EXPLICIT set of working checkouts, used by the in-place
|
|
303
|
+
* worker paths (`run`) that operate on a real checkout rather than the registry's
|
|
304
|
+
* bare mirrors. This is a working-TREE read (it has nothing to fetch — the
|
|
305
|
+
* checkout IS the local state); the fetch-first contract (ADR §5/§6) applies to
|
|
306
|
+
* the REGISTRY `scan` above, which refreshes each bare mirror before reading.
|
|
307
|
+
* Reads each repo's `work/` via the read seam's local-tree method and honours its
|
|
308
|
+
* per-repo `.dorfl.json` `autoBuild`. The registry `scan` above is the
|
|
309
|
+
* mirror-ref counterpart; this is its working-tree sibling.
|
|
310
|
+
*/
|
|
311
|
+
export function scanRepoPaths(repoPaths, config,
|
|
312
|
+
/**
|
|
313
|
+
* The HELD-SLUG set to SUBTRACT from each repo's pool (`tasks/ready/`) (prd
|
|
314
|
+
* `ledger-status-per-item-lock-refs` US #15). This is a WORKING-TREE, OFFLINE
|
|
315
|
+
* scan (it has no arbiter handle to fetch the lock refs from — that is the
|
|
316
|
+
* registry `scan`'s job), so the held set is supplied by the in-place CALLER
|
|
317
|
+
* (which knows its arbiter) and DEFAULTS to empty: with the body still moving to
|
|
318
|
+
* `in-progress/` on claim the subtraction is redundant-but-harmless, so omitting
|
|
319
|
+
* it preserves the offline read while keeping the seam in place for task #9.
|
|
320
|
+
*/
|
|
321
|
+
heldSlugs = new Set(),
|
|
322
|
+
/**
|
|
323
|
+
* The per-machine {@link ConfigOverrideMap} — threaded into the per-repo
|
|
324
|
+
* resolution so the override applies to the in-place scan path too. Default:
|
|
325
|
+
* empty (no override).
|
|
326
|
+
*/
|
|
327
|
+
override) {
|
|
328
|
+
const repos = [];
|
|
329
|
+
const counts = { totalItems: 0, totalEligible: 0 };
|
|
330
|
+
for (const path of repoPaths) {
|
|
331
|
+
const state = ledgerRead.resolveLocalState({ repoPath: path });
|
|
332
|
+
const resolved = resolveRepoConfig({
|
|
333
|
+
repoPath: path,
|
|
334
|
+
global: config,
|
|
335
|
+
override,
|
|
336
|
+
}).config;
|
|
337
|
+
// Spec pool — the TASKABLE-PRD companion of the task pool. Resolve
|
|
338
|
+
// `autoTask` PER REPO from the working-tree `.dorfl.json` (the same
|
|
339
|
+
// way `autoBuild` is resolved); `taskableSpecs` (the SAME `autoslice-gate`
|
|
340
|
+
// predicate the autopick paths run) decides what is taskable — no forked
|
|
341
|
+
// predicate. This is what makes the propose-mode CI matrix enumerate `spec:`
|
|
342
|
+
// legs (see `ci-propose-matrix-must-enumerate-sliceable-prds-not-only-slices`).
|
|
343
|
+
const specPool = ledgerRead.resolveSpecPool({ repoPath: path });
|
|
344
|
+
const specs = scoreSpecs(path, specPool, resolved.autoTask);
|
|
345
|
+
// The per-repo LIFECYCLE pool (`ci-propose-matrix-enumerates-lifecycle-items`),
|
|
346
|
+
// gated by this working tree's `observationTriage` / `surfaceBlockers` (resolved
|
|
347
|
+
// the same way as `autoBuild`/`autoTask`) and computed by REUSING
|
|
348
|
+
// `gatherLifecycleInPlace` → `buildLifecyclePools` (NOT a forked predicate). CI
|
|
349
|
+
// runs IN-PLACE, so this is the surface the propose matrix reads.
|
|
350
|
+
const lifecycle = toScannedLifecycle(gatherLifecycleInPlace({
|
|
351
|
+
repoPath: path,
|
|
352
|
+
gates: lifecycleGatesFrom({
|
|
353
|
+
observationTriage: resolved.observationTriage,
|
|
354
|
+
surfaceBlockers: resolved.surfaceBlockers,
|
|
355
|
+
surfaceStaging: resolved.surfaceStaging,
|
|
356
|
+
}),
|
|
357
|
+
}));
|
|
358
|
+
// The one-slug-one-folder LINT over THIS working tree's `work/` ledger.
|
|
359
|
+
const ledgerDuplicates = lintLocalLedger(path);
|
|
360
|
+
repos.push({
|
|
361
|
+
path,
|
|
362
|
+
items: scoreItems(state, resolved.autoBuild, counts, heldSlugs),
|
|
363
|
+
specs,
|
|
364
|
+
lifecycle,
|
|
365
|
+
ledgerDuplicates,
|
|
366
|
+
});
|
|
367
|
+
}
|
|
368
|
+
return {
|
|
369
|
+
repos,
|
|
370
|
+
totalItems: counts.totalItems,
|
|
371
|
+
totalEligible: counts.totalEligible,
|
|
372
|
+
};
|
|
373
|
+
}
|
|
374
|
+
//# sourceMappingURL=scan.js.map
|
package/dist/scan.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scan.js","sourceRoot":"","sources":["../src/scan.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The pure SELECTION-ORDER resolver: turn the per-repo `selectionOrder` config
|
|
3
|
+
* value (a PRESET keyword OR an explicit pool-name list) into the canonical
|
|
4
|
+
* ordered list of the FOUR orderable pools, which {@link selectPrioritised}
|
|
5
|
+
* interleaves AFTER the always-first `apply` pool.
|
|
6
|
+
*
|
|
7
|
+
* Two load-bearing rules (ADR `ci-config-policy-and-gate-family`, selection-order
|
|
8
|
+
* section; task `advance-selection-order-config`):
|
|
9
|
+
*
|
|
10
|
+
* 1. **`apply` is PINNED FIRST and is NOT nameable here.** Consuming a human's
|
|
11
|
+
* committed answer is highest-value, cheap (no model), and someone is waiting
|
|
12
|
+
* — deprioritizing it is never a real want (consume-always-wins). So this
|
|
13
|
+
* resolver ranks ONLY the other four; naming `apply` in `selectionOrder` is a
|
|
14
|
+
* LOUD usage error (it signals a misunderstanding — `apply` cannot be reordered).
|
|
15
|
+
* 2. **The value is a PRESET STRING or an explicit ORDER LIST** (the preset is
|
|
16
|
+
* sugar over a list; the canonical form is the list). A single recognized
|
|
17
|
+
* preset keyword EXPANDS to its list; ANYTHING else is parsed as an explicit
|
|
18
|
+
* pool-name list, validating each name. An unknown pool name OR an unknown
|
|
19
|
+
* single keyword FAILS LOUDLY naming the offending value.
|
|
20
|
+
*
|
|
21
|
+
* Pure: no I/O, no config read. The callers resolve `config.selectionOrder`
|
|
22
|
+
* through this, then hand the ordered list to {@link selectPrioritised}.
|
|
23
|
+
*/
|
|
24
|
+
/**
|
|
25
|
+
* The four ORDERABLE pools (the ones `selectionOrder` ranks). `apply` is
|
|
26
|
+
* deliberately ABSENT — it is pinned first and not configurable, so it is not a
|
|
27
|
+
* member of this union and naming it is a usage error.
|
|
28
|
+
*
|
|
29
|
+
* - `build` — build an eligible task;
|
|
30
|
+
* - `task` — task a taskable prd;
|
|
31
|
+
* - `surface` — render a `needsAnswers` blocker into an answerable sidecar;
|
|
32
|
+
* - `triage` — triage an untriaged observation.
|
|
33
|
+
*/
|
|
34
|
+
export type SelectionPool = 'build' | 'task' | 'surface' | 'triage';
|
|
35
|
+
/** The orderable pools, in their canonical "drain" order (the default). */
|
|
36
|
+
export declare const SELECTION_POOLS: readonly SelectionPool[];
|
|
37
|
+
/**
|
|
38
|
+
* The recognized PRESET keywords, each sugar over an explicit pool-order list:
|
|
39
|
+
*
|
|
40
|
+
* - `drain` (the DEFAULT) — drain ready work, then create, then ask:
|
|
41
|
+
* `[build, task, surface, triage]`. Reproduces today's drain-first
|
|
42
|
+
* "drain before create" default (`build` before `task`).
|
|
43
|
+
* - `groom` — ask/groom first, build later: `[surface, triage, build, task]`.
|
|
44
|
+
*
|
|
45
|
+
* Kept deliberately SMALL (the minimize-head-space stance): a third preset earns
|
|
46
|
+
* its place only when a real need appears.
|
|
47
|
+
*/
|
|
48
|
+
export declare const SELECTION_ORDER_PRESETS: Record<string, readonly SelectionPool[]>;
|
|
49
|
+
/** The default `selectionOrder` value when unset (the `drain` preset). */
|
|
50
|
+
export declare const DEFAULT_SELECTION_ORDER = "drain";
|
|
51
|
+
/**
|
|
52
|
+
* The config value a user writes for `selectionOrder`: a preset keyword (or a
|
|
53
|
+
* single explicit pool name) as a STRING, or an explicit ordered LIST of pool
|
|
54
|
+
* names (the env `'list'` coercion always yields the list form).
|
|
55
|
+
*/
|
|
56
|
+
export type SelectionOrderConfig = string | string[];
|
|
57
|
+
/**
|
|
58
|
+
* Resolve a `selectionOrder` config value into the canonical ordered list of the
|
|
59
|
+
* four orderable pools. A single recognized preset keyword expands to its list;
|
|
60
|
+
* anything else is treated as an explicit pool-name list (each name validated).
|
|
61
|
+
*
|
|
62
|
+
* FAILS LOUDLY (throws) on:
|
|
63
|
+
* - an unknown SINGLE keyword (not a preset AND not a pool name);
|
|
64
|
+
* - an unknown pool name anywhere in an explicit list;
|
|
65
|
+
* - naming `apply` (it is pinned first, not orderable);
|
|
66
|
+
* - an empty order (no pools named);
|
|
67
|
+
* - a duplicate pool name in an explicit list.
|
|
68
|
+
*
|
|
69
|
+
* The list form is taken VERBATIM (no implicit padding of omitted pools — a list
|
|
70
|
+
* names exactly the orderable pools the user wants, in order; an omitted pool is
|
|
71
|
+
* simply ranked nowhere, which only matters if that pool is present, see the gate
|
|
72
|
+
* orthogonality note in {@link selectPrioritised}).
|
|
73
|
+
*/
|
|
74
|
+
export declare function resolveSelectionOrder(value: SelectionOrderConfig): SelectionPool[];
|
|
75
|
+
//# sourceMappingURL=select-order.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"select-order.d.ts","sourceRoot":"","sources":["../src/select-order.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAEH;;;;;;;;;GASG;AACH,MAAM,MAAM,aAAa,GAAG,OAAO,GAAG,MAAM,GAAG,SAAS,GAAG,QAAQ,CAAC;AAEpE,2EAA2E;AAC3E,eAAO,MAAM,eAAe,EAAE,SAAS,aAAa,EAKnD,CAAC;AAEF;;;;;;;;;;GAUG;AACH,eAAO,MAAM,uBAAuB,EAAE,MAAM,CAAC,MAAM,EAAE,SAAS,aAAa,EAAE,CAI3E,CAAC;AAEH,0EAA0E;AAC1E,eAAO,MAAM,uBAAuB,UAAU,CAAC;AAE/C;;;;GAIG;AACH,MAAM,MAAM,oBAAoB,GAAG,MAAM,GAAG,MAAM,EAAE,CAAC;AAKrD;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,qBAAqB,CACpC,KAAK,EAAE,oBAAoB,GACzB,aAAa,EAAE,CAiDjB"}
|
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The pure SELECTION-ORDER resolver: turn the per-repo `selectionOrder` config
|
|
3
|
+
* value (a PRESET keyword OR an explicit pool-name list) into the canonical
|
|
4
|
+
* ordered list of the FOUR orderable pools, which {@link selectPrioritised}
|
|
5
|
+
* interleaves AFTER the always-first `apply` pool.
|
|
6
|
+
*
|
|
7
|
+
* Two load-bearing rules (ADR `ci-config-policy-and-gate-family`, selection-order
|
|
8
|
+
* section; task `advance-selection-order-config`):
|
|
9
|
+
*
|
|
10
|
+
* 1. **`apply` is PINNED FIRST and is NOT nameable here.** Consuming a human's
|
|
11
|
+
* committed answer is highest-value, cheap (no model), and someone is waiting
|
|
12
|
+
* — deprioritizing it is never a real want (consume-always-wins). So this
|
|
13
|
+
* resolver ranks ONLY the other four; naming `apply` in `selectionOrder` is a
|
|
14
|
+
* LOUD usage error (it signals a misunderstanding — `apply` cannot be reordered).
|
|
15
|
+
* 2. **The value is a PRESET STRING or an explicit ORDER LIST** (the preset is
|
|
16
|
+
* sugar over a list; the canonical form is the list). A single recognized
|
|
17
|
+
* preset keyword EXPANDS to its list; ANYTHING else is parsed as an explicit
|
|
18
|
+
* pool-name list, validating each name. An unknown pool name OR an unknown
|
|
19
|
+
* single keyword FAILS LOUDLY naming the offending value.
|
|
20
|
+
*
|
|
21
|
+
* Pure: no I/O, no config read. The callers resolve `config.selectionOrder`
|
|
22
|
+
* through this, then hand the ordered list to {@link selectPrioritised}.
|
|
23
|
+
*/
|
|
24
|
+
/** The orderable pools, in their canonical "drain" order (the default). */
|
|
25
|
+
export const SELECTION_POOLS = [
|
|
26
|
+
'build',
|
|
27
|
+
'task',
|
|
28
|
+
'surface',
|
|
29
|
+
'triage',
|
|
30
|
+
];
|
|
31
|
+
/**
|
|
32
|
+
* The recognized PRESET keywords, each sugar over an explicit pool-order list:
|
|
33
|
+
*
|
|
34
|
+
* - `drain` (the DEFAULT) — drain ready work, then create, then ask:
|
|
35
|
+
* `[build, task, surface, triage]`. Reproduces today's drain-first
|
|
36
|
+
* "drain before create" default (`build` before `task`).
|
|
37
|
+
* - `groom` — ask/groom first, build later: `[surface, triage, build, task]`.
|
|
38
|
+
*
|
|
39
|
+
* Kept deliberately SMALL (the minimize-head-space stance): a third preset earns
|
|
40
|
+
* its place only when a real need appears.
|
|
41
|
+
*/
|
|
42
|
+
export const SELECTION_ORDER_PRESETS = {
|
|
43
|
+
drain: ['build', 'task', 'surface', 'triage'],
|
|
44
|
+
groom: ['surface', 'triage', 'build', 'task'],
|
|
45
|
+
};
|
|
46
|
+
/** The default `selectionOrder` value when unset (the `drain` preset). */
|
|
47
|
+
export const DEFAULT_SELECTION_ORDER = 'drain';
|
|
48
|
+
const POOL_SET = new Set(SELECTION_POOLS);
|
|
49
|
+
const PRESET_NAMES = Object.keys(SELECTION_ORDER_PRESETS);
|
|
50
|
+
/**
|
|
51
|
+
* Resolve a `selectionOrder` config value into the canonical ordered list of the
|
|
52
|
+
* four orderable pools. A single recognized preset keyword expands to its list;
|
|
53
|
+
* anything else is treated as an explicit pool-name list (each name validated).
|
|
54
|
+
*
|
|
55
|
+
* FAILS LOUDLY (throws) on:
|
|
56
|
+
* - an unknown SINGLE keyword (not a preset AND not a pool name);
|
|
57
|
+
* - an unknown pool name anywhere in an explicit list;
|
|
58
|
+
* - naming `apply` (it is pinned first, not orderable);
|
|
59
|
+
* - an empty order (no pools named);
|
|
60
|
+
* - a duplicate pool name in an explicit list.
|
|
61
|
+
*
|
|
62
|
+
* The list form is taken VERBATIM (no implicit padding of omitted pools — a list
|
|
63
|
+
* names exactly the orderable pools the user wants, in order; an omitted pool is
|
|
64
|
+
* simply ranked nowhere, which only matters if that pool is present, see the gate
|
|
65
|
+
* orthogonality note in {@link selectPrioritised}).
|
|
66
|
+
*/
|
|
67
|
+
export function resolveSelectionOrder(value) {
|
|
68
|
+
// Normalise to a list of trimmed, non-empty tokens. A bare string is one token
|
|
69
|
+
// (so `'drain'` and `['drain']` resolve identically — the env single-keyword
|
|
70
|
+
// case); a list is its trimmed entries.
|
|
71
|
+
const tokens = (typeof value === 'string' ? [value] : value)
|
|
72
|
+
.map((t) => t.trim())
|
|
73
|
+
.filter((t) => t !== '');
|
|
74
|
+
// A SINGLE token that is a recognized preset keyword expands to its list. This
|
|
75
|
+
// is the ONLY place a preset is honoured: a preset keyword mixed into a
|
|
76
|
+
// multi-element list is NOT a pool name and so fails loudly below.
|
|
77
|
+
if (tokens.length === 1 && tokens[0] in SELECTION_ORDER_PRESETS) {
|
|
78
|
+
return [...SELECTION_ORDER_PRESETS[tokens[0]]];
|
|
79
|
+
}
|
|
80
|
+
if (tokens.length === 0) {
|
|
81
|
+
throw new Error(`Invalid selectionOrder: empty. Expected a preset ` +
|
|
82
|
+
`(${PRESET_NAMES.join(' / ')}) or an explicit pool-order list ` +
|
|
83
|
+
`(${SELECTION_POOLS.join(', ')}).`);
|
|
84
|
+
}
|
|
85
|
+
// Otherwise an EXPLICIT pool-name list: validate each name is a known orderable
|
|
86
|
+
// pool, failing loudly on `apply` (pinned, not orderable) or any unknown name.
|
|
87
|
+
const seen = new Set();
|
|
88
|
+
const order = [];
|
|
89
|
+
for (const token of tokens) {
|
|
90
|
+
if (token === 'apply') {
|
|
91
|
+
throw new Error(`Invalid selectionOrder: 'apply' is pinned FIRST and is not ` +
|
|
92
|
+
`orderable — remove it. selectionOrder ranks only: ` +
|
|
93
|
+
`${SELECTION_POOLS.join(', ')}.`);
|
|
94
|
+
}
|
|
95
|
+
if (!POOL_SET.has(token)) {
|
|
96
|
+
throw new Error(`Invalid selectionOrder: unknown pool '${token}'. Expected a preset ` +
|
|
97
|
+
`(${PRESET_NAMES.join(' / ')}) or pool names from: ` +
|
|
98
|
+
`${SELECTION_POOLS.join(', ')}.`);
|
|
99
|
+
}
|
|
100
|
+
if (seen.has(token)) {
|
|
101
|
+
throw new Error(`Invalid selectionOrder: duplicate pool '${token}'.`);
|
|
102
|
+
}
|
|
103
|
+
seen.add(token);
|
|
104
|
+
order.push(token);
|
|
105
|
+
}
|
|
106
|
+
return order;
|
|
107
|
+
}
|
|
108
|
+
//# sourceMappingURL=select-order.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"select-order.js","sourceRoot":"","sources":["../src/select-order.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAcH,2EAA2E;AAC3E,MAAM,CAAC,MAAM,eAAe,GAA6B;IACxD,OAAO;IACP,MAAM;IACN,SAAS;IACT,QAAQ;CACR,CAAC;AAEF;;;;;;;;;;GAUG;AACH,MAAM,CAAC,MAAM,uBAAuB,GACnC;IACC,KAAK,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,QAAQ,CAAC;IAC7C,KAAK,EAAE,CAAC,SAAS,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,CAAC;CAC7C,CAAC;AAEH,0EAA0E;AAC1E,MAAM,CAAC,MAAM,uBAAuB,GAAG,OAAO,CAAC;AAS/C,MAAM,QAAQ,GAAG,IAAI,GAAG,CAAS,eAAe,CAAC,CAAC;AAClD,MAAM,YAAY,GAAG,MAAM,CAAC,IAAI,CAAC,uBAAuB,CAAC,CAAC;AAE1D;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,UAAU,qBAAqB,CACpC,KAA2B;IAE3B,+EAA+E;IAC/E,6EAA6E;IAC7E,wCAAwC;IACxC,MAAM,MAAM,GAAG,CAAC,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;SAC1D,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;SACpB,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC;IAE1B,+EAA+E;IAC/E,wEAAwE;IACxE,mEAAmE;IACnE,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,IAAI,MAAM,CAAC,CAAC,CAAC,IAAI,uBAAuB,EAAE,CAAC;QACjE,OAAO,CAAC,GAAG,uBAAuB,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAChD,CAAC;IAED,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACzB,MAAM,IAAI,KAAK,CACd,mDAAmD;YAClD,IAAI,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,mCAAmC;YAC/D,IAAI,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CACnC,CAAC;IACH,CAAC;IAED,gFAAgF;IAChF,+EAA+E;IAC/E,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAC;IAC/B,MAAM,KAAK,GAAoB,EAAE,CAAC;IAClC,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QAC5B,IAAI,KAAK,KAAK,OAAO,EAAE,CAAC;YACvB,MAAM,IAAI,KAAK,CACd,6DAA6D;gBAC5D,oDAAoD;gBACpD,GAAG,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CACjC,CAAC;QACH,CAAC;QACD,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC;YAC1B,MAAM,IAAI,KAAK,CACd,yCAAyC,KAAK,uBAAuB;gBACpE,IAAI,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,wBAAwB;gBACpD,GAAG,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CACjC,CAAC;QACH,CAAC;QACD,IAAI,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC;YACrB,MAAM,IAAI,KAAK,CAAC,2CAA2C,KAAK,IAAI,CAAC,CAAC;QACvE,CAAC;QACD,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QAChB,KAAK,CAAC,IAAI,CAAC,KAAsB,CAAC,CAAC;IACpC,CAAC;IACD,OAAO,KAAK,CAAC;AACd,CAAC"}
|