@mjasnikovs/pi-task 0.38.29 → 0.38.31
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/config/config.d.ts +70 -70
- package/dist/config/config.js +26 -35
- package/dist/config/extension-list.d.ts +6 -5
- package/dist/config/extension-list.js +3 -2
- package/dist/config/reasoning-args.d.ts +9 -7
- package/dist/config/reasoning-args.js +12 -10
- package/dist/config/reasoning.d.ts +44 -105
- package/dist/config/reasoning.js +27 -704
- package/dist/config/register.d.ts +34 -48
- package/dist/config/register.js +41 -51
- package/dist/config/tool-list.d.ts +16 -16
- package/dist/config/tool-list.js +1 -1
- package/dist/index.js +2 -0
- package/dist/remote/bridge.d.ts +19 -10
- package/dist/remote/bridge.js +3 -2
- package/dist/remote/broadcast.js +3 -1
- package/dist/remote/events.js +12 -11
- package/dist/remote/history.d.ts +1 -1
- package/dist/remote/protocol.d.ts +6 -3
- package/dist/remote/protocol.js +2 -1
- package/dist/remote/push.d.ts +16 -16
- package/dist/remote/push.js +27 -27
- package/dist/remote/register.d.ts +3 -3
- package/dist/remote/register.js +17 -19
- package/dist/remote/server.d.ts +9 -8
- package/dist/remote/server.js +15 -14
- package/dist/remote/session-state.d.ts +5 -4
- package/dist/remote/session-state.js +8 -5
- package/dist/remote/sw.d.ts +7 -6
- package/dist/remote/sw.js +7 -6
- package/dist/remote/tailscale.d.ts +4 -2
- package/dist/remote/tailscale.js +4 -2
- package/dist/remote/ui-highlight.js +6 -5
- package/dist/remote/ui-render.js +4 -4
- package/dist/remote/ui-script.js +24 -24
- package/dist/remote/ui-styles.d.ts +1 -1
- package/dist/remote/ui-styles.js +10 -13
- package/dist/remote/ui-tools.js +9 -6
- package/dist/shared/child-extensions.d.ts +29 -17
- package/dist/shared/child-extensions.js +29 -17
- package/dist/shared/child-output.d.ts +30 -24
- package/dist/shared/child-output.js +25 -17
- package/dist/shared/child-process.d.ts +47 -40
- package/dist/shared/child-process.js +50 -59
- package/dist/shared/command-watchdog.d.ts +85 -16
- package/dist/shared/command-watchdog.js +115 -21
- package/dist/shared/fs-text.d.ts +16 -10
- package/dist/shared/fs-text.js +16 -10
- package/dist/shared/git-runner.d.ts +25 -25
- package/dist/shared/git-runner.js +25 -25
- package/dist/shared/leaked-tool-call.d.ts +17 -11
- package/dist/shared/leaked-tool-call.js +23 -15
- package/dist/shared/model-endpoint.d.ts +29 -16
- package/dist/shared/model-endpoint.js +33 -21
- package/dist/shared/pi-invocation.d.ts +7 -4
- package/dist/shared/pi-invocation.js +12 -7
- package/dist/shared/pkg-version.d.ts +13 -5
- package/dist/shared/pkg-version.js +13 -5
- package/dist/shared/reasoning-capability.d.ts +35 -24
- package/dist/shared/reasoning-capability.js +35 -24
- package/dist/shared/stream-watchdog.d.ts +60 -44
- package/dist/shared/stream-watchdog.js +62 -45
- package/dist/task/accept-debt.d.ts +41 -43
- package/dist/task/accept-debt.js +73 -65
- package/dist/task/api-synthesis.d.ts +24 -21
- package/dist/task/api-synthesis.js +32 -26
- package/dist/task/apis-contract.d.ts +32 -64
- package/dist/task/apis-contract.js +32 -64
- package/dist/task/artifact-closure.d.ts +27 -13
- package/dist/task/artifact-closure.js +95 -67
- package/dist/task/auto-commit.d.ts +46 -35
- package/dist/task/auto-commit.js +51 -38
- package/dist/task/auto-io.d.ts +45 -25
- package/dist/task/auto-io.js +57 -29
- package/dist/task/auto-orchestrator.d.ts +26 -24
- package/dist/task/auto-orchestrator.js +192 -165
- package/dist/task/auto-prompts.d.ts +36 -24
- package/dist/task/auto-prompts.js +40 -26
- package/dist/task/autofix-ledger.d.ts +27 -25
- package/dist/task/autofix-ledger.js +29 -26
- package/dist/task/batch-test-task.d.ts +20 -12
- package/dist/task/batch-test-task.js +67 -60
- package/dist/task/boot-probe.d.ts +60 -44
- package/dist/task/boot-probe.js +91 -72
- package/dist/task/cancel-input.d.ts +30 -16
- package/dist/task/cancel-input.js +20 -11
- package/dist/task/cancel-points.d.ts +27 -20
- package/dist/task/cancel-points.js +30 -22
- package/dist/task/child-runner.d.ts +124 -55
- package/dist/task/child-runner.js +298 -90
- package/dist/task/child-status.d.ts +23 -16
- package/dist/task/child-status.js +23 -16
- package/dist/task/clamp-output.js +12 -5
- package/dist/task/command-run.d.ts +31 -28
- package/dist/task/command-run.js +44 -35
- package/dist/task/command-shrink.d.ts +25 -18
- package/dist/task/command-shrink.js +37 -31
- package/dist/task/command-watchdog.d.ts +9 -6
- package/dist/task/command-watchdog.js +21 -15
- package/dist/task/context-attribution.d.ts +34 -26
- package/dist/task/context-attribution.js +34 -26
- package/dist/task/context-silence.d.ts +39 -29
- package/dist/task/context-silence.js +35 -25
- package/dist/task/context-usage.d.ts +16 -9
- package/dist/task/context-usage.js +16 -9
- package/dist/task/contracts.d.ts +8 -4
- package/dist/task/contracts.js +25 -17
- package/dist/task/coverage-loop.d.ts +22 -18
- package/dist/task/coverage-loop.js +35 -30
- package/dist/task/critique-probes.d.ts +13 -14
- package/dist/task/critique-probes.js +50 -39
- package/dist/task/debug-log.d.ts +13 -5
- package/dist/task/debug-log.js +32 -20
- package/dist/task/decompose-fidelity.d.ts +11 -9
- package/dist/task/decompose-fidelity.js +38 -33
- package/dist/task/decompose-granularity.d.ts +41 -38
- package/dist/task/decompose-granularity.js +41 -38
- package/dist/task/deep-render-check.d.ts +22 -14
- package/dist/task/deep-render-check.js +40 -31
- package/dist/task/dropped-input.d.ts +12 -7
- package/dist/task/dropped-input.js +5 -2
- package/dist/task/enforce-attribution.d.ts +38 -47
- package/dist/task/enforce-attribution.js +46 -52
- package/dist/task/enforce-guidelines.d.ts +31 -20
- package/dist/task/enforce-guidelines.js +32 -21
- package/dist/task/enrichment.d.ts +7 -2
- package/dist/task/enrichment.js +26 -14
- package/dist/task/env-notes.d.ts +16 -7
- package/dist/task/env-notes.js +48 -31
- package/dist/task/env-template-closure.d.ts +4 -4
- package/dist/task/env-template-closure.js +42 -34
- package/dist/task/external-context.d.ts +28 -21
- package/dist/task/external-context.js +17 -12
- package/dist/task/failure-classifier.d.ts +4 -5
- package/dist/task/failure-classifier.js +30 -8
- package/dist/task/file-inventory.d.ts +15 -11
- package/dist/task/file-inventory.js +25 -22
- package/dist/task/final-gate-fix.d.ts +74 -86
- package/dist/task/final-gate-fix.js +97 -116
- package/dist/task/final-gate-progress.d.ts +29 -46
- package/dist/task/final-gate-progress.js +40 -51
- package/dist/task/final-gate.d.ts +64 -97
- package/dist/task/final-gate.js +192 -199
- package/dist/task/fix-child.d.ts +21 -27
- package/dist/task/fix-child.js +21 -27
- package/dist/task/foreign-path.d.ts +6 -5
- package/dist/task/foreign-path.js +0 -0
- package/dist/task/frozen-conflict.d.ts +9 -10
- package/dist/task/frozen-conflict.js +61 -64
- package/dist/task/frozen-path-guard.d.ts +35 -14
- package/dist/task/frozen-path-guard.js +56 -39
- package/dist/task/gate-child.d.ts +27 -28
- package/dist/task/gate-child.js +36 -35
- package/dist/task/gate-deps.d.ts +34 -27
- package/dist/task/gate-deps.js +169 -159
- package/dist/task/gate-tally.d.ts +77 -80
- package/dist/task/gate-tally.js +65 -68
- package/dist/task/git-state-guard.d.ts +15 -11
- package/dist/task/git-state-guard.js +76 -66
- package/dist/task/impl-widget.d.ts +25 -16
- package/dist/task/impl-widget.js +27 -17
- package/dist/task/implementation-guards.d.ts +26 -0
- package/dist/task/implementation-guards.js +177 -0
- package/dist/task/implementation-thinking.d.ts +33 -31
- package/dist/task/implementation-thinking.js +5 -6
- package/dist/task/implementation-turn.d.ts +39 -31
- package/dist/task/implementation-turn.js +41 -28
- package/dist/task/inline-markdown.d.ts +20 -7
- package/dist/task/inline-markdown.js +15 -6
- package/dist/task/launch-config-gap.js +25 -39
- package/dist/task/launch-contract.d.ts +18 -21
- package/dist/task/launch-contract.js +28 -30
- package/dist/task/launch-manifest.d.ts +6 -2
- package/dist/task/launch-manifest.js +35 -34
- package/dist/task/ledger.js +16 -14
- package/dist/task/lint-fix.d.ts +6 -8
- package/dist/task/lint-fix.js +67 -69
- package/dist/task/loop-detector.d.ts +27 -8
- package/dist/task/loop-detector.js +38 -14
- package/dist/task/mid-run-input.d.ts +17 -15
- package/dist/task/mid-run-input.js +17 -15
- package/dist/task/orchestrator.d.ts +24 -28
- package/dist/task/orchestrator.js +89 -66
- package/dist/task/orientation.d.ts +18 -23
- package/dist/task/orientation.js +24 -31
- package/dist/task/owned-freeze-conflict.d.ts +21 -20
- package/dist/task/owned-freeze-conflict.js +52 -85
- package/dist/task/owned-freeze-reassign.d.ts +40 -60
- package/dist/task/owned-freeze-reassign.js +41 -61
- package/dist/task/parsers.d.ts +4 -2
- package/dist/task/parsers.js +4 -4
- package/dist/task/phases.d.ts +41 -48
- package/dist/task/phases.js +196 -252
- package/dist/task/plan-io.d.ts +6 -7
- package/dist/task/plan-io.js +6 -7
- package/dist/task/plan-orchestrator.d.ts +10 -8
- package/dist/task/plan-orchestrator.js +14 -10
- package/dist/task/plan-prompts.d.ts +6 -5
- package/dist/task/plan-prompts.js +6 -5
- package/dist/task/plan-readonly.d.ts +4 -5
- package/dist/task/plan-readonly.js +4 -5
- package/dist/task/plan-rounds.d.ts +17 -29
- package/dist/task/plan-rounds.js +21 -34
- package/dist/task/plan-session.d.ts +58 -72
- package/dist/task/plan-session.js +61 -83
- package/dist/task/probe-gaming.d.ts +28 -27
- package/dist/task/probe-gaming.js +0 -0
- package/dist/task/prohibition-probe.d.ts +14 -16
- package/dist/task/prompts.d.ts +3 -4
- package/dist/task/prompts.js +17 -26
- package/dist/task/qa-transcript.d.ts +15 -22
- package/dist/task/qa-transcript.js +15 -21
- package/dist/task/question-box.d.ts +17 -13
- package/dist/task/question-box.js +19 -15
- package/dist/task/question-dedup.d.ts +6 -7
- package/dist/task/question-dedup.js +13 -14
- package/dist/task/question-dialog.d.ts +22 -32
- package/dist/task/question-dialog.js +22 -32
- package/dist/task/question-source.d.ts +18 -44
- package/dist/task/question-source.js +22 -51
- package/dist/task/refuted-constraint.d.ts +11 -31
- package/dist/task/refuted-constraint.js +27 -51
- package/dist/task/regenerable-artifacts.d.ts +12 -31
- package/dist/task/regenerable-artifacts.js +12 -31
- package/dist/task/render-check.d.ts +11 -22
- package/dist/task/render-check.js +33 -46
- package/dist/task/repo-health-check.d.ts +10 -14
- package/dist/task/repo-health-check.js +17 -23
- package/dist/task/requirements.d.ts +38 -71
- package/dist/task/requirements.js +78 -126
- package/dist/task/research-fanout-budget.d.ts +51 -88
- package/dist/task/research-fanout-budget.js +51 -88
- package/dist/task/research-worker.d.ts +29 -39
- package/dist/task/research-worker.js +37 -61
- package/dist/task/resume-gap.d.ts +14 -15
- package/dist/task/root-cause-repair.d.ts +9 -9
- package/dist/task/root-cause-repair.js +28 -40
- package/dist/task/run-bracket.d.ts +10 -13
- package/dist/task/run-end.d.ts +12 -22
- package/dist/task/run-end.js +8 -16
- package/dist/task/run-final-gate.d.ts +19 -21
- package/dist/task/run-final-gate.js +62 -80
- package/dist/task/runner-globs.d.ts +12 -13
- package/dist/task/runner-globs.js +12 -13
- package/dist/task/runner-resolve.d.ts +9 -9
- package/dist/task/runner-resolve.js +22 -23
- package/dist/task/script-escape.d.ts +10 -12
- package/dist/task/script-escape.js +13 -14
- package/dist/task/serve-entry.d.ts +1 -1
- package/dist/task/serve-entry.js +22 -25
- package/dist/task/service-blocks.js +4 -2
- package/dist/task/shipped-source.d.ts +11 -29
- package/dist/task/shipped-source.js +11 -29
- package/dist/task/skip-escape.js +10 -14
- package/dist/task/spec-urls.d.ts +26 -65
- package/dist/task/spec-urls.js +26 -65
- package/dist/task/spec-validation.d.ts +17 -20
- package/dist/task/spec-validation.js +17 -20
- package/dist/task/stall-detector.d.ts +23 -30
- package/dist/task/stall-detector.js +23 -30
- package/dist/task/stream-watchdog.d.ts +14 -12
- package/dist/task/stream-watchdog.js +14 -12
- package/dist/task/substitution-probe.d.ts +17 -20
- package/dist/task/substitution-probe.js +17 -20
- package/dist/task/task-gates.d.ts +36 -41
- package/dist/task/task-gates.js +95 -106
- package/dist/task/task-io.d.ts +4 -4
- package/dist/task/task-io.js +4 -4
- package/dist/task/task-parsers.js +4 -3
- package/dist/task/task-provenance.d.ts +2 -2
- package/dist/task/task-provenance.js +11 -13
- package/dist/task/task-types.d.ts +4 -3
- package/dist/task/terminal-outcome.d.ts +14 -16
- package/dist/task/terminal-outcome.js +12 -14
- package/dist/task/test-assembly.d.ts +13 -20
- package/dist/task/test-assembly.js +13 -20
- package/dist/task/timings.d.ts +5 -3
- package/dist/task/timings.js +5 -3
- package/dist/task/title-label.d.ts +9 -4
- package/dist/task/title-label.js +9 -4
- package/dist/task/type-only-answer.d.ts +44 -52
- package/dist/task/type-only-answer.js +44 -52
- package/dist/task/unfailable-command.d.ts +18 -24
- package/dist/task/unfailable-command.js +21 -27
- package/dist/task/unknown-routing.d.ts +10 -4
- package/dist/task/unknown-routing.js +10 -4
- package/dist/task/user-directives.d.ts +5 -8
- package/dist/task/user-directives.js +5 -8
- package/dist/task/verify-quality.d.ts +18 -22
- package/dist/task/verify-quality.js +45 -46
- package/dist/task/verify-reconcile.d.ts +15 -10
- package/dist/task/verify-reconcile.js +45 -43
- package/dist/task/verify-resolution.d.ts +24 -20
- package/dist/task/verify-resolution.js +51 -50
- package/dist/task/verify-work.d.ts +59 -66
- package/dist/task/verify-work.js +101 -138
- package/dist/task/widget.d.ts +15 -14
- package/dist/task/widget.js +22 -17
- package/dist/task/wiring-claims.d.ts +25 -32
- package/dist/task/wiring-claims.js +30 -35
- package/dist/task/write-guard.d.ts +39 -39
- package/dist/task/write-guard.js +48 -51
- package/dist/task/yolo.d.ts +34 -30
- package/dist/task/yolo.js +42 -37
- package/dist/workers/abstention.d.ts +21 -41
- package/dist/workers/abstention.js +27 -48
- package/dist/workers/brave-search.d.ts +4 -3
- package/dist/workers/brave-search.js +5 -2
- package/dist/workers/brave-warning.d.ts +7 -4
- package/dist/workers/brave-warning.js +19 -7
- package/dist/workers/ddg-search.d.ts +6 -6
- package/dist/workers/ddg-search.js +18 -12
- package/dist/workers/docs-cache.js +5 -2
- package/dist/workers/docs-chunk.d.ts +30 -37
- package/dist/workers/docs-chunk.js +37 -41
- package/dist/workers/docs-core.d.ts +28 -44
- package/dist/workers/docs-core.js +25 -44
- package/dist/workers/docs-index.js +4 -3
- package/dist/workers/docs-lookup.d.ts +15 -22
- package/dist/workers/docs-lookup.js +12 -21
- package/dist/workers/docs-project.d.ts +15 -9
- package/dist/workers/docs-project.js +17 -10
- package/dist/workers/docs-resolve.d.ts +19 -20
- package/dist/workers/docs-resolve.js +35 -32
- package/dist/workers/docs-retrieve.d.ts +5 -6
- package/dist/workers/docs-retrieve.js +18 -15
- package/dist/workers/exa-search.d.ts +9 -6
- package/dist/workers/exa-search.js +23 -12
- package/dist/workers/fetch-core.d.ts +13 -16
- package/dist/workers/fetch-core.js +23 -23
- package/dist/workers/focused-extractor.d.ts +13 -12
- package/dist/workers/focused-extractor.js +27 -19
- package/dist/workers/html-clean.js +24 -14
- package/dist/workers/http-request.d.ts +28 -20
- package/dist/workers/http-request.js +22 -17
- package/dist/workers/npm-version.d.ts +28 -11
- package/dist/workers/npm-version.js +24 -15
- package/dist/workers/phantom-imports.d.ts +15 -12
- package/dist/workers/phantom-imports.js +30 -24
- package/dist/workers/pi-worker-core.d.ts +65 -96
- package/dist/workers/pi-worker-core.js +93 -181
- package/dist/workers/pi-worker-docs.d.ts +24 -19
- package/dist/workers/pi-worker-docs.js +67 -76
- package/dist/workers/pi-worker-fetch.d.ts +7 -3
- package/dist/workers/pi-worker-fetch.js +27 -19
- package/dist/workers/pi-worker-search.js +12 -8
- package/dist/workers/pi-worker.d.ts +9 -4
- package/dist/workers/pi-worker.js +21 -14
- package/dist/workers/reasoning-warning.d.ts +18 -17
- package/dist/workers/reasoning-warning.js +22 -20
- package/dist/workers/research-cache.js +50 -78
- package/dist/workers/search-core.js +7 -5
- package/dist/workers/search-types.d.ts +10 -9
- package/dist/workers/search-types.js +9 -8
- package/dist/workers/session-hint.d.ts +13 -14
- package/dist/workers/session-hint.js +8 -9
- package/dist/workers/shared.d.ts +21 -25
- package/dist/workers/shared.js +0 -0
- package/dist/workers/single-read-extension.d.ts +14 -7
- package/dist/workers/single-read-extension.js +14 -7
- package/dist/workers/single-read-guard.d.ts +27 -30
- package/dist/workers/single-read-guard.js +36 -36
- package/dist/workers/typeonly-log.d.ts +12 -9
- package/dist/workers/typeonly-log.js +29 -33
- package/dist/workers/worker-channels.d.ts +15 -23
- package/dist/workers/worker-channels.js +15 -23
- package/dist/workers/worker-failure.d.ts +38 -46
- package/dist/workers/worker-failure.js +31 -39
- package/dist/workers/worker-kill.d.ts +25 -26
- package/dist/workers/worker-kill.js +16 -19
- package/dist/workers/worker-profiles.d.ts +54 -56
- package/dist/workers/worker-profiles.js +63 -39
- package/package.json +10 -8
|
@@ -1,21 +1,12 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* root-cause-repair — turn a verify-FAIL that was CAUSED by another task's file
|
|
3
|
-
* into a scoped repair task in the running plan
|
|
3
|
+
* into a scoped repair task in the running plan.
|
|
4
4
|
*
|
|
5
|
-
* The failure class this closes
|
|
6
|
-
*
|
|
7
|
-
*
|
|
8
|
-
*
|
|
9
|
-
*
|
|
10
|
-
* in TRUNCATE statements) … despite all 10 actual tests passing"
|
|
11
|
-
* TASK_0019 "… due to a pre-existing teardown bug in `test/teardown.ts`
|
|
12
|
-
* (created by TASK_0007) … this task did not modify the teardown"
|
|
13
|
-
*
|
|
14
|
-
* — and BOTH ended in an enforce-revert, so the enforce pass's edits were destroyed
|
|
15
|
-
* over a defect the current task did not create. The ledger recorded the root cause
|
|
16
|
-
* twice and NOTHING ever scheduled a fix: the bug survived ~24h, until the final
|
|
17
|
-
* gate's fix child happened to patch it, and it also generated the "2 pre-existing
|
|
18
|
-
* failures / state pollution" excuse notes repeated across TASK_0033…0038.
|
|
5
|
+
* The failure class this closes: one task ships a broken shared file — a test
|
|
6
|
+
* teardown, say — and that file then FAILS later, unrelated tasks. Each of those
|
|
7
|
+
* FAILs is recorded as a debt naming the same root cause, and nothing schedules a
|
|
8
|
+
* fix: every later task keeps hitting it, and each one's enforce pass can be
|
|
9
|
+
* reverted over a defect it did not create.
|
|
19
10
|
*
|
|
20
11
|
* The channel here is deliberately narrow, because a false positive costs a whole
|
|
21
12
|
* task slot and mutates a running plan. Three independent conditions must ALL hold:
|
|
@@ -23,25 +14,22 @@
|
|
|
23
14
|
* 1. TEXT — the FAIL reason (or the resolution research's rationale) carries an
|
|
24
15
|
* explicit blame cue ("pre-existing", "created by TASK_nnnn", "bug in", "this
|
|
25
16
|
* task did not modify") and a path token near it. Merely MENTIONING a path is
|
|
26
|
-
* not blame:
|
|
27
|
-
*
|
|
28
|
-
* a repair task for it.
|
|
17
|
+
* not blame: a FAIL that quotes the spec's own "Preserve all existing files
|
|
18
|
+
* on disk" alongside a path must not spawn a repair task for that path.
|
|
29
19
|
* 2. PROVENANCE — the blamed file was introduced by a DIFFERENT task's commit
|
|
30
20
|
* (task-provenance.ts). Unknown provenance is never evidence.
|
|
31
21
|
* 3. AUTHORSHIP — the current task's own work does not touch the blamed file. If
|
|
32
22
|
* this task edited it, the defect may well be its own and the ordinary
|
|
33
23
|
* autofix/revert path is right.
|
|
34
24
|
*
|
|
35
|
-
* Environment-attributed failures are vetoed outright (
|
|
36
|
-
*
|
|
37
|
-
*
|
|
38
|
-
* yolo-FAIL.
|
|
25
|
+
* Environment-attributed failures are vetoed outright ("no PostgreSQL database
|
|
26
|
+
* server is available in this environment"). No file edit repairs a missing
|
|
27
|
+
* daemon, so a repair task there would be a guaranteed non-converging FAIL.
|
|
39
28
|
*
|
|
40
|
-
* Everything downstream is deduplicated by FILE: N debts naming one root file
|
|
41
|
-
* exactly ONE repair task per run
|
|
42
|
-
*
|
|
43
|
-
*
|
|
44
|
-
* is what keeps this from looping.
|
|
29
|
+
* Everything downstream is deduplicated by FILE: N debts naming one root file
|
|
30
|
+
* yield exactly ONE repair task per run. The repair task itself is just an
|
|
31
|
+
* ordinary plan entry — if it fails, it lands in the ledger like any other task
|
|
32
|
+
* and is never re-spawned, which is what keeps this from looping.
|
|
45
33
|
*/
|
|
46
34
|
import { makeLedger } from './ledger.js';
|
|
47
35
|
/** A path-like token: at least one directory separator, ending in a file name. */
|
|
@@ -50,14 +38,14 @@ const PATH_TOKEN_RE = /(?:[\w.@-]+\/)+[\w.@-]+\.\w+/g;
|
|
|
50
38
|
* Phrases that ATTRIBUTE a failure to something that predates the current task.
|
|
51
39
|
* Each is a blame cue: the path token nearest a cue is the accused file. Kept
|
|
52
40
|
* deliberately specific — a bare "existing" matches the spec boilerplate
|
|
53
|
-
* "Preserve all existing files on disk" that
|
|
41
|
+
* "Preserve all existing files on disk" that a task FAIL quotes.
|
|
54
42
|
*/
|
|
55
43
|
const BLAME_CUE_RE = /pre-?\s?existing|existing (?:bug|defect|failure|issue|fault)|(?:created|introduced|added|written) (?:by|in) TASK_\d+|(?:bug|defect|fault|error) in\b|already (?:broken|failing|red)|(?:this task )?did not (?:modify|touch|create|change)|not (?:modified|touched|created|introduced) by this task|unrelated to this task/gi;
|
|
56
44
|
/**
|
|
57
45
|
* Failures the environment causes, not a file. No edit to any file repairs a
|
|
58
|
-
* missing database server, so these must never open the repair channel
|
|
59
|
-
*
|
|
60
|
-
* binary, no Docker, no listener on port 5432)"
|
|
46
|
+
* missing database server, so these must never open the repair channel. The
|
|
47
|
+
* canonical shape is "no PostgreSQL database server is available in this
|
|
48
|
+
* environment (no binary, no Docker, no listener on port 5432)".
|
|
61
49
|
*/
|
|
62
50
|
const ENVIRONMENT_BLAME_RE = /no (?:postgres|postgresql|mysql|database|redis|docker|network|internet|display)\b|not (?:installed|available|running|present) (?:in|on|for) (?:this |the )?(?:env|environment|sandbox|container|machine|image|system)|(?:environment|env|sandbox|container) (?:gap|limitation|lacks|has no|does not (?:have|provide))|no (?:binary|listener|daemon|server) (?:on|for|available)|missing (?:binary|executable|system (?:tool|package)|runtime)|is not installed|command not found/i;
|
|
63
51
|
/** How far from a blame cue a path token may sit and still be the accused file. */
|
|
@@ -280,10 +268,11 @@ export async function drainRepairQueue(cwd) {
|
|
|
280
268
|
return parsed;
|
|
281
269
|
}
|
|
282
270
|
/**
|
|
283
|
-
* Collapse candidates by file — MANDATORY dedup:
|
|
284
|
-
*
|
|
285
|
-
*
|
|
286
|
-
* accumulate in
|
|
271
|
+
* Collapse candidates by file — MANDATORY dedup: two debts naming the same file
|
|
272
|
+
* must yield exactly ONE repair task naming both blamed tasks. Keyed on the
|
|
273
|
+
* NORMALISED path, so `./x.ts` and `x.ts` are one entry. First record wins for
|
|
274
|
+
* defect and command (they describe the same fault); blamed tasks accumulate in
|
|
275
|
+
* first-seen order.
|
|
287
276
|
*/
|
|
288
277
|
export function mergeRepairCandidates(candidates) {
|
|
289
278
|
const byFile = new Map();
|
|
@@ -339,11 +328,10 @@ export function planHasRepairFor(titles, file) {
|
|
|
339
328
|
});
|
|
340
329
|
}
|
|
341
330
|
/**
|
|
342
|
-
* The extra scope fence a repair entry carries into refine.
|
|
343
|
-
*
|
|
344
|
-
*
|
|
345
|
-
*
|
|
346
|
-
* the debt failed on.
|
|
331
|
+
* The extra scope fence a repair entry carries into refine. A repair title names
|
|
332
|
+
* one file and one narrow defect, which refine will otherwise re-expand into
|
|
333
|
+
* "overhaul the test infrastructure". The fence pins the single editable file and
|
|
334
|
+
* pins the VERIFY to the exact command the debt failed on.
|
|
347
335
|
*/
|
|
348
336
|
export function buildRepairScopeFence(file, verifyCommand) {
|
|
349
337
|
return [
|
|
@@ -13,23 +13,20 @@
|
|
|
13
13
|
* 2. the raw-stdin interception that makes the terminal behave like the
|
|
14
14
|
* browser is ARMED (`cancel-input.ts`: `armCancelListener`/`disarm…`).
|
|
15
15
|
*
|
|
16
|
-
*
|
|
17
|
-
* dropped lines — was written out at four sites in two files, and the `finally`
|
|
18
|
-
* halves disagreed on order (the orchestrator disarmed first; `/task-auto` ended
|
|
19
|
-
* first). The order is not observable — both halves are synchronous, the
|
|
16
|
+
* The teardown order is not observable — both halves are synchronous, the
|
|
20
17
|
* listener only consults `isRunActive()` on a keystroke, and no keystroke can
|
|
21
18
|
* land between two statements of one tick — so there is ONE order here, not an
|
|
22
19
|
* option: stop listening, then release the hold and report what it dropped.
|
|
23
20
|
*
|
|
24
|
-
* The two refcounts stay two, deliberately. `runDepth` is read
|
|
25
|
-
* bridge
|
|
26
|
-
* `armed.depth` guards a live stdin
|
|
27
|
-
*
|
|
28
|
-
*
|
|
29
|
-
*
|
|
30
|
-
*
|
|
31
|
-
*
|
|
32
|
-
* either pair.
|
|
21
|
+
* The two refcounts stay two, deliberately. `runDepth` (mid-run-input.ts) is read
|
|
22
|
+
* by the remote bridge through `isRunActive` with no ctx in hand, and by the
|
|
23
|
+
* listener itself; `armed.depth` (cancel-input.ts) guards a live stdin
|
|
24
|
+
* subscription that is re-pointed on every session replacement
|
|
25
|
+
* (`rearmCancelListener`, called from orchestrator.ts) and that
|
|
26
|
+
* cancel-input.test.ts arms directly. Collapsing them means one module's counter
|
|
27
|
+
* driving the other's lifecycle, or a third counter with both modules demoted to
|
|
28
|
+
* flags — a wider change than the drift it prevents. What prevents drift now is
|
|
29
|
+
* that this bracket is the ONLY production caller of either pair.
|
|
33
30
|
*/
|
|
34
31
|
import type { ExtensionCommandContext } from '@earendil-works/pi-coding-agent';
|
|
35
32
|
export interface RunBracketOptions {
|
package/dist/task/run-end.d.ts
CHANGED
|
@@ -1,22 +1,14 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* run-end — how a single /task run ENDED, named once.
|
|
3
3
|
*
|
|
4
|
-
* `TaskRunner.run`
|
|
5
|
-
*
|
|
6
|
-
*
|
|
7
|
-
*
|
|
8
|
-
*
|
|
9
|
-
* `handleFailure` threw the name away.
|
|
4
|
+
* `TaskRunner.run` returns this, so a caller never has to re-derive the ending by
|
|
5
|
+
* re-reading the task file's front matter and narrowing it to a boolean. Reading
|
|
6
|
+
* the file back cannot tell a user cancel from a fault: `/task-cancel` writes
|
|
7
|
+
* `cancelled`, and anything that only asks "is the state completed?" then treats
|
|
8
|
+
* that stop as a failure and overwrites it.
|
|
10
9
|
*
|
|
11
|
-
* The
|
|
12
|
-
*
|
|
13
|
-
* false; `!res.ok` calls `markResumable`, which overwrites `cancelled` with
|
|
14
|
-
* `failed`, and announces a red *"stopped — fix and run /task-resume"*.
|
|
15
|
-
* `/task-auto` hits the same arm for the same input, because its cancel branch
|
|
16
|
-
* only consults a module global that `/task-cancel` never sets.
|
|
17
|
-
*
|
|
18
|
-
* The file is still written — it is what a RESUME reads. What changed is that it
|
|
19
|
-
* is no longer the channel this process uses to talk to itself.
|
|
10
|
+
* The file is still written — it is what a RESUME reads. It is just not the
|
|
11
|
+
* channel this process uses to talk to itself.
|
|
20
12
|
*/
|
|
21
13
|
/** Why a run stopped. Exactly one of these is true of any finished run. */
|
|
22
14
|
export type RunEnd =
|
|
@@ -45,14 +37,12 @@ export type RunEndKind = RunEnd['kind'];
|
|
|
45
37
|
/**
|
|
46
38
|
* What a command does about each ending.
|
|
47
39
|
*
|
|
48
|
-
*
|
|
49
|
-
*
|
|
50
|
-
*
|
|
51
|
-
* The WORDING stays per-command — `/task` says "resume with /task-resume" where
|
|
52
|
-
* `/task-auto` says "/task-auto-resume" — so only the policy is shared.
|
|
40
|
+
* The POLICY is shared by /task's loop (orchestrator.ts) and /task-auto's
|
|
41
|
+
* (auto-orchestrator.ts). The WORDING stays per-command — /task says "resume with
|
|
42
|
+
* /task-resume" where /task-auto says "/task-auto-resume".
|
|
53
43
|
*/
|
|
54
44
|
export interface RunEndPolicy {
|
|
55
|
-
/** Mark the task resumable
|
|
45
|
+
/** Mark the task resumable — `markResumable` writes `state: failed`. */
|
|
56
46
|
resumable: boolean;
|
|
57
47
|
/**
|
|
58
48
|
* Does this ending FAIL the plan that contains the task?
|
|
@@ -73,5 +63,5 @@ export interface RunEndPolicy {
|
|
|
73
63
|
* fault.
|
|
74
64
|
*/
|
|
75
65
|
export declare const RUN_END_POLICY: Record<RunEndKind, RunEndPolicy>;
|
|
76
|
-
/** Did the run deliver a spec?
|
|
66
|
+
/** Did the run deliver a spec? True for `completed` and nothing else. */
|
|
77
67
|
export declare function runSucceeded(end: RunEnd): boolean;
|
package/dist/task/run-end.js
CHANGED
|
@@ -1,22 +1,14 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* run-end — how a single /task run ENDED, named once.
|
|
3
3
|
*
|
|
4
|
-
* `TaskRunner.run`
|
|
5
|
-
*
|
|
6
|
-
*
|
|
7
|
-
*
|
|
8
|
-
*
|
|
9
|
-
* `handleFailure` threw the name away.
|
|
4
|
+
* `TaskRunner.run` returns this, so a caller never has to re-derive the ending by
|
|
5
|
+
* re-reading the task file's front matter and narrowing it to a boolean. Reading
|
|
6
|
+
* the file back cannot tell a user cancel from a fault: `/task-cancel` writes
|
|
7
|
+
* `cancelled`, and anything that only asks "is the state completed?" then treats
|
|
8
|
+
* that stop as a failure and overwrites it.
|
|
10
9
|
*
|
|
11
|
-
* The
|
|
12
|
-
*
|
|
13
|
-
* false; `!res.ok` calls `markResumable`, which overwrites `cancelled` with
|
|
14
|
-
* `failed`, and announces a red *"stopped — fix and run /task-resume"*.
|
|
15
|
-
* `/task-auto` hits the same arm for the same input, because its cancel branch
|
|
16
|
-
* only consults a module global that `/task-cancel` never sets.
|
|
17
|
-
*
|
|
18
|
-
* The file is still written — it is what a RESUME reads. What changed is that it
|
|
19
|
-
* is no longer the channel this process uses to talk to itself.
|
|
10
|
+
* The file is still written — it is what a RESUME reads. It is just not the
|
|
11
|
+
* channel this process uses to talk to itself.
|
|
20
12
|
*/
|
|
21
13
|
/**
|
|
22
14
|
* The one table. A run that the USER stopped is not resumable-as-failed: its
|
|
@@ -31,7 +23,7 @@ export const RUN_END_POLICY = {
|
|
|
31
23
|
failed: { resumable: true, failsRun: true, level: 'error' },
|
|
32
24
|
'no-session': { resumable: false, failsRun: false, level: 'warning' }
|
|
33
25
|
};
|
|
34
|
-
/** Did the run deliver a spec?
|
|
26
|
+
/** Did the run deliver a spec? True for `completed` and nothing else. */
|
|
35
27
|
export function runSucceeded(end) {
|
|
36
28
|
return end.kind === 'completed';
|
|
37
29
|
}
|
|
@@ -3,14 +3,14 @@
|
|
|
3
3
|
*
|
|
4
4
|
* task-gates.ts gates ONE task against its own spec. This gates the WHOLE REPO once,
|
|
5
5
|
* when every task in a /task-auto run is checked off and BEFORE the run is declared
|
|
6
|
-
* complete
|
|
7
|
-
*
|
|
8
|
-
* the project's OWN whole-repo commands run once here, unaided.
|
|
6
|
+
* complete. Every task passing its own per-slice gate does not prove the assembled
|
|
7
|
+
* whole works, so the project's OWN whole-repo commands run once here, unaided.
|
|
9
8
|
*
|
|
10
9
|
* The stage owns four things the per-task gate has no equivalent of:
|
|
11
10
|
*
|
|
12
11
|
* 1. THREE verdicts, not two — PASS / FAIL / UNOBSERVED. A gate that observed
|
|
13
|
-
* nothing dynamic is never announced as a pass (
|
|
12
|
+
* nothing dynamic is never announced as a pass (gate-tally.ts
|
|
13
|
+
* `unobservedVerdict`).
|
|
14
14
|
* 2. The run-end ACCEPT-debt report — every defect a task was allowed to ship with,
|
|
15
15
|
* surfaced at the last moment anyone will look, and RE-DERIVED against the final
|
|
16
16
|
* tree after a converged autofix so the last word is about the tree that shipped.
|
|
@@ -19,7 +19,7 @@
|
|
|
19
19
|
* after MAX_FINAL_GATE_AUTOFIX so a non-converging fix pass cannot loop forever.
|
|
20
20
|
* 4. The stranded sub-fixes a non-converging fix pass leaves in the working tree —
|
|
21
21
|
* committed on EVERY terminal outcome, because both of them end the run and the
|
|
22
|
-
* next `git checkout` would destroy real repairs
|
|
22
|
+
* next `git checkout` would destroy real repairs.
|
|
23
23
|
*
|
|
24
24
|
* Every terminal outcome is RETURNED, never announced here — same contract as
|
|
25
25
|
* {@link runGatesForTask}'s GateResult: the caller owns the parent task file's state
|
|
@@ -54,21 +54,19 @@ export interface FinalGateStageDeps {
|
|
|
54
54
|
finalGateFix?: FinalGateFixFn;
|
|
55
55
|
/**
|
|
56
56
|
* Paths currently uncommitted in the working tree (`git status` shape), used to
|
|
57
|
-
* detect SUB-FIXES a non-converging fix pass left behind (
|
|
58
|
-
*
|
|
59
|
-
*
|
|
57
|
+
* detect SUB-FIXES a non-converging fix pass left behind (item 4 in the header).
|
|
58
|
+
* Every task is committed by the time this stage runs, so anything dirty here is
|
|
59
|
+
* the fix pass's own work. Absent → the stranded-fix handling is skipped
|
|
60
60
|
* entirely (prior behavior).
|
|
61
61
|
*/
|
|
62
62
|
pendingChanges?: (cwd: string) => Promise<string[]>;
|
|
63
63
|
/**
|
|
64
64
|
* Re-derive the still-open ACCEPT-debt ledger against the tree AS IT IS NOW
|
|
65
|
-
* (
|
|
66
|
-
*
|
|
67
|
-
*
|
|
68
|
-
*
|
|
69
|
-
*
|
|
70
|
-
* 18: four defects reported STILL OPEN at 14:58, one of them fixed by the autofix
|
|
71
|
-
* that converged at 15:03, and the report never moved).
|
|
65
|
+
* (`deriveOpenDebts`, defined in accept-debt.ts and re-exported by
|
|
66
|
+
* final-gate.ts). Needed because the run's "N recorded verify-FAIL defect(s) are
|
|
67
|
+
* STILL unresolved" report is built from the FIRST gate result: without this, an
|
|
68
|
+
* autofix that converged after that report would leave the run's last word about
|
|
69
|
+
* a tree that no longer exists.
|
|
72
70
|
*
|
|
73
71
|
* `staticOk` is the caller's PROOF about the current statics, never a guess: it is
|
|
74
72
|
* passed true only where the gate itself just passed them. Absent (tests) → the
|
|
@@ -108,8 +106,9 @@ export interface FinalGateStageParams {
|
|
|
108
106
|
/** The parent /task-auto id: trail target, notify prefix, commit-message tag. */
|
|
109
107
|
runId: string;
|
|
110
108
|
/** The parent plan (the task list), handed to the gate so it can tell a served app
|
|
111
|
-
* from a CLI — the boot check requires a listener only for the former
|
|
112
|
-
* a
|
|
109
|
+
* from a CLI — the boot check requires a listener only for the former. Without
|
|
110
|
+
* that distinction any long-lived process, a file watcher included, satisfies
|
|
111
|
+
* "still alive". */
|
|
113
112
|
planText: string;
|
|
114
113
|
/** How many tasks the run completed — for the completion announcement only. */
|
|
115
114
|
taskCount: number;
|
|
@@ -134,9 +133,8 @@ export type FinalGateStageResult = {
|
|
|
134
133
|
/**
|
|
135
134
|
* Run the whole-repo gate and resolve its verdict with the user.
|
|
136
135
|
*
|
|
137
|
-
*
|
|
138
|
-
*
|
|
139
|
-
*
|
|
140
|
-
* USER_CANCELLED path handles it).
|
|
136
|
+
* Shares no state with /task-auto's run loop: the stage reads no per-task variable
|
|
137
|
+
* and writes none. Never throws for a gate outcome — only a user cancel inside a
|
|
138
|
+
* gate child propagates (the caller's USER_CANCELLED path handles it).
|
|
141
139
|
*/
|
|
142
140
|
export declare function runFinalGateStage(active: ExtensionCommandContext, deps: FinalGateStageDeps, p: FinalGateStageParams): Promise<FinalGateStageResult>;
|