dorfl 0.1.0 → 0.1.2
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 +3 -3
- package/dist/advance-ci-template.js +1 -1
- package/dist/advance-ci-template.js.map +1 -1
- package/dist/advance-classify.d.ts +5 -5
- package/dist/advance-classify.d.ts.map +1 -1
- package/dist/advance-classify.js +4 -4
- package/dist/advance-drivers.d.ts +7 -7
- package/dist/advance-drivers.d.ts.map +1 -1
- package/dist/advance-drivers.js +5 -5
- package/dist/advance-drivers.js.map +1 -1
- package/dist/advance-isolated.d.ts +3 -3
- package/dist/advance-isolated.d.ts.map +1 -1
- package/dist/advance-isolated.js +1 -1
- package/dist/advance-lifecycle-template.d.ts +2 -2
- package/dist/advance-lifecycle-template.js +9 -9
- package/dist/advance-lifecycle-template.js.map +1 -1
- package/dist/advance-loop-driver.d.ts +3 -3
- package/dist/advance-loop-driver.d.ts.map +1 -1
- package/dist/advance-loop-driver.js +1 -1
- package/dist/advance-treeless-publish.d.ts +1 -1
- package/dist/advance.d.ts +11 -11
- package/dist/advance.d.ts.map +1 -1
- package/dist/advance.js +21 -21
- package/dist/advance.js.map +1 -1
- package/dist/advancing-lock.d.ts +1 -1
- package/dist/advancing-lock.js +5 -5
- package/dist/apply-decide.d.ts +2 -2
- package/dist/apply-decide.js +2 -2
- package/dist/apply-merge-action.d.ts +4 -4
- package/dist/apply-merge-action.js +2 -2
- package/dist/apply-persist.d.ts +5 -5
- package/dist/apply-persist.d.ts.map +1 -1
- package/dist/apply-persist.js +7 -7
- package/dist/apply-persist.js.map +1 -1
- package/dist/buildable-body.d.ts +14 -14
- package/dist/buildable-body.js +9 -9
- package/dist/claim-cas.d.ts +3 -3
- package/dist/claim-cas.js +1 -1
- package/dist/claim-cas.js.map +1 -1
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +83 -77
- package/dist/cli.js.map +1 -1
- package/dist/close-job-template.d.ts +3 -3
- package/dist/close-job-template.js +8 -8
- package/dist/close-job.d.ts +8 -8
- package/dist/close-job.js +25 -25
- package/dist/close-job.js.map +1 -1
- package/dist/complete.d.ts +3 -3
- package/dist/complete.js +8 -8
- package/dist/complete.js.map +1 -1
- package/dist/concurrency.d.ts +1 -1
- package/dist/concurrency.js +1 -1
- package/dist/config.d.ts +32 -32
- package/dist/config.js +5 -5
- package/dist/config.js.map +1 -1
- package/dist/continue-branch.d.ts +1 -1
- package/dist/continue-branch.js +1 -1
- package/dist/cwd-section.js +1 -1
- package/dist/cwd-section.js.map +1 -1
- package/dist/decision-engine.d.ts +2 -2
- package/dist/do-autopick.d.ts +6 -6
- package/dist/do-autopick.d.ts.map +1 -1
- package/dist/do-autopick.js +5 -5
- package/dist/do-autopick.js.map +1 -1
- package/dist/do-config.d.ts +3 -3
- package/dist/do-config.js +3 -3
- package/dist/do-config.js.map +1 -1
- package/dist/do-remote-auto.d.ts +2 -2
- package/dist/do-remote-auto.js +1 -1
- package/dist/do.d.ts +25 -25
- package/dist/do.d.ts.map +1 -1
- package/dist/do.js +22 -22
- package/dist/do.js.map +1 -1
- package/dist/drop-source.d.ts +2 -2
- package/dist/env-config.js +8 -8
- package/dist/env-config.js.map +1 -1
- package/dist/format.js +3 -3
- package/dist/format.js.map +1 -1
- package/dist/frontmatter.d.ts +33 -39
- package/dist/frontmatter.d.ts.map +1 -1
- package/dist/frontmatter.js +18 -31
- package/dist/frontmatter.js.map +1 -1
- package/dist/install-ci-branch-protection.d.ts +1 -1
- package/dist/install-ci-branch-protection.js +1 -1
- package/dist/install-ci-capabilities/advance-lifecycle.d.ts +1 -1
- package/dist/install-ci-capabilities/advance-lifecycle.js +1 -1
- package/dist/install-ci-capabilities/close-job.d.ts +1 -1
- package/dist/install-ci-capabilities/close-job.js +1 -1
- package/dist/install-ci-capabilities/example-noop.d.ts +1 -1
- package/dist/install-ci-capabilities/example-noop.js +1 -1
- package/dist/install-ci-capabilities/intake.d.ts +2 -2
- package/dist/install-ci-capabilities/intake.js +2 -2
- package/dist/install-ci-capabilities/verify.d.ts +1 -1
- package/dist/install-ci-capabilities/verify.js +1 -1
- package/dist/install-ci-core.d.ts +3 -3
- package/dist/install-ci-core.js +2 -2
- package/dist/install-ci-core.js.map +1 -1
- package/dist/install-ci-github.d.ts +1 -1
- package/dist/install-ci-github.js +1 -1
- package/dist/install-ci.d.ts +1 -1
- package/dist/install-ci.js +4 -4
- package/dist/install-ci.js.map +1 -1
- package/dist/intake-event.d.ts +6 -6
- package/dist/intake-event.js +6 -6
- package/dist/intake-marker.d.ts +3 -3
- package/dist/intake-marker.d.ts.map +1 -1
- package/dist/intake-triage.d.ts +1 -1
- package/dist/intake-triage.js +2 -2
- package/dist/intake-trigger-template.d.ts +8 -8
- package/dist/intake-trigger-template.d.ts.map +1 -1
- package/dist/intake-trigger-template.js +16 -16
- package/dist/intake-trigger-template.js.map +1 -1
- package/dist/intake.d.ts +50 -50
- package/dist/intake.d.ts.map +1 -1
- package/dist/intake.js +70 -70
- package/dist/intake.js.map +1 -1
- package/dist/integration-core.d.ts +17 -17
- package/dist/integration-core.js +17 -17
- package/dist/integration-core.js.map +1 -1
- package/dist/isolation.d.ts +3 -3
- package/dist/issue-provider.d.ts +4 -4
- package/dist/issue-provider.js +1 -1
- package/dist/item-lock.d.ts +21 -21
- package/dist/item-lock.d.ts.map +1 -1
- package/dist/item-lock.js +16 -16
- package/dist/item-path.d.ts +2 -2
- package/dist/item-path.js +2 -2
- package/dist/ledger-lint.d.ts +9 -9
- package/dist/ledger-lint.js +9 -9
- package/dist/ledger-read.d.ts +57 -57
- package/dist/ledger-read.d.ts.map +1 -1
- package/dist/ledger-read.js +24 -24
- package/dist/ledger-read.js.map +1 -1
- package/dist/ledger-write.d.ts +2 -2
- package/dist/ledger-write.js +1 -1
- package/dist/lifecycle-gather.d.ts +1 -1
- package/dist/lifecycle-gather.js +16 -16
- package/dist/lifecycle-gather.js.map +1 -1
- package/dist/lifecycle-pools.d.ts +4 -4
- package/dist/lifecycle-pools.js +1 -1
- package/dist/merge-question-surfacer.d.ts +3 -3
- package/dist/merge-question-surfacer.js +2 -2
- package/dist/merge-question-surfacer.js.map +1 -1
- package/dist/mint-adr.js +4 -4
- package/dist/mirror-pool-scan.d.ts +2 -2
- package/dist/mirror-pool-scan.js +3 -3
- package/dist/mirror-pool-scan.js.map +1 -1
- package/dist/needs-attention.d.ts +13 -13
- package/dist/needs-attention.d.ts.map +1 -1
- package/dist/needs-attention.js +11 -11
- package/dist/needs-attention.js.map +1 -1
- package/dist/orphan-sidecar.d.ts +2 -2
- package/dist/placement.d.ts +6 -6
- package/dist/placement.js +2 -2
- package/dist/prd-to-spec.d.ts +15 -1
- package/dist/prd-to-spec.d.ts.map +1 -1
- package/dist/prd-to-spec.js +36 -14
- package/dist/prd-to-spec.js.map +1 -1
- package/dist/prompt.d.ts +24 -24
- package/dist/prompt.d.ts.map +1 -1
- package/dist/prompt.js +29 -31
- package/dist/prompt.js.map +1 -1
- package/dist/protocol/CLAIM-PROTOCOL.md +4 -4
- package/dist/protocol/REVIEW-PROTOCOL.md +1 -1
- package/dist/protocol/TASKING-PROTOCOL.md +12 -12
- package/dist/protocol/WORK-CONTRACT.md +39 -39
- package/dist/protocol/spec-template.md +1 -1
- package/dist/protocol/task-template.md +3 -3
- package/dist/readiness.d.ts +1 -1
- package/dist/recover-isolated.js +1 -1
- package/dist/repo-config.js +12 -12
- package/dist/repo-config.js.map +1 -1
- package/dist/review-gate.d.ts +3 -3
- package/dist/review-gate.d.ts.map +1 -1
- package/dist/review-gate.js +11 -10
- package/dist/review-gate.js.map +1 -1
- package/dist/review-verdict.d.ts +2 -2
- package/dist/review-verdict.d.ts.map +1 -1
- package/dist/review-verdict.js +1 -1
- package/dist/run.d.ts +1 -1
- package/dist/run.js +5 -5
- package/dist/run.js.map +1 -1
- package/dist/scan.d.ts +10 -10
- package/dist/scan.d.ts.map +1 -1
- package/dist/scan.js +8 -8
- package/dist/scan.js.map +1 -1
- package/dist/select-order.d.ts +1 -1
- package/dist/select-priority.d.ts +12 -12
- package/dist/select-priority.d.ts.map +1 -1
- package/dist/select-priority.js +5 -5
- package/dist/select-priority.js.map +1 -1
- package/dist/sidecar.d.ts +2 -2
- package/dist/sidecar.js +2 -2
- package/dist/sidecar.js.map +1 -1
- package/dist/slug-namespace.d.ts +1 -1
- package/dist/slug-namespace.js +3 -3
- package/dist/slug-namespace.js.map +1 -1
- package/dist/spec-complete.js +2 -2
- package/dist/spec-complete.js.map +1 -1
- package/dist/start.d.ts +1 -1
- package/dist/start.js +3 -3
- package/dist/start.js.map +1 -1
- package/dist/status.d.ts +3 -3
- package/dist/status.js +4 -4
- package/dist/status.js.map +1 -1
- package/dist/surface-gate.d.ts +2 -2
- package/dist/surface-gate.d.ts.map +1 -1
- package/dist/surface-persist.d.ts +2 -2
- package/dist/surface-persist.d.ts.map +1 -1
- package/dist/tasker-review-loop.d.ts +8 -8
- package/dist/tasker-review-loop.d.ts.map +1 -1
- package/dist/tasker-review-loop.js +8 -8
- package/dist/tasker-review-loop.js.map +1 -1
- package/dist/tasking-eligibility.d.ts +21 -21
- package/dist/tasking-eligibility.d.ts.map +1 -1
- package/dist/tasking-eligibility.js +10 -10
- package/dist/tasking-lock.d.ts +8 -8
- package/dist/tasking-lock.d.ts.map +1 -1
- package/dist/tasking-lock.js +20 -21
- package/dist/tasking-lock.js.map +1 -1
- package/dist/tasking.d.ts +33 -33
- package/dist/tasking.d.ts.map +1 -1
- package/dist/tasking.js +89 -88
- package/dist/tasking.js.map +1 -1
- package/dist/triage-gate.d.ts +1 -1
- package/dist/triage-persist.d.ts +5 -5
- package/dist/triage-persist.js +15 -15
- package/dist/triage-persist.js.map +1 -1
- package/dist/verify-workflow-template.d.ts +1 -1
- package/dist/verify-workflow-template.js +2 -2
- package/dist/work-layout.d.ts +9 -7
- package/dist/work-layout.d.ts.map +1 -1
- package/dist/work-layout.js +9 -7
- package/dist/work-layout.js.map +1 -1
- package/dist/workspace.d.ts +1 -1
- package/package.json +1 -1
- package/src/advance-ci-template.ts +4 -4
- package/src/advance-classify.ts +5 -5
- package/src/advance-drivers.ts +10 -10
- package/src/advance-isolated.ts +3 -3
- package/src/advance-lifecycle-template.ts +9 -9
- package/src/advance-loop-driver.ts +3 -3
- package/src/advance-treeless-publish.ts +1 -1
- package/src/advance.ts +30 -30
- package/src/advancing-lock.ts +6 -6
- package/src/apply-decide.ts +2 -2
- package/src/apply-merge-action.ts +5 -5
- package/src/apply-persist.ts +8 -8
- package/src/buildable-body.ts +14 -14
- package/src/claim-cas.ts +4 -4
- package/src/cli.ts +94 -84
- package/src/close-job-template.ts +8 -8
- package/src/close-job.ts +26 -26
- package/src/complete.ts +11 -11
- package/src/concurrency.ts +1 -1
- package/src/config.ts +37 -37
- package/src/continue-branch.ts +1 -1
- package/src/cwd-section.ts +1 -1
- package/src/decision-engine.ts +3 -3
- package/src/do-autopick.ts +9 -9
- package/src/do-config.ts +6 -6
- package/src/do-remote-auto.ts +2 -2
- package/src/do.ts +49 -49
- package/src/drop-source.ts +2 -2
- package/src/env-config.ts +8 -8
- package/src/format.ts +3 -3
- package/src/frontmatter.ts +42 -60
- package/src/install-ci-branch-protection.ts +1 -1
- package/src/install-ci-capabilities/advance-lifecycle.ts +1 -1
- package/src/install-ci-capabilities/close-job.ts +1 -1
- package/src/install-ci-capabilities/example-noop.ts +1 -1
- package/src/install-ci-capabilities/intake.ts +2 -2
- package/src/install-ci-capabilities/verify.ts +1 -1
- package/src/install-ci-core.ts +4 -4
- package/src/install-ci-github.ts +1 -1
- package/src/install-ci.ts +4 -4
- package/src/intake-event.ts +6 -6
- package/src/intake-marker.ts +3 -3
- package/src/intake-triage.ts +2 -2
- package/src/intake-trigger-template.ts +17 -17
- package/src/intake.ts +97 -97
- package/src/integration-core.ts +35 -35
- package/src/isolation.ts +3 -3
- package/src/issue-provider.ts +4 -4
- package/src/item-lock.ts +21 -21
- package/src/item-path.ts +2 -2
- package/src/ledger-lint.ts +9 -9
- package/src/ledger-read.ts +81 -81
- package/src/ledger-write.ts +3 -3
- package/src/lifecycle-gather.ts +16 -16
- package/src/lifecycle-pools.ts +4 -4
- package/src/merge-question-surfacer.ts +4 -4
- package/src/mint-adr.ts +4 -4
- package/src/mirror-pool-scan.ts +5 -5
- package/src/needs-attention.ts +22 -22
- package/src/orphan-sidecar.ts +2 -2
- package/src/placement.ts +6 -6
- package/src/prd-to-spec.ts +51 -15
- package/src/prompt.ts +33 -35
- package/src/readiness.ts +1 -1
- package/src/recover-isolated.ts +1 -1
- package/src/repo-config.ts +12 -12
- package/src/review-gate.ts +12 -11
- package/src/review-verdict.ts +2 -2
- package/src/run.ts +6 -6
- package/src/scan.ts +15 -15
- package/src/select-order.ts +1 -1
- package/src/select-priority.ts +13 -13
- package/src/sidecar.ts +3 -3
- package/src/slug-namespace.ts +3 -3
- package/src/spec-complete.ts +2 -2
- package/src/start.ts +4 -4
- package/src/status.ts +7 -7
- package/src/surface-gate.ts +2 -2
- package/src/surface-persist.ts +2 -2
- package/src/tasker-review-loop.ts +15 -15
- package/src/tasking-eligibility.ts +21 -21
- package/src/tasking-lock.ts +27 -28
- package/src/tasking.ts +124 -123
- package/src/triage-gate.ts +1 -1
- package/src/triage-persist.ts +16 -16
- package/src/verify-workflow-template.ts +2 -2
- package/src/work-layout.ts +9 -7
- package/src/workspace.ts +1 -1
package/src/do-config.ts
CHANGED
|
@@ -90,7 +90,7 @@ export function doFlagOverrides(
|
|
|
90
90
|
...surfaceBlockersFlagOverrides(flags),
|
|
91
91
|
// `--merge-questions <off|ask|auto>` rides the SAME flag-override chain
|
|
92
92
|
// (flag > env > per-repo > global > default `ask`): the 3-state gate over
|
|
93
|
-
// the merge-question SURFACER (
|
|
93
|
+
// the merge-question SURFACER (spec `land-time-reverify-and-parallel-
|
|
94
94
|
// merge-ceiling` Story 17 / task `merge-questions-gate-axis`). SEPARATE
|
|
95
95
|
// axis from `--observation-triage` with a HIGHER default — NEVER rides
|
|
96
96
|
// `--observation-triage`.
|
|
@@ -122,7 +122,7 @@ export function doFlagOverrides(
|
|
|
122
122
|
// `--no-pr` (the PR-INTENT axis): suppress the PR even on an authed GitHub
|
|
123
123
|
// arbiter. Rides the SAME flag > env > per-repo > global > default chain.
|
|
124
124
|
...noPRFlagOverrides(flags),
|
|
125
|
-
// `--merge-retries <n>` (the cross-job merge serialiser's CAS-retry cap —
|
|
125
|
+
// `--merge-retries <n>` (the cross-job merge serialiser's CAS-retry cap — spec
|
|
126
126
|
// `land-time-reverify-and-parallel-merge-ceiling` Story 5 / Applied Answer
|
|
127
127
|
// q1 (a)) rides the SAME chain (flag > env > per-repo > global > default).
|
|
128
128
|
...mergeRetriesFlagOverrides(flags),
|
|
@@ -130,7 +130,7 @@ export function doFlagOverrides(
|
|
|
130
130
|
if (integration !== undefined) {
|
|
131
131
|
// An explicit `--merge`/`--propose` flag ALWAYS wins for the transition this
|
|
132
132
|
// command runs. `do` runs EITHER the build transition (a task) OR the tasking
|
|
133
|
-
// transition (a `do
|
|
133
|
+
// transition (a `do spec:`) per invocation, and the typed flag is
|
|
134
134
|
// transition-AGNOSTIC, so it must override BOTH the build mode (`integration`)
|
|
135
135
|
// AND the tasking mode (`taskingIntegration`). Setting both at the top of the
|
|
136
136
|
// precedence chain means a `--propose` on a `taskingIntegration:'merge'` repo
|
|
@@ -346,7 +346,7 @@ export function observationTriageFlagOverrides(
|
|
|
346
346
|
/**
|
|
347
347
|
* The surface-blockers CLI flag (`advance`): `--surface-blockers` /
|
|
348
348
|
* `--no-surface-blockers`, the BOOLEAN gate over DECLARED blocked work (whether a
|
|
349
|
-
* `needsAnswers:true` task/
|
|
349
|
+
* `needsAnswers:true` task/spec is rendered into a question sidecar; ADR
|
|
350
350
|
* `ci-config-policy-and-gate-family`). The orthogonal PEER of
|
|
351
351
|
* `--observation-triage`. Resolved through the SAME
|
|
352
352
|
* `flag > env > per-repo > global > default` chain as the other gate flags.
|
|
@@ -414,7 +414,7 @@ export function mergeRetriesFlagOverrides(
|
|
|
414
414
|
|
|
415
415
|
/**
|
|
416
416
|
* The merge-questions CLI flag (`advance`): `--merge-questions <off|ask|auto>`,
|
|
417
|
-
* the 3-state gate over the MERGE-QUESTION SURFACER (
|
|
417
|
+
* the 3-state gate over the MERGE-QUESTION SURFACER (spec
|
|
418
418
|
* `land-time-reverify-and-parallel-merge-ceiling` Story 17 / task
|
|
419
419
|
* `merge-questions-gate-axis`). MIRRORS `--observation-triage`'s SHAPE but is a
|
|
420
420
|
* SEPARATE axis with a HIGHER default (`ask`, never `off` — a dropped merge-
|
|
@@ -459,7 +459,7 @@ export function mergeQuestionsFlagOverrides(
|
|
|
459
459
|
|
|
460
460
|
/**
|
|
461
461
|
* **The strict-merge-approval CLI flag** (`--strict-merge-approval` /
|
|
462
|
-
* `--no-strict-merge-approval`) —
|
|
462
|
+
* `--no-strict-merge-approval`) — spec
|
|
463
463
|
* `land-time-reverify-and-parallel-merge-ceiling` sidecar OQ6 / task
|
|
464
464
|
* `strict-merge-approval-gate`. The OPT-IN strictness layered on the OQ6
|
|
465
465
|
* stale-approval default: ON re-surfaces the merge-question on a merge-base
|
package/src/do-remote-auto.ts
CHANGED
|
@@ -6,7 +6,7 @@ import {selectPrioritised, type SelectedItem} from './select-priority.js';
|
|
|
6
6
|
import type {Config} from './config.js';
|
|
7
7
|
|
|
8
8
|
/**
|
|
9
|
-
* The MIRROR-SIDE auto-pick / `-n` caller for `do --remote` (
|
|
9
|
+
* The MIRROR-SIDE auto-pick / `-n` caller for `do --remote` (spec `advance-loop`,
|
|
10
10
|
* task `advance-drivers-and-gates`, US #25) — the THIN caller the mirror-side
|
|
11
11
|
* eligible-pool scan (`mirror-side-eligible-pool-scan`) makes possible, the
|
|
12
12
|
* isolated counterpart of `do-autopick`'s in-place {@link performDoAuto}.
|
|
@@ -154,7 +154,7 @@ function remoteArgFor(item: SelectedItem): string {
|
|
|
154
154
|
* the GIVEN order (no pool/priority — the operator chose them), each through the
|
|
155
155
|
* EXISTING {@link performDoRemote} pipeline, SEQUENTIALLY. No mirror scan is
|
|
156
156
|
* needed (the args are explicit); the per-item pipeline resolves each
|
|
157
|
-
* bare/`task:`/`
|
|
157
|
+
* bare/`task:`/`spec:` arg itself.
|
|
158
158
|
*/
|
|
159
159
|
export async function performDoRemoteArgs(
|
|
160
160
|
args: string[],
|
package/src/do.ts
CHANGED
|
@@ -130,14 +130,14 @@ export type DoOutcome =
|
|
|
130
130
|
| 'agent-stopped' // the agent DELIBERATELY stopped (task drifted/ambiguous) OR produced no change → surfaced; gate + Gate-2 SKIPPED
|
|
131
131
|
| 'refused' // refused (dirty tree, wrong folder, nothing to complete, …)
|
|
132
132
|
| 'usage-error' // usage / environment problem, or a slug-resolution error
|
|
133
|
-
| 'tasked' // `do
|
|
134
|
-
| 'gate-refused' // `do
|
|
135
|
-
| 'stale'; // `do
|
|
133
|
+
| 'tasked' // `do spec:<slug>` — the spec was tasked into work/backlog/ (runner-owned)
|
|
134
|
+
| 'gate-refused' // `do spec:<slug>` — the tasking gate refused (honest skip)
|
|
135
|
+
| 'stale'; // `do spec:<slug>` — the held spec was edited under the lock (stale tasking)
|
|
136
136
|
|
|
137
137
|
export interface DoResult {
|
|
138
138
|
exitCode: 0 | 1 | 2 | 3;
|
|
139
139
|
outcome: DoOutcome;
|
|
140
|
-
/** The resolved bare slug acted on (task or
|
|
140
|
+
/** The resolved bare slug acted on (task or spec), when one was resolved. */
|
|
141
141
|
slug?: string;
|
|
142
142
|
/** The work branch the run operated on, when one was created/switched-to. */
|
|
143
143
|
branch?: string;
|
|
@@ -171,7 +171,7 @@ export type DoDorfl = (input: {
|
|
|
171
171
|
};
|
|
172
172
|
|
|
173
173
|
export interface DoOptions {
|
|
174
|
-
/** The raw CLI slug argument: bare (= task), `task:<slug>`, or `
|
|
174
|
+
/** The raw CLI slug argument: bare (= task), `task:<slug>`, or `spec:<slug>`. */
|
|
175
175
|
arg: string;
|
|
176
176
|
/** The working clone/checkout to run in-place in. */
|
|
177
177
|
cwd: string;
|
|
@@ -187,10 +187,10 @@ export interface DoOptions {
|
|
|
187
187
|
/**
|
|
188
188
|
* Per-repo `autoTask` policy (resolved by `autoslice-gate`: flag > env >
|
|
189
189
|
* per-repo > global > default false). It gates the AUTO-PICK / pool path only
|
|
190
|
-
* (`do-autopick.ts`'s taskable-
|
|
191
|
-
* UNDECLARED
|
|
190
|
+
* (`do-autopick.ts`'s taskable-spec pool): "may an agent auto-task an
|
|
191
|
+
* UNDECLARED spec in this repo?". An EXPLICITLY-named `do spec:<slug>` tasks
|
|
192
192
|
* REGARDLESS of this policy (the dispatch passes `explicit: true` to
|
|
193
|
-
* `performTask` — naming the
|
|
193
|
+
* `performTask` — naming the spec IS the authorization, exactly as `do <task>`
|
|
194
194
|
* builds regardless of `autoBuild`). Ignored by the task-build path.
|
|
195
195
|
*/
|
|
196
196
|
autoTask?: boolean;
|
|
@@ -205,7 +205,7 @@ export interface DoOptions {
|
|
|
205
205
|
promptGuidance?: PromptGuidance;
|
|
206
206
|
/**
|
|
207
207
|
* **The tasker review→edit→converge LOOP seam** (`slicer-review-edit-loop`):
|
|
208
|
-
* consumed ONLY by the `do
|
|
208
|
+
* consumed ONLY by the `do spec:<slug>` tasking path — after the agent produces
|
|
209
209
|
* candidate tasks, run the `review` SKILL as a review→edit→re-review loop that
|
|
210
210
|
* improves them, routing the verdict through the needsAnswers / needs-attention
|
|
211
211
|
* sink. Ignored by the task-build path. Omitted ⇒ no loop (candidate tasks land
|
|
@@ -234,20 +234,20 @@ export interface DoOptions {
|
|
|
234
234
|
explicitMerge?: boolean;
|
|
235
235
|
/**
|
|
236
236
|
* **Per-TRANSITION override for the TASKING transition only** (config
|
|
237
|
-
* `taskingIntegration`). Consumed ONLY by the `do
|
|
237
|
+
* `taskingIntegration`). Consumed ONLY by the `do spec:<slug>` tasking path: the
|
|
238
238
|
* value threaded into {@link performTask} is `taskingIntegration ?? integration`,
|
|
239
239
|
* so an unset override is byte-for-byte today's behaviour (tasking uses
|
|
240
240
|
* `integration`). The task-BUILD path ALWAYS threads `integration` (never this
|
|
241
241
|
* key). An explicit `--merge`/`--propose` flag wins over BOTH (the flag-override
|
|
242
242
|
* layer sets `integration` AND `taskingIntegration` to the typed mode — see
|
|
243
|
-
* `do-config.ts`). DISTINCT from intake's per-EMITTED-TYPE `{task,
|
|
243
|
+
* `do-config.ts`). DISTINCT from intake's per-EMITTED-TYPE `{task, spec}` resolver.
|
|
244
244
|
*/
|
|
245
245
|
taskingIntegration?: IntegrationMode;
|
|
246
246
|
/**
|
|
247
|
-
* **The per-repo TASK-PLACEMENT default** (
|
|
247
|
+
* **The per-repo TASK-PLACEMENT default** (spec
|
|
248
248
|
* `staging-pool-position-gate-and-trust-model` US #5, task
|
|
249
249
|
* `runner-deterministic-slice-placement-policy-and-precedence`). Consumed by
|
|
250
|
-
* the `do
|
|
250
|
+
* the `do spec:<slug>` tasking path: the value is fed as the
|
|
251
251
|
* CONFIGURED-DEFAULT rung into the runner-deterministic placement resolver
|
|
252
252
|
* (`src/placement.ts`). Resolved per-repo through the SAME chain as
|
|
253
253
|
* `taskingIntegration` (flag > env > per-repo > global > built-in
|
|
@@ -274,7 +274,7 @@ export interface DoOptions {
|
|
|
274
274
|
*/
|
|
275
275
|
ignoreDivergedMain?: boolean;
|
|
276
276
|
/**
|
|
277
|
-
* **`--allow-backlog`** (
|
|
277
|
+
* **`--allow-backlog`** (spec
|
|
278
278
|
* `do-allow-backlog-drive-staged-tasks-without-promotion`): let this `do task:`
|
|
279
279
|
* invocation FIND, CLAIM, and COMPLETE a task that lives in `tasks/backlog/`
|
|
280
280
|
* (staging) IN PLACE, WITHOUT first promoting it to the pool — so no `advance`
|
|
@@ -284,7 +284,7 @@ export interface DoOptions {
|
|
|
284
284
|
* build/gate are identical, and the done-move goes `tasks/backlog/ → tasks/done/`
|
|
285
285
|
* directly (the explicit drive IS the promotion). EXPLICIT-INVOCATION-ONLY:
|
|
286
286
|
* default off, never set by `run`/auto-pick/`advance` (the leak-fence). The
|
|
287
|
-
* task-build path only; the `do
|
|
287
|
+
* task-build path only; the `do spec:` path is unaffected.
|
|
288
288
|
*/
|
|
289
289
|
allowBacklog?: boolean;
|
|
290
290
|
/** The declared per-repo ENV-PREP step (string | list), run ONCE before the
|
|
@@ -300,7 +300,7 @@ export interface DoOptions {
|
|
|
300
300
|
*/
|
|
301
301
|
freshWorktreeGate?: boolean;
|
|
302
302
|
/**
|
|
303
|
-
* **The cross-job merge-serialiser CAS-retry cap** (config `mergeRetries`,
|
|
303
|
+
* **The cross-job merge-serialiser CAS-retry cap** (config `mergeRetries`, spec
|
|
304
304
|
* `land-time-reverify-and-parallel-merge-ceiling` Story 5 / Applied Answer q1
|
|
305
305
|
* (a)). Threaded VERBATIM into `performComplete` → `performIntegration` so a
|
|
306
306
|
* wide-matrix CI's raised cap actually reaches the cross-job land queue (the
|
|
@@ -335,7 +335,7 @@ export interface DoOptions {
|
|
|
335
335
|
*/
|
|
336
336
|
providerInstance?: ReviewProvider;
|
|
337
337
|
/**
|
|
338
|
-
* **Gate 2 — the PR/code review gate** (GATES
|
|
338
|
+
* **Gate 2 — the PR/code review gate** (GATES spec `work/specs/tasked/review.md`):
|
|
339
339
|
* threaded VERBATIM into `performComplete` (the gate rides inside the shared
|
|
340
340
|
* `do`/`complete` pipeline, so CI inherits it for free). When `review` is on,
|
|
341
341
|
* the `review` SKILL runs as a fresh-context agent AFTER the green `verify` and
|
|
@@ -349,7 +349,7 @@ export interface DoOptions {
|
|
|
349
349
|
reviewGate?: ReviewGate;
|
|
350
350
|
/**
|
|
351
351
|
* **The task-SET ACCEPTANCE GATE seam** (task `slice-acceptance-gate`):
|
|
352
|
-
* consumed ONLY by the `do
|
|
352
|
+
* consumed ONLY by the `do spec:<slug>` tasking path. When `review` resolves on,
|
|
353
353
|
* a fresh-context review of the produced task SET runs BEFORE the tasks
|
|
354
354
|
* integrate (riding `performIntegration`'s review block); `block` routes the set
|
|
355
355
|
* to needs-attention, `approve` lets it integrate. It rides the SAME BUILD
|
|
@@ -453,7 +453,7 @@ interface DoAgentLaunchOptions {
|
|
|
453
453
|
* there is no checkout, so the worktree is materialised under `workspacesDir`.
|
|
454
454
|
*/
|
|
455
455
|
export interface DoRemoteOptions extends DoAgentLaunchOptions {
|
|
456
|
-
/** The raw CLI slug argument: bare (= task), `task:<slug>`, or `
|
|
456
|
+
/** The raw CLI slug argument: bare (= task), `task:<slug>`, or `spec:<slug>`. */
|
|
457
457
|
arg: string;
|
|
458
458
|
/**
|
|
459
459
|
* The registered remote spec/URL to run against (`do --remote <r>`). Resolved
|
|
@@ -473,12 +473,12 @@ export interface DoRemoteOptions extends DoAgentLaunchOptions {
|
|
|
473
473
|
arbiter?: string;
|
|
474
474
|
/**
|
|
475
475
|
* Per-repo `autoTask` policy — gates the AUTO-PICK / pool path only. An
|
|
476
|
-
* EXPLICITLY-named `do --remote
|
|
476
|
+
* EXPLICITLY-named `do --remote spec:<slug>` tasks regardless of it (the
|
|
477
477
|
* dispatch passes `explicit: true`), mirroring `do <task>` vs `autoBuild`.
|
|
478
478
|
* Ignored by the task-build path.
|
|
479
479
|
*/
|
|
480
480
|
autoTask?: boolean;
|
|
481
|
-
/** The tasker review→edit→converge loop seam — `do --remote
|
|
481
|
+
/** The tasker review→edit→converge loop seam — `do --remote spec:<slug>` path only (see {@link DoOptions.reviewLoop}). */
|
|
482
482
|
reviewLoop?: TaskReviewGate;
|
|
483
483
|
/** The tasker improver loop's `taskerLoopMax` cap. Loop only. */
|
|
484
484
|
taskerLoopMax?: number;
|
|
@@ -495,22 +495,22 @@ export interface DoRemoteOptions extends DoAgentLaunchOptions {
|
|
|
495
495
|
explicitMerge?: boolean;
|
|
496
496
|
/**
|
|
497
497
|
* **Per-TRANSITION override for the TASKING transition only** (config
|
|
498
|
-
* `taskingIntegration`) on the `do --remote
|
|
498
|
+
* `taskingIntegration`) on the `do --remote spec:<slug>` path: threaded into
|
|
499
499
|
* {@link performTask} as `taskingIntegration ?? integration`. Unset ⇒ tasking
|
|
500
500
|
* uses `integration` (today's behaviour); the task-BUILD path always threads
|
|
501
501
|
* `integration`. See {@link DoOptions.taskingIntegration}.
|
|
502
502
|
*/
|
|
503
503
|
taskingIntegration?: IntegrationMode;
|
|
504
504
|
/**
|
|
505
|
-
* **The per-repo TASK-PLACEMENT default** (
|
|
505
|
+
* **The per-repo TASK-PLACEMENT default** (spec
|
|
506
506
|
* `staging-pool-position-gate-and-trust-model` US #5) on the `do --remote
|
|
507
|
-
*
|
|
507
|
+
* spec:<slug>` path: threaded into {@link performTask} as the
|
|
508
508
|
* configured-default rung. See {@link DoOptions.tasksLandIn}.
|
|
509
509
|
*/
|
|
510
510
|
tasksLandIn?: 'pre-backlog' | 'ready';
|
|
511
511
|
/**
|
|
512
512
|
* **The OPERATOR's EXPLICIT task-placement override** on the `do --remote
|
|
513
|
-
*
|
|
513
|
+
* spec:` path. See {@link DoOptions.explicitTasksLandIn}.
|
|
514
514
|
*/
|
|
515
515
|
explicitTasksLandIn?: 'pre-backlog' | 'ready';
|
|
516
516
|
/** The declared per-repo ENV-PREP step (string | list), run ONCE before the
|
|
@@ -526,7 +526,7 @@ export interface DoRemoteOptions extends DoAgentLaunchOptions {
|
|
|
526
526
|
*/
|
|
527
527
|
freshWorktreeGate?: boolean;
|
|
528
528
|
/**
|
|
529
|
-
* **The cross-job merge-serialiser CAS-retry cap** (config `mergeRetries`,
|
|
529
|
+
* **The cross-job merge-serialiser CAS-retry cap** (config `mergeRetries`, spec
|
|
530
530
|
* `land-time-reverify-and-parallel-merge-ceiling` Story 5 / Applied Answer q1
|
|
531
531
|
* (a)). Threaded VERBATIM into `performComplete` → `performIntegration` so the
|
|
532
532
|
* resolved cap reaches the cross-job land queue (the CAS loop IS the queue
|
|
@@ -564,7 +564,7 @@ export interface DoRemoteOptions extends DoAgentLaunchOptions {
|
|
|
564
564
|
reviewModel?: string;
|
|
565
565
|
reviewMaxRounds?: number;
|
|
566
566
|
reviewGate?: ReviewGate;
|
|
567
|
-
/** The task-SET ACCEPTANCE GATE seam — `do --remote
|
|
567
|
+
/** The task-SET ACCEPTANCE GATE seam — `do --remote spec:<slug>` path only (see {@link DoOptions.taskReviewGate}). */
|
|
568
568
|
taskReviewGate?: ReviewGate;
|
|
569
569
|
/**
|
|
570
570
|
* **`--allow-backlog`** on the no-checkout `do --remote`/`--isolated` path (see
|
|
@@ -586,7 +586,7 @@ export interface DoRemoteOptions extends DoAgentLaunchOptions {
|
|
|
586
586
|
const DEFAULT_ARBITER = 'origin';
|
|
587
587
|
|
|
588
588
|
/**
|
|
589
|
-
* Map a `do
|
|
589
|
+
* Map a `do spec:<slug>` {@link TaskResult} onto the `do` {@link DoResult}
|
|
590
590
|
* contract: outcomes pass through (tasked / gate-refused / stale / agent-failed /
|
|
591
591
|
* usage-error), the lock-lost outcome splits into `lost` (exit 2) vs `contended`
|
|
592
592
|
* (exit 3) by its exit code, and the tasking-only exit 4 (stale) is reported on
|
|
@@ -620,7 +620,7 @@ function taskResultToDoResult(tasked: TaskResult): DoResult {
|
|
|
620
620
|
break;
|
|
621
621
|
case 'needs-attention':
|
|
622
622
|
// The tasker review→edit loop found the decomposition unclear and routed the
|
|
623
|
-
//
|
|
623
|
+
// spec to needs-attention (no guessed tasks). Same exit class as a stuck
|
|
624
624
|
// build (1).
|
|
625
625
|
outcome = 'needs-attention';
|
|
626
626
|
exitCode = 1;
|
|
@@ -684,8 +684,8 @@ export async function performDo(options: DoOptions): Promise<DoResult> {
|
|
|
684
684
|
}
|
|
685
685
|
|
|
686
686
|
// 1. Resolve the slug across BOTH namespaces — `do` is the ONE command that
|
|
687
|
-
// spans them (ADR §3a): bare → task (after a no-
|
|
688
|
-
// ERROR on collision), `task:`/`
|
|
687
|
+
// spans them (ADR §3a): bare → task (after a no-spec-collision check;
|
|
688
|
+
// ERROR on collision), `task:`/`spec:` explicit. A collision / resolution
|
|
689
689
|
// failure is a loud usage error (exit 1).
|
|
690
690
|
let resolved;
|
|
691
691
|
try {
|
|
@@ -717,10 +717,10 @@ export async function performDo(options: DoOptions): Promise<DoResult> {
|
|
|
717
717
|
arbiter,
|
|
718
718
|
doer: 'agent',
|
|
719
719
|
autoTask: options.autoTask,
|
|
720
|
-
// EXPLICIT dispatch: a `do
|
|
720
|
+
// EXPLICIT dispatch: a `do spec:<slug>` target was NAMED (the operator typed
|
|
721
721
|
// it, or the auto-pick POOL already filtered it on `autoTask` before
|
|
722
722
|
// dispatching here — the single policy-enforcement point). So the tasking gate
|
|
723
|
-
// drops the `autoTask` policy term and binds only the
|
|
723
|
+
// drops the `autoTask` policy term and binds only the spec's own readiness
|
|
724
724
|
// (`humanOnly`/`needsAnswers`) + `taskedAfter`, EXACTLY as `do <task>` builds a
|
|
725
725
|
// named task regardless of `autoBuild` (the pool gates the policy, not the
|
|
726
726
|
// explicit claim).
|
|
@@ -746,14 +746,14 @@ export async function performDo(options: DoOptions): Promise<DoResult> {
|
|
|
746
746
|
// precedence`). The tasker reads them as the configured-default + the
|
|
747
747
|
// top rung of the runner-deterministic placement resolver; the
|
|
748
748
|
// `originTrust: untrusted` force is read inside the tasker from the
|
|
749
|
-
//
|
|
749
|
+
// spec's stamped frontmatter.
|
|
750
750
|
tasksLandIn: options.tasksLandIn,
|
|
751
751
|
explicitTasksLandIn: options.explicitTasksLandIn,
|
|
752
752
|
noPR: options.noPR,
|
|
753
753
|
providerInstance: options.providerInstance,
|
|
754
754
|
// The tasker review→edit→converge loop (slicer-review-edit-loop): improves the
|
|
755
755
|
// candidate tasks in place + routes the verdict through the needsAnswers /
|
|
756
|
-
// needs-attention sink. Threaded only on the `do
|
|
756
|
+
// needs-attention sink. Threaded only on the `do spec:` path; omitted ⇒ no loop.
|
|
757
757
|
reviewLoop: options.reviewLoop,
|
|
758
758
|
taskerLoopMax: options.taskerLoopMax,
|
|
759
759
|
reviewExecutions: options.reviewExecutions,
|
|
@@ -1008,7 +1008,7 @@ export async function performDo(options: DoOptions): Promise<DoResult> {
|
|
|
1008
1008
|
|
|
1009
1009
|
// 5. Run the agent autonomously in the checkout, ON the work branch — the
|
|
1010
1010
|
// SAME prompt assembly `dorfl prompt` emits (canonical wrapper +
|
|
1011
|
-
// source
|
|
1011
|
+
// source spec + the task's ## Prompt). The agent only edits code (it does
|
|
1012
1012
|
// no git). This is the one NEW middle step `ar-run.sh` shelled out for
|
|
1013
1013
|
// (`prompt | pi`).
|
|
1014
1014
|
// The post-claim pipeline reads the uniform `IsolatedTree` handle (`tree.dir`)
|
|
@@ -1047,14 +1047,14 @@ export async function performDo(options: DoOptions): Promise<DoResult> {
|
|
|
1047
1047
|
content: readFileSync(task.path, 'utf8'),
|
|
1048
1048
|
env,
|
|
1049
1049
|
});
|
|
1050
|
-
// Per-item override layer: a task or
|
|
1050
|
+
// Per-item override layer: a task or spec may pin `promptGuidance.testFirst`
|
|
1051
1051
|
// in its frontmatter, superseding the resolved repo policy for THIS item.
|
|
1052
1052
|
const itemGuidance = resolvePromptGuidanceForItem({
|
|
1053
1053
|
cwd: tree.dir,
|
|
1054
1054
|
repoResolved: {testFirst: options.promptGuidance?.testFirst === true},
|
|
1055
1055
|
taskContent: readFileSync(task.path, 'utf8'),
|
|
1056
1056
|
});
|
|
1057
|
-
prompt = buildAgentPrompt(task.slug, task.
|
|
1057
|
+
prompt = buildAgentPrompt(task.slug, task.spec, task.taskPrompt, {
|
|
1058
1058
|
cwd: tree.dir,
|
|
1059
1059
|
continueContext,
|
|
1060
1060
|
promptGuidance: itemGuidance,
|
|
@@ -1175,7 +1175,7 @@ export async function performDo(options: DoOptions): Promise<DoResult> {
|
|
|
1175
1175
|
verify: options.verify,
|
|
1176
1176
|
freshWorktreeGate: options.freshWorktreeGate,
|
|
1177
1177
|
// The cross-job merge-serialiser CAS-retry cap (config `mergeRetries`) — the
|
|
1178
|
-
// git-alone FLOOR of the cross-job land queue (
|
|
1178
|
+
// git-alone FLOOR of the cross-job land queue (spec `land-time-reverify-and-
|
|
1179
1179
|
// parallel-merge-ceiling` Story 5 / Applied Answer q1 (a)). Threaded so a
|
|
1180
1180
|
// wide-matrix CI's raised cap actually reaches the merge loop.
|
|
1181
1181
|
mergeRetries: options.mergeRetries,
|
|
@@ -1875,7 +1875,7 @@ export async function performDoRemote(
|
|
|
1875
1875
|
try {
|
|
1876
1876
|
// 2a. Resolve the slug across BOTH namespaces against the claim clone (it
|
|
1877
1877
|
// carries `work/` from the mirror's main). A collision / resolution
|
|
1878
|
-
// failure is a loud usage error; a `
|
|
1878
|
+
// failure is a loud usage error; a `spec:` arg reaches the not-yet-wired
|
|
1879
1879
|
// stub — identical behaviour to in-place `do`.
|
|
1880
1880
|
let resolved;
|
|
1881
1881
|
try {
|
|
@@ -1905,9 +1905,9 @@ export async function performDoRemote(
|
|
|
1905
1905
|
arbiter: 'origin',
|
|
1906
1906
|
doer: 'agent',
|
|
1907
1907
|
autoTask: options.autoTask,
|
|
1908
|
-
// EXPLICIT dispatch (same as the in-place path above): the `
|
|
1908
|
+
// EXPLICIT dispatch (same as the in-place path above): the `spec:<slug>` was
|
|
1909
1909
|
// NAMED (typed, or pool-filtered on `autoTask` before reaching here), so the
|
|
1910
|
-
// tasking gate drops the policy term — only the
|
|
1910
|
+
// tasking gate drops the policy term — only the spec's own readiness +
|
|
1911
1911
|
// `taskedAfter` bind, mirroring the build path vs `autoBuild`.
|
|
1912
1912
|
explicit: true,
|
|
1913
1913
|
dorfl: options.dorfl,
|
|
@@ -1919,22 +1919,22 @@ export async function performDoRemote(
|
|
|
1919
1919
|
// `provider` is the SAME the task-build path threads (arg parity), but the
|
|
1920
1920
|
// MODE is the per-TRANSITION TASKING resolution
|
|
1921
1921
|
// (`per-transition-integration-mode-slicing-vs-build`):
|
|
1922
|
-
// `taskingIntegration ?? integration`, so the `--remote
|
|
1922
|
+
// `taskingIntegration ?? integration`, so the `--remote spec:` output ALSO
|
|
1923
1923
|
// routes through the shared core with the tasking-resolved mode.
|
|
1924
1924
|
integration: options.taskingIntegration ?? options.integration,
|
|
1925
1925
|
// The per-repo TASK-PLACEMENT default + the operator's explicit
|
|
1926
1926
|
// override (task `runner-deterministic-slice-placement-policy-and-
|
|
1927
|
-
// precedence`). Same threading as the in-place `do
|
|
1927
|
+
// precedence`). Same threading as the in-place `do spec:` path.
|
|
1928
1928
|
tasksLandIn: options.tasksLandIn,
|
|
1929
1929
|
explicitTasksLandIn: options.explicitTasksLandIn,
|
|
1930
1930
|
noPR: options.noPR,
|
|
1931
1931
|
providerInstance: options.providerInstance,
|
|
1932
|
-
// The tasker review→edit→converge loop on the `do --remote
|
|
1932
|
+
// The tasker review→edit→converge loop on the `do --remote spec:` path too.
|
|
1933
1933
|
reviewLoop: options.reviewLoop,
|
|
1934
1934
|
taskerLoopMax: options.taskerLoopMax,
|
|
1935
1935
|
reviewExecutions: options.reviewExecutions,
|
|
1936
1936
|
taskerLoopModel: options.taskerLoopModel,
|
|
1937
|
-
// The task-SET ACCEPTANCE GATE on the `do --remote
|
|
1937
|
+
// The task-SET ACCEPTANCE GATE on the `do --remote spec:` path too.
|
|
1938
1938
|
review: options.review,
|
|
1939
1939
|
reviewGate: options.taskReviewGate,
|
|
1940
1940
|
acceptanceReviewModel: options.reviewModel,
|
|
@@ -2238,14 +2238,14 @@ async function runRemotePipeline(
|
|
|
2238
2238
|
content: readFileSync(task.path, 'utf8'),
|
|
2239
2239
|
env,
|
|
2240
2240
|
});
|
|
2241
|
-
// Per-item override layer (mirrors in-place `do`): the task/
|
|
2241
|
+
// Per-item override layer (mirrors in-place `do`): the task/spec frontmatter
|
|
2242
2242
|
// may override the resolved repo `promptGuidance.testFirst` for THIS item.
|
|
2243
2243
|
const itemGuidance = resolvePromptGuidanceForItem({
|
|
2244
2244
|
cwd,
|
|
2245
2245
|
repoResolved: {testFirst: options.promptGuidance?.testFirst === true},
|
|
2246
2246
|
taskContent: readFileSync(task.path, 'utf8'),
|
|
2247
2247
|
});
|
|
2248
|
-
prompt = buildAgentPrompt(task.slug, task.
|
|
2248
|
+
prompt = buildAgentPrompt(task.slug, task.spec, task.taskPrompt, {
|
|
2249
2249
|
cwd,
|
|
2250
2250
|
continueContext,
|
|
2251
2251
|
promptGuidance: itemGuidance,
|
|
@@ -2568,7 +2568,7 @@ async function primeWorktreeTrackingRef(
|
|
|
2568
2568
|
* identity) ride VERBATIM from the threaded `DoOptions` onto the structurally-
|
|
2569
2569
|
* matching {@link DoRemoteOptions} fields; `cwd` is DROPPED (the worktree replaces
|
|
2570
2570
|
* it) and `remote` + `workspacesDir` are supplied from this driver's closure (the
|
|
2571
|
-
* mirror's arbiter URL + the agents' execution area). A `
|
|
2571
|
+
* mirror's arbiter URL + the agents' execution area). A `spec:` arg flows through
|
|
2572
2572
|
* unchanged — `performDoRemote` tasks it against the claim clone with NO build
|
|
2573
2573
|
* worktree (the tasking/surface/triage/apply rungs are tree-less ledger moves, the
|
|
2574
2574
|
* substrate the task's criterion 4 preserves).
|
package/src/drop-source.ts
CHANGED
|
@@ -5,7 +5,7 @@ import {resolveSidecarIdentity, sidecarPathFor} from './sidecar.js';
|
|
|
5
5
|
import {resolveItemPathByIdentity} from './item-path.js';
|
|
6
6
|
|
|
7
7
|
/**
|
|
8
|
-
* The DIRECT-DELETE helper (
|
|
8
|
+
* The DIRECT-DELETE helper (spec
|
|
9
9
|
* `agentic-question-resolution-retire-disposition-vocabulary`, US #5/#11; task
|
|
10
10
|
* `direct-delete-question-cli-helper`) — the "I just want to throw this away"
|
|
11
11
|
* path that `git rm`s a source item AND its question sidecar (when present) in
|
|
@@ -33,7 +33,7 @@ export interface DropSourceOptions {
|
|
|
33
33
|
/** Working clone/worktree the deletion commits in. */
|
|
34
34
|
cwd: string;
|
|
35
35
|
/**
|
|
36
|
-
* The namespaced item identity to delete (`task:foo` / `
|
|
36
|
+
* The namespaced item identity to delete (`task:foo` / `spec:bar` /
|
|
37
37
|
* `observation:baz` / `obs:baz` / a bare `<slug>` = task). Resolved to its
|
|
38
38
|
* on-disk path by identity, folder-agnostic.
|
|
39
39
|
*/
|
package/src/env-config.ts
CHANGED
|
@@ -65,7 +65,7 @@ const KEY_COERCIONS: {[K in keyof Config]?: Coercion} = {
|
|
|
65
65
|
// LOUDLY naming the variable + the valid options.
|
|
66
66
|
observationTriage: {enum: ['off', 'ask', 'auto']},
|
|
67
67
|
// The merge-question SURFACER gate is a 3-state ENUM coercion (mirrors
|
|
68
|
-
// `observationTriage`'s shape; SEPARATE axis with a HIGHER default,
|
|
68
|
+
// `observationTriage`'s shape; SEPARATE axis with a HIGHER default, spec
|
|
69
69
|
// `land-time-reverify-and-parallel-merge-ceiling` Story 17 / task
|
|
70
70
|
// `merge-questions-gate-axis`), so `DORFL_MERGE_QUESTIONS=off|ask|auto`
|
|
71
71
|
// works and a typo FAILS LOUDLY naming the variable + the valid options.
|
|
@@ -74,8 +74,8 @@ const KEY_COERCIONS: {[K in keyof Config]?: Coercion} = {
|
|
|
74
74
|
// `DORFL_SURFACE_BLOCKERS=true|false` works and a typo FAILS LOUDLY.
|
|
75
75
|
surfaceBlockers: 'boolean',
|
|
76
76
|
// `surfaceStaging` (the BOOLEAN gate-family member that widens the SURFACE
|
|
77
|
-
// candidate set to include STAGING — `tasks/backlog/` + `
|
|
78
|
-
// not only the agent pool;
|
|
77
|
+
// candidate set to include STAGING — `tasks/backlog/` + `specs/proposed/` —
|
|
78
|
+
// not only the agent pool; spec
|
|
79
79
|
// `staging-surface-and-apply-promote-safety` F2) coerces as a BOOLEAN like
|
|
80
80
|
// `autoBuild`/`surfaceBlockers`, so `DORFL_SURFACE_STAGING=true|false`
|
|
81
81
|
// works and a typo FAILS LOUDLY. Resolution chain identical to the other
|
|
@@ -98,7 +98,7 @@ const KEY_COERCIONS: {[K in keyof Config]?: Coercion} = {
|
|
|
98
98
|
// works and a typo FAILS LOUDLY. Unset ⇒ the tasking transition falls back to
|
|
99
99
|
// `integration` (the flat value). It NEVER touches the build transition or intake.
|
|
100
100
|
taskingIntegration: {enum: ['propose', 'merge']},
|
|
101
|
-
// `tasksLandIn` (the per-repo TASK-PLACEMENT default —
|
|
101
|
+
// `tasksLandIn` (the per-repo TASK-PLACEMENT default — spec
|
|
102
102
|
// `staging-pool-position-gate-and-trust-model` US #5) coerces as the
|
|
103
103
|
// `pre-backlog`/`ready` enum, so `DORFL_TASKS_LAND_IN=ready` works and a
|
|
104
104
|
// typo FAILS LOUDLY. Same
|
|
@@ -113,7 +113,7 @@ const KEY_COERCIONS: {[K in keyof Config]?: Coercion} = {
|
|
|
113
113
|
// > global > built-in `pre-proposed`); fed into the shared placement resolver
|
|
114
114
|
// (`src/placement.ts`) as the configured-default rung for the spec lifecycle.
|
|
115
115
|
// The legacy `prdsLandIn` key / `DORFL_PRDS_LAND_IN` env are GONE after the
|
|
116
|
-
// prd → spec hard cutover (clean break).
|
|
116
|
+
// `prd` → `spec` hard cutover (clean break).
|
|
117
117
|
specsLandIn: {enum: ['pre-proposed', 'ready']},
|
|
118
118
|
// `noPR` (the PR-INTENT axis) is a BOOLEAN coercion (like `review`), so
|
|
119
119
|
// `DORFL_NO_PR=true|false` works and a typo FAILS LOUDLY. The removed
|
|
@@ -139,14 +139,14 @@ const KEY_COERCIONS: {[K in keyof Config]?: Coercion} = {
|
|
|
139
139
|
// `freshWorktreeGate` is a BOOLEAN coercion (like `taskerLoop`), so
|
|
140
140
|
// `DORFL_FRESH_WORKTREE_GATE=true|false` works and a typo FAILS LOUDLY.
|
|
141
141
|
freshWorktreeGate: 'boolean',
|
|
142
|
-
// `mergeRetries` (the cross-job merge serialiser's CAS-retry cap —
|
|
142
|
+
// `mergeRetries` (the cross-job merge serialiser's CAS-retry cap — spec
|
|
143
143
|
// `land-time-reverify-and-parallel-merge-ceiling` Story 5 / Applied Answer q1 (a))
|
|
144
144
|
// coerces as a NUMBER (like `reviewMaxRounds`), so `DORFL_MERGE_RETRIES=20`
|
|
145
145
|
// works and a typo FAILS LOUDLY. A wide-matrix CI raises it; the default
|
|
146
146
|
// (1000 — the C2 large liveness ceiling) stays in place when unset.
|
|
147
147
|
mergeRetries: 'number',
|
|
148
148
|
// `strictMergeApproval` (the OPT-IN strictness layered on the OQ6
|
|
149
|
-
// stale-approval default —
|
|
149
|
+
// stale-approval default — spec `land-time-reverify-and-parallel-merge-ceiling`
|
|
150
150
|
// sidecar OQ6 / task `strict-merge-approval-gate`) coerces as a BOOLEAN
|
|
151
151
|
// (like `freshWorktreeGate`), so `DORFL_STRICT_MERGE_APPROVAL=true|false`
|
|
152
152
|
// works and a typo FAILS LOUDLY. Default OFF; ON re-surfaces the
|
|
@@ -163,7 +163,7 @@ const KEY_COERCIONS: {[K in keyof Config]?: Coercion} = {
|
|
|
163
163
|
/**
|
|
164
164
|
* The env vars for the nested members of the `promptGuidance` namespace. The
|
|
165
165
|
* key is the env var name (`DORFL_PROMPT_GUIDANCE_<MEMBER>`, the nested
|
|
166
|
-
* naming the
|
|
166
|
+
* naming the spec specifies); the value is the (boolean) coercion. Each member
|
|
167
167
|
* present in env contributes `{<member>: bool}` into a single
|
|
168
168
|
* `promptGuidance` partial — mergeConfig replaces the whole namespace per the
|
|
169
169
|
* layered precedence, which is correct because EVERY member is included (env
|
package/src/format.ts
CHANGED
|
@@ -202,7 +202,7 @@ export function formatCwdSection(section: CwdSection): string[] {
|
|
|
202
202
|
}
|
|
203
203
|
}
|
|
204
204
|
|
|
205
|
-
// The PER-ITEM LOCK in-flight SURFACE for the cwd (
|
|
205
|
+
// The PER-ITEM LOCK in-flight SURFACE for the cwd (spec
|
|
206
206
|
// `ledger-status-per-item-lock-refs` US #8): held (`active` = in-progress) and
|
|
207
207
|
// `stuck` (= needs-attention) lock entries + their reasons. This is what keeps a
|
|
208
208
|
// held/stuck cwd item from vanishing: the held-slug subtraction removes it from
|
|
@@ -263,7 +263,7 @@ export function formatReport(report: ScanReport, cwd?: CwdSection): string {
|
|
|
263
263
|
lines.push('No participating repos found.');
|
|
264
264
|
lines.push(
|
|
265
265
|
'(A repo participates iff its work/ tree has lifecycle content in any ' +
|
|
266
|
-
'pool: tasks/ready, tasks/backlog,
|
|
266
|
+
'pool: tasks/ready, tasks/backlog, specs/proposed, specs/ready, ' +
|
|
267
267
|
'notes/observations, or questions.)',
|
|
268
268
|
);
|
|
269
269
|
} else {
|
|
@@ -281,7 +281,7 @@ export function formatReport(report: ScanReport, cwd?: CwdSection): string {
|
|
|
281
281
|
const groups = categoriseItems(repo.items);
|
|
282
282
|
allGroups.push(groups);
|
|
283
283
|
lines.push(...formatRepo(repo.path, groups));
|
|
284
|
-
// The one-slug-one-folder LINT (
|
|
284
|
+
// The one-slug-one-folder LINT (spec `ledger-integrity` story 3): WARN LOUDLY
|
|
285
285
|
// when any slug in this repo's ledger resides in >1 status folder (a corrupt
|
|
286
286
|
// ledger — never a silent pass). Clean ledgers add no lines.
|
|
287
287
|
const warnings = formatDuplicateWarnings(repo.ledgerDuplicates ?? []);
|