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,127 @@
|
|
|
1
|
+
import { brand } from './brand.js';
|
|
2
|
+
/** The marker's brand-derived namespace token (today `dorfl:intake`). */
|
|
3
|
+
const MARKER_NS = `${brand.base}:intake`;
|
|
4
|
+
/**
|
|
5
|
+
* Matches ONE intake marker anywhere in a comment body (the hidden HTML comment).
|
|
6
|
+
* Captures the inner attribute run (everything after the namespace, before `-->`)
|
|
7
|
+
* so {@link parseIntakeMarker} can pull `kind` / `slug` / `seen` out of it. Global
|
|
8
|
+
* so a body that (pathologically) carries more than one is fully scanned, though
|
|
9
|
+
* intake stamps exactly one per comment.
|
|
10
|
+
*/
|
|
11
|
+
const MARKER_RE = new RegExp(`<!--\\s*${escapeRegExp(MARKER_NS)}\\s+([^>]*?)\\s*-->`, 'g');
|
|
12
|
+
/**
|
|
13
|
+
* STAMP the intake marker onto a comment body intake is about to post (the SHARED
|
|
14
|
+
* producer for ALL of ask / bounced / created). Appends the hidden HTML comment
|
|
15
|
+
* AFTER the human-readable text, separated by a blank line, so the rendered comment
|
|
16
|
+
* is just the text (the marker is invisible) yet the raw markdown carries the
|
|
17
|
+
* marker for the triage to recover.
|
|
18
|
+
*
|
|
19
|
+
* `seen` is the per-run DELTA of human comment ids (computed by
|
|
20
|
+
* {@link computeSeenDelta}); it is emitted even when empty (`seen=`) so the grammar
|
|
21
|
+
* is uniform and the parser never has to special-case its absence. `slug` is
|
|
22
|
+
* emitted only for `kind=created`.
|
|
23
|
+
*/
|
|
24
|
+
export function stampIntakeMarker(body, marker) {
|
|
25
|
+
const parts = [`kind=${marker.kind}`];
|
|
26
|
+
if (marker.kind === 'created' &&
|
|
27
|
+
marker.slug !== undefined &&
|
|
28
|
+
marker.slug !== '') {
|
|
29
|
+
parts.push(`slug=${marker.slug}`);
|
|
30
|
+
}
|
|
31
|
+
parts.push(`seen=${marker.seen.join(',')}`);
|
|
32
|
+
const tag = `<!-- ${MARKER_NS} ${parts.join(' ')} -->`;
|
|
33
|
+
const text = body.replace(/\s+$/, '');
|
|
34
|
+
return text === '' ? tag : `${text}\n\n${tag}`;
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* Parse the FIRST intake marker out of a comment body (the SHARED consumer). Returns
|
|
38
|
+
* `undefined` when the body carries no intake marker \u2014 i.e. it is a HUMAN comment
|
|
39
|
+
* (the triage ranges its unseen-check over exactly these). A malformed marker (no
|
|
40
|
+
* `kind`, or an unknown `kind`) is treated as ABSENT rather than throwing: an
|
|
41
|
+
* unparseable hidden comment must never make the triage crash or misclassify a
|
|
42
|
+
* human comment as intake's.
|
|
43
|
+
*/
|
|
44
|
+
export function parseIntakeMarker(body) {
|
|
45
|
+
MARKER_RE.lastIndex = 0;
|
|
46
|
+
const match = MARKER_RE.exec(body);
|
|
47
|
+
if (match === null) {
|
|
48
|
+
return undefined;
|
|
49
|
+
}
|
|
50
|
+
const attrs = match[1];
|
|
51
|
+
const kind = readAttr(attrs, 'kind');
|
|
52
|
+
if (kind !== 'ask' && kind !== 'bounced' && kind !== 'created') {
|
|
53
|
+
return undefined;
|
|
54
|
+
}
|
|
55
|
+
const slug = readAttr(attrs, 'slug');
|
|
56
|
+
const seenRaw = readAttr(attrs, 'seen');
|
|
57
|
+
const seen = seenRaw === undefined || seenRaw === ''
|
|
58
|
+
? []
|
|
59
|
+
: seenRaw.split(',').filter((id) => id !== '');
|
|
60
|
+
return {
|
|
61
|
+
kind,
|
|
62
|
+
seen,
|
|
63
|
+
...(slug !== undefined && slug !== '' ? { slug } : {}),
|
|
64
|
+
};
|
|
65
|
+
}
|
|
66
|
+
/** True iff the comment carries an intake marker \u2014 i.e. it is INTAKE's OWN comment. */
|
|
67
|
+
export function isIntakeComment(comment) {
|
|
68
|
+
return parseIntakeMarker(comment.body) !== undefined;
|
|
69
|
+
}
|
|
70
|
+
/**
|
|
71
|
+
* Compute the per-run `seen=` DELTA for a marker intake is about to stamp: the ids
|
|
72
|
+
* of the HUMAN comments in the thread as intake READ it, EXCLUDING (a) intake's own
|
|
73
|
+
* marker-comments (identified by carrying a marker) and (b) any human id ALREADY
|
|
74
|
+
* recorded in a prior intake marker's `seen=` (the chain model keeps each marker's
|
|
75
|
+
* `seen=` a bounded per-run delta; the union reconstructs the whole). Order follows
|
|
76
|
+
* `listComments`' oldest-first; ids with no value (a provider that omitted one) are
|
|
77
|
+
* dropped \u2014 the triage only reasons over ids it actually has.
|
|
78
|
+
*/
|
|
79
|
+
export function computeSeenDelta(comments) {
|
|
80
|
+
const already = seenSetFrom(comments);
|
|
81
|
+
const delta = [];
|
|
82
|
+
for (const comment of comments) {
|
|
83
|
+
if (isIntakeComment(comment)) {
|
|
84
|
+
continue; // intake's own marker-comment \u2014 NEVER recorded in `seen=`.
|
|
85
|
+
}
|
|
86
|
+
const id = comment.id;
|
|
87
|
+
if (id === undefined || id === '') {
|
|
88
|
+
continue;
|
|
89
|
+
}
|
|
90
|
+
if (already.has(id) || delta.includes(id)) {
|
|
91
|
+
continue;
|
|
92
|
+
}
|
|
93
|
+
delta.push(id);
|
|
94
|
+
}
|
|
95
|
+
return delta;
|
|
96
|
+
}
|
|
97
|
+
/**
|
|
98
|
+
* Build the full `seenSet` for the TRIAGE: the UNION of every intake marker's
|
|
99
|
+
* `seen=` id-list in the thread (the chain model \u2014 each marker stores a per-run
|
|
100
|
+
* delta, the union reconstructs the complete set of human comments intake has EVER
|
|
101
|
+
* read). Ranges over intake's OWN comments (the ones carrying a marker); a human
|
|
102
|
+
* comment never carries a `seen=`.
|
|
103
|
+
*/
|
|
104
|
+
export function seenSetFrom(comments) {
|
|
105
|
+
const set = new Set();
|
|
106
|
+
for (const comment of comments) {
|
|
107
|
+
const marker = parseIntakeMarker(comment.body);
|
|
108
|
+
if (marker === undefined) {
|
|
109
|
+
continue;
|
|
110
|
+
}
|
|
111
|
+
for (const id of marker.seen) {
|
|
112
|
+
set.add(id);
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
return set;
|
|
116
|
+
}
|
|
117
|
+
/** Read a `key=value` attribute out of a marker's inner attribute run. */
|
|
118
|
+
function readAttr(attrs, key) {
|
|
119
|
+
const re = new RegExp(`(?:^|\\s)${escapeRegExp(key)}=([^\\s]*)`);
|
|
120
|
+
const match = re.exec(attrs);
|
|
121
|
+
return match === null ? undefined : match[1];
|
|
122
|
+
}
|
|
123
|
+
/** Escape a literal for embedding in a RegExp (the brand base + attribute keys). */
|
|
124
|
+
function escapeRegExp(literal) {
|
|
125
|
+
return literal.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
|
|
126
|
+
}
|
|
127
|
+
//# sourceMappingURL=intake-marker.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"intake-marker.js","sourceRoot":"","sources":["../src/intake-marker.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import type { IssueComment } from './issue-provider.js';
|
|
2
|
+
/**
|
|
3
|
+
* The TRIAGE outcome. `proceed` runs the prompt (optionally carrying enrichment
|
|
4
|
+
* flags for the prompt); `no-new-input` / `already-terminal` are SKIPS (siblings of
|
|
5
|
+
* `locked` \u2014 "ran, deliberately did nothing", both exit 0, observable by CI + a
|
|
6
|
+
* human).
|
|
7
|
+
*/
|
|
8
|
+
export type IntakeTriageDecision = {
|
|
9
|
+
action: 'proceed';
|
|
10
|
+
/**
|
|
11
|
+
* Enrichment for the prompt on the PROCEED path. `predatingIds` are HUMAN
|
|
12
|
+
* comment ids that RACED IN (read-then-someone-commented-then-posted) \u2014 they
|
|
13
|
+
* PRE-DATE intake's last turn, so the prompt treats them as context for a
|
|
14
|
+
* PRIOR state, not necessarily a fresh answer. `deletedSeenCount` is the count
|
|
15
|
+
* of previously-SEEN human comments that have since been DELETED (computed
|
|
16
|
+
* ONLY on this raced proceed path \u2014 deletion is enrichment, never a wake
|
|
17
|
+
* trigger), flagged so the prompt does not assume its prior premises still
|
|
18
|
+
* hold. Both are absent/zero on the ordinary fresh/mid-ask proceed.
|
|
19
|
+
*/
|
|
20
|
+
predatingIds: string[];
|
|
21
|
+
deletedSeenCount: number;
|
|
22
|
+
} | {
|
|
23
|
+
action: 'skip';
|
|
24
|
+
outcome: 'no-new-input' | 'already-terminal';
|
|
25
|
+
};
|
|
26
|
+
/**
|
|
27
|
+
* Run the TRIAGE over the issue's full comment thread (oldest-first, as
|
|
28
|
+
* `listComments` returns it). The canonical branches (prd `issue-intake`):
|
|
29
|
+
*
|
|
30
|
+
* 1. **Last comment is INTAKE's** (carries a marker). Build `seenSet` = the UNION of
|
|
31
|
+
* every intake marker's `seen=` id-list, then:
|
|
32
|
+
* - **PRIMARY** \u2014 is there an UNSEEN HUMAN comment (one WITHOUT a marker whose id
|
|
33
|
+
* is NOT in `seenSet`)? \u2192 PROCEED. The raced comment(s) are flagged as
|
|
34
|
+
* PRE-DATING intake's last turn. ALSO compute `seenSet \u2212 currentHumanThreadIds`;
|
|
35
|
+
* a non-empty difference means a previously-seen human comment was DELETED \u2014
|
|
36
|
+
* flagged (count only) so the prompt reassesses. (Deletion is ENRICHMENT on this
|
|
37
|
+
* proceed path only, NEVER a standalone wake trigger.)
|
|
38
|
+
* - **otherwise** (every human comment is in `seenSet`) \u2192 SKIP `no-new-input`. No
|
|
39
|
+
* deletion hunt here \u2014 a deletion with no new comment is not a turn worth waking
|
|
40
|
+
* for. This is what makes intake SELF-TRIGGERING a no-op by construction.
|
|
41
|
+
* 2. **Last comment is someone ELSE's** (no marker on the last comment):
|
|
42
|
+
* - the thread already contains a TERMINAL marker (`bounced`/`created`) \u2192 SKIP
|
|
43
|
+
* `already-terminal` (the issue was already transformed).
|
|
44
|
+
* - otherwise (no terminal marker \u2014 fresh issue, or mid-`ask` loop) \u2192 PROCEED.
|
|
45
|
+
* 3. **Empty thread** \u2192 PROCEED (a fresh issue with no comments).
|
|
46
|
+
*/
|
|
47
|
+
export declare function triageIntake(comments: IssueComment[]): IntakeTriageDecision;
|
|
48
|
+
//# sourceMappingURL=intake-triage.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"intake-triage.d.ts","sourceRoot":"","sources":["../src/intake-triage.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAC,YAAY,EAAC,MAAM,qBAAqB,CAAC;AA+BtD;;;;;GAKG;AACH,MAAM,MAAM,oBAAoB,GAC7B;IACA,MAAM,EAAE,SAAS,CAAC;IAClB;;;;;;;;;OASG;IACH,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,gBAAgB,EAAE,MAAM,CAAC;CACxB,GACD;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,cAAc,GAAG,kBAAkB,CAAA;CAAC,CAAC;AAElE;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,wBAAgB,YAAY,CAAC,QAAQ,EAAE,YAAY,EAAE,GAAG,oBAAoB,CAkD3E"}
|
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
import { parseIntakeMarker, seenSetFrom, } from './intake-marker.js';
|
|
2
|
+
/**
|
|
3
|
+
* **The intake TRIAGE GATE** (task `intake-self-awareness-resumption-tracking`, prd
|
|
4
|
+
* `issue-intake` US #2/#10): a DETERMINISTIC pre-decision gate that runs UNDER the
|
|
5
|
+
* processing lock, BEFORE the decision prompt, deciding whether intake should run
|
|
6
|
+
* the prompt at all. Built ENTIRELY on the thread MARKER (no sidecar, no cursor, no
|
|
7
|
+
* bot-identity), it makes intake skip when it has the last word or the issue is
|
|
8
|
+
* already terminal, and run the prompt ONLY on genuine new human input \u2014 which is
|
|
9
|
+
* also the COMPLETE fix for the self-trigger hazard (intake's own freshly-posted
|
|
10
|
+
* comment carries a marker, so it is excluded from the human-comment check by
|
|
11
|
+
* construction).
|
|
12
|
+
*
|
|
13
|
+
* The TERMINAL/non-terminal split lives HERE, never in the marker: `ask` is
|
|
14
|
+
* non-terminal, `bounced`/`created` are terminal. Re-classifying a kind later is a
|
|
15
|
+
* change to {@link TERMINAL_KINDS} only \u2014 old markers stay valid.
|
|
16
|
+
*
|
|
17
|
+
* This is PURE logic over the stubbed thread (no seam, no git, no `gh`), the same
|
|
18
|
+
* discipline `intake-event.ts` / `failure-cause.ts` keep.
|
|
19
|
+
*/
|
|
20
|
+
/** The kinds the TRIAGE treats as TERMINAL (the issue was already transformed). */
|
|
21
|
+
const TERMINAL_KINDS = new Set(['bounced', 'created']);
|
|
22
|
+
/**
|
|
23
|
+
* Run the TRIAGE over the issue's full comment thread (oldest-first, as
|
|
24
|
+
* `listComments` returns it). The canonical branches (prd `issue-intake`):
|
|
25
|
+
*
|
|
26
|
+
* 1. **Last comment is INTAKE's** (carries a marker). Build `seenSet` = the UNION of
|
|
27
|
+
* every intake marker's `seen=` id-list, then:
|
|
28
|
+
* - **PRIMARY** \u2014 is there an UNSEEN HUMAN comment (one WITHOUT a marker whose id
|
|
29
|
+
* is NOT in `seenSet`)? \u2192 PROCEED. The raced comment(s) are flagged as
|
|
30
|
+
* PRE-DATING intake's last turn. ALSO compute `seenSet \u2212 currentHumanThreadIds`;
|
|
31
|
+
* a non-empty difference means a previously-seen human comment was DELETED \u2014
|
|
32
|
+
* flagged (count only) so the prompt reassesses. (Deletion is ENRICHMENT on this
|
|
33
|
+
* proceed path only, NEVER a standalone wake trigger.)
|
|
34
|
+
* - **otherwise** (every human comment is in `seenSet`) \u2192 SKIP `no-new-input`. No
|
|
35
|
+
* deletion hunt here \u2014 a deletion with no new comment is not a turn worth waking
|
|
36
|
+
* for. This is what makes intake SELF-TRIGGERING a no-op by construction.
|
|
37
|
+
* 2. **Last comment is someone ELSE's** (no marker on the last comment):
|
|
38
|
+
* - the thread already contains a TERMINAL marker (`bounced`/`created`) \u2192 SKIP
|
|
39
|
+
* `already-terminal` (the issue was already transformed).
|
|
40
|
+
* - otherwise (no terminal marker \u2014 fresh issue, or mid-`ask` loop) \u2192 PROCEED.
|
|
41
|
+
* 3. **Empty thread** \u2192 PROCEED (a fresh issue with no comments).
|
|
42
|
+
*/
|
|
43
|
+
export function triageIntake(comments) {
|
|
44
|
+
if (comments.length === 0) {
|
|
45
|
+
// A fresh issue with no thread \u2014 there is genuine new material (the body).
|
|
46
|
+
return { action: 'proceed', predatingIds: [], deletedSeenCount: 0 };
|
|
47
|
+
}
|
|
48
|
+
const last = comments[comments.length - 1];
|
|
49
|
+
const lastIsIntake = parseIntakeMarker(last.body) !== undefined;
|
|
50
|
+
if (lastIsIntake) {
|
|
51
|
+
// BRANCH 1 \u2014 intake has the last word. Did a human comment race in unseen?
|
|
52
|
+
const seenSet = seenSetFrom(comments);
|
|
53
|
+
const humanComments = comments.filter((c) => parseIntakeMarker(c.body) === undefined);
|
|
54
|
+
const currentHumanIds = new Set(humanComments
|
|
55
|
+
.map((c) => c.id)
|
|
56
|
+
.filter((id) => id !== undefined && id !== ''));
|
|
57
|
+
// PRIMARY: HUMAN comments (markerless) whose id is NOT in seenSet \u2014 raced in.
|
|
58
|
+
const predatingIds = humanComments
|
|
59
|
+
.map((c) => c.id)
|
|
60
|
+
.filter((id) => id !== undefined && id !== '' && !seenSet.has(id));
|
|
61
|
+
if (predatingIds.length > 0) {
|
|
62
|
+
// PROCEED on the raced comment(s). DELETION ENRICHMENT (only here): a
|
|
63
|
+
// previously-seen human id no longer present in the thread was deleted.
|
|
64
|
+
let deletedSeenCount = 0;
|
|
65
|
+
for (const id of seenSet) {
|
|
66
|
+
if (!currentHumanIds.has(id)) {
|
|
67
|
+
deletedSeenCount += 1;
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
return { action: 'proceed', predatingIds, deletedSeenCount };
|
|
71
|
+
}
|
|
72
|
+
// Every human comment is in seenSet \u2014 intake has the last word and saw
|
|
73
|
+
// everything. SKIP (no deletion hunt: a bare deletion is not a wake trigger).
|
|
74
|
+
return { action: 'skip', outcome: 'no-new-input' };
|
|
75
|
+
}
|
|
76
|
+
// BRANCH 2 \u2014 the last comment is a human's. A terminal marker earlier in the
|
|
77
|
+
// thread means the issue was already transformed; a later human comment does not
|
|
78
|
+
// re-open it (a future feature may; for now, skip).
|
|
79
|
+
if (hasTerminalMarker(comments)) {
|
|
80
|
+
return { action: 'skip', outcome: 'already-terminal' };
|
|
81
|
+
}
|
|
82
|
+
// Fresh issue, or a human reply mid-`ask` loop \u2014 PROCEED to the decision.
|
|
83
|
+
return { action: 'proceed', predatingIds: [], deletedSeenCount: 0 };
|
|
84
|
+
}
|
|
85
|
+
/** True iff any comment in the thread carries a TERMINAL intake marker. */
|
|
86
|
+
function hasTerminalMarker(comments) {
|
|
87
|
+
for (const comment of comments) {
|
|
88
|
+
const marker = parseIntakeMarker(comment.body);
|
|
89
|
+
if (marker !== undefined && TERMINAL_KINDS.has(marker.kind)) {
|
|
90
|
+
return true;
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
return false;
|
|
94
|
+
}
|
|
95
|
+
//# sourceMappingURL=intake-triage.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"intake-triage.js","sourceRoot":"","sources":["../src/intake-triage.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,185 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The `install-ci` ISSUE-INTAKE capability (prd `runner-in-ci`, task
|
|
3
|
+
* `install-ci-intake-trigger-and-review-surface`; capability D: consider incoming
|
|
4
|
+
* issues → task/prd, AND insertion point E: surface the review verdict back into
|
|
5
|
+
* the issue thread). This module GENERATES the one fixed intake workflow file and
|
|
6
|
+
* STRUCTURALLY VALIDATES it, mirroring the snapshot-assertion style of
|
|
7
|
+
* `advance-lifecycle-template.ts` / `advance-ci-template.ts` (the package depends on
|
|
8
|
+
* NO YAML lib, so the checks are presence/shape assertions over the raw text). It
|
|
9
|
+
* ALSO carries the PURE author-trust → per-outcome-flags DERIVATION
|
|
10
|
+
* ({@link deriveIntakeFlags}) — CI's merge-vs-propose POLICY, the load-bearing
|
|
11
|
+
* testable logic the workflow encodes at runtime.
|
|
12
|
+
*
|
|
13
|
+
* SCOPE FENCE (prd Out-of-Scope): the issue→artifact TRANSFORM engine is
|
|
14
|
+
* `issue-intake`'s (`intake <N>` + its four-outcome dispatch + the per-outcome
|
|
15
|
+
* KNOBS + the lone-task review that posts to the issue thread). CI only
|
|
16
|
+
* WIRES/SCHEDULES/INVOKES it and owns the merge-vs-propose POLICY + the delivery
|
|
17
|
+
* surface. This module emits NO transform; it emits the WORKFLOW that calls it.
|
|
18
|
+
*
|
|
19
|
+
* The discipline (prd capability-D row + the merge-vs-propose POLICY + the two
|
|
20
|
+
* RESOLVED design decisions in the task):
|
|
21
|
+
*
|
|
22
|
+
* - TRIGGERS: `issues` opened, `issue_comment` created, and a label
|
|
23
|
+
* (`dorfl:intake`). It invokes `intake <N>` (EXPLICIT, four-outcome
|
|
24
|
+
* dispatch) — never a bare slug.
|
|
25
|
+
* - EVENT→`IntakeEventKind` MAPPING (Decision 2: no edit-detection): only a
|
|
26
|
+
* CREATED `issue_comment` (and an opened issue / the label) drives
|
|
27
|
+
* (re-)evaluation; an EDITED comment is NOT a trigger (the ID-based
|
|
28
|
+
* `seen=<ids>` watermark suffices). The "post a NEW comment to signal an edit"
|
|
29
|
+
* convention is documented in the workflow so a human knows to re-trigger.
|
|
30
|
+
* - AUTHOR-TRUST → per-outcome FLAGS (Decision 1, {@link deriveIntakeFlags}): an
|
|
31
|
+
* UNTRUSTED author (`author_association` not in OWNER/MEMBER/COLLABORATOR)
|
|
32
|
+
* forces `--propose-task` REGARDLESS of the `autoBuild` gate, while
|
|
33
|
+
* `--merge-spec` stays allowed (a human still tasks a spec before anything
|
|
34
|
+
* autonomous acts — the checkpoint is intact). A TRUSTED author gets the plain
|
|
35
|
+
* gate-derived mode for both. The fully-gateless "all gates on + merge
|
|
36
|
+
* everywhere" path is a LOUD, NON-DEFAULT opt-in — the default is conservative
|
|
37
|
+
* (propose / human-in-the-loop).
|
|
38
|
+
* - INSERTION POINT E (the issue-thread review surface): the review verdict over
|
|
39
|
+
* intake's generated prds/tasks is surfaced into the ISSUE THREAD via the
|
|
40
|
+
* `IssueProvider.postIssueComment` seam (issue thread, by NUMBER — NOT the PR
|
|
41
|
+
* seam `postPRComment`, which is keyed by url). This is REUSED, not new:
|
|
42
|
+
* `intake <N>` already runs the lone-task review/edit loop and posts its
|
|
43
|
+
* findings as questions through `postIssueComment`. The workflow surfaces E by
|
|
44
|
+
* INVOKING `intake`; it adds no second review mechanism.
|
|
45
|
+
* - CI runs IN-PLACE (the CI container IS the isolation): no
|
|
46
|
+
* `--isolated`/`--remote`/registry. A PER-ISSUE concurrency group serialises
|
|
47
|
+
* overlapping ticks on the SAME issue; the `processing` lock / claim CAS is the
|
|
48
|
+
* real cross-run serialiser.
|
|
49
|
+
* - The running CI job NEVER edits `.github/workflows/**` (US #9): it requests NO
|
|
50
|
+
* `workflows` permission and cannot rewrite its own triggers. It needs
|
|
51
|
+
* `contents: write` + `pull-requests: write` (emit/propose the artifact) +
|
|
52
|
+
* `issues: write` (post the clarifying/review comment back).
|
|
53
|
+
*
|
|
54
|
+
* The structural validator is the dependency-free counterpart of "the workflow
|
|
55
|
+
* parses + carries the right discipline" the task's acceptance criteria require;
|
|
56
|
+
* the test generates this artifact under `--fake` and asserts every invariant.
|
|
57
|
+
*/
|
|
58
|
+
import type { ResolvedCIConfig } from './install-ci-core.js';
|
|
59
|
+
/** The capability id (the registry key + the emitted workflow file stem). */
|
|
60
|
+
export declare const INTAKE_TRIGGER_CAPABILITY_ID = "intake";
|
|
61
|
+
/** The wizard-facing label for the issue-intake capability. */
|
|
62
|
+
export declare const INTAKE_TRIGGER_CAPABILITY_LABEL = "Consider incoming issues \u2192 task/prd + surface the review verdict into the issue thread (the intake trigger: issues / issue_comment / label)";
|
|
63
|
+
/** The repo-relative path (under the output base) of the emitted workflow. */
|
|
64
|
+
export declare const INTAKE_TRIGGER_WORKFLOW_PATH = "workflows/intake.yml";
|
|
65
|
+
/**
|
|
66
|
+
* The intake-trigger LABEL: a label whose addition (re-)triggers intake on an
|
|
67
|
+
* issue (the "label" trigger of capability D), brand-namespaced exactly like the
|
|
68
|
+
* `processing` lock so it cannot collide with a user's own labels. DISTINCT from
|
|
69
|
+
* the transient `processing` lock — this one is a human-facing "please (re-)intake
|
|
70
|
+
* this" signal, not a concurrency mutex.
|
|
71
|
+
*/
|
|
72
|
+
export declare const INTAKE_TRIGGER_LABEL: string;
|
|
73
|
+
/**
|
|
74
|
+
* The trusted `author_association` values (Decision 1): a repo OWNER, an org
|
|
75
|
+
* MEMBER, or a write-COLLABORATOR is TRUSTED; everyone else
|
|
76
|
+
* (`CONTRIBUTOR`/`FIRST_TIME_CONTRIBUTOR`/`FIRST_TIMER`/`NONE`/anything unknown)
|
|
77
|
+
* is UNTRUSTED. This is the WHOLE author-trust signal — admin/write-collaborator,
|
|
78
|
+
* read straight off the event payload, no extra API call, no multi-factor matrix.
|
|
79
|
+
*/
|
|
80
|
+
export declare const TRUSTED_AUTHOR_ASSOCIATIONS: readonly ["OWNER", "MEMBER", "COLLABORATOR"];
|
|
81
|
+
/**
|
|
82
|
+
* The per-outcome integration flags CI passes to `intake <N>` — the GRANULAR
|
|
83
|
+
* per-type pair (the aggregates `--merge`/`--propose` are not needed because CI
|
|
84
|
+
* always resolves BOTH types explicitly). Each is `'merge'` or `'propose'`.
|
|
85
|
+
*/
|
|
86
|
+
export interface IntakeIntegrationFlags {
|
|
87
|
+
/** The spec outcome's mode → `--merge-spec` / `--propose-spec`. */
|
|
88
|
+
spec: 'merge' | 'propose';
|
|
89
|
+
/** The task outcome's mode → `--merge-task` / `--propose-task`. */
|
|
90
|
+
task: 'merge' | 'propose';
|
|
91
|
+
/**
|
|
92
|
+
* The ORIGIN-TRUST verdict CI passes to `intake <N>` via `--origin-trust`
|
|
93
|
+
* (task `untrusted-origin-forces-build-propose`) so the emitted prd/task is
|
|
94
|
+
* STAMPED with how it was born. Derived from the SAME `author_association` case
|
|
95
|
+
* as the integration flags (it IS `authorTrusted` collapsed to the wire value),
|
|
96
|
+
* so the stamp and the integration mode CANNOT desync. `intake.ts` writes it
|
|
97
|
+
* verbatim onto the frontmatter — it never re-resolves trust (the `intake.ts`
|
|
98
|
+
* ~L296 boundary: author-trust is CI's POLICY, passed IN, not resolved here).
|
|
99
|
+
*/
|
|
100
|
+
originTrust: 'trusted' | 'untrusted';
|
|
101
|
+
}
|
|
102
|
+
/** The gate state CI composes with author-trust to derive the per-outcome flags. */
|
|
103
|
+
export interface IntakeGateState {
|
|
104
|
+
/**
|
|
105
|
+
* `autoBuild` — whether an agent will AUTO-BUILD an undeclared task next. ON ⇒
|
|
106
|
+
* a task needs a human PR checkpoint NOW (`--propose-task`); OFF ⇒ a human
|
|
107
|
+
* must build it, so it may `--merge-task` (when the author is also trusted).
|
|
108
|
+
*/
|
|
109
|
+
autoBuild: boolean;
|
|
110
|
+
/**
|
|
111
|
+
* `autoTask` — whether an agent will AUTO-TASK an undeclared spec next. ON ⇒ a
|
|
112
|
+
* spec needs a human PR checkpoint NOW (`--propose-spec`); OFF ⇒ a human must
|
|
113
|
+
* task it, so it may `--merge-spec`.
|
|
114
|
+
*/
|
|
115
|
+
autoTask: boolean;
|
|
116
|
+
}
|
|
117
|
+
/**
|
|
118
|
+
* DERIVE the per-outcome merge-vs-propose flags from the gate state COMPOSED with
|
|
119
|
+
* author-trust — CI's merge-vs-propose POLICY (prd "merge-vs-propose POLICY" +
|
|
120
|
+
* "Composed with AUTHOR-TRUST"; task Decision 1). This is the load-bearing pure
|
|
121
|
+
* logic the workflow encodes at runtime (it reads `author_association` off the
|
|
122
|
+
* event payload and sets the flags accordingly):
|
|
123
|
+
*
|
|
124
|
+
* - **SPEC** — gate-derived ONLY (author-trust does NOT bite): `--merge-spec` iff
|
|
125
|
+
* `autoTask` is OFF (a human must task the spec before anything autonomous
|
|
126
|
+
* acts on it — the human checkpoint stays AHEAD even for an untrusted author),
|
|
127
|
+
* else `--propose-spec`.
|
|
128
|
+
* - **TASK** — `--propose-task` iff (`autoBuild` ON) OR (author UNTRUSTED);
|
|
129
|
+
* `--merge-task` ONLY iff (`autoBuild` OFF AND author TRUSTED). An untrusted
|
|
130
|
+
* author can never auto-merge a task from a public-front-door issue.
|
|
131
|
+
*
|
|
132
|
+
* So the only way to `--merge-task` is a TRUSTED author with `autoBuild` OFF —
|
|
133
|
+
* and the fully-gateless "merge everything" path additionally needs `autoTask`
|
|
134
|
+
* OFF; both gates off + a trusted author is the LOUD, NON-DEFAULT opt-in. The
|
|
135
|
+
* conservative case (untrusted author, or any gate on) keeps a human in the loop.
|
|
136
|
+
*/
|
|
137
|
+
export declare function deriveIntakeFlags(options: {
|
|
138
|
+
gate: IntakeGateState;
|
|
139
|
+
authorTrusted: boolean;
|
|
140
|
+
}): IntakeIntegrationFlags;
|
|
141
|
+
/**
|
|
142
|
+
* Classify an `author_association` string into trusted/untrusted (Decision 1). A
|
|
143
|
+
* missing/empty/unknown value is UNTRUSTED (fail-safe: a public front-door defaults
|
|
144
|
+
* to the conservative, human-in-the-loop path). Case-insensitive on the wire value
|
|
145
|
+
* for robustness, though GitHub emits upper-case.
|
|
146
|
+
*/
|
|
147
|
+
export declare function isAuthorTrusted(authorAssociation: string | undefined): boolean;
|
|
148
|
+
/**
|
|
149
|
+
* Generate the intake-trigger workflow YAML. Deterministic: the same config
|
|
150
|
+
* produces byte-identical output. The workflow is a FIXED shell (ADR §6: all
|
|
151
|
+
* policy is env/config, so the artifact carries no config-derived policy beyond
|
|
152
|
+
* the env-block scaffolding) — `config` is accepted for parity with the
|
|
153
|
+
* `CapabilityEmitter` seam and future per-config wiring, but the intake-trigger
|
|
154
|
+
* shape itself is config-independent.
|
|
155
|
+
*
|
|
156
|
+
* The per-outcome FLAGS are DERIVED AT RUNTIME by a `bash` step that mirrors
|
|
157
|
+
* {@link deriveIntakeFlags}: it reads the gate env block + the event's
|
|
158
|
+
* `author_association` and sets `--merge-spec`/`--propose-spec` +
|
|
159
|
+
* `--merge-task`/`--propose-task` accordingly. The same rule that
|
|
160
|
+
* {@link deriveIntakeFlags} unit-tests is what the workflow executes — they cannot
|
|
161
|
+
* desync because the test asserts the SHELL derivation matches the function.
|
|
162
|
+
*/
|
|
163
|
+
export declare function generateIntakeWorkflow(config: ResolvedCIConfig): string;
|
|
164
|
+
/** A single structural problem found in the generated workflow. */
|
|
165
|
+
export interface IntakeTriggerProblem {
|
|
166
|
+
/** A short, stable id for the violated invariant (for tests/assertions). */
|
|
167
|
+
id: string;
|
|
168
|
+
/** Human-readable description of what is missing or wrong. */
|
|
169
|
+
message: string;
|
|
170
|
+
}
|
|
171
|
+
/** The result of {@link validateIntakeWorkflow}. */
|
|
172
|
+
export interface IntakeTriggerValidation {
|
|
173
|
+
/** True iff the workflow satisfies EVERY structural invariant. */
|
|
174
|
+
ok: boolean;
|
|
175
|
+
/** Each violated invariant (empty when `ok`). */
|
|
176
|
+
problems: IntakeTriggerProblem[];
|
|
177
|
+
}
|
|
178
|
+
/**
|
|
179
|
+
* Structurally validate the intake-trigger workflow against the task's acceptance
|
|
180
|
+
* criteria. Dependency-free (no YAML lib): presence/shape assertions over the raw
|
|
181
|
+
* text, mirroring {@link validateAdvanceLifecycleWorkflow} /
|
|
182
|
+
* {@link validateCloseJobWorkflow}.
|
|
183
|
+
*/
|
|
184
|
+
export declare function validateIntakeWorkflow(text: string): IntakeTriggerValidation;
|
|
185
|
+
//# sourceMappingURL=intake-trigger-template.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"intake-trigger-template.d.ts","sourceRoot":"","sources":["../src/intake-trigger-template.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAwDG;AAGH,OAAO,KAAK,EAAC,gBAAgB,EAAC,MAAM,sBAAsB,CAAC;AAG3D,6EAA6E;AAC7E,eAAO,MAAM,4BAA4B,WAAW,CAAC;AAErD,+DAA+D;AAC/D,eAAO,MAAM,+BAA+B,qJACkG,CAAC;AAE/I,8EAA8E;AAC9E,eAAO,MAAM,4BAA4B,yBAAyB,CAAC;AAEnE;;;;;;GAMG;AACH,eAAO,MAAM,oBAAoB,QAAyB,CAAC;AAI3D;;;;;;GAMG;AACH,eAAO,MAAM,2BAA2B,8CAI9B,CAAC;AAEX;;;;GAIG;AACH,MAAM,WAAW,sBAAsB;IACtC,mEAAmE;IACnE,IAAI,EAAE,OAAO,GAAG,SAAS,CAAC;IAC1B,mEAAmE;IACnE,IAAI,EAAE,OAAO,GAAG,SAAS,CAAC;IAC1B;;;;;;;;OAQG;IACH,WAAW,EAAE,SAAS,GAAG,WAAW,CAAC;CACrC;AAED,oFAAoF;AACpF,MAAM,WAAW,eAAe;IAC/B;;;;OAIG;IACH,SAAS,EAAE,OAAO,CAAC;IACnB;;;;OAIG;IACH,QAAQ,EAAE,OAAO,CAAC;CAClB;AAED;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAgB,iBAAiB,CAAC,OAAO,EAAE;IAC1C,IAAI,EAAE,eAAe,CAAC;IACtB,aAAa,EAAE,OAAO,CAAC;CACvB,GAAG,sBAAsB,CAoBzB;AAED;;;;;GAKG;AACH,wBAAgB,eAAe,CAC9B,iBAAiB,EAAE,MAAM,GAAG,SAAS,GACnC,OAAO,CAMT;AAID;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,gBAAgB,GAAG,MAAM,CA4LvE;AAED,mEAAmE;AACnE,MAAM,WAAW,oBAAoB;IACpC,4EAA4E;IAC5E,EAAE,EAAE,MAAM,CAAC;IACX,8DAA8D;IAC9D,OAAO,EAAE,MAAM,CAAC;CAChB;AAED,oDAAoD;AACpD,MAAM,WAAW,uBAAuB;IACvC,kEAAkE;IAClE,EAAE,EAAE,OAAO,CAAC;IACZ,iDAAiD;IACjD,QAAQ,EAAE,oBAAoB,EAAE,CAAC;CACjC;AAED;;;;;GAKG;AACH,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,MAAM,GAAG,uBAAuB,CAsK5E"}
|