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,195 @@
|
|
|
1
|
+
import {brand} from './brand.js';
|
|
2
|
+
import type {IssueComment} from './issue-provider.js';
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* **The intake MARKER** (task `intake-self-awareness-resumption-tracking`, prd
|
|
6
|
+
* `issue-intake` US #2/#10): the ONE primitive the deterministic pre-decision
|
|
7
|
+
* TRIAGE GATE is built on. A machine-readable HIDDEN HTML comment intake stamps on
|
|
8
|
+
* EVERY comment it posts, recording a neutral FACT about what intake did:
|
|
9
|
+
*
|
|
10
|
+
* - `<!-- dorfl:intake kind=ask seen=412,418 -->`
|
|
11
|
+
* - `<!-- dorfl:intake kind=bounced seen=503 -->`
|
|
12
|
+
* - `<!-- dorfl:intake kind=created slug=<slug> seen=601,602 -->`
|
|
13
|
+
*
|
|
14
|
+
* (Namespace `${brand.base}:intake` is built from {@link brand} exactly like
|
|
15
|
+
* `PROCESSING_LOCK_LABEL`, so a rebrand updates it automatically.)
|
|
16
|
+
*
|
|
17
|
+
* It is the SOLE recovery signal — no sidecar, no cursor, no bot-identity. Intake
|
|
18
|
+
* recognises ITS OWN comments by the marker alone (provider-portable, survives
|
|
19
|
+
* posting under a human's token). Hidden HTML comments render as NOTHING on GitHub
|
|
20
|
+
* but are present in the raw markdown each comment's `body` carries — so the triage
|
|
21
|
+
* parses the marker straight out of {@link IssueComment.body}.
|
|
22
|
+
*
|
|
23
|
+
* What the marker records (DECIDED 2026-06-10):
|
|
24
|
+
*
|
|
25
|
+
* - **`kind`** \u2014 a NEUTRAL fact (`ask` / `bounced` / `created`). Whether a kind is
|
|
26
|
+
* TERMINAL is the TRIAGE's interpretation, NEVER data in the marker (no `terminal`
|
|
27
|
+
* field): if a kind's terminal-ness ever changes that is a triage change and old
|
|
28
|
+
* markers stay valid.
|
|
29
|
+
* - **`slug`** \u2014 present only on `kind=created` (which task/prd intake produced).
|
|
30
|
+
* - **`seen=<id>,\u2026`** \u2014 the per-run DELTA of HUMAN comment ids intake READ this run
|
|
31
|
+
* (EXCLUDING intake's own marker-comments AND any human id already in a prior
|
|
32
|
+
* marker's `seen=`). Ids, not a count, because a count cannot distinguish "a new
|
|
33
|
+
* comment appeared" from "an old one was deleted"; ids do both via set arithmetic.
|
|
34
|
+
* The full `seenSet` is the UNION of every marker's `seen=` (the CHAIN model).
|
|
35
|
+
*
|
|
36
|
+
* The grammar is SHARED so the dependent completion-comment task just stamps a
|
|
37
|
+
* `created` marker via {@link stampIntakeMarker}, which the triage's
|
|
38
|
+
* `already-terminal` branch then consumes.
|
|
39
|
+
*/
|
|
40
|
+
|
|
41
|
+
/** The neutral KIND a marker records \u2014 a fact about what intake did (NOT terminal-ness). */
|
|
42
|
+
export type IntakeMarkerKind = 'ask' | 'bounced' | 'created';
|
|
43
|
+
|
|
44
|
+
/** A parsed intake marker \u2014 `kind` + the human ids it `seen=` + an optional `slug`. */
|
|
45
|
+
export interface IntakeMarker {
|
|
46
|
+
/** What intake did (a neutral fact; the TRIAGE owns terminal-ness, not this). */
|
|
47
|
+
kind: IntakeMarkerKind;
|
|
48
|
+
/** The HUMAN comment ids intake READ this run (the per-run delta; may be empty). */
|
|
49
|
+
seen: string[];
|
|
50
|
+
/** The created task/prd slug \u2014 present only on `kind=created`. */
|
|
51
|
+
slug?: string;
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
/** The marker's brand-derived namespace token (today `dorfl:intake`). */
|
|
55
|
+
const MARKER_NS = `${brand.base}:intake`;
|
|
56
|
+
|
|
57
|
+
/**
|
|
58
|
+
* Matches ONE intake marker anywhere in a comment body (the hidden HTML comment).
|
|
59
|
+
* Captures the inner attribute run (everything after the namespace, before `-->`)
|
|
60
|
+
* so {@link parseIntakeMarker} can pull `kind` / `slug` / `seen` out of it. Global
|
|
61
|
+
* so a body that (pathologically) carries more than one is fully scanned, though
|
|
62
|
+
* intake stamps exactly one per comment.
|
|
63
|
+
*/
|
|
64
|
+
const MARKER_RE = new RegExp(
|
|
65
|
+
`<!--\\s*${escapeRegExp(MARKER_NS)}\\s+([^>]*?)\\s*-->`,
|
|
66
|
+
'g',
|
|
67
|
+
);
|
|
68
|
+
|
|
69
|
+
/**
|
|
70
|
+
* STAMP the intake marker onto a comment body intake is about to post (the SHARED
|
|
71
|
+
* producer for ALL of ask / bounced / created). Appends the hidden HTML comment
|
|
72
|
+
* AFTER the human-readable text, separated by a blank line, so the rendered comment
|
|
73
|
+
* is just the text (the marker is invisible) yet the raw markdown carries the
|
|
74
|
+
* marker for the triage to recover.
|
|
75
|
+
*
|
|
76
|
+
* `seen` is the per-run DELTA of human comment ids (computed by
|
|
77
|
+
* {@link computeSeenDelta}); it is emitted even when empty (`seen=`) so the grammar
|
|
78
|
+
* is uniform and the parser never has to special-case its absence. `slug` is
|
|
79
|
+
* emitted only for `kind=created`.
|
|
80
|
+
*/
|
|
81
|
+
export function stampIntakeMarker(
|
|
82
|
+
body: string,
|
|
83
|
+
marker: {kind: IntakeMarkerKind; seen: string[]; slug?: string},
|
|
84
|
+
): string {
|
|
85
|
+
const parts = [`kind=${marker.kind}`];
|
|
86
|
+
if (
|
|
87
|
+
marker.kind === 'created' &&
|
|
88
|
+
marker.slug !== undefined &&
|
|
89
|
+
marker.slug !== ''
|
|
90
|
+
) {
|
|
91
|
+
parts.push(`slug=${marker.slug}`);
|
|
92
|
+
}
|
|
93
|
+
parts.push(`seen=${marker.seen.join(',')}`);
|
|
94
|
+
const tag = `<!-- ${MARKER_NS} ${parts.join(' ')} -->`;
|
|
95
|
+
const text = body.replace(/\s+$/, '');
|
|
96
|
+
return text === '' ? tag : `${text}\n\n${tag}`;
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
/**
|
|
100
|
+
* Parse the FIRST intake marker out of a comment body (the SHARED consumer). Returns
|
|
101
|
+
* `undefined` when the body carries no intake marker \u2014 i.e. it is a HUMAN comment
|
|
102
|
+
* (the triage ranges its unseen-check over exactly these). A malformed marker (no
|
|
103
|
+
* `kind`, or an unknown `kind`) is treated as ABSENT rather than throwing: an
|
|
104
|
+
* unparseable hidden comment must never make the triage crash or misclassify a
|
|
105
|
+
* human comment as intake's.
|
|
106
|
+
*/
|
|
107
|
+
export function parseIntakeMarker(body: string): IntakeMarker | undefined {
|
|
108
|
+
MARKER_RE.lastIndex = 0;
|
|
109
|
+
const match = MARKER_RE.exec(body);
|
|
110
|
+
if (match === null) {
|
|
111
|
+
return undefined;
|
|
112
|
+
}
|
|
113
|
+
const attrs = match[1];
|
|
114
|
+
const kind = readAttr(attrs, 'kind');
|
|
115
|
+
if (kind !== 'ask' && kind !== 'bounced' && kind !== 'created') {
|
|
116
|
+
return undefined;
|
|
117
|
+
}
|
|
118
|
+
const slug = readAttr(attrs, 'slug');
|
|
119
|
+
const seenRaw = readAttr(attrs, 'seen');
|
|
120
|
+
const seen =
|
|
121
|
+
seenRaw === undefined || seenRaw === ''
|
|
122
|
+
? []
|
|
123
|
+
: seenRaw.split(',').filter((id) => id !== '');
|
|
124
|
+
return {
|
|
125
|
+
kind,
|
|
126
|
+
seen,
|
|
127
|
+
...(slug !== undefined && slug !== '' ? {slug} : {}),
|
|
128
|
+
};
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
/** True iff the comment carries an intake marker \u2014 i.e. it is INTAKE's OWN comment. */
|
|
132
|
+
export function isIntakeComment(comment: IssueComment): boolean {
|
|
133
|
+
return parseIntakeMarker(comment.body) !== undefined;
|
|
134
|
+
}
|
|
135
|
+
|
|
136
|
+
/**
|
|
137
|
+
* Compute the per-run `seen=` DELTA for a marker intake is about to stamp: the ids
|
|
138
|
+
* of the HUMAN comments in the thread as intake READ it, EXCLUDING (a) intake's own
|
|
139
|
+
* marker-comments (identified by carrying a marker) and (b) any human id ALREADY
|
|
140
|
+
* recorded in a prior intake marker's `seen=` (the chain model keeps each marker's
|
|
141
|
+
* `seen=` a bounded per-run delta; the union reconstructs the whole). Order follows
|
|
142
|
+
* `listComments`' oldest-first; ids with no value (a provider that omitted one) are
|
|
143
|
+
* dropped \u2014 the triage only reasons over ids it actually has.
|
|
144
|
+
*/
|
|
145
|
+
export function computeSeenDelta(comments: IssueComment[]): string[] {
|
|
146
|
+
const already = seenSetFrom(comments);
|
|
147
|
+
const delta: string[] = [];
|
|
148
|
+
for (const comment of comments) {
|
|
149
|
+
if (isIntakeComment(comment)) {
|
|
150
|
+
continue; // intake's own marker-comment \u2014 NEVER recorded in `seen=`.
|
|
151
|
+
}
|
|
152
|
+
const id = comment.id;
|
|
153
|
+
if (id === undefined || id === '') {
|
|
154
|
+
continue;
|
|
155
|
+
}
|
|
156
|
+
if (already.has(id) || delta.includes(id)) {
|
|
157
|
+
continue;
|
|
158
|
+
}
|
|
159
|
+
delta.push(id);
|
|
160
|
+
}
|
|
161
|
+
return delta;
|
|
162
|
+
}
|
|
163
|
+
|
|
164
|
+
/**
|
|
165
|
+
* Build the full `seenSet` for the TRIAGE: the UNION of every intake marker's
|
|
166
|
+
* `seen=` id-list in the thread (the chain model \u2014 each marker stores a per-run
|
|
167
|
+
* delta, the union reconstructs the complete set of human comments intake has EVER
|
|
168
|
+
* read). Ranges over intake's OWN comments (the ones carrying a marker); a human
|
|
169
|
+
* comment never carries a `seen=`.
|
|
170
|
+
*/
|
|
171
|
+
export function seenSetFrom(comments: IssueComment[]): Set<string> {
|
|
172
|
+
const set = new Set<string>();
|
|
173
|
+
for (const comment of comments) {
|
|
174
|
+
const marker = parseIntakeMarker(comment.body);
|
|
175
|
+
if (marker === undefined) {
|
|
176
|
+
continue;
|
|
177
|
+
}
|
|
178
|
+
for (const id of marker.seen) {
|
|
179
|
+
set.add(id);
|
|
180
|
+
}
|
|
181
|
+
}
|
|
182
|
+
return set;
|
|
183
|
+
}
|
|
184
|
+
|
|
185
|
+
/** Read a `key=value` attribute out of a marker's inner attribute run. */
|
|
186
|
+
function readAttr(attrs: string, key: string): string | undefined {
|
|
187
|
+
const re = new RegExp(`(?:^|\\s)${escapeRegExp(key)}=([^\\s]*)`);
|
|
188
|
+
const match = re.exec(attrs);
|
|
189
|
+
return match === null ? undefined : match[1];
|
|
190
|
+
}
|
|
191
|
+
|
|
192
|
+
/** Escape a literal for embedding in a RegExp (the brand base + attribute keys). */
|
|
193
|
+
function escapeRegExp(literal: string): string {
|
|
194
|
+
return literal.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
|
|
195
|
+
}
|
|
@@ -0,0 +1,138 @@
|
|
|
1
|
+
import type {IssueComment} from './issue-provider.js';
|
|
2
|
+
import {
|
|
3
|
+
parseIntakeMarker,
|
|
4
|
+
seenSetFrom,
|
|
5
|
+
type IntakeMarkerKind,
|
|
6
|
+
} from './intake-marker.js';
|
|
7
|
+
|
|
8
|
+
/**
|
|
9
|
+
* **The intake TRIAGE GATE** (task `intake-self-awareness-resumption-tracking`, prd
|
|
10
|
+
* `issue-intake` US #2/#10): a DETERMINISTIC pre-decision gate that runs UNDER the
|
|
11
|
+
* processing lock, BEFORE the decision prompt, deciding whether intake should run
|
|
12
|
+
* the prompt at all. Built ENTIRELY on the thread MARKER (no sidecar, no cursor, no
|
|
13
|
+
* bot-identity), it makes intake skip when it has the last word or the issue is
|
|
14
|
+
* already terminal, and run the prompt ONLY on genuine new human input \u2014 which is
|
|
15
|
+
* also the COMPLETE fix for the self-trigger hazard (intake's own freshly-posted
|
|
16
|
+
* comment carries a marker, so it is excluded from the human-comment check by
|
|
17
|
+
* construction).
|
|
18
|
+
*
|
|
19
|
+
* The TERMINAL/non-terminal split lives HERE, never in the marker: `ask` is
|
|
20
|
+
* non-terminal, `bounced`/`created` are terminal. Re-classifying a kind later is a
|
|
21
|
+
* change to {@link TERMINAL_KINDS} only \u2014 old markers stay valid.
|
|
22
|
+
*
|
|
23
|
+
* This is PURE logic over the stubbed thread (no seam, no git, no `gh`), the same
|
|
24
|
+
* discipline `intake-event.ts` / `failure-cause.ts` keep.
|
|
25
|
+
*/
|
|
26
|
+
|
|
27
|
+
/** The kinds the TRIAGE treats as TERMINAL (the issue was already transformed). */
|
|
28
|
+
const TERMINAL_KINDS: ReadonlySet<IntakeMarkerKind> = new Set<IntakeMarkerKind>(
|
|
29
|
+
['bounced', 'created'],
|
|
30
|
+
);
|
|
31
|
+
|
|
32
|
+
/**
|
|
33
|
+
* The TRIAGE outcome. `proceed` runs the prompt (optionally carrying enrichment
|
|
34
|
+
* flags for the prompt); `no-new-input` / `already-terminal` are SKIPS (siblings of
|
|
35
|
+
* `locked` \u2014 "ran, deliberately did nothing", both exit 0, observable by CI + a
|
|
36
|
+
* human).
|
|
37
|
+
*/
|
|
38
|
+
export type IntakeTriageDecision =
|
|
39
|
+
| {
|
|
40
|
+
action: 'proceed';
|
|
41
|
+
/**
|
|
42
|
+
* Enrichment for the prompt on the PROCEED path. `predatingIds` are HUMAN
|
|
43
|
+
* comment ids that RACED IN (read-then-someone-commented-then-posted) \u2014 they
|
|
44
|
+
* PRE-DATE intake's last turn, so the prompt treats them as context for a
|
|
45
|
+
* PRIOR state, not necessarily a fresh answer. `deletedSeenCount` is the count
|
|
46
|
+
* of previously-SEEN human comments that have since been DELETED (computed
|
|
47
|
+
* ONLY on this raced proceed path \u2014 deletion is enrichment, never a wake
|
|
48
|
+
* trigger), flagged so the prompt does not assume its prior premises still
|
|
49
|
+
* hold. Both are absent/zero on the ordinary fresh/mid-ask proceed.
|
|
50
|
+
*/
|
|
51
|
+
predatingIds: string[];
|
|
52
|
+
deletedSeenCount: number;
|
|
53
|
+
}
|
|
54
|
+
| {action: 'skip'; outcome: 'no-new-input' | 'already-terminal'};
|
|
55
|
+
|
|
56
|
+
/**
|
|
57
|
+
* Run the TRIAGE over the issue's full comment thread (oldest-first, as
|
|
58
|
+
* `listComments` returns it). The canonical branches (prd `issue-intake`):
|
|
59
|
+
*
|
|
60
|
+
* 1. **Last comment is INTAKE's** (carries a marker). Build `seenSet` = the UNION of
|
|
61
|
+
* every intake marker's `seen=` id-list, then:
|
|
62
|
+
* - **PRIMARY** \u2014 is there an UNSEEN HUMAN comment (one WITHOUT a marker whose id
|
|
63
|
+
* is NOT in `seenSet`)? \u2192 PROCEED. The raced comment(s) are flagged as
|
|
64
|
+
* PRE-DATING intake's last turn. ALSO compute `seenSet \u2212 currentHumanThreadIds`;
|
|
65
|
+
* a non-empty difference means a previously-seen human comment was DELETED \u2014
|
|
66
|
+
* flagged (count only) so the prompt reassesses. (Deletion is ENRICHMENT on this
|
|
67
|
+
* proceed path only, NEVER a standalone wake trigger.)
|
|
68
|
+
* - **otherwise** (every human comment is in `seenSet`) \u2192 SKIP `no-new-input`. No
|
|
69
|
+
* deletion hunt here \u2014 a deletion with no new comment is not a turn worth waking
|
|
70
|
+
* for. This is what makes intake SELF-TRIGGERING a no-op by construction.
|
|
71
|
+
* 2. **Last comment is someone ELSE's** (no marker on the last comment):
|
|
72
|
+
* - the thread already contains a TERMINAL marker (`bounced`/`created`) \u2192 SKIP
|
|
73
|
+
* `already-terminal` (the issue was already transformed).
|
|
74
|
+
* - otherwise (no terminal marker \u2014 fresh issue, or mid-`ask` loop) \u2192 PROCEED.
|
|
75
|
+
* 3. **Empty thread** \u2192 PROCEED (a fresh issue with no comments).
|
|
76
|
+
*/
|
|
77
|
+
export function triageIntake(comments: IssueComment[]): IntakeTriageDecision {
|
|
78
|
+
if (comments.length === 0) {
|
|
79
|
+
// A fresh issue with no thread \u2014 there is genuine new material (the body).
|
|
80
|
+
return {action: 'proceed', predatingIds: [], deletedSeenCount: 0};
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
const last = comments[comments.length - 1];
|
|
84
|
+
const lastIsIntake = parseIntakeMarker(last.body) !== undefined;
|
|
85
|
+
|
|
86
|
+
if (lastIsIntake) {
|
|
87
|
+
// BRANCH 1 \u2014 intake has the last word. Did a human comment race in unseen?
|
|
88
|
+
const seenSet = seenSetFrom(comments);
|
|
89
|
+
const humanComments = comments.filter(
|
|
90
|
+
(c) => parseIntakeMarker(c.body) === undefined,
|
|
91
|
+
);
|
|
92
|
+
const currentHumanIds = new Set(
|
|
93
|
+
humanComments
|
|
94
|
+
.map((c) => c.id)
|
|
95
|
+
.filter((id): id is string => id !== undefined && id !== ''),
|
|
96
|
+
);
|
|
97
|
+
// PRIMARY: HUMAN comments (markerless) whose id is NOT in seenSet \u2014 raced in.
|
|
98
|
+
const predatingIds = humanComments
|
|
99
|
+
.map((c) => c.id)
|
|
100
|
+
.filter(
|
|
101
|
+
(id): id is string => id !== undefined && id !== '' && !seenSet.has(id),
|
|
102
|
+
);
|
|
103
|
+
if (predatingIds.length > 0) {
|
|
104
|
+
// PROCEED on the raced comment(s). DELETION ENRICHMENT (only here): a
|
|
105
|
+
// previously-seen human id no longer present in the thread was deleted.
|
|
106
|
+
let deletedSeenCount = 0;
|
|
107
|
+
for (const id of seenSet) {
|
|
108
|
+
if (!currentHumanIds.has(id)) {
|
|
109
|
+
deletedSeenCount += 1;
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
return {action: 'proceed', predatingIds, deletedSeenCount};
|
|
113
|
+
}
|
|
114
|
+
// Every human comment is in seenSet \u2014 intake has the last word and saw
|
|
115
|
+
// everything. SKIP (no deletion hunt: a bare deletion is not a wake trigger).
|
|
116
|
+
return {action: 'skip', outcome: 'no-new-input'};
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
// BRANCH 2 \u2014 the last comment is a human's. A terminal marker earlier in the
|
|
120
|
+
// thread means the issue was already transformed; a later human comment does not
|
|
121
|
+
// re-open it (a future feature may; for now, skip).
|
|
122
|
+
if (hasTerminalMarker(comments)) {
|
|
123
|
+
return {action: 'skip', outcome: 'already-terminal'};
|
|
124
|
+
}
|
|
125
|
+
// Fresh issue, or a human reply mid-`ask` loop \u2014 PROCEED to the decision.
|
|
126
|
+
return {action: 'proceed', predatingIds: [], deletedSeenCount: 0};
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
/** True iff any comment in the thread carries a TERMINAL intake marker. */
|
|
130
|
+
function hasTerminalMarker(comments: IssueComment[]): boolean {
|
|
131
|
+
for (const comment of comments) {
|
|
132
|
+
const marker = parseIntakeMarker(comment.body);
|
|
133
|
+
if (marker !== undefined && TERMINAL_KINDS.has(marker.kind)) {
|
|
134
|
+
return true;
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
return false;
|
|
138
|
+
}
|