dorfl 0.1.2 → 0.2.1
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-drivers.d.ts +1 -1
- package/dist/advance-drivers.d.ts.map +1 -1
- package/dist/advance-drivers.js +15 -3
- package/dist/advance-drivers.js.map +1 -1
- package/dist/advance-lifecycle-template.d.ts.map +1 -1
- package/dist/advance-lifecycle-template.js +76 -4
- package/dist/advance-lifecycle-template.js.map +1 -1
- package/dist/advance-treeless-publish.d.ts +23 -0
- package/dist/advance-treeless-publish.d.ts.map +1 -1
- package/dist/advance-treeless-publish.js +41 -0
- package/dist/advance-treeless-publish.js.map +1 -1
- package/dist/advance.d.ts +59 -7
- package/dist/advance.d.ts.map +1 -1
- package/dist/advance.js +389 -82
- package/dist/advance.js.map +1 -1
- package/dist/advancing-lock.d.ts +30 -2
- package/dist/advancing-lock.d.ts.map +1 -1
- package/dist/advancing-lock.js +50 -0
- package/dist/advancing-lock.js.map +1 -1
- package/dist/agent-launch.d.ts +12 -0
- package/dist/agent-launch.d.ts.map +1 -1
- package/dist/agent-launch.js +22 -12
- package/dist/agent-launch.js.map +1 -1
- package/dist/agent-stop.d.ts +40 -2
- package/dist/agent-stop.d.ts.map +1 -1
- package/dist/agent-stop.js +30 -2
- package/dist/agent-stop.js.map +1 -1
- package/dist/apply-decide.d.ts +17 -3
- package/dist/apply-decide.d.ts.map +1 -1
- package/dist/apply-decide.js +36 -7
- package/dist/apply-decide.js.map +1 -1
- package/dist/apply-merge-action.d.ts +17 -5
- package/dist/apply-merge-action.d.ts.map +1 -1
- package/dist/apply-merge-action.js +43 -8
- package/dist/apply-merge-action.js.map +1 -1
- package/dist/apply-persist.d.ts +57 -26
- package/dist/apply-persist.d.ts.map +1 -1
- package/dist/apply-persist.js +166 -37
- package/dist/apply-persist.js.map +1 -1
- package/dist/apply-stuck-action.d.ts +151 -0
- package/dist/apply-stuck-action.d.ts.map +1 -0
- package/dist/apply-stuck-action.js +125 -0
- package/dist/apply-stuck-action.js.map +1 -0
- package/dist/brand.d.ts +12 -1
- package/dist/brand.d.ts.map +1 -1
- package/dist/brand.js +2 -1
- package/dist/brand.js.map +1 -1
- package/dist/cli-spinner.d.ts +1 -1
- package/dist/cli-spinner.js +1 -1
- package/dist/cli.d.ts +10 -0
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +320 -63
- package/dist/cli.js.map +1 -1
- package/dist/close-job-template.js +1 -1
- package/dist/complete.d.ts +6 -3
- package/dist/complete.d.ts.map +1 -1
- package/dist/complete.js +91 -37
- package/dist/complete.js.map +1 -1
- package/dist/config.d.ts +55 -9
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +56 -4
- package/dist/config.js.map +1 -1
- package/dist/continue-branch.d.ts.map +1 -1
- package/dist/continue-branch.js +22 -0
- package/dist/continue-branch.js.map +1 -1
- package/dist/decision-engine.d.ts +38 -10
- package/dist/decision-engine.d.ts.map +1 -1
- package/dist/decision-engine.js +10 -6
- package/dist/decision-engine.js.map +1 -1
- package/dist/do-autopick.d.ts.map +1 -1
- package/dist/do-autopick.js +11 -1
- package/dist/do-autopick.js.map +1 -1
- package/dist/do-config.d.ts +1 -1
- package/dist/do.d.ts +49 -56
- package/dist/do.d.ts.map +1 -1
- package/dist/do.js +419 -30
- package/dist/do.js.map +1 -1
- package/dist/env-config.d.ts.map +1 -1
- package/dist/env-config.js +12 -4
- package/dist/env-config.js.map +1 -1
- package/dist/failure-cause.d.ts +3 -2
- package/dist/failure-cause.d.ts.map +1 -1
- package/dist/failure-cause.js +28 -1
- package/dist/failure-cause.js.map +1 -1
- package/dist/format.d.ts +6 -6
- package/dist/format.d.ts.map +1 -1
- package/dist/format.js +10 -27
- package/dist/format.js.map +1 -1
- package/dist/frontmatter.d.ts +16 -4
- package/dist/frontmatter.d.ts.map +1 -1
- package/dist/frontmatter.js +27 -1
- package/dist/frontmatter.js.map +1 -1
- package/dist/gc.d.ts +65 -6
- package/dist/gc.d.ts.map +1 -1
- package/dist/gc.js +126 -9
- package/dist/gc.js.map +1 -1
- package/dist/github.d.ts +14 -0
- package/dist/github.d.ts.map +1 -1
- package/dist/github.js +73 -0
- package/dist/github.js.map +1 -1
- package/dist/harness.d.ts +25 -0
- package/dist/harness.d.ts.map +1 -1
- package/dist/harness.js.map +1 -1
- package/dist/index.d.ts +4 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -1
- package/dist/index.js.map +1 -1
- package/dist/install-ci-branch-protection.d.ts +132 -38
- package/dist/install-ci-branch-protection.d.ts.map +1 -1
- package/dist/install-ci-branch-protection.js +190 -48
- package/dist/install-ci-branch-protection.js.map +1 -1
- package/dist/install-ci-core.d.ts +21 -1
- package/dist/install-ci-core.d.ts.map +1 -1
- package/dist/install-ci-core.js +10 -3
- package/dist/install-ci-core.js.map +1 -1
- package/dist/install-ci-github.d.ts +32 -0
- package/dist/install-ci-github.d.ts.map +1 -1
- package/dist/install-ci-github.js +73 -0
- package/dist/install-ci-github.js.map +1 -1
- package/dist/install-skills.d.ts +123 -0
- package/dist/install-skills.d.ts.map +1 -0
- package/dist/install-skills.js +100 -0
- package/dist/install-skills.js.map +1 -0
- package/dist/intake-trigger-template.js +1 -1
- package/dist/intake.d.ts +17 -4
- package/dist/intake.d.ts.map +1 -1
- package/dist/intake.js +23 -7
- package/dist/intake.js.map +1 -1
- package/dist/integration-core.d.ts +10 -7
- package/dist/integration-core.d.ts.map +1 -1
- package/dist/integration-core.js +174 -60
- package/dist/integration-core.js.map +1 -1
- package/dist/integrator.d.ts +1 -1
- package/dist/integrator.d.ts.map +1 -1
- package/dist/integrator.js +19 -3
- package/dist/integrator.js.map +1 -1
- package/dist/isolation.d.ts +2 -2
- package/dist/isolation.d.ts.map +1 -1
- package/dist/isolation.js +9 -0
- package/dist/isolation.js.map +1 -1
- package/dist/item-lock.d.ts +196 -129
- package/dist/item-lock.d.ts.map +1 -1
- package/dist/item-lock.js +329 -254
- package/dist/item-lock.js.map +1 -1
- package/dist/ledger-write.d.ts +31 -26
- package/dist/ledger-write.d.ts.map +1 -1
- package/dist/ledger-write.js +100 -122
- package/dist/ledger-write.js.map +1 -1
- package/dist/lifecycle-gather.d.ts +17 -0
- package/dist/lifecycle-gather.d.ts.map +1 -1
- package/dist/lifecycle-gather.js +7 -1
- package/dist/lifecycle-gather.js.map +1 -1
- package/dist/lifecycle-pools.d.ts +40 -3
- package/dist/lifecycle-pools.d.ts.map +1 -1
- package/dist/lifecycle-pools.js +26 -6
- package/dist/lifecycle-pools.js.map +1 -1
- package/dist/merge-question-surfacer.d.ts +15 -1
- package/dist/merge-question-surfacer.d.ts.map +1 -1
- package/dist/merge-question-surfacer.js +18 -3
- package/dist/merge-question-surfacer.js.map +1 -1
- package/dist/migrate-stuck-locks.d.ts +129 -0
- package/dist/migrate-stuck-locks.d.ts.map +1 -0
- package/dist/migrate-stuck-locks.js +355 -0
- package/dist/migrate-stuck-locks.js.map +1 -0
- package/dist/needs-attention.d.ts +293 -16
- package/dist/needs-attention.d.ts.map +1 -1
- package/dist/needs-attention.js +532 -57
- package/dist/needs-attention.js.map +1 -1
- package/dist/orphan-sidecar.d.ts +8 -4
- package/dist/orphan-sidecar.d.ts.map +1 -1
- package/dist/orphan-sidecar.js +35 -2
- package/dist/orphan-sidecar.js.map +1 -1
- package/dist/pi-harness.d.ts +16 -0
- package/dist/pi-harness.d.ts.map +1 -1
- package/dist/pi-harness.js +82 -2
- package/dist/pi-harness.js.map +1 -1
- package/dist/placement.d.ts +3 -3
- package/dist/placement.js +1 -1
- package/dist/prd-to-spec.d.ts.map +1 -1
- package/dist/prd-to-spec.js +9 -5
- package/dist/prd-to-spec.js.map +1 -1
- package/dist/protocol/CLAIM-PROTOCOL.md +17 -10
- package/dist/protocol/REVIEW-PROTOCOL.md +4 -1
- package/dist/protocol/SURFACE-PROTOCOL.md +16 -2
- package/dist/protocol/TASKING-PROTOCOL.md +3 -1
- package/dist/protocol/WORK-CONTRACT.md +22 -18
- package/dist/protocol/task-template.md +1 -1
- package/dist/reap-branches.d.ts +12 -9
- package/dist/reap-branches.d.ts.map +1 -1
- package/dist/reap-branches.js +25 -7
- package/dist/reap-branches.js.map +1 -1
- package/dist/recover-isolated.d.ts +12 -0
- package/dist/recover-isolated.d.ts.map +1 -1
- package/dist/recover-isolated.js +5 -0
- package/dist/recover-isolated.js.map +1 -1
- package/dist/repo-config.d.ts +23 -2
- package/dist/repo-config.d.ts.map +1 -1
- package/dist/repo-config.js +53 -7
- package/dist/repo-config.js.map +1 -1
- package/dist/repo-mirror.d.ts.map +1 -1
- package/dist/repo-mirror.js +18 -2
- package/dist/repo-mirror.js.map +1 -1
- package/dist/review-verdict.js +1 -1
- package/dist/review-verdict.js.map +1 -1
- package/dist/run.d.ts +1 -1
- package/dist/run.d.ts.map +1 -1
- package/dist/run.js +54 -19
- package/dist/run.js.map +1 -1
- package/dist/scan.d.ts +17 -8
- package/dist/scan.d.ts.map +1 -1
- package/dist/scan.js +22 -8
- package/dist/scan.js.map +1 -1
- package/dist/select-priority.d.ts +2 -2
- package/dist/select-priority.js +1 -1
- package/dist/select-priority.js.map +1 -1
- package/dist/sidecar-apply.js +1 -1
- package/dist/sidecar-apply.js.map +1 -1
- package/dist/sidecar.d.ts +45 -10
- package/dist/sidecar.d.ts.map +1 -1
- package/dist/sidecar.js +82 -2
- package/dist/sidecar.js.map +1 -1
- package/dist/skills/answer-questions/SKILL.md +89 -0
- package/dist/skills/capture-signal/SKILL.md +52 -0
- package/dist/skills/convert-from-prd-to-spec/SKILL.md +90 -0
- package/dist/skills/drive-tasks/SKILL.md +218 -0
- package/dist/skills/from-idea/SKILL.md +83 -0
- package/dist/skills/merge-prs/SKILL.md +70 -0
- package/dist/skills/orchestrate/SKILL.md +101 -0
- package/dist/skills/promote/SKILL.md +35 -0
- package/dist/skills/review/SKILL.md +16 -0
- package/dist/skills/setup/SKILL.md +258 -0
- package/dist/skills/setup/protocol/ADR-FORMAT.md +47 -0
- package/dist/skills/setup/protocol/CLAIM-PROTOCOL.md +224 -0
- package/dist/skills/setup/protocol/REVIEW-PROTOCOL.md +122 -0
- package/dist/skills/setup/protocol/SURFACE-PROTOCOL.md +135 -0
- package/dist/skills/setup/protocol/TASKING-PROTOCOL.md +124 -0
- package/dist/skills/setup/protocol/WORK-CONTRACT.md +280 -0
- package/dist/skills/setup/protocol/spec-template.md +71 -0
- package/dist/skills/setup/protocol/task-template.md +65 -0
- package/dist/skills/surface-questions/SKILL.md +16 -0
- package/dist/skills/to-spec/SKILL.md +34 -0
- package/dist/skills/to-task/SKILL.md +19 -0
- package/dist/skills/triage-observations/SKILL.md +78 -0
- package/dist/skills/work/SKILL.md +51 -0
- package/dist/slug-namespace.d.ts +5 -5
- package/dist/slug-namespace.js +5 -5
- package/dist/slug-namespace.js.map +1 -1
- package/dist/spec-complete.d.ts.map +1 -1
- package/dist/spec-complete.js +2 -3
- package/dist/spec-complete.js.map +1 -1
- package/dist/start.d.ts.map +1 -1
- package/dist/start.js +51 -57
- package/dist/start.js.map +1 -1
- package/dist/surface-gate.d.ts.map +1 -1
- package/dist/surface-gate.js +10 -3
- package/dist/surface-gate.js.map +1 -1
- package/dist/surface-persist.js +1 -1
- package/dist/surface-persist.js.map +1 -1
- package/dist/tasker-review-loop.d.ts +4 -3
- package/dist/tasker-review-loop.d.ts.map +1 -1
- package/dist/tasker-review-loop.js.map +1 -1
- package/dist/tasking-lock.d.ts +2 -2
- package/dist/tasking-lock.d.ts.map +1 -1
- package/dist/tasking-lock.js +53 -32
- package/dist/tasking-lock.js.map +1 -1
- package/dist/tasking.d.ts +40 -6
- package/dist/tasking.d.ts.map +1 -1
- package/dist/tasking.js +224 -12
- package/dist/tasking.js.map +1 -1
- package/dist/triage-persist.d.ts +10 -6
- package/dist/triage-persist.d.ts.map +1 -1
- package/dist/triage-persist.js +34 -4
- package/dist/triage-persist.js.map +1 -1
- package/dist/vendor/incur/agents.d.ts +58 -0
- package/dist/vendor/incur/agents.d.ts.map +1 -0
- package/dist/vendor/incur/agents.js +343 -0
- package/dist/vendor/incur/agents.js.map +1 -0
- package/dist/verify-workflow-template.js +1 -1
- package/dist/watch-session.d.ts +11 -3
- package/dist/watch-session.d.ts.map +1 -1
- package/dist/watch-session.js +94 -7
- package/dist/watch-session.js.map +1 -1
- package/dist/work-layout.d.ts +7 -3
- package/dist/work-layout.d.ts.map +1 -1
- package/dist/work-layout.js +6 -3
- package/dist/work-layout.js.map +1 -1
- package/dist/workspace.d.ts +1 -1
- package/package.json +2 -2
- package/src/advance-drivers.ts +16 -3
- package/src/advance-lifecycle-template.ts +89 -4
- package/src/advance-treeless-publish.ts +45 -0
- package/src/advance.ts +467 -87
- package/src/advancing-lock.ts +96 -1
- package/src/agent-launch.ts +37 -12
- package/src/agent-stop.ts +60 -2
- package/src/apply-decide.ts +36 -7
- package/src/apply-merge-action.ts +45 -7
- package/src/apply-persist.ts +228 -54
- package/src/apply-stuck-action.ts +260 -0
- package/src/brand.ts +14 -2
- package/src/cli-spinner.ts +1 -1
- package/src/cli.ts +401 -70
- package/src/close-job-template.ts +1 -1
- package/src/complete.ts +110 -52
- package/src/config.ts +107 -13
- package/src/continue-branch.ts +22 -0
- package/src/decision-engine.ts +55 -17
- package/src/do-autopick.ts +12 -1
- package/src/do-config.ts +1 -1
- package/src/do.ts +511 -38
- package/src/env-config.ts +12 -4
- package/src/failure-cause.ts +30 -1
- package/src/format.ts +10 -30
- package/src/frontmatter.ts +35 -5
- package/src/gc.ts +172 -9
- package/src/github.ts +78 -0
- package/src/harness.ts +25 -0
- package/src/index.ts +10 -0
- package/src/install-ci-branch-protection.ts +282 -57
- package/src/install-ci-core.ts +30 -3
- package/src/install-ci-github.ts +86 -0
- package/src/install-skills.ts +166 -0
- package/src/intake-trigger-template.ts +1 -1
- package/src/intake.ts +46 -11
- package/src/integration-core.ts +199 -65
- package/src/integrator.ts +22 -9
- package/src/isolation.ts +11 -2
- package/src/item-lock.ts +485 -341
- package/src/ledger-write.ts +135 -150
- package/src/lifecycle-gather.ts +29 -6
- package/src/lifecycle-pools.ts +67 -9
- package/src/merge-question-surfacer.ts +28 -4
- package/src/migrate-stuck-locks.ts +451 -0
- package/src/needs-attention.ts +857 -84
- package/src/orphan-sidecar.ts +47 -6
- package/src/pi-harness.ts +82 -2
- package/src/placement.ts +3 -3
- package/src/prd-to-spec.ts +13 -5
- package/src/reap-branches.ts +38 -14
- package/src/recover-isolated.ts +17 -0
- package/src/repo-config.ts +55 -6
- package/src/repo-mirror.ts +23 -1
- package/src/review-verdict.ts +1 -1
- package/src/run.ts +64 -18
- package/src/scan.ts +22 -8
- package/src/select-priority.ts +3 -3
- package/src/sidecar-apply.ts +1 -1
- package/src/sidecar.ts +138 -11
- package/src/slug-namespace.ts +7 -7
- package/src/spec-complete.ts +2 -3
- package/src/start.ts +53 -59
- package/src/surface-gate.ts +10 -3
- package/src/surface-persist.ts +1 -1
- package/src/tasker-review-loop.ts +4 -3
- package/src/tasking-lock.ts +52 -36
- package/src/tasking.ts +261 -17
- package/src/triage-persist.ts +56 -12
- package/src/vendor/incur/LICENSE +21 -0
- package/src/vendor/incur/README.md +19 -0
- package/src/vendor/incur/agents.ts +392 -0
- package/src/verify-workflow-template.ts +1 -1
- package/src/watch-session.ts +102 -7
- package/src/work-layout.ts +6 -3
- package/src/workspace.ts +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"watch-session.js","sourceRoot":"","sources":["../src/watch-session.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,IAAI,EAAkB,MAAM,kBAAkB,CAAC;AAEvD
|
|
1
|
+
{"version":3,"file":"watch-session.js","sourceRoot":"","sources":["../src/watch-session.ts"],"names":[],"mappings":"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"}
|
package/dist/work-layout.d.ts
CHANGED
|
@@ -70,7 +70,7 @@ export declare const WORK_ROOT: "work";
|
|
|
70
70
|
* key-only relabel, this batch moves the folders too, so the KEY and VALUE change
|
|
71
71
|
* together and the self-renaming-folder guard stays green. The KEY rename is a
|
|
72
72
|
* mechanical relabel of the key literal at each call site (behaviour-preserving);
|
|
73
|
-
* the legacy frontmatter
|
|
73
|
+
* the legacy frontmatter ''prd:'' field survives ONLY as un-migrated on-disk DATA the
|
|
74
74
|
* `dorfl prd-to-spec` command textually converts to `spec:` (HARD CUTOVER: it is no
|
|
75
75
|
* longer READ by `parseFrontmatter` — `spec:` is the only read key); the
|
|
76
76
|
* `--specs-land-in` flag/`specsLandIn` config + the
|
|
@@ -171,9 +171,13 @@ export type TaskResolutionFolder = (typeof TASK_RESOLUTION_FOLDERS)[number] | 't
|
|
|
171
171
|
/**
|
|
172
172
|
* The task LIFECYCLE folders a `task:<slug>` / lone-task `issue:` can reside
|
|
173
173
|
* in (spec-complete.ts + close-job.ts `TASK_FOLDERS`): `tasks-ready`, `in-progress`,
|
|
174
|
-
* `needs-attention
|
|
174
|
+
* `done`. `needs-attention` was dropped post-cutover
|
|
175
|
+
* (`finish-needs-attention-folder-cutover-remove-legacy-recovery-readers`, ratified
|
|
176
|
+
* in `docs/adr/needs-attention-folder-cutover-followup-nits.md`): the folder is
|
|
177
|
+
* retired — a stuck item is the per-item lock `state: stuck` with the body resting
|
|
178
|
+
* in `tasks/ready/`, so no task ever resides in `work/needs-attention/`.
|
|
175
179
|
*/
|
|
176
|
-
export declare const TASK_LIFECYCLE_FOLDERS: readonly ["tasks-ready", "in-progress", "
|
|
180
|
+
export declare const TASK_LIFECYCLE_FOLDERS: readonly ["tasks-ready", "in-progress", "done"];
|
|
177
181
|
/** One of the task lifecycle folders (spec-complete.ts / close-job.ts). */
|
|
178
182
|
export type TaskLifecycleFolder = (typeof TASK_LIFECYCLE_FOLDERS)[number];
|
|
179
183
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"work-layout.d.ts","sourceRoot":"","sources":["../src/work-layout.ts"],"names":[],"mappings":"AAEA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AAEH;;;GAGG;AACH,eAAO,MAAM,SAAS,EAAG,MAAe,CAAC;AAEzC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA0CG;AACH,eAAO,MAAM,gBAAgB;;;;;;;;;;;;;;;;CAgBnB,CAAC;AAEX,0EAA0E;AAC1E,MAAM,MAAM,aAAa,GAAG,MAAM,OAAO,gBAAgB,CAAC;AAE1D;;;GAGG;AACH,wBAAgB,cAAc,CAAC,MAAM,EAAE,aAAa,GAAG,MAAM,CAE5D;AAED;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,aAAa,GAAG,MAAM,CAE1E;AAED;;;;;GAKG;AACH,wBAAgB,YAAY,CAC3B,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,aAAa,EACrB,IAAI,EAAE,MAAM,GACV,MAAM,CAER;AAED;;;;GAIG;AACH,wBAAgB,aAAa,CAAC,MAAM,EAAE,aAAa,GAAG,MAAM,CAE3D;AAED;;;;;GAKG;AACH,wBAAgB,WAAW,CAAC,MAAM,EAAE,aAAa,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CAE3E;AAED;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,aAAa,GAAG,MAAM,CAE9D;AAED;;;;;;;GAOG;AACH,wBAAgB,qBAAqB,CACpC,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,aAAa,GACnB,MAAM,GAAG,SAAS,CAGpB;AAED;;;;;GAKG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAEpD;AAID;;;;;;;;GAQG;AACH,eAAO,MAAM,uBAAuB,iDAIS,CAAC;AAE9C;;;;;;GAMG;AACH,MAAM,MAAM,oBAAoB,GAC7B,CAAC,OAAO,uBAAuB,CAAC,CAAC,MAAM,CAAC,GACxC,eAAe,CAAC;AAEnB
|
|
1
|
+
{"version":3,"file":"work-layout.d.ts","sourceRoot":"","sources":["../src/work-layout.ts"],"names":[],"mappings":"AAEA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AAEH;;;GAGG;AACH,eAAO,MAAM,SAAS,EAAG,MAAe,CAAC;AAEzC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA0CG;AACH,eAAO,MAAM,gBAAgB;;;;;;;;;;;;;;;;CAgBnB,CAAC;AAEX,0EAA0E;AAC1E,MAAM,MAAM,aAAa,GAAG,MAAM,OAAO,gBAAgB,CAAC;AAE1D;;;GAGG;AACH,wBAAgB,cAAc,CAAC,MAAM,EAAE,aAAa,GAAG,MAAM,CAE5D;AAED;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,aAAa,GAAG,MAAM,CAE1E;AAED;;;;;GAKG;AACH,wBAAgB,YAAY,CAC3B,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,aAAa,EACrB,IAAI,EAAE,MAAM,GACV,MAAM,CAER;AAED;;;;GAIG;AACH,wBAAgB,aAAa,CAAC,MAAM,EAAE,aAAa,GAAG,MAAM,CAE3D;AAED;;;;;GAKG;AACH,wBAAgB,WAAW,CAAC,MAAM,EAAE,aAAa,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CAE3E;AAED;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,aAAa,GAAG,MAAM,CAE9D;AAED;;;;;;;GAOG;AACH,wBAAgB,qBAAqB,CACpC,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,aAAa,GACnB,MAAM,GAAG,SAAS,CAGpB;AAED;;;;;GAKG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAEpD;AAID;;;;;;;;GAQG;AACH,eAAO,MAAM,uBAAuB,iDAIS,CAAC;AAE9C;;;;;;GAMG;AACH,MAAM,MAAM,oBAAoB,GAC7B,CAAC,OAAO,uBAAuB,CAAC,CAAC,MAAM,CAAC,GACxC,eAAe,CAAC;AAEnB;;;;;;;;GAQG;AACH,eAAO,MAAM,sBAAsB,iDAIU,CAAC;AAE9C,2EAA2E;AAC3E,MAAM,MAAM,mBAAmB,GAAG,CAAC,OAAO,sBAAsB,CAAC,CAAC,MAAM,CAAC,CAAC;AAE1E;;;;;;;;;GASG;AACH,eAAO,MAAM,qBAAqB,+CAIW,CAAC;AAE9C,uFAAuF;AACvF,MAAM,MAAM,kBAAkB,GAAG,CAAC,OAAO,qBAAqB,CAAC,CAAC,MAAM,CAAC,CAAC;AAExE;;;;GAIG;AACH,eAAO,MAAM,YAAY,0CAGoB,CAAC;AAE9C,yEAAyE;AACzE,MAAM,MAAM,UAAU,GAAG,CAAC,OAAO,YAAY,CAAC,CAAC,MAAM,CAAC,CAAC"}
|
package/dist/work-layout.js
CHANGED
|
@@ -71,7 +71,7 @@ export const WORK_ROOT = 'work';
|
|
|
71
71
|
* key-only relabel, this batch moves the folders too, so the KEY and VALUE change
|
|
72
72
|
* together and the self-renaming-folder guard stays green. The KEY rename is a
|
|
73
73
|
* mechanical relabel of the key literal at each call site (behaviour-preserving);
|
|
74
|
-
* the legacy frontmatter
|
|
74
|
+
* the legacy frontmatter ''prd:'' field survives ONLY as un-migrated on-disk DATA the
|
|
75
75
|
* `dorfl prd-to-spec` command textually converts to `spec:` (HARD CUTOVER: it is no
|
|
76
76
|
* longer READ by `parseFrontmatter` — `spec:` is the only read key); the
|
|
77
77
|
* `--specs-land-in` flag/`specsLandIn` config + the
|
|
@@ -184,12 +184,15 @@ export const TASK_RESOLUTION_FOLDERS = [
|
|
|
184
184
|
/**
|
|
185
185
|
* The task LIFECYCLE folders a `task:<slug>` / lone-task `issue:` can reside
|
|
186
186
|
* in (spec-complete.ts + close-job.ts `TASK_FOLDERS`): `tasks-ready`, `in-progress`,
|
|
187
|
-
* `needs-attention
|
|
187
|
+
* `done`. `needs-attention` was dropped post-cutover
|
|
188
|
+
* (`finish-needs-attention-folder-cutover-remove-legacy-recovery-readers`, ratified
|
|
189
|
+
* in `docs/adr/needs-attention-folder-cutover-followup-nits.md`): the folder is
|
|
190
|
+
* retired — a stuck item is the per-item lock `state: stuck` with the body resting
|
|
191
|
+
* in `tasks/ready/`, so no task ever resides in `work/needs-attention/`.
|
|
188
192
|
*/
|
|
189
193
|
export const TASK_LIFECYCLE_FOLDERS = [
|
|
190
194
|
'tasks-ready',
|
|
191
195
|
'in-progress',
|
|
192
|
-
'needs-attention',
|
|
193
196
|
'done',
|
|
194
197
|
];
|
|
195
198
|
/**
|
package/dist/work-layout.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"work-layout.js","sourceRoot":"","sources":["../src/work-layout.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,IAAI,EAAC,MAAM,WAAW,CAAC;AAE/B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AAEH;;;GAGG;AACH,MAAM,CAAC,MAAM,SAAS,GAAG,MAAe,CAAC;AAEzC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA0CG;AACH,MAAM,CAAC,MAAM,gBAAgB,GAAG;IAC/B,eAAe,EAAE,eAAe;IAChC,aAAa,EAAE,aAAa;IAC5B,aAAa,EAAE,aAAa;IAC5B,iBAAiB,EAAE,iBAAiB;IACpC,IAAI,EAAE,YAAY;IAClB,SAAS,EAAE,iBAAiB;IAC5B,gBAAgB,EAAE,gBAAgB;IAClC,aAAa,EAAE,aAAa;IAC5B,cAAc,EAAE,cAAc;IAC9B,eAAe,EAAE,eAAe;IAChC,YAAY,EAAE,oBAAoB;IAClC,KAAK,EAAE,aAAa;IACpB,QAAQ,EAAE,gBAAgB;IAC1B,SAAS,EAAE,WAAW;IACtB,QAAQ,EAAE,UAAU;CACX,CAAC;AAKX;;;GAGG;AACH,MAAM,UAAU,cAAc,CAAC,MAAqB;IACnD,OAAO,gBAAgB,CAAC,MAAM,CAAC,CAAC;AACjC,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,cAAc,CAAC,IAAY,EAAE,MAAqB;IACjE,OAAO,IAAI,CAAC,IAAI,EAAE,SAAS,EAAE,cAAc,CAAC,MAAM,CAAC,CAAC,CAAC;AACtD,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,YAAY,CAC3B,IAAY,EACZ,MAAqB,EACrB,IAAY;IAEZ,OAAO,IAAI,CAAC,IAAI,EAAE,SAAS,EAAE,cAAc,CAAC,MAAM,CAAC,EAAE,GAAG,IAAI,KAAK,CAAC,CAAC;AACpE,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,aAAa,CAAC,MAAqB;IAClD,OAAO,GAAG,SAAS,IAAI,cAAc,CAAC,MAAM,CAAC,EAAE,CAAC;AACjD,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,WAAW,CAAC,MAAqB,EAAE,QAAgB;IAClE,OAAO,GAAG,SAAS,IAAI,cAAc,CAAC,MAAM,CAAC,IAAI,QAAQ,EAAE,CAAC;AAC7D,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,gBAAgB,CAAC,MAAqB;IACrD,OAAO,GAAG,aAAa,CAAC,MAAM,CAAC,GAAG,CAAC;AACpC,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,qBAAqB,CACpC,IAAY,EACZ,MAAqB;IAErB,MAAM,MAAM,GAAG,gBAAgB,CAAC,MAAM,CAAC,CAAC;IACxC,OAAO,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;AACxE,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,cAAc,CAAC,IAAY;IAC1C,OAAO,IAAI,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;AAC3C,CAAC;AAED,iFAAiF;AAEjF;;;;;;;;GAQG;AACH,MAAM,CAAC,MAAM,uBAAuB,GAAG;IACtC,aAAa;IACb,aAAa;IACb,MAAM;CACsC,CAAC;AAa9C
|
|
1
|
+
{"version":3,"file":"work-layout.js","sourceRoot":"","sources":["../src/work-layout.ts"],"names":[],"mappings":"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"}
|
package/dist/workspace.d.ts
CHANGED
|
@@ -113,7 +113,7 @@ export interface CreateJobOptions {
|
|
|
113
113
|
/** The work slug being processed (→ branch `work/<type>-<slug>` + work-id). */
|
|
114
114
|
slug: string;
|
|
115
115
|
/**
|
|
116
|
-
* The item TYPE — `'task'` (build) or `'
|
|
116
|
+
* The item TYPE — `'task'` (build) or `'spec'` (tasking) — namespacing the
|
|
117
117
|
* work branch via {@link workBranchRef} so a same-slug task and spec never
|
|
118
118
|
* collide. Defaults to `'task'`.
|
|
119
119
|
*/
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "dorfl",
|
|
3
|
-
"version": "0.1
|
|
3
|
+
"version": "0.2.1",
|
|
4
4
|
"repository": {
|
|
5
5
|
"type": "git",
|
|
6
6
|
"url": "git+https://github.com/wighawag/dorfl.git",
|
|
@@ -39,7 +39,7 @@
|
|
|
39
39
|
"vitest": "^4.0.18"
|
|
40
40
|
},
|
|
41
41
|
"scripts": {
|
|
42
|
-
"build": "tsc && node scripts/vendor-protocol.mjs",
|
|
42
|
+
"build": "tsc && node scripts/vendor-protocol.mjs && node scripts/vendor-skills.mjs",
|
|
43
43
|
"dev": "as-soon -w src pnpm build",
|
|
44
44
|
"cli": "tsx src/cli.ts",
|
|
45
45
|
"test": "vitest run",
|
package/src/advance-drivers.ts
CHANGED
|
@@ -10,6 +10,7 @@ import {
|
|
|
10
10
|
TREELESS_RUNGS,
|
|
11
11
|
} from './advance-treeless-publish.js';
|
|
12
12
|
import {scanRepoPaths} from './scan.js';
|
|
13
|
+
import {heldTaskSlugs} from './item-lock.js';
|
|
13
14
|
import {ledgerRead, type LedgerReadStrategy} from './ledger-read.js';
|
|
14
15
|
import {
|
|
15
16
|
selectPrioritised,
|
|
@@ -168,6 +169,15 @@ export async function performAdvanceAuto(
|
|
|
168
169
|
const cwd = options.cwd;
|
|
169
170
|
const count = options.count ?? 1;
|
|
170
171
|
|
|
172
|
+
// Held-slug subtraction (task
|
|
173
|
+
// `in-place-scan-subtracts-held-locked-slugs-from-propose-matrix`): read the
|
|
174
|
+
// coordination arbiter's held task-lock refs and pass them into `scanRepoPaths`
|
|
175
|
+
// so a held item (`active`/`stuck`) is not selected into the build pool NOR the
|
|
176
|
+
// lifecycle surface/apply pools — the same subtraction the CI enumerate path
|
|
177
|
+
// runs. `heldTaskSlugs` is the GRACEFUL variant (empty set on any read fault):
|
|
178
|
+
// the follow-on claim CAS is still the load-bearing safety net locally.
|
|
179
|
+
const heldSlugs = await heldTaskSlugs(cwd, options.arbiter);
|
|
180
|
+
|
|
171
181
|
// Pool 1 — eligible TASKS via the EXISTING scan/select path. `scoreItems`
|
|
172
182
|
// inside `scanRepoPaths` gates eligibility on `autoBuild` (the build gate), so
|
|
173
183
|
// with `autoBuild` off NO task is selected — the build rung is never reached
|
|
@@ -175,7 +185,7 @@ export async function performAdvanceAuto(
|
|
|
175
185
|
const report = scanRepoPaths(
|
|
176
186
|
[cwd],
|
|
177
187
|
options.config,
|
|
178
|
-
|
|
188
|
+
heldSlugs,
|
|
179
189
|
options.override,
|
|
180
190
|
);
|
|
181
191
|
|
|
@@ -206,6 +216,9 @@ export async function performAdvanceAuto(
|
|
|
206
216
|
repoPath: cwd,
|
|
207
217
|
read,
|
|
208
218
|
gates: options.lifecycleGates,
|
|
219
|
+
// Subtract held task slugs from the triage/surface/apply candidate inputs,
|
|
220
|
+
// symmetric to Pool 1's `scoreItems` subtraction above.
|
|
221
|
+
heldSlugs,
|
|
209
222
|
});
|
|
210
223
|
|
|
211
224
|
// Order across the (up to) FIVE pools per the resolved `selectionOrder` (apply
|
|
@@ -251,7 +264,7 @@ export async function performAdvanceArgs(
|
|
|
251
264
|
repoPath: options.cwd,
|
|
252
265
|
slug: arg,
|
|
253
266
|
// The arg is passed VERBATIM to the tick (it does its own slug resolution
|
|
254
|
-
// across task/
|
|
267
|
+
// across task/spec/observation); the namespace is irrelevant for explicit args.
|
|
255
268
|
namespace: 'task' as const,
|
|
256
269
|
}));
|
|
257
270
|
return runSelectedInSequence(selected, options, run, {verbatimArg: true});
|
|
@@ -321,7 +334,7 @@ async function runSelectedInSequence(
|
|
|
321
334
|
* runner — the easy-to-miss site).
|
|
322
335
|
*
|
|
323
336
|
* The promote-apply edge mirrors the existing drivers without a special case: an
|
|
324
|
-
* `apply` rung whose agentic verdict mints an artifact (`mint-task`/`mint-
|
|
337
|
+
* `apply` rung whose agentic verdict mints an artifact (`mint-task`/`mint-spec`)
|
|
325
338
|
* runs `promoteObservation`'s OWN arbiter CAS and commits NOTHING tree-less, so the
|
|
326
339
|
* ff-push here is a harmless no-op (a `HEAD` with nothing new) — it does NOT
|
|
327
340
|
* double-publish nor clobber the promote CAS.
|
|
@@ -284,8 +284,19 @@ jobs:
|
|
|
284
284
|
outputs:
|
|
285
285
|
items: \${{ steps.scan.outputs.items }}
|
|
286
286
|
any: \${{ steps.scan.outputs.any }}
|
|
287
|
+
# Dynamic GitHub-backstop cap (spec
|
|
288
|
+
# \`graceful-pre-timeout-wip-checkpoint\`): the agent-leg jobs
|
|
289
|
+
# (advance-propose / advance-merge) read this as their
|
|
290
|
+
# \`timeout-minutes\` — replacing the retired static
|
|
291
|
+
# \`legTimeoutMinutes\`. Computed at run time from the committed
|
|
292
|
+
# \`dorfl.json\` (via \`dorfl config --json\`) as
|
|
293
|
+
# \`agentDeadlineMinutes + checkpointHeadroomMinutes\`, so an edit to
|
|
294
|
+
# \`dorfl.json\` reflects EVERYWHERE (the internal deadline the legs
|
|
295
|
+
# honour AND this GitHub cap) on the NEXT tick — no \`install-ci\`
|
|
296
|
+
# re-run, no baked-in YAML number.
|
|
297
|
+
githubTimeout: \${{ steps.timeout.outputs.githubTimeout }}
|
|
287
298
|
steps:
|
|
288
|
-
- uses: actions/checkout@
|
|
299
|
+
- uses: actions/checkout@v5
|
|
289
300
|
with:
|
|
290
301
|
fetch-depth: 0
|
|
291
302
|
- uses: ./.github/actions/dorfl-setup
|
|
@@ -329,6 +340,22 @@ jobs:
|
|
|
329
340
|
else
|
|
330
341
|
echo "any=false" >> "$GITHUB_OUTPUT"
|
|
331
342
|
fi
|
|
343
|
+
- id: timeout
|
|
344
|
+
# Dynamic GitHub-backstop cap (spec
|
|
345
|
+
# \`graceful-pre-timeout-wip-checkpoint\` — step 5): read the committed
|
|
346
|
+
# \`dorfl.json\` via \`dorfl config --json\` (in-place, so the resolution
|
|
347
|
+
# chain reads THIS repo's file exactly like \`scan --here\`), and emit
|
|
348
|
+
# \`githubTimeout = agentDeadlineMinutes + checkpointHeadroomMinutes\` as
|
|
349
|
+
# a job OUTPUT the agent-leg jobs consume via
|
|
350
|
+
# \`timeout-minutes: \${{ needs.enumerate.outputs.githubTimeout }}\`. So
|
|
351
|
+
# the SAME committed config drives BOTH the legs' internal deadline AND
|
|
352
|
+
# this GitHub cap — edit + commit, next tick uses it for both, no
|
|
353
|
+
# \`install-ci\` re-run, no baked YAML number. \`dorfl.json\` is the
|
|
354
|
+
# single source read at run time by BOTH consumers.
|
|
355
|
+
run: |
|
|
356
|
+
cap="$(dorfl config --json \\
|
|
357
|
+
| jq '.agentDeadlineMinutes + .checkpointHeadroomMinutes')"
|
|
358
|
+
echo "githubTimeout=\${cap}" >> "$GITHUB_OUTPUT"
|
|
332
359
|
|
|
333
360
|
# ── PROPOSE: a MATRIX of independent jobs (one PR per item) ──────────────────
|
|
334
361
|
# True parallelism — each item is an independent PR, so a matrix is the right
|
|
@@ -340,6 +367,20 @@ jobs:
|
|
|
340
367
|
needs: enumerate
|
|
341
368
|
if: \${{ (github.event.inputs.integrationMode || 'propose') == 'propose' && needs.enumerate.outputs.any == 'true' }}
|
|
342
369
|
runs-on: ubuntu-latest
|
|
370
|
+
# Per-leg wall-clock cap: the DYNAMIC GitHub backstop the enumerate job
|
|
371
|
+
# emits (spec \`graceful-pre-timeout-wip-checkpoint\`), computed at run
|
|
372
|
+
# time from the committed \`dorfl.json\` as
|
|
373
|
+
# \`agentDeadlineMinutes + checkpointHeadroomMinutes\`. It is a STRICTLY
|
|
374
|
+
# LARGER backstop than the dorfl-internal deadline the leg self-stops at
|
|
375
|
+
# (which SAVES its WIP + auto-continues on the next tick), so the GitHub
|
|
376
|
+
# SIGKILL only fires if the graceful save itself wedges. Editing
|
|
377
|
+
# \`dorfl.json\` flips BOTH the internal deadline AND this cap on the
|
|
378
|
+
# next tick — no \`install-ci\` re-run, no baked-in YAML number.
|
|
379
|
+
# A job output is always a STRING; \`timeout-minutes\` needs an INTEGER, so
|
|
380
|
+
# coerce it with \`fromJson(...)\` (the same pattern the \`item\` matrix uses).
|
|
381
|
+
# A raw \`\${{ ... }}\` substitution makes GitHub reject it ("Unexpected
|
|
382
|
+
# value '45'").
|
|
383
|
+
timeout-minutes: \${{ fromJson(needs.enumerate.outputs.githubTimeout) }}
|
|
343
384
|
strategy:
|
|
344
385
|
# Independent PRs: one failing item must NOT cancel the others.
|
|
345
386
|
fail-fast: false
|
|
@@ -352,7 +393,7 @@ jobs:
|
|
|
352
393
|
matrix:
|
|
353
394
|
item: \${{ fromJson(needs.enumerate.outputs.items) }}
|
|
354
395
|
steps:
|
|
355
|
-
- uses: actions/checkout@
|
|
396
|
+
- uses: actions/checkout@v5
|
|
356
397
|
with:
|
|
357
398
|
fetch-depth: 0
|
|
358
399
|
- uses: ./.github/actions/dorfl-setup${setupWith}
|
|
@@ -403,6 +444,10 @@ jobs:
|
|
|
403
444
|
needs: enumerate
|
|
404
445
|
if: \${{ (github.event.inputs.integrationMode || 'propose') == 'merge' && needs.enumerate.outputs.any == 'true' }}
|
|
405
446
|
runs-on: ubuntu-latest
|
|
447
|
+
# Per-leg wall-clock cap: the DYNAMIC GitHub backstop the enumerate job
|
|
448
|
+
# emits (see advance-propose for the rationale). \`fromJson(...)\` coerces the
|
|
449
|
+
# string job output to the INTEGER \`timeout-minutes\` requires.
|
|
450
|
+
timeout-minutes: \${{ fromJson(needs.enumerate.outputs.githubTimeout) }}
|
|
406
451
|
strategy:
|
|
407
452
|
# Independent landings: one failing item must NOT cancel the others; a
|
|
408
453
|
# loser of the CAS race re-rebases + re-gates + retries.
|
|
@@ -413,7 +458,7 @@ jobs:
|
|
|
413
458
|
matrix:
|
|
414
459
|
item: \${{ fromJson(needs.enumerate.outputs.items) }}
|
|
415
460
|
steps:
|
|
416
|
-
- uses: actions/checkout@
|
|
461
|
+
- uses: actions/checkout@v5
|
|
417
462
|
with:
|
|
418
463
|
fetch-depth: 0
|
|
419
464
|
- uses: ./.github/actions/dorfl-setup${setupWith}
|
|
@@ -463,7 +508,7 @@ jobs:
|
|
|
463
508
|
if: \${{ (github.event.inputs.sweepMergedBranches || 'true') == 'true' }}
|
|
464
509
|
runs-on: ubuntu-latest
|
|
465
510
|
steps:
|
|
466
|
-
- uses: actions/checkout@
|
|
511
|
+
- uses: actions/checkout@v5
|
|
467
512
|
with:
|
|
468
513
|
fetch-depth: 0
|
|
469
514
|
- uses: ./.github/actions/dorfl-setup
|
|
@@ -781,6 +826,46 @@ export function validateAdvanceLifecycleWorkflow(
|
|
|
781
826
|
'not only in merge mode ' +
|
|
782
827
|
'(`ci-propose-matrix-enumerates-lifecycle-items`).');
|
|
783
828
|
|
|
829
|
+
// --- DYNAMIC GitHub backstop (spec `graceful-pre-timeout-wip-checkpoint`) ---
|
|
830
|
+
// The agent-leg jobs (advance-propose / advance-merge) must consume the
|
|
831
|
+
// enumerate job's dynamic `githubTimeout` output, NOT a baked-in number. This
|
|
832
|
+
// closes the drift where the static `legTimeoutMinutes` render only refreshed
|
|
833
|
+
// on `install-ci` re-run; now the same committed `dorfl.json` drives BOTH the
|
|
834
|
+
// internal deadline AND the GitHub cap on every tick.
|
|
835
|
+
require('enumerate-emits-github-timeout-output', /enumerate:[\s\S]*?outputs:[\s\S]*?githubTimeout:/.test(
|
|
836
|
+
text,
|
|
837
|
+
), 'the `enumerate` job must declare a `githubTimeout` job OUTPUT (computed ' +
|
|
838
|
+
'from the committed `dorfl.json` as ' +
|
|
839
|
+
'`agentDeadlineMinutes + checkpointHeadroomMinutes`).');
|
|
840
|
+
require('enumerate-reads-dorfl-config-json', /dorfl config --json/.test(
|
|
841
|
+
text,
|
|
842
|
+
), 'the `enumerate` job must read the committed config via ' +
|
|
843
|
+
'`dorfl config --json` at run time (so an edit to `dorfl.json` ' +
|
|
844
|
+
'reflects on the next tick without an `install-ci` re-run).');
|
|
845
|
+
require('enumerate-computes-deadline-plus-headroom', /agentDeadlineMinutes \+ checkpointHeadroomMinutes/.test(
|
|
846
|
+
text,
|
|
847
|
+
), 'the `enumerate` job must compute `githubTimeout` as ' +
|
|
848
|
+
'`agentDeadlineMinutes + checkpointHeadroomMinutes` (the backstop is ' +
|
|
849
|
+
'DELIBERATELY head-room above the internal deadline).');
|
|
850
|
+
require('propose-uses-dynamic-github-timeout', /advance-propose:[\s\S]*?timeout-minutes:\s*\$\{\{\s*fromJson\(needs\.enumerate\.outputs\.githubTimeout\)\s*\}\}/.test(
|
|
851
|
+
text,
|
|
852
|
+
), 'the `advance-propose` job must set `timeout-minutes: ${{ ' +
|
|
853
|
+
'fromJson(needs.enumerate.outputs.githubTimeout) }}` (the DYNAMIC GitHub ' +
|
|
854
|
+
'backstop, fromJson-coerced to an integer, not a baked-in number).');
|
|
855
|
+
require('merge-uses-dynamic-github-timeout', /advance-merge:[\s\S]*?timeout-minutes:\s*\$\{\{\s*fromJson\(needs\.enumerate\.outputs\.githubTimeout\)\s*\}\}/.test(
|
|
856
|
+
text,
|
|
857
|
+
), 'the `advance-merge` job must set `timeout-minutes: ${{ ' +
|
|
858
|
+
'fromJson(needs.enumerate.outputs.githubTimeout) }}` (the DYNAMIC GitHub ' +
|
|
859
|
+
'backstop, fromJson-coerced to an integer).');
|
|
860
|
+
// A baked static `timeout-minutes: <number>` on an agent-leg job is the
|
|
861
|
+
// retired `legTimeoutMinutes` render — forbid it so a future edit cannot
|
|
862
|
+
// silently re-introduce the drift the dynamic backstop is fixing.
|
|
863
|
+
require('no-static-agent-leg-timeout', !/(?:advance-propose|advance-merge):[\s\S]*?timeout-minutes:\s*\d/.test(
|
|
864
|
+
text,
|
|
865
|
+
), 'no agent-leg job may set a baked-in numeric `timeout-minutes` ' +
|
|
866
|
+
'(the retired `legTimeoutMinutes` render); the GitHub backstop is ' +
|
|
867
|
+
'DYNAMIC (read from `dorfl.json` at run time).');
|
|
868
|
+
|
|
784
869
|
// --- Wires the SHARED composite setup action -------------------------------
|
|
785
870
|
require('uses-shared-setup-action', /uses:\s*\.\/\.github\/actions\/dorfl-setup\b/.test(
|
|
786
871
|
text,
|
|
@@ -92,6 +92,31 @@ export interface PushTreelessResultParams {
|
|
|
92
92
|
*/
|
|
93
93
|
export const DEFAULT_TREELESS_JITTER_MS = 25;
|
|
94
94
|
|
|
95
|
+
/**
|
|
96
|
+
* Stderr signatures of a PERMANENT push rejection that NO re-fetch+rebase can
|
|
97
|
+
* ever cure, so the retry loop MUST stop at once instead of burning the whole
|
|
98
|
+
* liveness ceiling ({@link PushTreelessResultParams.retries}, `1000` in prod) on
|
|
99
|
+
* identical round-trips.
|
|
100
|
+
*
|
|
101
|
+
* The tree-less rungs publish by a DIRECT `git push HEAD:main` of a freshly-made
|
|
102
|
+
* commit (see the module header). If the arbiter's `main` hard-requires a status
|
|
103
|
+
* check on EVERY push (GitHub classic branch protection with a non-empty
|
|
104
|
+
* `required_status_checks.contexts`, or a `pre-receive`/ruleset hook), that fresh
|
|
105
|
+
* commit is rejected with `GH006 ... Required status check "..." is expected` /
|
|
106
|
+
* `protected branch hook declined` / `pre-receive hook declined`. A rebase onto
|
|
107
|
+
* the newest `main` does NOT change the fact that the pushed commit has no green
|
|
108
|
+
* check, so retrying is pointless: the push is rejected identically every time.
|
|
109
|
+
*
|
|
110
|
+
* This is DISTINCT from a fast-forward RACE (`non-fast-forward` / `fetch first` /
|
|
111
|
+
* `stale info`), which a rebase DOES cure — and it must win OVER the broad
|
|
112
|
+
* `rejected` contention alternation, because a protected-branch rejection
|
|
113
|
+
* literally contains the word `rejected` (`! [remote rejected] HEAD -> main
|
|
114
|
+
* (protected branch hook declined)`) and would otherwise be mis-read as a race
|
|
115
|
+
* and retried uselessly. See the observation trail for the live incident.
|
|
116
|
+
*/
|
|
117
|
+
export const PERMANENT_PUSH_REJECTION =
|
|
118
|
+
/GH006|protected branch|hook declined|required status check|cannot force-update the branch/i;
|
|
119
|
+
|
|
95
120
|
function sleepMs(ms: number): Promise<void> {
|
|
96
121
|
return new Promise((resolve) => setTimeout(resolve, ms));
|
|
97
122
|
}
|
|
@@ -118,6 +143,26 @@ export async function pushTreelessResult(
|
|
|
118
143
|
if (push.status === 0) {
|
|
119
144
|
return;
|
|
120
145
|
}
|
|
146
|
+
// A PERMANENT rejection (branch protection / required status check / a
|
|
147
|
+
// pre-receive or ruleset hook) can NEVER be cured by a rebase+re-push — the
|
|
148
|
+
// fresh commit still carries no green check — so stop AT ONCE with an honest,
|
|
149
|
+
// distinct note instead of exhausting the liveness ceiling on identical
|
|
150
|
+
// round-trips. This MUST be checked before `contended`, because a protected-
|
|
151
|
+
// branch rejection contains the word `rejected` and would otherwise be
|
|
152
|
+
// mistaken for a fast-forward race and retried uselessly (see the incident
|
|
153
|
+
// observation).
|
|
154
|
+
if (PERMANENT_PUSH_REJECTION.test(push.stderr)) {
|
|
155
|
+
note(
|
|
156
|
+
`advance: the arbiter's \`main\` rejected the direct tree-less push ` +
|
|
157
|
+
`(${push.stderr.trim() || 'protected branch'}); a re-fetch+rebase cannot ` +
|
|
158
|
+
`cure a required-status-check / protected-branch rule on a direct push, so ` +
|
|
159
|
+
`the work is saved in the working clone for the next pass / a human. ` +
|
|
160
|
+
`Reconcile \`main\`'s protection so direct tree-less ledger writes are ` +
|
|
161
|
+
`allowed (the required check belongs in a ruleset with ` +
|
|
162
|
+
`\`do_not_enforce_on_create\`, not the classic on-every-push gate).`,
|
|
163
|
+
);
|
|
164
|
+
return;
|
|
165
|
+
}
|
|
121
166
|
const contended = /non-fast-forward|rejected|fetch first|stale info/i.test(
|
|
122
167
|
push.stderr,
|
|
123
168
|
);
|