@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,36 +1,12 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Where the NEXT question comes from — the other half of `question-dialog.ts
|
|
2
|
+
* Where the NEXT question comes from — the other half of `question-dialog.ts`,
|
|
3
|
+
* which owns the ANSWER side.
|
|
3
4
|
*
|
|
4
|
-
*
|
|
5
|
-
*
|
|
6
|
-
*
|
|
7
|
-
*
|
|
8
|
-
*
|
|
9
|
-
* dedupe → spend one corrective re-prompt → yield or exhaust — was left behind,
|
|
10
|
-
* and it had drifted between the two loops that use the SAME parser on the SAME
|
|
11
|
-
* prompt format (`plan-prompts.ts` says `parseClarifyList` parses it "UNCHANGED";
|
|
12
|
-
* `auto-prompts.ts` specifies the identical shape).
|
|
13
|
-
*
|
|
14
|
-
* The five drifts, all in clarify's favour of being wrong:
|
|
15
|
-
*
|
|
16
|
-
* 1. **Which entry is the question.** `parseClarifyList` pushes an entry for
|
|
17
|
-
* EVERY numbered line, and the local model writes numbered analysis notes
|
|
18
|
-
* before the question it was asked for (measured live). `pickQuestion` prefers
|
|
19
|
-
* the first entry carrying a `SUGGESTED:` line; clarify took `parsed[0]`
|
|
20
|
-
* blindly, showing the note as the question and losing the recommendation
|
|
21
|
-
* attached further down.
|
|
22
|
-
* 2. **NONE vs unparseable.** The parser returns `[]` for both. Clarify's
|
|
23
|
-
* `if (parsed.length === 0) break` ended the whole clarify — and decomposed the
|
|
24
|
-
* feature with ZERO clarifications — on a formatting slip.
|
|
25
|
-
* 3. **A re-typed sentinel.** `isNoneReply`'s regex was a byte-identical second
|
|
26
|
-
* copy of the parser's own.
|
|
27
|
-
* 4. **Missing SUGGESTED** bought one corrective re-prompt in plan and none in
|
|
28
|
-
* clarify, so clarify showed a card-less question.
|
|
29
|
-
* 5. **The deferral guard.** It exists because an accepted "clarify with the user
|
|
30
|
-
* before proceeding" rode into `/task`'s handoff AS AN AUTHORITATIVE DECISION
|
|
31
|
-
* and produced a task whose VERIFY asserted no source file had changed.
|
|
32
|
-
* Clarify's answers ride into the decompose prompt and the AUTO file with
|
|
33
|
-
* exactly the same authority, and had no guard.
|
|
5
|
+
* One state machine: generate → parse → pick the real question → dedupe → spend
|
|
6
|
+
* one corrective re-prompt → yield or exhaust. Two loops drive it, `/task-auto`'s
|
|
7
|
+
* clarify and `/task-plan`, and they use the SAME parser on the SAME prompt format
|
|
8
|
+
* — plan-prompts.ts says `parseClarifyList` parses its output UNCHANGED, and
|
|
9
|
+
* auto-prompts.ts specifies the identical shape.
|
|
34
10
|
*
|
|
35
11
|
* NOT unified here: grill's generation loop. It uses a different parser
|
|
36
12
|
* (`parseGrillQuestions`, which yields bare strings) and has no `SUGGESTED` at
|
|
@@ -43,11 +19,9 @@ import { parseClarifyList } from './parsers.js';
|
|
|
43
19
|
import { DUP_REPROMPT_HINT, isDuplicateQuestion, MAX_DUP_STRIKES } from './question-dedup.js';
|
|
44
20
|
import { stripInlineMarkdown } from './inline-markdown.js';
|
|
45
21
|
/**
|
|
46
|
-
*
|
|
47
|
-
*
|
|
48
|
-
*
|
|
49
|
-
* "matches /task-auto's MAX_CLARIFY_QUESTIONS, for the same reason". They bound
|
|
50
|
-
* the same thing for the same reason; this is that reason, once.
|
|
22
|
+
* Default cap on distinct questions ONE adaptive dialog may ask. Both live
|
|
23
|
+
* callers pass their own constant of the same value instead
|
|
24
|
+
* (MAX_CLARIFY_QUESTIONS, MAX_PLAN_QUESTIONS); this is what an unset `cap` gets.
|
|
51
25
|
*/
|
|
52
26
|
export const MAX_DIALOG_QUESTIONS = 8;
|
|
53
27
|
/** True when the reply is the deliberate "nothing left to ask" sentinel, as
|
|
@@ -58,13 +32,12 @@ export function isNoneReply(raw) {
|
|
|
58
32
|
/**
|
|
59
33
|
* Which of the parsed entries is the actual question.
|
|
60
34
|
*
|
|
61
|
-
* `parseClarifyList` turns EVERY numbered line into an entry, and
|
|
62
|
-
*
|
|
63
|
-
*
|
|
64
|
-
*
|
|
65
|
-
*
|
|
66
|
-
*
|
|
67
|
-
* attaches it to the entry it follows.
|
|
35
|
+
* `parseClarifyList` turns EVERY numbered line into an entry, and a model that
|
|
36
|
+
* writes a numbered analysis note before the question it was asked for produces
|
|
37
|
+
* more than one. Taking entry 0 blindly then shows the note as the question and
|
|
38
|
+
* loses the SUGGESTED line attached further down. The prompt requires exactly one
|
|
39
|
+
* SUGGESTED, and the parser attaches it to the entry it follows, so preferring the
|
|
40
|
+
* entry that HAS one lands on the real question.
|
|
68
41
|
*/
|
|
69
42
|
export function pickQuestion(parsed) {
|
|
70
43
|
return parsed.find(q => q.suggested !== undefined && q.suggested.length > 0) ?? parsed[0];
|
|
@@ -98,17 +71,16 @@ export function makeQuestionSource(deps) {
|
|
|
98
71
|
const parsed = parseClarifyList(raw);
|
|
99
72
|
if (parsed.length === 0) {
|
|
100
73
|
// `[]` means BOTH "deliberate NONE" and "could not parse". Ending
|
|
101
|
-
// the dialog on the second
|
|
102
|
-
//
|
|
74
|
+
// the dialog on the second would decompose the feature with zero
|
|
75
|
+
// clarifications because of one formatting slip.
|
|
103
76
|
if (!isNoneReply(raw) && hint === null) {
|
|
104
77
|
deps.log?.('unparseable question reply — one format re-prompt');
|
|
105
78
|
hint = deps.formatHint;
|
|
106
79
|
continue;
|
|
107
80
|
}
|
|
108
|
-
// A SECOND unreadable reply is not a NONE
|
|
109
|
-
//
|
|
110
|
-
//
|
|
111
|
-
// the model produced two malformed replies.
|
|
81
|
+
// A SECOND unreadable reply is not a NONE: the caller is told
|
|
82
|
+
// 'unparseable', so nothing writes "model has no further
|
|
83
|
+
// questions" on a run that produced two malformed replies.
|
|
112
84
|
if (!isNoneReply(raw)) {
|
|
113
85
|
deps.log?.('second unparseable reply — giving up on this draw');
|
|
114
86
|
hint = null;
|
|
@@ -163,8 +135,7 @@ export function makeQuestionSource(deps) {
|
|
|
163
135
|
*
|
|
164
136
|
* `/task-plan` lets the user ask the model a question or state a decision
|
|
165
137
|
* mid-session; that is new context, so a generator that had struck out may now
|
|
166
|
-
* have something novel.
|
|
167
|
-
* for exactly this; the budget lives here now, so the reset has to.
|
|
138
|
+
* have something novel.
|
|
168
139
|
*/
|
|
169
140
|
function reopen() {
|
|
170
141
|
dupStrikes = 0;
|
|
@@ -1,43 +1,22 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* A refutation is a DELETION, not an addition.
|
|
3
3
|
*
|
|
4
|
-
*
|
|
5
|
-
*
|
|
6
|
-
*
|
|
7
|
-
*
|
|
4
|
+
* The failure this closes: refine writes a dependency into CONSTRAINTS that the
|
|
5
|
+
* design rules out, the run's own research says so in its CONTEXT section, and
|
|
6
|
+
* compose reads both and hardens the invention into a prohibition against the API
|
|
7
|
+
* the repo actually uses. An appended correction loses to the text it contradicts,
|
|
8
|
+
* because CONSTRAINTS is what the implementer is told is authoritative.
|
|
8
9
|
*
|
|
9
|
-
*
|
|
10
|
-
*
|
|
11
|
-
*
|
|
12
|
-
*
|
|
13
|
-
* `@node-rs/argon2` dependency needed despite the
|
|
14
|
-
* task's mention of it."
|
|
15
|
-
* :132 spec CONSTRAINTS "Do NOT use built-in `Bun.password` for hashing —
|
|
16
|
-
* the refined task explicitly requires `argon2`."
|
|
17
|
-
*
|
|
18
|
-
* `argon2@^0.41.0` shipped as a runtime dependency of a repo that never imports
|
|
19
|
-
* it, locked in by a VERIFY assertion, next to a spec telling the next
|
|
20
|
-
* implementer not to use `Bun.sql` — the API the whole data layer is built on.
|
|
21
|
-
*
|
|
22
|
-
* This is `memory/phantom-correction-additive-not-subtractive.md` at spec scale:
|
|
23
|
-
* the correction was APPENDED to research CONTEXT while the wrong text stayed in
|
|
24
|
-
* refine's CONSTRAINTS, and CONSTRAINTS is what the implementer is told is
|
|
25
|
-
* authoritative.
|
|
26
|
-
*
|
|
27
|
-
* THE LEVER. Deterministic detection, then a scoped removal, BEFORE compose sees
|
|
28
|
-
* the refined task. Never a model rewrite: every model-rewrite lever at this seam
|
|
29
|
-
* has resolved contradictions by deleting the AUTHORITATIVE side
|
|
30
|
-
* (`memory/owned-freeze-critique-lever-refuted.md`, 11/20). This pass can only
|
|
31
|
-
* delete a refine-invented token, and can never touch an owned line.
|
|
10
|
+
* So the correction is SUBTRACTIVE, and it runs before compose sees the refined
|
|
11
|
+
* task (phases.ts `composeCarry`). Never a model rewrite: this pass can only
|
|
12
|
+
* delete a refine-invented token, and it skips any line carrying the
|
|
13
|
+
* owned-requirement stamp.
|
|
32
14
|
*
|
|
33
15
|
* The match is lexical, never semantic: a research CONTEXT bullet refutes a
|
|
34
16
|
* refine constraint when it carries one of a closed set of negation-of-need
|
|
35
17
|
* shapes AROUND a backticked token, and that same token appears backticked in a
|
|
36
18
|
* refine CONSTRAINTS line. Both sides are already separate strings in the task
|
|
37
19
|
* file.
|
|
38
|
-
*
|
|
39
|
-
* STEP 0 (`scripts/refuted-constraint-baserate.ts`) measured the closed set over
|
|
40
|
-
* every recorded task file in the corpus before any of it was wired.
|
|
41
20
|
*/
|
|
42
21
|
export type Refutation = {
|
|
43
22
|
/** The token as it appears inside the backticks, e.g. `argon2`. */
|
|
@@ -77,6 +56,7 @@ export type RefutationResult = {
|
|
|
77
56
|
};
|
|
78
57
|
/**
|
|
79
58
|
* Apply every detected refutation to the refined prompt. Purely subtractive: the
|
|
80
|
-
* result is always a character subsequence of the input
|
|
59
|
+
* result is always a character subsequence of the input, which
|
|
60
|
+
* refuted-constraint.test.ts asserts under `inv-no-line-invention`.
|
|
81
61
|
*/
|
|
82
62
|
export declare function applyRefutations(refined: string, research: string): RefutationResult;
|
|
@@ -1,43 +1,22 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* A refutation is a DELETION, not an addition.
|
|
3
3
|
*
|
|
4
|
-
*
|
|
5
|
-
*
|
|
6
|
-
*
|
|
7
|
-
*
|
|
4
|
+
* The failure this closes: refine writes a dependency into CONSTRAINTS that the
|
|
5
|
+
* design rules out, the run's own research says so in its CONTEXT section, and
|
|
6
|
+
* compose reads both and hardens the invention into a prohibition against the API
|
|
7
|
+
* the repo actually uses. An appended correction loses to the text it contradicts,
|
|
8
|
+
* because CONSTRAINTS is what the implementer is told is authoritative.
|
|
8
9
|
*
|
|
9
|
-
*
|
|
10
|
-
*
|
|
11
|
-
*
|
|
12
|
-
*
|
|
13
|
-
* `@node-rs/argon2` dependency needed despite the
|
|
14
|
-
* task's mention of it."
|
|
15
|
-
* :132 spec CONSTRAINTS "Do NOT use built-in `Bun.password` for hashing —
|
|
16
|
-
* the refined task explicitly requires `argon2`."
|
|
17
|
-
*
|
|
18
|
-
* `argon2@^0.41.0` shipped as a runtime dependency of a repo that never imports
|
|
19
|
-
* it, locked in by a VERIFY assertion, next to a spec telling the next
|
|
20
|
-
* implementer not to use `Bun.sql` — the API the whole data layer is built on.
|
|
21
|
-
*
|
|
22
|
-
* This is `memory/phantom-correction-additive-not-subtractive.md` at spec scale:
|
|
23
|
-
* the correction was APPENDED to research CONTEXT while the wrong text stayed in
|
|
24
|
-
* refine's CONSTRAINTS, and CONSTRAINTS is what the implementer is told is
|
|
25
|
-
* authoritative.
|
|
26
|
-
*
|
|
27
|
-
* THE LEVER. Deterministic detection, then a scoped removal, BEFORE compose sees
|
|
28
|
-
* the refined task. Never a model rewrite: every model-rewrite lever at this seam
|
|
29
|
-
* has resolved contradictions by deleting the AUTHORITATIVE side
|
|
30
|
-
* (`memory/owned-freeze-critique-lever-refuted.md`, 11/20). This pass can only
|
|
31
|
-
* delete a refine-invented token, and can never touch an owned line.
|
|
10
|
+
* So the correction is SUBTRACTIVE, and it runs before compose sees the refined
|
|
11
|
+
* task (phases.ts `composeCarry`). Never a model rewrite: this pass can only
|
|
12
|
+
* delete a refine-invented token, and it skips any line carrying the
|
|
13
|
+
* owned-requirement stamp.
|
|
32
14
|
*
|
|
33
15
|
* The match is lexical, never semantic: a research CONTEXT bullet refutes a
|
|
34
16
|
* refine constraint when it carries one of a closed set of negation-of-need
|
|
35
17
|
* shapes AROUND a backticked token, and that same token appears backticked in a
|
|
36
18
|
* refine CONSTRAINTS line. Both sides are already separate strings in the task
|
|
37
19
|
* file.
|
|
38
|
-
*
|
|
39
|
-
* STEP 0 (`scripts/refuted-constraint-baserate.ts`) measured the closed set over
|
|
40
|
-
* every recorded task file in the corpus before any of it was wired.
|
|
41
20
|
*/
|
|
42
21
|
/** Bare ALL-CAPS section header, the boundary convention used across the
|
|
43
22
|
* refined prompt and every research section. */
|
|
@@ -53,9 +32,10 @@ const TOKEN_LIST = `${TOKEN}(?:(?:\\s*,\\s*|\\s+or\\s+|\\s+and\\s+)${TOKEN})*`;
|
|
|
53
32
|
* ("no `@node-rs/argon2` dependency — we use `argon2`") can only ever refute the
|
|
54
33
|
* one inside the phrase.
|
|
55
34
|
*
|
|
56
|
-
* Kept deliberately small.
|
|
57
|
-
*
|
|
58
|
-
*
|
|
35
|
+
* Kept deliberately small. One false drop silently removes a real constraint, so
|
|
36
|
+
* a shape belongs here only when it cannot be read as anything but a claim that
|
|
37
|
+
* the dependency is unnecessary. refuted-constraint.test.ts pins the rejected
|
|
38
|
+
* shapes under `inv-precision`.
|
|
59
39
|
*/
|
|
60
40
|
const NEGATIONS = [
|
|
61
41
|
{
|
|
@@ -71,29 +51,25 @@ const NEGATIONS = [
|
|
|
71
51
|
{
|
|
72
52
|
// "no `argon2` dependency is needed".
|
|
73
53
|
//
|
|
74
|
-
// The trailing need-negation is NOT optional
|
|
75
|
-
//
|
|
76
|
-
//
|
|
77
|
-
// MANIFEST-STATE bullet that says the exact opposite of a refutation:
|
|
54
|
+
// The trailing need-negation is NOT optional. Without it the pattern is
|
|
55
|
+
// the bare "no `X` dependency", which matches MANIFEST-STATE bullets that
|
|
56
|
+
// say the exact opposite of a refutation:
|
|
78
57
|
//
|
|
79
58
|
// "`package.json` currently lists no `hono` or `@hono/zod-validator`
|
|
80
|
-
// dependencies; they MUST BE ADDED
|
|
59
|
+
// dependencies; they MUST BE ADDED"
|
|
81
60
|
// "`package.json` has … and no `sharp` dependency — MUST ADD `sharp`
|
|
82
61
|
// as devDependency"
|
|
83
62
|
//
|
|
84
|
-
//
|
|
85
|
-
//
|
|
86
|
-
// the tree; "X is not needed" is a claim about the task. Only the second
|
|
87
|
-
// one refutes anything.
|
|
63
|
+
// "The repo does not have X yet" is a fact about the tree; "X is not
|
|
64
|
+
// needed" is a claim about the task. Only the second refutes anything.
|
|
88
65
|
name: 'no-dep-needed',
|
|
89
66
|
re: new RegExp(`\\bno\\s+(${TOKEN_LIST})\\s+dependenc(?:y|ies)\\s+(?:is\\s+|are\\s+)?(?:needed|required|necessary)\\b`, 'i')
|
|
90
67
|
},
|
|
91
68
|
// The two shapes below name no dependency noun of their own, so they carry a
|
|
92
|
-
// DEP_WORD guard.
|
|
93
|
-
//
|
|
94
|
-
//
|
|
95
|
-
//
|
|
96
|
-
// adjacency alone would eventually reach a backticked API expression there.
|
|
69
|
+
// DEP_WORD guard. "does not require" is mostly prose about behaviour, not
|
|
70
|
+
// dependencies — "the `GET /api/listings` endpoint does NOT require
|
|
71
|
+
// authentication for the `mine` filter" — and token adjacency alone would
|
|
72
|
+
// eventually reach a backticked API expression inside such a bullet.
|
|
97
73
|
{
|
|
98
74
|
// "`argon2` is not needed" / "`argon2` and `sharp` are not required"
|
|
99
75
|
name: 'not-needed',
|
|
@@ -109,9 +85,8 @@ const NEGATIONS = [
|
|
|
109
85
|
];
|
|
110
86
|
/** The claim has to be ABOUT a dependency for a dependency to be dropped. */
|
|
111
87
|
const DEP_WORD = /\bdependenc(?:y|ies)\b|\bnpm\b|\bpackages?\b|\bdevDependenc(?:y|ies)\b/i;
|
|
112
|
-
/** The owned-requirement stamp
|
|
113
|
-
*
|
|
114
|
-
* guard that keeps this pass out of nexttask 2's failure mode. */
|
|
88
|
+
/** The owned-requirement stamp requirements.ts writes onto every design-sourced
|
|
89
|
+
* obligation. A line carrying it is NEVER refutable by research. */
|
|
115
90
|
const OWNED_MARKER = 'owned requirement from the source design';
|
|
116
91
|
/** Section body between a bare ALL-CAPS header and the next one (or EOF). */
|
|
117
92
|
export function extractCapsSection(text, heading) {
|
|
@@ -253,7 +228,8 @@ export function dropToken(line, token) {
|
|
|
253
228
|
}
|
|
254
229
|
/**
|
|
255
230
|
* Apply every detected refutation to the refined prompt. Purely subtractive: the
|
|
256
|
-
* result is always a character subsequence of the input
|
|
231
|
+
* result is always a character subsequence of the input, which
|
|
232
|
+
* refuted-constraint.test.ts asserts under `inv-no-line-invention`.
|
|
257
233
|
*/
|
|
258
234
|
export function applyRefutations(refined, research) {
|
|
259
235
|
const refutations = detectRefutations(refined, research);
|
|
@@ -1,14 +1,10 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* The one place that knows which repo paths are regenerable machine OUTPUT.
|
|
3
3
|
*
|
|
4
|
-
*
|
|
5
|
-
*
|
|
6
|
-
*
|
|
7
|
-
*
|
|
8
|
-
* failure screenshots — taking each attempt's real `src/client/api.test.tsx`
|
|
9
|
-
* repair with them — and `auto-commit.ts` did not, so its blind `git add -A` is
|
|
10
|
-
* how the screenshots became tracked in the first place. Three modules, one fact,
|
|
11
|
-
* shared with neither of the two that needed it. Import from here; do not copy.
|
|
4
|
+
* Three call sites need the fact and all three import it from here rather than
|
|
5
|
+
* keeping a copy: `git-state-guard.ts` (verdicts), `write-guard.ts` (whether a
|
|
6
|
+
* deletion rejects the whole fix attempt) and `auto-commit.ts` (what the commit
|
|
7
|
+
* may newly track). Import from here; do not copy.
|
|
12
8
|
*
|
|
13
9
|
* TWO LISTS, and the split between them is the whole point.
|
|
14
10
|
*
|
|
@@ -21,28 +17,12 @@
|
|
|
21
17
|
* deliverable, so it is narrower, and `dist/`, `build/`, `.next/`, `.turbo/` and
|
|
22
18
|
* `.svelte-kit/` are deliberately NOT in it.
|
|
23
19
|
*
|
|
24
|
-
*
|
|
25
|
-
*
|
|
26
|
-
*
|
|
27
|
-
*
|
|
28
|
-
*
|
|
29
|
-
*
|
|
30
|
-
* dist/, build/, .next/, .turbo/, .svelte-kit/, playwright-report/,
|
|
31
|
-
* coverage/, .nyc_output/, *.tsbuildinfo 0 trees
|
|
32
|
-
*
|
|
33
|
-
* So `test-results/` and `.last-run.json` are exempt on MEASUREMENT — they are the
|
|
34
|
-
* only artifact paths this corpus tracks at all, and the one real episode is
|
|
35
|
-
* exactly a tracked `test-results/` deletion. `playwright-report/`, `coverage/`,
|
|
36
|
-
* `.nyc_output/` and `*.tsbuildinfo` are exempt BY CONSTRUCTION with zero corpus
|
|
37
|
-
* evidence either way: none of the four has a hand-authored form, so there is no
|
|
38
|
-
* version of them that is a deliverable. `dist/` and its family have exactly the
|
|
39
|
-
* hand-authored form the other six lack — a published package's `dist/` IS the
|
|
40
|
-
* shipped artifact — and with 0 tracked instances here the exemption would never
|
|
41
|
-
* fire anyway, so it would buy nothing while carrying that risk.
|
|
42
|
-
*
|
|
43
|
-
* 32 of the 33 trees are one A/B harness's delivery trees built from a single mx5
|
|
44
|
-
* DESIGN/PROJECT.md: 32 independent RUNS of one project shape, which is evidence
|
|
45
|
-
* of reproducibility and not of breadth. The 33rd is mx5 itself.
|
|
20
|
+
* The line between the two lists is whether the path has a HAND-AUTHORED form.
|
|
21
|
+
* `test-results/`, `playwright-report/`, `coverage/`, `.nyc_output/`,
|
|
22
|
+
* `.last-run.json` and `*.tsbuildinfo` have none — no version of them is
|
|
23
|
+
* somebody's deliverable — so deleting one can never destroy work. `dist/` and
|
|
24
|
+
* its family do: a published package's `dist/` IS the shipped artifact, so a
|
|
25
|
+
* delete there can.
|
|
46
26
|
*/
|
|
47
27
|
/** Directory prefixes and file names that are regenerable test/build output. */
|
|
48
28
|
export declare const REGENERABLE_ARTIFACT_PATTERNS: readonly RegExp[];
|
|
@@ -54,7 +34,8 @@ export declare const REGENERABLE_ARTIFACT_PATTERNS: readonly RegExp[];
|
|
|
54
34
|
* `.svelte-kit/` — see the header.
|
|
55
35
|
*/
|
|
56
36
|
export declare const DELETION_EXEMPT_ARTIFACT_PATTERNS: readonly RegExp[];
|
|
57
|
-
/** Human-readable form of the exempt list
|
|
37
|
+
/** Human-readable form of the exempt list. Nothing in this repo reads it today;
|
|
38
|
+
* the guards go through {@link isDeletionExemptArtifact}. */
|
|
58
39
|
export declare const DELETION_EXEMPT_ARTIFACT_GLOBS: readonly string[];
|
|
59
40
|
/** Is this path regenerable machine output, for VERDICT purposes? */
|
|
60
41
|
export declare function isRegenerableArtifact(relPath: string): boolean;
|
|
@@ -1,14 +1,10 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* The one place that knows which repo paths are regenerable machine OUTPUT.
|
|
3
3
|
*
|
|
4
|
-
*
|
|
5
|
-
*
|
|
6
|
-
*
|
|
7
|
-
*
|
|
8
|
-
* failure screenshots — taking each attempt's real `src/client/api.test.tsx`
|
|
9
|
-
* repair with them — and `auto-commit.ts` did not, so its blind `git add -A` is
|
|
10
|
-
* how the screenshots became tracked in the first place. Three modules, one fact,
|
|
11
|
-
* shared with neither of the two that needed it. Import from here; do not copy.
|
|
4
|
+
* Three call sites need the fact and all three import it from here rather than
|
|
5
|
+
* keeping a copy: `git-state-guard.ts` (verdicts), `write-guard.ts` (whether a
|
|
6
|
+
* deletion rejects the whole fix attempt) and `auto-commit.ts` (what the commit
|
|
7
|
+
* may newly track). Import from here; do not copy.
|
|
12
8
|
*
|
|
13
9
|
* TWO LISTS, and the split between them is the whole point.
|
|
14
10
|
*
|
|
@@ -21,28 +17,12 @@
|
|
|
21
17
|
* deliverable, so it is narrower, and `dist/`, `build/`, `.next/`, `.turbo/` and
|
|
22
18
|
* `.svelte-kit/` are deliberately NOT in it.
|
|
23
19
|
*
|
|
24
|
-
*
|
|
25
|
-
*
|
|
26
|
-
*
|
|
27
|
-
*
|
|
28
|
-
*
|
|
29
|
-
*
|
|
30
|
-
* dist/, build/, .next/, .turbo/, .svelte-kit/, playwright-report/,
|
|
31
|
-
* coverage/, .nyc_output/, *.tsbuildinfo 0 trees
|
|
32
|
-
*
|
|
33
|
-
* So `test-results/` and `.last-run.json` are exempt on MEASUREMENT — they are the
|
|
34
|
-
* only artifact paths this corpus tracks at all, and the one real episode is
|
|
35
|
-
* exactly a tracked `test-results/` deletion. `playwright-report/`, `coverage/`,
|
|
36
|
-
* `.nyc_output/` and `*.tsbuildinfo` are exempt BY CONSTRUCTION with zero corpus
|
|
37
|
-
* evidence either way: none of the four has a hand-authored form, so there is no
|
|
38
|
-
* version of them that is a deliverable. `dist/` and its family have exactly the
|
|
39
|
-
* hand-authored form the other six lack — a published package's `dist/` IS the
|
|
40
|
-
* shipped artifact — and with 0 tracked instances here the exemption would never
|
|
41
|
-
* fire anyway, so it would buy nothing while carrying that risk.
|
|
42
|
-
*
|
|
43
|
-
* 32 of the 33 trees are one A/B harness's delivery trees built from a single mx5
|
|
44
|
-
* DESIGN/PROJECT.md: 32 independent RUNS of one project shape, which is evidence
|
|
45
|
-
* of reproducibility and not of breadth. The 33rd is mx5 itself.
|
|
20
|
+
* The line between the two lists is whether the path has a HAND-AUTHORED form.
|
|
21
|
+
* `test-results/`, `playwright-report/`, `coverage/`, `.nyc_output/`,
|
|
22
|
+
* `.last-run.json` and `*.tsbuildinfo` have none — no version of them is
|
|
23
|
+
* somebody's deliverable — so deleting one can never destroy work. `dist/` and
|
|
24
|
+
* its family do: a published package's `dist/` IS the shipped artifact, so a
|
|
25
|
+
* delete there can.
|
|
46
26
|
*/
|
|
47
27
|
/** Directory prefixes and file names that are regenerable test/build output. */
|
|
48
28
|
export const REGENERABLE_ARTIFACT_PATTERNS = [
|
|
@@ -62,7 +42,8 @@ export const DELETION_EXEMPT_ARTIFACT_PATTERNS = [
|
|
|
62
42
|
/(?:^|\/)\.last-run\.json$/,
|
|
63
43
|
/\.tsbuildinfo$/
|
|
64
44
|
];
|
|
65
|
-
/** Human-readable form of the exempt list
|
|
45
|
+
/** Human-readable form of the exempt list. Nothing in this repo reads it today;
|
|
46
|
+
* the guards go through {@link isDeletionExemptArtifact}. */
|
|
66
47
|
export const DELETION_EXEMPT_ARTIFACT_GLOBS = [
|
|
67
48
|
'test-results/',
|
|
68
49
|
'playwright-report/',
|
|
@@ -10,12 +10,10 @@ export type RenderOutcome = {
|
|
|
10
10
|
};
|
|
11
11
|
/**
|
|
12
12
|
* The newest Playwright-cache Chromium, if any — the HEADLESS SHELL preferred over
|
|
13
|
-
* the full build. Found, never installed: the cache exists on any box that ever
|
|
14
|
-
* Playwright browsers
|
|
15
|
-
*
|
|
16
|
-
*
|
|
17
|
-
* virtual-time budget (validated live on this box: shell exits 0 in ~1s, full
|
|
18
|
-
* chromium times out at 30s on the same http:// URL).
|
|
13
|
+
* the full build. Found, never installed: the cache exists on any box that ever
|
|
14
|
+
* ran Playwright browsers, which many projects install as a test dependency. The
|
|
15
|
+
* headless shell is preferred because it is purpose-built for exactly this — one
|
|
16
|
+
* `--dump-dom` and exit — with no browser UI to bring up.
|
|
19
17
|
*/
|
|
20
18
|
export declare function playwrightCachedChromium(): string | null;
|
|
21
19
|
/**
|
|
@@ -37,27 +35,18 @@ export declare function judgeRenderedDom(html: string): {
|
|
|
37
35
|
/**
|
|
38
36
|
* The page's console output, as captured while the DOM was being rendered.
|
|
39
37
|
*
|
|
40
|
-
*
|
|
41
|
-
*
|
|
42
|
-
*
|
|
43
|
-
*
|
|
44
|
-
* + --enable-logging=stderr --v=0 → 2 CONSOLE
|
|
45
|
-
* lines, one of them the cause
|
|
46
|
-
* playwright chrome-headless-shell
|
|
47
|
-
* → the 2 CONSOLE lines either way
|
|
48
|
-
*
|
|
49
|
-
* and in ALL FOUR arms stdout was byte-identical at 318 bytes, so the DOM the
|
|
50
|
-
* judge reads is untouched by the flags.
|
|
38
|
+
* `--enable-logging=stderr --v=0` is what routes the page's console to stderr.
|
|
39
|
+
* The DOM the judge reads is untouched by those flags: with and without them,
|
|
40
|
+
* `--dump-dom` writes byte-identical stdout on both binaries this probe can
|
|
41
|
+
* discover.
|
|
51
42
|
*/
|
|
52
43
|
export declare function parseConsoleLines(stderr: string): string[];
|
|
53
44
|
/**
|
|
54
45
|
* Append the console output to a FAIL detail — and to nothing else.
|
|
55
46
|
*
|
|
56
|
-
*
|
|
57
|
-
*
|
|
58
|
-
*
|
|
59
|
-
* probe was holding the answer the whole time: `Uncaught ReferenceError: process
|
|
60
|
-
* is not defined`, at main.js:322.
|
|
47
|
+
* Without it the fix child is told "the body is EMPTY" and nothing more, while the
|
|
48
|
+
* probe was holding the cause the whole time: the page's own
|
|
49
|
+
* `Uncaught ReferenceError`, with the source file and line Chrome already printed.
|
|
61
50
|
*
|
|
62
51
|
* Strictly additive by construction: it takes an existing FAIL detail and returns
|
|
63
52
|
* it with text appended. It cannot turn a PASS into a FAIL, cannot reach
|