@descryy/core 0.1.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.
Files changed (366) hide show
  1. package/LICENSE +21 -0
  2. package/dist/capabilities/index.d.ts +3 -0
  3. package/dist/capabilities/index.d.ts.map +1 -0
  4. package/dist/capabilities/index.js +2 -0
  5. package/dist/capabilities/index.js.map +1 -0
  6. package/dist/capabilities/preconditions.d.ts +99 -0
  7. package/dist/capabilities/preconditions.d.ts.map +1 -0
  8. package/dist/capabilities/preconditions.js +94 -0
  9. package/dist/capabilities/preconditions.js.map +1 -0
  10. package/dist/contracts/engine.d.ts +90 -0
  11. package/dist/contracts/engine.d.ts.map +1 -0
  12. package/dist/contracts/engine.js +291 -0
  13. package/dist/contracts/engine.js.map +1 -0
  14. package/dist/contracts/index.d.ts +9 -0
  15. package/dist/contracts/index.d.ts.map +1 -0
  16. package/dist/contracts/index.js +5 -0
  17. package/dist/contracts/index.js.map +1 -0
  18. package/dist/contracts/orphans.d.ts +96 -0
  19. package/dist/contracts/orphans.d.ts.map +1 -0
  20. package/dist/contracts/orphans.js +241 -0
  21. package/dist/contracts/orphans.js.map +1 -0
  22. package/dist/contracts/paths.d.ts +132 -0
  23. package/dist/contracts/paths.d.ts.map +1 -0
  24. package/dist/contracts/paths.js +245 -0
  25. package/dist/contracts/paths.js.map +1 -0
  26. package/dist/contracts/shapes.d.ts +99 -0
  27. package/dist/contracts/shapes.d.ts.map +1 -0
  28. package/dist/contracts/shapes.js +196 -0
  29. package/dist/contracts/shapes.js.map +1 -0
  30. package/dist/governance/budget.d.ts +89 -0
  31. package/dist/governance/budget.d.ts.map +1 -0
  32. package/dist/governance/budget.js +101 -0
  33. package/dist/governance/budget.js.map +1 -0
  34. package/dist/governance/candidate-boundary.d.ts +49 -0
  35. package/dist/governance/candidate-boundary.d.ts.map +1 -0
  36. package/dist/governance/candidate-boundary.js +51 -0
  37. package/dist/governance/candidate-boundary.js.map +1 -0
  38. package/dist/governance/escalation.d.ts +63 -0
  39. package/dist/governance/escalation.d.ts.map +1 -0
  40. package/dist/governance/escalation.js +72 -0
  41. package/dist/governance/escalation.js.map +1 -0
  42. package/dist/governance/fact-boundary.d.ts +77 -0
  43. package/dist/governance/fact-boundary.d.ts.map +1 -0
  44. package/dist/governance/fact-boundary.js +91 -0
  45. package/dist/governance/fact-boundary.js.map +1 -0
  46. package/dist/governance/finding-funnel.d.ts +109 -0
  47. package/dist/governance/finding-funnel.d.ts.map +1 -0
  48. package/dist/governance/finding-funnel.js +137 -0
  49. package/dist/governance/finding-funnel.js.map +1 -0
  50. package/dist/governance/index.d.ts +11 -0
  51. package/dist/governance/index.d.ts.map +1 -0
  52. package/dist/governance/index.js +6 -0
  53. package/dist/governance/index.js.map +1 -0
  54. package/dist/graph/build.d.ts +127 -0
  55. package/dist/graph/build.d.ts.map +1 -0
  56. package/dist/graph/build.js +0 -0
  57. package/dist/graph/build.js.map +1 -0
  58. package/dist/graph/cross-language.d.ts +70 -0
  59. package/dist/graph/cross-language.d.ts.map +1 -0
  60. package/dist/graph/cross-language.js +104 -0
  61. package/dist/graph/cross-language.js.map +1 -0
  62. package/dist/graph/index.d.ts +11 -0
  63. package/dist/graph/index.d.ts.map +1 -0
  64. package/dist/graph/index.js +6 -0
  65. package/dist/graph/index.js.map +1 -0
  66. package/dist/graph/merge.d.ts +95 -0
  67. package/dist/graph/merge.d.ts.map +1 -0
  68. package/dist/graph/merge.js +131 -0
  69. package/dist/graph/merge.js.map +1 -0
  70. package/dist/graph/persist.d.ts +42 -0
  71. package/dist/graph/persist.d.ts.map +1 -0
  72. package/dist/graph/persist.js +52 -0
  73. package/dist/graph/persist.js.map +1 -0
  74. package/dist/graph/runtime-confirmation.d.ts +169 -0
  75. package/dist/graph/runtime-confirmation.d.ts.map +1 -0
  76. package/dist/graph/runtime-confirmation.js +318 -0
  77. package/dist/graph/runtime-confirmation.js.map +1 -0
  78. package/dist/index.d.ts +18 -0
  79. package/dist/index.d.ts.map +1 -0
  80. package/dist/index.js +19 -0
  81. package/dist/index.js.map +1 -0
  82. package/dist/ledger/index.d.ts +5 -0
  83. package/dist/ledger/index.d.ts.map +1 -0
  84. package/dist/ledger/index.js +3 -0
  85. package/dist/ledger/index.js.map +1 -0
  86. package/dist/ledger/mint.d.ts +81 -0
  87. package/dist/ledger/mint.d.ts.map +1 -0
  88. package/dist/ledger/mint.js +138 -0
  89. package/dist/ledger/mint.js.map +1 -0
  90. package/dist/ledger/resolve.d.ts +124 -0
  91. package/dist/ledger/resolve.d.ts.map +1 -0
  92. package/dist/ledger/resolve.js +290 -0
  93. package/dist/ledger/resolve.js.map +1 -0
  94. package/dist/multipr/fingerprint.d.ts +56 -0
  95. package/dist/multipr/fingerprint.d.ts.map +1 -0
  96. package/dist/multipr/fingerprint.js +169 -0
  97. package/dist/multipr/fingerprint.js.map +1 -0
  98. package/dist/multipr/hidden-dependency.d.ts +120 -0
  99. package/dist/multipr/hidden-dependency.d.ts.map +1 -0
  100. package/dist/multipr/hidden-dependency.js +185 -0
  101. package/dist/multipr/hidden-dependency.js.map +1 -0
  102. package/dist/multipr/index.d.ts +14 -0
  103. package/dist/multipr/index.d.ts.map +1 -0
  104. package/dist/multipr/index.js +8 -0
  105. package/dist/multipr/index.js.map +1 -0
  106. package/dist/multipr/mechanical.d.ts +239 -0
  107. package/dist/multipr/mechanical.d.ts.map +1 -0
  108. package/dist/multipr/mechanical.js +333 -0
  109. package/dist/multipr/mechanical.js.map +1 -0
  110. package/dist/multipr/migration-heads.d.ts +160 -0
  111. package/dist/multipr/migration-heads.d.ts.map +1 -0
  112. package/dist/multipr/migration-heads.js +212 -0
  113. package/dist/multipr/migration-heads.js.map +1 -0
  114. package/dist/multipr/overlap.d.ts +186 -0
  115. package/dist/multipr/overlap.d.ts.map +1 -0
  116. package/dist/multipr/overlap.js +254 -0
  117. package/dist/multipr/overlap.js.map +1 -0
  118. package/dist/multipr/scope-store.d.ts +105 -0
  119. package/dist/multipr/scope-store.d.ts.map +1 -0
  120. package/dist/multipr/scope-store.js +182 -0
  121. package/dist/multipr/scope-store.js.map +1 -0
  122. package/dist/multipr/superseded.d.ts +133 -0
  123. package/dist/multipr/superseded.d.ts.map +1 -0
  124. package/dist/multipr/superseded.js +128 -0
  125. package/dist/multipr/superseded.js.map +1 -0
  126. package/dist/query/confirmed-facts.d.ts +56 -0
  127. package/dist/query/confirmed-facts.d.ts.map +1 -0
  128. package/dist/query/confirmed-facts.js +64 -0
  129. package/dist/query/confirmed-facts.js.map +1 -0
  130. package/dist/query/declared-value-closure.d.ts +126 -0
  131. package/dist/query/declared-value-closure.d.ts.map +1 -0
  132. package/dist/query/declared-value-closure.js +156 -0
  133. package/dist/query/declared-value-closure.js.map +1 -0
  134. package/dist/query/index.d.ts +28 -0
  135. package/dist/query/index.d.ts.map +1 -0
  136. package/dist/query/index.js +15 -0
  137. package/dist/query/index.js.map +1 -0
  138. package/dist/query/memory.d.ts +20 -0
  139. package/dist/query/memory.d.ts.map +1 -0
  140. package/dist/query/memory.js +55 -0
  141. package/dist/query/memory.js.map +1 -0
  142. package/dist/query/provider.d.ts +127 -0
  143. package/dist/query/provider.d.ts.map +1 -0
  144. package/dist/query/provider.js +54 -0
  145. package/dist/query/provider.js.map +1 -0
  146. package/dist/query/queries.d.ts +119 -0
  147. package/dist/query/queries.d.ts.map +1 -0
  148. package/dist/query/queries.js +267 -0
  149. package/dist/query/queries.js.map +1 -0
  150. package/dist/query/refusal-fetch.d.ts +114 -0
  151. package/dist/query/refusal-fetch.d.ts.map +1 -0
  152. package/dist/query/refusal-fetch.js +200 -0
  153. package/dist/query/refusal-fetch.js.map +1 -0
  154. package/dist/query/refusal-questions.d.ts +123 -0
  155. package/dist/query/refusal-questions.d.ts.map +1 -0
  156. package/dist/query/refusal-questions.js +122 -0
  157. package/dist/query/refusal-questions.js.map +1 -0
  158. package/dist/query/root-cause-score.d.ts +218 -0
  159. package/dist/query/root-cause-score.d.ts.map +1 -0
  160. package/dist/query/root-cause-score.js +251 -0
  161. package/dist/query/root-cause-score.js.map +1 -0
  162. package/dist/query/row-closure-picture.d.ts +108 -0
  163. package/dist/query/row-closure-picture.d.ts.map +1 -0
  164. package/dist/query/row-closure-picture.js +131 -0
  165. package/dist/query/row-closure-picture.js.map +1 -0
  166. package/dist/query/similar-incidents.d.ts +76 -0
  167. package/dist/query/similar-incidents.d.ts.map +1 -0
  168. package/dist/query/similar-incidents.js +169 -0
  169. package/dist/query/similar-incidents.js.map +1 -0
  170. package/dist/query/sqlite.d.ts +13 -0
  171. package/dist/query/sqlite.d.ts.map +1 -0
  172. package/dist/query/sqlite.js +54 -0
  173. package/dist/query/sqlite.js.map +1 -0
  174. package/dist/query/traverse.d.ts +110 -0
  175. package/dist/query/traverse.d.ts.map +1 -0
  176. package/dist/query/traverse.js +0 -0
  177. package/dist/query/traverse.js.map +1 -0
  178. package/dist/query/unresolved.d.ts +195 -0
  179. package/dist/query/unresolved.d.ts.map +1 -0
  180. package/dist/query/unresolved.js +225 -0
  181. package/dist/query/unresolved.js.map +1 -0
  182. package/dist/query/verification-status.d.ts +134 -0
  183. package/dist/query/verification-status.d.ts.map +1 -0
  184. package/dist/query/verification-status.js +163 -0
  185. package/dist/query/verification-status.js.map +1 -0
  186. package/dist/recording/index.d.ts +26 -0
  187. package/dist/recording/index.d.ts.map +1 -0
  188. package/dist/recording/index.js +30 -0
  189. package/dist/recording/index.js.map +1 -0
  190. package/dist/recording/migrate.d.ts +22 -0
  191. package/dist/recording/migrate.d.ts.map +1 -0
  192. package/dist/recording/migrate.js +51 -0
  193. package/dist/recording/migrate.js.map +1 -0
  194. package/dist/recording/reader.d.ts +27 -0
  195. package/dist/recording/reader.d.ts.map +1 -0
  196. package/dist/recording/reader.js +55 -0
  197. package/dist/recording/reader.js.map +1 -0
  198. package/dist/recording/redact.d.ts +63 -0
  199. package/dist/recording/redact.d.ts.map +1 -0
  200. package/dist/recording/redact.js +98 -0
  201. package/dist/recording/redact.js.map +1 -0
  202. package/dist/recording/schema.d.ts +41 -0
  203. package/dist/recording/schema.d.ts.map +1 -0
  204. package/dist/recording/schema.js +104 -0
  205. package/dist/recording/schema.js.map +1 -0
  206. package/dist/recording/writer.d.ts +120 -0
  207. package/dist/recording/writer.d.ts.map +1 -0
  208. package/dist/recording/writer.js +81 -0
  209. package/dist/recording/writer.js.map +1 -0
  210. package/dist/scoping/fanout.d.ts +86 -0
  211. package/dist/scoping/fanout.d.ts.map +1 -0
  212. package/dist/scoping/fanout.js +95 -0
  213. package/dist/scoping/fanout.js.map +1 -0
  214. package/dist/scoping/index.d.ts +10 -0
  215. package/dist/scoping/index.d.ts.map +1 -0
  216. package/dist/scoping/index.js +6 -0
  217. package/dist/scoping/index.js.map +1 -0
  218. package/dist/scoping/score.d.ts +83 -0
  219. package/dist/scoping/score.d.ts.map +1 -0
  220. package/dist/scoping/score.js +125 -0
  221. package/dist/scoping/score.js.map +1 -0
  222. package/dist/scoping/tiers.d.ts +32 -0
  223. package/dist/scoping/tiers.d.ts.map +1 -0
  224. package/dist/scoping/tiers.js +35 -0
  225. package/dist/scoping/tiers.js.map +1 -0
  226. package/dist/scoping/traverse.d.ts +60 -0
  227. package/dist/scoping/traverse.d.ts.map +1 -0
  228. package/dist/scoping/traverse.js +172 -0
  229. package/dist/scoping/traverse.js.map +1 -0
  230. package/dist/scoping/weights.d.ts +97 -0
  231. package/dist/scoping/weights.d.ts.map +1 -0
  232. package/dist/scoping/weights.js +167 -0
  233. package/dist/scoping/weights.js.map +1 -0
  234. package/dist/sources/git/diff.d.ts +53 -0
  235. package/dist/sources/git/diff.d.ts.map +1 -0
  236. package/dist/sources/git/diff.js +140 -0
  237. package/dist/sources/git/diff.js.map +1 -0
  238. package/dist/sources/git/env.d.ts +2 -0
  239. package/dist/sources/git/env.d.ts.map +1 -0
  240. package/dist/sources/git/env.js +21 -0
  241. package/dist/sources/git/env.js.map +1 -0
  242. package/dist/sources/git/history.d.ts +140 -0
  243. package/dist/sources/git/history.d.ts.map +1 -0
  244. package/dist/sources/git/history.js +314 -0
  245. package/dist/sources/git/history.js.map +1 -0
  246. package/dist/sources/git/index.d.ts +7 -0
  247. package/dist/sources/git/index.d.ts.map +1 -0
  248. package/dist/sources/git/index.js +4 -0
  249. package/dist/sources/git/index.js.map +1 -0
  250. package/dist/sources/git/source.d.ts +95 -0
  251. package/dist/sources/git/source.d.ts.map +1 -0
  252. package/dist/sources/git/source.js +0 -0
  253. package/dist/sources/git/source.js.map +1 -0
  254. package/dist/sources/migrations/dialects.d.ts +59 -0
  255. package/dist/sources/migrations/dialects.d.ts.map +1 -0
  256. package/dist/sources/migrations/dialects.js +84 -0
  257. package/dist/sources/migrations/dialects.js.map +1 -0
  258. package/dist/sources/migrations/index.d.ts +3 -0
  259. package/dist/sources/migrations/index.d.ts.map +1 -0
  260. package/dist/sources/migrations/index.js +2 -0
  261. package/dist/sources/migrations/index.js.map +1 -0
  262. package/dist/sources/migrations/read.d.ts +113 -0
  263. package/dist/sources/migrations/read.d.ts.map +1 -0
  264. package/dist/sources/migrations/read.js +270 -0
  265. package/dist/sources/migrations/read.js.map +1 -0
  266. package/dist/sources/workspace/index.d.ts +3 -0
  267. package/dist/sources/workspace/index.d.ts.map +1 -0
  268. package/dist/sources/workspace/index.js +2 -0
  269. package/dist/sources/workspace/index.js.map +1 -0
  270. package/dist/sources/workspace/workspace.d.ts +64 -0
  271. package/dist/sources/workspace/workspace.d.ts.map +1 -0
  272. package/dist/sources/workspace/workspace.js +294 -0
  273. package/dist/sources/workspace/workspace.js.map +1 -0
  274. package/dist/store/driver/driver.d.ts +82 -0
  275. package/dist/store/driver/driver.d.ts.map +1 -0
  276. package/dist/store/driver/driver.js +31 -0
  277. package/dist/store/driver/driver.js.map +1 -0
  278. package/dist/store/driver/node-sqlite.d.ts +28 -0
  279. package/dist/store/driver/node-sqlite.d.ts.map +1 -0
  280. package/dist/store/driver/node-sqlite.js +188 -0
  281. package/dist/store/driver/node-sqlite.js.map +1 -0
  282. package/dist/store/index.d.ts +33 -0
  283. package/dist/store/index.d.ts.map +1 -0
  284. package/dist/store/index.js +46 -0
  285. package/dist/store/index.js.map +1 -0
  286. package/dist/store/migrate.d.ts +68 -0
  287. package/dist/store/migrate.d.ts.map +1 -0
  288. package/dist/store/migrate.js +140 -0
  289. package/dist/store/migrate.js.map +1 -0
  290. package/dist/store/reader.d.ts +127 -0
  291. package/dist/store/reader.d.ts.map +1 -0
  292. package/dist/store/reader.js +269 -0
  293. package/dist/store/reader.js.map +1 -0
  294. package/dist/store/schema.d.ts +87 -0
  295. package/dist/store/schema.d.ts.map +1 -0
  296. package/dist/store/schema.js +322 -0
  297. package/dist/store/schema.js.map +1 -0
  298. package/dist/store/writer.d.ts +116 -0
  299. package/dist/store/writer.d.ts.map +1 -0
  300. package/dist/store/writer.js +279 -0
  301. package/dist/store/writer.js.map +1 -0
  302. package/dist/tiers/certify.d.ts +375 -0
  303. package/dist/tiers/certify.d.ts.map +1 -0
  304. package/dist/tiers/certify.js +434 -0
  305. package/dist/tiers/certify.js.map +1 -0
  306. package/dist/tiers/index.d.ts +5 -0
  307. package/dist/tiers/index.d.ts.map +1 -0
  308. package/dist/tiers/index.js +3 -0
  309. package/dist/tiers/index.js.map +1 -0
  310. package/dist/tiers/ladder.d.ts +73 -0
  311. package/dist/tiers/ladder.d.ts.map +1 -0
  312. package/dist/tiers/ladder.js +197 -0
  313. package/dist/tiers/ladder.js.map +1 -0
  314. package/dist/validation/config-graph.d.ts +104 -0
  315. package/dist/validation/config-graph.d.ts.map +1 -0
  316. package/dist/validation/config-graph.js +205 -0
  317. package/dist/validation/config-graph.js.map +1 -0
  318. package/dist/validation/env.d.ts +243 -0
  319. package/dist/validation/env.d.ts.map +1 -0
  320. package/dist/validation/env.js +447 -0
  321. package/dist/validation/env.js.map +1 -0
  322. package/dist/validation/index.d.ts +16 -0
  323. package/dist/validation/index.d.ts.map +1 -0
  324. package/dist/validation/index.js +9 -0
  325. package/dist/validation/index.js.map +1 -0
  326. package/dist/validation/join-substitution.d.ts +186 -0
  327. package/dist/validation/join-substitution.d.ts.map +1 -0
  328. package/dist/validation/join-substitution.js +191 -0
  329. package/dist/validation/join-substitution.js.map +1 -0
  330. package/dist/validation/migrations.d.ts +133 -0
  331. package/dist/validation/migrations.d.ts.map +1 -0
  332. package/dist/validation/migrations.js +315 -0
  333. package/dist/validation/migrations.js.map +1 -0
  334. package/dist/validation/nodes.d.ts +32 -0
  335. package/dist/validation/nodes.d.ts.map +1 -0
  336. package/dist/validation/nodes.js +45 -0
  337. package/dist/validation/nodes.js.map +1 -0
  338. package/dist/validation/rollback.d.ts +124 -0
  339. package/dist/validation/rollback.d.ts.map +1 -0
  340. package/dist/validation/rollback.js +302 -0
  341. package/dist/validation/rollback.js.map +1 -0
  342. package/dist/validation/route-drift.d.ts +108 -0
  343. package/dist/validation/route-drift.d.ts.map +1 -0
  344. package/dist/validation/route-drift.js +103 -0
  345. package/dist/validation/route-drift.js.map +1 -0
  346. package/dist/validation/sources.d.ts +153 -0
  347. package/dist/validation/sources.d.ts.map +1 -0
  348. package/dist/validation/sources.js +409 -0
  349. package/dist/validation/sources.js.map +1 -0
  350. package/dist/worker/index.d.ts +5 -0
  351. package/dist/worker/index.d.ts.map +1 -0
  352. package/dist/worker/index.js +3 -0
  353. package/dist/worker/index.js.map +1 -0
  354. package/dist/worker/pool.d.ts +73 -0
  355. package/dist/worker/pool.d.ts.map +1 -0
  356. package/dist/worker/pool.js +203 -0
  357. package/dist/worker/pool.js.map +1 -0
  358. package/dist/worker/protocol.d.ts +91 -0
  359. package/dist/worker/protocol.d.ts.map +1 -0
  360. package/dist/worker/protocol.js +19 -0
  361. package/dist/worker/protocol.js.map +1 -0
  362. package/dist/worker/traversal.worker.d.ts +25 -0
  363. package/dist/worker/traversal.worker.d.ts.map +1 -0
  364. package/dist/worker/traversal.worker.js +124 -0
  365. package/dist/worker/traversal.worker.js.map +1 -0
  366. package/package.json +29 -0
@@ -0,0 +1,447 @@
1
+ /**
2
+ * §15.3's environment/config check — *"cheapest and most reliable, ship first"*.
3
+ *
4
+ * The first thing in this repository that produces a statement about somebody's
5
+ * code rather than a measurement about the graph. Everything below is shaped by
6
+ * one fact, which was measured before any of it was written:
7
+ *
8
+ * > **A variable that is read and never declared is usually not a bug.**
9
+ *
10
+ * | repository | declared | read | read and never declared |
11
+ * | --- | --- | --- | --- |
12
+ * | `outline` | 91 | 23 | **18** |
13
+ * | `saleor` | 7 | 114 | **107** |
14
+ *
15
+ * The 107 are not defects; that repository's configuration lives in framework
16
+ * defaults and a deployment this run cannot see. The 18 are not defects either,
17
+ * and they are the more instructive set because they look plausible — container
18
+ * credentials, a platform's dyno id, a proxy setting, five alternates to a
19
+ * variable that *is* declared. A rule that reports them names a real variable at
20
+ * a real line and is wrong every time, which is how a tool gets uninstalled.
21
+ *
22
+ * This is the contract engine's problem in a second spelling — 117 callers, 24
23
+ * routes, and the 101 unmatched being a backend nobody analysed — so it takes the
24
+ * same two answers. **Report against evidence that exists; disclose the rest with
25
+ * a count.** See DEC-121.
26
+ *
27
+ * ## Three evidence sets, and the rule over them
28
+ *
29
+ * ```
30
+ * reads (graph) declarations (.env*) deploy target (manifests, CI)
31
+ * │ │ │
32
+ * └───────── a finding needs two of these ────────────┘
33
+ * and, for a defect claim,
34
+ * one of them must assert *requirement*
35
+ * ```
36
+ *
37
+ * Requirement is asserted by exactly one thing: **the read site fails when the
38
+ * variable is absent.** Not "has no fallback" — that was the first rule, it was
39
+ * measured, and it was wrong five times out of six.
40
+ *
41
+ * ## The rule that replaced it, and the six findings that killed the first one
42
+ *
43
+ * The first version asked whether the read supplied a fallback. On `dispatch` it
44
+ * emitted six findings and **five were false**:
45
+ *
46
+ * | finding | source | why it was wrong |
47
+ * | --- | --- | --- |
48
+ * | `FORMKIT_ENTERPRISE_TOKEN` | `if (env.X && env.X.startsWith(…))` | a feature gate |
49
+ * | `VITE_DISPATCH_SENTRY_ENABLED` | `let e = env.X; if (e) {…}` | a feature gate |
50
+ * | `VITE_DISPATCH_SENTRY_DSN` | used only inside that gate | never reached |
51
+ * | `VITE_DISPATCH_AVATAR_TEMPLATE` | `const t = env.X` | absent is a valid value |
52
+ * | `VITE_FORMKIT_PRO_PROJECT_KEY` | `const hasPro = env.X` | the name says it |
53
+ *
54
+ * Every one is *assigned without a fallback and then tested*. Deciding
55
+ * requirement from the assignment needs to know what happens to the value
56
+ * afterwards, which is dataflow — R1 work at least, and not available here.
57
+ *
58
+ * The sixth finding was true, and the difference is the whole rule: it read
59
+ * through an accessor that **raises** when the variable is unset. So:
60
+ *
61
+ * - an accessor that raises on absence — a subscript, a config lookup with no
62
+ * declared default — **asserts requirement**;
63
+ * - an accessor that yields an absent value instead **asserts nothing at all**,
64
+ * however the result is later used.
65
+ *
66
+ * The second case is not "optional". It is *unknown at this resolution*, and it
67
+ * is counted and disclosed rather than assumed either way. That is why a
68
+ * repository whose every read yields-on-absence produces no read-side finding at
69
+ * all and is told so in words.
70
+ *
71
+ * **A list of platform-supplied names was considered and rejected.** It decides a
72
+ * fact about a variable from its spelling, it cannot be maintained across
73
+ * clouds, and it is silently wrong on the repository that genuinely requires
74
+ * `PORT`. Rule 3's shape, one level up from node types.
75
+ *
76
+ * ## The coverage guard — `nearestMiss` in a second spelling
77
+ *
78
+ * `orphans.ts` refuses to report an unmatched caller when nothing on the provider
79
+ * side resembles it, because the honest description is *"the provider side was
80
+ * never read"*. Same refusal here: before any read-side finding is emitted, the
81
+ * check asks what fraction of the variables the code names the repository
82
+ * declares *at all*. Below the floor the declaration surface is decorative, the
83
+ * configuration lives somewhere this run cannot see, and **nothing is reported**
84
+ * — only a count and the reason. That is the rule that turns `saleor`'s 107 into
85
+ * one honest sentence.
86
+ *
87
+ * **The denominator is every named variable, not only the required ones**, and
88
+ * that is not a detail. Measured over required reads alone the denominator was
89
+ * four on a real repository, so deleting a single declaration moved coverage
90
+ * from 75% to 50% and flipped the guard from reporting six findings to
91
+ * reporting none. A guard that inverts on one line is not a guard. Asking "does
92
+ * this repository declare the variables its code names" over every read is the
93
+ * same question with a denominator large enough to answer it — and it is what
94
+ * the positive control found, which is precisely what a positive control is for.
95
+ *
96
+ * ## Deploy-target surfaces can only ever suppress a finding
97
+ *
98
+ * A container manifest's `environment:` block belongs to whichever image that
99
+ * service runs — a database's credentials are not this application's
100
+ * configuration. So manifests and pipelines count towards *declared*, and never
101
+ * towards *undocumented*: they can prevent a finding, never create one. Without
102
+ * this, `outline` reports three database credentials belonging to an image it
103
+ * merely depends on.
104
+ *
105
+ * ## Resolution, and why a config read is not R0
106
+ *
107
+ * A `.env` file is not code. *"This name is on line 12 of one file and in none of
108
+ * the others"* rests on a direct read of two declarative documents with no
109
+ * inference at any hop — strictly better evidence than an LSP-resolved name,
110
+ * because nothing needed resolving. It is treated as R3, on the same precedent
111
+ * that lets a contract format reach R3 with no language adapter at all.
112
+ *
113
+ * A claim about what the *code* requires is capped by the node the read came
114
+ * from, which is R0 for a syntax-only adapter. So a `REQUIRED_NOT_DECLARED`
115
+ * finding lands at class C and is labelled a prediction — principle 3 working,
116
+ * not a defect of the check. §15.3 calls this check Class A because the
117
+ * underlying fact is deterministic; the resolution cap is what reconciles the
118
+ * two, and the report says so rather than picking one.
119
+ */
120
+ import { fileScopedNodes } from "./nodes.js";
121
+ export const DEFAULT_COVERAGE_FLOOR = 0.6;
122
+ /**
123
+ * Declared peers the guard demands before a ratio is allowed to mean anything.
124
+ *
125
+ * A ratio over a denominator of one or two is not evidence: one required read
126
+ * and one declaration is 100% coverage on a sample of size one. Picked before
127
+ * measuring, like the floor.
128
+ */
129
+ const MIN_DECLARED_PEERS = 3;
130
+ const DEFAULT_MAX_FINDINGS = 25;
131
+ /** Direct reads of declarative documents need no resolution — see the header. */
132
+ const DECLARATIVE_RESOLUTION = 3;
133
+ /**
134
+ * Pull `attrs.envReads` off a file node, refusing anything malformed.
135
+ *
136
+ * `attrs` is opaque above the boundary and is written by code this engine does
137
+ * not own, so every field is checked. A row missing `required` is **dropped, not
138
+ * defaulted**: defaulting it to `true` would manufacture a requirement claim
139
+ * from an adapter that never made one, and that claim is the whole check.
140
+ */
141
+ export function readEnvReads(attrs, file, resolution) {
142
+ const raw = attrs["envReads"];
143
+ const dynamicRaw = attrs["envDynamicReads"];
144
+ const dynamic = typeof dynamicRaw === "number" && Number.isFinite(dynamicRaw) && dynamicRaw > 0
145
+ ? Math.floor(dynamicRaw)
146
+ : 0;
147
+ if (!Array.isArray(raw))
148
+ return { reads: [], dynamic, malformed: 0 };
149
+ const reads = [];
150
+ let malformed = 0;
151
+ for (const entry of raw) {
152
+ if (typeof entry !== "object" || entry === null) {
153
+ malformed += 1;
154
+ continue;
155
+ }
156
+ const row = entry;
157
+ const name = row["name"];
158
+ const required = row["required"];
159
+ const line = row["line"];
160
+ if (typeof name !== "string" || name === "" || typeof required !== "boolean") {
161
+ malformed += 1;
162
+ continue;
163
+ }
164
+ reads.push({
165
+ name,
166
+ required,
167
+ file,
168
+ line: typeof line === "number" && Number.isFinite(line) ? line : 0,
169
+ resolution,
170
+ });
171
+ }
172
+ return { reads, dynamic, malformed };
173
+ }
174
+ export function checkEnvironment(provider, scan, options = {}) {
175
+ const floor = options.coverageFloor ?? DEFAULT_COVERAGE_FLOOR;
176
+ const maxFindings = options.maxFindings ?? DEFAULT_MAX_FINDINGS;
177
+ const scoped = options.files === undefined ? null : new Set(options.files);
178
+ const notes = [];
179
+ // --- the declaration side, from the filesystem ---------------------------
180
+ const declaredAt = new Map();
181
+ const dotenvExample = new Map();
182
+ const dotenvSet = new Map();
183
+ for (const surface of scan.surfaces) {
184
+ for (const declaration of surface.declarations) {
185
+ const evidence = {
186
+ file: surface.file,
187
+ line: declaration.line,
188
+ says: declaration.commented
189
+ ? `${surface.file} documents it, commented out`
190
+ : `${surface.file} declares it`,
191
+ };
192
+ let bucket = declaredAt.get(declaration.name);
193
+ if (bucket === undefined)
194
+ declaredAt.set(declaration.name, (bucket = []));
195
+ bucket.push(evidence);
196
+ // Only same-application surfaces feed the documentation comparison. A
197
+ // manifest sets variables for whichever image its service runs.
198
+ if (surface.format !== "dotenv")
199
+ continue;
200
+ const target = surface.example ? dotenvExample : dotenvSet;
201
+ if (!target.has(declaration.name))
202
+ target.set(declaration.name, evidence);
203
+ }
204
+ }
205
+ // --- the read side, from the graph ---------------------------------------
206
+ const files = fileScopedNodes(provider, options.limit);
207
+ const reads = [];
208
+ let filesWithReads = 0;
209
+ let filesWithoutReads = 0;
210
+ let dynamic = 0;
211
+ let malformed = 0;
212
+ for (const node of files.nodes) {
213
+ const path = node.file;
214
+ if (path === null)
215
+ continue;
216
+ if (scoped !== null && !scoped.has(path))
217
+ continue;
218
+ const extracted = readEnvReads(node.attrs, path, node.resolution);
219
+ dynamic += extracted.dynamic;
220
+ malformed += extracted.malformed;
221
+ if (extracted.reads.length === 0 && extracted.dynamic === 0) {
222
+ filesWithoutReads += 1;
223
+ continue;
224
+ }
225
+ filesWithReads += 1;
226
+ reads.push(...extracted.reads);
227
+ }
228
+ const requiredReads = new Map();
229
+ const undeterminedNames = new Set();
230
+ const namedVariables = new Set();
231
+ for (const read of reads) {
232
+ namedVariables.add(read.name);
233
+ if (!read.required) {
234
+ undeterminedNames.add(read.name);
235
+ continue;
236
+ }
237
+ // First read site wins so the citation is stable between runs.
238
+ const existing = requiredReads.get(read.name);
239
+ if (existing === undefined || read.file < existing.file)
240
+ requiredReads.set(read.name, read);
241
+ }
242
+ const readsAvailable = filesWithReads > 0;
243
+ // --- the coverage guard --------------------------------------------------
244
+ //
245
+ // Over every variable the code names, not only the ones asserting requirement.
246
+ // See the header: the narrow denominator was four on a real repository, and
247
+ // deleting one declaration inverted the guard.
248
+ let coverage = null;
249
+ if (requiredReads.size > 0) {
250
+ let declared = 0;
251
+ let requiredUndeclared = 0;
252
+ for (const name of requiredReads.keys()) {
253
+ if (declaredAt.has(name))
254
+ declared += 1;
255
+ else
256
+ requiredUndeclared += 1;
257
+ }
258
+ const ratio = declared / requiredReads.size;
259
+ coverage = {
260
+ required: requiredReads.size,
261
+ named: namedVariables.size,
262
+ declared,
263
+ ratio,
264
+ floor,
265
+ // Both, and the absolute half is what makes the ratio safe at small n: a
266
+ // repository with one required read and one declaration scores 100% on
267
+ // evidence of size one.
268
+ passed: ratio >= floor && declared >= MIN_DECLARED_PEERS,
269
+ requiredUndeclared,
270
+ minDeclared: MIN_DECLARED_PEERS,
271
+ };
272
+ }
273
+ // --- findings ------------------------------------------------------------
274
+ const findings = [];
275
+ if (coverage !== null && coverage.passed) {
276
+ for (const [name, read] of requiredReads) {
277
+ if (declaredAt.has(name))
278
+ continue;
279
+ const where = read.line > 0 ? `${read.file}:${read.line}` : read.file;
280
+ findings.push({
281
+ kind: "REQUIRED_NOT_DECLARED",
282
+ name,
283
+ claim: "defect",
284
+ detail: `${name} is read at ${where} through an accessor that fails when it is unset, and ` +
285
+ "no configuration file in this repository declares it. " +
286
+ describeSurface(coverage),
287
+ evidence: [
288
+ {
289
+ file: read.file,
290
+ line: read.line,
291
+ says: "read here through an accessor that fails when the variable is unset",
292
+ },
293
+ ],
294
+ resolution: Math.min(DECLARATIVE_RESOLUTION, read.resolution),
295
+ });
296
+ }
297
+ }
298
+ // Documentation drift, between same-application files only. Gated on the same
299
+ // floor: an example file documenting almost nothing is a fact about the file.
300
+ const undocumented = [...dotenvSet.keys()].filter((n) => !dotenvExample.has(n));
301
+ if (dotenvExample.size > 0 && dotenvSet.size > 0) {
302
+ const documented = dotenvSet.size - undocumented.length;
303
+ const ratio = documented / dotenvSet.size;
304
+ if (ratio >= floor) {
305
+ for (const name of undocumented) {
306
+ const evidence = dotenvSet.get(name);
307
+ if (evidence === undefined)
308
+ continue;
309
+ findings.push({
310
+ kind: "SET_BUT_UNDOCUMENTED",
311
+ name,
312
+ claim: "lead",
313
+ detail: `${name} is set in ${evidence.file}:${evidence.line} and no example file in this ` +
314
+ "repository documents it. That is a lead, not a defect: someone setting this project " +
315
+ "up from the example alone would not learn the variable exists.",
316
+ evidence: [{ ...evidence, says: `${evidence.file} sets it` }],
317
+ resolution: DECLARATIVE_RESOLUTION,
318
+ });
319
+ }
320
+ }
321
+ else {
322
+ notes.push(`${undocumented.length} variable(s) are set in a configuration file and documented in no ` +
323
+ `example file, and they are not reported. The example files cover only ` +
324
+ `${Math.round(ratio * 100)}% of what the other files set, which is a fact about the ` +
325
+ "example rather than about any one variable.");
326
+ }
327
+ }
328
+ let declaredNeverRead = 0;
329
+ if (readsAvailable) {
330
+ const everyRead = namedVariables;
331
+ for (const name of declaredAt.keys())
332
+ if (!everyRead.has(name))
333
+ declaredNeverRead += 1;
334
+ }
335
+ // Defects before leads, then better evidence, then by name so two runs agree.
336
+ findings.sort((a, b) => (a.claim === b.claim ? 0 : a.claim === "defect" ? -1 : 1) ||
337
+ b.resolution - a.resolution ||
338
+ a.name.localeCompare(b.name));
339
+ const kept = findings.slice(0, maxFindings);
340
+ // --- disclosures ---------------------------------------------------------
341
+ if (scan.surfaces.length === 0) {
342
+ notes.push("No configuration file was found in this repository — no .env file, container manifest, " +
343
+ "image build file or pipeline definition declares a variable. Nothing could be " +
344
+ "cross-checked, which is a property of what was analysed rather than a clean result.");
345
+ }
346
+ if (!readsAvailable) {
347
+ notes.push("No file in the graph carries environment reads, so nothing was checked against the code. " +
348
+ "This engine reads attrs.envReads on a file-scoped node — an array of { name, required, line } — " +
349
+ "and no adapter emits it yet. Only the configuration files were compared against each " +
350
+ "other. This is not a result of zero problems.");
351
+ }
352
+ else if (filesWithoutReads > 0) {
353
+ notes.push(`${filesWithoutReads} file(s) in the graph carry no environment reads. Some genuinely read ` +
354
+ "no configuration; others were produced by an adapter that does not extract reads at all, " +
355
+ 'and this check cannot tell those apart. "We found nothing here" and "we could not look ' +
356
+ 'here" are different statements and only the second is safe to assume.');
357
+ }
358
+ if (coverage !== null && !coverage.passed && coverage.requiredUndeclared > 0) {
359
+ notes.push(`${coverage.requiredUndeclared} variable(s) are read through an accessor that fails when ` +
360
+ "they are unset and declared nowhere in this repository, and none of them is reported. " +
361
+ `This repository declares ${coverage.declared} of the ${coverage.required} variables its ` +
362
+ "code cannot start without " +
363
+ `(${Math.round(coverage.ratio * 100)}%, floor ${Math.round(floor * 100)}%), so its ` +
364
+ "configuration comes from somewhere this run cannot see — a secrets manager, a platform, " +
365
+ "a deployment. Reporting them would be one confident wrong sentence per variable.");
366
+ }
367
+ if (coverage === null && readsAvailable) {
368
+ notes.push(`Every one of the ${namedVariables.size} variable(s) this code names is read through an ` +
369
+ "accessor that yields an absent value rather than failing, so no read asserts that any " +
370
+ "variable is required and no missing-variable claim could be made. Whether the code copes " +
371
+ "with an absent value depends on what happens to it afterwards, which needs resolution " +
372
+ "this run did not reach. The check is not saying the configuration is complete.");
373
+ }
374
+ if (dynamic > 0) {
375
+ notes.push(`${dynamic} environment read(s) use a computed name and were not resolved to a variable. ` +
376
+ "They are counted rather than guessed at: a name assembled at runtime is not a name this " +
377
+ "check can check, and inventing one would be a false claim.");
378
+ }
379
+ if (malformed > 0) {
380
+ notes.push(`${malformed} environment read record(s) were dropped as malformed — a row missing "name" ` +
381
+ 'or a boolean "optional". A row without "optional" is dropped rather than assumed ' +
382
+ "required, because that assumption is the entire finding.");
383
+ }
384
+ if (declaredNeverRead > 0) {
385
+ notes.push(`${declaredNeverRead} declared variable(s) are read nowhere in the graph. Not reported: the ` +
386
+ "usual explanation is a reader this analysis did not cover, not dead configuration.");
387
+ }
388
+ if (scan.unreadable.length > 0) {
389
+ notes.push(`${scan.unreadable.length} path(s) looked like configuration and could not be read. Their ` +
390
+ "contents are not in any count above.");
391
+ }
392
+ if (scoped !== null) {
393
+ notes.push(`The read side was restricted to ${scoped.size} scoped file(s). Configuration files were ` +
394
+ "read in full, because a declaration is repository-wide regardless of what changed.");
395
+ }
396
+ if (kept.length < findings.length) {
397
+ notes.push(`${findings.length - kept.length} further finding(s) were withheld: a report is capped at ` +
398
+ `${maxFindings} so a short list stays worth reading. They were found, not missed.`);
399
+ }
400
+ if (files.truncated) {
401
+ notes.push("More files exist in the graph than were enumerated, so the read side covers a prefix of " +
402
+ "the repository rather than all of it. Files beyond the cap were not examined.");
403
+ }
404
+ if (scan.truncated) {
405
+ notes.push("The configuration scan hit its file budget before finishing, so some declarations may be " +
406
+ "missing. A variable reported as undeclared could be declared in a file that was not " +
407
+ "reached.");
408
+ }
409
+ let resolutionFloor = DECLARATIVE_RESOLUTION;
410
+ for (const finding of kept) {
411
+ if (finding.resolution < resolutionFloor)
412
+ resolutionFloor = finding.resolution;
413
+ }
414
+ const stamp = { ...provider.baseStamp(), resolutionFloor };
415
+ return {
416
+ data: {
417
+ findings: kept,
418
+ findingsTotal: findings.length,
419
+ surfaces: scan.surfaces.map((s) => ({
420
+ file: s.file,
421
+ role: s.role,
422
+ example: s.example,
423
+ declared: s.declarations.length,
424
+ })),
425
+ reads: {
426
+ filesWithReads,
427
+ filesWithoutReads,
428
+ required: requiredReads.size,
429
+ undetermined: undeterminedNames.size,
430
+ dynamic,
431
+ },
432
+ coverage,
433
+ declaredNeverRead,
434
+ readsAvailable,
435
+ },
436
+ stamp,
437
+ truncated: files.truncated || scan.truncated || kept.length < findings.length,
438
+ notes,
439
+ };
440
+ }
441
+ function describeSurface(coverage) {
442
+ return (`This repository declares ${coverage.declared} of the ${coverage.required} variables its code ` +
443
+ `cannot start without (${Math.round(coverage.ratio * 100)}%), so its configuration surface is ` +
444
+ "complete " +
445
+ "enough for the absence of one to be a fact about that variable.");
446
+ }
447
+ //# sourceMappingURL=env.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"env.js","sourceRoot":"","sources":["../../src/validation/env.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,16 @@
1
+ export { fileScopedNodes, FILE_SCOPED_NODE_TYPES } from "./nodes.ts";
2
+ export { scanMigrations, readMigration, classifyStatement, statements, } from "./migrations.ts";
3
+ export type { DestructiveKind, MigrationFile, MigrationOp, MigrationScan, MigrationScanOptions, MigrationSection, } from "./migrations.ts";
4
+ export { buildConfigGraph } from "./config-graph.ts";
5
+ export type { ConfigDeclaration, ConfigGraph, ConfigGraphOptions, ConfigReadSite, ConfigVariable, } from "./config-graph.ts";
6
+ export { checkRollbackReadiness, readMigrationOps } from "./rollback.ts";
7
+ export type { RollbackFinding, RollbackOptions, RollbackReport } from "./rollback.ts";
8
+ export { checkRouteDrift } from "./route-drift.ts";
9
+ export type { DriftOptions, DriftReport, DriftRoute, Introspection } from "./route-drift.ts";
10
+ export { runJoinSubstitutionControl } from "./join-substitution.ts";
11
+ export type { FlaggedSubstitution, JoinSubstitutionOptions, JoinSubstitutionReport, SubstitutionCaller, SubstitutionRoute, SubstitutionUncontrollable, UnreproducibleJoin, } from "./join-substitution.ts";
12
+ export { scanConfigSurfaces, skipDirectory, readDotenv, readImageBuild, readStructured, readWranglerVars, readWranglerVarsEntries, } from "./sources.ts";
13
+ export type { ConfigSurface, EnvDeclaration, ScanOptions, SurfaceFormat, SurfaceRole, SurfaceScan, WranglerVarsEntry, } from "./sources.ts";
14
+ export { checkEnvironment, readEnvReads, DEFAULT_COVERAGE_FLOOR } from "./env.ts";
15
+ export type { CoverageGuard, EnvCheckOptions, EnvClaim, EnvEvidence, EnvFinding, EnvFindingKind, EnvRead, EnvReport, } from "./env.ts";
16
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/validation/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,sBAAsB,EAAE,MAAM,YAAY,CAAC;AAErE,OAAO,EACL,cAAc,EACd,aAAa,EACb,iBAAiB,EACjB,UAAU,GACX,MAAM,iBAAiB,CAAC;AACzB,YAAY,EACV,eAAe,EACf,aAAa,EACb,WAAW,EACX,aAAa,EACb,oBAAoB,EACpB,gBAAgB,GACjB,MAAM,iBAAiB,CAAC;AAEzB,OAAO,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AACrD,YAAY,EACV,iBAAiB,EACjB,WAAW,EACX,kBAAkB,EAClB,cAAc,EACd,cAAc,GACf,MAAM,mBAAmB,CAAC;AAE3B,OAAO,EAAE,sBAAsB,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AACzE,YAAY,EAAE,eAAe,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAEtF,OAAO,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AACnD,YAAY,EAAE,YAAY,EAAE,WAAW,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAE7F,OAAO,EAAE,0BAA0B,EAAE,MAAM,wBAAwB,CAAC;AACpE,YAAY,EACV,mBAAmB,EACnB,uBAAuB,EACvB,sBAAsB,EACtB,kBAAkB,EAClB,iBAAiB,EACjB,0BAA0B,EAC1B,kBAAkB,GACnB,MAAM,wBAAwB,CAAC;AAEhC,OAAO,EACL,kBAAkB,EAClB,aAAa,EACb,UAAU,EACV,cAAc,EACd,cAAc,EACd,gBAAgB,EAChB,uBAAuB,GACxB,MAAM,cAAc,CAAC;AACtB,YAAY,EACV,aAAa,EACb,cAAc,EACd,WAAW,EACX,aAAa,EACb,WAAW,EACX,WAAW,EACX,iBAAiB,GAClB,MAAM,cAAc,CAAC;AAEtB,OAAO,EAAE,gBAAgB,EAAE,YAAY,EAAE,sBAAsB,EAAE,MAAM,UAAU,CAAC;AAClF,YAAY,EACV,aAAa,EACb,eAAe,EACf,QAAQ,EACR,WAAW,EACX,UAAU,EACV,cAAc,EACd,OAAO,EACP,SAAS,GACV,MAAM,UAAU,CAAC"}
@@ -0,0 +1,9 @@
1
+ export { fileScopedNodes, FILE_SCOPED_NODE_TYPES } from "./nodes.js";
2
+ export { scanMigrations, readMigration, classifyStatement, statements, } from "./migrations.js";
3
+ export { buildConfigGraph } from "./config-graph.js";
4
+ export { checkRollbackReadiness, readMigrationOps } from "./rollback.js";
5
+ export { checkRouteDrift } from "./route-drift.js";
6
+ export { runJoinSubstitutionControl } from "./join-substitution.js";
7
+ export { scanConfigSurfaces, skipDirectory, readDotenv, readImageBuild, readStructured, readWranglerVars, readWranglerVarsEntries, } from "./sources.js";
8
+ export { checkEnvironment, readEnvReads, DEFAULT_COVERAGE_FLOOR } from "./env.js";
9
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/validation/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,sBAAsB,EAAE,MAAM,YAAY,CAAC;AAErE,OAAO,EACL,cAAc,EACd,aAAa,EACb,iBAAiB,EACjB,UAAU,GACX,MAAM,iBAAiB,CAAC;AAUzB,OAAO,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AASrD,OAAO,EAAE,sBAAsB,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AAGzE,OAAO,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AAGnD,OAAO,EAAE,0BAA0B,EAAE,MAAM,wBAAwB,CAAC;AAWpE,OAAO,EACL,kBAAkB,EAClB,aAAa,EACb,UAAU,EACV,cAAc,EACd,cAAc,EACd,gBAAgB,EAChB,uBAAuB,GACxB,MAAM,cAAc,CAAC;AAWtB,OAAO,EAAE,gBAAgB,EAAE,YAAY,EAAE,sBAAsB,EAAE,MAAM,UAAU,CAAC"}