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,594 @@
|
|
|
1
|
+
import { mkdirSync, writeFileSync, rmSync } from 'node:fs';
|
|
2
|
+
import { dirname, join } from 'node:path';
|
|
3
|
+
import { runAsync } from './git.js';
|
|
4
|
+
import { ledgerWrite } from './ledger-write.js';
|
|
5
|
+
import { resolveSidecarIdentity } from './sidecar.js';
|
|
6
|
+
import { acquireItemLock, releaseItemLock } from './item-lock.js';
|
|
7
|
+
import { realSleep } from './retry-backoff.js';
|
|
8
|
+
/**
|
|
9
|
+
* The **advancing-lock BORROW** (prd `advance-loop`, task
|
|
10
|
+
* `advancing-lock-borrow`, US #19–24).
|
|
11
|
+
*
|
|
12
|
+
* The surface/apply/triage phase's SHORT borrow. As of the capstone cut-over
|
|
13
|
+
* (task `cutover-retire-slicing-advancing-markers-and-trim-folder-sets`, prd
|
|
14
|
+
* `ledger-status-per-item-lock-refs`; ADR `ledger-status-on-per-item-lock-refs`)
|
|
15
|
+
* the legacy `work/advancing/<entry>.md` presence-MARKER on `main` is GONE. The
|
|
16
|
+
* advancing borrow now rides ONLY the UNIFIED per-item lock
|
|
17
|
+
* (`refs/dorfl/lock/<entry>`, `action: advance`) — there is no transient
|
|
18
|
+
* status in `main`'s tree anymore, so a work branch cut from `main` inherits no
|
|
19
|
+
* stale advancing marker.
|
|
20
|
+
*
|
|
21
|
+
* The borrow is keyed by item IDENTITY (`<type>-<slug>`, via
|
|
22
|
+
* {@link resolveSidecarIdentity} — the single source of truth the unified lock,
|
|
23
|
+
* the sidecar, and the work branch all share), so a task, a prd, and an
|
|
24
|
+
* observation that share a slug NEVER collide, and the SAME `<entry>` ref means an
|
|
25
|
+
* `advance` hold is MUTUALLY EXCLUSIVE with a claim/task hold of the SAME item BY
|
|
26
|
+
* CONSTRUCTION (the second acquirer loses the SAME create-only ref CAS).
|
|
27
|
+
*
|
|
28
|
+
* It is file-ORTHOGONAL to the item it locks: the item's own lifecycle file NEVER
|
|
29
|
+
* moves (the borrow is a LOCK, not a lifecycle transition), which is exactly why
|
|
30
|
+
* it can lock items resting in DIFFERENT source folders (a backlog task, a `prds/`
|
|
31
|
+
* prd, an `observations/` note) with one uniform mechanism.
|
|
32
|
+
*
|
|
33
|
+
* **TREE-LESS vs BUILD/TASK RUNGS (`acquireUnified`).** The advance tick sets
|
|
34
|
+
* `acquireUnified` PER RUNG (the policy lives in `advance.ts`, where the rung is
|
|
35
|
+
* known):
|
|
36
|
+
*
|
|
37
|
+
* - **TREE-LESS rungs** (`surface`/`apply`/`triage`) have NO inner `do`, so the
|
|
38
|
+
* advancing acquire takes the item's unified `action: advance` lock — that hold
|
|
39
|
+
* IS the advance∥claim / advance∥task exclusion. Acquire/release delegate to
|
|
40
|
+
* {@link acquireItemLock} / {@link releaseItemLock} (a parentless ref CAS, no
|
|
41
|
+
* working-tree write, no retry budget).
|
|
42
|
+
* - **BUILD-TASK / TASK-PRD rungs** never take the unified lock at the advance
|
|
43
|
+
* layer (`acquireUnified` false): `performAdvance` orchestrates an inner
|
|
44
|
+
* `performDo` that ITSELF acquires the SAME `task-<slug>`/`prd-<slug>` ref
|
|
45
|
+
* (the create-only CAS with NO re-entrancy/auto-steal), so taking it again here
|
|
46
|
+
* would DEADLOCK the tick against itself. For these rungs the acquire/release
|
|
47
|
+
* are a NO-OP (`acquired`/`released`); the inner `do`'s lock is the sole
|
|
48
|
+
* exclusion point (the POST-#9 EXCLUSION PROOF, owned by this task).
|
|
49
|
+
*
|
|
50
|
+
* A dry-run never takes the lock (it mutates nothing). This module stays
|
|
51
|
+
* rung-agnostic — it only knows "unified or not", never the rung kind.
|
|
52
|
+
*
|
|
53
|
+
* This module also delivers {@link createItemThroughCas}: new-item creation routed
|
|
54
|
+
* THROUGH the SAME write-seam CAS, keyed on the NEW item's identity (its target
|
|
55
|
+
* path), so the (unlikely) same-slug new-item race needs NO special case — the
|
|
56
|
+
* loser simply fails the CAS and backs off. The triage rung (observation→promote
|
|
57
|
+
* drafting a new `work/backlog/<new-slug>.md`) consumes it. It is NOT a lock and
|
|
58
|
+
* was never tied to the marker.
|
|
59
|
+
*
|
|
60
|
+
* Lock discipline: MANDATORY for the autonomous driver (a contender may be active),
|
|
61
|
+
* a no-op formality for a solo human (no contender). Every lock acquire/release is
|
|
62
|
+
* RUNNER-mediated (the agent never touches the lock ref). Recovery is the unified
|
|
63
|
+
* lock's: `release-lock <item>` + the `gc --ledger` stuck-lock report (no liveness
|
|
64
|
+
* heartbeat, no auto-sweep; a human asserts a lock is dead).
|
|
65
|
+
*/
|
|
66
|
+
const DEFAULT_ARBITER = 'origin';
|
|
67
|
+
/** Raised for usage/environment errors (exit 1). */
|
|
68
|
+
class AdvancingLockUsageError extends Error {
|
|
69
|
+
}
|
|
70
|
+
/**
|
|
71
|
+
* Acquire the advancing borrow for `item`. For a TREE-LESS rung
|
|
72
|
+
* (`acquireUnified: true`) this is the item's unified `action: advance` lock (a
|
|
73
|
+
* parentless ref CAS); for a build/task rung (the default) it is a NO-OP
|
|
74
|
+
* `acquired` (the inner `do`'s claim/task lock is the exclusion). Never throws
|
|
75
|
+
* for the expected "lost the race" (exit 2) case — it is returned.
|
|
76
|
+
*/
|
|
77
|
+
export async function acquireAdvancingLock(options) {
|
|
78
|
+
const note = options.note ?? (() => { });
|
|
79
|
+
try {
|
|
80
|
+
return await runAcquire(options, note);
|
|
81
|
+
}
|
|
82
|
+
catch (err) {
|
|
83
|
+
if (err instanceof AdvancingLockUsageError) {
|
|
84
|
+
return { exitCode: 1, outcome: 'usage-error', message: err.message };
|
|
85
|
+
}
|
|
86
|
+
const message = err instanceof Error ? err.message : String(err);
|
|
87
|
+
return { exitCode: 1, outcome: 'usage-error', message };
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
async function runAcquire(options, note) {
|
|
91
|
+
const arbiter = options.arbiter ?? DEFAULT_ARBITER;
|
|
92
|
+
const dryRun = options.dryRun ?? false;
|
|
93
|
+
const cwd = options.cwd;
|
|
94
|
+
const env = options.env;
|
|
95
|
+
if (!options.item) {
|
|
96
|
+
throw new AdvancingLockUsageError('missing <item>. usage: acquireAdvancingLock({item, cwd, arbiter})');
|
|
97
|
+
}
|
|
98
|
+
// The type-encoded entry `<type>-<slug>` — the SAME identity scheme the sidecar
|
|
99
|
+
// and the unified lock use, derived via the shared resolver (the source of truth).
|
|
100
|
+
const { type, slug } = resolveSidecarIdentity(options.item);
|
|
101
|
+
const entry = `${type}-${slug}`;
|
|
102
|
+
if ((await gitSoft(['rev-parse', '--git-dir'], cwd, env)).status !== 0) {
|
|
103
|
+
throw new AdvancingLockUsageError('not inside a git repository');
|
|
104
|
+
}
|
|
105
|
+
if ((await gitSoft(['remote', 'get-url', arbiter], cwd, env)).status !== 0) {
|
|
106
|
+
throw new AdvancingLockUsageError(`no git remote named '${arbiter}' (set one, or pass --arbiter)`);
|
|
107
|
+
}
|
|
108
|
+
const by = options.by || (await resolveBy(cwd, env));
|
|
109
|
+
// BUILD/TASK rung (or a dry-run): NO advance-layer hold at all. The inner `do`'s
|
|
110
|
+
// claim/task unified lock is the sole exclusion point — taking it again here
|
|
111
|
+
// would deadlock the tick against itself. A NO-OP `acquired`.
|
|
112
|
+
const acquireUnified = (options.acquireUnified ?? false) && !dryRun;
|
|
113
|
+
if (!acquireUnified) {
|
|
114
|
+
const message = dryRun
|
|
115
|
+
? `[dry-run] advancing borrow for '${entry}' (no lock taken).`
|
|
116
|
+
: `advancing borrow for '${entry}' rides the inner do's lock (no advance-layer hold).`;
|
|
117
|
+
note(message);
|
|
118
|
+
return { exitCode: 0, outcome: 'acquired', message, entry };
|
|
119
|
+
}
|
|
120
|
+
// TREE-LESS rung: take the item's UNIFIED per-item lock (`action: advance`,
|
|
121
|
+
// keyed `item` so it shares the ONE `<type>-<slug>` ref with claim/task/advance
|
|
122
|
+
// of the SAME item). A create-only ref CAS: the winner holds it, the loser is
|
|
123
|
+
// DEFINITIVELY `lost` (exit 2, no retry budget — a per-item conflict the loser
|
|
124
|
+
// should lose). No auto-steal of an orphaned lock, consistent with claim/task
|
|
125
|
+
// and the ADR's recovery model (no liveness heartbeat / auto-sweep; a human
|
|
126
|
+
// asserts a lock is dead via `release-lock` + `gc --ledger`).
|
|
127
|
+
const lock = await acquireItemLock({
|
|
128
|
+
item: options.item,
|
|
129
|
+
action: 'advance',
|
|
130
|
+
cwd,
|
|
131
|
+
arbiter,
|
|
132
|
+
holder: by,
|
|
133
|
+
env,
|
|
134
|
+
});
|
|
135
|
+
if (lock.outcome === 'error') {
|
|
136
|
+
throw new AdvancingLockUsageError(`failed to acquire the item lock for '${entry}': ${lock.message}`);
|
|
137
|
+
}
|
|
138
|
+
if (lock.outcome === 'lost') {
|
|
139
|
+
note(lock.message);
|
|
140
|
+
return { exitCode: 2, outcome: 'lost', message: lock.message, entry };
|
|
141
|
+
}
|
|
142
|
+
const message = `LOCKED '${entry}' for advancing on ${arbiter} (unified lock).`;
|
|
143
|
+
note(message);
|
|
144
|
+
return { exitCode: 0, outcome: 'acquired', message, entry };
|
|
145
|
+
}
|
|
146
|
+
/**
|
|
147
|
+
* Release the advancing borrow for `item`. For a TREE-LESS rung
|
|
148
|
+
* (`releaseUnified: true`) this DELETES the item's unified `action: advance` lock
|
|
149
|
+
* ref; for a build/task rung (the default) it is a NO-OP `released` (that rung
|
|
150
|
+
* never took an advance-layer hold — the inner `do` released its own lock). It
|
|
151
|
+
* moves NO lifecycle file: the borrow is a LOCK, not a lifecycle transition, so
|
|
152
|
+
* the item is returned exactly where it rested.
|
|
153
|
+
*
|
|
154
|
+
* Idempotent: a unified release of an already-absent ref reports `released` (the
|
|
155
|
+
* item is returned to rest with no held lock). Best-effort + never throws for the
|
|
156
|
+
* expected cases.
|
|
157
|
+
*/
|
|
158
|
+
export async function releaseAdvancingLock(options) {
|
|
159
|
+
const note = options.note ?? (() => { });
|
|
160
|
+
try {
|
|
161
|
+
return await runRelease(options, note);
|
|
162
|
+
}
|
|
163
|
+
catch (err) {
|
|
164
|
+
if (err instanceof AdvancingLockUsageError) {
|
|
165
|
+
return { exitCode: 1, outcome: 'usage-error', message: err.message };
|
|
166
|
+
}
|
|
167
|
+
const message = err instanceof Error ? err.message : String(err);
|
|
168
|
+
return { exitCode: 1, outcome: 'usage-error', message };
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
async function runRelease(options, note) {
|
|
172
|
+
const arbiter = options.arbiter ?? DEFAULT_ARBITER;
|
|
173
|
+
const cwd = options.cwd;
|
|
174
|
+
const env = options.env;
|
|
175
|
+
if (!options.item) {
|
|
176
|
+
throw new AdvancingLockUsageError('missing <item>. usage: releaseAdvancingLock({item, cwd, arbiter})');
|
|
177
|
+
}
|
|
178
|
+
const { type, slug } = resolveSidecarIdentity(options.item);
|
|
179
|
+
const entry = `${type}-${slug}`;
|
|
180
|
+
if ((await gitSoft(['rev-parse', '--git-dir'], cwd, env)).status !== 0) {
|
|
181
|
+
throw new AdvancingLockUsageError('not inside a git repository');
|
|
182
|
+
}
|
|
183
|
+
if ((await gitSoft(['remote', 'get-url', arbiter], cwd, env)).status !== 0) {
|
|
184
|
+
throw new AdvancingLockUsageError(`no git remote named '${arbiter}' (set one, or pass --arbiter)`);
|
|
185
|
+
}
|
|
186
|
+
// BUILD/TASK rung: nothing was held at the advance layer — a NO-OP `released`.
|
|
187
|
+
const releaseUnified = options.releaseUnified ?? false;
|
|
188
|
+
if (!releaseUnified) {
|
|
189
|
+
const message = `advancing borrow for '${entry}' released (no advance-layer hold to drop).`;
|
|
190
|
+
note(message);
|
|
191
|
+
return { exitCode: 0, outcome: 'released', message, entry };
|
|
192
|
+
}
|
|
193
|
+
// TREE-LESS rung: delete the unified `action: advance` lock ref (idempotent —
|
|
194
|
+
// an already-absent ref is `not-held`, still mapped to `released`: the item is
|
|
195
|
+
// returned to rest with no held lock).
|
|
196
|
+
const released = await releaseItemLock({
|
|
197
|
+
item: options.item,
|
|
198
|
+
cwd,
|
|
199
|
+
arbiter,
|
|
200
|
+
env,
|
|
201
|
+
});
|
|
202
|
+
if (released.outcome === 'error') {
|
|
203
|
+
throw new AdvancingLockUsageError(`failed to release the item lock for '${entry}': ${released.message}`);
|
|
204
|
+
}
|
|
205
|
+
const message = released.outcome === 'not-held'
|
|
206
|
+
? `advancing borrow for '${entry}' was already released (no lock held).`
|
|
207
|
+
: `RELEASED '${entry}' advancing borrow on ${arbiter} (item untouched).`;
|
|
208
|
+
note(message);
|
|
209
|
+
return { exitCode: 0, outcome: 'released', message, entry };
|
|
210
|
+
}
|
|
211
|
+
/**
|
|
212
|
+
* The INTERACTIVE default: today's shape (3 retries, NO delay). A human-typed
|
|
213
|
+
* single-item caller keeps the prompt bounded give-up it always had. Preserved
|
|
214
|
+
* so the API change is backwards-compatible for direct callers of
|
|
215
|
+
* {@link createItemThroughCas} that pass nothing.
|
|
216
|
+
*/
|
|
217
|
+
export const INTERACTIVE_CAS_CONTENTION = {
|
|
218
|
+
retries: 3,
|
|
219
|
+
initialDelayMs: 0,
|
|
220
|
+
maxDelayMs: 0,
|
|
221
|
+
maxTotalMs: 0,
|
|
222
|
+
};
|
|
223
|
+
/**
|
|
224
|
+
* The LIFECYCLE default: the wider envelope for the parallel-legs fan-out (the
|
|
225
|
+
* lifecycle propose/triage tick's promote-CAS + `mint-adr` legs). A modest base
|
|
226
|
+
* delay grows under an AWS-style DECORRELATED-JITTER schedule up to a cap, with a
|
|
227
|
+
* generous wall-clock envelope so a herd of valid appends DRAINS instead of
|
|
228
|
+
* thrashing to exhaustion. Sized so a lone leg is barely slower than today
|
|
229
|
+
* (jitter is small on the first retry) while a fan-out of N legs desynchronises
|
|
230
|
+
* within a few retries. See the decision block at the bottom of this file.
|
|
231
|
+
*/
|
|
232
|
+
export const LIFECYCLE_CAS_CONTENTION = {
|
|
233
|
+
retries: 32,
|
|
234
|
+
initialDelayMs: 25,
|
|
235
|
+
maxDelayMs: 2_000,
|
|
236
|
+
maxTotalMs: 30_000,
|
|
237
|
+
};
|
|
238
|
+
/**
|
|
239
|
+
* Run a CAS create/publish attempt inside the CONTENTION-RETRY loop. Reusable
|
|
240
|
+
* primitive shared between {@link createItemThroughCas} (the production path) and
|
|
241
|
+
* the unit tests that drive the loop with an injected fake attempt + injected
|
|
242
|
+
* `Sleep` + injected RNG so the retry timeline + jitter are fully deterministic
|
|
243
|
+
* with no real wall-clock waits.
|
|
244
|
+
*
|
|
245
|
+
* The `attempt` callback runs ONE CAS attempt and reports `created` / `lost` /
|
|
246
|
+
* `rejected`. On `rejected` the loop consults the {@link CasContentionBudget}:
|
|
247
|
+
* 1. if the attempts cap is reached → clean bounded give-up (`contended`);
|
|
248
|
+
* 2. else compute a DECORRELATED-JITTER delay ({@link nextCasContentionDelayMs});
|
|
249
|
+
* 3. if the delay would push cumulative sleep past `maxTotalMs` → clean bounded
|
|
250
|
+
* give-up (`contended` — the wall-clock terminator);
|
|
251
|
+
* 4. else emit the retry note, sleep, and loop.
|
|
252
|
+
*/
|
|
253
|
+
export async function runCasContentionLoop(input) {
|
|
254
|
+
const note = input.note ?? (() => { });
|
|
255
|
+
const budget = input.budget;
|
|
256
|
+
const retries = budget.retries ?? INTERACTIVE_CAS_CONTENTION.retries;
|
|
257
|
+
const initialDelayMs = budget.initialDelayMs ?? INTERACTIVE_CAS_CONTENTION.initialDelayMs;
|
|
258
|
+
const maxDelayMs = budget.maxDelayMs ?? INTERACTIVE_CAS_CONTENTION.maxDelayMs;
|
|
259
|
+
const maxTotalMs = budget.maxTotalMs ?? INTERACTIVE_CAS_CONTENTION.maxTotalMs;
|
|
260
|
+
const sleep = budget.sleep ?? realSleep;
|
|
261
|
+
const rng = budget.rng ?? Math.random;
|
|
262
|
+
let attempts = 0;
|
|
263
|
+
let elapsed = 0;
|
|
264
|
+
let previousDelayMs = 0;
|
|
265
|
+
const sleeps = [];
|
|
266
|
+
// eslint-disable-next-line no-constant-condition
|
|
267
|
+
while (true) {
|
|
268
|
+
attempts += 1;
|
|
269
|
+
const result = await input.attempt();
|
|
270
|
+
if (result.kind === 'created') {
|
|
271
|
+
return { kind: 'created', message: result.message, attempts, sleeps };
|
|
272
|
+
}
|
|
273
|
+
if (result.kind === 'lost') {
|
|
274
|
+
return { kind: 'lost', message: result.message, attempts, sleeps };
|
|
275
|
+
}
|
|
276
|
+
const rejectedCount = attempts; // attempts so far == rejections so far
|
|
277
|
+
if (rejectedCount > retries) {
|
|
278
|
+
const message = `push rejected ${rejectedCount} times (main is contended). Try again shortly.`;
|
|
279
|
+
note(message);
|
|
280
|
+
return { kind: 'contended', message, attempts, sleeps };
|
|
281
|
+
}
|
|
282
|
+
const delay = nextCasContentionDelayMs({
|
|
283
|
+
previousDelayMs,
|
|
284
|
+
initialDelayMs,
|
|
285
|
+
maxDelayMs,
|
|
286
|
+
rng,
|
|
287
|
+
});
|
|
288
|
+
if (maxTotalMs > 0 && elapsed + delay > maxTotalMs) {
|
|
289
|
+
const message = `push rejected ${rejectedCount} times (main is contended; wall-clock budget ${maxTotalMs}ms exhausted). Try again shortly.`;
|
|
290
|
+
note(message);
|
|
291
|
+
return { kind: 'contended', message, attempts, sleeps };
|
|
292
|
+
}
|
|
293
|
+
note(`main advanced under us — refetch and retry (${rejectedCount}/${retries})...`);
|
|
294
|
+
if (delay > 0) {
|
|
295
|
+
await sleep(delay);
|
|
296
|
+
elapsed += delay;
|
|
297
|
+
previousDelayMs = delay;
|
|
298
|
+
sleeps.push(delay);
|
|
299
|
+
}
|
|
300
|
+
}
|
|
301
|
+
}
|
|
302
|
+
/**
|
|
303
|
+
* Compute the NEXT contention-retry delay under AWS-style DECORRELATED JITTER:
|
|
304
|
+
* `delay = min(cap, floor(base + rng() * (min(cap, prev*3) - base)))`, clamped to
|
|
305
|
+
* `[base, cap]`. `previousDelayMs = 0` (the first retry) uses `base` as the
|
|
306
|
+
* seed. Returns `0` iff the delay is disabled (either bound is `0` or `NaN`),
|
|
307
|
+
* which preserves the interactive "instant retry" shape.
|
|
308
|
+
*
|
|
309
|
+
* Exported for the pure-unit shape test — the property is BOUNDED randomness
|
|
310
|
+
* that grows toward the cap.
|
|
311
|
+
*/
|
|
312
|
+
export function nextCasContentionDelayMs(input) {
|
|
313
|
+
const base = input.initialDelayMs;
|
|
314
|
+
const cap = input.maxDelayMs;
|
|
315
|
+
if (!(base > 0) || !(cap > 0)) {
|
|
316
|
+
return 0;
|
|
317
|
+
}
|
|
318
|
+
const prev = input.previousDelayMs > 0 ? input.previousDelayMs : base;
|
|
319
|
+
const upper = Math.min(cap, prev * 3);
|
|
320
|
+
const r = Math.max(0, Math.min(1, input.rng()));
|
|
321
|
+
return Math.max(base, Math.min(cap, Math.floor(base + r * (upper - base))));
|
|
322
|
+
}
|
|
323
|
+
/**
|
|
324
|
+
* Create a NEW `work/` item THROUGH the CAS, keyed on the new item's identity (its
|
|
325
|
+
* `path`). The reusable helper the triage rung consumes when an observation→promote
|
|
326
|
+
* drafts a new `work/backlog/<new-slug>.md`: the (unlikely) same-slug new-item race
|
|
327
|
+
* needs NO special case — exactly one creator lands the file, the loser fails the
|
|
328
|
+
* CAS (exit 2) and backs off. Same CAS-micro-commit / force-with-lease shape as the
|
|
329
|
+
* unified lock; it is NOT a lock (it does not hold a borrow), it ATOMICALLY publishes
|
|
330
|
+
* a new file iff that path is still absent on the arbiter.
|
|
331
|
+
*
|
|
332
|
+
* An optional {@link CreateItemThroughCasOptions.deletePaths} rides the SAME create
|
|
333
|
+
* commit (the promote route's note + sidecar `git rm`), so create + delete are ONE
|
|
334
|
+
* atomic commit: a crash never strands the source without its successor, and a CAS
|
|
335
|
+
* LOSER — which never reaches the commit — leaves the source intact for a retry.
|
|
336
|
+
*/
|
|
337
|
+
export async function createItemThroughCas(options) {
|
|
338
|
+
const note = options.note ?? (() => { });
|
|
339
|
+
try {
|
|
340
|
+
return await runCreate(options, note);
|
|
341
|
+
}
|
|
342
|
+
catch (err) {
|
|
343
|
+
if (err instanceof AdvancingLockUsageError) {
|
|
344
|
+
return { exitCode: 1, outcome: 'usage-error', message: err.message };
|
|
345
|
+
}
|
|
346
|
+
const message = err instanceof Error ? err.message : String(err);
|
|
347
|
+
return { exitCode: 1, outcome: 'usage-error', message };
|
|
348
|
+
}
|
|
349
|
+
}
|
|
350
|
+
async function runCreate(options, note) {
|
|
351
|
+
const arbiter = options.arbiter ?? DEFAULT_ARBITER;
|
|
352
|
+
const budget = options.contention ?? {};
|
|
353
|
+
const retries = budget.retries ?? options.retries ?? INTERACTIVE_CAS_CONTENTION.retries;
|
|
354
|
+
const initialDelayMs = budget.initialDelayMs ?? INTERACTIVE_CAS_CONTENTION.initialDelayMs;
|
|
355
|
+
const maxDelayMs = budget.maxDelayMs ?? INTERACTIVE_CAS_CONTENTION.maxDelayMs;
|
|
356
|
+
const maxTotalMs = budget.maxTotalMs ?? INTERACTIVE_CAS_CONTENTION.maxTotalMs;
|
|
357
|
+
const sleep = budget.sleep ?? realSleep;
|
|
358
|
+
const rng = budget.rng ?? Math.random;
|
|
359
|
+
const dryRun = options.dryRun ?? false;
|
|
360
|
+
const cwd = options.cwd;
|
|
361
|
+
const env = options.env;
|
|
362
|
+
const path = options.path;
|
|
363
|
+
if (!path) {
|
|
364
|
+
throw new AdvancingLockUsageError('missing <path>. usage: createItemThroughCas({path, content, cwd, arbiter})');
|
|
365
|
+
}
|
|
366
|
+
if ((await gitSoft(['rev-parse', '--git-dir'], cwd, env)).status !== 0) {
|
|
367
|
+
throw new AdvancingLockUsageError('not inside a git repository');
|
|
368
|
+
}
|
|
369
|
+
if ((await gitSoft(['remote', 'get-url', arbiter], cwd, env)).status !== 0) {
|
|
370
|
+
throw new AdvancingLockUsageError(`no git remote named '${arbiter}' (set one, or pass --arbiter)`);
|
|
371
|
+
}
|
|
372
|
+
const by = options.by || (await resolveBy(cwd, env));
|
|
373
|
+
const dirtyWorktree = (await gitSoft(['diff', '--quiet'], cwd, env)).status !== 0;
|
|
374
|
+
const dirtyIndex = (await gitSoft(['diff', '--cached', '--quiet'], cwd, env)).status !== 0;
|
|
375
|
+
if (dirtyWorktree || dirtyIndex) {
|
|
376
|
+
throw new AdvancingLockUsageError('working tree has uncommitted changes; commit/stash them before creating');
|
|
377
|
+
}
|
|
378
|
+
// A throwaway create branch, slugified off the new item's path (so concurrent
|
|
379
|
+
// creators of DIFFERENT paths don't collide on the branch name either).
|
|
380
|
+
const createBranch = `create/${path.replace(/[^A-Za-z0-9._-]+/g, '-')}`;
|
|
381
|
+
const origRef = await originalRef(cwd, env);
|
|
382
|
+
try {
|
|
383
|
+
// The bounded DECORRELATED-JITTER contention-retry lives in
|
|
384
|
+
// {@link runCasContentionLoop} — the shared primitive tests drive directly
|
|
385
|
+
// with an injected fake attempt + `Sleep` + RNG (no real waits, no flakes).
|
|
386
|
+
const loop = await runCasContentionLoop({
|
|
387
|
+
attempt: () => createAttempt({
|
|
388
|
+
path,
|
|
389
|
+
content: options.content,
|
|
390
|
+
deletePaths: options.deletePaths ?? [],
|
|
391
|
+
by,
|
|
392
|
+
arbiter,
|
|
393
|
+
dryRun,
|
|
394
|
+
cwd,
|
|
395
|
+
env,
|
|
396
|
+
createBranch,
|
|
397
|
+
note,
|
|
398
|
+
}),
|
|
399
|
+
budget: {
|
|
400
|
+
retries,
|
|
401
|
+
initialDelayMs,
|
|
402
|
+
maxDelayMs,
|
|
403
|
+
maxTotalMs,
|
|
404
|
+
sleep,
|
|
405
|
+
rng,
|
|
406
|
+
},
|
|
407
|
+
note,
|
|
408
|
+
});
|
|
409
|
+
if (loop.kind === 'created') {
|
|
410
|
+
return { exitCode: 0, outcome: 'created', message: loop.message };
|
|
411
|
+
}
|
|
412
|
+
if (loop.kind === 'lost') {
|
|
413
|
+
return { exitCode: 2, outcome: 'lost', message: loop.message };
|
|
414
|
+
}
|
|
415
|
+
return { exitCode: 3, outcome: 'contended', message: loop.message };
|
|
416
|
+
}
|
|
417
|
+
finally {
|
|
418
|
+
await cleanup(cwd, origRef, createBranch, env);
|
|
419
|
+
}
|
|
420
|
+
}
|
|
421
|
+
/** One create attempt: branch off arbiter/main, add the new file, CAS-push. */
|
|
422
|
+
async function createAttempt(ctx) {
|
|
423
|
+
const { arbiter, path, content, deletePaths, createBranch, cwd, env, note } = ctx;
|
|
424
|
+
await gitHard(['fetch', '--quiet', arbiter], cwd, env);
|
|
425
|
+
// Is the path still free on the arbiter's main? (the new item absent.)
|
|
426
|
+
if (await catFileExists(`${arbiter}/main:${path}`, cwd, env)) {
|
|
427
|
+
const message = `'${path}' already exists on ${arbiter}/main — the new item lost the create race (or the slug is taken). Back off.`;
|
|
428
|
+
note(message);
|
|
429
|
+
return { kind: 'lost', message };
|
|
430
|
+
}
|
|
431
|
+
await gitHard(['checkout', '--quiet', '--detach', `${arbiter}/main`], cwd, env);
|
|
432
|
+
await gitSoft(['branch', '-D', createBranch], cwd, env);
|
|
433
|
+
await gitHard(['checkout', '--quiet', '-b', createBranch, `${arbiter}/main`], cwd, env);
|
|
434
|
+
const fileAbs = join(cwd, path);
|
|
435
|
+
mkdirSync(dirname(fileAbs), { recursive: true });
|
|
436
|
+
writeFileSync(fileAbs, content);
|
|
437
|
+
const add = await gitSoft(['add', '--', path], cwd, env);
|
|
438
|
+
if (add.status !== 0) {
|
|
439
|
+
throw new AdvancingLockUsageError(`git add failed for '${path}' (unexpected — aborting create)`);
|
|
440
|
+
}
|
|
441
|
+
// `git rm` the extra paths (the promoted source note + its sidecar) INTO this
|
|
442
|
+
// SAME create commit, so the create + delete are ONE atomic commit. Best-effort
|
|
443
|
+
// per path: a path absent on the create branch (e.g. an uncommitted local note,
|
|
444
|
+
// or an already-gone sidecar) is staged as a working-tree removal instead so
|
|
445
|
+
// the commit still carries the intended deletion without aborting.
|
|
446
|
+
for (const del of deletePaths) {
|
|
447
|
+
if (del === '' || del === path) {
|
|
448
|
+
continue;
|
|
449
|
+
}
|
|
450
|
+
const rm = await gitSoft(['rm', '--quiet', '--', del], cwd, env);
|
|
451
|
+
if (rm.status !== 0) {
|
|
452
|
+
// Not tracked on this branch — remove from the working tree (if present)
|
|
453
|
+
// and stage that removal; a never-existed path is simply skipped.
|
|
454
|
+
rmSync(join(cwd, del), { force: true });
|
|
455
|
+
await gitSoft(['add', '--', del], cwd, env);
|
|
456
|
+
}
|
|
457
|
+
}
|
|
458
|
+
await gitHard(['commit', '--quiet', '-m', `advance: create ${path} (by ${ctx.by})`], cwd, env);
|
|
459
|
+
const base = (await gitHard(['rev-parse', `${arbiter}/main`], cwd, env)).stdout.trim();
|
|
460
|
+
const head = (await gitHard(['rev-parse', 'HEAD'], cwd, env)).stdout.trim();
|
|
461
|
+
if (head === base) {
|
|
462
|
+
throw new AdvancingLockUsageError('advance-create commit is a no-op (nothing added) — aborting');
|
|
463
|
+
}
|
|
464
|
+
// Publish through the SAME seam (kind `advancing`) — keyed on the new item's
|
|
465
|
+
// identity (its path). The lease guards the CAS: a concurrent creator that
|
|
466
|
+
// landed first advanced main past our base, so our lease fails → rejected; the
|
|
467
|
+
// outer loop refetches and the next attempt finds the path TAKEN → lost (no
|
|
468
|
+
// special case). This holds EVEN for a same-identity racer who built an
|
|
469
|
+
// identical create commit within git's 1-second timestamp resolution: the seam
|
|
470
|
+
// stamps each attempt with a per-attempt `CAS-Nonce`, so the two racers'
|
|
471
|
+
// commits have DISTINCT shas — the loser's push is a genuine lease rejection,
|
|
472
|
+
// NOT an "Everything up-to-date" no-op that would spuriously verify as won.
|
|
473
|
+
if (ctx.dryRun) {
|
|
474
|
+
const result = await ledgerWrite.applyTransition({
|
|
475
|
+
kind: 'advancing',
|
|
476
|
+
arbiter,
|
|
477
|
+
localBranch: createBranch,
|
|
478
|
+
expectedBase: base,
|
|
479
|
+
head,
|
|
480
|
+
cwd,
|
|
481
|
+
dryRun: true,
|
|
482
|
+
env,
|
|
483
|
+
note,
|
|
484
|
+
});
|
|
485
|
+
return { kind: 'created', message: result.message };
|
|
486
|
+
}
|
|
487
|
+
const result = await ledgerWrite.applyTransition({
|
|
488
|
+
kind: 'advancing',
|
|
489
|
+
arbiter,
|
|
490
|
+
localBranch: createBranch,
|
|
491
|
+
expectedBase: base,
|
|
492
|
+
head,
|
|
493
|
+
cwd,
|
|
494
|
+
env,
|
|
495
|
+
note,
|
|
496
|
+
});
|
|
497
|
+
if (result.kind === 'published') {
|
|
498
|
+
const message = `CREATED '${path}' on ${arbiter}/main.`;
|
|
499
|
+
note(message);
|
|
500
|
+
return { kind: 'created', message };
|
|
501
|
+
}
|
|
502
|
+
return { kind: 'rejected', message: result.message };
|
|
503
|
+
}
|
|
504
|
+
// --- Shared helpers (same shape as claim-cas.ts) --------------------------
|
|
505
|
+
/** The branch (or detached HEAD sha) we should return to afterward. */
|
|
506
|
+
async function originalRef(cwd, env) {
|
|
507
|
+
const sym = await gitSoft(['symbolic-ref', '--quiet', '--short', 'HEAD'], cwd, env);
|
|
508
|
+
if (sym.status === 0 && sym.stdout.trim() !== '') {
|
|
509
|
+
return sym.stdout.trim();
|
|
510
|
+
}
|
|
511
|
+
return (await gitHard(['rev-parse', 'HEAD'], cwd, env)).stdout.trim();
|
|
512
|
+
}
|
|
513
|
+
/** Best-effort: return to where we were and drop the throwaway branch. */
|
|
514
|
+
async function cleanup(cwd, origRef, branch, env) {
|
|
515
|
+
await gitSoft(['checkout', '--quiet', origRef], cwd, env);
|
|
516
|
+
await gitSoft(['branch', '-D', branch], cwd, env);
|
|
517
|
+
}
|
|
518
|
+
/** Resolve the advisory locker: git user.name, else $USER/$USERNAME, else ''. */
|
|
519
|
+
async function resolveBy(cwd, env) {
|
|
520
|
+
const name = await gitSoft(['config', 'user.name'], cwd, env);
|
|
521
|
+
if (name.status === 0 && name.stdout.trim() !== '') {
|
|
522
|
+
return name.stdout.trim();
|
|
523
|
+
}
|
|
524
|
+
const e = env ?? process.env;
|
|
525
|
+
return e.USER ?? e.USERNAME ?? '';
|
|
526
|
+
}
|
|
527
|
+
/** `git cat-file -e <object>` — true iff the object exists. */
|
|
528
|
+
async function catFileExists(object, cwd, env) {
|
|
529
|
+
return (await gitSoft(['cat-file', '-e', object], cwd, env)).status === 0;
|
|
530
|
+
}
|
|
531
|
+
/** Run git, returning the raw result (no throw) — for soft checks. */
|
|
532
|
+
function gitSoft(args, cwd, env) {
|
|
533
|
+
return runAsync('git', args, cwd, { env });
|
|
534
|
+
}
|
|
535
|
+
/** Run git; throw on non-zero (genuinely unexpected plumbing failures). */
|
|
536
|
+
async function gitHard(args, cwd, env) {
|
|
537
|
+
const result = await runAsync('git', args, cwd, { env });
|
|
538
|
+
if (result.status !== 0) {
|
|
539
|
+
throw new Error(`git ${args.join(' ')} failed (exit ${result.status}): ${result.stderr.trim()}`);
|
|
540
|
+
}
|
|
541
|
+
return result;
|
|
542
|
+
}
|
|
543
|
+
// --- Decisions ------------------------------------------------------------
|
|
544
|
+
//
|
|
545
|
+
// **CAS contention retry: from instant-fixed-cap to bounded-JITTER + widened
|
|
546
|
+
// budget (fan-out drain).** The earlier recorded model for `createItemThroughCas`
|
|
547
|
+
// was "contention retries INSTANTLY, no delay, tiny fixed cap (3)". That is
|
|
548
|
+
// correct for a SINGLE contender (grab the new base and go) but PATHOLOGICAL for
|
|
549
|
+
// a lifecycle propose fan-out: N parallel legs (one per answered/triaged item)
|
|
550
|
+
// all CAS-append against the SAME `main` ref, refetch and re-push in lockstep,
|
|
551
|
+
// exhaust the tiny cap, and a large fraction exit `contended` (exit 3) EVEN
|
|
552
|
+
// THOUGH every leg's write is valid and would land if they took turns. A real
|
|
553
|
+
// 66-leg propose tick left ~33 legs at exit 3 \u2014 a thundering herd on one ref.
|
|
554
|
+
//
|
|
555
|
+
// The revised model, encoded here:
|
|
556
|
+
// 1. Add a bounded DECORRELATED-JITTER inter-retry delay
|
|
557
|
+
// ({@link nextCasContentionDelayMs}). Parallel legs desynchronise; the herd
|
|
558
|
+
// breaks; the fan-out DRAINS. Small enough that a lone leg is barely
|
|
559
|
+
// slower than today (first-retry delay is O(base)).
|
|
560
|
+
// 2. WIDEN the budget on the lifecycle path ({@link LIFECYCLE_CAS_CONTENTION}):
|
|
561
|
+
// more retries + a wall-clock envelope, since a lifecycle leg has no human
|
|
562
|
+
// waiting. The regime stays BOUNDED (attempts cap AND wall-clock cap) so
|
|
563
|
+
// genuine exhaustion still yields a clean `contended`, never a hang.
|
|
564
|
+
// 3. Scope the widened budget to the LIFECYCLE path via an explicit
|
|
565
|
+
// `contention` option threaded from the driver (`advance.ts` \u2192
|
|
566
|
+
// `promoteObservation` / `mintAdr` \u2192 `createItemThroughCas`). Direct
|
|
567
|
+
// callers that pass nothing keep the INTERACTIVE shape
|
|
568
|
+
// ({@link INTERACTIVE_CAS_CONTENTION}): 3 retries, NO delay \u2014 backwards
|
|
569
|
+
// compatible, so a human-typed single-item caller stays prompt.
|
|
570
|
+
//
|
|
571
|
+
// **Deliberately DISTINCT from the OUTAGE regime in `retry-backoff.ts`.** That
|
|
572
|
+
// helper models an unreachable remote with EXPONENTIAL backoff (the remote may
|
|
573
|
+
// come back). Contention is a REJECTED push against a MOVED ref \u2014 the remote is
|
|
574
|
+
// fine, the base just advanced. It wants a small RANDOM delay to BREAK LOCKSTEP,
|
|
575
|
+
// not an exponential outage ramp. Do NOT reuse `retryWithBackoff` here.
|
|
576
|
+
//
|
|
577
|
+
// **Jitter shape: AWS-style DECORRELATED JITTER**
|
|
578
|
+
// (`delay = uniform(base, min(cap, prev*3))`). Grows toward the cap when the
|
|
579
|
+
// contention persists (more spread across the herd as the tail hangs on), but
|
|
580
|
+
// bounded above by `cap`. The alternative \u2014 flat `uniform(0, base)` \u2014 was
|
|
581
|
+
// considered and rejected: it does not adapt to a long tail, so the last N legs
|
|
582
|
+
// still collide at similar rates once the herd shrinks; the decorrelated growth
|
|
583
|
+
// is what makes the tail DRAIN under sustained parallel load. Same shape as the
|
|
584
|
+
// recovery-rebase jitter loop in `integration-core.ts` uses (`Math.floor(random
|
|
585
|
+
// * (jitterMs + 1))` on a fixed cap) but with the AWS growth term so a lifecycle
|
|
586
|
+
// tail is not stuck on a tiny fixed window.
|
|
587
|
+
//
|
|
588
|
+
// **Composes with, does NOT duplicate, the held-lock-subtraction sibling**
|
|
589
|
+
// (`advance-matrix-enumerates-held-locked-items-so-legs-fail-every-tick`): that
|
|
590
|
+
// task reduces the NUMBER of legs entering the matrix (never enumerate a held
|
|
591
|
+
// item); this task handles the RESIDUAL legitimate contention among the valid
|
|
592
|
+
// legs that DO get scheduled. The two layers together should quiet the propose-
|
|
593
|
+
// matrix CI noise.
|
|
594
|
+
//# sourceMappingURL=advancing-lock.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"advancing-lock.js","sourceRoot":"","sources":["../src/advancing-lock.ts"],"names":[],"mappings":"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"}
|