clearotron 0.5.0-beta.6 → 0.5.0-beta.7

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.
Files changed (165) hide show
  1. package/THIRD-PARTY-NOTICES.md +122 -96
  2. package/build-info.json +2 -2
  3. package/docs/architecture/04-configuration-reference.md +1 -1
  4. package/driver/CHANGELOG.md +11 -0
  5. package/driver/accepted-order.mjs +139 -0
  6. package/driver/contract-e3-backlog.mjs +31 -30
  7. package/driver/contract-vocabulary.mjs +1 -1
  8. package/driver/corrections-feedforward.mjs +29 -10
  9. package/driver/coverage-form.mjs +4 -3
  10. package/driver/coverage-ledger.mjs +6 -2
  11. package/driver/declination-duty.mjs +24 -2
  12. package/driver/declination-tool.mjs +10 -1
  13. package/driver/derived-state.mjs +104 -0
  14. package/driver/engine/CONTRACT.md +2 -2
  15. package/driver/engine/mcp/recording-server.mjs +1 -0
  16. package/driver/engine/openai-agent.mjs +3 -2
  17. package/driver/finding-citations.mjs +38 -0
  18. package/driver/goods-evidence.mjs +37 -1
  19. package/driver/narrative-refutation-record.mjs +36 -4
  20. package/driver/not-searched-sentences.mjs +118 -0
  21. package/driver/package.json +1 -1
  22. package/driver/pipeline.mjs +391 -73
  23. package/driver/predelivery-lint.mjs +72 -17
  24. package/driver/publish/audit-from-spine.mjs +8 -2
  25. package/driver/publish/email-conditions.mjs +21 -0
  26. package/driver/publish/index.mjs +19 -5
  27. package/driver/register-plan.mjs +8 -44
  28. package/driver/repair-composers.mjs +49 -13
  29. package/driver/repair-targets.mjs +11 -31
  30. package/driver/replay-archive.mjs +2 -2
  31. package/driver/research-answers.mjs +47 -2
  32. package/driver/skeptic-search.mjs +4 -2
  33. package/driver/skills/clearance-register/SKILL.md +4 -10
  34. package/driver/skills/clearance-search/SKILL.md +2 -2
  35. package/driver/skills/clearance-search/phase2-execution.md +1 -1
  36. package/driver/skills/narrative-refutation/SKILL.md +7 -10
  37. package/driver/stage-context.mjs +44 -3
  38. package/driver/stages.mjs +63 -7
  39. package/driver/suite-census.json +85 -13
  40. package/driver/verify.mjs +11 -1
  41. package/mcp-server/CHANGELOG.md +4 -0
  42. package/mcp-server/package.json +1 -1
  43. package/node_modules/@isaacs/nonrecursive-glob-match/LICENSE.md +55 -0
  44. package/node_modules/@isaacs/nonrecursive-glob-match/README.md +333 -0
  45. package/node_modules/@isaacs/nonrecursive-glob-match/dist/commonjs/index.d.ts +114 -0
  46. package/node_modules/@isaacs/nonrecursive-glob-match/dist/commonjs/index.d.ts.map +1 -0
  47. package/node_modules/@isaacs/nonrecursive-glob-match/dist/commonjs/index.js +762 -0
  48. package/node_modules/@isaacs/nonrecursive-glob-match/dist/commonjs/index.js.map +1 -0
  49. package/node_modules/@isaacs/nonrecursive-glob-match/dist/commonjs/index.min.js +3 -0
  50. package/node_modules/@isaacs/nonrecursive-glob-match/dist/commonjs/index.min.js.map +7 -0
  51. package/node_modules/@isaacs/nonrecursive-glob-match/dist/commonjs/package.json +3 -0
  52. package/node_modules/@isaacs/nonrecursive-glob-match/dist/commonjs/parse-class.d.ts +4 -0
  53. package/node_modules/@isaacs/nonrecursive-glob-match/dist/commonjs/parse-class.d.ts.map +1 -0
  54. package/node_modules/@isaacs/nonrecursive-glob-match/dist/commonjs/parse-class.js +142 -0
  55. package/node_modules/@isaacs/nonrecursive-glob-match/dist/commonjs/parse-class.js.map +1 -0
  56. package/node_modules/@isaacs/nonrecursive-glob-match/dist/esm/index.d.ts +114 -0
  57. package/node_modules/@isaacs/nonrecursive-glob-match/dist/esm/index.d.ts.map +1 -0
  58. package/node_modules/@isaacs/nonrecursive-glob-match/dist/esm/index.js +758 -0
  59. package/node_modules/@isaacs/nonrecursive-glob-match/dist/esm/index.js.map +1 -0
  60. package/node_modules/@isaacs/nonrecursive-glob-match/dist/esm/index.min.js +3 -0
  61. package/node_modules/@isaacs/nonrecursive-glob-match/dist/esm/index.min.js.map +7 -0
  62. package/node_modules/@isaacs/nonrecursive-glob-match/dist/esm/package.json +3 -0
  63. package/node_modules/@isaacs/nonrecursive-glob-match/dist/esm/parse-class.d.ts +4 -0
  64. package/node_modules/@isaacs/nonrecursive-glob-match/dist/esm/parse-class.d.ts.map +1 -0
  65. package/node_modules/@isaacs/nonrecursive-glob-match/dist/esm/parse-class.js +138 -0
  66. package/node_modules/@isaacs/nonrecursive-glob-match/dist/esm/parse-class.js.map +1 -0
  67. package/node_modules/@isaacs/nonrecursive-glob-match/package.json +56 -0
  68. package/node_modules/@isaacs/nonrecursive-glob-match/src/index.ts +900 -0
  69. package/node_modules/@isaacs/nonrecursive-glob-match/src/parse-class.ts +158 -0
  70. package/node_modules/balanced-match/LICENSE.md +3 -1
  71. package/node_modules/balanced-match/README.md +15 -55
  72. package/node_modules/balanced-match/dist/commonjs/index.d.ts +9 -0
  73. package/node_modules/balanced-match/dist/commonjs/index.d.ts.map +1 -0
  74. package/node_modules/balanced-match/dist/commonjs/index.js +59 -0
  75. package/node_modules/balanced-match/dist/commonjs/index.js.map +1 -0
  76. package/node_modules/balanced-match/dist/commonjs/package.json +3 -0
  77. package/node_modules/balanced-match/dist/esm/index.d.ts +9 -0
  78. package/node_modules/balanced-match/dist/esm/index.d.ts.map +1 -0
  79. package/node_modules/balanced-match/dist/esm/index.js +54 -0
  80. package/node_modules/balanced-match/dist/esm/index.js.map +1 -0
  81. package/node_modules/balanced-match/dist/esm/package.json +3 -0
  82. package/node_modules/balanced-match/package.json +48 -28
  83. package/node_modules/brace-expansion/LICENSE +3 -1
  84. package/node_modules/brace-expansion/README.md +10 -56
  85. package/node_modules/brace-expansion/dist/commonjs/index.d.ts +12 -0
  86. package/node_modules/brace-expansion/dist/commonjs/index.d.ts.map +1 -0
  87. package/node_modules/brace-expansion/dist/commonjs/index.js +333 -0
  88. package/node_modules/brace-expansion/dist/commonjs/index.js.map +1 -0
  89. package/node_modules/brace-expansion/dist/commonjs/package.json +3 -0
  90. package/node_modules/brace-expansion/dist/esm/index.d.ts +12 -0
  91. package/node_modules/brace-expansion/dist/esm/index.d.ts.map +1 -0
  92. package/node_modules/brace-expansion/dist/esm/index.js +329 -0
  93. package/node_modules/brace-expansion/dist/esm/index.js.map +1 -0
  94. package/node_modules/brace-expansion/dist/esm/package.json +3 -0
  95. package/node_modules/brace-expansion/package.json +52 -37
  96. package/node_modules/minimatch/LICENSE.md +55 -0
  97. package/node_modules/minimatch/README.md +388 -109
  98. package/node_modules/minimatch/dist/commonjs/assert-valid-pattern.d.ts +2 -0
  99. package/node_modules/minimatch/dist/commonjs/assert-valid-pattern.d.ts.map +1 -0
  100. package/node_modules/minimatch/dist/commonjs/assert-valid-pattern.js +14 -0
  101. package/node_modules/minimatch/dist/commonjs/assert-valid-pattern.js.map +1 -0
  102. package/node_modules/minimatch/dist/commonjs/escape.d.ts +15 -0
  103. package/node_modules/minimatch/dist/commonjs/escape.d.ts.map +1 -0
  104. package/node_modules/minimatch/dist/commonjs/escape.js +30 -0
  105. package/node_modules/minimatch/dist/commonjs/escape.js.map +1 -0
  106. package/node_modules/minimatch/dist/commonjs/index.d.ts +185 -0
  107. package/node_modules/minimatch/dist/commonjs/index.d.ts.map +1 -0
  108. package/node_modules/minimatch/dist/commonjs/index.js +1550 -0
  109. package/node_modules/minimatch/dist/commonjs/index.js.map +1 -0
  110. package/node_modules/minimatch/dist/commonjs/package.json +3 -0
  111. package/node_modules/minimatch/dist/commonjs/unescape.d.ts +22 -0
  112. package/node_modules/minimatch/dist/commonjs/unescape.d.ts.map +1 -0
  113. package/node_modules/minimatch/dist/commonjs/unescape.js +38 -0
  114. package/node_modules/minimatch/dist/commonjs/unescape.js.map +1 -0
  115. package/node_modules/minimatch/dist/esm/assert-valid-pattern.d.ts +2 -0
  116. package/node_modules/minimatch/dist/esm/assert-valid-pattern.d.ts.map +1 -0
  117. package/node_modules/minimatch/dist/esm/assert-valid-pattern.js +10 -0
  118. package/node_modules/minimatch/dist/esm/assert-valid-pattern.js.map +1 -0
  119. package/node_modules/minimatch/dist/esm/escape.d.ts +15 -0
  120. package/node_modules/minimatch/dist/esm/escape.d.ts.map +1 -0
  121. package/node_modules/minimatch/dist/esm/escape.js +26 -0
  122. package/node_modules/minimatch/dist/esm/escape.js.map +1 -0
  123. package/node_modules/minimatch/dist/esm/index.d.ts +185 -0
  124. package/node_modules/minimatch/dist/esm/index.d.ts.map +1 -0
  125. package/node_modules/minimatch/dist/esm/index.js +1539 -0
  126. package/node_modules/minimatch/dist/esm/index.js.map +1 -0
  127. package/node_modules/minimatch/dist/esm/package.json +3 -0
  128. package/node_modules/minimatch/dist/esm/unescape.d.ts +22 -0
  129. package/node_modules/minimatch/dist/esm/unescape.d.ts.map +1 -0
  130. package/node_modules/minimatch/dist/esm/unescape.js +34 -0
  131. package/node_modules/minimatch/dist/esm/unescape.js.map +1 -0
  132. package/node_modules/minimatch/package.json +58 -17
  133. package/package.json +1 -1
  134. package/portal-ui/package.json +1 -1
  135. package/providers/_shared/execute-plan.mjs +22 -2
  136. package/providers/clarivate/src/core.js +13 -3
  137. package/providers/euipo/src/core.js +3 -2
  138. package/providers/oauth-mcp-bridge/CHANGELOG.md +4 -0
  139. package/providers/oauth-mcp-bridge/package.json +1 -1
  140. package/scripts/e2e-first-time.mjs +1 -1
  141. package/scripts/freeze-example-run.mjs +6 -6
  142. package/scripts/release-notes-lint.mjs +5 -3
  143. package/scripts/third-party-notices.mjs +12 -0
  144. package/node_modules/balanced-match/.github/FUNDING.yml +0 -2
  145. package/node_modules/balanced-match/index.js +0 -62
  146. package/node_modules/brace-expansion/index.js +0 -438
  147. package/node_modules/concat-map/.travis.yml +0 -4
  148. package/node_modules/concat-map/LICENSE +0 -18
  149. package/node_modules/concat-map/README.markdown +0 -62
  150. package/node_modules/concat-map/example/map.js +0 -6
  151. package/node_modules/concat-map/index.js +0 -13
  152. package/node_modules/concat-map/package.json +0 -43
  153. package/node_modules/concat-map/test/map.js +0 -39
  154. package/node_modules/minimatch/LICENSE +0 -15
  155. package/node_modules/minimatch/minimatch.js +0 -1005
  156. package/node_modules/readdir-glob/node_modules/brace-expansion/.github/FUNDING.yml +0 -2
  157. package/node_modules/readdir-glob/node_modules/brace-expansion/LICENSE +0 -21
  158. package/node_modules/readdir-glob/node_modules/brace-expansion/README.md +0 -157
  159. package/node_modules/readdir-glob/node_modules/brace-expansion/index.js +0 -394
  160. package/node_modules/readdir-glob/node_modules/brace-expansion/package.json +0 -49
  161. package/node_modules/readdir-glob/node_modules/minimatch/LICENSE +0 -15
  162. package/node_modules/readdir-glob/node_modules/minimatch/README.md +0 -296
  163. package/node_modules/readdir-glob/node_modules/minimatch/lib/path.js +0 -4
  164. package/node_modules/readdir-glob/node_modules/minimatch/minimatch.js +0 -996
  165. package/node_modules/readdir-glob/node_modules/minimatch/package.json +0 -35
@@ -9,7 +9,7 @@ file rather than a courtesy.
9
9
  production tree; `--check` fails when it no longer matches. Development dependencies are excluded:
10
10
  they are not distributed, so they carry no obligation for anyone who installs this.
11
11
 
12
- 178 packages.
12
+ 176 packages.
13
13
 
14
14
  > **Declared but NOT INSTALLED, so not distributed and not attributed below:** `@cfworker/json-schema`.
15
15
  > npm lists these with no version and no path — an unmet or optional peer. Recorded because a name
@@ -110,6 +110,69 @@ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
110
110
  SOFTWARE.
111
111
  ```
112
112
 
113
+ ## @isaacs/nonrecursive-glob-match@1.0.3
114
+
115
+ - **Licence declared:** `BlueOak-1.0.0`
116
+ - **Licence file:** `LICENSE.md`
117
+
118
+ ```
119
+ # Blue Oak Model License
120
+
121
+ Version 1.0.0
122
+
123
+ ## Purpose
124
+
125
+ This license gives everyone as much permission to work with
126
+ this software as possible, while protecting contributors
127
+ from liability.
128
+
129
+ ## Acceptance
130
+
131
+ In order to receive this license, you must agree to its
132
+ rules. The rules of this license are both obligations
133
+ under that agreement and conditions to your license.
134
+ You must not do anything with this software that triggers
135
+ a rule that you cannot or will not follow.
136
+
137
+ ## Copyright
138
+
139
+ Each contributor licenses you to do everything with this
140
+ software that would otherwise infringe that contributor's
141
+ copyright in it.
142
+
143
+ ## Notices
144
+
145
+ You must ensure that everyone who gets a copy of
146
+ any part of this software from you, with or without
147
+ changes, also gets the text of this license or a link to
148
+ <https://blueoakcouncil.org/license/1.0.0>.
149
+
150
+ ## Excuse
151
+
152
+ If anyone notifies you in writing that you have not
153
+ complied with [Notices](#notices), you can keep your
154
+ license by taking all practical steps to comply within 30
155
+ days after the notice. If you do not do so, your license
156
+ ends immediately.
157
+
158
+ ## Patent
159
+
160
+ Each contributor licenses you to do everything with this
161
+ software that would otherwise infringe any patent claims
162
+ they can license or become able to license.
163
+
164
+ ## Reliability
165
+
166
+ No contributor can revoke this license.
167
+
168
+ ## No Liability
169
+
170
+ ***As far as the law allows, this software comes as is,
171
+ without any warranty or condition, and no contributor
172
+ will be liable to anyone for any damages related to this
173
+ software or this license, under any kind of legal claim.***
174
+ ```
175
+
113
176
  ## @modelcontextprotocol/sdk@1.32.1
114
177
 
115
178
  - **Licence declared:** `MIT`
@@ -383,7 +446,7 @@ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
383
446
  THE SOFTWARE.
384
447
  ```
385
448
 
386
- ## balanced-match@1.0.2
449
+ ## balanced-match@4.0.4
387
450
 
388
451
  - **Licence declared:** `MIT`
389
452
  - **Repository:** git://github.com/juliangruber/balanced-match
@@ -392,7 +455,9 @@ THE SOFTWARE.
392
455
  ```
393
456
  (MIT)
394
457
 
395
- Copyright (c) 2013 Julian Gruber &lt;julian@juliangruber.com&gt;
458
+ Original code Copyright Julian Gruber <julian@juliangruber.com>
459
+
460
+ Port to TypeScript Copyright Isaac Z. Schlueter <i@izs.me>
396
461
 
397
462
  Permission is hereby granted, free of charge, to any person obtaining a copy of
398
463
  this software and associated documentation files (the "Software"), to deal in
@@ -566,46 +631,18 @@ TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
566
631
  SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
567
632
  ```
568
633
 
569
- ## brace-expansion@1.1.21
634
+ ## brace-expansion@5.0.12
570
635
 
571
636
  - **Licence declared:** `MIT`
572
- - **Repository:** git://github.com/juliangruber/brace-expansion
637
+ - **Repository:** https://github.com/juliangruber/brace-expansion
573
638
  - **Licence file:** `LICENSE`
574
639
 
575
640
  ```
576
641
  MIT License
577
642
 
578
- Copyright (c) 2013 Julian Gruber <julian@juliangruber.com>
643
+ Copyright Julian Gruber <julian@juliangruber.com>
579
644
 
580
- Permission is hereby granted, free of charge, to any person obtaining a copy
581
- of this software and associated documentation files (the "Software"), to deal
582
- in the Software without restriction, including without limitation the rights
583
- to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
584
- copies of the Software, and to permit persons to whom the Software is
585
- furnished to do so, subject to the following conditions:
586
-
587
- The above copyright notice and this permission notice shall be included in all
588
- copies or substantial portions of the Software.
589
-
590
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
591
- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
592
- FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
593
- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
594
- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
595
- OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
596
- SOFTWARE.
597
- ```
598
-
599
- ## brace-expansion@2.1.7
600
-
601
- - **Licence declared:** `MIT`
602
- - **Repository:** git://github.com/juliangruber/brace-expansion
603
- - **Licence file:** `LICENSE`
604
-
605
- ```
606
- MIT License
607
-
608
- Copyright (c) 2013 Julian Gruber <julian@juliangruber.com>
645
+ TypeScript port Copyright Isaac Z. Schlueter <i@izs.me>
609
646
 
610
647
  Permission is hereby granted, free of charge, to any person obtaining a copy
611
648
  of this software and associated documentation files (the "Software"), to deal
@@ -843,33 +880,6 @@ FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
843
880
  OTHER DEALINGS IN THE SOFTWARE.
844
881
  ```
845
882
 
846
- ## concat-map@0.0.1
847
-
848
- - **Licence declared:** `MIT`
849
- - **Repository:** git://github.com/substack/node-concat-map
850
- - **Licence file:** `LICENSE`
851
-
852
- ```
853
- This software is released under the MIT license:
854
-
855
- Permission is hereby granted, free of charge, to any person obtaining a copy of
856
- this software and associated documentation files (the "Software"), to deal in
857
- the Software without restriction, including without limitation the rights to
858
- use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
859
- the Software, and to permit persons to whom the Software is furnished to do so,
860
- subject to the following conditions:
861
-
862
- The above copyright notice and this permission notice shall be included in all
863
- copies or substantial portions of the Software.
864
-
865
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
866
- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
867
- FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
868
- COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
869
- IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
870
- CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
871
- ```
872
-
873
883
  ## content-disposition@1.1.0
874
884
 
875
885
  - **Licence declared:** `MIT`
@@ -4415,52 +4425,68 @@ TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
4415
4425
  SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
4416
4426
  ```
4417
4427
 
4418
- ## minimatch@3.1.5
4428
+ ## minimatch@11.0.3
4419
4429
 
4420
- - **Licence declared:** `ISC`
4421
- - **Repository:** git://github.com/isaacs/minimatch
4422
- - **Licence file:** `LICENSE`
4430
+ - **Licence declared:** `BlueOak-1.0.0`
4431
+ - **Repository:** git@github.com:isaacs/minimatch
4432
+ - **Licence file:** `LICENSE.md`
4423
4433
 
4424
4434
  ```
4425
- The ISC License
4435
+ # Blue Oak Model License
4426
4436
 
4427
- Copyright (c) Isaac Z. Schlueter and Contributors
4437
+ Version 1.0.0
4428
4438
 
4429
- Permission to use, copy, modify, and/or distribute this software for any
4430
- purpose with or without fee is hereby granted, provided that the above
4431
- copyright notice and this permission notice appear in all copies.
4439
+ ## Purpose
4432
4440
 
4433
- THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
4434
- WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
4435
- MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
4436
- ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
4437
- WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
4438
- ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR
4439
- IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
4440
- ```
4441
+ This license gives everyone as much permission to work with
4442
+ this software as possible, while protecting contributors
4443
+ from liability.
4441
4444
 
4442
- ## minimatch@5.1.9
4445
+ ## Acceptance
4443
4446
 
4444
- - **Licence declared:** `ISC`
4445
- - **Repository:** git://github.com/isaacs/minimatch
4446
- - **Licence file:** `LICENSE`
4447
+ In order to receive this license, you must agree to its
4448
+ rules. The rules of this license are both obligations
4449
+ under that agreement and conditions to your license.
4450
+ You must not do anything with this software that triggers
4451
+ a rule that you cannot or will not follow.
4447
4452
 
4448
- ```
4449
- The ISC License
4453
+ ## Copyright
4450
4454
 
4451
- Copyright (c) Isaac Z. Schlueter and Contributors
4455
+ Each contributor licenses you to do everything with this
4456
+ software that would otherwise infringe that contributor's
4457
+ copyright in it.
4452
4458
 
4453
- Permission to use, copy, modify, and/or distribute this software for any
4454
- purpose with or without fee is hereby granted, provided that the above
4455
- copyright notice and this permission notice appear in all copies.
4459
+ ## Notices
4456
4460
 
4457
- THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
4458
- WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
4459
- MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
4460
- ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
4461
- WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
4462
- ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR
4463
- IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
4461
+ You must ensure that everyone who gets a copy of
4462
+ any part of this software from you, with or without
4463
+ changes, also gets the text of this license or a link to
4464
+ <https://blueoakcouncil.org/license/1.0.0>.
4465
+
4466
+ ## Excuse
4467
+
4468
+ If anyone notifies you in writing that you have not
4469
+ complied with [Notices](#notices), you can keep your
4470
+ license by taking all practical steps to comply within 30
4471
+ days after the notice. If you do not do so, your license
4472
+ ends immediately.
4473
+
4474
+ ## Patent
4475
+
4476
+ Each contributor licenses you to do everything with this
4477
+ software that would otherwise infringe any patent claims
4478
+ they can license or become able to license.
4479
+
4480
+ ## Reliability
4481
+
4482
+ No contributor can revoke this license.
4483
+
4484
+ ## No Liability
4485
+
4486
+ **_As far as the law allows, this software comes as is,
4487
+ without any warranty or condition, and no contributor
4488
+ will be liable to anyone for any damages related to this
4489
+ software or this license, under any kind of legal claim._**
4464
4490
  ```
4465
4491
 
4466
4492
  ## minimist@1.2.8
package/build-info.json CHANGED
@@ -1,4 +1,4 @@
1
1
  {
2
- "commit": "c4d6c8b42431a476839b819ac5181e09fb6c1cf1",
3
- "version": "0.5.0-beta.6"
2
+ "commit": "918c71c56484cf580cd12b2722b71f1ec54e873d",
3
+ "version": "0.5.0-beta.7"
4
4
  }
@@ -78,7 +78,7 @@ does after the stage's full retry ladder fails ([03 §5](03-run-lifecycle.md#5--
78
78
  | 3 | `blind-frame` | opus · high | 600 / 450 | `blind-frame-model.json` (strict-parsed; the prose twin was retired 2026-08-03 — nothing read it) | non-fatal (frame-diff skipped this run) |
79
79
  | 4 | `common-law` | haiku · low | 2250 / 1100 | `common-law-findings.md` (+ grid ledger, plugin-written) | fatal at fan-in |
80
80
  | 5 | `common-law-half` | per seat: `COMMON_LAW_SEAT_TIER` — halves `a`/`b` haiku · low; meaning seat `m` `CLEAROTRON_MEANING_SEAT_MODEL` \|\| haiku · low | 2250 / 1100 | `common-law-findings.half-{a,b,m}.md` (+ per-seat grid ledgers) | fatal at fan-in; one-half transient quarantine allowed |
81
- | 6 | `register-unit` | per axis: `saturation-probe` haiku · off; sweeps sonnet · adaptive | 1500 / 1100 | `register-units/<axis>.md` + `<axis>-band.json` (plan mode: tool-written, qid-stamped) | fatal at fan-in (after band-vocabulary quarantine / collapsed-band repair) |
81
+ | 6 | `register-unit` | per axis: `primary-sweep` opus · adaptive (`PRIMARY_SWEEP_TIER`, from 2026-10-30); `transliteration-numeric` and `incumbent-class` sonnet · adaptive; `saturation-probe` haiku · off | 1500 / 1100 | `register-units/<axis>.md` + `<axis>-band.json` (plan mode: tool-written, qid-stamped) | fatal at fan-in (after band-vocabulary quarantine / collapsed-band repair) |
82
82
  | 7 | `placement-inquiry` | opus · high | 2700 / 600 | `placement-recommendations.md` | fatal |
83
83
  | 8 | `register-digest` | opus · **low** (was high until 2026-08-01 — 3.49× wall/output against a 1.03× fixed-effort control, with no detectable effect on which records it tiers; override an arm with `CLEAROTRON_STAGE_THINKING`) | 2400 / 900 | `register-findings.md` (coverage-ledger JSON is code-derived from its prose) | fatal (every digest pass) |
84
84
  | 9 | `skeptic` | sonnet · high | 600 / 600 | `skeptic-flags.md` (verbatim `ESCALATE: <axis>` lines) | non-fatal (no escalation on failure) |
@@ -1,5 +1,16 @@
1
1
  # clearotron-driver
2
2
 
3
+ ## 0.5.0-beta.7
4
+
5
+ ### Patch Changes
6
+
7
+ - Fixed: When deciding whether a wider register search is worth running, the engine now uses its strongest model, so a conflict found only by a wider search is no longer skipped.
8
+ - Fixed: A search the register refused is now recorded with the register's own reason, and a search the engine itself declined to send is no longer reported as a register error.
9
+ - Fixed: A run repaired after a failure now keeps the original order, including who sent it and their instructions, instead of rebuilding a partial one.
10
+ - Fixed: An overview that cites a finding no longer in the report is now sent back for correction before delivery, and flagged for the reviewing lawyer if the citation remains.
11
+ - Fixed: The audit now states in plain words why each unsearched question was not carried out.
12
+ - Fixed: The reviewing step now sees every conflict the writer set aside, with the writer's reason, and can send one back for correction.
13
+
3
14
  ## 0.5.0-beta.6
4
15
 
5
16
  ### Patch Changes
@@ -0,0 +1,139 @@
1
+ // SPDX-License-Identifier: AGPL-3.0-only
2
+ // Copyright 2026 Cordillera Sàrl. Additional terms under section 7 of the AGPL-3.0 apply — see ADDITIONAL-TERMS.md
3
+ //
4
+ // accepted-order.mjs — the order a run was accepted on, kept with the run from intake, and the job a resume or a
5
+ // stage replay rebuilds from it.
6
+ //
7
+ // THE DEFECT. The queue entry carrying an order is consumed when its run starts, and the run kept only what status.json
8
+ // and the instructed scope hold: its identity, the marks by name, the goods, the applicant and the territories. A run
9
+ // repaired with `--resume` was rebuilt without the order's delivery routing, so its delivery packet named no forwarder
10
+ // address and no message to answer, and a stage replayed with `--experiment` lost the stated use, the campaign facts and
11
+ // the requester's instructions. A run that failed before delivering keeps the routing nowhere else, and that is the run
12
+ // a resume repairs.
13
+ //
14
+ // SO THE RUN KEEPS ITS ORDER WHOLE, at intake, before any stage can fail: `_driver/accepted-order.json`, written once and
15
+ // never rewritten. A resume or replay that is given no job file reconstructs the order from it. An order given again
16
+ // explicitly, by a resume with `--job`, that differs from the original is kept beside it as an amendment; the original
17
+ // stays. The file is private run data like the rest of the run directory. No stage's context lists it: no model needs
18
+ // the routing.
19
+ //
20
+ // AN OLDER RUN HAS NO SUCH FILE. For it the order is taken from the run's own queue entry where that survives, matched
21
+ // by the order's id and checked against the run's frozen scope and account: a conflict refuses the queue entry whole,
22
+ // never field by field. Taken from there, it is kept as the run's accepted order, so the run no longer depends on the
23
+ // queue entry. Where neither survives, the job is rebuilt from status as before, and the fields only the order held are
24
+ // named as unrecovered, internally: nothing is invented in their place, no address is borrowed from the account or
25
+ // another order, and a replay on such a job is not a faithful one.
26
+
27
+ import { existsSync, readFileSync, appendFileSync } from "node:fs";
28
+ import { join } from "node:path";
29
+ import { driverDir, ensureDriverDir } from "../shared/driver-dir.mjs";
30
+ import { atomicWrite } from "./progress.mjs";
31
+
32
+ export const ACCEPTED_ORDER_FILE = "accepted-order.json";
33
+ export const ORDER_AMENDMENTS_FILE = "order-amendments.jsonl";
34
+ export const ORDER_RECOVERY_FILE = "order-recovery.json";
35
+
36
+ /** The fields only the order holds: what a rebuild from status cannot say. Each mark entry's own `ref` and `classes`
37
+ * are named as `marks[].ref` and `marks[].classes`. */
38
+ export const ORDER_ONLY_FIELDS = Object.freeze(["forwarderEmail", "msgId", "conversationId", "clientPrincipal",
39
+ "priorUse", "campaignShape", "upfrontInstructions", "marks[].ref", "marks[].classes"]);
40
+
41
+ /** A copy of the order as it was accepted, untouched by anything the run does to its job later. null for no order. PURE. */
42
+ export function orderSnapshot(job) {
43
+ if (!job || typeof job !== "object" || Array.isArray(job)) return null;
44
+ try { return JSON.parse(JSON.stringify(job)); } catch { return null; }
45
+ }
46
+
47
+ const readJson = (file) => { try { return existsSync(file) ? JSON.parse(readFileSync(file, "utf8")) : null; } catch { return null; } };
48
+ const same = (a, b) => JSON.stringify(a) === JSON.stringify(b);
49
+
50
+ /** The order this run was accepted on, or null when the run holds none (an older run, or an unreadable file). */
51
+ export function readAcceptedOrder(runDir) {
52
+ const rec = readJson(driverDir(String(runDir ?? ""), ACCEPTED_ORDER_FILE));
53
+ return rec?.order && typeof rec.order === "object" ? rec.order : null;
54
+ }
55
+
56
+ /**
57
+ * Keep the order with the run. The first order a run is given is written and never rewritten. A later order changes
58
+ * nothing unless it was given explicitly (`explicit`, a job file on a resume) and differs from the original and from
59
+ * the last amendment; then it is appended as an amendment. A job rebuilt by this run's own resume is never kept as the
60
+ * accepted order (`rebuilt`): a reconstruction is not the order. `from` names where a written order came from.
61
+ * Returns what it did: "written", "amended", "kept", or "not-kept".
62
+ */
63
+ export function retainAcceptedOrder(runDir, order, { explicit = false, rebuilt = false, from = "intake", now = () => new Date().toISOString() } = {}) {
64
+ if (!runDir || !order) return "not-kept";
65
+ const file = driverDir(runDir, ACCEPTED_ORDER_FILE);
66
+ const original = readAcceptedOrder(runDir);
67
+ if (!original) {
68
+ if (rebuilt || existsSync(file)) return "not-kept"; // an unreadable file is the run's record still: never replaced
69
+ ensureDriverDir(runDir);
70
+ atomicWrite(file, JSON.stringify({ ts: now(), from, order }, null, 2) + "\n");
71
+ return "written";
72
+ }
73
+ if (!explicit || rebuilt || same(order, original)) return "kept";
74
+ const amendments = driverDir(runDir, ORDER_AMENDMENTS_FILE);
75
+ let last = null;
76
+ try { last = readFileSync(amendments, "utf8").split("\n").filter(Boolean).map((l) => JSON.parse(l)).pop()?.order ?? null; } catch { /* none yet */ }
77
+ if (last && same(order, last)) return "kept";
78
+ appendFileSync(amendments, JSON.stringify({ ts: now(), order }) + "\n");
79
+ return "amended";
80
+ }
81
+
82
+ /** The run's retained queue entry for order `id`: a finished one (`.done`) or a failed one (`.failed`). null when
83
+ * neither survives or it does not hold that order. */
84
+ export function retainedQueueOrder(queueDir, id) {
85
+ if (!queueDir || !id || /[\\/]/.test(String(id))) return null;
86
+ for (const end of [".done", ".failed"]) {
87
+ const order = readJson(join(queueDir, `${id}${end}`));
88
+ if (order && typeof order === "object" && order.id === id) return order;
89
+ }
90
+ return null;
91
+ }
92
+
93
+ /**
94
+ * Why a retained queue entry is not this run's order, or null when it agrees with everything the run froze of its
95
+ * order: its identity in status, its instructed scope (read through `scopeOf`, the run's own reading of a job), and the
96
+ * account in its frozen profile where the order named one. PURE.
97
+ */
98
+ export function queueOrderConflict(order, { status = null, scope = null, profile = null, scopeOf } = {}) {
99
+ for (const k of ["id", "ref", "markName"])
100
+ if (status?.[k] != null && order?.[k] != null && String(status[k]) !== String(order[k])) return `its ${k} differs from the run's`;
101
+ if (scope && typeof scopeOf === "function") {
102
+ const theirs = scopeOf(order);
103
+ for (const k of ["marks", "classes", "jurisdictions", "goods", "customer"])
104
+ if (!same(theirs?.[k] ?? null, scope?.[k] ?? null)) return `its ${k === "customer" ? "applicant" : k} differs from the run's instructed scope`;
105
+ }
106
+ if (typeof order?.profileKey === "string" && order.profileKey && typeof profile?.profileKey === "string" && profile.profileKey
107
+ && order.profileKey !== profile.profileKey) return "its account differs from the run's frozen profile";
108
+ return null;
109
+ }
110
+
111
+ /**
112
+ * The job a resume or replay given no job file runs on, and where it came from:
113
+ * - "accepted-order": the order the run kept at intake, whole;
114
+ * - "queue-order": an older run's retained queue entry, matched and checked, then kept as the run's accepted order;
115
+ * - "status": neither survives, or the queue entry conflicts; the job is `fromStatus()`, and `unrecovered` names the
116
+ * fields only the order held.
117
+ * `conflict` says why a queue entry was refused. A resume (`write`) records the answer in `_driver/order-recovery.json`,
118
+ * field names and never values, and keeps a matched queue entry as the run's order; a stage replay writes nothing into
119
+ * the run it studies, and its receipt carries the answer instead.
120
+ */
121
+ export function rebuildRunOrder({ runDir, status = null, scope = null, profile = null, queueDir = null, scopeOf, fromStatus, write = true, now = () => new Date().toISOString() }) {
122
+ let out;
123
+ const accepted = readAcceptedOrder(runDir);
124
+ if (accepted) out = { job: accepted, source: "accepted-order", unrecovered: [], conflict: null };
125
+ else {
126
+ const queued = retainedQueueOrder(queueDir, status?.id);
127
+ const conflict = queued ? queueOrderConflict(queued, { status, scope, profile, scopeOf }) : null;
128
+ if (queued && !conflict) {
129
+ if (write) retainAcceptedOrder(runDir, orderSnapshot(queued), { from: "queue-order", now });
130
+ out = { job: queued, source: "queue-order", unrecovered: [], conflict: null };
131
+ } else out = { job: fromStatus(), source: "status", unrecovered: [...ORDER_ONLY_FIELDS], conflict };
132
+ }
133
+ if (write) try {
134
+ ensureDriverDir(runDir);
135
+ atomicWrite(driverDir(runDir, ORDER_RECOVERY_FILE), JSON.stringify({ ts: now(), source: out.source,
136
+ unrecovered: out.unrecovered, conflict: out.conflict, faithful: out.unrecovered.length === 0 }, null, 2) + "\n");
137
+ } catch { /* the caller says where the job came from either way */ }
138
+ return out;
139
+ }