@mjasnikovs/pi-task 0.38.28 → 0.38.30
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/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 +22 -16
- package/dist/shared/command-watchdog.js +28 -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 +178 -162
- 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 +46 -51
- package/dist/task/child-runner.js +48 -49
- 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 +25 -7
- package/dist/task/context-usage.js +21 -6
- 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 +6 -7
- 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 +37 -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-thinking.d.ts +33 -31
- package/dist/task/implementation-thinking.js +5 -6
- package/dist/task/implementation-turn.d.ts +34 -31
- package/dist/task/implementation-turn.js +29 -27
- 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 +9 -8
- package/dist/task/loop-detector.js +16 -12
- 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 +62 -64
- 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 +180 -248
- 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 +33 -36
- package/dist/task/research-worker.js +39 -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 +12 -12
- package/dist/workers/focused-extractor.js +16 -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 +86 -54
- package/dist/workers/pi-worker-core.js +112 -112
- 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 +23 -10
- 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 +25 -28
- package/dist/workers/single-read-guard.js +32 -32
- 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 +43 -53
- package/dist/workers/worker-profiles.js +30 -38
- package/package.json +10 -8
|
@@ -1,42 +1,40 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Verify-FAIL resolution research
|
|
2
|
+
* Verify-FAIL resolution research.
|
|
3
3
|
*
|
|
4
|
-
* When the work-verification gate (verify-work.ts)
|
|
5
|
-
*
|
|
6
|
-
* shown a boxed two-choice picker:
|
|
4
|
+
* When the work-verification gate (verify-work.ts) FAILs a task, one of two
|
|
5
|
+
* things has to happen next:
|
|
7
6
|
*
|
|
8
|
-
* • Autofix
|
|
9
|
-
*
|
|
10
|
-
* • Accept
|
|
11
|
-
*
|
|
7
|
+
* • Autofix — re-run the task's implementation turn against the failure, then
|
|
8
|
+
* re-enter the verify gate.
|
|
9
|
+
* • Accept — treat the artifact as good, override the gate, and proceed
|
|
10
|
+
* (check off + commit) exactly as a PASS would.
|
|
12
11
|
*
|
|
13
|
-
*
|
|
14
|
-
*
|
|
15
|
-
*
|
|
16
|
-
*
|
|
17
|
-
* unattended-autofix cap is reached. This module only computes which of the two
|
|
18
|
-
* cards is tinted RECOMMENDED, by handing the FAIL reason + the task spec to
|
|
19
|
-
* a fresh read+bash child of the SAME local model and letting it INVESTIGATE the
|
|
20
|
-
* real workspace: is the FAIL a genuine defect in the work (→ recommend AUTOFIX),
|
|
21
|
-
* or a false alarm / an acceptable artifact the gate misjudged (→ recommend
|
|
22
|
-
* ACCEPT)? This is the same shape of judgement a human reviewer makes when a CI
|
|
23
|
-
* check is red — sometimes the code is broken, sometimes the check is wrong.
|
|
12
|
+
* This module only computes which of the two is RECOMMENDED. It hands the FAIL
|
|
13
|
+
* reason and the composed spec to a fresh read+bash child and lets it
|
|
14
|
+
* INVESTIGATE the real workspace: a genuine defect in the work (→ AUTOFIX), or
|
|
15
|
+
* an artifact the gate misjudged (→ ACCEPT).
|
|
24
16
|
*
|
|
25
|
-
*
|
|
26
|
-
*
|
|
27
|
-
*
|
|
28
|
-
*
|
|
17
|
+
* The recommendation also decides whether a human is asked at all. In
|
|
18
|
+
* task-gates.ts an AUTOFIX recommendation is applied UNATTENDED, bounded by
|
|
19
|
+
* MAX_AUTO_AUTOFIX; the picker is reached on an ACCEPT recommendation, once that
|
|
20
|
+
* bound is spent, or when the FAIL is UNOBSERVED or frozen-blocked.
|
|
29
21
|
*
|
|
30
|
-
*
|
|
31
|
-
*
|
|
22
|
+
* Tools: `read` + `bash`, the same string as verify-work's VERIFY_TOOLS. That is
|
|
23
|
+
* a CONTRACT, not a capability — `bash` can write. gate-child.ts marks the
|
|
24
|
+
* `recommend` kind `guarded`, so the git-state guard restores whatever this pass
|
|
25
|
+
* moves.
|
|
26
|
+
*
|
|
27
|
+
* The verdict defaults to AUTOFIX when missing or garbled: re-doing the work
|
|
28
|
+
* rather than blessing it.
|
|
32
29
|
*/
|
|
33
30
|
import { USER_CANCELLED } from './child-runner.js';
|
|
34
|
-
/**
|
|
31
|
+
/** The observe-only contract handed to the child. The same string as
|
|
32
|
+
* verify-work's VERIFY_TOOLS, so both passes are told the same thing. */
|
|
35
33
|
const RESOLUTION_TOOLS = 'read,bash';
|
|
36
34
|
/**
|
|
37
35
|
* Build the resolution research child's prompt. Pure, so the wording is
|
|
38
|
-
* unit-tested without spawning pi. The contract: investigate the real
|
|
39
|
-
* and end on exactly one RESOLUTION
|
|
36
|
+
* unit-tested without spawning pi. The contract it states: investigate the real
|
|
37
|
+
* workspace and end on exactly one `VERIFY-RESOLUTION:` line.
|
|
40
38
|
*/
|
|
41
39
|
export function buildResolutionPrompt(spec, failReason) {
|
|
42
40
|
return [
|
|
@@ -96,13 +94,14 @@ export function buildResolutionPrompt(spec, failReason) {
|
|
|
96
94
|
].join('\n');
|
|
97
95
|
}
|
|
98
96
|
/**
|
|
99
|
-
* Parse the child's recommendation
|
|
100
|
-
* `VERIFY-RESOLUTION: AUTOFIX|ACCEPT` marker
|
|
101
|
-
*
|
|
102
|
-
*
|
|
97
|
+
* Parse the child's recommendation out of the LAST
|
|
98
|
+
* `VERIFY-RESOLUTION: AUTOFIX|ACCEPT` marker, case-insensitively. Last match
|
|
99
|
+
* wins: the model reasons before concluding, and a bash command it runs can
|
|
100
|
+
* print the token back, so an earlier occurrence is not the verdict.
|
|
103
101
|
*
|
|
104
|
-
* No marker →
|
|
105
|
-
*
|
|
102
|
+
* No marker → AUTOFIX (re-do rather than bless), with a rationale saying the
|
|
103
|
+
* research was inconclusive. A marker with no trailing sentence gets a stock
|
|
104
|
+
* rationale, so `rationale` is never empty.
|
|
106
105
|
*/
|
|
107
106
|
export function parseResolutionVerdict(text) {
|
|
108
107
|
const re = /VERIFY-RESOLUTION:\s*(AUTOFIX|ACCEPT)\b[ \t]*(.*)/gi;
|
|
@@ -122,20 +121,20 @@ export function parseResolutionVerdict(text) {
|
|
|
122
121
|
}
|
|
123
122
|
// ─── Picker plumbing ─────────────────────────────────────────────────────────
|
|
124
123
|
//
|
|
125
|
-
//
|
|
126
|
-
//
|
|
127
|
-
//
|
|
128
|
-
//
|
|
129
|
-
//
|
|
124
|
+
// These pure helpers shape the boxed two-choice picker (task-gates.ts
|
|
125
|
+
// `askVerifyResolution` → SessionUI.ask) and classify whatever comes back — a
|
|
126
|
+
// card value, a remote button label, or free text typed via the "type a
|
|
127
|
+
// different answer" fallback — so the orchestration stays mechanical and
|
|
128
|
+
// unit-tested.
|
|
130
129
|
export const ACCEPT_VALUE = 'accept';
|
|
131
130
|
export const AUTOFIX_VALUE = 'autofix';
|
|
132
131
|
export const ACCEPT_LABEL = 'Accept — keep the artifact as-is and continue';
|
|
133
132
|
export const AUTOFIX_LABEL = 'Autofix — re-run the task to fix it, then verify again';
|
|
134
133
|
/**
|
|
135
|
-
* The two cards for the picker,
|
|
136
|
-
* renderer
|
|
137
|
-
* tokens; remote buttons
|
|
138
|
-
* accepts both.
|
|
134
|
+
* The two cards for the picker, model-recommended one FIRST because the boxed
|
|
135
|
+
* renderer marks index 0 as the recommended card (bridge.ts `askLocal` passes
|
|
136
|
+
* `recommended: i === 0`). Values are the bare tokens; remote buttons carry the
|
|
137
|
+
* labels — {@link classifyResolutionAnswer} accepts both.
|
|
139
138
|
*/
|
|
140
139
|
export function resolutionOptions(recommend) {
|
|
141
140
|
const accept = { label: ACCEPT_LABEL, value: ACCEPT_VALUE };
|
|
@@ -151,10 +150,11 @@ export function resolutionOptions(recommend) {
|
|
|
151
150
|
];
|
|
152
151
|
}
|
|
153
152
|
/**
|
|
154
|
-
* Map a picker answer to an action.
|
|
155
|
-
*
|
|
156
|
-
*
|
|
157
|
-
*
|
|
153
|
+
* Map a picker answer to an action. undefined or blank is a dismissal (cancel).
|
|
154
|
+
* A LEADING `accept`/`autofix` word matches, which covers both the bare card
|
|
155
|
+
* values and the remote button labels. Anything else becomes an AUTOFIX carrying
|
|
156
|
+
* that text as guidance — including a sentence that mentions "accept" further
|
|
157
|
+
* along, since the user is steering the re-run, not blessing the artifact.
|
|
158
158
|
*/
|
|
159
159
|
export function classifyResolutionAnswer(answer) {
|
|
160
160
|
if (answer === undefined)
|
|
@@ -171,9 +171,10 @@ export function classifyResolutionAnswer(answer) {
|
|
|
171
171
|
}
|
|
172
172
|
/**
|
|
173
173
|
* Research a verify FAIL and return which action to recommend. Never throws
|
|
174
|
-
*
|
|
175
|
-
* reports a clean "cancelled — resume"
|
|
176
|
-
*
|
|
174
|
+
* except on a user cancel, which propagates so the loop's USER_CANCELLED handler
|
|
175
|
+
* reports a clean "cancelled — resume". A child crash returns AUTOFIX with a
|
|
176
|
+
* "could not run" rationale; since AUTOFIX is the unattended path, a crash here
|
|
177
|
+
* costs an implementation re-run rather than a prompt.
|
|
177
178
|
*/
|
|
178
179
|
export async function researchResolution(deps) {
|
|
179
180
|
let text;
|
|
@@ -9,9 +9,9 @@ import { type CrossTaskDeletion } from './task-provenance.js';
|
|
|
9
9
|
* - `read` lets it inspect a file the VERIFY output points at (a build error's
|
|
10
10
|
* source line, a config it just validated) to characterise a failure precisely.
|
|
11
11
|
* - No `edit`/`write`: this pass reports a verdict, it does not change the tree.
|
|
12
|
-
*
|
|
13
|
-
*
|
|
14
|
-
* enforce pass
|
|
12
|
+
* That is a CONTRACT, not a capability — `bash` can write — so the git-state
|
|
13
|
+
* guard backs it up and `mutationCheck` throws away a verdict reached on a
|
|
14
|
+
* mutated tree. The enforce pass, whose job IS editing, runs `read,edit`.
|
|
15
15
|
*/
|
|
16
16
|
declare const VERIFY_TOOLS = "read,bash";
|
|
17
17
|
export interface VerifyOutcome {
|
|
@@ -37,26 +37,22 @@ export interface VerifyOutcome {
|
|
|
37
37
|
/**
|
|
38
38
|
* WHICH KIND of FAIL this is, as data. Only meaningful when ok === false.
|
|
39
39
|
*
|
|
40
|
-
*
|
|
41
|
-
*
|
|
42
|
-
*
|
|
43
|
-
*
|
|
44
|
-
*
|
|
45
|
-
* class. A reword of the mint disabled all three, with no compile error and a
|
|
46
|
-
* green suite. This is the `observedFailures` finding one altitude down: the
|
|
47
|
-
* outcome CLASS never travelled with the failure TEXT, so every classifier
|
|
48
|
-
* downstream had to guess.
|
|
40
|
+
* Without it the class travels only as the PREFIX of `reason`, and every
|
|
41
|
+
* downstream classifier has to recover it by re-typing that literal — a
|
|
42
|
+
* reword of the mint would then disarm them with no compile error.
|
|
43
|
+
* `VERIFY_FAIL_PREFIX` owns the strings so mint and match cannot drift, and
|
|
44
|
+
* `verifyFailClass` prefers this field over the prefix.
|
|
49
45
|
*/
|
|
50
46
|
failClass?: VerifyFailClass;
|
|
51
47
|
}
|
|
52
48
|
/**
|
|
53
|
-
* The kinds of verify FAIL.
|
|
54
|
-
*
|
|
49
|
+
* The kinds of verify FAIL. `VERIFY_FAIL_PREFIX` below is a
|
|
50
|
+
* `Record<VerifyFailClass, string>`, so a new member here is a compile error
|
|
51
|
+
* (TS2741, "Property 'x' is missing") until it declares a display prefix.
|
|
55
52
|
*
|
|
56
|
-
* `static-checks` is the RUN-level twin of `repo-health`:
|
|
57
|
-
* `static
|
|
58
|
-
* `
|
|
59
|
-
* that reached the ledger.
|
|
53
|
+
* `static-checks` is the RUN-level twin of `repo-health`: final-gate.ts mints
|
|
54
|
+
* `VERIFY_FAIL_PREFIX['static-checks']` for the same concept at the other
|
|
55
|
+
* altitude, and `isStaticClass` answers true for both.
|
|
60
56
|
*/
|
|
61
57
|
export type VerifyFailClass = 'repo-health' | 'static-checks' | 'unobserved' | 'model-verdict' | 'harness-fault';
|
|
62
58
|
/**
|
|
@@ -71,10 +67,10 @@ export declare const VERIFY_FAIL_PREFIX: Record<VerifyFailClass, string>;
|
|
|
71
67
|
* The class of a FAIL — from the typed field when it is there, else from the
|
|
72
68
|
* prefix the registry above owns.
|
|
73
69
|
*
|
|
74
|
-
* The prefix test
|
|
75
|
-
*
|
|
76
|
-
*
|
|
77
|
-
*
|
|
70
|
+
* The prefix test has to survive somewhere: `GateDeps.verify` is a seam, a debt
|
|
71
|
+
* read back off disk is a bare string with no outcome attached, and final-gate.ts
|
|
72
|
+
* mints its `static checks:` line through a different path entirely. This is the
|
|
73
|
+
* only place in src/ that tests a reason against a prefix.
|
|
78
74
|
*/
|
|
79
75
|
export declare function verifyFailClass(o: Pick<VerifyOutcome, 'failClass' | 'reason'>): VerifyFailClass | undefined;
|
|
80
76
|
/** The class a recorded reason STRING belongs to, by its minted prefix. */
|
|
@@ -83,46 +79,40 @@ export declare function failClassOfReason(reason: string): VerifyFailClass | und
|
|
|
83
79
|
export declare function isStaticClass(cls: VerifyFailClass | undefined): boolean;
|
|
84
80
|
/**
|
|
85
81
|
* Slice the delivered spec (GOAL / CONSTRAINTS / ACCEPTANCE / VERIFY) out of a
|
|
86
|
-
* task file body. The
|
|
87
|
-
* the
|
|
88
|
-
*
|
|
89
|
-
*
|
|
82
|
+
* task file body. The compose and critique phases write the section named `spec`,
|
|
83
|
+
* so the composed spec lives under `## spec` and runs to the next line matching
|
|
84
|
+
* `## ` plus non-space (`## phase timings`); a `### ` subheading stays inside.
|
|
85
|
+
* Returns null when there is no spec section or it is blank (a task that never
|
|
86
|
+
* reached compose), which the caller treats as a pass — nothing to verify against.
|
|
90
87
|
*/
|
|
91
88
|
export declare function extractSpecForVerification(taskBody: string): string | null;
|
|
92
89
|
/**
|
|
93
90
|
* ─────────────────────────── THE PROBE TABLE ───────────────────────────
|
|
94
91
|
*
|
|
95
|
-
*
|
|
96
|
-
*
|
|
97
|
-
*
|
|
98
|
-
*
|
|
99
|
-
*
|
|
100
|
-
*
|
|
101
|
-
*
|
|
92
|
+
* Each deterministic probe is one ADAPTER row carrying only what is specific to
|
|
93
|
+
* it: its key (which names the thunk it reads from `deps.probes`), the empty
|
|
94
|
+
* value it degrades to, how its raw result becomes finding lines, the notice
|
|
95
|
+
* block those lines produce, and the numbered rule the notice routes the child
|
|
96
|
+
* to. The loop in `runWorkVerification` owns the ritual, so adding a probe is a
|
|
97
|
+
* `ProbeRaw` line, a row here, and a binding line in gate-deps — nothing else.
|
|
98
|
+
* (Same shape as `LOCKFILE_CHECKS` in final-gate.ts, where a whole package
|
|
99
|
+
* ecosystem is one row.)
|
|
102
100
|
*
|
|
103
|
-
*
|
|
104
|
-
* its key (which names the thunk it reads from `deps.probes`), the empty value it
|
|
105
|
-
* degrades to, how its raw result becomes finding lines, the notice block those
|
|
106
|
-
* lines produce, and the numbered rule the notice routes the child to. The loop
|
|
107
|
-
* owns the ritual. (Same shape as
|
|
108
|
-
* LOCKFILE_CHECKS in final-gate.ts, where a whole package ecosystem is one row.)
|
|
109
|
-
*
|
|
110
|
-
* THIS PROMPT IS A MEASURED ARTIFACT — its wording is A/B-tested on the live
|
|
111
|
-
* local model and the verdicts are recorded in VALIDATION-DEBT.md, so the table
|
|
112
|
-
* must emit BYTE-IDENTICAL text for the same findings. Two orders are
|
|
113
|
-
* load-bearing and they are NOT the same order:
|
|
101
|
+
* TWO ORDERS ARE LOAD-BEARING AND THEY ARE NOT THE SAME ORDER:
|
|
114
102
|
* - NOTICE BLOCKS are emitted in TABLE order (the order the rows appear below).
|
|
115
|
-
* - RULES are emitted sorted by `ruleId`, because the 4b…4g band
|
|
116
|
-
* hand-numbered
|
|
117
|
-
*
|
|
118
|
-
* A row whose rule is woven into the numbered narrative elsewhere (3b
|
|
119
|
-
*
|
|
103
|
+
* - RULES are emitted sorted by `ruleId`, because the 4b…4g band is
|
|
104
|
+
* hand-numbered and that numbering is what the notices cite ("rule 4b
|
|
105
|
+
* applies").
|
|
106
|
+
* A row whose rule is woven into the numbered narrative elsewhere (3b, 3f, 5c)
|
|
107
|
+
* carries `ruleId` for the reader and no `rule` text.
|
|
120
108
|
*/
|
|
121
109
|
/**
|
|
122
110
|
* What each probe channel's RAW probe returns — the one place a channel's shape
|
|
123
|
-
* is declared. `ProbeKey` is
|
|
124
|
-
* has a
|
|
125
|
-
*
|
|
111
|
+
* is declared. `ProbeKey` is `keyof ProbeRaw`, so a channel exists exactly when
|
|
112
|
+
* it has a line here. Deleting one is a compile error at BOTH of its other sites:
|
|
113
|
+
* the table row's `key` ("not assignable to type 'keyof ProbeRaw'") and the
|
|
114
|
+
* binding line in gate-deps' `buildVerifyProbes` ("does not exist in type
|
|
115
|
+
* 'VerifyProbes'").
|
|
126
116
|
*/
|
|
127
117
|
export interface ProbeRaw {
|
|
128
118
|
substitution: string[];
|
|
@@ -166,8 +156,8 @@ export declare const BOUND_PROBE_KEYS: readonly BoundProbeKey[];
|
|
|
166
156
|
* workspace, judge against ACCEPTANCE, and end on exactly one verdict line.
|
|
167
157
|
*
|
|
168
158
|
* `findings` is the probe bag: one key per PROBE_ADAPTERS row (see the table
|
|
169
|
-
* above for what each channel means
|
|
170
|
-
*
|
|
159
|
+
* above for what each channel means). A key that is absent or empty emits no
|
|
160
|
+
* block — the probes are independently optional.
|
|
171
161
|
*/
|
|
172
162
|
export declare function buildVerifyPrompt(spec: string, findings?: ProbeFindings, context?: {
|
|
173
163
|
/** Environment facts earlier gate children discovered — see env-notes.ts. */
|
|
@@ -176,9 +166,11 @@ export declare function buildVerifyPrompt(spec: string, findings?: ProbeFindings
|
|
|
176
166
|
contracts?: string;
|
|
177
167
|
}): string;
|
|
178
168
|
/**
|
|
179
|
-
* Parse the child's verdict
|
|
180
|
-
* marker
|
|
181
|
-
*
|
|
169
|
+
* Parse the child's verdict out of the LAST `WORK-VERIFIED: PASS|FAIL|UNOBSERVED`
|
|
170
|
+
* marker, case-insensitively. Last match wins: the model discusses before
|
|
171
|
+
* concluding, and a bash command it runs can print the token back, so an earlier
|
|
172
|
+
* occurrence is not the verdict. A marker with no trailing text gets a stock
|
|
173
|
+
* detail, so FAIL and UNOBSERVED are never bare.
|
|
182
174
|
*
|
|
183
175
|
* UNOBSERVED (rule 5c) is a distinct third outcome: a spec-required behavioral check
|
|
184
176
|
* could not run because its observation tooling is absent, so the behavior is neither
|
|
@@ -220,8 +212,8 @@ export interface VerificationDeps {
|
|
|
220
212
|
* `probes` below, all of which run BEFORE the child (and therefore before the
|
|
221
213
|
* child's own status widget exists). Called with a short label as each step
|
|
222
214
|
* starts, so the caller can keep a live line on screen through what was
|
|
223
|
-
* otherwise
|
|
224
|
-
*
|
|
215
|
+
* otherwise a long stretch of dead air. Wrapped in a try/catch by the caller,
|
|
216
|
+
* so a throwing hook cannot break the gate. ABSENT → no progress reporting. */
|
|
225
217
|
onStage?: (stage: string) => void;
|
|
226
218
|
/**
|
|
227
219
|
* The DETERMINISTIC probes, one optional thunk per channel (see `PROBE_ADAPTERS`
|
|
@@ -236,7 +228,7 @@ export interface VerificationDeps {
|
|
|
236
228
|
* Result of the git-state guard for the MOST RECENT runChild call (see
|
|
237
229
|
* git-state-guard.ts): did the child mutate repo state (stash/checkout/file
|
|
238
230
|
* rewrites), which the guard then restored? A verdict computed on a mutated
|
|
239
|
-
* tree is untrustworthy in BOTH directions —
|
|
231
|
+
* tree is untrustworthy in BOTH directions — a child that stashed the
|
|
240
232
|
* work away and judged an empty tree — so it is discarded: the first mutated
|
|
241
233
|
* run is retried once on the restored tree; a second mutation is a FAIL that
|
|
242
234
|
* names the behavior. ABSENT → no guard (tests / non-git repos), unchanged. */
|
|
@@ -259,16 +251,17 @@ export interface VerificationDeps {
|
|
|
259
251
|
* Per-run cross-slice contract registry (see contracts.ts): `read` supplies the
|
|
260
252
|
* verbatim interface facts the SOURCE design pins that more than one slice
|
|
261
253
|
* touches, injected so the verify child checks THIS slice's boundary against
|
|
262
|
-
* them
|
|
263
|
-
*
|
|
254
|
+
* them rather than only against itself. ABSENT/empty → no block (single
|
|
255
|
+
* `/task` runs, or a design pinning no shared boundary).
|
|
264
256
|
*/
|
|
265
257
|
contracts?: () => Promise<string>;
|
|
266
258
|
}
|
|
267
259
|
/**
|
|
268
|
-
* Run the verification pass for one task.
|
|
269
|
-
*
|
|
270
|
-
*
|
|
271
|
-
*
|
|
260
|
+
* Run the verification pass for one task. `repoHealth` runs first and can FAIL on
|
|
261
|
+
* its own; after it, a missing or empty spec is a pass. Otherwise the child runs
|
|
262
|
+
* against the real workspace and its verdict becomes an ok/blocked outcome. Never
|
|
263
|
+
* throws except on a user cancel, which propagates so the loop's USER_CANCELLED
|
|
264
|
+
* handler reports a clean "cancelled — resume".
|
|
272
265
|
*/
|
|
273
266
|
export declare function runWorkVerification(deps: VerificationDeps): Promise<VerifyOutcome>;
|
|
274
267
|
export { VERIFY_TOOLS };
|