@orkestrel/probe 0.0.26 → 0.0.28
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/src/core/index.cjs +34 -34
- package/dist/src/core/index.cjs.map +1 -1
- package/dist/src/core/index.d.cts +70 -70
- package/dist/src/core/index.d.ts +70 -70
- package/dist/src/core/index.js +33 -33
- package/dist/src/core/index.js.map +1 -1
- package/dist/src/server/index.cjs +45 -37
- package/dist/src/server/index.cjs.map +1 -1
- package/dist/src/server/index.d.cts +46 -41
- package/dist/src/server/index.d.ts +46 -41
- package/dist/src/server/index.js +47 -39
- package/dist/src/server/index.js.map +1 -1
- package/package.json +13 -13
|
@@ -60,27 +60,6 @@ text: StringShape;
|
|
|
60
60
|
}, false>;
|
|
61
61
|
}, false>;
|
|
62
62
|
|
|
63
|
-
/**
|
|
64
|
-
* Carries one stage's outcome: what it cost and what it reported.
|
|
65
|
-
*
|
|
66
|
-
* @remarks
|
|
67
|
-
* An empty `issues` list is the clean result. There is no separate pass flag, because passing is
|
|
68
|
-
* exactly the absence of issues and a stored flag could disagree with the list beside it.
|
|
69
|
-
*
|
|
70
|
-
* @example
|
|
71
|
-
* ```ts
|
|
72
|
-
* const check: Check = { stage: 'lint', elapsed: 17, issues: [] }
|
|
73
|
-
* ```
|
|
74
|
-
*/
|
|
75
|
-
export declare interface Check {
|
|
76
|
-
/** Names the stage that produced this outcome. */
|
|
77
|
-
readonly stage: Stage;
|
|
78
|
-
/** Holds the milliseconds the stage took. */
|
|
79
|
-
readonly elapsed: number;
|
|
80
|
-
/** Holds every message the stage's tool reported, in the tool's own order. */
|
|
81
|
-
readonly issues: readonly Issue[];
|
|
82
|
-
}
|
|
83
|
-
|
|
84
63
|
/**
|
|
85
64
|
* Carries everything the service needs to produce one verdict.
|
|
86
65
|
*
|
|
@@ -189,8 +168,8 @@ reason: StringShape;
|
|
|
189
168
|
* Computes the proof token a verdict carries, or returns nothing when the claim was not proven.
|
|
190
169
|
*
|
|
191
170
|
* @remarks
|
|
192
|
-
* A receipt is minted on these conditions together: both phases report one
|
|
193
|
-
* case carries no issue, the control carries at least one `origin: 'claimant'` issue
|
|
171
|
+
* A receipt is minted on these conditions together: both phases report one stage result per stage,
|
|
172
|
+
* the case carries no issue, the control carries at least one `origin: 'claimant'` issue
|
|
194
173
|
* at the stage it declared, and every other control stage carries no claimant issue. A control
|
|
195
174
|
* that fails somewhere else has falsified the instrument rather than the claim, so no receipt is
|
|
196
175
|
* minted for it.
|
|
@@ -216,7 +195,7 @@ reason: StringShape;
|
|
|
216
195
|
* refuses the receipt. A workspace issue in the control does not decide whether the claimant's
|
|
217
196
|
* candidate broke, while one in the case still means that the case did not run clean.
|
|
218
197
|
*
|
|
219
|
-
* @param verdict - The verdict whose case and control
|
|
198
|
+
* @param verdict - The verdict whose case and control stage results decide the outcome
|
|
220
199
|
* @param stage - The stage the claim's control declared it must fail at
|
|
221
200
|
* @returns The receipt token, or `undefined` when any condition fails
|
|
222
201
|
*
|
|
@@ -351,24 +330,6 @@ path: StringShape;
|
|
|
351
330
|
text: StringShape;
|
|
352
331
|
}, false>;
|
|
353
332
|
|
|
354
|
-
/**
|
|
355
|
-
* Renders one stage's outcome as its summary line followed by every message it reported.
|
|
356
|
-
*
|
|
357
|
-
* @remarks
|
|
358
|
-
* A clean stage renders one line. The count appears even when it is zero, because that line is
|
|
359
|
-
* what shows a reader the stage ran; a silent stage and a skipped stage read the same.
|
|
360
|
-
*
|
|
361
|
-
* @param check - The stage outcome to render
|
|
362
|
-
* @returns The summary line, then one indented line per issue
|
|
363
|
-
*
|
|
364
|
-
* @example
|
|
365
|
-
* ```ts
|
|
366
|
-
* formatCheck({ stage: 'lint', elapsed: 17, issues: [] })
|
|
367
|
-
* // 'lint: 0 issues (17 ms)'
|
|
368
|
-
* ```
|
|
369
|
-
*/
|
|
370
|
-
export declare function formatCheck(check: Check): string;
|
|
371
|
-
|
|
372
333
|
/**
|
|
373
334
|
* Renders one tool message as a single line an agent can classify and locate.
|
|
374
335
|
*
|
|
@@ -463,6 +424,24 @@ export declare function formatReceipt(verdict: Verdict): string;
|
|
|
463
424
|
*/
|
|
464
425
|
export declare function formatSpecification(text: string, revision: string): string;
|
|
465
426
|
|
|
427
|
+
/**
|
|
428
|
+
* Renders one stage's outcome as its summary line followed by every message it reported.
|
|
429
|
+
*
|
|
430
|
+
* @remarks
|
|
431
|
+
* A clean stage renders one line. The count appears even when it is zero, because that line is
|
|
432
|
+
* what shows a reader the stage ran; a silent stage and a skipped stage read the same.
|
|
433
|
+
*
|
|
434
|
+
* @param result - The stage outcome to render
|
|
435
|
+
* @returns The summary line, then one indented line per issue
|
|
436
|
+
*
|
|
437
|
+
* @example
|
|
438
|
+
* ```ts
|
|
439
|
+
* formatStageResult({ stage: 'lint', elapsed: 17, issues: [] })
|
|
440
|
+
* // 'lint: 0 issues (17 ms)'
|
|
441
|
+
* ```
|
|
442
|
+
*/
|
|
443
|
+
export declare function formatStageResult(result: StageResult): string;
|
|
444
|
+
|
|
466
445
|
/**
|
|
467
446
|
* Renders a whole verdict as the text an agent reads.
|
|
468
447
|
*
|
|
@@ -474,8 +453,8 @@ export declare function formatSpecification(text: string, revision: string): str
|
|
|
474
453
|
* The heading lines carry everything the receipt binds, each in the name-then-value form the
|
|
475
454
|
* toolchain line established: the call's identity, the claim it answered, the tools that ran, and
|
|
476
455
|
* the project that judged the candidates. A verdict carrying the control's reason renders it next,
|
|
477
|
-
* before either phase's
|
|
478
|
-
* without recomputing anything.
|
|
456
|
+
* before either phase's stage results. A reader comparing two verdicts therefore reads what
|
|
457
|
+
* differed without recomputing anything.
|
|
479
458
|
*
|
|
480
459
|
* @param verdict - The verdict to render
|
|
481
460
|
* @returns The identity, claim, toolchain, project, and reason when present, then every case and
|
|
@@ -502,19 +481,6 @@ export declare function formatVerdict(verdict: Verdict): string;
|
|
|
502
481
|
*/
|
|
503
482
|
export declare const isCase: Guard<Case>;
|
|
504
483
|
|
|
505
|
-
/**
|
|
506
|
-
* Checks whether a value carries one stage's outcome.
|
|
507
|
-
*
|
|
508
|
-
* @param value - The value to check
|
|
509
|
-
* @returns True if the value is a check; false otherwise
|
|
510
|
-
*
|
|
511
|
-
* @example
|
|
512
|
-
* ```ts
|
|
513
|
-
* isCheck({ stage: 'lint', elapsed: 17, issues: [] }) // true
|
|
514
|
-
* ```
|
|
515
|
-
*/
|
|
516
|
-
export declare const isCheck: Guard<Check>;
|
|
517
|
-
|
|
518
484
|
/**
|
|
519
485
|
* Checks whether a value carries a project, a case, and a control.
|
|
520
486
|
*
|
|
@@ -559,11 +525,11 @@ export declare const isControl: Guard<Control>;
|
|
|
559
525
|
* Checks whether a value carries a proposed file's path and text.
|
|
560
526
|
*
|
|
561
527
|
* @remarks
|
|
562
|
-
* Rejects an empty, absolute, or
|
|
563
|
-
* `.` or may traverse to a parent that remains inside the
|
|
564
|
-
* by that path, so admitting
|
|
565
|
-
* accepted the draft. An `Issue` carries no such minimum
|
|
566
|
-
* rather than admits them.
|
|
528
|
+
* Rejects an empty path, an absolute path, or a path that resolves outside the workspace. A
|
|
529
|
+
* contained relative path may contain `.` or may traverse to a parent that remains inside the
|
|
530
|
+
* workspace. Every stage resolves a file by that path, so admitting such a path here would defer
|
|
531
|
+
* the refusal until a stage had already accepted the draft. An `Issue` carries no such minimum
|
|
532
|
+
* because this package produces issues rather than admits them.
|
|
567
533
|
*
|
|
568
534
|
* @param value - The value to check
|
|
569
535
|
* @returns True if the value is a draft; false otherwise
|
|
@@ -666,11 +632,24 @@ export declare const isProject: Guard<Project>;
|
|
|
666
632
|
*/
|
|
667
633
|
export declare const isStage: Guard<Stage>;
|
|
668
634
|
|
|
635
|
+
/**
|
|
636
|
+
* Checks whether a value carries one stage's outcome.
|
|
637
|
+
*
|
|
638
|
+
* @param value - The value to check
|
|
639
|
+
* @returns True if the value is a stage result; false otherwise
|
|
640
|
+
*
|
|
641
|
+
* @example
|
|
642
|
+
* ```ts
|
|
643
|
+
* isStageResult({ stage: 'lint', elapsed: 17, issues: [] }) // true
|
|
644
|
+
* ```
|
|
645
|
+
*/
|
|
646
|
+
export declare const isStageResult: Guard<StageResult>;
|
|
647
|
+
|
|
669
648
|
/**
|
|
670
649
|
* Carries one message a stage reported, where it reported it, and whose fault it names.
|
|
671
650
|
*
|
|
672
651
|
* @remarks
|
|
673
|
-
* The stage is not repeated here. An issue always arrives inside the `
|
|
652
|
+
* The stage is not repeated here. An issue always arrives inside the `StageResult` that names its
|
|
674
653
|
* stage, so a second copy could only drift from the first.
|
|
675
654
|
*
|
|
676
655
|
* A `claimant` issue is a tool's diagnostic about a candidate draft, and nothing else. Every
|
|
@@ -737,9 +716,9 @@ export declare const isToolchain: Guard<Toolchain>;
|
|
|
737
716
|
* Checks whether a value carries a complete verdict.
|
|
738
717
|
*
|
|
739
718
|
* @remarks
|
|
740
|
-
* Accepts any
|
|
741
|
-
* a stage that could not start throws before a verdict is built, so a short list can only
|
|
742
|
-
* from a caller that assembled one by hand.
|
|
719
|
+
* Accepts any stage result count, because arity is the coordinator's obligation rather than this
|
|
720
|
+
* guard's: a stage that could not start throws before a verdict is built, so a short list can only
|
|
721
|
+
* arrive from a caller that assembled one by hand.
|
|
743
722
|
*
|
|
744
723
|
* @param value - The value to check
|
|
745
724
|
* @returns True if the value is a verdict; false otherwise
|
|
@@ -1145,7 +1124,7 @@ export declare interface ProbeInterface {
|
|
|
1145
1124
|
*
|
|
1146
1125
|
* @param claim - The case, its control, and the project the candidate drafts in both cases
|
|
1147
1126
|
* are checked against
|
|
1148
|
-
* @returns The verdict, carrying one
|
|
1127
|
+
* @returns The verdict, carrying one stage result per stage for both the case and the control
|
|
1149
1128
|
* @throws When the control repeats the case byte for byte, or when a stage cannot start, so no
|
|
1150
1129
|
* verdict ever reports a stage that did not run
|
|
1151
1130
|
*/
|
|
@@ -1284,6 +1263,27 @@ export declare const RUNTIME_PLUGIN = "orkestrel-runtime-overlay";
|
|
|
1284
1263
|
*/
|
|
1285
1264
|
export declare type Stage = (typeof PROBE_STAGES)[number];
|
|
1286
1265
|
|
|
1266
|
+
/**
|
|
1267
|
+
* Carries one stage's outcome: what it cost and what it reported.
|
|
1268
|
+
*
|
|
1269
|
+
* @remarks
|
|
1270
|
+
* An empty `issues` list is the clean result. There is no separate pass flag, because passing is
|
|
1271
|
+
* exactly the absence of issues and a stored flag could disagree with the list beside it.
|
|
1272
|
+
*
|
|
1273
|
+
* @example
|
|
1274
|
+
* ```ts
|
|
1275
|
+
* const result: StageResult = { stage: 'lint', elapsed: 17, issues: [] }
|
|
1276
|
+
* ```
|
|
1277
|
+
*/
|
|
1278
|
+
export declare interface StageResult {
|
|
1279
|
+
/** Names the stage that produced this outcome. */
|
|
1280
|
+
readonly stage: Stage;
|
|
1281
|
+
/** Holds the milliseconds the stage took. */
|
|
1282
|
+
readonly elapsed: number;
|
|
1283
|
+
/** Holds every message the stage's tool reported, in the tool's own order. */
|
|
1284
|
+
readonly issues: readonly Issue[];
|
|
1285
|
+
}
|
|
1286
|
+
|
|
1287
1287
|
/**
|
|
1288
1288
|
* Names the tool versions a verdict was produced with.
|
|
1289
1289
|
*
|
|
@@ -1341,7 +1341,7 @@ export declare const TYPE_MIRROR = "tmp/type";
|
|
|
1341
1341
|
* the type stage always runs and a claim always names a project, so no verdict exists without
|
|
1342
1342
|
* either value. A verdict returned by `Probe` also carries the control's claimant-authored
|
|
1343
1343
|
* `reason` unchanged. A hand-built verdict may omit it because the receipt helper needs only the
|
|
1344
|
-
* recorded
|
|
1344
|
+
* recorded stage results and declared stage.
|
|
1345
1345
|
*
|
|
1346
1346
|
* `digest` covers these things: the case bytes, the control bytes including this `reason`, and the
|
|
1347
1347
|
* workspace they were read against. The reason is part of the control, so two claims differing only
|
|
@@ -1400,9 +1400,9 @@ export declare interface Verdict {
|
|
|
1400
1400
|
*/
|
|
1401
1401
|
readonly reason?: string;
|
|
1402
1402
|
/** Holds one outcome per stage for the claim's case. */
|
|
1403
|
-
readonly case: readonly
|
|
1403
|
+
readonly case: readonly StageResult[];
|
|
1404
1404
|
/** Holds one outcome per stage for the claim's control. */
|
|
1405
|
-
readonly control: readonly
|
|
1405
|
+
readonly control: readonly StageResult[];
|
|
1406
1406
|
/** Holds the milliseconds the whole call took, including both the case and the control. */
|
|
1407
1407
|
readonly elapsed: number;
|
|
1408
1408
|
/** Holds the proof token, absent when either phase reports an instrument failure. */
|
package/dist/src/core/index.d.ts
CHANGED
|
@@ -60,27 +60,6 @@ text: StringShape;
|
|
|
60
60
|
}, false>;
|
|
61
61
|
}, false>;
|
|
62
62
|
|
|
63
|
-
/**
|
|
64
|
-
* Carries one stage's outcome: what it cost and what it reported.
|
|
65
|
-
*
|
|
66
|
-
* @remarks
|
|
67
|
-
* An empty `issues` list is the clean result. There is no separate pass flag, because passing is
|
|
68
|
-
* exactly the absence of issues and a stored flag could disagree with the list beside it.
|
|
69
|
-
*
|
|
70
|
-
* @example
|
|
71
|
-
* ```ts
|
|
72
|
-
* const check: Check = { stage: 'lint', elapsed: 17, issues: [] }
|
|
73
|
-
* ```
|
|
74
|
-
*/
|
|
75
|
-
export declare interface Check {
|
|
76
|
-
/** Names the stage that produced this outcome. */
|
|
77
|
-
readonly stage: Stage;
|
|
78
|
-
/** Holds the milliseconds the stage took. */
|
|
79
|
-
readonly elapsed: number;
|
|
80
|
-
/** Holds every message the stage's tool reported, in the tool's own order. */
|
|
81
|
-
readonly issues: readonly Issue[];
|
|
82
|
-
}
|
|
83
|
-
|
|
84
63
|
/**
|
|
85
64
|
* Carries everything the service needs to produce one verdict.
|
|
86
65
|
*
|
|
@@ -189,8 +168,8 @@ reason: StringShape;
|
|
|
189
168
|
* Computes the proof token a verdict carries, or returns nothing when the claim was not proven.
|
|
190
169
|
*
|
|
191
170
|
* @remarks
|
|
192
|
-
* A receipt is minted on these conditions together: both phases report one
|
|
193
|
-
* case carries no issue, the control carries at least one `origin: 'claimant'` issue
|
|
171
|
+
* A receipt is minted on these conditions together: both phases report one stage result per stage,
|
|
172
|
+
* the case carries no issue, the control carries at least one `origin: 'claimant'` issue
|
|
194
173
|
* at the stage it declared, and every other control stage carries no claimant issue. A control
|
|
195
174
|
* that fails somewhere else has falsified the instrument rather than the claim, so no receipt is
|
|
196
175
|
* minted for it.
|
|
@@ -216,7 +195,7 @@ reason: StringShape;
|
|
|
216
195
|
* refuses the receipt. A workspace issue in the control does not decide whether the claimant's
|
|
217
196
|
* candidate broke, while one in the case still means that the case did not run clean.
|
|
218
197
|
*
|
|
219
|
-
* @param verdict - The verdict whose case and control
|
|
198
|
+
* @param verdict - The verdict whose case and control stage results decide the outcome
|
|
220
199
|
* @param stage - The stage the claim's control declared it must fail at
|
|
221
200
|
* @returns The receipt token, or `undefined` when any condition fails
|
|
222
201
|
*
|
|
@@ -351,24 +330,6 @@ path: StringShape;
|
|
|
351
330
|
text: StringShape;
|
|
352
331
|
}, false>;
|
|
353
332
|
|
|
354
|
-
/**
|
|
355
|
-
* Renders one stage's outcome as its summary line followed by every message it reported.
|
|
356
|
-
*
|
|
357
|
-
* @remarks
|
|
358
|
-
* A clean stage renders one line. The count appears even when it is zero, because that line is
|
|
359
|
-
* what shows a reader the stage ran; a silent stage and a skipped stage read the same.
|
|
360
|
-
*
|
|
361
|
-
* @param check - The stage outcome to render
|
|
362
|
-
* @returns The summary line, then one indented line per issue
|
|
363
|
-
*
|
|
364
|
-
* @example
|
|
365
|
-
* ```ts
|
|
366
|
-
* formatCheck({ stage: 'lint', elapsed: 17, issues: [] })
|
|
367
|
-
* // 'lint: 0 issues (17 ms)'
|
|
368
|
-
* ```
|
|
369
|
-
*/
|
|
370
|
-
export declare function formatCheck(check: Check): string;
|
|
371
|
-
|
|
372
333
|
/**
|
|
373
334
|
* Renders one tool message as a single line an agent can classify and locate.
|
|
374
335
|
*
|
|
@@ -463,6 +424,24 @@ export declare function formatReceipt(verdict: Verdict): string;
|
|
|
463
424
|
*/
|
|
464
425
|
export declare function formatSpecification(text: string, revision: string): string;
|
|
465
426
|
|
|
427
|
+
/**
|
|
428
|
+
* Renders one stage's outcome as its summary line followed by every message it reported.
|
|
429
|
+
*
|
|
430
|
+
* @remarks
|
|
431
|
+
* A clean stage renders one line. The count appears even when it is zero, because that line is
|
|
432
|
+
* what shows a reader the stage ran; a silent stage and a skipped stage read the same.
|
|
433
|
+
*
|
|
434
|
+
* @param result - The stage outcome to render
|
|
435
|
+
* @returns The summary line, then one indented line per issue
|
|
436
|
+
*
|
|
437
|
+
* @example
|
|
438
|
+
* ```ts
|
|
439
|
+
* formatStageResult({ stage: 'lint', elapsed: 17, issues: [] })
|
|
440
|
+
* // 'lint: 0 issues (17 ms)'
|
|
441
|
+
* ```
|
|
442
|
+
*/
|
|
443
|
+
export declare function formatStageResult(result: StageResult): string;
|
|
444
|
+
|
|
466
445
|
/**
|
|
467
446
|
* Renders a whole verdict as the text an agent reads.
|
|
468
447
|
*
|
|
@@ -474,8 +453,8 @@ export declare function formatSpecification(text: string, revision: string): str
|
|
|
474
453
|
* The heading lines carry everything the receipt binds, each in the name-then-value form the
|
|
475
454
|
* toolchain line established: the call's identity, the claim it answered, the tools that ran, and
|
|
476
455
|
* the project that judged the candidates. A verdict carrying the control's reason renders it next,
|
|
477
|
-
* before either phase's
|
|
478
|
-
* without recomputing anything.
|
|
456
|
+
* before either phase's stage results. A reader comparing two verdicts therefore reads what
|
|
457
|
+
* differed without recomputing anything.
|
|
479
458
|
*
|
|
480
459
|
* @param verdict - The verdict to render
|
|
481
460
|
* @returns The identity, claim, toolchain, project, and reason when present, then every case and
|
|
@@ -502,19 +481,6 @@ export declare function formatVerdict(verdict: Verdict): string;
|
|
|
502
481
|
*/
|
|
503
482
|
export declare const isCase: Guard<Case>;
|
|
504
483
|
|
|
505
|
-
/**
|
|
506
|
-
* Checks whether a value carries one stage's outcome.
|
|
507
|
-
*
|
|
508
|
-
* @param value - The value to check
|
|
509
|
-
* @returns True if the value is a check; false otherwise
|
|
510
|
-
*
|
|
511
|
-
* @example
|
|
512
|
-
* ```ts
|
|
513
|
-
* isCheck({ stage: 'lint', elapsed: 17, issues: [] }) // true
|
|
514
|
-
* ```
|
|
515
|
-
*/
|
|
516
|
-
export declare const isCheck: Guard<Check>;
|
|
517
|
-
|
|
518
484
|
/**
|
|
519
485
|
* Checks whether a value carries a project, a case, and a control.
|
|
520
486
|
*
|
|
@@ -559,11 +525,11 @@ export declare const isControl: Guard<Control>;
|
|
|
559
525
|
* Checks whether a value carries a proposed file's path and text.
|
|
560
526
|
*
|
|
561
527
|
* @remarks
|
|
562
|
-
* Rejects an empty, absolute, or
|
|
563
|
-
* `.` or may traverse to a parent that remains inside the
|
|
564
|
-
* by that path, so admitting
|
|
565
|
-
* accepted the draft. An `Issue` carries no such minimum
|
|
566
|
-
* rather than admits them.
|
|
528
|
+
* Rejects an empty path, an absolute path, or a path that resolves outside the workspace. A
|
|
529
|
+
* contained relative path may contain `.` or may traverse to a parent that remains inside the
|
|
530
|
+
* workspace. Every stage resolves a file by that path, so admitting such a path here would defer
|
|
531
|
+
* the refusal until a stage had already accepted the draft. An `Issue` carries no such minimum
|
|
532
|
+
* because this package produces issues rather than admits them.
|
|
567
533
|
*
|
|
568
534
|
* @param value - The value to check
|
|
569
535
|
* @returns True if the value is a draft; false otherwise
|
|
@@ -666,11 +632,24 @@ export declare const isProject: Guard<Project>;
|
|
|
666
632
|
*/
|
|
667
633
|
export declare const isStage: Guard<Stage>;
|
|
668
634
|
|
|
635
|
+
/**
|
|
636
|
+
* Checks whether a value carries one stage's outcome.
|
|
637
|
+
*
|
|
638
|
+
* @param value - The value to check
|
|
639
|
+
* @returns True if the value is a stage result; false otherwise
|
|
640
|
+
*
|
|
641
|
+
* @example
|
|
642
|
+
* ```ts
|
|
643
|
+
* isStageResult({ stage: 'lint', elapsed: 17, issues: [] }) // true
|
|
644
|
+
* ```
|
|
645
|
+
*/
|
|
646
|
+
export declare const isStageResult: Guard<StageResult>;
|
|
647
|
+
|
|
669
648
|
/**
|
|
670
649
|
* Carries one message a stage reported, where it reported it, and whose fault it names.
|
|
671
650
|
*
|
|
672
651
|
* @remarks
|
|
673
|
-
* The stage is not repeated here. An issue always arrives inside the `
|
|
652
|
+
* The stage is not repeated here. An issue always arrives inside the `StageResult` that names its
|
|
674
653
|
* stage, so a second copy could only drift from the first.
|
|
675
654
|
*
|
|
676
655
|
* A `claimant` issue is a tool's diagnostic about a candidate draft, and nothing else. Every
|
|
@@ -737,9 +716,9 @@ export declare const isToolchain: Guard<Toolchain>;
|
|
|
737
716
|
* Checks whether a value carries a complete verdict.
|
|
738
717
|
*
|
|
739
718
|
* @remarks
|
|
740
|
-
* Accepts any
|
|
741
|
-
* a stage that could not start throws before a verdict is built, so a short list can only
|
|
742
|
-
* from a caller that assembled one by hand.
|
|
719
|
+
* Accepts any stage result count, because arity is the coordinator's obligation rather than this
|
|
720
|
+
* guard's: a stage that could not start throws before a verdict is built, so a short list can only
|
|
721
|
+
* arrive from a caller that assembled one by hand.
|
|
743
722
|
*
|
|
744
723
|
* @param value - The value to check
|
|
745
724
|
* @returns True if the value is a verdict; false otherwise
|
|
@@ -1145,7 +1124,7 @@ export declare interface ProbeInterface {
|
|
|
1145
1124
|
*
|
|
1146
1125
|
* @param claim - The case, its control, and the project the candidate drafts in both cases
|
|
1147
1126
|
* are checked against
|
|
1148
|
-
* @returns The verdict, carrying one
|
|
1127
|
+
* @returns The verdict, carrying one stage result per stage for both the case and the control
|
|
1149
1128
|
* @throws When the control repeats the case byte for byte, or when a stage cannot start, so no
|
|
1150
1129
|
* verdict ever reports a stage that did not run
|
|
1151
1130
|
*/
|
|
@@ -1284,6 +1263,27 @@ export declare const RUNTIME_PLUGIN = "orkestrel-runtime-overlay";
|
|
|
1284
1263
|
*/
|
|
1285
1264
|
export declare type Stage = (typeof PROBE_STAGES)[number];
|
|
1286
1265
|
|
|
1266
|
+
/**
|
|
1267
|
+
* Carries one stage's outcome: what it cost and what it reported.
|
|
1268
|
+
*
|
|
1269
|
+
* @remarks
|
|
1270
|
+
* An empty `issues` list is the clean result. There is no separate pass flag, because passing is
|
|
1271
|
+
* exactly the absence of issues and a stored flag could disagree with the list beside it.
|
|
1272
|
+
*
|
|
1273
|
+
* @example
|
|
1274
|
+
* ```ts
|
|
1275
|
+
* const result: StageResult = { stage: 'lint', elapsed: 17, issues: [] }
|
|
1276
|
+
* ```
|
|
1277
|
+
*/
|
|
1278
|
+
export declare interface StageResult {
|
|
1279
|
+
/** Names the stage that produced this outcome. */
|
|
1280
|
+
readonly stage: Stage;
|
|
1281
|
+
/** Holds the milliseconds the stage took. */
|
|
1282
|
+
readonly elapsed: number;
|
|
1283
|
+
/** Holds every message the stage's tool reported, in the tool's own order. */
|
|
1284
|
+
readonly issues: readonly Issue[];
|
|
1285
|
+
}
|
|
1286
|
+
|
|
1287
1287
|
/**
|
|
1288
1288
|
* Names the tool versions a verdict was produced with.
|
|
1289
1289
|
*
|
|
@@ -1341,7 +1341,7 @@ export declare const TYPE_MIRROR = "tmp/type";
|
|
|
1341
1341
|
* the type stage always runs and a claim always names a project, so no verdict exists without
|
|
1342
1342
|
* either value. A verdict returned by `Probe` also carries the control's claimant-authored
|
|
1343
1343
|
* `reason` unchanged. A hand-built verdict may omit it because the receipt helper needs only the
|
|
1344
|
-
* recorded
|
|
1344
|
+
* recorded stage results and declared stage.
|
|
1345
1345
|
*
|
|
1346
1346
|
* `digest` covers these things: the case bytes, the control bytes including this `reason`, and the
|
|
1347
1347
|
* workspace they were read against. The reason is part of the control, so two claims differing only
|
|
@@ -1400,9 +1400,9 @@ export declare interface Verdict {
|
|
|
1400
1400
|
*/
|
|
1401
1401
|
readonly reason?: string;
|
|
1402
1402
|
/** Holds one outcome per stage for the claim's case. */
|
|
1403
|
-
readonly case: readonly
|
|
1403
|
+
readonly case: readonly StageResult[];
|
|
1404
1404
|
/** Holds one outcome per stage for the claim's control. */
|
|
1405
|
-
readonly control: readonly
|
|
1405
|
+
readonly control: readonly StageResult[];
|
|
1406
1406
|
/** Holds the milliseconds the whole call took, including both the case and the control. */
|
|
1407
1407
|
readonly elapsed: number;
|
|
1408
1408
|
/** Holds the proof token, absent when either phase reports an instrument failure. */
|
package/dist/src/core/index.js
CHANGED
|
@@ -265,7 +265,7 @@ var ProbeError = class extends Error {
|
|
|
265
265
|
constructor(message, options) {
|
|
266
266
|
const cause = options.cause;
|
|
267
267
|
super(message, cause === void 0 ? void 0 : { cause });
|
|
268
|
-
Object.defineProperty(this, Symbol.for("@orkestrel/probe.
|
|
268
|
+
Object.defineProperty(this, Symbol.for("@orkestrel/probe.ProbeError"), { value: this });
|
|
269
269
|
this.origin = options.origin;
|
|
270
270
|
this.code = options.code;
|
|
271
271
|
if (options.context !== void 0) this.context = options.context;
|
|
@@ -294,7 +294,7 @@ function isProbeError(value) {
|
|
|
294
294
|
if (!isError(value)) return false;
|
|
295
295
|
return holds(() => {
|
|
296
296
|
if (INTRINSICS.prototype(value) === Error.prototype) return false;
|
|
297
|
-
if (INTRINSICS.describe(value, Symbol.for("@orkestrel/probe.
|
|
297
|
+
if (INTRINSICS.describe(value, Symbol.for("@orkestrel/probe.ProbeError"))?.value !== value) return false;
|
|
298
298
|
const origin = INTRINSICS.reflect.read(value, "origin");
|
|
299
299
|
const code = INTRINSICS.reflect.read(value, "code");
|
|
300
300
|
const context = INTRINSICS.reflect.read(value, "context");
|
|
@@ -357,11 +357,11 @@ var isStage = literalOf(PROBE_STAGES);
|
|
|
357
357
|
* Checks whether a value carries a proposed file's path and text.
|
|
358
358
|
*
|
|
359
359
|
* @remarks
|
|
360
|
-
* Rejects an empty, absolute, or
|
|
361
|
-
* `.` or may traverse to a parent that remains inside the
|
|
362
|
-
* by that path, so admitting
|
|
363
|
-
* accepted the draft. An `Issue` carries no such minimum
|
|
364
|
-
* rather than admits them.
|
|
360
|
+
* Rejects an empty path, an absolute path, or a path that resolves outside the workspace. A
|
|
361
|
+
* contained relative path may contain `.` or may traverse to a parent that remains inside the
|
|
362
|
+
* workspace. Every stage resolves a file by that path, so admitting such a path here would defer
|
|
363
|
+
* the refusal until a stage had already accepted the draft. An `Issue` carries no such minimum
|
|
364
|
+
* because this package produces issues rather than admits them.
|
|
365
365
|
*
|
|
366
366
|
* @param value - The value to check
|
|
367
367
|
* @returns True if the value is a draft; false otherwise
|
|
@@ -489,14 +489,14 @@ var isIssue = recordOf({
|
|
|
489
489
|
* Checks whether a value carries one stage's outcome.
|
|
490
490
|
*
|
|
491
491
|
* @param value - The value to check
|
|
492
|
-
* @returns True if the value is a
|
|
492
|
+
* @returns True if the value is a stage result; false otherwise
|
|
493
493
|
*
|
|
494
494
|
* @example
|
|
495
495
|
* ```ts
|
|
496
|
-
*
|
|
496
|
+
* isStageResult({ stage: 'lint', elapsed: 17, issues: [] }) // true
|
|
497
497
|
* ```
|
|
498
498
|
*/
|
|
499
|
-
var
|
|
499
|
+
var isStageResult = recordOf({
|
|
500
500
|
stage: isStage,
|
|
501
501
|
elapsed: isNumber,
|
|
502
502
|
issues: arrayOf(isIssue)
|
|
@@ -542,9 +542,9 @@ var isProject = recordOf({
|
|
|
542
542
|
* Checks whether a value carries a complete verdict.
|
|
543
543
|
*
|
|
544
544
|
* @remarks
|
|
545
|
-
* Accepts any
|
|
546
|
-
* a stage that could not start throws before a verdict is built, so a short list can only
|
|
547
|
-
* from a caller that assembled one by hand.
|
|
545
|
+
* Accepts any stage result count, because arity is the coordinator's obligation rather than this
|
|
546
|
+
* guard's: a stage that could not start throws before a verdict is built, so a short list can only
|
|
547
|
+
* arrive from a caller that assembled one by hand.
|
|
548
548
|
*
|
|
549
549
|
* @param value - The value to check
|
|
550
550
|
* @returns True if the value is a verdict; false otherwise
|
|
@@ -562,8 +562,8 @@ var isVerdict = recordOf({
|
|
|
562
562
|
toolchain: isToolchain,
|
|
563
563
|
project: isProject,
|
|
564
564
|
reason: isNonEmptyString,
|
|
565
|
-
case: arrayOf(
|
|
566
|
-
control: arrayOf(
|
|
565
|
+
case: arrayOf(isStageResult),
|
|
566
|
+
control: arrayOf(isStageResult),
|
|
567
567
|
elapsed: isNumber,
|
|
568
568
|
receipt: isString
|
|
569
569
|
}, ["reason", "receipt"]);
|
|
@@ -609,19 +609,19 @@ function formatIssue(issue) {
|
|
|
609
609
|
* A clean stage renders one line. The count appears even when it is zero, because that line is
|
|
610
610
|
* what shows a reader the stage ran; a silent stage and a skipped stage read the same.
|
|
611
611
|
*
|
|
612
|
-
* @param
|
|
612
|
+
* @param result - The stage outcome to render
|
|
613
613
|
* @returns The summary line, then one indented line per issue
|
|
614
614
|
*
|
|
615
615
|
* @example
|
|
616
616
|
* ```ts
|
|
617
|
-
*
|
|
617
|
+
* formatStageResult({ stage: 'lint', elapsed: 17, issues: [] })
|
|
618
618
|
* // 'lint: 0 issues (17 ms)'
|
|
619
619
|
* ```
|
|
620
620
|
*/
|
|
621
|
-
function
|
|
622
|
-
const count =
|
|
621
|
+
function formatStageResult(result) {
|
|
622
|
+
const count = result.issues.length;
|
|
623
623
|
const noun = count === 1 ? "issue" : "issues";
|
|
624
|
-
return [`${
|
|
624
|
+
return [`${result.stage}: ${count} ${noun} (${result.elapsed} ms)`, ...result.issues.map((issue) => ` ${formatIssue(issue)}`)].join("\n");
|
|
625
625
|
}
|
|
626
626
|
/**
|
|
627
627
|
* Renders the closing line a rendered verdict ends with: the receipt it earned, or its absence.
|
|
@@ -682,8 +682,8 @@ function formatReceipt(verdict) {
|
|
|
682
682
|
* The heading lines carry everything the receipt binds, each in the name-then-value form the
|
|
683
683
|
* toolchain line established: the call's identity, the claim it answered, the tools that ran, and
|
|
684
684
|
* the project that judged the candidates. A verdict carrying the control's reason renders it next,
|
|
685
|
-
* before either phase's
|
|
686
|
-
* without recomputing anything.
|
|
685
|
+
* before either phase's stage results. A reader comparing two verdicts therefore reads what
|
|
686
|
+
* differed without recomputing anything.
|
|
687
687
|
*
|
|
688
688
|
* @param verdict - The verdict to render
|
|
689
689
|
* @returns The identity, claim, toolchain, project, and reason when present, then every case and
|
|
@@ -705,8 +705,8 @@ function formatVerdict(verdict) {
|
|
|
705
705
|
tools,
|
|
706
706
|
project,
|
|
707
707
|
...reason,
|
|
708
|
-
...verdict.case.map((
|
|
709
|
-
...verdict.control.map((
|
|
708
|
+
...verdict.case.map((result) => `case ${formatStageResult(result)}`),
|
|
709
|
+
...verdict.control.map((result) => `control ${formatStageResult(result)}`),
|
|
710
710
|
formatProof(verdict)
|
|
711
711
|
].join("\n");
|
|
712
712
|
}
|
|
@@ -714,8 +714,8 @@ function formatVerdict(verdict) {
|
|
|
714
714
|
* Computes the proof token a verdict carries, or returns nothing when the claim was not proven.
|
|
715
715
|
*
|
|
716
716
|
* @remarks
|
|
717
|
-
* A receipt is minted on these conditions together: both phases report one
|
|
718
|
-
* case carries no issue, the control carries at least one `origin: 'claimant'` issue
|
|
717
|
+
* A receipt is minted on these conditions together: both phases report one stage result per stage,
|
|
718
|
+
* the case carries no issue, the control carries at least one `origin: 'claimant'` issue
|
|
719
719
|
* at the stage it declared, and every other control stage carries no claimant issue. A control
|
|
720
720
|
* that fails somewhere else has falsified the instrument rather than the claim, so no receipt is
|
|
721
721
|
* minted for it.
|
|
@@ -741,7 +741,7 @@ function formatVerdict(verdict) {
|
|
|
741
741
|
* refuses the receipt. A workspace issue in the control does not decide whether the claimant's
|
|
742
742
|
* candidate broke, while one in the case still means that the case did not run clean.
|
|
743
743
|
*
|
|
744
|
-
* @param verdict - The verdict whose case and control
|
|
744
|
+
* @param verdict - The verdict whose case and control stage results decide the outcome
|
|
745
745
|
* @param stage - The stage the claim's control declared it must fail at
|
|
746
746
|
* @returns The receipt token, or `undefined` when any condition fails
|
|
747
747
|
*
|
|
@@ -753,11 +753,11 @@ function formatVerdict(verdict) {
|
|
|
753
753
|
* ```
|
|
754
754
|
*/
|
|
755
755
|
function computeReceipt(verdict, stage) {
|
|
756
|
-
const ran = PROBE_STAGES.every((name) => verdict.case.filter((
|
|
757
|
-
const clean = verdict.case.every((
|
|
758
|
-
const broke = verdict.control.find((
|
|
759
|
-
const faulted = verdict.case.some((
|
|
760
|
-
const stayed = verdict.control.every((
|
|
756
|
+
const ran = PROBE_STAGES.every((name) => verdict.case.filter((result) => result.stage === name).length === 1 && verdict.control.filter((result) => result.stage === name).length === 1);
|
|
757
|
+
const clean = verdict.case.every((result) => result.issues.length === 0);
|
|
758
|
+
const broke = verdict.control.find((result) => result.stage === stage)?.issues.some((issue) => issue.origin === "claimant") ?? false;
|
|
759
|
+
const faulted = verdict.case.some((result) => result.issues.some((issue) => issue.origin === "instrument")) || verdict.control.some((result) => result.issues.some((issue) => issue.origin === "instrument"));
|
|
760
|
+
const stayed = verdict.control.every((result) => result.stage === stage || result.issues.every((issue) => issue.origin !== "claimant"));
|
|
761
761
|
if (!ran || !clean || !broke || faulted || !stayed) return void 0;
|
|
762
762
|
const { typescript, oxlint, vitest } = verdict.toolchain;
|
|
763
763
|
return [
|
|
@@ -900,6 +900,6 @@ var CLAIM_SHAPE = objectShape({
|
|
|
900
900
|
case: CASE_SHAPE,
|
|
901
901
|
control: CONTROL_SHAPE
|
|
902
902
|
}, { description: "One claim: the project, the case, and the control that must break." });
|
|
903
|
-
export { CASE_SHAPE, CLAIM_SHAPE, CONTROL_SHAPE, DRAFT_SHAPE, LINT_DEADLINE, LINT_TEARDOWN, PROBE_DEADLINE, PROBE_ERROR_CODES, PROBE_KEYS, PROBE_PARTIES, PROBE_RESTARTS, PROBE_SPECIFICATIONS, PROBE_STAGES, PROBE_WARM, ProbeError, RECEIPT_PREFIX, RECEIPT_SEPARATOR, RUNTIME_PLUGIN, TYPE_MIRROR, computeReceipt, createDestroyedError,
|
|
903
|
+
export { CASE_SHAPE, CLAIM_SHAPE, CONTROL_SHAPE, DRAFT_SHAPE, LINT_DEADLINE, LINT_TEARDOWN, PROBE_DEADLINE, PROBE_ERROR_CODES, PROBE_KEYS, PROBE_PARTIES, PROBE_RESTARTS, PROBE_SPECIFICATIONS, PROBE_STAGES, PROBE_WARM, ProbeError, RECEIPT_PREFIX, RECEIPT_SEPARATOR, RUNTIME_PLUGIN, TYPE_MIRROR, computeReceipt, createDestroyedError, formatIssue, formatProof, formatReceipt, formatSpecification, formatStageResult, formatVerdict, isCase, isClaim, isControl, isDraft, isIssue, isParty, isProbeError, isProject, isStage, isStageResult, isToolchain, isVerdict, matchesSpecification };
|
|
904
904
|
|
|
905
905
|
//# sourceMappingURL=index.js.map
|