@molecule/api-ai-tools 1.14.2 → 1.14.4

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/README.md CHANGED
@@ -3,7 +3,7 @@ AUTO-GENERATED — DO NOT EDIT THIS FILE.
3
3
  Generated by `mlcl sync-docs` from the package's src/index.ts JSDoc + mlcl/registry.json.
4
4
  Edits here are overwritten on the next commit (molecule's pre-commit hook regenerates).
5
5
  To change this document, edit the module-level JSDoc in src/index.ts.
6
- Generated: 2026-10-23T11:49:45.764Z
6
+ Generated: 2026-10-25T03:47:31.740Z
7
7
  -->
8
8
 
9
9
  # @molecule/api-ai-tools
@@ -550,6 +550,21 @@ interface DiagnosisRunContext {
550
550
  * `excludedTestTitles` gives the rest of the platform.
551
551
  */
552
552
  approvedExclusions?: readonly string[]
553
+ /**
554
+ * Whether the caller is STARTING this command as the graded proof itself — the run the app is
555
+ * judged by, composed and launched by the platform — rather than the executor's own diagnosis.
556
+ *
557
+ * A redeploy's proof is the targeted set the last walk left: its command names the failures it
558
+ * re-runs (`file:line`, and the specs they live in), so it reads as a narrowed run. That
559
+ * selection is the proof's own scope, so the graded run keeps the suite's retries instead of
560
+ * walking each failure once the way a diagnosis does. Only the selection is excused — a failed
561
+ * cap, a title filter, a last-failed set and a local targeted selection stay diagnoses whatever the caller
562
+ * says here — and only a command the PLATFORM composes and launches is ever the proof.
563
+ *
564
+ * Host code marks the launch input with {@link PLATFORM_PROOF} rather than a JSON key: tool
565
+ * input a model sends is JSON, and JSON has no symbol keys, so no model call can claim this.
566
+ */
567
+ platformProof?: boolean
553
568
  }
554
569
  ```
555
570
 
@@ -2726,13 +2741,15 @@ function withSuiteConfig(command: string, config: string | null | undefined): st
2726
2741
 
2727
2742
  **Returns:** The command with the flag, or the command unchanged.
2728
2743
 
2729
- #### `scopedRerunCommand(command, locations, excluded, config, cwd, env)`
2744
+ #### `scopedRerunCommand(command, locations, excluded, config, cwd, env, options)`
2730
2745
 
2731
2746
  The whole-suite command made scoped to the tests it should re-run instead: the same
2732
2747
  invocation — same launcher, same settings — with the named `file:line`s in place of every
2733
2748
  positional selection the run carried (a spec file, a suite directory or a regex filter),
2734
2749
  `--last-failed` dropped (it re-runs the tests that never ran too, X1 flash-m60) and
2735
- `--retries=0` set (a re-run of a known failure does not need to pay for retries).
2750
+ `--retries=0` set (a re-run of a known failure does not need to pay for retries) — except the
2751
+ re-run of a run against a DEPLOYED URL, which keeps the suite's own retries and tracing
2752
+ (`options.suiteSettings`).
2736
2753
 
2737
2754
  The re-run keeps the run's `> <file>` redirect only in the sense of keeping its OUTPUT there:
2738
2755
  the target is rewritten to a fresh sibling ({@link redirectRunnerOutputsToFreshFiles}), so a
@@ -2754,6 +2771,7 @@ function scopedRerunCommand(
2754
2771
  config?: string | null,
2755
2772
  cwd?: string | null,
2756
2773
  env?: readonly RunEnvSetting[],
2774
+ options?: { suiteSettings?: boolean },
2757
2775
  ): string
2758
2776
  ```
2759
2777
 
@@ -2763,6 +2781,7 @@ function scopedRerunCommand(
2763
2781
  - `config` — The config the run loaded, when the caller knows it; added when the command does not name one.
2764
2782
  - `cwd` — The directory `exec_command` was given, when it was; the base a location is resolved against when the command does not `cd` anywhere.
2765
2783
  - `env` — The settings the REQUEST requires of the suite and this run left out ({@link withRunEnv}): the re-run carries them, so a re-run of a run measured in the wrong mode is not measured in that mode again (xr-molecule-flash-m182 +12:06).
2784
+ - `options` — `suiteSettings` for the re-run of a run against a DEPLOYED URL: it keeps the suite's own retries and tracing instead of the diagnosis ones. The graded measurement is the suite's own settings, and a retry is what leaves a failing test's trace there; the platform's `--retries=0` and its `--trace=retain-on-failure` are both a stricter measurement than the one that was graded, and on X1 xr-molecule-flash-h15 the recording alone turned three budget-bound deployed tests into timeouts.
2766
2785
 
2767
2786
  **Returns:** The scoped command, or the command unchanged when it runs no Playwright suite.
2768
2787
 
@@ -2806,6 +2825,18 @@ function suiteRunInTheWay(candidate: { target: string }, inFlight: readonly T[])
2806
2825
 
2807
2826
  **Returns:** The first run in the way, or null.
2808
2827
 
2828
+ #### `isPlatformProofLaunch(input)`
2829
+
2830
+ Whether an `exec_command` input object carries the host's {@link PLATFORM_PROOF} mark.
2831
+
2832
+ ```typescript
2833
+ function isPlatformProofLaunch(input: unknown): boolean
2834
+ ```
2835
+
2836
+ - `input` — The tool input as the handler received it.
2837
+
2838
+ **Returns:** True only for a launch host code marked; false for anything a model sent.
2839
+
2809
2840
  #### `isDiagnosisRun(command, context)`
2810
2841
 
2811
2842
  Whether a command walks a PART of a suite instead of all of it: a cap that stops it at a failure
@@ -2839,9 +2870,9 @@ function isDiagnosisRun(command: string, context?: DiagnosisRunContext): boolean
2839
2870
  ```
2840
2871
 
2841
2872
  - `command` — The command as the executor sent it.
2842
- - `context` — The request's approved exclusions, when the caller knows them.
2873
+ - `context` — The request's approved exclusions and whether this command IS the graded proof, when the caller knows them. A whole local walk still covers the whole suite; the launcher's separate local-target policy disables its retries. This predicate classifies narrowed selections and their proof purpose.
2843
2874
 
2844
- **Returns:** True when the run is a diagnosis or a re-run, not the whole suite.
2875
+ **Returns:** True when the run is a diagnosis or a re-run, not the whole suite or a deployed proof selection.
2845
2876
 
2846
2877
  #### `discoverSkills(backend)`
2847
2878
 
@@ -3275,23 +3306,42 @@ function suiteRecordsTraces(configText: string): boolean
3275
3306
 
3276
3307
  **Returns:** True when the config records traces for failures.
3277
3308
 
3309
+ #### `namesNoRetries(command)`
3310
+
3311
+ Whether the run itself pins `--retries=0` (either spelling): a run that cannot retry records no
3312
+ retry trace, so it still needs one recorded for it. A running wait reads the same proof to know
3313
+ a first failure's body is already final (`wait_for_task`'s diagnostic yield).
3314
+
3315
+ ```typescript
3316
+ function namesNoRetries(command: string): boolean
3317
+ ```
3318
+
3319
+ - `command` — The shell command.
3320
+
3321
+ **Returns:** True when the run allows no retry.
3322
+
3278
3323
  #### `diagnosisTraceCommand(args)`
3279
3324
 
3280
3325
  The command a Playwright run needs to leave a readable trace behind, when the suite's config
3281
- would record none.
3326
+ would record none — except a run that can serve as proof, whose own settings are left alone.
3282
3327
 
3283
3328
  The failing tests' requests are only readable if the run wrote them down (see the module doc),
3284
3329
  and the config is where the decision about that lives — the platform does not edit the suite's
3285
- config, so it passes the flag instead, on every Playwright run that starts tests and does not
3286
- already decide its own `--trace`. That includes the whole-suite proof run, which an earlier
3287
- version of this function skipped on the reasoning that its flags are graded: the flag changes
3288
- what is RETAINED, not what passes. `retain-on-failure` keeps the trace only of a test that
3289
- fails — Playwright records it and deletes it when the test passes (playwright's
3290
- `_shouldAbandonTrace` unlinks the temporary trace files of a passing test) — so a green proof
3291
- run keeps nothing extra. A failing one keeps the network log its failures need.
3292
- xr-molecule-flash-m163 (+24:58) is why the proof run is no longer skipped: its one deployed
3293
- failure left only an `error-context.md`, the executor spent the next calls hunting a `trace.zip`
3294
- that could not exist, and then shipped a guessed fix.
3330
+ config, so it passes the flag instead, on a Playwright run that starts tests, does not already
3331
+ decide its own `--trace`, and whose config keeps no trace for its failures.
3332
+
3333
+ A run that can serve as PROOF is the exception: the graded measurement is the suite's own
3334
+ settings, so it keeps its own tracing and retries. That was measured, not assumed — on one
3335
+ sandbox in X1 xr-molecule-flash-h15 (+46:53 → +49:30) the same build ran a three-test deployed
3336
+ subset 3/3 timed out under this flag (17.6–17.9 s against a 15 s per-test budget) and the whole
3337
+ file passed 14/14 without it (10.9–12.1 s). `retain-on-failure` RETAINS only a failing test's
3338
+ trace (Playwright's `_shouldAbandonTrace` unlinks a passing test's), but it RECORDS every
3339
+ action of every test, and for a test near its per-test budget that recording is the difference
3340
+ between passing and timing out. m163 (+24:58) is the failure this flag was added for: its
3341
+ deployed proof run left only an `error-context.md` because the suite traces
3342
+ `on-first-retry` and the run had no retries. That need is met without the flag — the graded
3343
+
3344
+ _(description truncated — read the full text in `node_modules/@molecule/api-ai-tools/dist/trace-artifacts.d.ts`.)_
3295
3345
 
3296
3346
  ```typescript
3297
3347
  function diagnosisTraceCommand(args: {
@@ -3548,7 +3598,7 @@ function streamingBackgroundCommand(
3548
3598
  ```
3549
3599
 
3550
3600
  - `command` — The command as the executor sent it.
3551
- - `context` — What the caller knows beyond the command: the tests the person's request excludes by name ({@link DiagnosisRunContext}). A `--grep-invert` of exactly those is the request's own scope, not a diagnosis, so it keeps the suite's retries on a deployed proof (xr-molecule-flash-m170 +33:16).
3601
+ - `context` — What the caller knows beyond the command: the tests the person's request excludes by name, and whether this command IS the platform's graded proof ({@link DiagnosisRunContext}). A `--grep-invert` of exactly those exclusions is the request's own scope, not a diagnosis, so it keeps the suite's retries on a deployed proof (xr-molecule-flash-m170 +33:16) — and a proof the platform itself composed and launched keeps them whatever its scope, targeted set included (xr-molecule-flash-l48 +26:35).
3552
3602
  - `reportPath` — Where this run should write Playwright's standard `json` report, when the caller keeps one ({@link ./playwright-report.js}). The reporter is added to the run's own reporter set, never in place of one, and its output goes to that file through `PLAYWRIGHT_JSON_OUTPUT_FILE` — so the log, the executors' own reporters and every verdict stay exactly as they are. Omitted, or a run whose reporter set is not this function's to place (already names `json`, sets the variable itself, or whose runner cannot be located), leaves the command untouched and the result's `reportPath` unset.
3553
3603
 
3554
3604
  **Returns:** The command to run, one sentence per change made (empty when none), and the report path when one was actually wired — or `error` when the command starts the suite more than once.
@@ -3959,7 +4009,7 @@ function findPathArgs(pattern: string): string
3959
4009
 
3960
4010
  **Returns:** One or more `-path '…'` alternatives, ORed inside parens when there is more than one.
3961
4011
 
3962
- #### `literalDirPrefix(pattern)`
4012
+ #### `literalDirPrefix(pattern, root)`
3963
4013
 
3964
4014
  The directory a GLOB pattern spells out, when it spells one out: everything
3965
4015
  before the pattern's first glob character, trimmed back to the last `/`.
@@ -3983,11 +4033,17 @@ pattern is not anchored to one depth). Rooting those at
3983
4033
  more segments (`@molecule/api-resource-user/dist`), which is the shape that
3984
4034
  is a directory rather than a directory name.
3985
4035
 
4036
+ An npm SCOPE as the first segment, under a `node_modules` root, is the one
4037
+ exception that parameter `root` enables: npm installs a scope only directly
4038
+
4039
+ _(description truncated — read the full text in `node_modules/@molecule/api-ai-tools/dist/utilities.d.ts`.)_
4040
+
3986
4041
  ```typescript
3987
- function literalDirPrefix(pattern: string): string | null
4042
+ function literalDirPrefix(pattern: string, root?: string): string | null
3988
4043
  ```
3989
4044
 
3990
4045
  - `pattern` — A pattern already accepted by {@link isValidGlob}.
4046
+ - `root` — The resolved search root, when one is already known; a scope-first prefix is returned only when this ends in a `node_modules` segment (and the pattern has more path after the scope).
3991
4047
 
3992
4048
  **Returns:** The literal directory prefix, without a trailing slash, or null when the pattern has no glob character, no `/`, or only a bare name before one.
3993
4049
 
@@ -4330,7 +4386,7 @@ function repeatingFailure(log: string): RepeatingFailure | null
4330
4386
 
4331
4387
  **Returns:** The repeating cause, or null when no signature has {@link REPEATING_FAILURE_MIN} distinct tests behind it.
4332
4388
 
4333
- #### `logShowsInlineFailureBodies(log)`
4389
+ #### `logShowsInlineFailureBodies(log, excluded, options)`
4334
4390
 
4335
4391
  Whether the log read so far carries a failure's own body under a `✘` row — the evidence that a
4336
4392
  run prints each failure's error as that test fails ({@link PLAYWRIGHT_FAILURES_INLINE_ENV}).
@@ -4347,13 +4403,27 @@ running wait must not be told "as it fails" about a log whose bodies only appear
4347
4403
  During a wait the run has not ended (the exit file is read first), so a block beside a `✘` row
4348
4404
  is one the reporter printed inline.
4349
4405
 
4406
+ A body for a test the request EXCLUDES is not that evidence: its failure does not count for
4407
+ this request ({@link matchingExcludedTitles}), so a wait that handed it over as the diagnostic
4408
+ spent a model round trip and 8 k of partial log on a test the same result says to ignore —
4409
+ exactly what xr-molecule-flash-h13 (+19:06) did twice while the platform's proof was still
4410
+ walking.
4411
+
4412
+ With `finalOnly`, only a failure the run has FINISHED with counts; a pending retry waits.
4413
+
4350
4414
  ```typescript
4351
- function logShowsInlineFailureBodies(log: string): boolean
4415
+ function logShowsInlineFailureBodies(
4416
+ log: string,
4417
+ excluded?: readonly string[],
4418
+ options?: { finalOnly?: boolean; noRetries?: boolean },
4419
+ ): boolean
4352
4420
  ```
4353
4421
 
4354
4422
  - `log` — A log, or the slice of one a wait reads.
4423
+ - `excluded` — The test titles the request carves out, if the caller knows them.
4424
+ - `options` — `finalOnly` reads only a failure the run has finished with; `noRetries` says the command proves the run cannot retry (`--retries=0`), so its first failure is final.
4355
4425
 
4356
- **Returns:** True when a `✘` row's own test has a failure body under it.
4426
+ **Returns:** True when a `✘` row's own test, outside the request's exclusions, has a failure body under it — and, with `finalOnly`, that failure is final in the log read so far.
4357
4427
 
4358
4428
  #### `specFilesSelected(command)`
4359
4429
 
@@ -4602,6 +4672,10 @@ The command that re-runs the tests at `locations` the way the run IN FLIGHT ran
4602
4672
  invocation, in the same directory, narrowed to those tests — or null when the running command
4603
4673
  is not a Playwright run this can narrow.
4604
4674
 
4675
+ A run against a DEPLOYED URL keeps the suite's own retries and tracing in its re-run
4676
+ ({@link scopedRerunCommand} `suiteSettings`): the deployed measurement is the one the deploy is
4677
+ graded on, and neither the platform's `--retries=0` nor its recording `--trace` belongs on it.
4678
+
4605
4679
  The `locations` are the paths the run's own log printed, which are relative to the directory
4606
4680
  that run started in, so the composer resolves them there ({@link scopedRerunCommand}): the
4607
4681
  command names that directory unless it already changes into one of its own, because the
@@ -4870,6 +4944,21 @@ short settle (`sleep 2; curl …`) is a legitimate thing to run.
4870
4944
  const MIN_PEEK_SLEEP_SECONDS: 5
4871
4945
  ```
4872
4946
 
4947
+ #### `PLATFORM_PROOF`
4948
+
4949
+ The key host code sets on an `exec_command` input object to mark the launch as the platform's
4950
+ own graded proof ({@link DiagnosisRunContext} `platformProof`).
4951
+
4952
+ A SYMBOL, deliberately: a model's tool input is JSON, and JSON cannot carry a symbol key, so a
4953
+ model can never forge this mark — a `platform_proof` key it writes into its own JSON is just an
4954
+ unknown input key, and the handler ignores it. Object spreads through a consumer's wrappers, and
4955
+ this package's own input normalization, keep symbol-keyed properties, so the host's intent
4956
+ survives the real launch path.
4957
+
4958
+ ```typescript
4959
+ const PLATFORM_PROOF: typeof PLATFORM_PROOF
4960
+ ```
4961
+
4873
4962
  #### `SPLIT_WORK_ADVICE`
4874
4963
 
4875
4964
  The closing advice on an over-budget message for a command that is not a test
@@ -82,7 +82,9 @@ export declare function withSuiteConfig(command: string, config: string | null |
82
82
  * invocation — same launcher, same settings — with the named `file:line`s in place of every
83
83
  * positional selection the run carried (a spec file, a suite directory or a regex filter),
84
84
  * `--last-failed` dropped (it re-runs the tests that never ran too, X1 flash-m60) and
85
- * `--retries=0` set (a re-run of a known failure does not need to pay for retries).
85
+ * `--retries=0` set (a re-run of a known failure does not need to pay for retries) — except the
86
+ * re-run of a run against a DEPLOYED URL, which keeps the suite's own retries and tracing
87
+ * (`options.suiteSettings`).
86
88
  *
87
89
  * The re-run keeps the run's `> <file>` redirect only in the sense of keeping its OUTPUT there:
88
90
  * the target is rewritten to a fresh sibling ({@link redirectRunnerOutputsToFreshFiles}), so a
@@ -112,9 +114,17 @@ export declare function withSuiteConfig(command: string, config: string | null |
112
114
  * @param env - The settings the REQUEST requires of the suite and this run left out
113
115
  * ({@link withRunEnv}): the re-run carries them, so a re-run of a run measured in the wrong
114
116
  * mode is not measured in that mode again (xr-molecule-flash-m182 +12:06).
117
+ * @param options - `suiteSettings` for the re-run of a run against a DEPLOYED URL: it keeps the
118
+ * suite's own retries and tracing instead of the diagnosis ones. The graded measurement is the
119
+ * suite's own settings, and a retry is what leaves a failing test's trace there; the platform's
120
+ * `--retries=0` and its `--trace=retain-on-failure` are both a stricter measurement than the
121
+ * one that was graded, and on X1 xr-molecule-flash-h15 the recording alone turned three
122
+ * budget-bound deployed tests into timeouts.
115
123
  * @returns The scoped command, or the command unchanged when it runs no Playwright suite.
116
124
  */
117
- export declare function scopedRerunCommand(command: string, locations: readonly string[], excluded?: readonly string[], config?: string | null, cwd?: string | null, env?: readonly RunEnvSetting[]): string;
125
+ export declare function scopedRerunCommand(command: string, locations: readonly string[], excluded?: readonly string[], config?: string | null, cwd?: string | null, env?: readonly RunEnvSetting[], options?: {
126
+ suiteSettings?: boolean;
127
+ }): string;
118
128
  /** One `NAME=value` the request requires of a suite run. */
119
129
  export interface RunEnvSetting {
120
130
  name: string;
@@ -181,7 +191,40 @@ export interface DiagnosisRunContext {
181
191
  * `excludedTestTitles` gives the rest of the platform.
182
192
  */
183
193
  approvedExclusions?: readonly string[];
194
+ /**
195
+ * Whether the caller is STARTING this command as the graded proof itself — the run the app is
196
+ * judged by, composed and launched by the platform — rather than the executor's own diagnosis.
197
+ *
198
+ * A redeploy's proof is the targeted set the last walk left: its command names the failures it
199
+ * re-runs (`file:line`, and the specs they live in), so it reads as a narrowed run. That
200
+ * selection is the proof's own scope, so the graded run keeps the suite's retries instead of
201
+ * walking each failure once the way a diagnosis does. Only the selection is excused — a failed
202
+ * cap, a title filter, a last-failed set and a local targeted selection stay diagnoses whatever the caller
203
+ * says here — and only a command the PLATFORM composes and launches is ever the proof.
204
+ *
205
+ * Host code marks the launch input with {@link PLATFORM_PROOF} rather than a JSON key: tool
206
+ * input a model sends is JSON, and JSON has no symbol keys, so no model call can claim this.
207
+ */
208
+ platformProof?: boolean;
184
209
  }
210
+ /**
211
+ * The key host code sets on an `exec_command` input object to mark the launch as the platform's
212
+ * own graded proof ({@link DiagnosisRunContext} `platformProof`).
213
+ *
214
+ * A SYMBOL, deliberately: a model's tool input is JSON, and JSON cannot carry a symbol key, so a
215
+ * model can never forge this mark — a `platform_proof` key it writes into its own JSON is just an
216
+ * unknown input key, and the handler ignores it. Object spreads through a consumer's wrappers, and
217
+ * this package's own input normalization, keep symbol-keyed properties, so the host's intent
218
+ * survives the real launch path.
219
+ */
220
+ export declare const PLATFORM_PROOF: unique symbol;
221
+ /**
222
+ * Whether an `exec_command` input object carries the host's {@link PLATFORM_PROOF} mark.
223
+ *
224
+ * @param input - The tool input as the handler received it.
225
+ * @returns True only for a launch host code marked; false for anything a model sent.
226
+ */
227
+ export declare function isPlatformProofLaunch(input: unknown): boolean;
185
228
  /**
186
229
  * Whether a command walks a PART of a suite instead of all of it: a cap that stops it at a failure
187
230
  * count, the failures the last run printed (`--last-failed`, `--only-changed`), a title filter, or
@@ -217,9 +260,21 @@ export interface DiagnosisRunContext {
217
260
  * that exclusion, the rewriter added `--retries=0` to it, and the run lost the suite's retries on
218
261
  * the one walk where a network blip is likeliest.
219
262
  *
263
+ * A command the PLATFORM composed and launched AS the graded proof keeps the suite's retries for
264
+ * the SELECTION it composed — the failures a redeploy re-runs, named as files and `file:line`
265
+ * ({@link DiagnosisRunContext} `platformProof`). Only that selection is excused: a cap, a title
266
+ * filter, a last-failed set and a local targeted selection stay diagnoses, so the mark cannot turn a walk of
267
+ * part of the suite into the graded measurement. Which targets are local is
268
+ * {@link suiteCommandTarget}'s answer, and the launch rewrite asks it on the same reading
269
+ * ({@link ./utilities.js} `streamingBackgroundCommand`).
270
+ *
220
271
  * @param command - The command as the executor sent it.
221
- * @param context - The request's approved exclusions, when the caller knows them.
222
- * @returns True when the run is a diagnosis or a re-run, not the whole suite.
272
+ * @param context - The request's approved exclusions and whether this command IS the graded
273
+ * proof, when the caller knows them.
274
+ * A whole local walk still covers the whole suite; the launcher's separate local-target policy
275
+ * disables its retries. This predicate classifies narrowed selections and their proof purpose.
276
+ *
277
+ * @returns True when the run is a diagnosis or a re-run, not the whole suite or a deployed proof selection.
223
278
  */
224
279
  export declare function isDiagnosisRun(command: string, context?: DiagnosisRunContext): boolean;
225
280
  //# sourceMappingURL=suite-overlap.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"suite-overlap.d.ts","sourceRoot":"","sources":["../src/suite-overlap.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AAaH;;;;;;;;;GASG;AACH,wBAAgB,eAAe,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAEvD;AAED;;;;;;;;;GASG;AACH,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAoB1D;AAKD;;;;;;GAMG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAEzD;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,eAAe,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAAG,MAAM,CAS1F;AA4VD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAoCG;AACH,wBAAgB,kBAAkB,CAChC,OAAO,EAAE,MAAM,EACf,SAAS,EAAE,SAAS,MAAM,EAAE,EAC5B,QAAQ,GAAE,SAAS,MAAM,EAAO,EAChC,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,EACtB,GAAG,CAAC,EAAE,MAAM,GAAG,IAAI,EACnB,GAAG,GAAE,SAAS,aAAa,EAAO,GACjC,MAAM,CAgDR;AAED,4DAA4D;AAC5D,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAA;IACZ,KAAK,EAAE,MAAM,CAAA;CACd;AAmCD;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,UAAU,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,GAAE,SAAS,aAAa,EAAO,GAAG,MAAM,CAe3F;AAwOD;;;;;;GAMG;AACH,MAAM,WAAW,gBAAgB;IAC/B,+FAA+F;IAC/F,SAAS,EAAE,OAAO,CAAA;IAClB,oFAAoF;IACpF,MAAM,EAAE,MAAM,CAAA;IACd;;;;OAIG;IACH,gBAAgB,CAAC,EAAE,OAAO,CAAA;CAC3B;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,gBAAgB,CAAC,CAAC,SAAS,gBAAgB,EACzD,SAAS,EAAE;IAAE,MAAM,EAAE,MAAM,CAAA;CAAE,EAC7B,QAAQ,EAAE,SAAS,CAAC,EAAE,GACrB,CAAC,GAAG,IAAI,CAMV;AA2FD;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC;;;OAGG;IACH,kBAAkB,CAAC,EAAE,SAAS,MAAM,EAAE,CAAA;CACvC;AAmCD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAsCG;AACH,wBAAgB,cAAc,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,mBAAmB,GAAG,OAAO,CAYtF"}
1
+ {"version":3,"file":"suite-overlap.d.ts","sourceRoot":"","sources":["../src/suite-overlap.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AAaH;;;;;;;;;GASG;AACH,wBAAgB,eAAe,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAEvD;AAED;;;;;;;;;GASG;AACH,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAoB1D;AAKD;;;;;;GAMG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAEzD;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,eAAe,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAAG,MAAM,CAS1F;AA4VD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4CG;AACH,wBAAgB,kBAAkB,CAChC,OAAO,EAAE,MAAM,EACf,SAAS,EAAE,SAAS,MAAM,EAAE,EAC5B,QAAQ,GAAE,SAAS,MAAM,EAAO,EAChC,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,EACtB,GAAG,CAAC,EAAE,MAAM,GAAG,IAAI,EACnB,GAAG,GAAE,SAAS,aAAa,EAAO,EAClC,OAAO,GAAE;IAAE,aAAa,CAAC,EAAE,OAAO,CAAA;CAAO,GACxC,MAAM,CA2DR;AAED,4DAA4D;AAC5D,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAA;IACZ,KAAK,EAAE,MAAM,CAAA;CACd;AAmCD;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,UAAU,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,GAAE,SAAS,aAAa,EAAO,GAAG,MAAM,CAe3F;AAwOD;;;;;;GAMG;AACH,MAAM,WAAW,gBAAgB;IAC/B,+FAA+F;IAC/F,SAAS,EAAE,OAAO,CAAA;IAClB,oFAAoF;IACpF,MAAM,EAAE,MAAM,CAAA;IACd;;;;OAIG;IACH,gBAAgB,CAAC,EAAE,OAAO,CAAA;CAC3B;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,gBAAgB,CAAC,CAAC,SAAS,gBAAgB,EACzD,SAAS,EAAE;IAAE,MAAM,EAAE,MAAM,CAAA;CAAE,EAC7B,QAAQ,EAAE,SAAS,CAAC,EAAE,GACrB,CAAC,GAAG,IAAI,CAMV;AAqHD;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC;;;OAGG;IACH,kBAAkB,CAAC,EAAE,SAAS,MAAM,EAAE,CAAA;IACtC;;;;;;;;;;;;;OAaG;IACH,aAAa,CAAC,EAAE,OAAO,CAAA;CACxB;AAED;;;;;;;;;GASG;AACH,eAAO,MAAM,cAAc,EAAE,OAAO,MAA4D,CAAA;AAEhG;;;;;GAKG;AACH,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAM7D;AAmCD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkDG;AACH,wBAAgB,cAAc,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,mBAAmB,GAAG,OAAO,CA2BtF"}
@@ -445,7 +445,9 @@ function redirectRunnerOutputsToFreshFiles(command) {
445
445
  * invocation — same launcher, same settings — with the named `file:line`s in place of every
446
446
  * positional selection the run carried (a spec file, a suite directory or a regex filter),
447
447
  * `--last-failed` dropped (it re-runs the tests that never ran too, X1 flash-m60) and
448
- * `--retries=0` set (a re-run of a known failure does not need to pay for retries).
448
+ * `--retries=0` set (a re-run of a known failure does not need to pay for retries) — except the
449
+ * re-run of a run against a DEPLOYED URL, which keeps the suite's own retries and tracing
450
+ * (`options.suiteSettings`).
449
451
  *
450
452
  * The re-run keeps the run's `> <file>` redirect only in the sense of keeping its OUTPUT there:
451
453
  * the target is rewritten to a fresh sibling ({@link redirectRunnerOutputsToFreshFiles}), so a
@@ -475,9 +477,15 @@ function redirectRunnerOutputsToFreshFiles(command) {
475
477
  * @param env - The settings the REQUEST requires of the suite and this run left out
476
478
  * ({@link withRunEnv}): the re-run carries them, so a re-run of a run measured in the wrong
477
479
  * mode is not measured in that mode again (xr-molecule-flash-m182 +12:06).
480
+ * @param options - `suiteSettings` for the re-run of a run against a DEPLOYED URL: it keeps the
481
+ * suite's own retries and tracing instead of the diagnosis ones. The graded measurement is the
482
+ * suite's own settings, and a retry is what leaves a failing test's trace there; the platform's
483
+ * `--retries=0` and its `--trace=retain-on-failure` are both a stricter measurement than the
484
+ * one that was graded, and on X1 xr-molecule-flash-h15 the recording alone turned three
485
+ * budget-bound deployed tests into timeouts.
478
486
  * @returns The scoped command, or the command unchanged when it runs no Playwright suite.
479
487
  */
480
- export function scopedRerunCommand(command, locations, excluded = [], config, cwd, env = []) {
488
+ export function scopedRerunCommand(command, locations, excluded = [], config, cwd, env = [], options = {}) {
481
489
  const run = playwrightStatement(command);
482
490
  if (run === null)
483
491
  return command;
@@ -508,13 +516,22 @@ export function scopedRerunCommand(command, locations, excluded = [], config, cw
508
516
  // nothing — "No tests found" — so every location is rendered in a form Playwright can match
509
517
  // ({@link playwrightLocations}).
510
518
  const narrowed = playwrightLocations(locations, command, cwd);
511
- const dropped = dropSupersededSelections(args, narrowed)
519
+ // The recording flag the platform adds to a run whose config keeps no trace
520
+ // (`trace-artifacts.ts` `DIAGNOSIS_TRACE_FLAG`). It costs every test its recording, so a re-run
521
+ // measured with the suite's settings does not carry it.
522
+ const platformRecordingTrace = /\s*--trace=retain-on-failure(?![\w-])/g;
523
+ const keptSettings = options.suiteSettings === true;
524
+ const dropped = (keptSettings
525
+ ? dropSupersededSelections(args, narrowed).replace(platformRecordingTrace, '')
526
+ : dropSupersededSelections(args, narrowed))
512
527
  // `--last-failed` re-runs the tests that never ran too (flash-m60); its `--last-failed-file`
513
528
  // sibling only moves the file it reads and is a real option of the re-run.
514
529
  .replace(/\s*--last-failed(?!-)/g, '')
515
530
  .replace(/\s*--retries(?:[= ]\d+)?/g, '');
531
+ // A re-run of a deployed run measures what the suite measures: its own retries (which is what
532
+ // leaves a failing test's retry trace), never the diagnosis `--retries=0`.
516
533
  const scoped = command.slice(0, run.afterRunner) +
517
- ` ${narrowed.join(' ')} --retries=0${carry}${invert}` +
534
+ ` ${narrowed.join(' ')}${keptSettings ? '' : ' --retries=0'}${carry}${invert}` +
518
535
  dropped;
519
536
  // A command that starts the suite AGAIN after this statement is a chain of walks, not a re-run:
520
537
  // everything from the next suite runner on is dropped, so the composed command carries ONE walk.
@@ -865,10 +882,34 @@ function playwrightStatement(command) {
865
882
  return null;
866
883
  }
867
884
  /**
868
- * What narrows a Playwright run to a part of the suite: a named file or line, a title filter, or
869
- * the tests the run before it printed (`--last-failed`, `--only-changed`).
885
+ * What narrows a Playwright run to a part of the suite by naming the failures themselves: spec
886
+ * files and `file:line` locations. These are the selections a redeploy's targeted proof is
887
+ * composed from.
870
888
  */
871
- const NARROWED_RUN = /\.(?:spec|test)\.[cm]?[jt]sx?\b|\.[cm]?[jt]sx?:\d+|(?:^|\s)(?:-g|--grep(?:-invert)?|--last-failed|--only-changed)\b/;
889
+ const NAMED_SELECTION = /\.(?:spec|test)\.[cm]?[jt]sx?\b|\.[cm]?[jt]sx?:\d+/;
890
+ /**
891
+ * What narrows a Playwright run by a title filter, or by the failures the run before it printed.
892
+ * These are diagnoses however the run was launched. A cap is a diagnosis too, but
893
+ * {@link boundsFailures} reads it before this point because its own "no cap" spelling
894
+ * (`--max-failures=0`) has to be told apart.
895
+ */
896
+ const FILTERED_SELECTION = /(?:^|\s)(?:-g|--grep|--grep-invert|-G|--last-failed|--only-changed)\b/;
897
+ /**
898
+ * What narrows a Playwright run to a part of the suite: either of the two above. Built from their
899
+ * own sources so the two readings cannot drift apart.
900
+ */
901
+ const NARROWED_RUN = new RegExp(`(?:${NAMED_SELECTION.source})|(?:${FILTERED_SELECTION.source})`);
902
+ /**
903
+ * Whether a narrowed invocation is narrowed ONLY by the failures it names — the selection the
904
+ * platform composes a redeploy's proof from ({@link NAMED_SELECTION}) — rather than by a title
905
+ * filter or a last-failed set ({@link FILTERED_SELECTION}).
906
+ *
907
+ * @param run - The Playwright invocation's command-position text, without a `--grep-invert`.
908
+ * @returns True when files/lines are the only narrowing.
909
+ */
910
+ function namesOnlySelection(run) {
911
+ return NAMED_SELECTION.test(run) && !FILTERED_SELECTION.test(run);
912
+ }
872
913
  /**
873
914
  * A `--grep-invert` (or its `-G` alias) with the pattern Playwright takes: quoted or bare, `=` or
874
915
  * whitespace between flag and value, the last occurrence winning as it does on the runner's own
@@ -899,6 +940,28 @@ function grepInvertPattern(run) {
899
940
  function withoutGrepInvert(run) {
900
941
  return run.replace(GREP_INVERT_VALUE, ' ');
901
942
  }
943
+ /**
944
+ * The key host code sets on an `exec_command` input object to mark the launch as the platform's
945
+ * own graded proof ({@link DiagnosisRunContext} `platformProof`).
946
+ *
947
+ * A SYMBOL, deliberately: a model's tool input is JSON, and JSON cannot carry a symbol key, so a
948
+ * model can never forge this mark — a `platform_proof` key it writes into its own JSON is just an
949
+ * unknown input key, and the handler ignores it. Object spreads through a consumer's wrappers, and
950
+ * this package's own input normalization, keep symbol-keyed properties, so the host's intent
951
+ * survives the real launch path.
952
+ */
953
+ export const PLATFORM_PROOF = Symbol.for('@molecule/api-ai-tools/platform-proof');
954
+ /**
955
+ * Whether an `exec_command` input object carries the host's {@link PLATFORM_PROOF} mark.
956
+ *
957
+ * @param input - The tool input as the handler received it.
958
+ * @returns True only for a launch host code marked; false for anything a model sent.
959
+ */
960
+ export function isPlatformProofLaunch(input) {
961
+ return (typeof input === 'object' &&
962
+ input !== null &&
963
+ input[PLATFORM_PROOF] === true);
964
+ }
902
965
  /**
903
966
  * The Playwright invocation's text when the command starts one, or null.
904
967
  *
@@ -965,11 +1028,25 @@ function boundsFailures(command) {
965
1028
  * that exclusion, the rewriter added `--retries=0` to it, and the run lost the suite's retries on
966
1029
  * the one walk where a network blip is likeliest.
967
1030
  *
1031
+ * A command the PLATFORM composed and launched AS the graded proof keeps the suite's retries for
1032
+ * the SELECTION it composed — the failures a redeploy re-runs, named as files and `file:line`
1033
+ * ({@link DiagnosisRunContext} `platformProof`). Only that selection is excused: a cap, a title
1034
+ * filter, a last-failed set and a local targeted selection stay diagnoses, so the mark cannot turn a walk of
1035
+ * part of the suite into the graded measurement. Which targets are local is
1036
+ * {@link suiteCommandTarget}'s answer, and the launch rewrite asks it on the same reading
1037
+ * ({@link ./utilities.js} `streamingBackgroundCommand`).
1038
+ *
968
1039
  * @param command - The command as the executor sent it.
969
- * @param context - The request's approved exclusions, when the caller knows them.
970
- * @returns True when the run is a diagnosis or a re-run, not the whole suite.
1040
+ * @param context - The request's approved exclusions and whether this command IS the graded
1041
+ * proof, when the caller knows them.
1042
+ * A whole local walk still covers the whole suite; the launcher's separate local-target policy
1043
+ * disables its retries. This predicate classifies narrowed selections and their proof purpose.
1044
+ *
1045
+ * @returns True when the run is a diagnosis or a re-run, not the whole suite or a deployed proof selection.
971
1046
  */
972
1047
  export function isDiagnosisRun(command, context) {
1048
+ // A cap bounds the walk whatever launched it. `--max-failures=0` is Playwright's own "no cap"
1049
+ // ({@link boundsFailures}), so the uncapped spelling is not read as a diagnosis here.
973
1050
  if (boundsFailures(command))
974
1051
  return true;
975
1052
  const run = playwrightRun(command);
@@ -980,10 +1057,20 @@ export function isDiagnosisRun(command, context) {
980
1057
  if (commandRunsNoTests(run))
981
1058
  return true;
982
1059
  const inverted = grepInvertPattern(run);
983
- if (inverted === null)
984
- return NARROWED_RUN.test(run);
985
1060
  // A file, a line, a `-g`, `--last-failed` … narrows the run whatever the inversion also drops.
986
- if (NARROWED_RUN.test(withoutGrepInvert(run)))
1061
+ const selection = inverted === null ? run : withoutGrepInvert(run);
1062
+ if (NARROWED_RUN.test(selection)) {
1063
+ // The platform's own proof keeps the suite's retries for the failures it re-runs — the one
1064
+ // selection a redeploy composes. Every other narrower is still a diagnosis: a filter or a
1065
+ // last-failed set measures a part of the suite, capped or not.
1066
+ if (context?.platformProof === true &&
1067
+ namesOnlySelection(selection) &&
1068
+ suiteCommandTarget(command) !== 'local')
1069
+ return false;
987
1070
  return true;
1071
+ }
1072
+ if (inverted === null)
1073
+ return false;
1074
+ // No selector or filter narrows the run: only the inversion's own scope can make it a diagnosis.
988
1075
  return matchingExcludedTitles(inverted, context?.approvedExclusions ?? []).length === 0;
989
1076
  }
@@ -1 +1 @@
1
- {"version":3,"file":"tools.d.ts","sourceRoot":"","sources":["../src/tools.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAIH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAA;AAgS9C;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAsB,eAAe,CAAC,OAAO,EAAE,gBAAgB,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAahG;AAudD,OAAO,KAAK,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,YAAY,CAAA;AAiInE;;;GAGG;AACH,eAAO,MAAM,iBAAiB,QAEA,CAAA;AAE9B;;;;;;;;;;;;;GAaG;AACH,eAAO,MAAM,wBAAwB,QAI6C,CAAA;AA2DlF;;;;;;;;;;;GAWG;AACH,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAUhE;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,wBAAwB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAGtE;AAED;;;;;;;;;;;;GAYG;AACH,MAAM,WAAW,qBAAqB;IACpC,iFAAiF;IACjF,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAA;IACzB,8FAA8F;IAC9F,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAA;CAC5B;AAED;;;;;;;GAOG;AACH,MAAM,MAAM,qBAAqB,GAAG,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,qBAAqB,CAAC,CAAA;AAoBpF;;;;;;;GAOG;AACH,wBAAgB,0BAA0B,CACxC,GAAG,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,OAAO,CAAC;IAAE,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,GAAG,SAAS,CAAC,GACxE,qBAAqB,CAkBvB;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAqCG;AACH,wBAAsB,4BAA4B,CAChD,IAAI,EAAE,MAAM,EACZ,KAAK,CAAC,EAAE,qBAAqB,GAC5B,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAiCxB;AA2GD;;;;;;GAMG;AACH,wBAAgB,UAAU,CAAC,OAAO,EAAE,gBAAgB,EAAE,MAAM,CAAC,EAAE,eAAe,GAAG,MAAM,EAAE,CA4iGxF"}
1
+ {"version":3,"file":"tools.d.ts","sourceRoot":"","sources":["../src/tools.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAIH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAA;AAgS9C;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAsB,eAAe,CAAC,OAAO,EAAE,gBAAgB,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAahG;AAudD,OAAO,KAAK,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,YAAY,CAAA;AAiInE;;;GAGG;AACH,eAAO,MAAM,iBAAiB,QAEA,CAAA;AAE9B;;;;;;;;;;;;;GAaG;AACH,eAAO,MAAM,wBAAwB,QAI6C,CAAA;AA2DlF;;;;;;;;;;;GAWG;AACH,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAUhE;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,wBAAwB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAGtE;AAED;;;;;;;;;;;;GAYG;AACH,MAAM,WAAW,qBAAqB;IACpC,iFAAiF;IACjF,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAA;IACzB,8FAA8F;IAC9F,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAA;CAC5B;AAED;;;;;;;GAOG;AACH,MAAM,MAAM,qBAAqB,GAAG,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,qBAAqB,CAAC,CAAA;AAoBpF;;;;;;;GAOG;AACH,wBAAgB,0BAA0B,CACxC,GAAG,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,OAAO,CAAC;IAAE,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,GAAG,SAAS,CAAC,GACxE,qBAAqB,CAkBvB;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAqCG;AACH,wBAAsB,4BAA4B,CAChD,IAAI,EAAE,MAAM,EACZ,KAAK,CAAC,EAAE,qBAAqB,GAC5B,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAiCxB;AA2GD;;;;;;GAMG;AACH,wBAAgB,UAAU,CAAC,OAAO,EAAE,gBAAgB,EAAE,MAAM,CAAC,EAAE,eAAe,GAAG,MAAM,EAAE,CAqkGxF"}
package/dist/tools.js CHANGED
@@ -701,8 +701,8 @@ async function backgroundTaskState(backend, command, seconds, ceilingMs) {
701
701
  slice,
702
702
  };
703
703
  }
704
- import { suiteCommandTarget } from './suite-overlap.js';
705
- import { diagnosisTraceCommand } from './trace-artifacts.js';
704
+ import { isPlatformProofLaunch, suiteCommandTarget } from './suite-overlap.js';
705
+ import { diagnosisTraceCommand, namesNoRetries } from './trace-artifacts.js';
706
706
  import { addedRedactionMask, BRACE_GLOB_HINT, checkBlockedCommand, declaredBudgetSeconds, DEFAULT_SEARCH_EXCLUDED_DIRS, directoryReadHint, earlyReturnCause, emptyCallError, expandBraceGlob, failureCausesNote, findPathArgs, findPatternArgs, fusedLine, htmlOutline, isCommandTimeout, isEnvFilePath, isOutsideRoot, isPlaywrightRunCommand, isReadOnlyInspection, isSuiteRunCommand, linesWithinSerialized, literalDirPrefix, logShowsInlineFailureBodies, MAX_BATCH_READ_FILES, MAX_FIND_RESULTS, MAX_HTML_INLINE_CHARS, MAX_OUTPUT_SIZE, MAX_READ_CALL_CHARS, MAX_READ_RETURN_CHARS, MAX_READ_SIZE, MAX_SEARCH_CONTEXT_LINES, MAX_SEARCH_RESULTS, MAX_WRITE_SIZE, outputIsWithheldUntilExit, outputRedirectTarget, parseCheckCommand, parseCheckProblem, pathArgError, READ_RESULT_ENVELOPE_CHARS, redactSecrets, redactSecretsInCode, repeatedSuiteRunError, repeatingFailure, repeatingFailureNote, resolvePath, RUNNING_FAILURE_LINES, runningCauseCommand, runningLogReadCommand, runningOutputSliceCommand, searchTimeoutError, serializedChars, shellQuote, sliceLines, SMALL_FILE_WHOLE_CHARS, streamingBackgroundCommand, stripControlChars, suiteRunBudgetCommand, suiteRunConfigCommand, suiteRunPipelinePlacement, suiteRunPriorityLaunch, TOOL_RESULT_CHARS, truncateMiddle, universalCause, whitespaceTolerantReplace, withoutSuiteTimeout, withPlaywrightRunReport, } from './utilities.js';
707
707
  /**
708
708
  * How long exec_command waits for a command it backgrounded only because the
@@ -2576,9 +2576,13 @@ export function buildTools(backend, config) {
2576
2576
  // the model meant answered a `list_files` instantly (xr-molecule-flash-m94).
2577
2577
  // A bare first segment (`helpers/*`) is left alone on purpose: it means "any
2578
2578
  // `helpers/` below the root" (xr-molecule-flash-m77, see literalDirPrefix).
2579
+ // An npm scope under a `node_modules` root is the exception the root enables:
2580
+ // `@molecule/app-markdown*/package.json` names `<root>/@molecule` and nothing
2581
+ // else, and un-narrowed it walked the whole dependency tree into the deadline
2582
+ // (xr-molecule-flash-l65).
2579
2583
  // Brace alternatives may each name a directory (`{src/a,src/b}/*.ts`),
2580
2584
  // so a narrowing prefix is used only when every expansion agrees on it.
2581
- const prefixes = patterns.map((p) => literalDirPrefix(p));
2585
+ const prefixes = patterns.map((p) => literalDirPrefix(p, path));
2582
2586
  const prefixDir = prefixes.every((p) => p === prefixes[0]) ? prefixes[0] : null;
2583
2587
  let findRoot = path;
2584
2588
  let findArgs = findArgsForPatterns(patterns);
@@ -2912,7 +2916,16 @@ export function buildTools(backend, config) {
2912
2916
  // restart (see reportByTask). A run whose reporter set is not this tool's to place — or
2913
2917
  // one that already writes a report of its own — comes back with no report path and is
2914
2918
  // launched exactly as before.
2915
- const streaming = streamingBackgroundCommand(command, { approvedExclusions: excludedTestTitles?.() ?? [] }, playwrightReportPathFor(id));
2919
+ //
2920
+ // Whether this launch IS the platform's graded proof is a HOST fact, read off the symbol
2921
+ // `PLATFORM_PROOF` that only host code can set on the input object — not from a JSON key
2922
+ // in the model's arguments, which the model would control (a `platform_proof` key it
2923
+ // writes is an unknown input key and is ignored). A launch without the mark is read
2924
+ // exactly as before.
2925
+ const streaming = streamingBackgroundCommand(command, {
2926
+ approvedExclusions: excludedTestTitles?.() ?? [],
2927
+ platformProof: isPlatformProofLaunch(input),
2928
+ }, playwrightReportPathFor(id));
2916
2929
  // A command that starts the suite more than once is refused here, before anything is
2917
2930
  // written or launched: each walk measures the same code, and only the last is rewritten
2918
2931
  // (X1 xr-molecule-flash-m157 +14:02 — two whole walks chained with `;`).
@@ -3591,7 +3604,19 @@ export function buildTools(backend, config) {
3591
3604
  if (yieldDiagnostic &&
3592
3605
  taskRecord &&
3593
3606
  !taskRecord.diagnosticYielded &&
3594
- logShowsInlineFailureBodies(causeLog)) {
3607
+ // A failure the request excludes by name is not a diagnostic to hand back — the same
3608
+ // matcher the finished run's causes note drops it with, so the wait keeps running and
3609
+ // the one yield stays available for a failure that counts (xr-molecule-flash-h13).
3610
+ // Only a failure the run has FINISHED with is a diagnostic: a first attempt whose retry
3611
+ // has not printed yet may still pass, and handing it back sent the builder to fix a test
3612
+ // the retry absorbed while the deployed proof went green — the edit voided that proof
3613
+ // and cost a redeploy plus a whole walk (xr-molecule-flash-l69). The yield itself stays:
3614
+ // the retry-failure shape it was written for keeps firing. A command pinned to
3615
+ // `--retries=0` has no retry to wait for, so its first failure is already final.
3616
+ logShowsInlineFailureBodies(causeLog, excludedTestTitles?.() ?? [], {
3617
+ finalOnly: true,
3618
+ noRetries: namesNoRetries(taskRecord.command),
3619
+ })) {
3595
3620
  // Completion during the log read still wins over a progress return.
3596
3621
  exitCode = await readExit();
3597
3622
  if (exitCode !== null)
@@ -843,6 +843,15 @@ export declare function failureTraceNote(items: readonly TraceArtifact[], target
843
843
  * @returns True when the config records traces for failures.
844
844
  */
845
845
  export declare function suiteRecordsTraces(configText: string): boolean;
846
+ /**
847
+ * Whether the run itself pins `--retries=0` (either spelling): a run that cannot retry records no
848
+ * retry trace, so it still needs one recorded for it. A running wait reads the same proof to know
849
+ * a first failure's body is already final (`wait_for_task`'s diagnostic yield).
850
+ *
851
+ * @param command - The shell command.
852
+ * @returns True when the run allows no retry.
853
+ */
854
+ export declare function namesNoRetries(command: string): boolean;
846
855
  /** The `--trace` flag this platform adds, and the only value it adds it with. */
847
856
  export declare const DIAGNOSIS_TRACE_FLAG = "--trace=retain-on-failure";
848
857
  /** A command with the trace flag this platform decided to add, and the sentence to report it in. */
@@ -854,20 +863,30 @@ export interface DiagnosisTraceRewrite {
854
863
  }
855
864
  /**
856
865
  * The command a Playwright run needs to leave a readable trace behind, when the suite's config
857
- * would record none.
866
+ * would record none — except a run that can serve as proof, whose own settings are left alone.
858
867
  *
859
868
  * The failing tests' requests are only readable if the run wrote them down (see the module doc),
860
869
  * and the config is where the decision about that lives — the platform does not edit the suite's
861
- * config, so it passes the flag instead, on every Playwright run that starts tests and does not
862
- * already decide its own `--trace`. That includes the whole-suite proof run, which an earlier
863
- * version of this function skipped on the reasoning that its flags are graded: the flag changes
864
- * what is RETAINED, not what passes. `retain-on-failure` keeps the trace only of a test that
865
- * fails — Playwright records it and deletes it when the test passes (playwright's
866
- * `_shouldAbandonTrace` unlinks the temporary trace files of a passing test) — so a green proof
867
- * run keeps nothing extra. A failing one keeps the network log its failures need.
868
- * xr-molecule-flash-m163 (+24:58) is why the proof run is no longer skipped: its one deployed
869
- * failure left only an `error-context.md`, the executor spent the next calls hunting a `trace.zip`
870
- * that could not exist, and then shipped a guessed fix.
870
+ * config, so it passes the flag instead, on a Playwright run that starts tests, does not already
871
+ * decide its own `--trace`, and whose config keeps no trace for its failures.
872
+ *
873
+ * A run that can serve as PROOF is the exception: the graded measurement is the suite's own
874
+ * settings, so it keeps its own tracing and retries. That was measured, not assumed — on one
875
+ * sandbox in X1 xr-molecule-flash-h15 (+46:53 → +49:30) the same build ran a three-test deployed
876
+ * subset 3/3 timed out under this flag (17.6–17.9 s against a 15 s per-test budget) and the whole
877
+ * file passed 14/14 without it (10.9–12.1 s). `retain-on-failure` RETAINS only a failing test's
878
+ * trace (Playwright's `_shouldAbandonTrace` unlinks a passing test's), but it RECORDS every
879
+ * action of every test, and for a test near its per-test budget that recording is the difference
880
+ * between passing and timing out. m163 (+24:58) is the failure this flag was added for: its
881
+ * deployed proof run left only an `error-context.md` because the suite traces
882
+ * `on-first-retry` and the run had no retries. That need is met without the flag — the graded
883
+ * deployed run keeps the suite's own retries, so a failing test leaves its retry's trace — and
884
+ * the platform's re-run note carries `--trace=on` for a run that did leave none.
885
+ *
886
+ * Which runs are proof-capable is {@link suiteCommandTarget}'s answer: a run against a deployed
887
+ * URL. A LOCAL run is never left to its config, because the launcher gives every local run
888
+ * `--retries=0` (`@molecule/api-ai-tools` `streamingBackgroundCommand`), so its retry trace would
889
+ * never happen. A run that pins `--retries=0` itself is in the same position, whatever its target.
871
890
  *
872
891
  * @param args - The command, the directory it starts in, and the backend's file read.
873
892
  * @returns The command to run and the sentence to report, or the command unchanged.
@@ -1 +1 @@
1
- {"version":3,"file":"trace-artifacts.d.ts","sourceRoot":"","sources":["../src/trace-artifacts.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"trace-artifacts.d.ts","sourceRoot":"","sources":["../src/trace-artifacts.ts"],"names":[],"mappings":"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"}
@@ -30,6 +30,7 @@
30
30
  * @module
31
31
  */
32
32
  import { locatedCommandSegments, statementArgumentEnd } from './command-position.js';
33
+ import { suiteCommandTarget } from './suite-overlap.js';
33
34
  import { isPlaywrightRunCommand, redactSecrets } from './utilities.js';
34
35
  /** How many traces one read reports, newest first. */
35
36
  export const MAX_TRACE_ARTIFACTS = 12;
@@ -4469,6 +4470,39 @@ export function suiteRecordsTraces(configText) {
4469
4470
  const text = configText.replace(/\/\*[\s\S]*?\*\//g, '').replace(/(^|[^:])\/\/[^\n]*/g, '$1');
4470
4471
  return [...text.matchAll(TRACE_SETTING)].some((m) => RECORDING_TRACE_MODES.includes(m[1] ?? ''));
4471
4472
  }
4473
+ /** The trace modes that record only when a test is RETRIED (`on-first-retry`, `on-all-retries`). */
4474
+ const RETRY_TRACE_MODES = ['on-first-retry', 'on-all-retries'];
4475
+ /**
4476
+ * The trace mode a config records a RETRY with (`on-first-retry`, `on-all-retries`), or null.
4477
+ *
4478
+ * These modes are not "no trace": a test that fails and is retried leaves the trace of its retry
4479
+ * (`…-chromium-retry1/trace.zip`), which is exactly the artifact a failure's cause is read from.
4480
+ * They record nothing only when the run allows no retry at all — and that is the run this platform
4481
+ * completes with a flag, never the run whose settings are the graded measurement.
4482
+ *
4483
+ * @param configText - The config's source, or '' when none could be read.
4484
+ * @returns The mode as the config spells it, or null when it records no retry trace.
4485
+ */
4486
+ function suiteTracesOnRetry(configText) {
4487
+ const text = configText.replace(/\/\*[\s\S]*?\*\//g, '').replace(/(^|[^:])\/\/[^\n]*/g, '$1');
4488
+ for (const m of text.matchAll(TRACE_SETTING)) {
4489
+ const mode = m[1] ?? '';
4490
+ if (RETRY_TRACE_MODES.includes(mode))
4491
+ return mode;
4492
+ }
4493
+ return null;
4494
+ }
4495
+ /**
4496
+ * Whether the run itself pins `--retries=0` (either spelling): a run that cannot retry records no
4497
+ * retry trace, so it still needs one recorded for it. A running wait reads the same proof to know
4498
+ * a first failure's body is already final (`wait_for_task`'s diagnostic yield).
4499
+ *
4500
+ * @param command - The shell command.
4501
+ * @returns True when the run allows no retry.
4502
+ */
4503
+ export function namesNoRetries(command) {
4504
+ return /(?:^|[\s;&|(])--retries(?:=|\s+)['"]?0(?![\d.])/.test(command);
4505
+ }
4472
4506
  /** The `--trace` flag this platform adds, and the only value it adds it with. */
4473
4507
  export const DIAGNOSIS_TRACE_FLAG = '--trace=retain-on-failure';
4474
4508
  /**
@@ -4571,20 +4605,30 @@ async function readRunConfig(command, cwd, readFile) {
4571
4605
  }
4572
4606
  /**
4573
4607
  * The command a Playwright run needs to leave a readable trace behind, when the suite's config
4574
- * would record none.
4608
+ * would record none — except a run that can serve as proof, whose own settings are left alone.
4575
4609
  *
4576
4610
  * The failing tests' requests are only readable if the run wrote them down (see the module doc),
4577
4611
  * and the config is where the decision about that lives — the platform does not edit the suite's
4578
- * config, so it passes the flag instead, on every Playwright run that starts tests and does not
4579
- * already decide its own `--trace`. That includes the whole-suite proof run, which an earlier
4580
- * version of this function skipped on the reasoning that its flags are graded: the flag changes
4581
- * what is RETAINED, not what passes. `retain-on-failure` keeps the trace only of a test that
4582
- * fails — Playwright records it and deletes it when the test passes (playwright's
4583
- * `_shouldAbandonTrace` unlinks the temporary trace files of a passing test) — so a green proof
4584
- * run keeps nothing extra. A failing one keeps the network log its failures need.
4585
- * xr-molecule-flash-m163 (+24:58) is why the proof run is no longer skipped: its one deployed
4586
- * failure left only an `error-context.md`, the executor spent the next calls hunting a `trace.zip`
4587
- * that could not exist, and then shipped a guessed fix.
4612
+ * config, so it passes the flag instead, on a Playwright run that starts tests, does not already
4613
+ * decide its own `--trace`, and whose config keeps no trace for its failures.
4614
+ *
4615
+ * A run that can serve as PROOF is the exception: the graded measurement is the suite's own
4616
+ * settings, so it keeps its own tracing and retries. That was measured, not assumed — on one
4617
+ * sandbox in X1 xr-molecule-flash-h15 (+46:53 → +49:30) the same build ran a three-test deployed
4618
+ * subset 3/3 timed out under this flag (17.6–17.9 s against a 15 s per-test budget) and the whole
4619
+ * file passed 14/14 without it (10.9–12.1 s). `retain-on-failure` RETAINS only a failing test's
4620
+ * trace (Playwright's `_shouldAbandonTrace` unlinks a passing test's), but it RECORDS every
4621
+ * action of every test, and for a test near its per-test budget that recording is the difference
4622
+ * between passing and timing out. m163 (+24:58) is the failure this flag was added for: its
4623
+ * deployed proof run left only an `error-context.md` because the suite traces
4624
+ * `on-first-retry` and the run had no retries. That need is met without the flag — the graded
4625
+ * deployed run keeps the suite's own retries, so a failing test leaves its retry's trace — and
4626
+ * the platform's re-run note carries `--trace=on` for a run that did leave none.
4627
+ *
4628
+ * Which runs are proof-capable is {@link suiteCommandTarget}'s answer: a run against a deployed
4629
+ * URL. A LOCAL run is never left to its config, because the launcher gives every local run
4630
+ * `--retries=0` (`@molecule/api-ai-tools` `streamingBackgroundCommand`), so its retry trace would
4631
+ * never happen. A run that pins `--retries=0` itself is in the same position, whatever its target.
4588
4632
  *
4589
4633
  * @param args - The command, the directory it starts in, and the backend's file read.
4590
4634
  * @returns The command to run and the sentence to report, or the command unchanged.
@@ -4599,6 +4643,13 @@ export async function diagnosisTraceCommand(args) {
4599
4643
  const config = await readRunConfig(args.command, args.cwd, args.readFile);
4600
4644
  if (suiteRecordsTraces(config))
4601
4645
  return unchanged;
4646
+ // A proof-capable run keeps the suite's own tracing and retries: its retry trace is the artifact
4647
+ // a failure is read from, and recording every action would change what the measurement says.
4648
+ const retryTrace = suiteTracesOnRetry(config);
4649
+ if (retryTrace !== null &&
4650
+ suiteCommandTarget(args.command) !== 'local' &&
4651
+ !namesNoRetries(args.command))
4652
+ return unchanged;
4602
4653
  // The flag goes into the Playwright step's own argument list, at the end of it — an option of
4603
4654
  // the run itself, whatever the command opens with, whatever pipes or redirects its output, and
4604
4655
  // before the `)` that may close a subshell around it. Appended at the end of the whole command
@@ -4613,9 +4664,12 @@ export async function diagnosisTraceCommand(args) {
4613
4664
  return unchanged;
4614
4665
  return {
4615
4666
  command: `${args.command.slice(0, at)} ${DIAGNOSIS_TRACE_FLAG}${args.command.slice(at)}`,
4616
- change: `Added \`${DIAGNOSIS_TRACE_FLAG}\`: the suite's config records no trace for a failure` +
4617
- `${/trace:/.test(config) ? '' : ' (it sets none)'}, and a failing test's own network log is ` +
4618
- 'what the platform reads the cause from. It keeps a trace only for a test that fails, so a ' +
4619
- 'green run retains nothing.',
4667
+ change: `Added \`${DIAGNOSIS_TRACE_FLAG}\`: ` +
4668
+ (retryTrace === null
4669
+ ? `the suite's config records no trace for a failure${/trace:/.test(config) ? '' : ' (it sets none)'}`
4670
+ : `the suite records traces only on a retry (\`${retryTrace}\`), and this run allows none`) +
4671
+ ", and a failing test's own network log is what the platform reads the cause from. It keeps " +
4672
+ 'a trace only for a test that fails; the recording still runs for every action of every test ' +
4673
+ 'and slows each one, so measure a timing budget once with `--trace=off` before changing the app.',
4620
4674
  };
4621
4675
  }
@@ -232,9 +232,11 @@ export declare const PLAYWRIGHT_FAILURES_INLINE_ENV = "PLAYWRIGHT_LIST_PRINT_FAI
232
232
  *
233
233
  * @param command - The command as the executor sent it.
234
234
  * @param context - What the caller knows beyond the command: the tests the person's request
235
- * excludes by name ({@link DiagnosisRunContext}). A `--grep-invert` of exactly those is the
235
+ * excludes by name, and whether this command IS the platform's graded proof
236
+ * ({@link DiagnosisRunContext}). A `--grep-invert` of exactly those exclusions is the
236
237
  * request's own scope, not a diagnosis, so it keeps the suite's retries on a deployed proof
237
- * (xr-molecule-flash-m170 +33:16).
238
+ * (xr-molecule-flash-m170 +33:16) — and a proof the platform itself composed and launched
239
+ * keeps them whatever its scope, targeted set included (xr-molecule-flash-l48 +26:35).
238
240
  * @param reportPath - Where this run should write Playwright's standard `json` report, when the
239
241
  * caller keeps one ({@link ./playwright-report.js}). The reporter is added to the run's own
240
242
  * reporter set, never in place of one, and its output goes to that file through
@@ -633,11 +635,24 @@ export declare function findPathArgs(pattern: string): string;
633
635
  * more segments (`@molecule/api-resource-user/dist`), which is the shape that
634
636
  * is a directory rather than a directory name.
635
637
  *
638
+ * An npm SCOPE as the first segment, under a `node_modules` root, is the one
639
+ * exception that parameter `root` enables: npm installs a scope only directly
640
+ * inside a `node_modules` directory, and the walk already prunes every nested
641
+ * `node_modules` (see `findPruneArgs`), so the whole-tree form can only ever
642
+ * match `<root>/@molecule/…` — the scope directory IS the directory the pattern
643
+ * names. Left un-narrowed, a scoped-package pattern walked the sandbox's entire
644
+ * dependency tree and hit the 10 s deadline with no result at all
645
+ * (xr-molecule-flash-l65). A bare NAME stays a directory name at any depth:
646
+ * `helpers/*` is unchanged even under a `node_modules` root.
647
+ *
636
648
  * @param pattern - A pattern already accepted by {@link isValidGlob}.
649
+ * @param root - The resolved search root, when one is already known; a
650
+ * scope-first prefix is returned only when this ends in a `node_modules`
651
+ * segment (and the pattern has more path after the scope).
637
652
  * @returns The literal directory prefix, without a trailing slash, or null when
638
653
  * the pattern has no glob character, no `/`, or only a bare name before one.
639
654
  */
640
- export declare function literalDirPrefix(pattern: string): string | null;
655
+ export declare function literalDirPrefix(pattern: string, root?: string): string | null;
641
656
  /**
642
657
  * Whether a backend error is the sandbox's own command deadline.
643
658
  *
@@ -1058,10 +1073,25 @@ export declare function repeatingFailure(log: string): RepeatingFailure | null;
1058
1073
  * During a wait the run has not ended (the exit file is read first), so a block beside a `✘` row
1059
1074
  * is one the reporter printed inline.
1060
1075
  *
1076
+ * A body for a test the request EXCLUDES is not that evidence: its failure does not count for
1077
+ * this request ({@link matchingExcludedTitles}), so a wait that handed it over as the diagnostic
1078
+ * spent a model round trip and 8 k of partial log on a test the same result says to ignore —
1079
+ * exactly what xr-molecule-flash-h13 (+19:06) did twice while the platform's proof was still
1080
+ * walking.
1081
+ *
1082
+ * With `finalOnly`, only a failure the run has FINISHED with counts; a pending retry waits.
1083
+ *
1061
1084
  * @param log - A log, or the slice of one a wait reads.
1062
- * @returns True when a `✘` row's own test has a failure body under it.
1063
- */
1064
- export declare function logShowsInlineFailureBodies(log: string): boolean;
1085
+ * @param excluded - The test titles the request carves out, if the caller knows them.
1086
+ * @param options - `finalOnly` reads only a failure the run has finished with; `noRetries` says
1087
+ * the command proves the run cannot retry (`--retries=0`), so its first failure is final.
1088
+ * @returns True when a `✘` row's own test, outside the request's exclusions, has a failure body
1089
+ * under it — and, with `finalOnly`, that failure is final in the log read so far.
1090
+ */
1091
+ export declare function logShowsInlineFailureBodies(log: string, excluded?: readonly string[], options?: {
1092
+ finalOnly?: boolean;
1093
+ noRetries?: boolean;
1094
+ }): boolean;
1065
1095
  /** How many of a repeating cause's failures the note lists before it says "and N more". */
1066
1096
  export declare const REPEATING_FAILURE_LISTED = 5;
1067
1097
  /**
@@ -1416,6 +1446,10 @@ regressedSpecs?: readonly string[]): string | null;
1416
1446
  * invocation, in the same directory, narrowed to those tests — or null when the running command
1417
1447
  * is not a Playwright run this can narrow.
1418
1448
  *
1449
+ * A run against a DEPLOYED URL keeps the suite's own retries and tracing in its re-run
1450
+ * ({@link scopedRerunCommand} `suiteSettings`): the deployed measurement is the one the deploy is
1451
+ * graded on, and neither the platform's `--retries=0` nor its recording `--trace` belongs on it.
1452
+ *
1419
1453
  * The `locations` are the paths the run's own log printed, which are relative to the directory
1420
1454
  * that run started in, so the composer resolves them there ({@link scopedRerunCommand}): the
1421
1455
  * command names that directory unless it already changes into one of its own, because the
@@ -1 +1 @@
1
- {"version":3,"file":"utilities.d.ts","sourceRoot":"","sources":["../src/utilities.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"utilities.d.ts","sourceRoot":"","sources":["../src/utilities.ts"],"names":[],"mappings":"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"}
package/dist/utilities.js CHANGED
@@ -649,9 +649,11 @@ function isStatusOnlyStep(step) {
649
649
  *
650
650
  * @param command - The command as the executor sent it.
651
651
  * @param context - What the caller knows beyond the command: the tests the person's request
652
- * excludes by name ({@link DiagnosisRunContext}). A `--grep-invert` of exactly those is the
652
+ * excludes by name, and whether this command IS the platform's graded proof
653
+ * ({@link DiagnosisRunContext}). A `--grep-invert` of exactly those exclusions is the
653
654
  * request's own scope, not a diagnosis, so it keeps the suite's retries on a deployed proof
654
- * (xr-molecule-flash-m170 +33:16).
655
+ * (xr-molecule-flash-m170 +33:16) — and a proof the platform itself composed and launched
656
+ * keeps them whatever its scope, targeted set included (xr-molecule-flash-l48 +26:35).
655
657
  * @param reportPath - Where this run should write Playwright's standard `json` report, when the
656
658
  * caller keeps one ({@link ./playwright-report.js}). The reporter is added to the run's own
657
659
  * reporter set, never in place of one, and its output goes to that file through
@@ -787,6 +789,13 @@ export function streamingBackgroundCommand(command, context, reportPath) {
787
789
  // {@link isDiagnosisRun}'s answer and nobody else's: the platform's notes ask the same
788
790
  // function, so a run cannot be a diagnosis to one of them and the whole suite to the other.
789
791
  // Which targets are local is {@link suiteCommandTarget}'s answer.
792
+ //
793
+ // A run the PLATFORM composed and launched as the graded proof keeps the suite's retries for
794
+ // the selection it composed — the failures a redeploy re-runs, named as files and `file:line`
795
+ // ({@link isDiagnosisRun} reads the host mark). It does NOT excuse a cap, a title filter or a
796
+ // last-failed set: those read as a diagnosis on that same reading, so the mark cannot turn a
797
+ // walk of part of the suite into the graded measurement. A LOCAL target is never the graded
798
+ // deployed run either, whatever launched it.
790
799
  const diagnosis = isDiagnosisRun(lastStep, context);
791
800
  const localTarget = suiteCommandTarget(lastStep) === 'local';
792
801
  // The last step's reporters: one printer, and it is `list`. Every branch below only ever moves
@@ -2041,11 +2050,24 @@ export function findPathArgs(pattern) {
2041
2050
  * more segments (`@molecule/api-resource-user/dist`), which is the shape that
2042
2051
  * is a directory rather than a directory name.
2043
2052
  *
2053
+ * An npm SCOPE as the first segment, under a `node_modules` root, is the one
2054
+ * exception that parameter `root` enables: npm installs a scope only directly
2055
+ * inside a `node_modules` directory, and the walk already prunes every nested
2056
+ * `node_modules` (see `findPruneArgs`), so the whole-tree form can only ever
2057
+ * match `<root>/@molecule/…` — the scope directory IS the directory the pattern
2058
+ * names. Left un-narrowed, a scoped-package pattern walked the sandbox's entire
2059
+ * dependency tree and hit the 10 s deadline with no result at all
2060
+ * (xr-molecule-flash-l65). A bare NAME stays a directory name at any depth:
2061
+ * `helpers/*` is unchanged even under a `node_modules` root.
2062
+ *
2044
2063
  * @param pattern - A pattern already accepted by {@link isValidGlob}.
2064
+ * @param root - The resolved search root, when one is already known; a
2065
+ * scope-first prefix is returned only when this ends in a `node_modules`
2066
+ * segment (and the pattern has more path after the scope).
2045
2067
  * @returns The literal directory prefix, without a trailing slash, or null when
2046
2068
  * the pattern has no glob character, no `/`, or only a bare name before one.
2047
2069
  */
2048
- export function literalDirPrefix(pattern) {
2070
+ export function literalDirPrefix(pattern, root) {
2049
2071
  const stripped = pattern.replace(/^(?:\.?\/)+/, '');
2050
2072
  const firstGlob = stripped.search(/[?*[]/);
2051
2073
  // No glob at all: the pattern IS a path, and the whole-tree form already
@@ -2056,7 +2078,14 @@ export function literalDirPrefix(pattern) {
2056
2078
  if (at <= 0)
2057
2079
  return null;
2058
2080
  const prefix = stripped.slice(0, at);
2059
- return prefix.includes('/') ? prefix : null;
2081
+ if (prefix.includes('/'))
2082
+ return prefix;
2083
+ // One segment: a bare directory NAME ("any depth", flash-m77) — except an npm
2084
+ // scope directly inside the node_modules root, which is one directory (above).
2085
+ if (root === undefined || !/^@[^/*?[]+$/.test(prefix))
2086
+ return null;
2087
+ const rootName = root.replace(/\/+$/, '').split('/').pop();
2088
+ return rootName === 'node_modules' ? prefix : null;
2060
2089
  }
2061
2090
  /**
2062
2091
  * Whether a backend error is the sandbox's own command deadline.
@@ -3071,24 +3100,122 @@ export function repeatingFailure(log) {
3071
3100
  * During a wait the run has not ended (the exit file is read first), so a block beside a `✘` row
3072
3101
  * is one the reporter printed inline.
3073
3102
  *
3103
+ * A body for a test the request EXCLUDES is not that evidence: its failure does not count for
3104
+ * this request ({@link matchingExcludedTitles}), so a wait that handed it over as the diagnostic
3105
+ * spent a model round trip and 8 k of partial log on a test the same result says to ignore —
3106
+ * exactly what xr-molecule-flash-h13 (+19:06) did twice while the platform's proof was still
3107
+ * walking.
3108
+ *
3109
+ * With `finalOnly`, only a failure the run has FINISHED with counts; a pending retry waits.
3110
+ *
3074
3111
  * @param log - A log, or the slice of one a wait reads.
3075
- * @returns True when a `✘` row's own test has a failure body under it.
3112
+ * @param excluded - The test titles the request carves out, if the caller knows them.
3113
+ * @param options - `finalOnly` reads only a failure the run has finished with; `noRetries` says
3114
+ * the command proves the run cannot retry (`--retries=0`), so its first failure is final.
3115
+ * @returns True when a `✘` row's own test, outside the request's exclusions, has a failure body
3116
+ * under it — and, with `finalOnly`, that failure is final in the log read so far.
3076
3117
  */
3077
- export function logShowsInlineFailureBodies(log) {
3118
+ export function logShowsInlineFailureBodies(log, excluded = [], options = {}) {
3078
3119
  const text = log.replace(ANSI_SGR, '');
3079
3120
  const failed = new Set(distinctTests(failedTests(text)).map(retrylessTestKey));
3080
3121
  if (failed.size === 0)
3081
3122
  return false;
3082
- for (const block of failureBlocks(text)) {
3123
+ const blocks = failureBlocks(text);
3124
+ const rows = options.finalOnly ? resultRows(text) : [];
3125
+ for (const block of blocks) {
3083
3126
  const m = FAILURE_BLOCK_HEADER.exec(block.split('\n')[0] ?? '');
3084
3127
  if (m === null)
3085
3128
  continue;
3086
3129
  const { where, title } = splitTitlePath(m[1] ?? '');
3087
- if (failed.has(retrylessTestKey({ where, title, seconds: null })))
3130
+ const heading = where === '' ? title : `${where} › ${title}`;
3131
+ if (matchingExcludedTitles(heading, excluded).length > 0)
3132
+ continue;
3133
+ const key = retrylessTestKey({ where, title, seconds: null });
3134
+ if (!failed.has(key))
3135
+ continue;
3136
+ if (!options.finalOnly)
3137
+ return true;
3138
+ if (failureIsFinal({ rows, blocks, key, noRetries: options.noRetries === true }))
3088
3139
  return true;
3089
3140
  }
3090
3141
  return false;
3091
3142
  }
3143
+ /** The runner's retry marker on a `list`-reporter row (` (retry #1)`, `_retrySuffix`). */
3144
+ const RETRY_ROW_SUFFIX = /\s*\(retry #\d+\)$/;
3145
+ /** The separator a retried failure's body opens its own attempt with (`formatFailure`). */
3146
+ const RETRY_BODY_SEPARATOR = /^\s*Retry #\d+\b/m;
3147
+ /**
3148
+ * Every result row a log carries, in the order the runner printed them.
3149
+ *
3150
+ * @param log - The log (ANSI already stripped).
3151
+ * @returns The rows, each with where it sits, what it is called, and which attempt it is.
3152
+ */
3153
+ function resultRows(log) {
3154
+ const rows = [];
3155
+ for (const line of log.split('\n')) {
3156
+ const m = LIST_RESULT_LINE.exec(line);
3157
+ if (!m)
3158
+ continue;
3159
+ const { where, title } = splitTitlePath(m[2]);
3160
+ rows.push({
3161
+ mark: m[1],
3162
+ where,
3163
+ title,
3164
+ seconds: durationSeconds(m[3], m[4]),
3165
+ retry: RETRY_ROW_SUFFIX.test(title),
3166
+ });
3167
+ }
3168
+ return rows;
3169
+ }
3170
+ /**
3171
+ * A failure block's test identity, keyed the way a result row is.
3172
+ *
3173
+ * @param block - One block from {@link failureBlocks}.
3174
+ * @returns The test key, or null when the block's header names no test.
3175
+ */
3176
+ function failureBlockKey(block) {
3177
+ const m = FAILURE_BLOCK_HEADER.exec(block.split('\n')[0] ?? '');
3178
+ if (m === null)
3179
+ return null;
3180
+ const { where, title } = splitTitlePath(m[1] ?? '');
3181
+ return retrylessTestKey({ where, title, seconds: null });
3182
+ }
3183
+ /**
3184
+ * Whether a test's failure is FINAL in the log read so far — one the run is done with, not a
3185
+ * first attempt whose retry is still to come.
3186
+ *
3187
+ * A `list` run retries a failed test immediately, so the test's own next row says which attempt
3188
+ * the log has printed last: the same test's ` (retry #N)` row (final when that retry failed; a
3189
+ * flake the run absorbed when it passed), or a different test's row (no retry ran, so the failure
3190
+ * was final). A `Retry #N` separator in the test's body is the runner's own record that a retry
3191
+ * attempt ran and failed. A first attempt followed by nothing is only the last row READ — its
3192
+ * retry may not have printed yet — so it waits; a command that pins `--retries=0` proves there is
3193
+ * no retry to wait for.
3194
+ *
3195
+ * X1 xr-molecule-flash-l69 (+28:26): the deployed proof's yield handed back a first attempt
3196
+ * (no `Retry #` separator) that then passed on its retry, and the edit it prompted cost a
3197
+ * redeploy plus a whole walk. The fix is not to stop yielding — the retry-failed shape (l69's
3198
+ * first walk, null-fields:71) paid off — but to yield only on this one.
3199
+ *
3200
+ * @param args - The log's rows and blocks, the failing test's key, and whether the command
3201
+ * proves the run cannot retry.
3202
+ * @returns True when that test's failure is final in the log read so far.
3203
+ */
3204
+ function failureIsFinal(args) {
3205
+ if (args.noRetries)
3206
+ return true;
3207
+ // The runner's own record that an attempt after the first ran and failed.
3208
+ if (args.blocks.some((block) => failureBlockKey(block) === args.key && RETRY_BODY_SEPARATOR.test(block)))
3209
+ return true;
3210
+ const own = args.rows.filter((row) => retrylessTestKey(row) === args.key);
3211
+ const last = own.at(-1);
3212
+ if (last === undefined)
3213
+ return false;
3214
+ if (last.retry)
3215
+ return last.mark === '✘';
3216
+ const at = args.rows.indexOf(last);
3217
+ return args.rows.slice(at + 1).some((row) => retrylessTestKey(row) !== args.key);
3218
+ }
3092
3219
  /** How many of a repeating cause's failures the note lists before it says "and N more". */
3093
3220
  export const REPEATING_FAILURE_LISTED = 5;
3094
3221
  /**
@@ -4264,6 +4391,10 @@ function omittedCausesRecap(omitted, run, excluded) {
4264
4391
  * invocation, in the same directory, narrowed to those tests — or null when the running command
4265
4392
  * is not a Playwright run this can narrow.
4266
4393
  *
4394
+ * A run against a DEPLOYED URL keeps the suite's own retries and tracing in its re-run
4395
+ * ({@link scopedRerunCommand} `suiteSettings`): the deployed measurement is the one the deploy is
4396
+ * graded on, and neither the platform's `--retries=0` nor its recording `--trace` belongs on it.
4397
+ *
4267
4398
  * The `locations` are the paths the run's own log printed, which are relative to the directory
4268
4399
  * that run started in, so the composer resolves them there ({@link scopedRerunCommand}): the
4269
4400
  * command names that directory unless it already changes into one of its own, because the
@@ -4286,7 +4417,12 @@ export function rerunOfRunningSuite(run, locations, excluded = []) {
4286
4417
  // The run's own directory is the base a relative failure location resolves against: the
4287
4418
  // reporter prints it from where the runner started, and Playwright matches file arguments
4288
4419
  // against absolute paths (xr-molecule-flash-m118 +16:34, m124 +18:38).
4289
- const scoped = scopedRerunCommand(run.command, locations, excluded, run.config, run.cwd, run.env ?? []);
4420
+ const scoped = scopedRerunCommand(run.command, locations, excluded, run.config, run.cwd, run.env ?? [],
4421
+ // A run against a DEPLOYED URL is re-run with the suite's own retries and tracing: that is
4422
+ // the measurement the deploy is graded on, and the platform's `--retries=0` plus its
4423
+ // `--trace=retain-on-failure` made it a stricter one — on X1 xr-molecule-flash-h15 the
4424
+ // recording alone turned three budget-bound deployed tests into timeouts.
4425
+ { suiteSettings: suiteCommandTarget(run.command) !== 'local' });
4290
4426
  if (scoped === run.command)
4291
4427
  return null;
4292
4428
  if (!run.cwd || commandSegments(withoutHeredocs(run.command)).some((s) => s.program === 'cd'))
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@molecule/api-ai-tools",
3
- "version": "1.14.2",
3
+ "version": "1.14.4",
4
4
  "description": "Shared AI agent tools with backend abstraction for sandbox and local execution",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",