clearotron 0.3.2 → 0.3.3-beta.0
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/CONTRIBUTING.md +12 -0
- package/INSTALL.md +8 -0
- package/bin/onboard.mjs +29 -7
- package/bin/start.mjs +1 -1
- package/build-info.json +2 -2
- package/demo/MANIFEST.json +27 -0
- package/docs/INTAKE.md +8 -0
- package/docs/architecture/04-configuration-reference.md +1 -1
- package/driver/CHANGELOG.md +37 -0
- package/driver/clearance-variants-record.mjs +12 -1
- package/driver/common-law-coverage-status.mjs +113 -0
- package/driver/contract-audit.mjs +1 -1
- package/driver/contract-e3-backlog.mjs +37 -37
- package/driver/contract-vocabulary.mjs +8 -8
- package/driver/coverage-form-io.mjs +3 -1
- package/driver/coverage-form.mjs +38 -11
- package/driver/coverage-ledger.mjs +37 -7
- package/driver/coverage-union.mjs +2 -2
- package/driver/crowd-context.mjs +19 -6
- package/driver/drainer-identity.mjs +1 -1
- package/driver/engine/mcp/clarivate-server.mjs +4 -2
- package/driver/engine/mcp/corsearch-server.mjs +3 -1
- package/driver/engine/mcp/coverage-server.mjs +1 -1
- package/driver/engine/mcp/dispositions-server.mjs +47 -5
- package/driver/engine/mcp/euipo-server.mjs +2 -0
- package/driver/engine/mcp/free-tier-server.mjs +2 -0
- package/driver/engine/mcp/gather-config.mjs +8 -2
- package/driver/engine/mcp/probe-server.mjs +28 -0
- package/driver/engine/mcp/proposal-fields.mjs +45 -0
- package/driver/engine/mcp/recording-server.mjs +30 -0
- package/driver/engine/mcp/signa-server.mjs +2 -0
- package/driver/engine/mcp/supplemental.mjs +89 -12
- package/driver/engine/mcp/unit-note-server.mjs +50 -0
- package/driver/engine/mcp/uspto-local-server.mjs +2 -0
- package/driver/engine/openai-agent.mjs +7 -0
- package/driver/engine/probe.mjs +67 -14
- package/driver/engine/tool-refusal.mjs +16 -0
- package/driver/enqueue-schema.mjs +2 -2
- package/driver/envelope-settle.mjs +82 -13
- package/driver/findings-model.mjs +4 -4
- package/driver/gateway.mjs +18 -2
- package/driver/manager-groups-verdict.mjs +1 -1
- package/driver/matter-frame-record.mjs +24 -7
- package/driver/named-band.mjs +1 -1
- package/driver/package.json +1 -1
- package/driver/partial-payload-baseline.json +12 -3
- package/driver/pipeline.mjs +141 -37
- package/driver/publish/index.mjs +40 -25
- package/driver/publish/xlsx.mjs +26 -4
- package/driver/queue-markers.mjs +44 -0
- package/driver/queue-watch-verdict.mjs +2 -2
- package/driver/register-availability.mjs +2 -2
- package/driver/register-plan.mjs +313 -21
- package/driver/roster-verdict.mjs +1 -1
- package/driver/runner.mjs +26 -2
- package/driver/skills/clearance-common-law/SKILL.md +2 -0
- package/driver/skills/clearance-register/SKILL.md +44 -3
- package/driver/skills/clearance-register/digest.md +5 -5
- package/driver/skills/clearance-register/providers/clarivate.md +1 -1
- package/driver/skills/clearance-register/unit.md +39 -0
- package/driver/skills/clearance-variants/SKILL.md +1 -1
- package/driver/skills/matter-frame/SKILL.md +4 -2
- package/driver/stages.mjs +12 -5
- package/driver/status-snapshot.mjs +1 -1
- package/driver/suite-census.json +236 -14
- package/driver/synthesis-record.mjs +80 -2
- package/driver/unit-file-drift.mjs +3 -3
- package/driver/unit-inventory.mjs +2 -2
- package/driver/unit-state-verdict.mjs +1 -1
- package/driver/updater-identity.mjs +2 -3
- package/driver/variant-manifest-model.mjs +11 -1
- package/driver/verify.mjs +5 -5
- package/driver/withheld-families.mjs +104 -0
- package/mcp-server/CHANGELOG.md +4 -0
- package/mcp-server/lib/brief.mjs +5 -7
- package/mcp-server/lib/runs.mjs +1 -1
- package/mcp-server/package.json +1 -1
- package/mcp-server/server.mjs +3 -2
- package/package.json +1 -1
- package/portal-ui/dist/assets/{index-DMthc7PQ.js → index-GBbbyQxc.js} +22 -4
- package/portal-ui/dist/index.html +1 -1
- package/portal-ui/package.json +1 -1
- package/providers/_shared/count.mjs +2 -2
- package/providers/_shared/enumerate.mjs +15 -2
- package/providers/_shared/execute-plan.mjs +19 -1
- package/providers/_shared/plan-guards.mjs +40 -0
- package/providers/clarivate/src/capabilities.js +15 -5
- package/providers/clarivate/src/core.js +41 -5
- package/providers/corsearch/src/capabilities.js +4 -0
- package/providers/oauth-mcp-bridge/CHANGELOG.md +4 -0
- package/providers/oauth-mcp-bridge/package.json +1 -1
- package/providers/signa/src/capabilities.js +22 -8
- package/providers/signa/src/core.js +12 -1
- package/scripts/demo-evidence.mjs +114 -0
- package/scripts/engine-probe.mjs +6 -5
- package/scripts/env-audit.mjs +1 -1
- package/scripts/freeze-example-run.mjs +3 -3
- package/scripts/live-surface-check.mjs +26 -19
- package/scripts/mint-suite-census.mjs +66 -0
- package/scripts/package-size-budget.mjs +117 -0
- package/scripts/register-plan-shape.mjs +259 -0
- package/scripts/release-note-required.mjs +38 -1
- package/scripts/settings-render-check.mjs +36 -0
- package/scripts/travelling-predicates.mjs +1 -1
- package/shared/identifier-scan.mjs +22 -5
package/driver/suite-census.json
CHANGED
|
@@ -51,6 +51,12 @@
|
|
|
51
51
|
"skips": 0,
|
|
52
52
|
"todos": 0
|
|
53
53
|
},
|
|
54
|
+
"a-batch-of-names-is-one-question-per-name-without-or.test.mjs": {
|
|
55
|
+
"tests": 4,
|
|
56
|
+
"asserts": 20,
|
|
57
|
+
"skips": 0,
|
|
58
|
+
"todos": 0
|
|
59
|
+
},
|
|
54
60
|
"a-block-that-ran-and-said-nothing-is-not-a-block-that-never-ran.test.mjs": {
|
|
55
61
|
"tests": 6,
|
|
56
62
|
"asserts": 16,
|
|
@@ -87,6 +93,18 @@
|
|
|
87
93
|
"skips": 0,
|
|
88
94
|
"todos": 0
|
|
89
95
|
},
|
|
96
|
+
"a-capability-gap-is-decided-once-per-run.test.mjs": {
|
|
97
|
+
"tests": 4,
|
|
98
|
+
"asserts": 17,
|
|
99
|
+
"skips": 0,
|
|
100
|
+
"todos": 0
|
|
101
|
+
},
|
|
102
|
+
"a-capability-gap-is-not-reopened.pipeline.test.mjs": {
|
|
103
|
+
"tests": 1,
|
|
104
|
+
"asserts": 6,
|
|
105
|
+
"skips": 0,
|
|
106
|
+
"todos": 0
|
|
107
|
+
},
|
|
90
108
|
"a-capability-is-named-before-the-report-names-it.test.mjs": {
|
|
91
109
|
"tests": 6,
|
|
92
110
|
"asserts": 41,
|
|
@@ -124,8 +142,8 @@
|
|
|
124
142
|
"todos": 0
|
|
125
143
|
},
|
|
126
144
|
"a-check-that-could-not-look-does-not-report-a-drift.test.mjs": {
|
|
127
|
-
"tests":
|
|
128
|
-
"asserts":
|
|
145
|
+
"tests": 10,
|
|
146
|
+
"asserts": 26,
|
|
129
147
|
"skips": 0,
|
|
130
148
|
"todos": 0
|
|
131
149
|
},
|
|
@@ -141,6 +159,12 @@
|
|
|
141
159
|
"skips": 0,
|
|
142
160
|
"todos": 0
|
|
143
161
|
},
|
|
162
|
+
"a-class-the-client-reaches-is-added-and-costs-one-question.test.mjs": {
|
|
163
|
+
"tests": 5,
|
|
164
|
+
"asserts": 17,
|
|
165
|
+
"skips": 0,
|
|
166
|
+
"todos": 0
|
|
167
|
+
},
|
|
144
168
|
"a-clean-install-offers-generic-alone.test.mjs": {
|
|
145
169
|
"tests": 9,
|
|
146
170
|
"asserts": 14,
|
|
@@ -177,6 +201,12 @@
|
|
|
177
201
|
"skips": 0,
|
|
178
202
|
"todos": 0
|
|
179
203
|
},
|
|
204
|
+
"a-common-law-coverage-status-is-read-as-data.test.mjs": {
|
|
205
|
+
"tests": 11,
|
|
206
|
+
"asserts": 42,
|
|
207
|
+
"skips": 0,
|
|
208
|
+
"todos": 0
|
|
209
|
+
},
|
|
180
210
|
"a-company-can-be-given-a-framework-after-it-exists.test.mjs": {
|
|
181
211
|
"tests": 8,
|
|
182
212
|
"asserts": 19,
|
|
@@ -315,6 +345,12 @@
|
|
|
315
345
|
"skips": 0,
|
|
316
346
|
"todos": 0
|
|
317
347
|
},
|
|
348
|
+
"a-deprecate-only-dispatch-publishes-nothing.test.mjs": {
|
|
349
|
+
"tests": 5,
|
|
350
|
+
"asserts": 8,
|
|
351
|
+
"skips": 0,
|
|
352
|
+
"todos": 0
|
|
353
|
+
},
|
|
318
354
|
"a-depth-check-that-read-nothing-is-on-the-investigate-list.test.mjs": {
|
|
319
355
|
"tests": 3,
|
|
320
356
|
"asserts": 8,
|
|
@@ -423,6 +459,12 @@
|
|
|
423
459
|
"skips": 0,
|
|
424
460
|
"todos": 0
|
|
425
461
|
},
|
|
462
|
+
"a-full-country-card-keeps-what-the-multi-country-card-shows.test.mjs": {
|
|
463
|
+
"tests": 2,
|
|
464
|
+
"asserts": 12,
|
|
465
|
+
"skips": 0,
|
|
466
|
+
"todos": 0
|
|
467
|
+
},
|
|
426
468
|
"a-generic-run-is-filed-and-capped-at-the-claim.test.mjs": {
|
|
427
469
|
"tests": 2,
|
|
428
470
|
"asserts": 12,
|
|
@@ -435,6 +477,12 @@
|
|
|
435
477
|
"skips": 0,
|
|
436
478
|
"todos": 0
|
|
437
479
|
},
|
|
480
|
+
"a-goods-slice-and-an-added-class-read-as-themselves.test.mjs": {
|
|
481
|
+
"tests": 5,
|
|
482
|
+
"asserts": 20,
|
|
483
|
+
"skips": 0,
|
|
484
|
+
"todos": 0
|
|
485
|
+
},
|
|
438
486
|
"a-half-applied-connect-says-so.test.mjs": {
|
|
439
487
|
"tests": 5,
|
|
440
488
|
"asserts": 15,
|
|
@@ -447,6 +495,12 @@
|
|
|
447
495
|
"skips": 0,
|
|
448
496
|
"todos": 0
|
|
449
497
|
},
|
|
498
|
+
"a-hard-error-gets-one-settle-attempt-per-run.test.mjs": {
|
|
499
|
+
"tests": 5,
|
|
500
|
+
"asserts": 15,
|
|
501
|
+
"skips": 0,
|
|
502
|
+
"todos": 0
|
|
503
|
+
},
|
|
450
504
|
"a-hostile-line-is-read-in-linear-time.test.mjs": {
|
|
451
505
|
"tests": 3,
|
|
452
506
|
"asserts": 7,
|
|
@@ -459,6 +513,12 @@
|
|
|
459
513
|
"skips": 0,
|
|
460
514
|
"todos": 0
|
|
461
515
|
},
|
|
516
|
+
"a-job-on-the-older-goods-spelling-scopes-the-same.test.mjs": {
|
|
517
|
+
"tests": 10,
|
|
518
|
+
"asserts": 23,
|
|
519
|
+
"skips": 0,
|
|
520
|
+
"todos": 0
|
|
521
|
+
},
|
|
462
522
|
"a-jq-program-in-a-js-string-keeps-its-backslash.test.mjs": {
|
|
463
523
|
"tests": 2,
|
|
464
524
|
"asserts": 6,
|
|
@@ -519,6 +579,12 @@
|
|
|
519
579
|
"skips": 0,
|
|
520
580
|
"todos": 0
|
|
521
581
|
},
|
|
582
|
+
"a-mark-too-short-for-contains-is-asked-exactly.test.mjs": {
|
|
583
|
+
"tests": 12,
|
|
584
|
+
"asserts": 57,
|
|
585
|
+
"skips": 0,
|
|
586
|
+
"todos": 0
|
|
587
|
+
},
|
|
522
588
|
"a-matter-directory-nobody-created-is-visible.test.mjs": {
|
|
523
589
|
"tests": 5,
|
|
524
590
|
"asserts": 14,
|
|
@@ -795,6 +861,12 @@
|
|
|
795
861
|
"skips": 0,
|
|
796
862
|
"todos": 0
|
|
797
863
|
},
|
|
864
|
+
"a-refused-search-is-not-a-dropped-one.test.mjs": {
|
|
865
|
+
"tests": 6,
|
|
866
|
+
"asserts": 12,
|
|
867
|
+
"skips": 0,
|
|
868
|
+
"todos": 0
|
|
869
|
+
},
|
|
798
870
|
"a-refused-unit-says-what-is-half-started.test.mjs": {
|
|
799
871
|
"tests": 9,
|
|
800
872
|
"asserts": 31,
|
|
@@ -951,6 +1023,12 @@
|
|
|
951
1023
|
"skips": 0,
|
|
952
1024
|
"todos": 0
|
|
953
1025
|
},
|
|
1026
|
+
"a-skipped-question-is-not-an-answer.test.mjs": {
|
|
1027
|
+
"tests": 5,
|
|
1028
|
+
"asserts": 12,
|
|
1029
|
+
"skips": 0,
|
|
1030
|
+
"todos": 0
|
|
1031
|
+
},
|
|
954
1032
|
"a-source-the-classifier-could-not-read-is-not-empty.test.mjs": {
|
|
955
1033
|
"tests": 9,
|
|
956
1034
|
"asserts": 14,
|
|
@@ -1011,12 +1089,24 @@
|
|
|
1011
1089
|
"skips": 0,
|
|
1012
1090
|
"todos": 0
|
|
1013
1091
|
},
|
|
1092
|
+
"a-taken-port-is-retried-whatever-shape-the-result-has.test.mjs": {
|
|
1093
|
+
"tests": 4,
|
|
1094
|
+
"asserts": 16,
|
|
1095
|
+
"skips": 0,
|
|
1096
|
+
"todos": 0
|
|
1097
|
+
},
|
|
1014
1098
|
"a-terminal-guard-delivers-and-clamps.test.mjs": {
|
|
1015
1099
|
"tests": 11,
|
|
1016
1100
|
"asserts": 40,
|
|
1017
1101
|
"skips": 0,
|
|
1018
1102
|
"todos": 0
|
|
1019
1103
|
},
|
|
1104
|
+
"a-territory-the-engine-cannot-search-is-disclosed-not-wired.test.mjs": {
|
|
1105
|
+
"tests": 4,
|
|
1106
|
+
"asserts": 8,
|
|
1107
|
+
"skips": 0,
|
|
1108
|
+
"todos": 0
|
|
1109
|
+
},
|
|
1020
1110
|
"a-test-never-reaches-a-network-it-does-not-need.test.mjs": {
|
|
1021
1111
|
"tests": 2,
|
|
1022
1112
|
"asserts": 5,
|
|
@@ -1025,7 +1115,7 @@
|
|
|
1025
1115
|
},
|
|
1026
1116
|
"a-timer-is-asked-about-as-a-timer.test.mjs": {
|
|
1027
1117
|
"tests": 7,
|
|
1028
|
-
"asserts":
|
|
1118
|
+
"asserts": 17,
|
|
1029
1119
|
"skips": 0,
|
|
1030
1120
|
"todos": 0
|
|
1031
1121
|
},
|
|
@@ -1035,6 +1125,12 @@
|
|
|
1035
1125
|
"skips": 0,
|
|
1036
1126
|
"todos": 0
|
|
1037
1127
|
},
|
|
1128
|
+
"a-turn-whose-every-tool-call-was-refused-is-not-retried.test.mjs": {
|
|
1129
|
+
"tests": 3,
|
|
1130
|
+
"asserts": 12,
|
|
1131
|
+
"skips": 0,
|
|
1132
|
+
"todos": 0
|
|
1133
|
+
},
|
|
1038
1134
|
"a-two-form-matter-owes-a-read-per-form.test.mjs": {
|
|
1039
1135
|
"tests": 8,
|
|
1040
1136
|
"asserts": 25,
|
|
@@ -1083,6 +1179,12 @@
|
|
|
1083
1179
|
"skips": 0,
|
|
1084
1180
|
"todos": 0
|
|
1085
1181
|
},
|
|
1182
|
+
"a-waiting-family-the-reading-turn-asks-is-asked.test.mjs": {
|
|
1183
|
+
"tests": 3,
|
|
1184
|
+
"asserts": 13,
|
|
1185
|
+
"skips": 0,
|
|
1186
|
+
"todos": 0
|
|
1187
|
+
},
|
|
1086
1188
|
"a-warm-turn-that-never-landed-costs-no-rung.test.mjs": {
|
|
1087
1189
|
"tests": 4,
|
|
1088
1190
|
"asserts": 20,
|
|
@@ -1149,6 +1251,12 @@
|
|
|
1149
1251
|
"skips": 0,
|
|
1150
1252
|
"todos": 0
|
|
1151
1253
|
},
|
|
1254
|
+
"an-absent-portal-bundle-is-not-a-stale-one.test.mjs": {
|
|
1255
|
+
"tests": 4,
|
|
1256
|
+
"asserts": 7,
|
|
1257
|
+
"skips": 0,
|
|
1258
|
+
"todos": 0
|
|
1259
|
+
},
|
|
1152
1260
|
"an-account-is-never-created-unable-to-start.test.mjs": {
|
|
1153
1261
|
"tests": 7,
|
|
1154
1262
|
"asserts": 26,
|
|
@@ -1203,6 +1311,12 @@
|
|
|
1203
1311
|
"skips": 0,
|
|
1204
1312
|
"todos": 0
|
|
1205
1313
|
},
|
|
1314
|
+
"an-escape-is-read-the-way-a-lexer-reads-it.test.mjs": {
|
|
1315
|
+
"tests": 3,
|
|
1316
|
+
"asserts": 11,
|
|
1317
|
+
"skips": 0,
|
|
1318
|
+
"todos": 0
|
|
1319
|
+
},
|
|
1206
1320
|
"an-evidence-demand-that-cannot-be-met.test.mjs": {
|
|
1207
1321
|
"tests": 9,
|
|
1208
1322
|
"asserts": 21,
|
|
@@ -1277,7 +1391,7 @@
|
|
|
1277
1391
|
},
|
|
1278
1392
|
"archive-index.test.mjs": {
|
|
1279
1393
|
"tests": 15,
|
|
1280
|
-
"asserts":
|
|
1394
|
+
"asserts": 87,
|
|
1281
1395
|
"skips": 0,
|
|
1282
1396
|
"todos": 0
|
|
1283
1397
|
},
|
|
@@ -1875,6 +1989,12 @@
|
|
|
1875
1989
|
"skips": 0,
|
|
1876
1990
|
"todos": 0
|
|
1877
1991
|
},
|
|
1992
|
+
"ctrl-c-takes-the-demo-folder-with-it.test.mjs": {
|
|
1993
|
+
"tests": 4,
|
|
1994
|
+
"asserts": 10,
|
|
1995
|
+
"skips": 0,
|
|
1996
|
+
"todos": 0
|
|
1997
|
+
},
|
|
1878
1998
|
"dead-end-passage-is-named-not-blamed.test.mjs": {
|
|
1879
1999
|
"tests": 8,
|
|
1880
2000
|
"asserts": 24,
|
|
@@ -2109,6 +2229,12 @@
|
|
|
2109
2229
|
"skips": 0,
|
|
2110
2230
|
"todos": 0
|
|
2111
2231
|
},
|
|
2232
|
+
"doctor-does-not-tick-a-billing-mode-it-cannot-see.test.mjs": {
|
|
2233
|
+
"tests": 5,
|
|
2234
|
+
"asserts": 8,
|
|
2235
|
+
"skips": 0,
|
|
2236
|
+
"todos": 0
|
|
2237
|
+
},
|
|
2112
2238
|
"doctor-names-who-is-in-the-store.test.mjs": {
|
|
2113
2239
|
"tests": 5,
|
|
2114
2240
|
"asserts": 15,
|
|
@@ -2207,7 +2333,7 @@
|
|
|
2207
2333
|
},
|
|
2208
2334
|
"drainer-identity.test.mjs": {
|
|
2209
2335
|
"tests": 17,
|
|
2210
|
-
"asserts":
|
|
2336
|
+
"asserts": 51,
|
|
2211
2337
|
"skips": 0,
|
|
2212
2338
|
"todos": 0
|
|
2213
2339
|
},
|
|
@@ -2326,8 +2452,8 @@
|
|
|
2326
2452
|
"todos": 0
|
|
2327
2453
|
},
|
|
2328
2454
|
"engine-probe.test.mjs": {
|
|
2329
|
-
"tests":
|
|
2330
|
-
"asserts":
|
|
2455
|
+
"tests": 34,
|
|
2456
|
+
"asserts": 166,
|
|
2331
2457
|
"skips": 0,
|
|
2332
2458
|
"todos": 0
|
|
2333
2459
|
},
|
|
@@ -2469,6 +2595,12 @@
|
|
|
2469
2595
|
"skips": 0,
|
|
2470
2596
|
"todos": 0
|
|
2471
2597
|
},
|
|
2598
|
+
"every-surface-that-takes-the-manifest-asks-for-the-goods-words.test.mjs": {
|
|
2599
|
+
"tests": 10,
|
|
2600
|
+
"asserts": 22,
|
|
2601
|
+
"skips": 0,
|
|
2602
|
+
"todos": 0
|
|
2603
|
+
},
|
|
2472
2604
|
"every-tool-declares-what-it-does.test.mjs": {
|
|
2473
2605
|
"tests": 3,
|
|
2474
2606
|
"asserts": 10,
|
|
@@ -2487,6 +2619,12 @@
|
|
|
2487
2619
|
"skips": 0,
|
|
2488
2620
|
"todos": 0
|
|
2489
2621
|
},
|
|
2622
|
+
"every-waiting-family-is-asked-or-withheld.test.mjs": {
|
|
2623
|
+
"tests": 8,
|
|
2624
|
+
"asserts": 29,
|
|
2625
|
+
"skips": 0,
|
|
2626
|
+
"todos": 0
|
|
2627
|
+
},
|
|
2490
2628
|
"example-replay.test.mjs": {
|
|
2491
2629
|
"tests": 8,
|
|
2492
2630
|
"asserts": 32,
|
|
@@ -2573,7 +2711,7 @@
|
|
|
2573
2711
|
},
|
|
2574
2712
|
"findings-model.test.mjs": {
|
|
2575
2713
|
"tests": 68,
|
|
2576
|
-
"asserts":
|
|
2714
|
+
"asserts": 259,
|
|
2577
2715
|
"skips": 0,
|
|
2578
2716
|
"todos": 0
|
|
2579
2717
|
},
|
|
@@ -2685,6 +2823,12 @@
|
|
|
2685
2823
|
"skips": 0,
|
|
2686
2824
|
"todos": 0
|
|
2687
2825
|
},
|
|
2826
|
+
"generated-evidence-keeps-to-its-own-commit.test.mjs": {
|
|
2827
|
+
"tests": 8,
|
|
2828
|
+
"asserts": 18,
|
|
2829
|
+
"skips": 0,
|
|
2830
|
+
"todos": 0
|
|
2831
|
+
},
|
|
2688
2832
|
"giving-access-to-everything-is-a-switch-not-a-point.test.mjs": {
|
|
2689
2833
|
"tests": 1,
|
|
2690
2834
|
"asserts": 4,
|
|
@@ -2962,8 +3106,8 @@
|
|
|
2962
3106
|
"todos": 0
|
|
2963
3107
|
},
|
|
2964
3108
|
"matter-frame-record.test.mjs": {
|
|
2965
|
-
"tests":
|
|
2966
|
-
"asserts":
|
|
3109
|
+
"tests": 27,
|
|
3110
|
+
"asserts": 100,
|
|
2967
3111
|
"skips": 0,
|
|
2968
3112
|
"todos": 0
|
|
2969
3113
|
},
|
|
@@ -3029,7 +3173,7 @@
|
|
|
3029
3173
|
},
|
|
3030
3174
|
"no-client-surface-speaks-the-delivery-gates-word.test.mjs": {
|
|
3031
3175
|
"tests": 4,
|
|
3032
|
-
"asserts":
|
|
3176
|
+
"asserts": 21,
|
|
3033
3177
|
"skips": 0,
|
|
3034
3178
|
"todos": 0
|
|
3035
3179
|
},
|
|
@@ -3251,7 +3395,7 @@
|
|
|
3251
3395
|
},
|
|
3252
3396
|
"pipeline.anthropic.test.mjs": {
|
|
3253
3397
|
"tests": 3,
|
|
3254
|
-
"asserts":
|
|
3398
|
+
"asserts": 78,
|
|
3255
3399
|
"skips": 0,
|
|
3256
3400
|
"todos": 0
|
|
3257
3401
|
},
|
|
@@ -3545,7 +3689,7 @@
|
|
|
3545
3689
|
},
|
|
3546
3690
|
"provider-hard-error-deferral.test.mjs": {
|
|
3547
3691
|
"tests": 16,
|
|
3548
|
-
"asserts":
|
|
3692
|
+
"asserts": 56,
|
|
3549
3693
|
"skips": 0,
|
|
3550
3694
|
"todos": 0
|
|
3551
3695
|
},
|
|
@@ -4431,6 +4575,12 @@
|
|
|
4431
4575
|
"skips": 0,
|
|
4432
4576
|
"todos": 0
|
|
4433
4577
|
},
|
|
4578
|
+
"setup-never-prints-a-piece-of-a-key.test.mjs": {
|
|
4579
|
+
"tests": 3,
|
|
4580
|
+
"asserts": 7,
|
|
4581
|
+
"skips": 0,
|
|
4582
|
+
"todos": 0
|
|
4583
|
+
},
|
|
4434
4584
|
"setup-promises-a-login-shell-only-when-one-adds-the-directory.test.mjs": {
|
|
4435
4585
|
"tests": 3,
|
|
4436
4586
|
"asserts": 8,
|
|
@@ -4809,6 +4959,12 @@
|
|
|
4809
4959
|
"skips": 0,
|
|
4810
4960
|
"todos": 0
|
|
4811
4961
|
},
|
|
4962
|
+
"the-census-will-not-stamp-a-half-finished-merge.test.mjs": {
|
|
4963
|
+
"tests": 4,
|
|
4964
|
+
"asserts": 13,
|
|
4965
|
+
"skips": 1,
|
|
4966
|
+
"todos": 0
|
|
4967
|
+
},
|
|
4812
4968
|
"the-citation-strip-removes-openers-and-nothing-else.test.mjs": {
|
|
4813
4969
|
"tests": 18,
|
|
4814
4970
|
"asserts": 51,
|
|
@@ -5025,6 +5181,12 @@
|
|
|
5025
5181
|
"skips": 0,
|
|
5026
5182
|
"todos": 0
|
|
5027
5183
|
},
|
|
5184
|
+
"the-heartbeat-stays-fresh-while-a-run-is-in-flight.test.mjs": {
|
|
5185
|
+
"tests": 4,
|
|
5186
|
+
"asserts": 8,
|
|
5187
|
+
"skips": 0,
|
|
5188
|
+
"todos": 0
|
|
5189
|
+
},
|
|
5028
5190
|
"the-hit-list-owes-one-fate-per-line.test.mjs": {
|
|
5029
5191
|
"tests": 16,
|
|
5030
5192
|
"asserts": 55,
|
|
@@ -5157,6 +5319,12 @@
|
|
|
5157
5319
|
"skips": 0,
|
|
5158
5320
|
"todos": 0
|
|
5159
5321
|
},
|
|
5322
|
+
"the-package-cannot-grow-unnoticed.test.mjs": {
|
|
5323
|
+
"tests": 6,
|
|
5324
|
+
"asserts": 12,
|
|
5325
|
+
"skips": 0,
|
|
5326
|
+
"todos": 0
|
|
5327
|
+
},
|
|
5160
5328
|
"the-package-ships-only-the-demo-customers.test.mjs": {
|
|
5161
5329
|
"tests": 2,
|
|
5162
5330
|
"asserts": 6,
|
|
@@ -5253,6 +5421,12 @@
|
|
|
5253
5421
|
"skips": 1,
|
|
5254
5422
|
"todos": 0
|
|
5255
5423
|
},
|
|
5424
|
+
"the-reading-turn-narrows-the-same-way-on-every-register.test.mjs": {
|
|
5425
|
+
"tests": 5,
|
|
5426
|
+
"asserts": 20,
|
|
5427
|
+
"skips": 0,
|
|
5428
|
+
"todos": 0
|
|
5429
|
+
},
|
|
5256
5430
|
"the-readmes-commands-run-as-written.test.mjs": {
|
|
5257
5431
|
"tests": 2,
|
|
5258
5432
|
"asserts": 5,
|
|
@@ -5289,6 +5463,12 @@
|
|
|
5289
5463
|
"skips": 0,
|
|
5290
5464
|
"todos": 0
|
|
5291
5465
|
},
|
|
5466
|
+
"the-release-note-guard-reads-a-pull-request-and-never-main.test.mjs": {
|
|
5467
|
+
"tests": 4,
|
|
5468
|
+
"asserts": 13,
|
|
5469
|
+
"skips": 0,
|
|
5470
|
+
"todos": 0
|
|
5471
|
+
},
|
|
5292
5472
|
"the-repair-order-and-the-tool-schema-agree.test.mjs": {
|
|
5293
5473
|
"tests": 6,
|
|
5294
5474
|
"asserts": 27,
|
|
@@ -5403,6 +5583,18 @@
|
|
|
5403
5583
|
"skips": 0,
|
|
5404
5584
|
"todos": 0
|
|
5405
5585
|
},
|
|
5586
|
+
"the-shape-read-prints-counts-and-writes-nothing.test.mjs": {
|
|
5587
|
+
"tests": 5,
|
|
5588
|
+
"asserts": 16,
|
|
5589
|
+
"skips": 0,
|
|
5590
|
+
"todos": 0
|
|
5591
|
+
},
|
|
5592
|
+
"the-short-surfaces-quote-the-report.test.mjs": {
|
|
5593
|
+
"tests": 3,
|
|
5594
|
+
"asserts": 7,
|
|
5595
|
+
"skips": 0,
|
|
5596
|
+
"todos": 0
|
|
5597
|
+
},
|
|
5406
5598
|
"the-sign-in-door-folds-its-administrator-help.test.mjs": {
|
|
5407
5599
|
"tests": 5,
|
|
5408
5600
|
"asserts": 23,
|
|
@@ -5471,7 +5663,7 @@
|
|
|
5471
5663
|
},
|
|
5472
5664
|
"the-updater-that-deploys-this-box-says-what-it-is.test.mjs": {
|
|
5473
5665
|
"tests": 18,
|
|
5474
|
-
"asserts":
|
|
5666
|
+
"asserts": 61,
|
|
5475
5667
|
"skips": 0,
|
|
5476
5668
|
"todos": 0
|
|
5477
5669
|
},
|
|
@@ -5481,6 +5673,18 @@
|
|
|
5481
5673
|
"skips": 0,
|
|
5482
5674
|
"todos": 0
|
|
5483
5675
|
},
|
|
5676
|
+
"the-wider-families-wait-for-the-reading-turn-on-every-matter.test.mjs": {
|
|
5677
|
+
"tests": 7,
|
|
5678
|
+
"asserts": 23,
|
|
5679
|
+
"skips": 0,
|
|
5680
|
+
"todos": 0
|
|
5681
|
+
},
|
|
5682
|
+
"the-wider-families-wait-on-the-identical-question.test.mjs": {
|
|
5683
|
+
"tests": 13,
|
|
5684
|
+
"asserts": 49,
|
|
5685
|
+
"skips": 0,
|
|
5686
|
+
"todos": 0
|
|
5687
|
+
},
|
|
5484
5688
|
"the-worklist-comes-from-the-call-not-the-document.test.mjs": {
|
|
5485
5689
|
"tests": 3,
|
|
5486
5690
|
"asserts": 11,
|
|
@@ -6595,6 +6799,12 @@
|
|
|
6595
6799
|
"skips": 0,
|
|
6596
6800
|
"todos": 0
|
|
6597
6801
|
},
|
|
6802
|
+
"theListIsAskedForInParallel.test.ts": {
|
|
6803
|
+
"tests": 3,
|
|
6804
|
+
"asserts": 5,
|
|
6805
|
+
"skips": 0,
|
|
6806
|
+
"todos": 0
|
|
6807
|
+
},
|
|
6598
6808
|
"theStopNoticeHasItsOwnRow.test.ts": {
|
|
6599
6809
|
"tests": 4,
|
|
6600
6810
|
"asserts": 11,
|
|
@@ -6725,6 +6935,12 @@
|
|
|
6725
6935
|
"skips": 0,
|
|
6726
6936
|
"todos": 0
|
|
6727
6937
|
},
|
|
6938
|
+
"providers/clarivate/test/a-refused-query-is-named-with-its-size.test.mjs": {
|
|
6939
|
+
"tests": 6,
|
|
6940
|
+
"asserts": 22,
|
|
6941
|
+
"skips": 0,
|
|
6942
|
+
"todos": 0
|
|
6943
|
+
},
|
|
6728
6944
|
"providers/clarivate/test/phrase-value.test.mjs": {
|
|
6729
6945
|
"tests": 6,
|
|
6730
6946
|
"asserts": 23,
|
|
@@ -6803,6 +7019,12 @@
|
|
|
6803
7019
|
"skips": 0,
|
|
6804
7020
|
"todos": 0
|
|
6805
7021
|
},
|
|
7022
|
+
"providers/signa/test/an-exact-question-stays-ranked-above-the-floor.test.mjs": {
|
|
7023
|
+
"tests": 3,
|
|
7024
|
+
"asserts": 8,
|
|
7025
|
+
"skips": 0,
|
|
7026
|
+
"todos": 0
|
|
7027
|
+
},
|
|
6806
7028
|
"providers/signa/test/an-owner-portfolio-sweep-is-a-search.test.mjs": {
|
|
6807
7029
|
"tests": 4,
|
|
6808
7030
|
"asserts": 17,
|
|
@@ -181,7 +181,13 @@ export function uncarriedCoverageLimits(rows, ledger) {
|
|
|
181
181
|
if (!Array.isArray(ledger) || !ledger.length) return null;
|
|
182
182
|
const limited = ledger.filter((r) => {
|
|
183
183
|
const st = String(r?.status ?? "").trim();
|
|
184
|
-
|
|
184
|
+
// `withheld-by-judgment` sits beside `confirmed-clean` here, and the reason is the opposite one.
|
|
185
|
+
// A clean row has nothing to carry. A withheld row is a family the reading turn chose NOT to open,
|
|
186
|
+
// having read the identical question as a list and found what it needed — that is where the work
|
|
187
|
+
// was spent, not a slice the run could not clear, and the rule that nothing is added to the report keeps it out
|
|
188
|
+
// entirely. Demanding it be carried would put a "we did not search this" line in front of a lawyer
|
|
189
|
+
// about a decision that made the search better.
|
|
190
|
+
return st !== "" && st !== "confirmed-clean" && st !== "note" && st !== "withheld-by-judgment";
|
|
185
191
|
});
|
|
186
192
|
if (!limited.length) return null; // the run records no limit: nothing to carry
|
|
187
193
|
const carried = (rows ?? []).some((r) => {
|
|
@@ -201,6 +207,66 @@ export function uncarriedCoverageLimits(rows, ledger) {
|
|
|
201
207
|
* could assert either could waive its own contract — the same reason the reviewer's transport takes
|
|
202
208
|
* `receiptPresent` from the driver rather than from the call.
|
|
203
209
|
*/
|
|
210
|
+
/**
|
|
211
|
+
* The coverage rows a client may see, with every withheld family's row removed. PURE.
|
|
212
|
+
*
|
|
213
|
+
* `withheld-by-judgment` is the reading turn saying it chose not to open a family — it read the
|
|
214
|
+
* identical question as a list, found what it needed, and spent the work there. That is a decision
|
|
215
|
+
* about where effort went, not a gap in the client's search, and the rule that nothing is added to the report (2026-09-18) keeps it in the run record
|
|
216
|
+
* and the coverage ledger alone.
|
|
217
|
+
*
|
|
218
|
+
* Applied here rather than trusted to the model, because the model is the surface that can get it
|
|
219
|
+
* wrong: it authors these rows, it has been told the family was withheld, and a row reading "we did
|
|
220
|
+
* not search this" in front of a lawyer is the sentence that rule forbids — about a decision that
|
|
221
|
+
* made the search better. The LEDGER is the authority on which families were withheld.
|
|
222
|
+
*
|
|
223
|
+
* A row for a family the ledger holds as anything else is untouched, and that direction matters more
|
|
224
|
+
* than this one: a documented limit dropped by accident is a disclosure the reader is owed and does
|
|
225
|
+
* not get.
|
|
226
|
+
*/
|
|
227
|
+
export function withoutWithheldRows(rows, ledger) {
|
|
228
|
+
// A FAMILY IS ONLY WITHHELD IF THE LEDGER HOLDS NOTHING ELSE ABOUT IT. A family can be withheld at
|
|
229
|
+
// the axis level AND still carry a documented limit on one of its slices — measured: an axis whose
|
|
230
|
+
// whole-axis row is withheld while `primary-sweep (exact: <mark> [cl 25])` is a disclosed limit the
|
|
231
|
+
// synthesis gate then demands be carried. Dropping by family name alone deleted the carrying row and
|
|
232
|
+
// the run failed, which is the worse error stated twice over: a disclosure the reader is owed, gone,
|
|
233
|
+
// and a run that does not deliver.
|
|
234
|
+
//
|
|
235
|
+
// So a family qualifies only when EVERY ledger row for it is withheld. One row saying anything else
|
|
236
|
+
// keeps the whole family's rows, and that is the direction to fail in.
|
|
237
|
+
const byFamily = new Map();
|
|
238
|
+
for (const r of (Array.isArray(ledger) ? ledger : [])) {
|
|
239
|
+
const axis = String(r?.axis ?? "").trim().toLowerCase();
|
|
240
|
+
if (!axis) continue;
|
|
241
|
+
const isWithheld = String(r?.status ?? "").trim() === "withheld-by-judgment";
|
|
242
|
+
byFamily.set(axis, (byFamily.get(axis) ?? true) && isWithheld);
|
|
243
|
+
}
|
|
244
|
+
const withheld = new Set([...byFamily.entries()].filter(([, only]) => only).map(([axis]) => axis));
|
|
245
|
+
if (!withheld.size) return Array.isArray(rows) ? rows : [];
|
|
246
|
+
|
|
247
|
+
// ── THE AXIS IS NAMED IN A SEGMENT, NOT ALWAYS THE FIRST ONE ──────────────────────────────────
|
|
248
|
+
//
|
|
249
|
+
// This read `area.split("/")[0]` and was inert for the two shapes that matter most, failing OPEN —
|
|
250
|
+
// toward the client, which is the wrong direction for a gate whose whole job is to keep a row off
|
|
251
|
+
// the page. Measured against the real strings:
|
|
252
|
+
//
|
|
253
|
+
// `incumbent-class (entire axis)` no slash at all — the whole-axis row a client reads
|
|
254
|
+
// `Register / incumbent-class` the axis is the SECOND segment; the first is a layer
|
|
255
|
+
// `incumbent-class / extra script group` the only shape the first read caught
|
|
256
|
+
//
|
|
257
|
+
// So every `/`-separated segment is considered, with a trailing parenthetical stripped, and each is
|
|
258
|
+
// compared by EQUALITY against the axis names the ledger actually holds.
|
|
259
|
+
//
|
|
260
|
+
// Equality on a segment, never `includes`: a substring test over an open vocabulary is how one axis
|
|
261
|
+
// name once matched two unrelated areas, and here a false match DROPS a row — a documented limit the
|
|
262
|
+
// reader is owed, gone silently. The failure this gate prevents is a withheld row appearing; the
|
|
263
|
+
// failure it must not cause is a disclosure disappearing, and that one is worse.
|
|
264
|
+
const namesIn = (area) => String(area ?? "").toLowerCase().split("/")
|
|
265
|
+
.map((seg) => seg.replace(/\([^)]*\)/g, " ").trim())
|
|
266
|
+
.filter(Boolean);
|
|
267
|
+
return (Array.isArray(rows) ? rows : []).filter((r) => !namesIn(r?.area).some((n) => withheld.has(n)));
|
|
268
|
+
}
|
|
269
|
+
|
|
204
270
|
export function acceptSynthesis(params, { asks = [], ledger = null, manifest = null, owed = null, declined = null } = {}) {
|
|
205
271
|
const doc = params?.findings;
|
|
206
272
|
if (!doc || typeof doc !== "object" || Array.isArray(doc)) {
|
|
@@ -228,7 +294,19 @@ export function acceptSynthesis(params, { asks = [], ledger = null, manifest = n
|
|
|
228
294
|
// Two copies that must agree is a second-authoring defect, so there are not two. The record is the
|
|
229
295
|
// machine contract and the narrative's coverage list is RENDERED from it. Disagreement is not detected;
|
|
230
296
|
// it is impossible.
|
|
231
|
-
|
|
297
|
+
// ── NOTHING ADDED TO THE REPORT: A FAMILY THE READING TURN DID NOT OPEN STAYS OFF IT, WHATEVER THE MODEL WROTE ──
|
|
298
|
+
//
|
|
299
|
+
// `withheld-by-judgment` is the reading turn saying it chose not to open a family — it read the
|
|
300
|
+
// identical question as a list, found what it needed, and spent the work there instead. That is a
|
|
301
|
+
// decision about where effort went, not a gap in the client's search, and it belongs to the run
|
|
302
|
+
// record and the coverage ledger alone.
|
|
303
|
+
//
|
|
304
|
+
// Dropped HERE rather than trusted to the model, because the model is the one surface that can get
|
|
305
|
+
// it wrong: it writes the coverage rows, it has been told the family was withheld, and a row saying
|
|
306
|
+
// "we did not search this" in front of a lawyer is exactly the sentence that rule forbids — about a
|
|
307
|
+
// decision that made the search better. The ledger is the authority on which families were withheld,
|
|
308
|
+
// so a row whose family it holds as withheld goes, however the row was authored.
|
|
309
|
+
const rows = withoutWithheldRows(Array.isArray(doc.coverage) ? doc.coverage : [], ledger);
|
|
232
310
|
if (n.coverage?.rows !== undefined) {
|
|
233
311
|
return { ok: false, reason: "synthesis_coverage_rows_misplaced: coverage rows belong in `findings.coverage`, not on the narrative — the driver renders the narrative's coverage list from the record, so there is one authored set and no way for the client's readable statement and the machine record to disagree. Send `narrative.coverage.read` for the prose" };
|
|
234
312
|
}
|
|
@@ -63,7 +63,7 @@ export function unitBody(text) {
|
|
|
63
63
|
* driver/unit-files.mjs wherever it sits, or null when the repo tracks none
|
|
64
64
|
* dropIns — array of drop-in paths (may be empty)
|
|
65
65
|
* @param {{ok: boolean, why?: string}} probe — could the caller enumerate at all?
|
|
66
|
-
* @returns {{state: "pass"|"fail"|"skip", message: string, drifted: string[], templated: string[]}}
|
|
66
|
+
* @returns {{state: "pass"|"fail"|"skip", blocked?: true, message: string, drifted: string[], templated: string[]}}
|
|
67
67
|
*
|
|
68
68
|
* THREE OUTCOMES, and the third is the one this file exists for. "Could not look" is never "nothing is
|
|
69
69
|
* wrong" — the lesson, applied to the arm that has the same failure mode one layer down: a unit
|
|
@@ -72,7 +72,7 @@ export function unitBody(text) {
|
|
|
72
72
|
*/
|
|
73
73
|
export function unitFileDriftVerdict({ units = [], probe = { ok: true } } = {}) {
|
|
74
74
|
if (!probe.ok) {
|
|
75
|
-
return { state: "skip", drifted: [],
|
|
75
|
+
return { state: "skip", blocked: true, drifted: [],
|
|
76
76
|
message: `could not enumerate systemd units, so no unit file was COMPARED — ${probe.why ?? "no reason given"}. `
|
|
77
77
|
+ "This is a failure to look, not a finding about the deployment" };
|
|
78
78
|
}
|
|
@@ -80,7 +80,7 @@ export function unitFileDriftVerdict({ units = [], probe = { ok: true } } = {})
|
|
|
80
80
|
const unreadable = units.filter((u) => u && u.live == null);
|
|
81
81
|
const untracked = units.filter((u) => u && u.live != null && u.tracked == null);
|
|
82
82
|
if (!comparable.length) {
|
|
83
|
-
return { state: "skip", drifted: [],
|
|
83
|
+
return { state: "skip", blocked: true, drifted: [],
|
|
84
84
|
message: `systemd answered and no unit could be compared to a tracked file (${units.length} unit(s) seen, `
|
|
85
85
|
+ `${unreadable.length} with no readable fragment, ${untracked.length} with no tracked unit file `
|
|
86
86
|
+ "anywhere in the tree) — nothing was checked" };
|