clearotron 0.4.0 → 0.4.1-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/THIRD-PARTY-NOTICES.md +2 -2
- package/build-info.json +2 -2
- package/docs/SECURITY-OWASP.md +21 -13
- package/docs/SECURITY.md +20 -14
- package/docs/architecture/04-configuration-reference.md +3 -2
- package/docs/architecture/05-config-governance.md +1 -1
- package/docs/architecture/06-operations-runbook.md +1 -1
- package/docs/architecture/09-security-and-data.md +16 -11
- package/driver/CHANGELOG.md +18 -0
- package/driver/binding-layers.mjs +28 -6
- package/driver/citation-census.json +3 -3
- package/driver/common-law-coverage-status.mjs +52 -0
- package/driver/common-law-receipts.mjs +1 -1
- package/driver/connotation-search.mjs +5 -5
- package/driver/contract-dictation-registry.mjs +1 -1
- package/driver/contract-e3-backlog.mjs +1 -1
- package/driver/contract-vocabulary.mjs +18 -18
- package/driver/degraded-parts.mjs +10 -3
- package/driver/dispatch-record.mjs +19 -0
- package/driver/doubt-closure-tool.mjs +2 -2
- package/driver/driver.config.mjs +39 -6
- package/driver/engagement-receipt.mjs +1 -1
- package/driver/engine/CONTRACT.md +41 -1
- package/driver/engine/anthropic-agent.mjs +56 -4
- package/driver/engine/mcp/codex-config.mjs +1 -1
- package/driver/engine/mcp/coverage-server.mjs +1 -1
- package/driver/engine/mcp/gather-config.mjs +1 -1
- package/driver/engine/mcp/recording-server.mjs +31 -4
- package/driver/engine/mcp/stdio-server.mjs +45 -7
- package/driver/engine/openai-agent.mjs +100 -17
- package/driver/engine/session-record.mjs +223 -0
- package/driver/enqueue-schema.mjs +2 -2
- package/driver/findings-model.mjs +3 -3
- package/driver/form-neighbourhood.mjs +7 -7
- package/driver/frame-diff-model.mjs +3 -3
- package/driver/framework.mjs +22 -0
- package/driver/gateway.mjs +94 -12
- package/driver/named-band.mjs +2 -0
- package/driver/package.json +1 -1
- package/driver/phase0.mjs +13 -2
- package/driver/pipeline-knockout.mjs +1 -1
- package/driver/pipeline.mjs +46 -33
- package/driver/portal-families.mjs +3 -3
- package/driver/portal-service.mjs +1 -1
- package/driver/predelivery-lint.mjs +19 -19
- package/driver/publish/index.mjs +1 -1
- package/driver/publish/knockout.mjs +5 -4
- package/driver/publish/office-record-links.mjs +17 -2
- package/driver/publish/publish-inputs.mjs +1 -1
- package/driver/publish/render-knockout.mjs +17 -5
- package/driver/publish/render.mjs +4 -2
- package/driver/record-fold.mjs +177 -0
- package/driver/register-count.mjs +18 -1
- package/driver/register-plan.mjs +71 -17
- package/driver/register-records.mjs +7 -0
- package/driver/registry-fidelity.mjs +2 -2
- package/driver/repairs.mjs +1 -1
- package/driver/report-card-record.mjs +4 -4
- package/driver/scope-facts.mjs +11 -3
- package/driver/search-policy.mjs +20 -1
- package/driver/skills/clearance-common-law/SKILL.md +22 -22
- package/driver/skills/clearance-register/digest.md +3 -3
- package/driver/skills/clearance-register/register-recipes.md +11 -11
- package/driver/skills/clearance-register/status-rules.md +1 -1
- package/driver/skills/clearance-register/unit.md +1 -1
- package/driver/skills/clearance-search/firm-wide-reasoning.md +3 -2
- package/driver/skills/clearance-search/phase2-execution.md +6 -5
- package/driver/skills/clearance-search/synthesis-rules.md +4 -4
- package/driver/skills/clearance-search/worked-examples.md +39 -39
- package/driver/skills/clearance-variants/SKILL.md +16 -16
- package/driver/skills/frame-diff/SKILL.md +2 -2
- package/driver/stage-context.mjs +27 -1
- package/driver/stages.mjs +12 -12
- package/driver/suite-census.json +175 -31
- package/driver/synthesis-record.mjs +5 -0
- package/driver/unit-inventory.mjs +17 -28
- package/driver/verify.mjs +6 -6
- package/mcp-server/CHANGELOG.md +4 -0
- package/mcp-server/lib/evidence.mjs +8 -8
- package/mcp-server/lib/knockout.mjs +1 -1
- package/mcp-server/package.json +2 -2
- package/package.json +2 -2
- package/portal-ui/package.json +1 -1
- package/providers/_shared/count.mjs +4 -1
- package/providers/_shared/enumerate.mjs +61 -22
- package/providers/_shared/execute-plan.mjs +2 -0
- package/providers/corsearch/src/capabilities.js +1 -1
- package/providers/oauth-mcp-bridge/CHANGELOG.md +4 -0
- package/providers/oauth-mcp-bridge/package.json +2 -2
- package/providers/signa/src/capabilities.js +17 -2
- package/providers/signa/src/core.js +234 -37
- package/scripts/band-shape-probe.mjs +2 -2
- package/scripts/deprecate-below.mjs +28 -4
- package/scripts/e2e-first-time.mjs +16 -1
- package/scripts/freeze-example-run.mjs +2 -2
- package/shared/scope.mjs +18 -2
package/driver/suite-census.json
CHANGED
|
@@ -47,7 +47,7 @@
|
|
|
47
47
|
},
|
|
48
48
|
"a-bare-territory-per-provider.test.mjs": {
|
|
49
49
|
"tests": 4,
|
|
50
|
-
"asserts":
|
|
50
|
+
"asserts": 9,
|
|
51
51
|
"skips": 0,
|
|
52
52
|
"todos": 0
|
|
53
53
|
},
|
|
@@ -57,6 +57,12 @@
|
|
|
57
57
|
"skips": 0,
|
|
58
58
|
"todos": 0
|
|
59
59
|
},
|
|
60
|
+
"a-below-deprecation-refuses-a-tagged-version.test.mjs": {
|
|
61
|
+
"tests": 4,
|
|
62
|
+
"asserts": 5,
|
|
63
|
+
"skips": 0,
|
|
64
|
+
"todos": 0
|
|
65
|
+
},
|
|
60
66
|
"a-block-that-ran-and-said-nothing-is-not-a-block-that-never-ran.test.mjs": {
|
|
61
67
|
"tests": 6,
|
|
62
68
|
"asserts": 16,
|
|
@@ -226,8 +232,8 @@
|
|
|
226
232
|
"todos": 0
|
|
227
233
|
},
|
|
228
234
|
"a-common-law-coverage-status-is-read-as-data.test.mjs": {
|
|
229
|
-
"tests":
|
|
230
|
-
"asserts":
|
|
235
|
+
"tests": 14,
|
|
236
|
+
"asserts": 50,
|
|
231
237
|
"skips": 0,
|
|
232
238
|
"todos": 0
|
|
233
239
|
},
|
|
@@ -279,6 +285,18 @@
|
|
|
279
285
|
"skips": 0,
|
|
280
286
|
"todos": 0
|
|
281
287
|
},
|
|
288
|
+
"a-count-that-threw-shows-no-exception-text.test.mjs": {
|
|
289
|
+
"tests": 4,
|
|
290
|
+
"asserts": 13,
|
|
291
|
+
"skips": 0,
|
|
292
|
+
"todos": 0
|
|
293
|
+
},
|
|
294
|
+
"a-count-the-plan-also-read-in-full-is-not-a-crowd.test.mjs": {
|
|
295
|
+
"tests": 2,
|
|
296
|
+
"asserts": 5,
|
|
297
|
+
"skips": 0,
|
|
298
|
+
"todos": 0
|
|
299
|
+
},
|
|
282
300
|
"a-court-search-that-did-not-run-reads-as-not-completed.test.mjs": {
|
|
283
301
|
"tests": 4,
|
|
284
302
|
"asserts": 6,
|
|
@@ -537,6 +555,12 @@
|
|
|
537
555
|
"skips": 0,
|
|
538
556
|
"todos": 0
|
|
539
557
|
},
|
|
558
|
+
"a-finding-is-checked-by-its-rungs-risk-not-its-place-on-the-ladder.test.mjs": {
|
|
559
|
+
"tests": 3,
|
|
560
|
+
"asserts": 16,
|
|
561
|
+
"skips": 0,
|
|
562
|
+
"todos": 0
|
|
563
|
+
},
|
|
540
564
|
"a-finding-the-digest-ended-cannot-vanish-in-silence.test.mjs": {
|
|
541
565
|
"tests": 11,
|
|
542
566
|
"asserts": 30,
|
|
@@ -555,6 +579,12 @@
|
|
|
555
579
|
"skips": 0,
|
|
556
580
|
"todos": 0
|
|
557
581
|
},
|
|
582
|
+
"a-frame-call-with-places-per-name-passes-the-gate.test.mjs": {
|
|
583
|
+
"tests": 2,
|
|
584
|
+
"asserts": 7,
|
|
585
|
+
"skips": 0,
|
|
586
|
+
"todos": 0
|
|
587
|
+
},
|
|
558
588
|
"a-framework-method-rates-through-its-table.test.mjs": {
|
|
559
589
|
"tests": 5,
|
|
560
590
|
"asserts": 28,
|
|
@@ -705,6 +735,12 @@
|
|
|
705
735
|
"skips": 0,
|
|
706
736
|
"todos": 0
|
|
707
737
|
},
|
|
738
|
+
"a-knockout-run-with-no-method-is-not-offered-inputs.test.mjs": {
|
|
739
|
+
"tests": 2,
|
|
740
|
+
"asserts": 5,
|
|
741
|
+
"skips": 0,
|
|
742
|
+
"todos": 0
|
|
743
|
+
},
|
|
708
744
|
"a-knockout-whose-counts-all-fail-pays-for-no-owner-lookup.test.mjs": {
|
|
709
745
|
"tests": 3,
|
|
710
746
|
"asserts": 12,
|
|
@@ -743,7 +779,7 @@
|
|
|
743
779
|
},
|
|
744
780
|
"a-mark-name-cannot-lie-about-how-it-reads.test.mjs": {
|
|
745
781
|
"tests": 9,
|
|
746
|
-
"asserts":
|
|
782
|
+
"asserts": 38,
|
|
747
783
|
"skips": 0,
|
|
748
784
|
"todos": 0
|
|
749
785
|
},
|
|
@@ -755,7 +791,7 @@
|
|
|
755
791
|
},
|
|
756
792
|
"a-mark-too-short-for-contains-is-asked-exactly.test.mjs": {
|
|
757
793
|
"tests": 12,
|
|
758
|
-
"asserts":
|
|
794
|
+
"asserts": 58,
|
|
759
795
|
"skips": 0,
|
|
760
796
|
"todos": 0
|
|
761
797
|
},
|
|
@@ -797,7 +833,7 @@
|
|
|
797
833
|
},
|
|
798
834
|
"a-mixed-alphabet-look-alike-is-not-sent-where-the-register-drops-its-letters.test.mjs": {
|
|
799
835
|
"tests": 10,
|
|
800
|
-
"asserts":
|
|
836
|
+
"asserts": 46,
|
|
801
837
|
"skips": 0,
|
|
802
838
|
"todos": 0
|
|
803
839
|
},
|
|
@@ -861,6 +897,12 @@
|
|
|
861
897
|
"skips": 0,
|
|
862
898
|
"todos": 0
|
|
863
899
|
},
|
|
900
|
+
"a-non-latin-mark-is-delivered-with-its-report-link.test.mjs": {
|
|
901
|
+
"tests": 3,
|
|
902
|
+
"asserts": 11,
|
|
903
|
+
"skips": 0,
|
|
904
|
+
"todos": 0
|
|
905
|
+
},
|
|
864
906
|
"a-note-the-release-refuses-is-refused-on-its-own-pull-request.test.mjs": {
|
|
865
907
|
"tests": 2,
|
|
866
908
|
"asserts": 3,
|
|
@@ -947,7 +989,7 @@
|
|
|
947
989
|
},
|
|
948
990
|
"a-program-already-here-is-checked-against-the-floor.test.mjs": {
|
|
949
991
|
"tests": 12,
|
|
950
|
-
"asserts":
|
|
992
|
+
"asserts": 45,
|
|
951
993
|
"skips": 3,
|
|
952
994
|
"todos": 0
|
|
953
995
|
},
|
|
@@ -1113,6 +1155,12 @@
|
|
|
1113
1155
|
"skips": 0,
|
|
1114
1156
|
"todos": 0
|
|
1115
1157
|
},
|
|
1158
|
+
"a-refused-tool-call-is-classified-and-counted.test.mjs": {
|
|
1159
|
+
"tests": 6,
|
|
1160
|
+
"asserts": 21,
|
|
1161
|
+
"skips": 0,
|
|
1162
|
+
"todos": 0
|
|
1163
|
+
},
|
|
1116
1164
|
"a-refused-unit-says-what-is-half-started.test.mjs": {
|
|
1117
1165
|
"tests": 9,
|
|
1118
1166
|
"asserts": 31,
|
|
@@ -1179,6 +1227,12 @@
|
|
|
1179
1227
|
"skips": 0,
|
|
1180
1228
|
"todos": 0
|
|
1181
1229
|
},
|
|
1230
|
+
"a-repair-after-the-cards-keeps-the-record-folded.test.mjs": {
|
|
1231
|
+
"tests": 1,
|
|
1232
|
+
"asserts": 6,
|
|
1233
|
+
"skips": 0,
|
|
1234
|
+
"todos": 0
|
|
1235
|
+
},
|
|
1182
1236
|
"a-repair-may-narrow-a-claim-and-never-broaden-it.test.mjs": {
|
|
1183
1237
|
"tests": 5,
|
|
1184
1238
|
"asserts": 13,
|
|
@@ -1204,8 +1258,8 @@
|
|
|
1204
1258
|
"todos": 0
|
|
1205
1259
|
},
|
|
1206
1260
|
"a-run-asks-signa-each-question-once.test.mjs": {
|
|
1207
|
-
"tests":
|
|
1208
|
-
"asserts":
|
|
1261
|
+
"tests": 19,
|
|
1262
|
+
"asserts": 86,
|
|
1209
1263
|
"skips": 0,
|
|
1210
1264
|
"todos": 0
|
|
1211
1265
|
},
|
|
@@ -1305,6 +1359,12 @@
|
|
|
1305
1359
|
"skips": 0,
|
|
1306
1360
|
"todos": 0
|
|
1307
1361
|
},
|
|
1362
|
+
"a-session-the-classifier-cut-is-not-recorded-as-clean.test.mjs": {
|
|
1363
|
+
"tests": 12,
|
|
1364
|
+
"asserts": 77,
|
|
1365
|
+
"skips": 0,
|
|
1366
|
+
"todos": 0
|
|
1367
|
+
},
|
|
1308
1368
|
"a-shared-proprietor-is-not-a-bucket-collision.test.mjs": {
|
|
1309
1369
|
"tests": 6,
|
|
1310
1370
|
"asserts": 14,
|
|
@@ -1755,12 +1815,24 @@
|
|
|
1755
1815
|
"skips": 0,
|
|
1756
1816
|
"todos": 0
|
|
1757
1817
|
},
|
|
1818
|
+
"an-eu-order-asks-the-member-registers-in-the-same-requests.test.mjs": {
|
|
1819
|
+
"tests": 5,
|
|
1820
|
+
"asserts": 9,
|
|
1821
|
+
"skips": 0,
|
|
1822
|
+
"todos": 0
|
|
1823
|
+
},
|
|
1758
1824
|
"an-evidence-demand-that-cannot-be-met.test.mjs": {
|
|
1759
1825
|
"tests": 9,
|
|
1760
1826
|
"asserts": 21,
|
|
1761
1827
|
"skips": 0,
|
|
1762
1828
|
"todos": 0
|
|
1763
1829
|
},
|
|
1830
|
+
"an-exact-spelling-band-stacks-at-the-register-s-exact-width.test.mjs": {
|
|
1831
|
+
"tests": 3,
|
|
1832
|
+
"asserts": 7,
|
|
1833
|
+
"skips": 0,
|
|
1834
|
+
"todos": 0
|
|
1835
|
+
},
|
|
1764
1836
|
"an-executed-probe-says-what-came-back.test.mjs": {
|
|
1765
1837
|
"tests": 14,
|
|
1766
1838
|
"asserts": 34,
|
|
@@ -1972,8 +2044,8 @@
|
|
|
1972
2044
|
"todos": 0
|
|
1973
2045
|
},
|
|
1974
2046
|
"binding-layers.test.mjs": {
|
|
1975
|
-
"tests":
|
|
1976
|
-
"asserts":
|
|
2047
|
+
"tests": 21,
|
|
2048
|
+
"asserts": 76,
|
|
1977
2049
|
"skips": 0,
|
|
1978
2050
|
"todos": 0
|
|
1979
2051
|
},
|
|
@@ -2974,8 +3046,8 @@
|
|
|
2974
3046
|
"todos": 0
|
|
2975
3047
|
},
|
|
2976
3048
|
"engine.anthropic.test.mjs": {
|
|
2977
|
-
"tests":
|
|
2978
|
-
"asserts":
|
|
3049
|
+
"tests": 70,
|
|
3050
|
+
"asserts": 260,
|
|
2979
3051
|
"skips": 1,
|
|
2980
3052
|
"todos": 0
|
|
2981
3053
|
},
|
|
@@ -3178,8 +3250,8 @@
|
|
|
3178
3250
|
"todos": 0
|
|
3179
3251
|
},
|
|
3180
3252
|
"experiment-context.test.mjs": {
|
|
3181
|
-
"tests":
|
|
3182
|
-
"asserts":
|
|
3253
|
+
"tests": 24,
|
|
3254
|
+
"asserts": 80,
|
|
3183
3255
|
"skips": 0,
|
|
3184
3256
|
"todos": 0
|
|
3185
3257
|
},
|
|
@@ -3431,7 +3503,7 @@
|
|
|
3431
3503
|
},
|
|
3432
3504
|
"instrumentation-house-rule.test.mjs": {
|
|
3433
3505
|
"tests": 17,
|
|
3434
|
-
"asserts":
|
|
3506
|
+
"asserts": 118,
|
|
3435
3507
|
"skips": 0,
|
|
3436
3508
|
"todos": 0
|
|
3437
3509
|
},
|
|
@@ -3551,7 +3623,7 @@
|
|
|
3551
3623
|
},
|
|
3552
3624
|
"knockout-structured-read.test.mjs": {
|
|
3553
3625
|
"tests": 12,
|
|
3554
|
-
"asserts":
|
|
3626
|
+
"asserts": 58,
|
|
3555
3627
|
"skips": 0,
|
|
3556
3628
|
"todos": 0
|
|
3557
3629
|
},
|
|
@@ -3616,8 +3688,8 @@
|
|
|
3616
3688
|
"todos": 0
|
|
3617
3689
|
},
|
|
3618
3690
|
"machine-receipts.test.mjs": {
|
|
3619
|
-
"tests":
|
|
3620
|
-
"asserts":
|
|
3691
|
+
"tests": 9,
|
|
3692
|
+
"asserts": 22,
|
|
3621
3693
|
"skips": 0,
|
|
3622
3694
|
"todos": 0
|
|
3623
3695
|
},
|
|
@@ -3837,6 +3909,12 @@
|
|
|
3837
3909
|
"skips": 0,
|
|
3838
3910
|
"todos": 0
|
|
3839
3911
|
},
|
|
3912
|
+
"one-string-read-two-ways-is-searched-both-ways.test.mjs": {
|
|
3913
|
+
"tests": 3,
|
|
3914
|
+
"asserts": 8,
|
|
3915
|
+
"skips": 0,
|
|
3916
|
+
"todos": 0
|
|
3917
|
+
},
|
|
3840
3918
|
"operability.test.mjs": {
|
|
3841
3919
|
"tests": 30,
|
|
3842
3920
|
"asserts": 177,
|
|
@@ -4463,13 +4541,13 @@
|
|
|
4463
4541
|
},
|
|
4464
4542
|
"register-capabilities.test.mjs": {
|
|
4465
4543
|
"tests": 34,
|
|
4466
|
-
"asserts":
|
|
4544
|
+
"asserts": 274,
|
|
4467
4545
|
"skips": 0,
|
|
4468
4546
|
"todos": 0
|
|
4469
4547
|
},
|
|
4470
4548
|
"register-count.test.mjs": {
|
|
4471
4549
|
"tests": 31,
|
|
4472
|
-
"asserts":
|
|
4550
|
+
"asserts": 200,
|
|
4473
4551
|
"skips": 0,
|
|
4474
4552
|
"todos": 0
|
|
4475
4553
|
},
|
|
@@ -4498,8 +4576,8 @@
|
|
|
4498
4576
|
"todos": 0
|
|
4499
4577
|
},
|
|
4500
4578
|
"register-findings-link-to-the-office-record.test.mjs": {
|
|
4501
|
-
"tests":
|
|
4502
|
-
"asserts":
|
|
4579
|
+
"tests": 22,
|
|
4580
|
+
"asserts": 67,
|
|
4503
4581
|
"skips": 0,
|
|
4504
4582
|
"todos": 0
|
|
4505
4583
|
},
|
|
@@ -4607,7 +4685,7 @@
|
|
|
4607
4685
|
},
|
|
4608
4686
|
"render.test.mjs": {
|
|
4609
4687
|
"tests": 163,
|
|
4610
|
-
"asserts":
|
|
4688
|
+
"asserts": 683,
|
|
4611
4689
|
"skips": 0,
|
|
4612
4690
|
"todos": 0
|
|
4613
4691
|
},
|
|
@@ -4966,8 +5044,8 @@
|
|
|
4966
5044
|
"todos": 0
|
|
4967
5045
|
},
|
|
4968
5046
|
"scope-facts.test.mjs": {
|
|
4969
|
-
"tests":
|
|
4970
|
-
"asserts":
|
|
5047
|
+
"tests": 21,
|
|
5048
|
+
"asserts": 83,
|
|
4971
5049
|
"skips": 0,
|
|
4972
5050
|
"todos": 0
|
|
4973
5051
|
},
|
|
@@ -5445,6 +5523,12 @@
|
|
|
5445
5523
|
"skips": 0,
|
|
5446
5524
|
"todos": 0
|
|
5447
5525
|
},
|
|
5526
|
+
"the-band-record-says-what-its-total-counts.test.mjs": {
|
|
5527
|
+
"tests": 2,
|
|
5528
|
+
"asserts": 6,
|
|
5529
|
+
"skips": 0,
|
|
5530
|
+
"todos": 0
|
|
5531
|
+
},
|
|
5448
5532
|
"the-bands-box-shows-the-whole-band.test.mjs": {
|
|
5449
5533
|
"tests": 9,
|
|
5450
5534
|
"asserts": 22,
|
|
@@ -5727,6 +5811,12 @@
|
|
|
5727
5811
|
"skips": 0,
|
|
5728
5812
|
"todos": 0
|
|
5729
5813
|
},
|
|
5814
|
+
"the-folded-record-is-the-record-from-the-seam-on.test.mjs": {
|
|
5815
|
+
"tests": 9,
|
|
5816
|
+
"asserts": 46,
|
|
5817
|
+
"skips": 0,
|
|
5818
|
+
"todos": 0
|
|
5819
|
+
},
|
|
5730
5820
|
"the-form-offers-what-the-registers-search.test.mjs": {
|
|
5731
5821
|
"tests": 5,
|
|
5732
5822
|
"asserts": 13,
|
|
@@ -5841,6 +5931,12 @@
|
|
|
5841
5931
|
"skips": 0,
|
|
5842
5932
|
"todos": 0
|
|
5843
5933
|
},
|
|
5934
|
+
"the-knockout-names-every-ordered-territory.test.mjs": {
|
|
5935
|
+
"tests": 3,
|
|
5936
|
+
"asserts": 5,
|
|
5937
|
+
"skips": 0,
|
|
5938
|
+
"todos": 0
|
|
5939
|
+
},
|
|
5844
5940
|
"the-knockout-page-leads-with-the-read.test.mjs": {
|
|
5845
5941
|
"tests": 39,
|
|
5846
5942
|
"asserts": 125,
|
|
@@ -5891,7 +5987,7 @@
|
|
|
5891
5987
|
},
|
|
5892
5988
|
"the-narrative-is-checked-against-its-depth-rules.test.mjs": {
|
|
5893
5989
|
"tests": 19,
|
|
5894
|
-
"asserts":
|
|
5990
|
+
"asserts": 71,
|
|
5895
5991
|
"skips": 0,
|
|
5896
5992
|
"todos": 0
|
|
5897
5993
|
},
|
|
@@ -6167,7 +6263,7 @@
|
|
|
6167
6263
|
},
|
|
6168
6264
|
"the-reviewers-open-points-stay-in-the-run-record.test.mjs": {
|
|
6169
6265
|
"tests": 6,
|
|
6170
|
-
"asserts":
|
|
6266
|
+
"asserts": 16,
|
|
6171
6267
|
"skips": 0,
|
|
6172
6268
|
"todos": 0
|
|
6173
6269
|
},
|
|
@@ -6459,6 +6555,12 @@
|
|
|
6459
6555
|
"skips": 0,
|
|
6460
6556
|
"todos": 0
|
|
6461
6557
|
},
|
|
6558
|
+
"two-names-that-differ-only-in-script-letters-are-not-duplicates.test.mjs": {
|
|
6559
|
+
"tests": 5,
|
|
6560
|
+
"asserts": 10,
|
|
6561
|
+
"skips": 0,
|
|
6562
|
+
"todos": 0
|
|
6563
|
+
},
|
|
6462
6564
|
"two-ratified-forms-get-reasoned-apart.test.mjs": {
|
|
6463
6565
|
"tests": 7,
|
|
6464
6566
|
"asserts": 17,
|
|
@@ -6746,6 +6848,12 @@
|
|
|
6746
6848
|
"skips": 0,
|
|
6747
6849
|
"todos": 0
|
|
6748
6850
|
},
|
|
6851
|
+
"a-connector-generic-run-is-filed-under-the-sole-organisation.test.mjs": {
|
|
6852
|
+
"tests": 5,
|
|
6853
|
+
"asserts": 6,
|
|
6854
|
+
"skips": 0,
|
|
6855
|
+
"todos": 0
|
|
6856
|
+
},
|
|
6749
6857
|
"a-key-has-one-door-and-it-is-not-the-network.test.mjs": {
|
|
6750
6858
|
"tests": 13,
|
|
6751
6859
|
"asserts": 33,
|
|
@@ -7559,6 +7667,12 @@
|
|
|
7559
7667
|
"skips": 0,
|
|
7560
7668
|
"todos": 0
|
|
7561
7669
|
},
|
|
7670
|
+
"providers/_shared/test/a-total-that-counts-records-says-so-on-every-answer.test.mjs": {
|
|
7671
|
+
"tests": 3,
|
|
7672
|
+
"asserts": 13,
|
|
7673
|
+
"skips": 0,
|
|
7674
|
+
"todos": 0
|
|
7675
|
+
},
|
|
7562
7676
|
"providers/_shared/test/absent-body.test.mjs": {
|
|
7563
7677
|
"tests": 12,
|
|
7564
7678
|
"asserts": 53,
|
|
@@ -7733,27 +7847,51 @@
|
|
|
7733
7847
|
"skips": 0,
|
|
7734
7848
|
"todos": 0
|
|
7735
7849
|
},
|
|
7850
|
+
"providers/signa/test/a-deterministic-mode-goes-to-the-register-as-a-text-filter.test.mjs": {
|
|
7851
|
+
"tests": 6,
|
|
7852
|
+
"asserts": 19,
|
|
7853
|
+
"skips": 0,
|
|
7854
|
+
"todos": 0
|
|
7855
|
+
},
|
|
7736
7856
|
"providers/signa/test/a-search-row-is-a-band-row.test.mjs": {
|
|
7737
7857
|
"tests": 3,
|
|
7738
7858
|
"asserts": 13,
|
|
7739
7859
|
"skips": 0,
|
|
7740
7860
|
"todos": 0
|
|
7741
7861
|
},
|
|
7862
|
+
"providers/signa/test/a-skipped-channel-is-a-question-the-register-did-not-answer.test.mjs": {
|
|
7863
|
+
"tests": 8,
|
|
7864
|
+
"asserts": 18,
|
|
7865
|
+
"skips": 0,
|
|
7866
|
+
"todos": 0
|
|
7867
|
+
},
|
|
7742
7868
|
"providers/signa/test/an-exact-question-stays-ranked-above-the-floor.test.mjs": {
|
|
7743
7869
|
"tests": 3,
|
|
7744
|
-
"asserts":
|
|
7870
|
+
"asserts": 10,
|
|
7871
|
+
"skips": 0,
|
|
7872
|
+
"todos": 0
|
|
7873
|
+
},
|
|
7874
|
+
"providers/signa/test/an-expanded-total-says-it-counts-records.test.mjs": {
|
|
7875
|
+
"tests": 3,
|
|
7876
|
+
"asserts": 6,
|
|
7745
7877
|
"skips": 0,
|
|
7746
7878
|
"todos": 0
|
|
7747
7879
|
},
|
|
7748
7880
|
"providers/signa/test/an-owner-portfolio-sweep-is-a-search.test.mjs": {
|
|
7749
7881
|
"tests": 4,
|
|
7882
|
+
"asserts": 20,
|
|
7883
|
+
"skips": 0,
|
|
7884
|
+
"todos": 0
|
|
7885
|
+
},
|
|
7886
|
+
"providers/signa/test/exact-spellings-go-as-one-ranked-list.test.mjs": {
|
|
7887
|
+
"tests": 5,
|
|
7750
7888
|
"asserts": 18,
|
|
7751
7889
|
"skips": 0,
|
|
7752
7890
|
"todos": 0
|
|
7753
7891
|
},
|
|
7754
7892
|
"providers/signa/test/match-mode-is-not-approximated.test.mjs": {
|
|
7755
7893
|
"tests": 4,
|
|
7756
|
-
"asserts":
|
|
7894
|
+
"asserts": 12,
|
|
7757
7895
|
"skips": 0,
|
|
7758
7896
|
"todos": 0
|
|
7759
7897
|
},
|
|
@@ -7763,9 +7901,15 @@
|
|
|
7763
7901
|
"skips": 0,
|
|
7764
7902
|
"todos": 0
|
|
7765
7903
|
},
|
|
7904
|
+
"providers/signa/test/the-office-page-the-register-gives-is-kept.test.mjs": {
|
|
7905
|
+
"tests": 2,
|
|
7906
|
+
"asserts": 5,
|
|
7907
|
+
"skips": 0,
|
|
7908
|
+
"todos": 0
|
|
7909
|
+
},
|
|
7766
7910
|
"providers/signa/test/the-ranked-lane-asks-for-similarity-channels.test.mjs": {
|
|
7767
7911
|
"tests": 9,
|
|
7768
|
-
"asserts":
|
|
7912
|
+
"asserts": 20,
|
|
7769
7913
|
"skips": 0,
|
|
7770
7914
|
"todos": 0
|
|
7771
7915
|
},
|
|
@@ -52,6 +52,7 @@ import { findCoverageRecommendations } from "./verify.mjs";
|
|
|
52
52
|
import { declinationCallPaths, readDeclinations } from "./declination-tool.mjs"; // — the seat's own declines, read by the driver never asserted by the seat
|
|
53
53
|
import { reconcileDeclinationDuty, declinationDutyRefusal } from "./declination-duty.mjs";
|
|
54
54
|
import { findingUris } from "./record-carry.mjs"; // one derivation of "which records did the findings name", called not copied
|
|
55
|
+
import { foldAfterSave } from "./record-fold.mjs"; // once the delivery seam is passed, the saved record is folded again
|
|
55
56
|
|
|
56
57
|
export const NARRATIVE_FILE = "narrative.md";
|
|
57
58
|
export const FINDINGS_FILE = "findings.json";
|
|
@@ -670,6 +671,10 @@ export function recordSynthesis(runDir, received, opts = {}) {
|
|
|
670
671
|
captured: closeCapture({ ok: true }), capture_failed: captureFailed,
|
|
671
672
|
};
|
|
672
673
|
}
|
|
674
|
+
// ONCE THE DELIVERY SEAM IS PASSED, THE RECORD IS FOLDED AGAIN ON ACCEPTANCE (design, 2026-10-03). The
|
|
675
|
+
// call records above stay the model's own, the base for its next patch; findings.json becomes the folded
|
|
676
|
+
// record the reviewer, the cards and the delivery read. Before the seam this leaves the record as written.
|
|
677
|
+
foldAfterSave(dir0, findingsAt);
|
|
673
678
|
|
|
674
679
|
return {
|
|
675
680
|
written: [findingsAt, narrativeAt], refused: null,
|
|
@@ -159,7 +159,7 @@ export const UNIT_INVENTORY = Object.freeze([
|
|
|
159
159
|
// stamped and says where its verdict lives, and driver/updater-identity.mjs makes that verdict from
|
|
160
160
|
// the digests the updater records about itself.
|
|
161
161
|
attribution: "stamp",
|
|
162
|
-
measured: "2026-09-08
|
|
162
|
+
measured: "2026-09-08. The service's own state says nothing about the timer: it is `inactive` between runs and `inactive` when the timer has been stopped. The timer's ActiveState says the timer itself is still up. It is NOT a next elapse and does not promise one: `active` means UP, never SCHEDULED. Proving something will still fire takes a real next elapse, which `systemctl list-timers --all` supplies and `show -p ActiveState` cannot. Measured in testing 2026-09-09: a timer reading `ActiveState=active` whose `OnCalendar` names a date already past, so `list-timers` reports its next fire as null and it will never run again.",
|
|
163
163
|
tracked: ["clearotron-deploy.service", "clearotron-deploy.timer"],
|
|
164
164
|
note: "the install's own updater.",
|
|
165
165
|
// IT WAS AN ORPHAN, AND THE CONDITION IT NAMED HAS BEEN MET. This entry carried an `orphanReason`
|
|
@@ -212,8 +212,7 @@ export const UNIT_INVENTORY = Object.freeze([
|
|
|
212
212
|
// prose references in driver/systemd/render-units.mjs also describe this file as though it were in
|
|
213
213
|
// the tree; they are stale today either way.
|
|
214
214
|
unit: "profile-service", runsOn: [],
|
|
215
|
-
measured: "2026-09-08,
|
|
216
|
-
+ "no unit contents were read.",
|
|
215
|
+
measured: "2026-09-08",
|
|
217
216
|
tracked: null,
|
|
218
217
|
untrackedReason: "the repository has never carried this file — `git log --all` on the path is empty. "
|
|
219
218
|
+ "It was described as deploying from a copy held on the deployment itself, in the same "
|
|
@@ -243,11 +242,8 @@ export const UNIT_INVENTORY = Object.freeze([
|
|
|
243
242
|
// REPORTED, never a fault, for exactly this case. It becomes `["prod"]` in the change that DEPLOYS
|
|
244
243
|
// it, against a fresh enumeration, which is the ratchet working rather than being edited around.
|
|
245
244
|
unit: "clearotron-portal", runsOn: ["test"], tracked: ["clearotron-portal.service"],
|
|
246
|
-
measured: "2026-09-07
|
|
247
|
-
note: "
|
|
248
|
-
+ "and the MCP face are the two children bin/start.mjs supervises, and neither ran under systemd, "
|
|
249
|
-
+ "so a hosted deployment kept them alive with a hand launcher and `clearotron start` had nothing "
|
|
250
|
-
+ "to refuse in favour of.",
|
|
245
|
+
measured: "2026-09-07",
|
|
246
|
+
note: "The portal had NO unit at all — it and the MCP face are the two children bin/start.mjs supervises, and neither ran under systemd.",
|
|
251
247
|
orphanReason: "THE WEB PORTAL, SHIPPED WITH NO BOX CARRYING IT YET — the same KIND of orphan as "
|
|
252
248
|
+ "clearotron-deploy (never installed), a different unit and a different install path. It is not "
|
|
253
249
|
+ "courtlistener-mcp, which runs on production under another name, and not feedback-mint, which "
|
|
@@ -260,9 +256,8 @@ export const UNIT_INVENTORY = Object.freeze([
|
|
|
260
256
|
// Same as clearotron-portal above: shipped, running nowhere, declared as an orphan rather than
|
|
261
257
|
// asserting a production state no enumeration has ever shown.
|
|
262
258
|
unit: "clearotron-mcp-face", runsOn: ["test"], tracked: ["clearotron-mcp-face.service"],
|
|
263
|
-
measured: "2026-09-07
|
|
264
|
-
note: "
|
|
265
|
-
+ "MCP; the other of the two processes that had no unit.",
|
|
259
|
+
measured: "2026-09-07",
|
|
260
|
+
note: "The engine door the portal calls over MCP; the other of the two processes that had no unit.",
|
|
266
261
|
orphanReason: "THE ENGINE DOOR THE PORTAL CALLS, shipped with no box carrying it yet. Same kind as "
|
|
267
262
|
+ "clearotron-portal beside it and as clearotron-deploy — never installed — and distinct from "
|
|
268
263
|
+ "both other kinds in this list. It arrives with the PRODUCTION REBUILD and then `systemctl "
|
|
@@ -289,7 +284,7 @@ export const UNIT_INVENTORY = Object.freeze([
|
|
|
289
284
|
// door beside it: it is in SERVER_INSTALL_SET, and it leaves this list on the day a measured
|
|
290
285
|
// enumeration of a box shows it running.
|
|
291
286
|
unit: "clearotron-client-mcp", runsOn: ["test"], tracked: ["clearotron-client-mcp.service"],
|
|
292
|
-
measured: "2026-09-07
|
|
287
|
+
measured: "2026-09-07",
|
|
293
288
|
note: "INSTALLED WITH THE PRODUCT since 2026-09-03. The client door "
|
|
294
289
|
+ "— the one surface that accepts an account-scoped key, and a separate process from the engine "
|
|
295
290
|
+ "door, which refuses one outright.",
|
|
@@ -307,9 +302,8 @@ export const UNIT_INVENTORY = Object.freeze([
|
|
|
307
302
|
// Written as part of retiring the path-watcher posture, because retiring `prelim-driver.*` without
|
|
308
303
|
// it leaves a hosted box healthy-looking and draining nothing.
|
|
309
304
|
unit: "clearotron-worker", runsOn: ["test"], tracked: ["clearotron-worker.service"],
|
|
310
|
-
measured: "2026-09-07
|
|
311
|
-
note: "
|
|
312
|
-
+ "directly (owner ruling 2026-08-31). Ships tracked and runs nowhere yet.",
|
|
305
|
+
measured: "2026-09-07",
|
|
306
|
+
note: "The drain, as one plain service unit invoking the entrypoint directly.",
|
|
313
307
|
orphanReason: "AWAITING A BOX, not an orphan by design. It is the hosted posture's drainer, and the "
|
|
314
308
|
+ "hosted posture is an opt-in step no install performs. It must NOT be "
|
|
315
309
|
+ "started beside `clearotron start`, which supervises its own worker — the two postures are "
|
|
@@ -320,7 +314,7 @@ export const UNIT_INVENTORY = Object.freeze([
|
|
|
320
314
|
orphanReason: "THE PRE-RENAME PORTAL. Production runs `clearotron-portal`; this name is "
|
|
321
315
|
+ "what that service used to be called, and the 2026-09-08 reading finds no unit of this name under "
|
|
322
316
|
+ "any account. It ran on production until the rename and the entry was never re-measured after it.",
|
|
323
|
-
measured: "2026-09-08
|
|
317
|
+
measured: "2026-09-08", tracked: null,
|
|
324
318
|
untrackedReason: "the deployed copy carries real Cloudflare Access team/AUD/domain values inline. "
|
|
325
319
|
+ "A tracked file would be the placeholder TEMPLATE, merged by hand after a "
|
|
326
320
|
+ "diff — writing one carelessly replaces working auth with placeholders that look configured.",
|
|
@@ -335,7 +329,7 @@ export const UNIT_INVENTORY = Object.freeze([
|
|
|
335
329
|
orphanReason: "THE PRE-RENAME OPERATOR DOOR. Production runs `clearotron-mcp-face`; the "
|
|
336
330
|
+ "2026-09-08 reading finds no unit of this name under any account. Same rename as the portal it "
|
|
337
331
|
+ "serves, and the same claim carried across it unmeasured.",
|
|
338
|
-
measured: "2026-09-08
|
|
332
|
+
measured: "2026-09-08", tracked: null,
|
|
339
333
|
untrackedReason: "same CF Access inline-values shape as the portal it serves.",
|
|
340
334
|
},
|
|
341
335
|
{
|
|
@@ -343,7 +337,7 @@ export const UNIT_INVENTORY = Object.freeze([
|
|
|
343
337
|
orphanReason: "THE PRE-RENAME CLIENT DOOR. `clearotron-client-mcp` runs on both the production and "
|
|
344
338
|
+ "the test deployments; the 2026-09-08 reading finds no unit of THIS name under any account. The "
|
|
345
339
|
+ "tracked template stays because the repository still ships it — see the note.",
|
|
346
|
-
measured: "2026-09-08
|
|
340
|
+
measured: "2026-09-08", tracked: ["client-mcp.service"],
|
|
347
341
|
note: "TRACKED, in mcp-server/remote/ — this entry said it had no file, and the file was there. It is "
|
|
348
342
|
+ "a banner-marked TEMPLATE, so the live copy differing from it is the arrangement, not drift. "
|
|
349
343
|
+ "It was reported as shipping no unit; a unit did ship, in mcp-server/remote/ rather than "
|
|
@@ -353,10 +347,7 @@ export const UNIT_INVENTORY = Object.freeze([
|
|
|
353
347
|
},
|
|
354
348
|
{
|
|
355
349
|
unit: "client-mcp-apikey", runsOn: ["test"],
|
|
356
|
-
measured: "2026-09-08,
|
|
357
|
-
+ "`clearotron-client-mcp`, and INACTIVE — enabled with no running process. Absent from "
|
|
358
|
-
+ "production. The entry declared production and the reading puts it on the other deployment "
|
|
359
|
-
+ "— the claim was not stale, it named the wrong machine.",
|
|
350
|
+
measured: "2026-09-08",
|
|
360
351
|
tracked: ["client-mcp-apikey.service"],
|
|
361
352
|
// THE SEPARATE QUESTION, ANSWERED. The line above used to end by saying that why it runs beside the
|
|
362
353
|
// renamed door was a question for somebody else. It is a survivor of the rename, not a posture
|
|
@@ -396,7 +387,7 @@ export const UNIT_INVENTORY = Object.freeze([
|
|
|
396
387
|
orphanReason: "A PRE-RENAME NAME OF THE RETIRED DEPLOYMENT, and the one of them whose tracked file "
|
|
397
388
|
+ "is GENERIC rather than a template — so the file is ready to be compared against a live copy the "
|
|
398
389
|
+ "day something runs it, and nothing does. Read as absent under every account on 2026-09-08.",
|
|
399
|
-
measured: "2026-09-08
|
|
390
|
+
measured: "2026-09-08", tracked: ["trademark-artifacts-http.service"],
|
|
400
391
|
note: "TRACKED, in mcp-server/remote/. GENERIC, not a template: it carries no banner and no "
|
|
401
392
|
+ "placeholder, and defers its CF Access values to the EnvironmentFile — so its live copy is "
|
|
402
393
|
+ "expected to MATCH the tracked file, and a difference is real drift.",
|
|
@@ -453,8 +444,7 @@ export const UNIT_INVENTORY = Object.freeze([
|
|
|
453
444
|
orphanReason: "NOT THIS REPOSITORY'S SERVICE, and no longer running under this name: production holds it "
|
|
454
445
|
+ "only under a retired-suffixed filename, a suffix systemd never reads. "
|
|
455
446
|
+ "Declared here so a unit sharing a machine with ours is not invisible, and now declared as gone.",
|
|
456
|
-
measured: "2026-09-08,
|
|
457
|
-
+ "does not load. No loadable unit of this name.", tracked: null,
|
|
447
|
+
measured: "2026-09-08", tracked: null,
|
|
458
448
|
untrackedReason: "it is not this repo's service. Its ExecStart runs a script from a different "
|
|
459
449
|
+ "product's checkout on the same box, not under this clone — so there is no code here to "
|
|
460
450
|
+ "template, and the old reason (CF Access values inline) would send the next reader hunting for a "
|
|
@@ -519,8 +509,7 @@ export const UNIT_INVENTORY = Object.freeze([
|
|
|
519
509
|
+ "flag was ever captured, so stopping it dropped nothing. The decision owed, if any, is whether the "
|
|
520
510
|
+ "feedback machinery is removed rather than parked; driver/run-activity.mjs still carries a note "
|
|
521
511
|
+ "addressed to whoever picks that up, and it is still unclaimed.",
|
|
522
|
-
note: "STOPPED against an input nothing writes to any more
|
|
523
|
-
+ "and it was disabled the same evening.",
|
|
512
|
+
note: "STOPPED against an input nothing writes to any more.",
|
|
524
513
|
},
|
|
525
514
|
// ── ANOTHER PRODUCT'S UNITS ARE NOT DECLARED HERE, AND THAT IS THE RULE (ruling 594, 2026-09-27) ──
|
|
526
515
|
//
|
|
@@ -544,7 +533,7 @@ export const UNIT_INVENTORY = Object.freeze([
|
|
|
544
533
|
// deployments. Not here. This file ships.
|
|
545
534
|
{
|
|
546
535
|
unit: "trademark-test-deploy", runsOn: [],
|
|
547
|
-
measured: "2026-09-07
|
|
536
|
+
measured: "2026-09-07. The hourly deploy runs as clearotron-deploy.timer, which has its own entry; this name is what that one used to be called.", tracked: null,
|
|
548
537
|
// AN EMPTY runsOn OWES A REASON, and this one is a supersession rather than an orphan: the hourly
|
|
549
538
|
// deploy still runs on the test deployment, under the name `clearotron-deploy`, which has its own entry
|
|
550
539
|
// its own measurement. This name is what that unit used to be called. It is kept rather than deleted
|