@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,14 +1,12 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* render-check — one headless-browser page load against the booted app's live
|
|
3
|
-
* listener, judging whether the client actually RENDERED anything
|
|
4
|
-
* 11).
|
|
3
|
+
* listener, judging whether the client actually RENDERED anything.
|
|
5
4
|
*
|
|
6
|
-
* The failure class: every "renders without runtime errors" check in the
|
|
7
|
-
*
|
|
8
|
-
*
|
|
9
|
-
*
|
|
10
|
-
*
|
|
11
|
-
* The gate's boot check proves a LISTENER exists (run 10); this proves the
|
|
5
|
+
* The failure class: every other "renders without runtime errors" check in the
|
|
6
|
+
* pipeline is curl-shaped (boot-probe.ts says so at its own call site), and curl
|
|
7
|
+
* cannot execute JavaScript. An app whose client bundle throws on load answers
|
|
8
|
+
* HTTP 200 on every route and shows a permanently BLANK page, with every such
|
|
9
|
+
* check green. The gate's boot check proves a LISTENER exists; this proves the
|
|
12
10
|
* listener serves a page whose client code MOUNTS something.
|
|
13
11
|
*
|
|
14
12
|
* Mechanism, deterministic and dependency-free: discover a Chrome-family binary
|
|
@@ -16,9 +14,9 @@
|
|
|
16
14
|
* only found), load the page once with `--headless --dump-dom` (which executes the
|
|
17
15
|
* page's JS under a virtual-time budget), and judge the RENDERED body: it must
|
|
18
16
|
* contain visible text or concrete visual/interactive elements. A blank mount
|
|
19
|
-
* point after JS ran is the
|
|
20
|
-
* deliberately does NOT judge:
|
|
21
|
-
*
|
|
17
|
+
* point after JS ran is the class — FAIL with the body's shape. What it
|
|
18
|
+
* deliberately does NOT judge: whether what rendered is CORRECT. That needs app
|
|
19
|
+
* knowledge no generic gate has.
|
|
22
20
|
*
|
|
23
21
|
* Env-gap contract as everywhere: no browser found, a browser that cannot launch,
|
|
24
22
|
* or a dump that produced nothing → SKIP with a note (the caller surfaces it as
|
|
@@ -46,12 +44,10 @@ function onPath(bin) {
|
|
|
46
44
|
}
|
|
47
45
|
/**
|
|
48
46
|
* The newest Playwright-cache Chromium, if any — the HEADLESS SHELL preferred over
|
|
49
|
-
* the full build. Found, never installed: the cache exists on any box that ever
|
|
50
|
-
* Playwright browsers
|
|
51
|
-
*
|
|
52
|
-
*
|
|
53
|
-
* virtual-time budget (validated live on this box: shell exits 0 in ~1s, full
|
|
54
|
-
* chromium times out at 30s on the same http:// URL).
|
|
47
|
+
* the full build. Found, never installed: the cache exists on any box that ever
|
|
48
|
+
* ran Playwright browsers, which many projects install as a test dependency. The
|
|
49
|
+
* headless shell is preferred because it is purpose-built for exactly this — one
|
|
50
|
+
* `--dump-dom` and exit — with no browser UI to bring up.
|
|
55
51
|
*/
|
|
56
52
|
export function playwrightCachedChromium() {
|
|
57
53
|
const cache = process.env.PLAYWRIGHT_BROWSERS_PATH
|
|
@@ -146,17 +142,17 @@ export function judgeRenderedDom(html) {
|
|
|
146
142
|
const RENDER_TIMEOUT_MS = 30_000;
|
|
147
143
|
const VIRTUAL_TIME_BUDGET_MS = 8_000;
|
|
148
144
|
/**
|
|
149
|
-
* A Chrome console line on stderr:
|
|
145
|
+
* A Chrome console line on stderr, as chrome-headless-shell writes it:
|
|
150
146
|
*
|
|
151
|
-
* [
|
|
152
|
-
*
|
|
147
|
+
* [0830/084427.287122:INFO:CONSOLE:1] "Uncaught ReferenceError: process is
|
|
148
|
+
* not defined", source: http://127.0.0.1:8791/boom.html (1)
|
|
153
149
|
*
|
|
154
|
-
* Only the severity and the message survive. The bracketed
|
|
155
|
-
*
|
|
156
|
-
*
|
|
157
|
-
*
|
|
158
|
-
*
|
|
159
|
-
*
|
|
150
|
+
* Only the severity and the message survive. The bracketed timestamp prefix — some
|
|
151
|
+
* builds prepend a pid/tid pair too, which is why the prefix is matched loosely —
|
|
152
|
+
* is DROPPED on purpose: it changes every run, and the failure detail is the string
|
|
153
|
+
* `normalizeFailureDetail` (final-gate-progress.ts) compares across autofix
|
|
154
|
+
* attempts. A volatile prefix in there would make two runs of the SAME defect look
|
|
155
|
+
* different, silently changing the non-progress classifier's behaviour.
|
|
160
156
|
*/
|
|
161
157
|
const CONSOLE_LINE_RE = /^\[[^\]]*:(INFO|WARNING|ERROR|VERBOSE\d*):CONSOLE:\d*\]\s*(.*)$/;
|
|
162
158
|
/** At most this many console lines ride along; the whole block is clamped again. */
|
|
@@ -164,17 +160,10 @@ const MAX_CONSOLE_LINES = 12;
|
|
|
164
160
|
/**
|
|
165
161
|
* The page's console output, as captured while the DOM was being rendered.
|
|
166
162
|
*
|
|
167
|
-
*
|
|
168
|
-
*
|
|
169
|
-
*
|
|
170
|
-
*
|
|
171
|
-
* + --enable-logging=stderr --v=0 → 2 CONSOLE
|
|
172
|
-
* lines, one of them the cause
|
|
173
|
-
* playwright chrome-headless-shell
|
|
174
|
-
* → the 2 CONSOLE lines either way
|
|
175
|
-
*
|
|
176
|
-
* and in ALL FOUR arms stdout was byte-identical at 318 bytes, so the DOM the
|
|
177
|
-
* judge reads is untouched by the flags.
|
|
163
|
+
* `--enable-logging=stderr --v=0` is what routes the page's console to stderr.
|
|
164
|
+
* The DOM the judge reads is untouched by those flags: with and without them,
|
|
165
|
+
* `--dump-dom` writes byte-identical stdout on both binaries this probe can
|
|
166
|
+
* discover.
|
|
178
167
|
*/
|
|
179
168
|
export function parseConsoleLines(stderr) {
|
|
180
169
|
const out = [];
|
|
@@ -196,11 +185,9 @@ export function parseConsoleLines(stderr) {
|
|
|
196
185
|
/**
|
|
197
186
|
* Append the console output to a FAIL detail — and to nothing else.
|
|
198
187
|
*
|
|
199
|
-
*
|
|
200
|
-
*
|
|
201
|
-
*
|
|
202
|
-
* probe was holding the answer the whole time: `Uncaught ReferenceError: process
|
|
203
|
-
* is not defined`, at main.js:322.
|
|
188
|
+
* Without it the fix child is told "the body is EMPTY" and nothing more, while the
|
|
189
|
+
* probe was holding the cause the whole time: the page's own
|
|
190
|
+
* `Uncaught ReferenceError`, with the source file and line Chrome already printed.
|
|
204
191
|
*
|
|
205
192
|
* Strictly additive by construction: it takes an existing FAIL detail and returns
|
|
206
193
|
* it with text appended. It cannot turn a PASS into a FAIL, cannot reach
|
|
@@ -232,9 +219,9 @@ export function runRenderCheck(url, browser) {
|
|
|
232
219
|
'--no-sandbox',
|
|
233
220
|
'--disable-dev-shm-usage',
|
|
234
221
|
`--virtual-time-budget=${VIRTUAL_TIME_BUDGET_MS}`,
|
|
235
|
-
// Route the page's console to stderr
|
|
236
|
-
//
|
|
237
|
-
//
|
|
222
|
+
// Route the page's console to stderr. stdout — the DOM the judge
|
|
223
|
+
// reads — is byte-identical with and without these; see
|
|
224
|
+
// parseConsoleLines.
|
|
238
225
|
'--enable-logging=stderr',
|
|
239
226
|
'--v=0',
|
|
240
227
|
'--dump-dom',
|
|
@@ -255,7 +242,7 @@ export function runRenderCheck(url, browser) {
|
|
|
255
242
|
}
|
|
256
243
|
const judged = judgeRenderedDom(dom);
|
|
257
244
|
// The verdict is the judge's, unchanged. Only a FAIL grows: it carries the
|
|
258
|
-
// console output the probe already had at the moment it judged
|
|
245
|
+
// console output the probe already had at the moment it judged.
|
|
259
246
|
return judged.ok ?
|
|
260
247
|
{ outcome: 'pass', detail: judged.detail }
|
|
261
248
|
: { outcome: 'fail', detail: withConsoleEvidence(judged.detail, r.stderr ?? '') };
|
|
@@ -9,11 +9,10 @@ export interface HealthOutcome {
|
|
|
9
9
|
ecosystem: string | null;
|
|
10
10
|
/**
|
|
11
11
|
* First lines of the failing command's combined stderr+stdout — captured so a
|
|
12
|
-
* FAIL is explainable from artifacts alone.
|
|
13
|
-
*
|
|
14
|
-
*
|
|
15
|
-
*
|
|
16
|
-
* Empty string on pass / skip.
|
|
12
|
+
* FAIL is explainable from artifacts alone. The exit code alone does not say
|
|
13
|
+
* what happened: eslint exits 1 for findings and 2 when it could not run at
|
|
14
|
+
* all (a missing config, say), so "`bun run lint` exited 2" is unreproducible
|
|
15
|
+
* after the fact unless the output was kept. Empty string on pass / skip.
|
|
17
16
|
*/
|
|
18
17
|
output: string;
|
|
19
18
|
}
|
|
@@ -41,17 +40,14 @@ export type HealthProgress = (command: string) => void;
|
|
|
41
40
|
* treated as an environment gap, not a fault.
|
|
42
41
|
* - A command that ran and exited non-zero → the first such failure is returned.
|
|
43
42
|
*
|
|
44
|
-
* This module owns DISCOVERY and its own output policy
|
|
45
|
-
* deciding what its ending MEANS is `command-run.ts`'s
|
|
46
|
-
*
|
|
47
|
-
*
|
|
48
|
-
* suite spawned a real shell. `command-run.ts`'s own header notes that this module
|
|
49
|
-
* "had solved exactly this shape years earlier" and the gate never adopted it; this
|
|
50
|
-
* is the adoption, in the other direction.
|
|
43
|
+
* This module owns DISCOVERY and its own output policy. Running a command and
|
|
44
|
+
* deciding what its ending MEANS is `command-run.ts`'s — one statement of the
|
|
45
|
+
* env-gap ladder, with an injectable runner, so a classification case needs no
|
|
46
|
+
* real shell.
|
|
51
47
|
*
|
|
52
48
|
* `captureHealthOutput` stays this module's own: 40 lines of a linter's report is a
|
|
53
|
-
* real difference from `outputTail`'s 400
|
|
54
|
-
* thing to unify.
|
|
49
|
+
* real difference from `outputTail`'s 400-character default, and that is a
|
|
50
|
+
* parameter, not a thing to unify.
|
|
55
51
|
*
|
|
56
52
|
* `onCommand` lets the caller name the running command in a live status line — the
|
|
57
53
|
* gate runs this immediately after the implementation turn ends, when the impl
|
|
@@ -1,27 +1,24 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* repo-health-check — the deterministic, whole-repo half of the verify gate.
|
|
3
3
|
*
|
|
4
|
-
* The failure this closes
|
|
5
|
-
* task
|
|
6
|
-
*
|
|
7
|
-
*
|
|
8
|
-
* 5 runs/arm on the real dirty tree: the tsc-only task false-PASSed 5/5 while
|
|
9
|
-
* `bun run lint` reported 11 errors. The model gate is only ever as good as the
|
|
4
|
+
* The failure this closes: the task's own composed VERIFY block is authored
|
|
5
|
+
* per-task by a model, so what it covers varies. One task lints the whole repo;
|
|
6
|
+
* the next ships a VERIFY of `tsc --noEmit` and no lint at all, and a lint-only
|
|
7
|
+
* regression then passes its gate. The model gate is only ever as good as the
|
|
10
8
|
* VERIFY block it happened to be handed.
|
|
11
9
|
*
|
|
12
10
|
* This check does NOT depend on that block. It discovers the project's OWN
|
|
13
11
|
* whole-repo static-analysis command (the one a fresh checkout / CI would run) and
|
|
14
12
|
* lets its REAL exit code decide — no model, so there is no per-file narrowing and
|
|
15
|
-
* no "those errors aren't in my files" gray area. A non-zero exit
|
|
16
|
-
*
|
|
17
|
-
*
|
|
13
|
+
* no "those errors aren't in my files" gray area. A non-zero exit becomes the
|
|
14
|
+
* verify gate's `repo-health` FAIL (verify-work.ts), which reaches the
|
|
15
|
+
* AUTOFIX / ACCEPT picker in verify-resolution.ts.
|
|
18
16
|
*
|
|
19
17
|
* Scope is deliberately STATIC ANALYSIS ONLY (lint / typecheck / clippy / vet), never
|
|
20
18
|
* `test`, `build`, `run`, or anything that boots a server or needs a database. Those
|
|
21
19
|
* depend on external services the verify prompt already carves out as an environment
|
|
22
|
-
* gap
|
|
23
|
-
*
|
|
24
|
-
* no fixtures, and it is exactly the class of the reported defect.
|
|
20
|
+
* gap, so running them here would blame code for a missing database. Static analysis
|
|
21
|
+
* is hermetic: it needs no network, no service and no fixtures.
|
|
25
22
|
*
|
|
26
23
|
* Absence is a PASS, two ways: (1) no recognised manifest at all (a pure-docs or
|
|
27
24
|
* config-only repo has nothing that can regress); (2) a manifest with no static-check
|
|
@@ -78,7 +75,7 @@ export function discoverHealthCommands(cwd) {
|
|
|
78
75
|
if (existsSync(path.join(cwd, 'package.json'))) {
|
|
79
76
|
const s = packageScripts(cwd);
|
|
80
77
|
const cmds = [];
|
|
81
|
-
// Only static-analysis scripts. `lint` commonly chains tsc (as in
|
|
78
|
+
// Only static-analysis scripts. `lint` commonly chains tsc (as in this
|
|
82
79
|
// `prettier && eslint && tsc`), so a single `bun run lint` covers both.
|
|
83
80
|
for (const name of ['lint', 'typecheck']) {
|
|
84
81
|
if (s[name])
|
|
@@ -118,17 +115,14 @@ function noCommandOutcome(ecosystem) {
|
|
|
118
115
|
* treated as an environment gap, not a fault.
|
|
119
116
|
* - A command that ran and exited non-zero → the first such failure is returned.
|
|
120
117
|
*
|
|
121
|
-
* This module owns DISCOVERY and its own output policy
|
|
122
|
-
* deciding what its ending MEANS is `command-run.ts`'s
|
|
123
|
-
*
|
|
124
|
-
*
|
|
125
|
-
* suite spawned a real shell. `command-run.ts`'s own header notes that this module
|
|
126
|
-
* "had solved exactly this shape years earlier" and the gate never adopted it; this
|
|
127
|
-
* is the adoption, in the other direction.
|
|
118
|
+
* This module owns DISCOVERY and its own output policy. Running a command and
|
|
119
|
+
* deciding what its ending MEANS is `command-run.ts`'s — one statement of the
|
|
120
|
+
* env-gap ladder, with an injectable runner, so a classification case needs no
|
|
121
|
+
* real shell.
|
|
128
122
|
*
|
|
129
123
|
* `captureHealthOutput` stays this module's own: 40 lines of a linter's report is a
|
|
130
|
-
* real difference from `outputTail`'s 400
|
|
131
|
-
* thing to unify.
|
|
124
|
+
* real difference from `outputTail`'s 400-character default, and that is a
|
|
125
|
+
* parameter, not a thing to unify.
|
|
132
126
|
*
|
|
133
127
|
* `onCommand` lets the caller name the running command in a live status line — the
|
|
134
128
|
* gate runs this immediately after the implementation turn ends, when the impl
|
|
@@ -141,7 +135,7 @@ export async function runRepoHealthCheck(cwd, opts = {}) {
|
|
|
141
135
|
const run = opts.run ?? spawnCommand;
|
|
142
136
|
for (const [bin, args] of cmds) {
|
|
143
137
|
opts.onCommand?.(`${bin} ${args.join(' ')}`);
|
|
144
|
-
// Runner resolution
|
|
138
|
+
// Runner resolution: a PATH-stripped environment must not
|
|
145
139
|
// silently skip the statics when the runner sits at a known install
|
|
146
140
|
// location; the resolved dir also rides on PATH for the script chain.
|
|
147
141
|
const runner = resolveRunner(bin);
|
|
@@ -13,16 +13,12 @@ export declare function parseRequirementLines(text: string): RequirementEntry[];
|
|
|
13
13
|
* passages from doc-order truncation. */
|
|
14
14
|
export declare function keepGroundedRequirements(entries: RequirementEntry[], sourceDoc: string): RequirementEntry[];
|
|
15
15
|
/**
|
|
16
|
-
* Bound the list WITHOUT doc-order truncation.
|
|
17
|
-
* the
|
|
18
|
-
*
|
|
19
|
-
*
|
|
20
|
-
*
|
|
21
|
-
*
|
|
22
|
-
* (mx5 run 16, measured live: the model emitted 185 requirements, 178
|
|
23
|
-
* grounded — INCLUDING §9's "serves `/api` + static `dist/`", the clause
|
|
24
|
-
* whose loss shipped a permanently blank app — and the cap's doc-order fill
|
|
25
|
-
* cut all 138 past the cap, every one from the design's tail).
|
|
16
|
+
* Bound the list WITHOUT doc-order truncation. An extractor that works top-down
|
|
17
|
+
* yields more entries than the cap from the doc's early sections alone, so a
|
|
18
|
+
* plain first-N cap drops the TAIL sections wholesale — and a spec keeps its
|
|
19
|
+
* testing and deployment obligations at the end. "Given order" as the tie-break
|
|
20
|
+
* re-creates the same bias one level up.
|
|
21
|
+
*
|
|
26
22
|
* Rule (deterministic priority, not a knob): entries quoting an obligation-
|
|
27
23
|
* marked passage survive first; the remaining budget is filled ROUND-ROBIN
|
|
28
24
|
* across the source doc's sections (each section's entries in doc order), so
|
|
@@ -32,9 +28,9 @@ export declare function keepGroundedRequirements(entries: RequirementEntry[], so
|
|
|
32
28
|
* cannot be located) the fill degrades to the old given-order behavior.
|
|
33
29
|
*/
|
|
34
30
|
export declare function capRequirements(entries: RequirementEntry[], passages: string[], sourceDoc?: string,
|
|
35
|
-
/**
|
|
36
|
-
*
|
|
37
|
-
*
|
|
31
|
+
/** `false` skips the low-value deprioritisation, so a caller can compare the
|
|
32
|
+
* two fills without transcribing sectionFairFill. Production never passes it
|
|
33
|
+
* — auto-orchestrator.ts calls this with three arguments. */
|
|
38
34
|
deprioritiseLowValue?: boolean): RequirementEntry[];
|
|
39
35
|
/**
|
|
40
36
|
* Quotes that pass the grounding guard (verbatim substring of the doc) but state
|
|
@@ -46,11 +42,11 @@ export declare function isLowValueQuote(quote: string): boolean;
|
|
|
46
42
|
/**
|
|
47
43
|
* DETERMINISTIC RECALL FLOOR (same medicine as the launch-contract checklist):
|
|
48
44
|
* paragraphs carrying an obligation marker (word-bounded "required"/"must").
|
|
49
|
-
* Extraction recall over a
|
|
50
|
-
*
|
|
51
|
-
*
|
|
52
|
-
*
|
|
53
|
-
*
|
|
45
|
+
* Extraction recall over a long doc is the model's, and it varies run to run, so
|
|
46
|
+
* an entire section can come back with no quotes at all. The host enumerates the
|
|
47
|
+
* marked passages; the prompt lists their head lines as a checklist, and
|
|
48
|
+
* uncoveredPassages() below turns "a marked passage produced no quote" into hard
|
|
49
|
+
* evidence for one forced re-extraction.
|
|
54
50
|
*/
|
|
55
51
|
export declare function enumerateObligationPassages(doc: string): string[];
|
|
56
52
|
/** Marked passages none of the kept quotes came from — the hard evidence that
|
|
@@ -106,22 +102,23 @@ export declare function readRequirements(cwd: string): Promise<string>;
|
|
|
106
102
|
* • `unresolved` — grounded requirements still unmapped after the retry rounds.
|
|
107
103
|
* • `judgeFlagged` — free-text areas the holistic coverage judge flagged as
|
|
108
104
|
* uncovered that requirement-extraction never captured as a tracked entry, so
|
|
109
|
-
* the grounded channels above are structurally blind to them
|
|
110
|
-
*
|
|
111
|
-
*
|
|
112
|
-
*
|
|
113
|
-
* obligation.
|
|
105
|
+
* the grounded channels above are structurally blind to them: without this
|
|
106
|
+
* channel such an area is warned about once and then dropped. These are plain
|
|
107
|
+
* strings, not quotes of the source; marked distinctly so a task can tell an
|
|
108
|
+
* inferred area from a verbatim obligation.
|
|
114
109
|
* • `danglingArtifacts` — runtime files the spec references but nothing
|
|
115
|
-
* produces (
|
|
116
|
-
* build output ever
|
|
110
|
+
* produces (an `index.html` the server serves that no task, tree entry or
|
|
111
|
+
* build output ever creates), still unclaimed by any title at coverage
|
|
117
112
|
* exhaustion. Deterministically extracted (artifact-closure.ts), so like
|
|
118
113
|
* judge areas they are host-authored strings, not source quotes.
|
|
119
114
|
*/
|
|
120
115
|
export declare function appendCarriedRequirements(cwd: string, crossCutting: RequirementEntry[], unresolved?: RequirementEntry[], judgeFlagged?: string[], danglingArtifacts?: string[]): Promise<void>;
|
|
121
116
|
/**
|
|
122
117
|
* The read-only block refine/compose receive when carried requirements exist.
|
|
123
|
-
* Verbatim content travels with every task
|
|
124
|
-
*
|
|
118
|
+
* Verbatim content travels with every task — the REFINE_PRESERVE_DIRECTIVE
|
|
119
|
+
* pattern in phases.ts, content rather than a pointer — and the VERIFY mandate is
|
|
120
|
+
* spelled out, so a mandated verification methodology reaches every applicable
|
|
121
|
+
* task's runnable checks.
|
|
125
122
|
*/
|
|
126
123
|
export declare function buildRequirementsBlock(requirements: string): string;
|
|
127
124
|
export interface OwnedRequirement {
|
|
@@ -133,7 +130,7 @@ export interface OwnedRequirement {
|
|
|
133
130
|
* plan time, and spliced repair tasks shift them). */
|
|
134
131
|
title: string;
|
|
135
132
|
/**
|
|
136
|
-
* DETACHED
|
|
133
|
+
* DETACHED: the files this obligation
|
|
137
134
|
* names that its assigned task FROZE, making it unsatisfiable there. While
|
|
138
135
|
* set, the entry is owned by nobody — `ownedForTitle` skips it — and `title`
|
|
139
136
|
* records only where it came from. The next task whose refined prompt shows
|
|
@@ -162,50 +159,20 @@ export declare function ownedForTitle(owned: OwnedRequirement[], title: string):
|
|
|
162
159
|
* task's obligations and must survive into the spec. */
|
|
163
160
|
export declare function buildOwnedRequirementsBlock(owned: OwnedRequirement[]): string;
|
|
164
161
|
/**
|
|
165
|
-
*
|
|
166
|
-
*
|
|
167
|
-
*
|
|
168
|
-
* .
|
|
169
|
-
*
|
|
170
|
-
*
|
|
171
|
-
*
|
|
172
|
-
* quote appears anywhere in the spec — belt-obeying reps aren't double-stated.
|
|
173
|
-
* No CONSTRAINTS section (shape-invalid spec) → returned unchanged; this runs
|
|
174
|
-
* only on specs the shape gate already accepted.
|
|
175
|
-
*
|
|
176
|
-
* NOT EXTENDED TO CONSUMER TASKS — REFUTED AT STEP 0, 2026-07-27. The proposal
|
|
177
|
-
* was to classify owned requirements INVARIANT (prohibition-shaped) vs
|
|
178
|
-
* DELIVERABLE and propagate the INVARIANTs from here to every task whose spec
|
|
179
|
-
* names the same symbol/file, because mx5 run 17 gave all three Hono-RPC
|
|
180
|
-
* obligations to TASK_0021 (which complied perfectly) while the four CONSUMER
|
|
181
|
-
* tasks that never saw them — 0027/0031/0033/0034 — hand-wrote casts and shipped
|
|
182
|
-
* 7 dead client call sites. It was not built, for two measured reasons
|
|
183
|
-
* (scripts/owned-consumer-generality-step0.ts, re-runnable):
|
|
184
|
-
*
|
|
185
|
-
* 1. IT DOES NOT GENERALIZE. The task's own kill condition was <20% of a second
|
|
186
|
-
* stack's OWNED requirements being prohibition-shaped. IAR1, 8 live
|
|
187
|
-
* regenerations of the real plan-time pipeline over its real 10-task list:
|
|
188
|
-
* 2/42 pooled = 4.8% (narrow four-phrase reading 1/42 = 2.4%). mx5 itself is
|
|
189
|
-
* 7/33 = 21.2% only under the BROAD rule above; under "never/don't/must
|
|
190
|
-
* not/do not" it is 2/33 = 6.1%. The structural reason is in accountCoverage
|
|
191
|
-
* right here: a prohibition the map leaves NONE is already carried
|
|
192
|
-
* cross-cutting to every task, so in the five reps that logged the split 18
|
|
193
|
-
* of IAR1's 19 prohibition-shaped requirements were never owner-only in the
|
|
194
|
-
* first place. mx5's 7 leaked because the model mapped them to a TASK.
|
|
195
|
-
* 2. THE TARGETING RULE MISSES ITS OWN MOTIVATING CASE. Symbol/file relevance
|
|
196
|
-
* would not have reached the four violators for the clause they actually
|
|
197
|
-
* broke ("If a call isn't fully typed end-to-end via `hc`, fix the route
|
|
198
|
-
* chaining/export, don't paper over it…"): its only extractable symbol is
|
|
199
|
-
* `chaining/export`, which no consumer spec contains — 0 consumers. Its
|
|
200
|
-
* siblings would have reached all four, attaching to 13/41 tasks each; across
|
|
201
|
-
* mx5's 33 owned requirements the mean attach rate is 21% of all tasks and
|
|
202
|
-
* 5/33 would attach to more than half of them (the task's own I1 trigger).
|
|
162
|
+
* The host-side belt for the owned channel: deterministically append each owned
|
|
163
|
+
* obligation the composed spec does not already carry as a CONSTRAINTS bullet.
|
|
164
|
+
* The injected block alone is an instruction compose can ignore; an append
|
|
165
|
+
* cannot be. "Already carries" = the normalised quote appears anywhere in the
|
|
166
|
+
* spec, so a spec that DID fold the clause in is not double-stated. No
|
|
167
|
+
* CONSTRAINTS section → returned unchanged; this runs only on specs the shape
|
|
168
|
+
* gate already accepted.
|
|
203
169
|
*
|
|
204
|
-
*
|
|
205
|
-
*
|
|
206
|
-
*
|
|
170
|
+
* Scoped to the OWNING task only. A prohibition the coverage map leaves unowned is
|
|
171
|
+
* already carried cross-cutting to every task by `accountCoverage` above, so the
|
|
172
|
+
* owned channel is not the place to reach a requirement's other readers.
|
|
207
173
|
*/
|
|
208
174
|
export declare function appendOwnedConstraints(spec: string, owned: OwnedRequirement[]): string;
|
|
209
|
-
/** The decompose-prompt ledger block
|
|
210
|
-
*
|
|
175
|
+
/** The decompose-prompt ledger block: the grounded requirement list rides into
|
|
176
|
+
* decompose so a title list that mirrors the spec's own headings cannot
|
|
177
|
+
* discharge it. */
|
|
211
178
|
export declare function buildRequirementsLedger(requirements: RequirementEntry[]): string;
|