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,111 @@
|
|
|
1
|
+
import { mkdirSync, writeFileSync, rmSync, readFileSync } from 'node:fs';
|
|
2
|
+
import { dirname, join } from 'node:path';
|
|
3
|
+
import { run } from './git.js';
|
|
4
|
+
import { setNeedsAnswersMarker } from './frontmatter.js';
|
|
5
|
+
import { allAnswered, serialiseSidecar, sidecarPathFor, } from './sidecar.js';
|
|
6
|
+
/** Raised for usage errors (a torn mode, a missing repo). */
|
|
7
|
+
export class ApplyAtomicError extends Error {
|
|
8
|
+
constructor(message) {
|
|
9
|
+
super(message);
|
|
10
|
+
this.name = 'ApplyAtomicError';
|
|
11
|
+
}
|
|
12
|
+
}
|
|
13
|
+
function gitSoft(args, cwd, env) {
|
|
14
|
+
return run('git', args, cwd, { env });
|
|
15
|
+
}
|
|
16
|
+
function gitHard(args, cwd, env) {
|
|
17
|
+
const result = run('git', args, cwd, { env });
|
|
18
|
+
if (result.status !== 0) {
|
|
19
|
+
throw new ApplyAtomicError(`git ${args.join(' ')} failed (exit ${result.status}): ${result.stderr.trim()}`);
|
|
20
|
+
}
|
|
21
|
+
return result;
|
|
22
|
+
}
|
|
23
|
+
function resolveBy(cwd, env) {
|
|
24
|
+
const name = gitSoft(['config', 'user.name'], cwd, env);
|
|
25
|
+
if (name.status === 0 && name.stdout.trim() !== '') {
|
|
26
|
+
return name.stdout.trim();
|
|
27
|
+
}
|
|
28
|
+
const e = env ?? process.env;
|
|
29
|
+
return e.USER ?? e.USERNAME ?? '';
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Apply an answer batch ATOMICALLY: rewrite the item body + the sidecar in ONE
|
|
33
|
+
* commit, and on full resolution clear `needsAnswers` AND delete the sidecar in
|
|
34
|
+
* that SAME commit. Returns the produced commit + the outcome.
|
|
35
|
+
*
|
|
36
|
+
* The resolution decision is DERIVED from the model (`allAnswered` ⇒ resolve) —
|
|
37
|
+
* the entries are the source of truth, never the frontmatter mirror. A supplied
|
|
38
|
+
* {@link ApplyAtomicOptions.mode} must AGREE with that derived state, else the
|
|
39
|
+
* apply throws (it refuses to publish a torn invariant: a `resolve` that leaves
|
|
40
|
+
* pending entries, or a `repause` that leaves none).
|
|
41
|
+
*/
|
|
42
|
+
export function applyAtomic(options) {
|
|
43
|
+
const { cwd, itemPath, itemBody, sidecar, env } = options;
|
|
44
|
+
const note = options.note ?? (() => { });
|
|
45
|
+
if (gitSoft(['rev-parse', '--git-dir'], cwd, env).status !== 0) {
|
|
46
|
+
throw new ApplyAtomicError('not inside a git repository');
|
|
47
|
+
}
|
|
48
|
+
const resolved = allAnswered(sidecar);
|
|
49
|
+
if (options.mode === 'resolve' && !resolved) {
|
|
50
|
+
throw new ApplyAtomicError('applyAtomic mode=resolve but the sidecar still has pending entries — ' +
|
|
51
|
+
'refusing to clear needsAnswers + delete the sidecar with open questions');
|
|
52
|
+
}
|
|
53
|
+
if (options.mode === 'repause' && resolved) {
|
|
54
|
+
throw new ApplyAtomicError('applyAtomic mode=repause but every sidecar entry is answered — ' +
|
|
55
|
+
'a fully-answered sidecar must resolve (clear needsAnswers + delete)');
|
|
56
|
+
}
|
|
57
|
+
const sidecarPath = sidecarPathFor(sidecar.item);
|
|
58
|
+
const itemAbs = join(cwd, itemPath);
|
|
59
|
+
const sidecarAbs = join(cwd, sidecarPath);
|
|
60
|
+
const by = options.by || resolveBy(cwd, env);
|
|
61
|
+
const touched = [itemPath];
|
|
62
|
+
if (resolved) {
|
|
63
|
+
// Full resolution: write the (optionally-updated) body with needsAnswers
|
|
64
|
+
// CLEARED, and DELETE the sidecar — one commit, the invariant holds after.
|
|
65
|
+
const baseBody = itemBody ?? readItem(itemAbs, cwd, itemPath, env);
|
|
66
|
+
const cleared = setNeedsAnswersMarker(baseBody, false);
|
|
67
|
+
writeFileSync(itemAbs, cleared);
|
|
68
|
+
// Remove the sidecar file from the tree (it may already be absent on a
|
|
69
|
+
// no-sidecar resolve, in which case rm is a no-op for the index).
|
|
70
|
+
rmSync(sidecarAbs, { force: true });
|
|
71
|
+
touched.push(sidecarPath);
|
|
72
|
+
}
|
|
73
|
+
else {
|
|
74
|
+
// Re-pause: write the updated body (if any) and the updated sidecar; leave
|
|
75
|
+
// needsAnswers: true. The sidecar stays present with its pending entries.
|
|
76
|
+
if (itemBody !== undefined) {
|
|
77
|
+
writeFileSync(itemAbs, setNeedsAnswersMarker(itemBody, true));
|
|
78
|
+
}
|
|
79
|
+
mkdirSync(dirname(sidecarAbs), { recursive: true });
|
|
80
|
+
writeFileSync(sidecarAbs, serialiseSidecar(sidecar));
|
|
81
|
+
touched.push(sidecarPath);
|
|
82
|
+
}
|
|
83
|
+
// Stage exactly the two paths and commit them TOGETHER (one atomic commit).
|
|
84
|
+
gitHard(['add', '--', ...touched], cwd, env);
|
|
85
|
+
const subject = resolved
|
|
86
|
+
? `advance: resolve ${sidecar.item} (by ${by})`
|
|
87
|
+
: `advance: apply ${sidecar.item} (by ${by})`;
|
|
88
|
+
gitHard(['commit', '--quiet', '-m', subject], cwd, env);
|
|
89
|
+
const commit = gitHard(['rev-parse', 'HEAD'], cwd, env).stdout.trim();
|
|
90
|
+
note(subject);
|
|
91
|
+
return {
|
|
92
|
+
outcome: resolved ? 'resolved' : 'repaused',
|
|
93
|
+
commit,
|
|
94
|
+
sidecarPath,
|
|
95
|
+
};
|
|
96
|
+
}
|
|
97
|
+
/** Read the item body from disk (the resolve path with no supplied body). */
|
|
98
|
+
function readItem(itemAbs, cwd, itemPath, env) {
|
|
99
|
+
const show = gitSoft(['show', `:${itemPath}`], cwd, env);
|
|
100
|
+
if (show.status === 0) {
|
|
101
|
+
return show.stdout;
|
|
102
|
+
}
|
|
103
|
+
// Fall back to the working-tree file (uncommitted item).
|
|
104
|
+
try {
|
|
105
|
+
return readFileSync(itemAbs, 'utf8');
|
|
106
|
+
}
|
|
107
|
+
catch {
|
|
108
|
+
throw new ApplyAtomicError(`cannot read item body for '${itemPath}' (supply itemBody)`);
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
//# sourceMappingURL=sidecar-apply.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sidecar-apply.js","sourceRoot":"","sources":["../src/sidecar-apply.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,245 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The **question/answer SIDECAR contract** (prd `advance-loop`, task
|
|
3
|
+
* `advance-sidecar-contract`) — the one genuinely-new piece of the `advance`
|
|
4
|
+
* family. A strict, tooling-OWNED per-item file `work/questions/<type>-<slug>.md`
|
|
5
|
+
* carrying per-entry answered-state, so the tooling fully owns the Q&A artifact
|
|
6
|
+
* (no fragile round-trip parse of human-authored prose in the item body).
|
|
7
|
+
*
|
|
8
|
+
* This module is the FORMAT + the in-memory model + the pure read/write/append/
|
|
9
|
+
* derived-`allAnswered` operations. The ATOMIC apply (mutate the item body AND
|
|
10
|
+
* the sidecar in ONE commit) lives in {@link applyAtomic} (`sidecar-apply.ts`).
|
|
11
|
+
* It builds NOTHING above the contract — no tick, no verb, no lock, no rungs;
|
|
12
|
+
* later tasks of the family consume these.
|
|
13
|
+
*
|
|
14
|
+
* # On-disk text format (REFORMATTED — ADR `question-sidecar-human-readable-format`)
|
|
15
|
+
*
|
|
16
|
+
* The sidecar is the HUMAN-FACING surface of the answer loop: humans read the
|
|
17
|
+
* question and write the answer in this file, very often through the GitHub web
|
|
18
|
+
* UI. The original `key: |` YAML-block-scalar format rendered as run-together
|
|
19
|
+
* noise on GitHub (literal `|` pipes, collapsed indentation). The on-disk format
|
|
20
|
+
* is now **real Markdown with machine state in HTML comments**:
|
|
21
|
+
*
|
|
22
|
+
* - An IDENTITY HTML comment at the top carries `item`/`type`/`slug`/
|
|
23
|
+
* `allAnswered` (`<!-- dorfl-sidecar: item=... type=... slug=... allAnswered=... -->`).
|
|
24
|
+
* - Per entry: a `## Qn` heading (entry separator + answer boundary), a BOLD
|
|
25
|
+
* question line, a BLOCKQUOTE context, an ITALIC suggested-default
|
|
26
|
+
* (`_Suggested default: …_`), a per-entry HTML COMMENT carrying
|
|
27
|
+
* `id=…` (and an explicit `answered=…` OVERRIDE when it disagrees with the
|
|
28
|
+
* answer-derived predicate), a fixed answer marker
|
|
29
|
+
* `**Your answer** (write below this line):`, then the human's answer prose.
|
|
30
|
+
* (The `disposition=…` field is RETIRED — task
|
|
31
|
+
* `agentic-apply-retire-disposition-vocabulary`; an entry is binary, and a
|
|
32
|
+
* stale `disposition=` token in an old sidecar is parsed away.)
|
|
33
|
+
* - The answer is HEADING-DELIMITED: it spans from the answer marker up to
|
|
34
|
+
* the next entry `## ` heading (NOT a `---` rule), so a literal `---`
|
|
35
|
+
* inside an answer cannot break parsing.
|
|
36
|
+
*
|
|
37
|
+
* GitHub renders HTML comments as nothing, so the machine state is invisible to
|
|
38
|
+
* the human and unbreakable by their edit. The human just types prose under the
|
|
39
|
+
* answer marker with no format knowledge.
|
|
40
|
+
*
|
|
41
|
+
* Round-trip is **SEMANTIC** (model-equal, not byte-equal): a parse → serialise
|
|
42
|
+
* canonicalises whitespace; the MODEL (entries, ids, answers, answered-state) is
|
|
43
|
+
* preserved. The load-bearing rules are kept:
|
|
44
|
+
*
|
|
45
|
+
* - **Identity-keyed, NOT folder-keyed.** The path is derived PURELY from the
|
|
46
|
+
* item's NAMESPACED identity (`<type>-<slug>`, `:`→`-` for the filename),
|
|
47
|
+
* using {@link parseSlugArg} (the `slug-namespace.ts` resolver) as the single
|
|
48
|
+
* source of truth for the identity. There is NO back-pointer field in the
|
|
49
|
+
* item body — the only in-body signal is the existing `needsAnswers` flag —
|
|
50
|
+
* so the sidecar survives the item's `git mv`s between lifecycle folders
|
|
51
|
+
* with no lock-step move.
|
|
52
|
+
* - **The answered predicate (MAINTAINER-RESOLVED §1):** a non-empty
|
|
53
|
+
* `answer` ⇒ ANSWERED, with an explicit `answered=…` HTML-comment field as
|
|
54
|
+
* an OVERRIDE. The override is encoded in the per-entry HTML comment ONLY
|
|
55
|
+
* when it DISAGREES with the derived predicate (an empty answer with
|
|
56
|
+
* `answered=true`, or a non-empty answer with `answered=false`); otherwise
|
|
57
|
+
* the field is omitted so a tolerant "human only types under the answer
|
|
58
|
+
* marker" edit cannot be re-interpreted as a sticky override on the next
|
|
59
|
+
* parse.
|
|
60
|
+
* - **`allAnswered` is DERIVED** — recomputed from the entries on every
|
|
61
|
+
* serialise; the classifier MAY read it for a cheap scan but MUST NOT trust
|
|
62
|
+
* it over the entries.
|
|
63
|
+
* - **Entry ids are stable + monotonic** (`q1`, `q2`, …), NEVER reused.
|
|
64
|
+
* APPEND adds `qN+1` and never mutates an existing answered entry (the
|
|
65
|
+
* sidecar is the item's full Q&A history).
|
|
66
|
+
*/
|
|
67
|
+
/**
|
|
68
|
+
* The item-types a sidecar can key onto (the slug-namespace + obs).
|
|
69
|
+
*
|
|
70
|
+
* HARD CUTOVER (spec `prd-to-spec-vocabulary-cutover-and-migration-command`,
|
|
71
|
+
* contract step): the legacy `'prd'` type member is GONE — the parent-spec type
|
|
72
|
+
* is `'spec'` only. A `spec:<slug>` identity keys onto the `spec-<slug>`
|
|
73
|
+
* lock/sidecar entry. The on-disk `prd-<slug>.md` sidecar FILE (dorfl's
|
|
74
|
+
* not-yet-converted data) is still probed by {@link sidecarPathCandidates} as a
|
|
75
|
+
* legacy file-path fallback — that is a DATA alias the migration command removes,
|
|
76
|
+
* NOT this type member.
|
|
77
|
+
*/
|
|
78
|
+
export type SidecarType = 'spec' | 'task' | 'observation';
|
|
79
|
+
/**
|
|
80
|
+
* The optional, machine-only `kind` AXIS on a question entry — the dispatch
|
|
81
|
+
* signal the answered-question apply rung reads to choose deterministic-action
|
|
82
|
+
* (`merge`, `stuck`) vs agentic-content (`triage`, `spec`) routing WITHOUT
|
|
83
|
+
* sniffing the shape of another field. Absent ⇒ the existing binary content
|
|
84
|
+
* entry (every pre-`kind` sidecar parses + renders byte-identically).
|
|
85
|
+
*
|
|
86
|
+
* INTERIM PRIMITIVE — REMOVE when question sidecars move to KIND-BASED
|
|
87
|
+
* SUBFOLDERS (`work/questions/merge/`, …), where the folder ENCODES the kind
|
|
88
|
+
* and this per-entry field is redundant. See the observation
|
|
89
|
+
* `questions-folder-rename-and-kind-axis-prefix-vs-subfolder-2026-06-21` + idea
|
|
90
|
+
* `folder-taxonomy-and-prd-edit-handshake`. Built deliberately as a single
|
|
91
|
+
* typed field read in exactly ONE place (the apply dispatch, a later task) so
|
|
92
|
+
* the folder-cutover can DELETE it in one move.
|
|
93
|
+
*
|
|
94
|
+
* A mistyped/unknown `kind=` token parses to `undefined` (silent-on-malformed,
|
|
95
|
+
* mirroring the retired `disposition` precedent), never a throw, never a
|
|
96
|
+
* coerce.
|
|
97
|
+
*/
|
|
98
|
+
export type SidecarKind = 'merge' | 'stuck' | 'triage' | 'spec';
|
|
99
|
+
/** One question entry in the sidecar (the per-entry source of truth). */
|
|
100
|
+
export interface SidecarEntry {
|
|
101
|
+
/** Stable, monotonic id (`q1`, `q2`, …); never reused once minted. */
|
|
102
|
+
id: string;
|
|
103
|
+
/** The question, verbatim. */
|
|
104
|
+
question: string;
|
|
105
|
+
/** Inline context so the human need not open the item. Empty when absent. */
|
|
106
|
+
context: string;
|
|
107
|
+
/** Optional suggested default (the surface-questions humility aid). */
|
|
108
|
+
default?: string;
|
|
109
|
+
/**
|
|
110
|
+
* The human's answer; empty/absent while unanswered. A NON-EMPTY answer ⇒
|
|
111
|
+
* answered (see {@link isEntryAnswered}).
|
|
112
|
+
*/
|
|
113
|
+
answer: string;
|
|
114
|
+
/**
|
|
115
|
+
* The explicit `answered` OVERRIDE, when the human/tooling wrote one. `true`
|
|
116
|
+
* forces answered; `false` overrides a non-empty answer back to unanswered.
|
|
117
|
+
* `undefined` ⇒ no override (the answered-ness derives from `answer`).
|
|
118
|
+
*/
|
|
119
|
+
answeredOverride?: boolean;
|
|
120
|
+
/**
|
|
121
|
+
* Optional dispatch axis (see {@link SidecarKind}). Absent ⇒ the existing
|
|
122
|
+
* binary content entry. INTERIM — removable once question sidecars move to
|
|
123
|
+
* kind-based SUBFOLDERS.
|
|
124
|
+
*/
|
|
125
|
+
kind?: SidecarKind;
|
|
126
|
+
}
|
|
127
|
+
/** The parsed sidecar: identity frontmatter + ordered entries. */
|
|
128
|
+
export interface SidecarModel {
|
|
129
|
+
/** The NAMESPACED identity (`spec:autotask`, `task:foo`, `observation:bar`). */
|
|
130
|
+
item: string;
|
|
131
|
+
/** The item type (redundant with the filename; explicit for the parser). */
|
|
132
|
+
type: SidecarType;
|
|
133
|
+
/** The bare slug. */
|
|
134
|
+
slug: string;
|
|
135
|
+
/** The ordered question entries (the source of truth for answered-state). */
|
|
136
|
+
entries: SidecarEntry[];
|
|
137
|
+
}
|
|
138
|
+
/** Raised for a structurally-invalid sidecar the parser cannot trust. */
|
|
139
|
+
export declare class SidecarParseError extends Error {
|
|
140
|
+
constructor(message: string);
|
|
141
|
+
}
|
|
142
|
+
/**
|
|
143
|
+
* Is this entry ANSWERED? The MAINTAINER-RESOLVED §1 predicate: a non-empty
|
|
144
|
+
* `answer` ⇒ answered, with the explicit `answered=…` override (carried in the
|
|
145
|
+
* per-entry HTML comment) winning when present. An explicit `answered=false`
|
|
146
|
+
* overrides a non-empty answer back to unanswered; an explicit `answered=true`
|
|
147
|
+
* forces answered even with an empty answer.
|
|
148
|
+
*/
|
|
149
|
+
export declare function isEntryAnswered(entry: SidecarEntry): boolean;
|
|
150
|
+
/** Every entry that is NOT yet answered (derived from the entries). */
|
|
151
|
+
export declare function pendingEntries(model: SidecarModel): SidecarEntry[];
|
|
152
|
+
/**
|
|
153
|
+
* Is the WHOLE sidecar answered? DERIVED from the entries (never read off the
|
|
154
|
+
* identity comment mirror). An EMPTY sidecar (no entries) is NOT all-answered —
|
|
155
|
+
* a sidecar with no open questions should not exist (it would be deleted on
|
|
156
|
+
* full resolution), so `allAnswered` over zero entries is `false`, keeping the
|
|
157
|
+
* "pending ⇒ NO-OP" classifier honest.
|
|
158
|
+
*/
|
|
159
|
+
export declare function allAnswered(model: SidecarModel): boolean;
|
|
160
|
+
/** The resolved identity of a sidecar: `{type, slug, item}`. */
|
|
161
|
+
export interface SidecarIdentity {
|
|
162
|
+
type: SidecarType;
|
|
163
|
+
slug: string;
|
|
164
|
+
/** The canonical namespaced identity (`<namespace>:<slug>`). */
|
|
165
|
+
item: string;
|
|
166
|
+
}
|
|
167
|
+
/**
|
|
168
|
+
* Resolve a namespaced-identity argument (`spec:autotask`, `task:foo`,
|
|
169
|
+
* `observation:bar`, `obs:bar`, or a bare `<slug>` = task) into its
|
|
170
|
+
* `{type, slug, item}`. PURE string work over {@link parseSlugArg} — the
|
|
171
|
+
* resolver is the single source of truth for the task/spec split; the sidecar
|
|
172
|
+
* extends it with the `observation` namespace.
|
|
173
|
+
*/
|
|
174
|
+
export declare function resolveSidecarIdentity(identity: string): SidecarIdentity;
|
|
175
|
+
/**
|
|
176
|
+
* Derive the sidecar PATH `work/questions/<type>-<slug>.md` from the item's
|
|
177
|
+
* namespaced identity. The identity is the single source of truth; `:`→`-` for
|
|
178
|
+
* the filename. Accepts the same forms as {@link resolveSidecarIdentity}.
|
|
179
|
+
*/
|
|
180
|
+
export declare function sidecarPathFor(identity: string): string;
|
|
181
|
+
/**
|
|
182
|
+
* The ordered candidate sidecar PATHS a READER should probe for `identity`: the
|
|
183
|
+
* canonical {@link sidecarPathFor} path FIRST, then any legacy-data fallback that
|
|
184
|
+
* may still be on disk before the migration command converts it.
|
|
185
|
+
*
|
|
186
|
+
* MIGRATE step (prd `prd-to-spec-vocabulary-cutover-and-migration-command`): the
|
|
187
|
+
* producer side now emits `spec:<slug>`, so {@link sidecarPathFor} resolves
|
|
188
|
+
* `work/questions/spec-<slug>.md`. But the ON-DISK sidecar is still the legacy
|
|
189
|
+
* `work/questions/prd-<slug>.md` until `dorfl prd-to-spec` renames the DATA. So a
|
|
190
|
+
* `spec`-typed identity ALSO probes the legacy `prd-<slug>.md` as a fallback, and
|
|
191
|
+
* a reader takes the FIRST candidate that exists. This is a FILE-PATH DATA alias
|
|
192
|
+
* the migration command removes (it converts `prd-<slug>.md → spec-<slug>.md` on
|
|
193
|
+
* disk); it is NOT the `SlugNamespace`/`SidecarType` `'prd'` type member. Every
|
|
194
|
+
* non-`spec` type has a single candidate (its canonical path), unchanged.
|
|
195
|
+
*/
|
|
196
|
+
export declare function sidecarPathCandidates(identity: string): string[];
|
|
197
|
+
/**
|
|
198
|
+
* Parse a sidecar document into its typed model. The on-disk format is the
|
|
199
|
+
* human-readable Markdown + HTML-comments form (see the module doc); the
|
|
200
|
+
* identity comment lives at the top, each entry opens with a `## ` heading, and
|
|
201
|
+
* the answer is heading-delimited (everything between the answer marker and the
|
|
202
|
+
* next `## ` heading is the answer). TOLERANT of the human typing only under
|
|
203
|
+
* the answer marker: a non-empty answer ⇒ answered (no comment edit needed).
|
|
204
|
+
*/
|
|
205
|
+
export declare function parseSidecar(text: string): SidecarModel;
|
|
206
|
+
/**
|
|
207
|
+
* Serialise a model to its CANONICAL human-readable Markdown text. The identity
|
|
208
|
+
* HTML comment at the top carries `item`/`type`/`slug` + the derived
|
|
209
|
+
* `allAnswered` mirror; each entry is a `## Qn` heading, a bold question line,
|
|
210
|
+
* a blockquote context (when non-empty), an italic suggested-default (when
|
|
211
|
+
* present), a per-entry HTML comment carrying `id` (and an explicit `answered`
|
|
212
|
+
* override when it disagrees with the derived predicate), the fixed answer
|
|
213
|
+
* marker, then the answer prose. Round-trip is SEMANTIC:
|
|
214
|
+
* `parseSidecar(serialiseSidecar(m))` recovers an equal MODEL; re-serialising
|
|
215
|
+
* canonicalises the text.
|
|
216
|
+
*/
|
|
217
|
+
export declare function serialiseSidecar(model: SidecarModel): string;
|
|
218
|
+
/** A new question to append (no id — the appender mints the next monotonic id). */
|
|
219
|
+
export interface NewQuestion {
|
|
220
|
+
question: string;
|
|
221
|
+
context?: string;
|
|
222
|
+
default?: string;
|
|
223
|
+
/**
|
|
224
|
+
* Optional dispatch {@link SidecarKind} the surfacer stamps so the apply
|
|
225
|
+
* rung can route a runner-ACTION question (`merge`, `stuck`) to the
|
|
226
|
+
* deterministic dispatch vs a CONTENT question (`triage`, `spec`) to the
|
|
227
|
+
* agentic `decide()` path. INTERIM — removable once kind-subfolders land.
|
|
228
|
+
*/
|
|
229
|
+
kind?: SidecarKind;
|
|
230
|
+
}
|
|
231
|
+
/**
|
|
232
|
+
* Append `newQuestions` to the model, minting `qN+1…` ids off the highest
|
|
233
|
+
* existing id. NEVER overwrites or mutates an existing entry (answered or not) —
|
|
234
|
+
* the sidecar is the item's full Q&A history. Appending flips a previously-
|
|
235
|
+
* `allAnswered` sidecar back to not-all-answered (the new entries are pending).
|
|
236
|
+
* Returns a NEW model (the input is not mutated).
|
|
237
|
+
*/
|
|
238
|
+
export declare function appendQuestions(model: SidecarModel, newQuestions: NewQuestion[]): SidecarModel;
|
|
239
|
+
/**
|
|
240
|
+
* Build a fresh sidecar model for `identity` carrying `newQuestions` (ids minted
|
|
241
|
+
* `q1…`). The first-pass constructor the surface-question rung uses before there
|
|
242
|
+
* is any sidecar to append to.
|
|
243
|
+
*/
|
|
244
|
+
export declare function newSidecar(identity: string, newQuestions: NewQuestion[]): SidecarModel;
|
|
245
|
+
//# sourceMappingURL=sidecar.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sidecar.d.ts","sourceRoot":"","sources":["../src/sidecar.ts"],"names":[],"mappings":"AAGA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiEG;AAEH;;;;;;;;;;GAUG;AACH,MAAM,MAAM,WAAW,GAAG,MAAM,GAAG,MAAM,GAAG,aAAa,CAAC;AAE1D;;;;;;;;;;;;;;;;;;GAkBG;AACH,MAAM,MAAM,WAAW,GAAG,OAAO,GAAG,OAAO,GAAG,QAAQ,GAAG,MAAM,CAAC;AAShE,yEAAyE;AACzE,MAAM,WAAW,YAAY;IAC5B,sEAAsE;IACtE,EAAE,EAAE,MAAM,CAAC;IACX,8BAA8B;IAC9B,QAAQ,EAAE,MAAM,CAAC;IACjB,6EAA6E;IAC7E,OAAO,EAAE,MAAM,CAAC;IAChB,uEAAuE;IACvE,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB;;;OAGG;IACH,MAAM,EAAE,MAAM,CAAC;IACf;;;;OAIG;IACH,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B;;;;OAIG;IACH,IAAI,CAAC,EAAE,WAAW,CAAC;CACnB;AAED,kEAAkE;AAClE,MAAM,WAAW,YAAY;IAC5B,gFAAgF;IAChF,IAAI,EAAE,MAAM,CAAC;IACb,4EAA4E;IAC5E,IAAI,EAAE,WAAW,CAAC;IAClB,qBAAqB;IACrB,IAAI,EAAE,MAAM,CAAC;IACb,6EAA6E;IAC7E,OAAO,EAAE,YAAY,EAAE,CAAC;CACxB;AAED,yEAAyE;AACzE,qBAAa,iBAAkB,SAAQ,KAAK;gBAC/B,OAAO,EAAE,MAAM;CAI3B;AAED;;;;;;GAMG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,YAAY,GAAG,OAAO,CAK5D;AAED,uEAAuE;AACvE,wBAAgB,cAAc,CAAC,KAAK,EAAE,YAAY,GAAG,YAAY,EAAE,CAElE;AAED;;;;;;GAMG;AACH,wBAAgB,WAAW,CAAC,KAAK,EAAE,YAAY,GAAG,OAAO,CAExD;AAgCD,gEAAgE;AAChE,MAAM,WAAW,eAAe;IAC/B,IAAI,EAAE,WAAW,CAAC;IAClB,IAAI,EAAE,MAAM,CAAC;IACb,gEAAgE;IAChE,IAAI,EAAE,MAAM,CAAC;CACb;AAED;;;;;;GAMG;AACH,wBAAgB,sBAAsB,CAAC,QAAQ,EAAE,MAAM,GAAG,eAAe,CAiBxE;AAED;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAGvD;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,qBAAqB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,EAAE,CAOhE;AAgND;;;;;;;GAOG;AACH,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,YAAY,CAqDvD;AAkBD;;;;;;;;;;GAUG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,YAAY,GAAG,MAAM,CAkD5D;AAID,mFAAmF;AACnF,MAAM,WAAW,WAAW;IAC3B,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB;;;;;OAKG;IACH,IAAI,CAAC,EAAE,WAAW,CAAC;CACnB;AAED;;;;;;GAMG;AACH,wBAAgB,eAAe,CAC9B,KAAK,EAAE,YAAY,EACnB,YAAY,EAAE,WAAW,EAAE,GACzB,YAAY,CAkBd;AAED;;;;GAIG;AACH,wBAAgB,UAAU,CACzB,QAAQ,EAAE,MAAM,EAChB,YAAY,EAAE,WAAW,EAAE,GACzB,YAAY,CASd"}
|