@maverickcer/env-cap 0.2.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 (195) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +279 -0
  3. package/dist/.dts/build/assemble-project.d.ts +47 -0
  4. package/dist/.dts/build/assemble-project.d.ts.map +1 -0
  5. package/dist/.dts/build/change-model.d.ts +62 -0
  6. package/dist/.dts/build/change-model.d.ts.map +1 -0
  7. package/dist/.dts/build/check-artifacts.d.ts +48 -0
  8. package/dist/.dts/build/check-artifacts.d.ts.map +1 -0
  9. package/dist/.dts/build/citation-verification.d.ts +62 -0
  10. package/dist/.dts/build/citation-verification.d.ts.map +1 -0
  11. package/dist/.dts/build/compatibility.d.ts +76 -0
  12. package/dist/.dts/build/compatibility.d.ts.map +1 -0
  13. package/dist/.dts/build/contract-model.d.ts +92 -0
  14. package/dist/.dts/build/contract-model.d.ts.map +1 -0
  15. package/dist/.dts/build/deep-equal.d.ts +9 -0
  16. package/dist/.dts/build/deep-equal.d.ts.map +1 -0
  17. package/dist/.dts/build/deep-freeze.d.ts +20 -0
  18. package/dist/.dts/build/deep-freeze.d.ts.map +1 -0
  19. package/dist/.dts/build/dependency-graph.d.ts +168 -0
  20. package/dist/.dts/build/dependency-graph.d.ts.map +1 -0
  21. package/dist/.dts/build/dependency-model.d.ts +79 -0
  22. package/dist/.dts/build/dependency-model.d.ts.map +1 -0
  23. package/dist/.dts/build/discover.d.ts +25 -0
  24. package/dist/.dts/build/discover.d.ts.map +1 -0
  25. package/dist/.dts/build/display-path.d.ts +24 -0
  26. package/dist/.dts/build/display-path.d.ts.map +1 -0
  27. package/dist/.dts/build/docs.d.ts +176 -0
  28. package/dist/.dts/build/docs.d.ts.map +1 -0
  29. package/dist/.dts/build/env-example.d.ts +85 -0
  30. package/dist/.dts/build/env-example.d.ts.map +1 -0
  31. package/dist/.dts/build/errors.d.ts +78 -0
  32. package/dist/.dts/build/errors.d.ts.map +1 -0
  33. package/dist/.dts/build/evidence-cache.d.ts +74 -0
  34. package/dist/.dts/build/evidence-cache.d.ts.map +1 -0
  35. package/dist/.dts/build/evidence-model.d.ts +50 -0
  36. package/dist/.dts/build/evidence-model.d.ts.map +1 -0
  37. package/dist/.dts/build/evidence-reference.d.ts +67 -0
  38. package/dist/.dts/build/evidence-reference.d.ts.map +1 -0
  39. package/dist/.dts/build/evidence-snapshot.d.ts +123 -0
  40. package/dist/.dts/build/evidence-snapshot.d.ts.map +1 -0
  41. package/dist/.dts/build/exclusive-group.d.ts +19 -0
  42. package/dist/.dts/build/exclusive-group.d.ts.map +1 -0
  43. package/dist/.dts/build/finding-model.d.ts +79 -0
  44. package/dist/.dts/build/finding-model.d.ts.map +1 -0
  45. package/dist/.dts/build/generate-documentation.d.ts +176 -0
  46. package/dist/.dts/build/generate-documentation.d.ts.map +1 -0
  47. package/dist/.dts/build/generate-env-artifacts.d.ts +176 -0
  48. package/dist/.dts/build/generate-env-artifacts.d.ts.map +1 -0
  49. package/dist/.dts/build/generate-evidence.d.ts +77 -0
  50. package/dist/.dts/build/generate-evidence.d.ts.map +1 -0
  51. package/dist/.dts/build/generate-manifest.d.ts +101 -0
  52. package/dist/.dts/build/generate-manifest.d.ts.map +1 -0
  53. package/dist/.dts/build/generate-usage.d.ts +95 -0
  54. package/dist/.dts/build/generate-usage.d.ts.map +1 -0
  55. package/dist/.dts/build/generated-banner.d.ts +52 -0
  56. package/dist/.dts/build/generated-banner.d.ts.map +1 -0
  57. package/dist/.dts/build/glob.d.ts +18 -0
  58. package/dist/.dts/build/glob.d.ts.map +1 -0
  59. package/dist/.dts/build/governance-fields.d.ts +34 -0
  60. package/dist/.dts/build/governance-fields.d.ts.map +1 -0
  61. package/dist/.dts/build/humanize-key.d.ts +14 -0
  62. package/dist/.dts/build/humanize-key.d.ts.map +1 -0
  63. package/dist/.dts/build/index.d.ts +107 -0
  64. package/dist/.dts/build/index.d.ts.map +1 -0
  65. package/dist/.dts/build/lifecycle-model.d.ts +64 -0
  66. package/dist/.dts/build/lifecycle-model.d.ts.map +1 -0
  67. package/dist/.dts/build/link.d.ts +215 -0
  68. package/dist/.dts/build/link.d.ts.map +1 -0
  69. package/dist/.dts/build/literal-eval.d.ts +23 -0
  70. package/dist/.dts/build/literal-eval.d.ts.map +1 -0
  71. package/dist/.dts/build/live-expirations.d.ts +47 -0
  72. package/dist/.dts/build/live-expirations.d.ts.map +1 -0
  73. package/dist/.dts/build/manifest-snapshot.d.ts +229 -0
  74. package/dist/.dts/build/manifest-snapshot.d.ts.map +1 -0
  75. package/dist/.dts/build/manifest.d.ts +31 -0
  76. package/dist/.dts/build/manifest.d.ts.map +1 -0
  77. package/dist/.dts/build/map-utils.d.ts +8 -0
  78. package/dist/.dts/build/map-utils.d.ts.map +1 -0
  79. package/dist/.dts/build/ownership-model.d.ts +57 -0
  80. package/dist/.dts/build/ownership-model.d.ts.map +1 -0
  81. package/dist/.dts/build/parse.d.ts +199 -0
  82. package/dist/.dts/build/parse.d.ts.map +1 -0
  83. package/dist/.dts/build/reference-projections.d.ts +156 -0
  84. package/dist/.dts/build/reference-projections.d.ts.map +1 -0
  85. package/dist/.dts/build/resolution/resolve-import.d.ts +53 -0
  86. package/dist/.dts/build/resolution/resolve-import.d.ts.map +1 -0
  87. package/dist/.dts/build/resolution/resolve-package-schema.d.ts +83 -0
  88. package/dist/.dts/build/resolution/resolve-package-schema.d.ts.map +1 -0
  89. package/dist/.dts/build/resolution/resolve-tsconfig-paths.d.ts +101 -0
  90. package/dist/.dts/build/resolution/resolve-tsconfig-paths.d.ts.map +1 -0
  91. package/dist/.dts/build/resolution/resolve-within-root.d.ts +35 -0
  92. package/dist/.dts/build/resolution/resolve-within-root.d.ts.map +1 -0
  93. package/dist/.dts/build/resolve-import.d.ts +50 -0
  94. package/dist/.dts/build/resolve-import.d.ts.map +1 -0
  95. package/dist/.dts/build/resolve-package-schema.d.ts +99 -0
  96. package/dist/.dts/build/resolve-package-schema.d.ts.map +1 -0
  97. package/dist/.dts/build/resolve-tsconfig-paths.d.ts +100 -0
  98. package/dist/.dts/build/resolve-tsconfig-paths.d.ts.map +1 -0
  99. package/dist/.dts/build/resolve-within-root.d.ts +35 -0
  100. package/dist/.dts/build/resolve-within-root.d.ts.map +1 -0
  101. package/dist/.dts/build/sarif.d.ts +66 -0
  102. package/dist/.dts/build/sarif.d.ts.map +1 -0
  103. package/dist/.dts/build/scan-dependencies.d.ts +47 -0
  104. package/dist/.dts/build/scan-dependencies.d.ts.map +1 -0
  105. package/dist/.dts/build/sort-by-identity.d.ts +14 -0
  106. package/dist/.dts/build/sort-by-identity.d.ts.map +1 -0
  107. package/dist/.dts/build/source-position.d.ts +69 -0
  108. package/dist/.dts/build/source-position.d.ts.map +1 -0
  109. package/dist/.dts/build/tool-version.d.ts +8 -0
  110. package/dist/.dts/build/tool-version.d.ts.map +1 -0
  111. package/dist/.dts/build/types.d.ts +53 -0
  112. package/dist/.dts/build/types.d.ts.map +1 -0
  113. package/dist/.dts/build/usage-report.d.ts +124 -0
  114. package/dist/.dts/build/usage-report.d.ts.map +1 -0
  115. package/dist/.dts/cli/filesystem.d.ts +3 -0
  116. package/dist/.dts/cli/filesystem.d.ts.map +1 -0
  117. package/dist/.dts/eslint-plugin/glob.d.ts +18 -0
  118. package/dist/.dts/eslint-plugin/glob.d.ts.map +1 -0
  119. package/dist/.dts/eslint-plugin/index.d.ts +27 -0
  120. package/dist/.dts/eslint-plugin/index.d.ts.map +1 -0
  121. package/dist/.dts/eslint-plugin/no-node-fs.d.ts +25 -0
  122. package/dist/.dts/eslint-plugin/no-node-fs.d.ts.map +1 -0
  123. package/dist/.dts/eslint-plugin/no-raw-process-env.d.ts +23 -0
  124. package/dist/.dts/eslint-plugin/no-raw-process-env.d.ts.map +1 -0
  125. package/dist/.dts/evidence/define-projection.d.ts +51 -0
  126. package/dist/.dts/evidence/define-projection.d.ts.map +1 -0
  127. package/dist/.dts/evidence/index.d.ts +23 -0
  128. package/dist/.dts/evidence/index.d.ts.map +1 -0
  129. package/dist/.dts/helpers/index.d.ts +135 -0
  130. package/dist/.dts/helpers/index.d.ts.map +1 -0
  131. package/dist/.dts/helpers/processors.d.ts +32 -0
  132. package/dist/.dts/helpers/processors.d.ts.map +1 -0
  133. package/dist/.dts/helpers/validators.d.ts +68 -0
  134. package/dist/.dts/helpers/validators.d.ts.map +1 -0
  135. package/dist/.dts/node/index.d.ts +2 -0
  136. package/dist/.dts/node/index.d.ts.map +1 -0
  137. package/dist/.dts/runtime/cache.d.ts +20 -0
  138. package/dist/.dts/runtime/cache.d.ts.map +1 -0
  139. package/dist/.dts/runtime/create.d.ts +20 -0
  140. package/dist/.dts/runtime/create.d.ts.map +1 -0
  141. package/dist/.dts/runtime/document.d.ts +181 -0
  142. package/dist/.dts/runtime/document.d.ts.map +1 -0
  143. package/dist/.dts/runtime/errors.d.ts +55 -0
  144. package/dist/.dts/runtime/errors.d.ts.map +1 -0
  145. package/dist/.dts/runtime/index.d.ts +24 -0
  146. package/dist/.dts/runtime/index.d.ts.map +1 -0
  147. package/dist/.dts/runtime/registry.d.ts +12 -0
  148. package/dist/.dts/runtime/registry.d.ts.map +1 -0
  149. package/dist/.dts/runtime/reset.d.ts +8 -0
  150. package/dist/.dts/runtime/reset.d.ts.map +1 -0
  151. package/dist/.dts/runtime/types.d.ts +175 -0
  152. package/dist/.dts/runtime/types.d.ts.map +1 -0
  153. package/dist/.dts/runtime/validate.d.ts +14 -0
  154. package/dist/.dts/runtime/validate.d.ts.map +1 -0
  155. package/dist/build.cjs +83 -0
  156. package/dist/build.cjs.map +1 -0
  157. package/dist/build.d.cts +1 -0
  158. package/dist/build.d.ts +1 -0
  159. package/dist/build.js +19 -0
  160. package/dist/build.js.map +1 -0
  161. package/dist/cli/index.js +134 -0
  162. package/dist/cli/index.js.map +1 -0
  163. package/dist/eslint-plugin/index.cjs +12 -0
  164. package/dist/eslint-plugin/index.cjs.map +1 -0
  165. package/dist/eslint-plugin/index.d.cts +1 -0
  166. package/dist/eslint-plugin/index.d.ts +1 -0
  167. package/dist/eslint-plugin/index.js +5 -0
  168. package/dist/eslint-plugin/index.js.map +1 -0
  169. package/dist/evidence.cjs +7 -0
  170. package/dist/evidence.cjs.map +1 -0
  171. package/dist/evidence.d.cts +1 -0
  172. package/dist/evidence.d.ts +1 -0
  173. package/dist/evidence.js +5 -0
  174. package/dist/evidence.js.map +1 -0
  175. package/dist/helpers.cjs +8 -0
  176. package/dist/helpers.cjs.map +1 -0
  177. package/dist/helpers.d.cts +1 -0
  178. package/dist/helpers.d.ts +1 -0
  179. package/dist/helpers.js +5 -0
  180. package/dist/helpers.js.map +1 -0
  181. package/dist/index.cjs +15 -0
  182. package/dist/index.cjs.map +1 -0
  183. package/dist/index.d.cts +1 -0
  184. package/dist/index.d.ts +1 -0
  185. package/dist/index.js +7 -0
  186. package/dist/index.js.map +1 -0
  187. package/dist/node.cjs +13 -0
  188. package/dist/node.cjs.map +1 -0
  189. package/dist/node.d.cts +1 -0
  190. package/dist/node.d.ts +1 -0
  191. package/dist/node.js +7 -0
  192. package/dist/node.js.map +1 -0
  193. package/package.json +183 -0
  194. package/schemas/contract-model.schema.json +321 -0
  195. package/schemas/env-cap-report.schema.json +2369 -0
package/package.json ADDED
@@ -0,0 +1,183 @@
1
+ {
2
+ "name": "@maverickcer/env-cap",
3
+ "version": "0.2.0",
4
+ "description": "Secure, type-safe, framework-agnostic environment contracts. Contracts own the environment variables they consume; the package provides runtime validation and build-time contract discovery.",
5
+ "keywords": [
6
+ "environment",
7
+ "env",
8
+ "config",
9
+ "configuration",
10
+ "documentation",
11
+ "validation",
12
+ "typescript",
13
+ "schema",
14
+ "secrets",
15
+ "dotenv"
16
+ ],
17
+ "license": "MIT",
18
+ "repository": {
19
+ "type": "git",
20
+ "url": "git+https://github.com/maverickcer/env-cap.git"
21
+ },
22
+ "homepage": "https://github.com/maverickcer/env-cap#readme",
23
+ "bugs": {
24
+ "url": "https://github.com/maverickcer/env-cap/issues"
25
+ },
26
+ "author": "MaverickCER",
27
+ "type": "module",
28
+ "sideEffects": false,
29
+ "engines": {
30
+ "node": ">=18.0.0"
31
+ },
32
+ "exports": {
33
+ ".": {
34
+ "import": {
35
+ "types": "./dist/index.d.ts",
36
+ "default": "./dist/index.js"
37
+ },
38
+ "require": {
39
+ "types": "./dist/index.d.cts",
40
+ "default": "./dist/index.cjs"
41
+ }
42
+ },
43
+ "./build": {
44
+ "import": {
45
+ "types": "./dist/build.d.ts",
46
+ "default": "./dist/build.js"
47
+ },
48
+ "require": {
49
+ "types": "./dist/build.d.cts",
50
+ "default": "./dist/build.cjs"
51
+ }
52
+ },
53
+ "./helpers": {
54
+ "import": {
55
+ "types": "./dist/helpers.d.ts",
56
+ "default": "./dist/helpers.js"
57
+ },
58
+ "require": {
59
+ "types": "./dist/helpers.d.cts",
60
+ "default": "./dist/helpers.cjs"
61
+ }
62
+ },
63
+ "./node": {
64
+ "import": {
65
+ "types": "./dist/node.d.ts",
66
+ "default": "./dist/node.js"
67
+ },
68
+ "require": {
69
+ "types": "./dist/node.d.cts",
70
+ "default": "./dist/node.cjs"
71
+ }
72
+ },
73
+ "./evidence": {
74
+ "import": {
75
+ "types": "./dist/evidence.d.ts",
76
+ "default": "./dist/evidence.js"
77
+ },
78
+ "require": {
79
+ "types": "./dist/evidence.d.cts",
80
+ "default": "./dist/evidence.cjs"
81
+ }
82
+ },
83
+ "./eslint-plugin": {
84
+ "import": {
85
+ "types": "./dist/eslint-plugin/index.d.ts",
86
+ "default": "./dist/eslint-plugin/index.js"
87
+ },
88
+ "require": {
89
+ "types": "./dist/eslint-plugin/index.d.cts",
90
+ "default": "./dist/eslint-plugin/index.cjs"
91
+ }
92
+ },
93
+ "./schema": "./schemas/env-cap-report.schema.json",
94
+ "./schema/*": "./schemas/*.schema.json",
95
+ "./package.json": "./package.json"
96
+ },
97
+ "main": "./dist/index.cjs",
98
+ "module": "./dist/index.js",
99
+ "types": "./dist/index.d.ts",
100
+ "bin": {
101
+ "env-cap": "./dist/cli/index.js"
102
+ },
103
+ "files": [
104
+ "dist",
105
+ "schemas",
106
+ "README.md",
107
+ "LICENSE"
108
+ ],
109
+ "scripts": {
110
+ "build": "tsup && tsc -p tsconfig.build.json && node scripts/emit-dts-shims.mjs && node scripts/fix-eslint-plugin-cjs-interop.mjs",
111
+ "prepare": "npm run build",
112
+ "dev": "tsup --watch",
113
+ "typecheck": "tsc --noEmit -p tsconfig.json",
114
+ "test": "vitest run",
115
+ "test:coverage": "vitest run --coverage",
116
+ "test:watch": "vitest",
117
+ "contract": "internal-package-contract",
118
+ "lint": "eslint .",
119
+ "format": "prettier --write .",
120
+ "format:check": "prettier --check .",
121
+ "setup": "npm install && npm run build && npm run schema",
122
+ "size": "node scripts/check-size.mjs",
123
+ "verify:no-ambient-fs": "node scripts/verify-no-ambient-fs.mjs",
124
+ "schema": "node scripts/generate-json-schema.mjs",
125
+ "examples:update-golden": "node scripts/update-example-goldens.mjs",
126
+ "benchmark": "node scripts/run-benchmarks.mjs",
127
+ "docs:api": "typedoc",
128
+ "docs:api:report": "typedoc --options typedoc.markdown.json",
129
+ "docs:api:report:check": "node scripts/check-api-report.mjs",
130
+ "stage": "npm run typecheck && npm run build && npm run test && npm run size",
131
+ "precommit": "npm run typecheck && npm run lint && npm run format && npm run build && npm run schema && npm run test:coverage && npm run size && npm run verify:no-ambient-fs && npm run docs:api:report:check",
132
+ "verify": "npm run typecheck && npm run lint && npm run format:check && npm run build && npm run schema && npm run test:coverage && npm run size && npm run verify:no-ambient-fs && npm run docs:api:report:check",
133
+ "prepublishOnly": "npm run verify",
134
+ "version": "changeset version",
135
+ "release": "changeset publish"
136
+ },
137
+ "peerDependencies": {
138
+ "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0",
139
+ "typescript": "^5.0.0"
140
+ },
141
+ "peerDependenciesMeta": {
142
+ "typescript": {
143
+ "optional": true
144
+ },
145
+ "eslint": {
146
+ "optional": true
147
+ }
148
+ },
149
+ "devDependencies": {
150
+ "@changesets/cli": "^2.31.1",
151
+ "@eslint/js": "^10.0.1",
152
+ "@types/node": "^18.0.0",
153
+ "@typescript-eslint/types": "^8.65.0",
154
+ "@typescript-eslint/utils": "^8.65.0",
155
+ "@vitest/coverage-v8": "^3.2.7",
156
+ "ajv": "^8.20.0",
157
+ "esbuild": "^0.28.1",
158
+ "eslint": "^10.8.0",
159
+ "eslint-config-prettier": "10.1.8",
160
+ "globals": "^17.9.0",
161
+ "internal-package-contract": "git+https://github.com/MaverickCER/internal-package-contract.git#main",
162
+ "prettier": "3.9.6",
163
+ "ts-json-schema-generator": "^2.9.0",
164
+ "tsup": "^8.0.0",
165
+ "typedoc": "^0.28.20",
166
+ "typedoc-plugin-markdown": "4.13.0",
167
+ "typescript": "^5.0.0",
168
+ "typescript-eslint": "^8.65.0",
169
+ "vitest": "^3.2.7"
170
+ },
171
+ "overrides": {
172
+ "esbuild": "^0.28.1",
173
+ "fast-uri": "^3.1.6",
174
+ "nanoid": "^3.3.18"
175
+ },
176
+ "publishConfig": {
177
+ "access": "public"
178
+ },
179
+ "allowScripts": {
180
+ "esbuild@0.28.1": true,
181
+ "fsevents@2.3.3": true
182
+ }
183
+ }
@@ -0,0 +1,321 @@
1
+ {
2
+ "$schema": "http://json-schema.org/draft-07/schema#",
3
+ "$id": "https://maverickcer.github.io/env-cap/schema/contract-model.schema.json",
4
+ "title": "env-cap Contract Model",
5
+ "description": "Canonical, versioned projection of every declared environment-variable contract, active or not (see ADR 0024, ADR 0025). Generated from src/build/contract-model.ts's ContractModel type -- never hand-authored.",
6
+ "$ref": "#/definitions/ContractModel",
7
+ "definitions": {
8
+ "ContractModel": {
9
+ "type": "object",
10
+ "properties": {
11
+ "schemaVersion": {
12
+ "type": "number",
13
+ "const": 3
14
+ },
15
+ "contracts": {
16
+ "type": "array",
17
+ "items": {
18
+ "$ref": "#/definitions/ContractModelContract"
19
+ }
20
+ }
21
+ },
22
+ "required": [
23
+ "schemaVersion",
24
+ "contracts"
25
+ ],
26
+ "additionalProperties": false
27
+ },
28
+ "ContractModelContract": {
29
+ "type": "object",
30
+ "properties": {
31
+ "owner": {
32
+ "type": "string"
33
+ },
34
+ "sensitivity": {
35
+ "type": "string"
36
+ },
37
+ "expiresAt": {
38
+ "type": "string"
39
+ },
40
+ "purpose": {
41
+ "type": "string"
42
+ },
43
+ "legalBasis": {
44
+ "type": "string"
45
+ },
46
+ "retention": {
47
+ "type": "string"
48
+ },
49
+ "dataResidency": {
50
+ "anyOf": [
51
+ {
52
+ "type": "string"
53
+ },
54
+ {
55
+ "type": "array",
56
+ "items": {
57
+ "type": "string"
58
+ }
59
+ }
60
+ ]
61
+ },
62
+ "auditRequired": {
63
+ "type": "boolean"
64
+ },
65
+ "metadata": {
66
+ "type": "object",
67
+ "additionalProperties": {}
68
+ },
69
+ "file": {
70
+ "type": "string",
71
+ "description": "Root-relative, POSIX-separated -- matches `DiscoveredContractSummary.file`."
72
+ },
73
+ "exportName": {
74
+ "type": "string"
75
+ },
76
+ "contractName": {
77
+ "type": "string"
78
+ },
79
+ "active": {
80
+ "type": "boolean"
81
+ },
82
+ "category": {
83
+ "type": "string"
84
+ },
85
+ "exclusiveGroup": {
86
+ "type": "string"
87
+ },
88
+ "variables": {
89
+ "type": "array",
90
+ "items": {
91
+ "$ref": "#/definitions/ContractModelVariable"
92
+ }
93
+ },
94
+ "documented": {
95
+ "type": "boolean"
96
+ },
97
+ "packageOrigin": {
98
+ "$ref": "#/definitions/PackageOrigin"
99
+ },
100
+ "declaration": {
101
+ "$ref": "#/definitions/SourcePosition",
102
+ "description": "Where this contract's `createEnv(...)` call is declared. Always present. See ADR 0036."
103
+ },
104
+ "documentation": {
105
+ "$ref": "#/definitions/SourcePosition",
106
+ "description": "Where this contract's `documentEnv(...)` call is declared, if one exists. See ADR 0036."
107
+ }
108
+ },
109
+ "required": [
110
+ "file",
111
+ "exportName",
112
+ "contractName",
113
+ "active",
114
+ "variables",
115
+ "documented",
116
+ "declaration"
117
+ ],
118
+ "additionalProperties": false,
119
+ "description": "One `createEnv()` contract's full statically-discoverable contract, active or not."
120
+ },
121
+ "ContractModelVariable": {
122
+ "type": "object",
123
+ "properties": {
124
+ "owner": {
125
+ "type": "string"
126
+ },
127
+ "sensitivity": {
128
+ "type": "string"
129
+ },
130
+ "expiresAt": {
131
+ "type": "string"
132
+ },
133
+ "purpose": {
134
+ "type": "string"
135
+ },
136
+ "legalBasis": {
137
+ "type": "string"
138
+ },
139
+ "retention": {
140
+ "type": "string"
141
+ },
142
+ "dataResidency": {
143
+ "anyOf": [
144
+ {
145
+ "type": "string"
146
+ },
147
+ {
148
+ "type": "array",
149
+ "items": {
150
+ "type": "string"
151
+ }
152
+ }
153
+ ]
154
+ },
155
+ "auditRequired": {
156
+ "type": "boolean"
157
+ },
158
+ "metadata": {
159
+ "type": "object",
160
+ "additionalProperties": {}
161
+ },
162
+ "key": {
163
+ "type": "string"
164
+ },
165
+ "hasDefault": {
166
+ "type": "boolean"
167
+ },
168
+ "defaultValue": {
169
+ "anyOf": [
170
+ {
171
+ "type": "object",
172
+ "properties": {
173
+ "ok": {
174
+ "type": "boolean",
175
+ "const": true
176
+ },
177
+ "value": {}
178
+ },
179
+ "required": [
180
+ "ok",
181
+ "value"
182
+ ],
183
+ "additionalProperties": false
184
+ },
185
+ {
186
+ "type": "object",
187
+ "properties": {
188
+ "ok": {
189
+ "type": "boolean",
190
+ "const": false
191
+ }
192
+ },
193
+ "required": [
194
+ "ok"
195
+ ],
196
+ "additionalProperties": false
197
+ }
198
+ ]
199
+ },
200
+ "hasProcessor": {
201
+ "type": "boolean"
202
+ },
203
+ "processorSource": {
204
+ "type": "string"
205
+ },
206
+ "processorReturnType": {
207
+ "type": "string"
208
+ },
209
+ "hasValidator": {
210
+ "type": "boolean"
211
+ },
212
+ "validatorSource": {
213
+ "type": "string"
214
+ },
215
+ "context": {
216
+ "type": "string"
217
+ },
218
+ "description": {
219
+ "type": "string"
220
+ },
221
+ "refreshInstructions": {
222
+ "type": "string"
223
+ },
224
+ "setupInstructions": {
225
+ "type": "string"
226
+ },
227
+ "required": {
228
+ "type": "boolean"
229
+ },
230
+ "documented": {
231
+ "type": "boolean"
232
+ },
233
+ "evidence": {
234
+ "$ref": "#/definitions/DiscoveredVariableEvidence",
235
+ "description": "The `evidence` sub-object from this variable's linked documentation -- re-verified every run, unlike every declared-only field above. See runtime.VariableEvidenceDocs and ADR 0037."
236
+ },
237
+ "declaration": {
238
+ "$ref": "#/definitions/SourcePosition",
239
+ "description": "Where this variable's own schema property is declared. See ADR 0036."
240
+ }
241
+ },
242
+ "required": [
243
+ "key",
244
+ "hasDefault",
245
+ "hasProcessor",
246
+ "hasValidator",
247
+ "documented",
248
+ "declaration"
249
+ ],
250
+ "additionalProperties": false,
251
+ "description": "One variable's full statically-discoverable contract: schema-shaped facts plus linked documentation."
252
+ },
253
+ "DiscoveredVariableEvidence": {
254
+ "type": "object",
255
+ "properties": {
256
+ "dynamicAccess": {
257
+ "type": "array",
258
+ "items": {
259
+ "type": "string"
260
+ },
261
+ "description": "Well-formed `\"path:line:column\"` entries from `evidence.dynamicAccess`, if set to an array of string literals -- a malformed entry warns and is dropped, never included here. See ADR 0037."
262
+ }
263
+ },
264
+ "additionalProperties": false,
265
+ "description": "The statically-extracted contents of one variable's `evidence` sub-object. See runtime.VariableEvidenceDocs."
266
+ },
267
+ "SourcePosition": {
268
+ "type": "object",
269
+ "properties": {
270
+ "file": {
271
+ "type": "string",
272
+ "description": "Root-relative, POSIX-separated."
273
+ },
274
+ "line": {
275
+ "type": "number",
276
+ "description": "1-indexed line number."
277
+ },
278
+ "column": {
279
+ "type": "number",
280
+ "description": "1-indexed column number."
281
+ }
282
+ },
283
+ "required": [
284
+ "file",
285
+ "line",
286
+ "column"
287
+ ],
288
+ "additionalProperties": false,
289
+ "description": "A precise pointer into a source file -- the shared shape every exact-position fact in the build pipeline (declaration sites, usage sites, dynamic-access sites) uses, so a consumer never has to reconcile three ad hoc `{ file; line; column }` shapes that happen to mean the same thing. See ADR 0036."
290
+ },
291
+ "PackageOrigin": {
292
+ "type": "object",
293
+ "properties": {
294
+ "packageName": {
295
+ "type": "string",
296
+ "description": "The allow-listed package name that declared this schema."
297
+ },
298
+ "declaredField": {
299
+ "type": "string",
300
+ "description": "The `\"envCap.schema\"` value exactly as the package author wrote it."
301
+ },
302
+ "resolvedFile": {
303
+ "type": "string",
304
+ "description": "Absolute, realpath-canonicalized path to the resolved schema file."
305
+ },
306
+ "packageDir": {
307
+ "type": "string",
308
+ "description": "Absolute, realpath-canonicalized path to the package's own directory."
309
+ }
310
+ },
311
+ "required": [
312
+ "packageName",
313
+ "declaredField",
314
+ "resolvedFile",
315
+ "packageDir"
316
+ ],
317
+ "additionalProperties": false,
318
+ "description": "Both the authored and resolved forms are kept -- diagnostics benefit from showing exactly what a package author wrote versus what it resolved to."
319
+ }
320
+ }
321
+ }