@bastani/atomic 0.9.16-alpha.6 → 0.9.16-alpha.8

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 (214) hide show
  1. package/CHANGELOG.md +19 -0
  2. package/dist/builtin/intercom/CHANGELOG.md +6 -0
  3. package/dist/builtin/intercom/README.md +4 -4
  4. package/dist/builtin/intercom/broker/broker.ts +617 -22
  5. package/dist/builtin/intercom/broker/client-message-validation.ts +9 -0
  6. package/dist/builtin/intercom/broker/client.ts +200 -10
  7. package/dist/builtin/intercom/broker/pending-send-registry.ts +4 -0
  8. package/dist/builtin/intercom/broker/send-handler.ts +90 -36
  9. package/dist/builtin/intercom/broker/send-signature.ts +20 -8
  10. package/dist/builtin/intercom/group.ts +85 -0
  11. package/dist/builtin/intercom/index.bundle.mjs +680 -53
  12. package/dist/builtin/intercom/package.json +1 -1
  13. package/dist/builtin/intercom/session-target.ts +54 -0
  14. package/dist/builtin/intercom/skills/intercom/SKILL.md +18 -3
  15. package/dist/builtin/intercom/source-ownership.ts +31 -0
  16. package/dist/builtin/intercom/types.ts +115 -0
  17. package/dist/builtin/mcp/index.bundle.mjs +109 -35
  18. package/dist/builtin/mcp/package.json +1 -1
  19. package/dist/builtin/subagents/CHANGELOG.md +6 -0
  20. package/dist/builtin/subagents/package.json +1 -1
  21. package/dist/builtin/subagents/skills/qlty/SKILL.md +123 -0
  22. package/dist/builtin/subagents/skills/qlty/references/coding-with-ai-agents.md +64 -0
  23. package/dist/builtin/subagents/skills/qlty/references/commands.md +291 -0
  24. package/dist/builtin/subagents/skills/qlty/references/plugins-and-extensions.md +228 -0
  25. package/dist/builtin/subagents/skills/qlty/references/quickstart.md +110 -0
  26. package/dist/builtin/subagents/src/extension/index.bundle.mjs +173 -51
  27. package/dist/builtin/web-access/index.bundle.mjs +109 -35
  28. package/dist/builtin/web-access/package.json +1 -1
  29. package/dist/builtin/workflows/CHANGELOG.md +23 -0
  30. package/dist/builtin/workflows/README.md +40 -37
  31. package/dist/builtin/workflows/builtin/adversarial-verification.js +13 -0
  32. package/dist/builtin/workflows/builtin/{shared-prompts.ts → chunk-0x6e303p.js} +137 -133
  33. package/dist/builtin/workflows/builtin/chunk-29wrp38a.js +199 -0
  34. package/dist/builtin/workflows/builtin/chunk-2dqb5s2q.js +602 -0
  35. package/dist/builtin/workflows/builtin/chunk-4febxsv4.js +264 -0
  36. package/dist/builtin/workflows/builtin/chunk-5n10x7j2.js +69730 -0
  37. package/dist/builtin/workflows/builtin/chunk-5wgwscd0.js +4 -0
  38. package/dist/builtin/workflows/builtin/chunk-6fqs7c01.js +155 -0
  39. package/dist/builtin/workflows/builtin/chunk-7430zyas.js +126 -0
  40. package/dist/builtin/workflows/builtin/chunk-7at6dnkr.js +33 -0
  41. package/dist/builtin/workflows/builtin/chunk-82ha8p41.js +175 -0
  42. package/dist/builtin/workflows/builtin/chunk-bfkmzv9h.js +156 -0
  43. package/dist/builtin/workflows/builtin/chunk-c53y8bdh.js +345 -0
  44. package/dist/builtin/workflows/builtin/chunk-cdtd3m3w.js +529 -0
  45. package/dist/builtin/workflows/builtin/chunk-cg9tmks0.js +206 -0
  46. package/dist/builtin/workflows/builtin/chunk-hdpj1dkw.js +2447 -0
  47. package/dist/builtin/workflows/builtin/chunk-hzzn6adg.js +221 -0
  48. package/dist/builtin/workflows/builtin/chunk-nqr34qp3.js +1061 -0
  49. package/dist/builtin/workflows/builtin/chunk-qwzvgxnq.js +404 -0
  50. package/dist/builtin/workflows/builtin/chunk-qx2ptjs3.js +215 -0
  51. package/dist/builtin/workflows/builtin/chunk-v04c5qmd.js +1207 -0
  52. package/dist/builtin/workflows/builtin/chunk-wpckd35c.js +12 -0
  53. package/dist/builtin/workflows/builtin/chunk-x2ghn0je.js +4110 -0
  54. package/dist/builtin/workflows/builtin/chunk-zf28603f.js +1080 -0
  55. package/dist/builtin/workflows/builtin/classify-and-act.js +12 -0
  56. package/dist/builtin/workflows/builtin/fan-out-and-synthesize.js +10 -0
  57. package/dist/builtin/workflows/builtin/generate-and-filter.js +12 -0
  58. package/dist/builtin/workflows/builtin/goal.js +16 -0
  59. package/dist/builtin/workflows/builtin/index.js +49 -0
  60. package/dist/builtin/workflows/builtin/loop-until-done.js +12 -0
  61. package/dist/builtin/workflows/builtin/open-claude-design.js +11 -0
  62. package/dist/builtin/workflows/builtin/ralph.js +16 -0
  63. package/dist/builtin/workflows/builtin/steering-context.d.ts +6 -0
  64. package/dist/builtin/workflows/builtin/steering-context.js +7 -0
  65. package/dist/builtin/workflows/builtin/tournament.js +13 -0
  66. package/dist/builtin/workflows/package.json +10 -7
  67. package/dist/builtin/workflows/src/authoring/typebox-defaults.d.ts +41 -0
  68. package/dist/builtin/workflows/src/extension/index.bundle.mjs +1250 -428
  69. package/dist/builtin/workflows/src/{index.bundle.mjs → index.js} +956 -427
  70. package/dist/builtin/workflows/src/shared/authoring-contract-stage.d.ts +403 -0
  71. package/dist/builtin/workflows/src/shared/authoring-contract-ui.d.ts +327 -0
  72. package/dist/builtin/workflows/src/shared/budget.d.ts +67 -0
  73. package/dist/builtin/workflows/src/shared/workflow-authoring-types.d.ts +60 -0
  74. package/dist/builtin/workflows/src/shared/workflow-heartbeat-contract.d.ts +21 -0
  75. package/dist/core/agent-session-custom-message-commit.d.ts.map +1 -1
  76. package/dist/core/agent-session-custom-message-commit.js +12 -5
  77. package/dist/core/agent-session-custom-message-commit.js.map +1 -1
  78. package/dist/core/agent-session-persistent-custom-messages.d.ts.map +1 -1
  79. package/dist/core/agent-session-persistent-custom-messages.js +2 -0
  80. package/dist/core/agent-session-persistent-custom-messages.js.map +1 -1
  81. package/dist/core/agent-session.d.ts.map +1 -1
  82. package/dist/core/agent-session.js +2 -1
  83. package/dist/core/agent-session.js.map +1 -1
  84. package/dist/core/auth-storage.d.ts +2 -0
  85. package/dist/core/auth-storage.d.ts.map +1 -1
  86. package/dist/core/auth-storage.js +4 -0
  87. package/dist/core/auth-storage.js.map +1 -1
  88. package/dist/core/builtin-install-layout.d.ts +1 -1
  89. package/dist/core/builtin-install-layout.d.ts.map +1 -1
  90. package/dist/core/builtin-install-layout.js +1 -1
  91. package/dist/core/builtin-install-layout.js.map +1 -1
  92. package/dist/core/codex-fast-mode.d.ts +10 -7
  93. package/dist/core/codex-fast-mode.d.ts.map +1 -1
  94. package/dist/core/codex-fast-mode.js +31 -13
  95. package/dist/core/codex-fast-mode.js.map +1 -1
  96. package/dist/core/extensions/context-types.d.ts +35 -0
  97. package/dist/core/extensions/context-types.d.ts.map +1 -1
  98. package/dist/core/extensions/context-types.js.map +1 -1
  99. package/dist/core/extensions/index.d.ts +1 -1
  100. package/dist/core/extensions/index.d.ts.map +1 -1
  101. package/dist/core/extensions/index.js.map +1 -1
  102. package/dist/core/extensions/loader-virtual-modules.d.ts.map +1 -1
  103. package/dist/core/extensions/loader-virtual-modules.js +6 -1
  104. package/dist/core/extensions/loader-virtual-modules.js.map +1 -1
  105. package/dist/core/model-runtime.d.ts +2 -0
  106. package/dist/core/model-runtime.d.ts.map +1 -1
  107. package/dist/core/model-runtime.js +4 -0
  108. package/dist/core/model-runtime.js.map +1 -1
  109. package/dist/core/runtime-credentials.d.ts +1 -0
  110. package/dist/core/runtime-credentials.d.ts.map +1 -1
  111. package/dist/core/runtime-credentials.js +8 -0
  112. package/dist/core/runtime-credentials.js.map +1 -1
  113. package/dist/core/sdk.d.ts.map +1 -1
  114. package/dist/core/sdk.js +5 -5
  115. package/dist/core/sdk.js.map +1 -1
  116. package/dist/core/session-manager-storage.d.ts +2 -0
  117. package/dist/core/session-manager-storage.d.ts.map +1 -1
  118. package/dist/core/session-manager-storage.js +4 -2
  119. package/dist/core/session-manager-storage.js.map +1 -1
  120. package/dist/core/slash-commands.js +1 -1
  121. package/dist/core/slash-commands.js.map +1 -1
  122. package/dist/core/workflow-stage-admission.d.ts +6 -1
  123. package/dist/core/workflow-stage-admission.d.ts.map +1 -1
  124. package/dist/core/workflow-stage-admission.js +8 -9
  125. package/dist/core/workflow-stage-admission.js.map +1 -1
  126. package/dist/index.d.ts +0 -1
  127. package/dist/modes/interactive/components/footer.d.ts.map +1 -1
  128. package/dist/modes/interactive/components/footer.js +1 -1
  129. package/dist/modes/interactive/components/footer.js.map +1 -1
  130. package/dist/modes/interactive/interactive-autocomplete.js +1 -1
  131. package/dist/modes/interactive/interactive-autocomplete.js.map +1 -1
  132. package/dist/modes/interactive/interactive-startup.js +1 -1
  133. package/dist/modes/interactive/interactive-startup.js.map +1 -1
  134. package/dist/modes/interactive-engine/isolated-runtime.d.ts +4 -0
  135. package/dist/modes/interactive-engine/isolated-runtime.d.ts.map +1 -1
  136. package/dist/modes/interactive-engine/isolated-runtime.js +69 -10
  137. package/dist/modes/interactive-engine/isolated-runtime.js.map +1 -1
  138. package/dist/modes/rpc/rpc-client-api.d.ts +18 -2
  139. package/dist/modes/rpc/rpc-client-api.d.ts.map +1 -1
  140. package/dist/modes/rpc/rpc-client-api.js +33 -5
  141. package/dist/modes/rpc/rpc-client-api.js.map +1 -1
  142. package/dist/modes/rpc/rpc-command-handler.d.ts.map +1 -1
  143. package/dist/modes/rpc/rpc-command-handler.js +8 -4
  144. package/dist/modes/rpc/rpc-command-handler.js.map +1 -1
  145. package/dist/modes/rpc/rpc-types.d.ts +13 -0
  146. package/dist/modes/rpc/rpc-types.d.ts.map +1 -1
  147. package/dist/modes/rpc/rpc-types.js.map +1 -1
  148. package/docs/intercom.md +15 -6
  149. package/docs/packages.md +2 -2
  150. package/docs/providers.md +8 -3
  151. package/docs/quickstart.md +3 -2
  152. package/docs/rpc.md +21 -4
  153. package/docs/settings.md +6 -4
  154. package/docs/skills.md +4 -0
  155. package/docs/subagents.md +1 -1
  156. package/docs/usage.md +1 -1
  157. package/docs/workflows.md +112 -239
  158. package/npm-shrinkwrap.json +32 -32
  159. package/package.json +9 -13
  160. package/dist/builtin/workflows/ambient.d.ts +0 -61
  161. package/dist/builtin/workflows/builtin/adversarial-verification-prompts.ts +0 -26
  162. package/dist/builtin/workflows/builtin/adversarial-verification-runner.ts +0 -391
  163. package/dist/builtin/workflows/builtin/adversarial-verification.ts +0 -34
  164. package/dist/builtin/workflows/builtin/classify-and-act-prompts.ts +0 -14
  165. package/dist/builtin/workflows/builtin/classify-and-act-runner.ts +0 -108
  166. package/dist/builtin/workflows/builtin/classify-and-act.ts +0 -40
  167. package/dist/builtin/workflows/builtin/fan-out-and-synthesize-prompts.ts +0 -14
  168. package/dist/builtin/workflows/builtin/fan-out-and-synthesize-runner.ts +0 -96
  169. package/dist/builtin/workflows/builtin/fan-out-and-synthesize.ts +0 -37
  170. package/dist/builtin/workflows/builtin/generate-and-filter-prompts.ts +0 -41
  171. package/dist/builtin/workflows/builtin/generate-and-filter-runner.ts +0 -90
  172. package/dist/builtin/workflows/builtin/generate-and-filter.ts +0 -31
  173. package/dist/builtin/workflows/builtin/goal-artifacts.ts +0 -64
  174. package/dist/builtin/workflows/builtin/goal-convergence.ts +0 -87
  175. package/dist/builtin/workflows/builtin/goal-ledger.ts +0 -139
  176. package/dist/builtin/workflows/builtin/goal-models.ts +0 -72
  177. package/dist/builtin/workflows/builtin/goal-orchestrator-prompts.ts +0 -94
  178. package/dist/builtin/workflows/builtin/goal-prompts.ts +0 -211
  179. package/dist/builtin/workflows/builtin/goal-reducer.ts +0 -176
  180. package/dist/builtin/workflows/builtin/goal-reports.ts +0 -76
  181. package/dist/builtin/workflows/builtin/goal-reverify.ts +0 -305
  182. package/dist/builtin/workflows/builtin/goal-review.ts +0 -139
  183. package/dist/builtin/workflows/builtin/goal-runner.ts +0 -504
  184. package/dist/builtin/workflows/builtin/goal-schemas.ts +0 -89
  185. package/dist/builtin/workflows/builtin/goal-types.ts +0 -164
  186. package/dist/builtin/workflows/builtin/goal.ts +0 -78
  187. package/dist/builtin/workflows/builtin/index.ts +0 -16
  188. package/dist/builtin/workflows/builtin/loop-until-done-prompts.ts +0 -87
  189. package/dist/builtin/workflows/builtin/loop-until-done-runner.ts +0 -282
  190. package/dist/builtin/workflows/builtin/loop-until-done.ts +0 -51
  191. package/dist/builtin/workflows/builtin/open-claude-design-live-protocol.ts +0 -305
  192. package/dist/builtin/workflows/builtin/open-claude-design-phases.ts +0 -337
  193. package/dist/builtin/workflows/builtin/open-claude-design-runner.ts +0 -347
  194. package/dist/builtin/workflows/builtin/open-claude-design-setup.ts +0 -313
  195. package/dist/builtin/workflows/builtin/open-claude-design-utils.ts +0 -311
  196. package/dist/builtin/workflows/builtin/open-claude-design.ts +0 -57
  197. package/dist/builtin/workflows/builtin/pattern-artifact-root.ts +0 -28
  198. package/dist/builtin/workflows/builtin/progress-scoring.ts +0 -230
  199. package/dist/builtin/workflows/builtin/ralph-core.ts +0 -449
  200. package/dist/builtin/workflows/builtin/ralph-forked-prompts.ts +0 -100
  201. package/dist/builtin/workflows/builtin/ralph-models.ts +0 -183
  202. package/dist/builtin/workflows/builtin/ralph-review-gate.ts +0 -103
  203. package/dist/builtin/workflows/builtin/ralph-reviewer-prompt.ts +0 -100
  204. package/dist/builtin/workflows/builtin/ralph-runner.ts +0 -455
  205. package/dist/builtin/workflows/builtin/ralph.ts +0 -82
  206. package/dist/builtin/workflows/builtin/review-convergence.ts +0 -229
  207. package/dist/builtin/workflows/builtin/selection-math.ts +0 -156
  208. package/dist/builtin/workflows/builtin/steering-context.ts +0 -51
  209. package/dist/builtin/workflows/builtin/tournament-prompts.ts +0 -70
  210. package/dist/builtin/workflows/builtin/tournament-runner.ts +0 -400
  211. package/dist/builtin/workflows/builtin/tournament.ts +0 -73
  212. package/dist/builtin/workflows/builtin/verification-criteria.ts +0 -330
  213. package/dist/builtin/workflows/builtin/verification-prompts.ts +0 -206
  214. package/dist/builtin/workflows/builtin/verification-usage.ts +0 -44
@@ -0,0 +1,206 @@
1
+ // dist/builtin/workflows/builtin/verification-criteria.ts
2
+ import { Type } from "typebox";
3
+
4
+ class RubricError extends Error {
5
+ code;
6
+ constructor(message, code) {
7
+ super(message);
8
+ this.name = code;
9
+ this.code = code;
10
+ }
11
+ }
12
+
13
+ class NoCriteria extends RubricError {
14
+ constructor(message = "no criteria found — check the `## Criteria` section and its `### Name {#id}` headings") {
15
+ super(message, "NoCriteria");
16
+ this.name = "NoCriteria";
17
+ }
18
+ }
19
+
20
+ class EmptyCriterion extends RubricError {
21
+ ids;
22
+ constructor(ids) {
23
+ super(`criteria have empty instructions: ${ids.join(", ")}`, "EmptyCriterion");
24
+ this.name = "EmptyCriterion";
25
+ this.ids = ids;
26
+ }
27
+ }
28
+ var CRITERION_ID_ANCHOR = /^(.*?)\s*\{#([A-Za-z0-9_-]+)\}\s*$/;
29
+ var SLUG_MAX_LENGTH = 40;
30
+ function slug_id(text) {
31
+ const slug = text.toLowerCase().replace(/[^a-z0-9]+/g, "_").replace(/^_+|_+$/g, "");
32
+ return slug.slice(0, SLUG_MAX_LENGTH).replace(/_+$/g, "") || "criterion";
33
+ }
34
+ function dedup_id(cid, seen) {
35
+ let out = cid;
36
+ let n = 1;
37
+ while (seen.has(out)) {
38
+ n += 1;
39
+ out = `${cid}_${n}`;
40
+ }
41
+ seen.add(out);
42
+ return out;
43
+ }
44
+ function criterion(id, name, description) {
45
+ return { id, name, description };
46
+ }
47
+ function strip_html_comments(markdown) {
48
+ let sanitized = markdown;
49
+ while (true) {
50
+ const opener = sanitized.indexOf("<!--");
51
+ if (opener === -1)
52
+ return sanitized;
53
+ const closer = sanitized.indexOf("-->", opener + 4);
54
+ if (closer === -1)
55
+ return sanitized.slice(0, opener);
56
+ sanitized = sanitized.slice(0, opener) + sanitized.slice(closer + 3);
57
+ }
58
+ }
59
+ function parse_rubric(markdown) {
60
+ const lines = strip_html_comments(markdown).split(/\r?\n/);
61
+ let groundTruthNote = "";
62
+ let seenGroundTruth = false;
63
+ const criteria = [];
64
+ const seen = new Set;
65
+ let section = null;
66
+ let currentName = null;
67
+ let currentId = null;
68
+ let buf = [];
69
+ const flush = () => {
70
+ const text = buf.join(`
71
+ `).trim();
72
+ buf = [];
73
+ if (section === "ground_truth") {
74
+ if (!seenGroundTruth) {
75
+ groundTruthNote = text;
76
+ seenGroundTruth = true;
77
+ }
78
+ return;
79
+ }
80
+ if (currentName === null || currentId === null)
81
+ return;
82
+ criteria.push(criterion(currentId, currentName, text));
83
+ currentName = null;
84
+ currentId = null;
85
+ };
86
+ for (const line of lines) {
87
+ if (line.startsWith("## ") && !line.startsWith("### ")) {
88
+ flush();
89
+ const heading = line.slice(3).trim().toLowerCase();
90
+ if (heading.includes("ground truth")) {
91
+ section = "ground_truth";
92
+ } else if (heading.includes("criteri")) {
93
+ section = "criteria";
94
+ } else {
95
+ section = null;
96
+ }
97
+ continue;
98
+ }
99
+ if (line.startsWith("### ") && section === "criteria") {
100
+ flush();
101
+ const heading = line.slice(4).trim();
102
+ const anchored = CRITERION_ID_ANCHOR.exec(heading);
103
+ const name = anchored ? anchored[1].trim() : heading;
104
+ const rawId = anchored ? anchored[2].trim() : slug_id(heading);
105
+ currentName = name;
106
+ currentId = dedup_id(rawId, seen);
107
+ continue;
108
+ }
109
+ if (line.startsWith("# ")) {
110
+ continue;
111
+ }
112
+ buf.push(line);
113
+ }
114
+ flush();
115
+ if (criteria.length === 0) {
116
+ throw new NoCriteria;
117
+ }
118
+ const empty = criteria.filter((item) => item.description.length === 0).map((item) => item.id);
119
+ if (empty.length > 0) {
120
+ throw new EmptyCriterion(empty);
121
+ }
122
+ return { groundTruthNote, criteria };
123
+ }
124
+ function isRecord(value) {
125
+ return Object.values(value).every((entry) => typeof entry === "string");
126
+ }
127
+ function isOptionalString(value, key) {
128
+ if (!(key in value))
129
+ return true;
130
+ return typeof value[key] === "string";
131
+ }
132
+ function isCriterionInput(value) {
133
+ return isOptionalString(value, "id") && isOptionalString(value, "name") && isOptionalString(value, "description");
134
+ }
135
+ function normalize_one(raw, index, seen) {
136
+ const cidRaw = typeof raw === "string" ? "" : String(raw.id ?? "");
137
+ const nameRaw = typeof raw === "string" ? raw : String(raw.name ?? "");
138
+ const desc = typeof raw === "string" ? raw : String(raw.description ?? "");
139
+ if (desc.length === 0) {
140
+ throw new EmptyCriterion([cidRaw || nameRaw || String(index)]);
141
+ }
142
+ const name = nameRaw || cidRaw || slug_id(desc);
143
+ const id = dedup_id(cidRaw || slug_id(name), seen);
144
+ return criterion(id, name, desc);
145
+ }
146
+ function normalize_criteria(input) {
147
+ if (input === null || typeof input !== "object") {
148
+ throw new TypeError(`criteria must be a record, string[], or CriterionInput[], got ${typeof input}`);
149
+ }
150
+ const rawItems = [];
151
+ if (Array.isArray(input)) {
152
+ for (const [index, raw] of input.entries()) {
153
+ if (typeof raw === "string") {
154
+ rawItems.push(raw);
155
+ continue;
156
+ }
157
+ if (isCriterionInput(raw)) {
158
+ rawItems.push(raw);
159
+ continue;
160
+ }
161
+ throw new TypeError(`criteria[${index}] must be a string or CriterionInput`);
162
+ }
163
+ } else if (isRecord(input)) {
164
+ for (const [name, description] of Object.entries(input)) {
165
+ rawItems.push({ name, description });
166
+ }
167
+ } else {
168
+ throw new TypeError("criteria record values must be strings");
169
+ }
170
+ const seen = new Set;
171
+ const out = rawItems.map((raw, index) => normalize_one(raw, index, seen));
172
+ if (out.length === 0) {
173
+ throw new NoCriteria("criteria is empty");
174
+ }
175
+ return out;
176
+ }
177
+ var VERIFICATION_SCALE = {
178
+ min: 1,
179
+ max: 20,
180
+ anchors: "1 = certainly fails … 10 = borderline … 20 = verified correct",
181
+ schema: Type.Integer({ minimum: 1, maximum: 20 })
182
+ };
183
+ function mean_score(scores) {
184
+ if (scores.length === 0)
185
+ return 0;
186
+ let total = 0;
187
+ for (const item of scores)
188
+ total += item.score;
189
+ return total / scores.length;
190
+ }
191
+ function decide_verification(round, policy) {
192
+ const { scores, expectedCount } = round;
193
+ const valid = scores.length;
194
+ const quorumNeeded = Math.ceil(expectedCount * policy.quorumFraction);
195
+ if (valid < quorumNeeded) {
196
+ return { kind: "indeterminate", missing: Math.max(0, expectedCount - valid) };
197
+ }
198
+ const mean = mean_score(scores);
199
+ const findings = scores.flatMap((item) => item.findings);
200
+ if (findings.some((item) => item.severity === "veto") || mean < policy.acceptMean) {
201
+ return { kind: "repair", mean, findings };
202
+ }
203
+ return { kind: "accept", mean };
204
+ }
205
+
206
+ export { parse_rubric, normalize_criteria, VERIFICATION_SCALE, decide_verification };