@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.
- package/LICENSE +21 -0
- package/README.md +279 -0
- package/dist/.dts/build/assemble-project.d.ts +47 -0
- package/dist/.dts/build/assemble-project.d.ts.map +1 -0
- package/dist/.dts/build/change-model.d.ts +62 -0
- package/dist/.dts/build/change-model.d.ts.map +1 -0
- package/dist/.dts/build/check-artifacts.d.ts +48 -0
- package/dist/.dts/build/check-artifacts.d.ts.map +1 -0
- package/dist/.dts/build/citation-verification.d.ts +62 -0
- package/dist/.dts/build/citation-verification.d.ts.map +1 -0
- package/dist/.dts/build/compatibility.d.ts +76 -0
- package/dist/.dts/build/compatibility.d.ts.map +1 -0
- package/dist/.dts/build/contract-model.d.ts +92 -0
- package/dist/.dts/build/contract-model.d.ts.map +1 -0
- package/dist/.dts/build/deep-equal.d.ts +9 -0
- package/dist/.dts/build/deep-equal.d.ts.map +1 -0
- package/dist/.dts/build/deep-freeze.d.ts +20 -0
- package/dist/.dts/build/deep-freeze.d.ts.map +1 -0
- package/dist/.dts/build/dependency-graph.d.ts +168 -0
- package/dist/.dts/build/dependency-graph.d.ts.map +1 -0
- package/dist/.dts/build/dependency-model.d.ts +79 -0
- package/dist/.dts/build/dependency-model.d.ts.map +1 -0
- package/dist/.dts/build/discover.d.ts +25 -0
- package/dist/.dts/build/discover.d.ts.map +1 -0
- package/dist/.dts/build/display-path.d.ts +24 -0
- package/dist/.dts/build/display-path.d.ts.map +1 -0
- package/dist/.dts/build/docs.d.ts +176 -0
- package/dist/.dts/build/docs.d.ts.map +1 -0
- package/dist/.dts/build/env-example.d.ts +85 -0
- package/dist/.dts/build/env-example.d.ts.map +1 -0
- package/dist/.dts/build/errors.d.ts +78 -0
- package/dist/.dts/build/errors.d.ts.map +1 -0
- package/dist/.dts/build/evidence-cache.d.ts +74 -0
- package/dist/.dts/build/evidence-cache.d.ts.map +1 -0
- package/dist/.dts/build/evidence-model.d.ts +50 -0
- package/dist/.dts/build/evidence-model.d.ts.map +1 -0
- package/dist/.dts/build/evidence-reference.d.ts +67 -0
- package/dist/.dts/build/evidence-reference.d.ts.map +1 -0
- package/dist/.dts/build/evidence-snapshot.d.ts +123 -0
- package/dist/.dts/build/evidence-snapshot.d.ts.map +1 -0
- package/dist/.dts/build/exclusive-group.d.ts +19 -0
- package/dist/.dts/build/exclusive-group.d.ts.map +1 -0
- package/dist/.dts/build/finding-model.d.ts +79 -0
- package/dist/.dts/build/finding-model.d.ts.map +1 -0
- package/dist/.dts/build/generate-documentation.d.ts +176 -0
- package/dist/.dts/build/generate-documentation.d.ts.map +1 -0
- package/dist/.dts/build/generate-env-artifacts.d.ts +176 -0
- package/dist/.dts/build/generate-env-artifacts.d.ts.map +1 -0
- package/dist/.dts/build/generate-evidence.d.ts +77 -0
- package/dist/.dts/build/generate-evidence.d.ts.map +1 -0
- package/dist/.dts/build/generate-manifest.d.ts +101 -0
- package/dist/.dts/build/generate-manifest.d.ts.map +1 -0
- package/dist/.dts/build/generate-usage.d.ts +95 -0
- package/dist/.dts/build/generate-usage.d.ts.map +1 -0
- package/dist/.dts/build/generated-banner.d.ts +52 -0
- package/dist/.dts/build/generated-banner.d.ts.map +1 -0
- package/dist/.dts/build/glob.d.ts +18 -0
- package/dist/.dts/build/glob.d.ts.map +1 -0
- package/dist/.dts/build/governance-fields.d.ts +34 -0
- package/dist/.dts/build/governance-fields.d.ts.map +1 -0
- package/dist/.dts/build/humanize-key.d.ts +14 -0
- package/dist/.dts/build/humanize-key.d.ts.map +1 -0
- package/dist/.dts/build/index.d.ts +107 -0
- package/dist/.dts/build/index.d.ts.map +1 -0
- package/dist/.dts/build/lifecycle-model.d.ts +64 -0
- package/dist/.dts/build/lifecycle-model.d.ts.map +1 -0
- package/dist/.dts/build/link.d.ts +215 -0
- package/dist/.dts/build/link.d.ts.map +1 -0
- package/dist/.dts/build/literal-eval.d.ts +23 -0
- package/dist/.dts/build/literal-eval.d.ts.map +1 -0
- package/dist/.dts/build/live-expirations.d.ts +47 -0
- package/dist/.dts/build/live-expirations.d.ts.map +1 -0
- package/dist/.dts/build/manifest-snapshot.d.ts +229 -0
- package/dist/.dts/build/manifest-snapshot.d.ts.map +1 -0
- package/dist/.dts/build/manifest.d.ts +31 -0
- package/dist/.dts/build/manifest.d.ts.map +1 -0
- package/dist/.dts/build/map-utils.d.ts +8 -0
- package/dist/.dts/build/map-utils.d.ts.map +1 -0
- package/dist/.dts/build/ownership-model.d.ts +57 -0
- package/dist/.dts/build/ownership-model.d.ts.map +1 -0
- package/dist/.dts/build/parse.d.ts +199 -0
- package/dist/.dts/build/parse.d.ts.map +1 -0
- package/dist/.dts/build/reference-projections.d.ts +156 -0
- package/dist/.dts/build/reference-projections.d.ts.map +1 -0
- package/dist/.dts/build/resolution/resolve-import.d.ts +53 -0
- package/dist/.dts/build/resolution/resolve-import.d.ts.map +1 -0
- package/dist/.dts/build/resolution/resolve-package-schema.d.ts +83 -0
- package/dist/.dts/build/resolution/resolve-package-schema.d.ts.map +1 -0
- package/dist/.dts/build/resolution/resolve-tsconfig-paths.d.ts +101 -0
- package/dist/.dts/build/resolution/resolve-tsconfig-paths.d.ts.map +1 -0
- package/dist/.dts/build/resolution/resolve-within-root.d.ts +35 -0
- package/dist/.dts/build/resolution/resolve-within-root.d.ts.map +1 -0
- package/dist/.dts/build/resolve-import.d.ts +50 -0
- package/dist/.dts/build/resolve-import.d.ts.map +1 -0
- package/dist/.dts/build/resolve-package-schema.d.ts +99 -0
- package/dist/.dts/build/resolve-package-schema.d.ts.map +1 -0
- package/dist/.dts/build/resolve-tsconfig-paths.d.ts +100 -0
- package/dist/.dts/build/resolve-tsconfig-paths.d.ts.map +1 -0
- package/dist/.dts/build/resolve-within-root.d.ts +35 -0
- package/dist/.dts/build/resolve-within-root.d.ts.map +1 -0
- package/dist/.dts/build/sarif.d.ts +66 -0
- package/dist/.dts/build/sarif.d.ts.map +1 -0
- package/dist/.dts/build/scan-dependencies.d.ts +47 -0
- package/dist/.dts/build/scan-dependencies.d.ts.map +1 -0
- package/dist/.dts/build/sort-by-identity.d.ts +14 -0
- package/dist/.dts/build/sort-by-identity.d.ts.map +1 -0
- package/dist/.dts/build/source-position.d.ts +69 -0
- package/dist/.dts/build/source-position.d.ts.map +1 -0
- package/dist/.dts/build/tool-version.d.ts +8 -0
- package/dist/.dts/build/tool-version.d.ts.map +1 -0
- package/dist/.dts/build/types.d.ts +53 -0
- package/dist/.dts/build/types.d.ts.map +1 -0
- package/dist/.dts/build/usage-report.d.ts +124 -0
- package/dist/.dts/build/usage-report.d.ts.map +1 -0
- package/dist/.dts/cli/filesystem.d.ts +3 -0
- package/dist/.dts/cli/filesystem.d.ts.map +1 -0
- package/dist/.dts/eslint-plugin/glob.d.ts +18 -0
- package/dist/.dts/eslint-plugin/glob.d.ts.map +1 -0
- package/dist/.dts/eslint-plugin/index.d.ts +27 -0
- package/dist/.dts/eslint-plugin/index.d.ts.map +1 -0
- package/dist/.dts/eslint-plugin/no-node-fs.d.ts +25 -0
- package/dist/.dts/eslint-plugin/no-node-fs.d.ts.map +1 -0
- package/dist/.dts/eslint-plugin/no-raw-process-env.d.ts +23 -0
- package/dist/.dts/eslint-plugin/no-raw-process-env.d.ts.map +1 -0
- package/dist/.dts/evidence/define-projection.d.ts +51 -0
- package/dist/.dts/evidence/define-projection.d.ts.map +1 -0
- package/dist/.dts/evidence/index.d.ts +23 -0
- package/dist/.dts/evidence/index.d.ts.map +1 -0
- package/dist/.dts/helpers/index.d.ts +135 -0
- package/dist/.dts/helpers/index.d.ts.map +1 -0
- package/dist/.dts/helpers/processors.d.ts +32 -0
- package/dist/.dts/helpers/processors.d.ts.map +1 -0
- package/dist/.dts/helpers/validators.d.ts +68 -0
- package/dist/.dts/helpers/validators.d.ts.map +1 -0
- package/dist/.dts/node/index.d.ts +2 -0
- package/dist/.dts/node/index.d.ts.map +1 -0
- package/dist/.dts/runtime/cache.d.ts +20 -0
- package/dist/.dts/runtime/cache.d.ts.map +1 -0
- package/dist/.dts/runtime/create.d.ts +20 -0
- package/dist/.dts/runtime/create.d.ts.map +1 -0
- package/dist/.dts/runtime/document.d.ts +181 -0
- package/dist/.dts/runtime/document.d.ts.map +1 -0
- package/dist/.dts/runtime/errors.d.ts +55 -0
- package/dist/.dts/runtime/errors.d.ts.map +1 -0
- package/dist/.dts/runtime/index.d.ts +24 -0
- package/dist/.dts/runtime/index.d.ts.map +1 -0
- package/dist/.dts/runtime/registry.d.ts +12 -0
- package/dist/.dts/runtime/registry.d.ts.map +1 -0
- package/dist/.dts/runtime/reset.d.ts +8 -0
- package/dist/.dts/runtime/reset.d.ts.map +1 -0
- package/dist/.dts/runtime/types.d.ts +175 -0
- package/dist/.dts/runtime/types.d.ts.map +1 -0
- package/dist/.dts/runtime/validate.d.ts +14 -0
- package/dist/.dts/runtime/validate.d.ts.map +1 -0
- package/dist/build.cjs +83 -0
- package/dist/build.cjs.map +1 -0
- package/dist/build.d.cts +1 -0
- package/dist/build.d.ts +1 -0
- package/dist/build.js +19 -0
- package/dist/build.js.map +1 -0
- package/dist/cli/index.js +134 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/eslint-plugin/index.cjs +12 -0
- package/dist/eslint-plugin/index.cjs.map +1 -0
- package/dist/eslint-plugin/index.d.cts +1 -0
- package/dist/eslint-plugin/index.d.ts +1 -0
- package/dist/eslint-plugin/index.js +5 -0
- package/dist/eslint-plugin/index.js.map +1 -0
- package/dist/evidence.cjs +7 -0
- package/dist/evidence.cjs.map +1 -0
- package/dist/evidence.d.cts +1 -0
- package/dist/evidence.d.ts +1 -0
- package/dist/evidence.js +5 -0
- package/dist/evidence.js.map +1 -0
- package/dist/helpers.cjs +8 -0
- package/dist/helpers.cjs.map +1 -0
- package/dist/helpers.d.cts +1 -0
- package/dist/helpers.d.ts +1 -0
- package/dist/helpers.js +5 -0
- package/dist/helpers.js.map +1 -0
- package/dist/index.cjs +15 -0
- package/dist/index.cjs.map +1 -0
- package/dist/index.d.cts +1 -0
- package/dist/index.d.ts +1 -0
- package/dist/index.js +7 -0
- package/dist/index.js.map +1 -0
- package/dist/node.cjs +13 -0
- package/dist/node.cjs.map +1 -0
- package/dist/node.d.cts +1 -0
- package/dist/node.d.ts +1 -0
- package/dist/node.js +7 -0
- package/dist/node.js.map +1 -0
- package/package.json +183 -0
- package/schemas/contract-model.schema.json +321 -0
- package/schemas/env-cap-report.schema.json +2369 -0
|
@@ -0,0 +1,2369 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "http://json-schema.org/draft-07/schema#",
|
|
3
|
+
"$id": "https://maverickcer.github.io/env-cap/schema/env-cap-report.schema.json",
|
|
4
|
+
"title": "env-cap --json report",
|
|
5
|
+
"description": "Machine-readable envelope emitted by `env-cap --json` (see README's --json section and ADR 0013). Generated from src/cli/json.ts's JsonReportPayload type -- never hand-authored.",
|
|
6
|
+
"$ref": "#/definitions/JsonReportPayload",
|
|
7
|
+
"definitions": {
|
|
8
|
+
"JsonReportPayload": {
|
|
9
|
+
"anyOf": [
|
|
10
|
+
{
|
|
11
|
+
"$ref": "#/definitions/JsonSuccessPayload"
|
|
12
|
+
},
|
|
13
|
+
{
|
|
14
|
+
"$ref": "#/definitions/JsonErrorPayload"
|
|
15
|
+
}
|
|
16
|
+
],
|
|
17
|
+
"description": "The complete `--json` envelope shape, success or failure -- the target type the published JSON Schema (`schemas/env-cap-report.schema.json`, `npm run schema`) is generated from. See ADR 0019."
|
|
18
|
+
},
|
|
19
|
+
"JsonSuccessPayload": {
|
|
20
|
+
"type": "object",
|
|
21
|
+
"properties": {
|
|
22
|
+
"manifest": {
|
|
23
|
+
"$ref": "#/definitions/GenerateEnvManifestResult",
|
|
24
|
+
"description": "Set only when `options.manifest` wasn't `false`."
|
|
25
|
+
},
|
|
26
|
+
"docs": {
|
|
27
|
+
"$ref": "#/definitions/GenerateDocumentationResult",
|
|
28
|
+
"description": "Set only when `options.docs` wasn't `false`."
|
|
29
|
+
},
|
|
30
|
+
"usage": {
|
|
31
|
+
"$ref": "#/definitions/GenerateUsageReportResult",
|
|
32
|
+
"description": "Set only when `options.usage` wasn't `false`."
|
|
33
|
+
},
|
|
34
|
+
"schemaVersion": {
|
|
35
|
+
"type": "number",
|
|
36
|
+
"const": 1
|
|
37
|
+
},
|
|
38
|
+
"kind": {
|
|
39
|
+
"type": "string",
|
|
40
|
+
"const": "env-cap-report"
|
|
41
|
+
},
|
|
42
|
+
"toolVersion": {
|
|
43
|
+
"type": "string"
|
|
44
|
+
},
|
|
45
|
+
"ok": {
|
|
46
|
+
"type": "boolean",
|
|
47
|
+
"const": true
|
|
48
|
+
},
|
|
49
|
+
"requested": {
|
|
50
|
+
"$ref": "#/definitions/JsonRequestedPasses",
|
|
51
|
+
"description": "Which passes this invocation requested -- always present, so \"not requested\" is never confused with \"computed empty.\" See JsonRequestedPasses."
|
|
52
|
+
},
|
|
53
|
+
"evidence": {
|
|
54
|
+
"$ref": "#/definitions/EvidenceModel",
|
|
55
|
+
"description": "Present only when the caller actually requested `--evidence` -- `GenerateEnvArtifactsResult.evidence` itself is always populated (ADR 0038, \"free to compute, always real\"), but the `--json` envelope omits it by default so an ordinary `--location`/`--docs`/`--ownership` report doesn't silently grow by the full evidence model every time."
|
|
56
|
+
},
|
|
57
|
+
"checkResult": {
|
|
58
|
+
"type": "object",
|
|
59
|
+
"properties": {
|
|
60
|
+
"ok": {
|
|
61
|
+
"type": "boolean"
|
|
62
|
+
},
|
|
63
|
+
"stale": {
|
|
64
|
+
"type": "array",
|
|
65
|
+
"items": {
|
|
66
|
+
"type": "string"
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
},
|
|
70
|
+
"required": [
|
|
71
|
+
"ok",
|
|
72
|
+
"stale"
|
|
73
|
+
],
|
|
74
|
+
"additionalProperties": false,
|
|
75
|
+
"description": "Present only when invoked with --check. Governs --check's own pass/fail exit code, independent of this envelope's top-level `ok` (which keeps its existing, unrelated meaning: \"did generation complete without throwing\"). See ADR 0016."
|
|
76
|
+
}
|
|
77
|
+
},
|
|
78
|
+
"required": [
|
|
79
|
+
"schemaVersion",
|
|
80
|
+
"kind",
|
|
81
|
+
"toolVersion",
|
|
82
|
+
"ok",
|
|
83
|
+
"requested"
|
|
84
|
+
],
|
|
85
|
+
"additionalProperties": false,
|
|
86
|
+
"description": "The `--json` envelope for a successful run (generation completed without throwing)."
|
|
87
|
+
},
|
|
88
|
+
"GenerateEnvManifestResult": {
|
|
89
|
+
"type": "object",
|
|
90
|
+
"properties": {
|
|
91
|
+
"outputPath": {
|
|
92
|
+
"type": "string",
|
|
93
|
+
"description": "Absolute path the manifest file was written to."
|
|
94
|
+
},
|
|
95
|
+
"contracts": {
|
|
96
|
+
"type": "array",
|
|
97
|
+
"items": {
|
|
98
|
+
"$ref": "#/definitions/DiscoveredContractSummary"
|
|
99
|
+
},
|
|
100
|
+
"description": "Root-relative summary of every discovered contract, active or not."
|
|
101
|
+
},
|
|
102
|
+
"warnings": {
|
|
103
|
+
"type": "array",
|
|
104
|
+
"items": {
|
|
105
|
+
"$ref": "#/definitions/CompatibilityIssue"
|
|
106
|
+
},
|
|
107
|
+
"description": "Non-blocking compatibility/exclusive-group issues (severity `\"warning\"`)."
|
|
108
|
+
},
|
|
109
|
+
"parseWarnings": {
|
|
110
|
+
"type": "array",
|
|
111
|
+
"items": {
|
|
112
|
+
"$ref": "#/definitions/ParseWarning"
|
|
113
|
+
},
|
|
114
|
+
"description": "Parse-time warnings collected across every analyzed file (including allow-listed package resolution)."
|
|
115
|
+
}
|
|
116
|
+
},
|
|
117
|
+
"required": [
|
|
118
|
+
"outputPath",
|
|
119
|
+
"contracts",
|
|
120
|
+
"warnings",
|
|
121
|
+
"parseWarnings"
|
|
122
|
+
],
|
|
123
|
+
"additionalProperties": false,
|
|
124
|
+
"description": "The result of a completed generateEnvManifest run."
|
|
125
|
+
},
|
|
126
|
+
"DiscoveredContractSummary": {
|
|
127
|
+
"type": "object",
|
|
128
|
+
"properties": {
|
|
129
|
+
"file": {
|
|
130
|
+
"type": "string",
|
|
131
|
+
"description": "Root-relative, POSIX-separated file path."
|
|
132
|
+
},
|
|
133
|
+
"exportName": {
|
|
134
|
+
"type": "string",
|
|
135
|
+
"description": "The binding name the `createEnv()` result is exported as."
|
|
136
|
+
},
|
|
137
|
+
"contractName": {
|
|
138
|
+
"type": "string",
|
|
139
|
+
"description": "Resolved display name (see DiscoveredContract.contractName)."
|
|
140
|
+
},
|
|
141
|
+
"variableCount": {
|
|
142
|
+
"type": "number",
|
|
143
|
+
"description": "Number of variables declared in this contract's schema."
|
|
144
|
+
},
|
|
145
|
+
"active": {
|
|
146
|
+
"type": "boolean",
|
|
147
|
+
"description": "Whether this contract was included in the generated manifest (`active` defaults to true)."
|
|
148
|
+
},
|
|
149
|
+
"documented": {
|
|
150
|
+
"type": "boolean",
|
|
151
|
+
"description": "Whether a `documentEnv()` call is linked to this contract."
|
|
152
|
+
}
|
|
153
|
+
},
|
|
154
|
+
"required": [
|
|
155
|
+
"file",
|
|
156
|
+
"exportName",
|
|
157
|
+
"contractName",
|
|
158
|
+
"variableCount",
|
|
159
|
+
"active",
|
|
160
|
+
"documented"
|
|
161
|
+
],
|
|
162
|
+
"additionalProperties": false,
|
|
163
|
+
"description": "Root-relative projection of a DiscoveredContract, as returned by generateEnvManifest / generateDocumentation."
|
|
164
|
+
},
|
|
165
|
+
"CompatibilityIssue": {
|
|
166
|
+
"type": "object",
|
|
167
|
+
"properties": {
|
|
168
|
+
"severity": {
|
|
169
|
+
"type": "string",
|
|
170
|
+
"enum": [
|
|
171
|
+
"error",
|
|
172
|
+
"warning",
|
|
173
|
+
"info"
|
|
174
|
+
],
|
|
175
|
+
"description": "`\"error\"` blocks generation regardless of `onIncompatibility`; `\"warning\"` blocks only when `onIncompatibility: \"throw\"`; `\"info\"` never blocks, under any flag."
|
|
176
|
+
},
|
|
177
|
+
"variable": {
|
|
178
|
+
"type": "string",
|
|
179
|
+
"description": "The environment variable name, or `\"(contract) <name>\"` for a contract-level (e.g. exclusive-group) issue."
|
|
180
|
+
},
|
|
181
|
+
"files": {
|
|
182
|
+
"type": "array",
|
|
183
|
+
"items": {
|
|
184
|
+
"type": "string"
|
|
185
|
+
},
|
|
186
|
+
"description": "Every file declaring a conflicting definition."
|
|
187
|
+
},
|
|
188
|
+
"reason": {
|
|
189
|
+
"type": "string",
|
|
190
|
+
"description": "Human-readable explanation of the conflict."
|
|
191
|
+
},
|
|
192
|
+
"code": {
|
|
193
|
+
"$ref": "#/definitions/CompatibilityIssueCode",
|
|
194
|
+
"description": "Stable, machine-readable identifier for CI filtering / doc-linking / GitHub Action annotations / IDE integration. `undefined` only for checks that don't (yet) set one -- see CompatibilityIssueCode for the full enumerated list of values a check in this file can produce."
|
|
195
|
+
}
|
|
196
|
+
},
|
|
197
|
+
"required": [
|
|
198
|
+
"severity",
|
|
199
|
+
"variable",
|
|
200
|
+
"files",
|
|
201
|
+
"reason"
|
|
202
|
+
],
|
|
203
|
+
"additionalProperties": false,
|
|
204
|
+
"description": "One compatibility problem found between two or more declarations of the same variable, or an exclusive-group violation."
|
|
205
|
+
},
|
|
206
|
+
"CompatibilityIssueCode": {
|
|
207
|
+
"type": "string",
|
|
208
|
+
"enum": [
|
|
209
|
+
"PROCESSOR_RETURN_TYPE_CONFLICT",
|
|
210
|
+
"PROCESSOR_SOURCE_CONFLICT",
|
|
211
|
+
"VALIDATOR_SOURCE_CONFLICT",
|
|
212
|
+
"DUPLICATE_VARIABLE_DOCUMENTATION",
|
|
213
|
+
"DUPLICATE_VARIABLE_SHAPE_ACROSS_CONTRACTS"
|
|
214
|
+
],
|
|
215
|
+
"description": "Every stable `code` a check in this file (or `exclusive-group.ts`) can emit. Documented as an enumerated union so a consumer filtering/linking on `code` has a closed list to switch over, rather than an arbitrary string -- see ADR 0024/0026. `exclusive-group.ts`'s check does not (yet) set one; see that file's own comment for why."
|
|
216
|
+
},
|
|
217
|
+
"ParseWarning": {
|
|
218
|
+
"type": "object",
|
|
219
|
+
"properties": {
|
|
220
|
+
"file": {
|
|
221
|
+
"type": "string",
|
|
222
|
+
"description": "Absolute path of the file the warning applies to."
|
|
223
|
+
},
|
|
224
|
+
"message": {
|
|
225
|
+
"type": "string",
|
|
226
|
+
"description": "Human-readable explanation of what was skipped and why."
|
|
227
|
+
}
|
|
228
|
+
},
|
|
229
|
+
"required": [
|
|
230
|
+
"file",
|
|
231
|
+
"message"
|
|
232
|
+
],
|
|
233
|
+
"additionalProperties": false,
|
|
234
|
+
"description": "A recoverable issue found while statically parsing or linking one schema file -- never fatal, always surfaced to the caller as data."
|
|
235
|
+
},
|
|
236
|
+
"GenerateDocumentationResult": {
|
|
237
|
+
"type": "object",
|
|
238
|
+
"properties": {
|
|
239
|
+
"docsPath": {
|
|
240
|
+
"type": "string",
|
|
241
|
+
"description": "Absolute path the Markdown docs artifact was written to."
|
|
242
|
+
},
|
|
243
|
+
"envExample": {
|
|
244
|
+
"$ref": "#/definitions/EnvExampleResult",
|
|
245
|
+
"description": "Set only when `options.envExample` was passed."
|
|
246
|
+
},
|
|
247
|
+
"contracts": {
|
|
248
|
+
"type": "array",
|
|
249
|
+
"items": {
|
|
250
|
+
"$ref": "#/definitions/DiscoveredContractSummary"
|
|
251
|
+
},
|
|
252
|
+
"description": "Root-relative summary of every discovered contract, active or not."
|
|
253
|
+
},
|
|
254
|
+
"catalog": {
|
|
255
|
+
"type": "array",
|
|
256
|
+
"items": {
|
|
257
|
+
"$ref": "#/definitions/CatalogContract"
|
|
258
|
+
},
|
|
259
|
+
"description": "Same descriptive content as the generated Markdown Catalog, reshaped for programmatic consumers -- see `buildCatalog()` in `docs.ts`."
|
|
260
|
+
},
|
|
261
|
+
"parseWarnings": {
|
|
262
|
+
"type": "array",
|
|
263
|
+
"items": {
|
|
264
|
+
"$ref": "#/definitions/ParseWarning"
|
|
265
|
+
},
|
|
266
|
+
"description": "Parse-time warnings collected across every analyzed file (including allow-listed package resolution)."
|
|
267
|
+
},
|
|
268
|
+
"documentation": {
|
|
269
|
+
"$ref": "#/definitions/DocumentationFindings",
|
|
270
|
+
"description": "Everything found that isn't fully documented or up to date."
|
|
271
|
+
}
|
|
272
|
+
},
|
|
273
|
+
"required": [
|
|
274
|
+
"docsPath",
|
|
275
|
+
"contracts",
|
|
276
|
+
"catalog",
|
|
277
|
+
"parseWarnings",
|
|
278
|
+
"documentation"
|
|
279
|
+
],
|
|
280
|
+
"additionalProperties": false,
|
|
281
|
+
"description": "The result of a completed generateDocumentation run."
|
|
282
|
+
},
|
|
283
|
+
"EnvExampleResult": {
|
|
284
|
+
"type": "object",
|
|
285
|
+
"properties": {
|
|
286
|
+
"writtenPath": {
|
|
287
|
+
"type": "string",
|
|
288
|
+
"description": "Where the example file actually got written. `undefined` only when `onExisting: \"skip\"` left an existing file untouched and nothing was written."
|
|
289
|
+
},
|
|
290
|
+
"skippedExistingPath": {
|
|
291
|
+
"type": "string",
|
|
292
|
+
"description": "Set when a file already existed at the requested location and was left untouched: with the default `\"keep-sibling\"`, `writtenPath` is a fresh timestamped sibling instead; with `\"skip\"`, this is the only outcome and `writtenPath` is `undefined`. Always `undefined` with `\"overwrite\"`."
|
|
293
|
+
},
|
|
294
|
+
"staleVariables": {
|
|
295
|
+
"type": "array",
|
|
296
|
+
"items": {
|
|
297
|
+
"type": "string"
|
|
298
|
+
},
|
|
299
|
+
"description": "Variable names (live or already commented-out) in an existing example file that no discovered contract declares anymore."
|
|
300
|
+
},
|
|
301
|
+
"variablesToComment": {
|
|
302
|
+
"type": "array",
|
|
303
|
+
"items": {
|
|
304
|
+
"type": "string"
|
|
305
|
+
},
|
|
306
|
+
"description": "Variables live in an existing example file whose feature is no longer active, and that no other active feature still needs -- safe to comment out."
|
|
307
|
+
},
|
|
308
|
+
"variablesToAdd": {
|
|
309
|
+
"type": "array",
|
|
310
|
+
"items": {
|
|
311
|
+
"type": "string"
|
|
312
|
+
},
|
|
313
|
+
"description": "Variables the current (active) configuration requires that aren't yet a live entry in an existing example file."
|
|
314
|
+
}
|
|
315
|
+
},
|
|
316
|
+
"required": [
|
|
317
|
+
"staleVariables",
|
|
318
|
+
"variablesToComment",
|
|
319
|
+
"variablesToAdd"
|
|
320
|
+
],
|
|
321
|
+
"additionalProperties": false,
|
|
322
|
+
"description": "The result of a completed writeEnvExample call."
|
|
323
|
+
},
|
|
324
|
+
"CatalogContract": {
|
|
325
|
+
"type": "object",
|
|
326
|
+
"properties": {
|
|
327
|
+
"owner": {
|
|
328
|
+
"type": "string"
|
|
329
|
+
},
|
|
330
|
+
"sensitivity": {
|
|
331
|
+
"type": "string"
|
|
332
|
+
},
|
|
333
|
+
"expiresAt": {
|
|
334
|
+
"type": "string"
|
|
335
|
+
},
|
|
336
|
+
"purpose": {
|
|
337
|
+
"type": "string"
|
|
338
|
+
},
|
|
339
|
+
"legalBasis": {
|
|
340
|
+
"type": "string"
|
|
341
|
+
},
|
|
342
|
+
"retention": {
|
|
343
|
+
"type": "string"
|
|
344
|
+
},
|
|
345
|
+
"dataResidency": {
|
|
346
|
+
"anyOf": [
|
|
347
|
+
{
|
|
348
|
+
"type": "string"
|
|
349
|
+
},
|
|
350
|
+
{
|
|
351
|
+
"type": "array",
|
|
352
|
+
"items": {
|
|
353
|
+
"type": "string"
|
|
354
|
+
}
|
|
355
|
+
}
|
|
356
|
+
]
|
|
357
|
+
},
|
|
358
|
+
"auditRequired": {
|
|
359
|
+
"type": "boolean"
|
|
360
|
+
},
|
|
361
|
+
"metadata": {
|
|
362
|
+
"type": "object",
|
|
363
|
+
"additionalProperties": {}
|
|
364
|
+
},
|
|
365
|
+
"file": {
|
|
366
|
+
"type": "string"
|
|
367
|
+
},
|
|
368
|
+
"exportName": {
|
|
369
|
+
"type": "string"
|
|
370
|
+
},
|
|
371
|
+
"contractName": {
|
|
372
|
+
"type": "string"
|
|
373
|
+
},
|
|
374
|
+
"active": {
|
|
375
|
+
"type": "boolean"
|
|
376
|
+
},
|
|
377
|
+
"documented": {
|
|
378
|
+
"type": "boolean"
|
|
379
|
+
},
|
|
380
|
+
"category": {
|
|
381
|
+
"type": "string"
|
|
382
|
+
},
|
|
383
|
+
"exclusiveGroup": {
|
|
384
|
+
"type": "string"
|
|
385
|
+
},
|
|
386
|
+
"variables": {
|
|
387
|
+
"type": "object",
|
|
388
|
+
"additionalProperties": {
|
|
389
|
+
"type": "object",
|
|
390
|
+
"properties": {
|
|
391
|
+
"owner": {
|
|
392
|
+
"type": "string"
|
|
393
|
+
},
|
|
394
|
+
"sensitivity": {
|
|
395
|
+
"type": "string"
|
|
396
|
+
},
|
|
397
|
+
"expiresAt": {
|
|
398
|
+
"type": "string"
|
|
399
|
+
},
|
|
400
|
+
"purpose": {
|
|
401
|
+
"type": "string"
|
|
402
|
+
},
|
|
403
|
+
"legalBasis": {
|
|
404
|
+
"type": "string"
|
|
405
|
+
},
|
|
406
|
+
"retention": {
|
|
407
|
+
"type": "string"
|
|
408
|
+
},
|
|
409
|
+
"dataResidency": {
|
|
410
|
+
"anyOf": [
|
|
411
|
+
{
|
|
412
|
+
"type": "string"
|
|
413
|
+
},
|
|
414
|
+
{
|
|
415
|
+
"type": "array",
|
|
416
|
+
"items": {
|
|
417
|
+
"type": "string"
|
|
418
|
+
}
|
|
419
|
+
}
|
|
420
|
+
]
|
|
421
|
+
},
|
|
422
|
+
"auditRequired": {
|
|
423
|
+
"type": "boolean"
|
|
424
|
+
},
|
|
425
|
+
"metadata": {
|
|
426
|
+
"type": "object",
|
|
427
|
+
"additionalProperties": {}
|
|
428
|
+
},
|
|
429
|
+
"description": {
|
|
430
|
+
"type": "string"
|
|
431
|
+
},
|
|
432
|
+
"refreshInstructions": {
|
|
433
|
+
"type": "string"
|
|
434
|
+
},
|
|
435
|
+
"setupInstructions": {
|
|
436
|
+
"type": "string"
|
|
437
|
+
},
|
|
438
|
+
"required": {
|
|
439
|
+
"type": "boolean"
|
|
440
|
+
},
|
|
441
|
+
"hasDefault": {
|
|
442
|
+
"type": "boolean"
|
|
443
|
+
},
|
|
444
|
+
"hasProcessor": {
|
|
445
|
+
"type": "boolean"
|
|
446
|
+
},
|
|
447
|
+
"processorReturnType": {
|
|
448
|
+
"type": "string"
|
|
449
|
+
},
|
|
450
|
+
"hasValidator": {
|
|
451
|
+
"type": "boolean"
|
|
452
|
+
},
|
|
453
|
+
"documented": {
|
|
454
|
+
"type": "boolean"
|
|
455
|
+
},
|
|
456
|
+
"context": {
|
|
457
|
+
"type": "string",
|
|
458
|
+
"description": "The variable's declared validation context, if any -- see ADR 0022. Participation data, not documentation: describes when `validateEnv()` processes this variable, not who may access it or what a bundler includes."
|
|
459
|
+
},
|
|
460
|
+
"evidence": {
|
|
461
|
+
"$ref": "#/definitions/DiscoveredVariableEvidence",
|
|
462
|
+
"description": "The `evidence` sub-object from this variable's linked documentation -- re-verified every run, unlike every declared-only field above. See ADR 0037."
|
|
463
|
+
}
|
|
464
|
+
},
|
|
465
|
+
"required": [
|
|
466
|
+
"hasDefault",
|
|
467
|
+
"hasProcessor",
|
|
468
|
+
"hasValidator",
|
|
469
|
+
"documented"
|
|
470
|
+
],
|
|
471
|
+
"additionalProperties": false,
|
|
472
|
+
"description": "Same data `renderCatalog()` renders to Markdown for one variable, reshaped for JSON/ programmatic consumers instead of prose."
|
|
473
|
+
},
|
|
474
|
+
"description": "Keyed by variable name -- unique within one contract (a schema object-literal property name), unlike `contractName` at the top level."
|
|
475
|
+
}
|
|
476
|
+
},
|
|
477
|
+
"required": [
|
|
478
|
+
"file",
|
|
479
|
+
"exportName",
|
|
480
|
+
"contractName",
|
|
481
|
+
"active",
|
|
482
|
+
"documented",
|
|
483
|
+
"variables"
|
|
484
|
+
],
|
|
485
|
+
"additionalProperties": false
|
|
486
|
+
},
|
|
487
|
+
"DiscoveredVariableEvidence": {
|
|
488
|
+
"type": "object",
|
|
489
|
+
"properties": {
|
|
490
|
+
"dynamicAccess": {
|
|
491
|
+
"type": "array",
|
|
492
|
+
"items": {
|
|
493
|
+
"type": "string"
|
|
494
|
+
},
|
|
495
|
+
"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."
|
|
496
|
+
}
|
|
497
|
+
},
|
|
498
|
+
"additionalProperties": false,
|
|
499
|
+
"description": "The statically-extracted contents of one variable's `evidence` sub-object. See runtime.VariableEvidenceDocs."
|
|
500
|
+
},
|
|
501
|
+
"DocumentationFindings": {
|
|
502
|
+
"type": "object",
|
|
503
|
+
"properties": {
|
|
504
|
+
"undocumentedContracts": {
|
|
505
|
+
"type": "array",
|
|
506
|
+
"items": {
|
|
507
|
+
"type": "object",
|
|
508
|
+
"properties": {
|
|
509
|
+
"file": {
|
|
510
|
+
"type": "string",
|
|
511
|
+
"description": "Absolute path of the file declaring the contract."
|
|
512
|
+
},
|
|
513
|
+
"exportName": {
|
|
514
|
+
"type": "string",
|
|
515
|
+
"description": "The contract's exported binding name."
|
|
516
|
+
}
|
|
517
|
+
},
|
|
518
|
+
"required": [
|
|
519
|
+
"file",
|
|
520
|
+
"exportName"
|
|
521
|
+
],
|
|
522
|
+
"additionalProperties": false
|
|
523
|
+
},
|
|
524
|
+
"description": "Contracts with no linked `documentEnv()` call at all."
|
|
525
|
+
},
|
|
526
|
+
"undocumentedVariables": {
|
|
527
|
+
"type": "array",
|
|
528
|
+
"items": {
|
|
529
|
+
"type": "object",
|
|
530
|
+
"properties": {
|
|
531
|
+
"file": {
|
|
532
|
+
"type": "string",
|
|
533
|
+
"description": "Absolute path of the file declaring the contract."
|
|
534
|
+
},
|
|
535
|
+
"exportName": {
|
|
536
|
+
"type": "string",
|
|
537
|
+
"description": "The contract's exported binding name."
|
|
538
|
+
},
|
|
539
|
+
"key": {
|
|
540
|
+
"type": "string",
|
|
541
|
+
"description": "The undocumented environment variable name."
|
|
542
|
+
}
|
|
543
|
+
},
|
|
544
|
+
"required": [
|
|
545
|
+
"file",
|
|
546
|
+
"exportName",
|
|
547
|
+
"key"
|
|
548
|
+
],
|
|
549
|
+
"additionalProperties": false
|
|
550
|
+
},
|
|
551
|
+
"description": "Schema variables with no matching entry in their contract's linked documentation."
|
|
552
|
+
},
|
|
553
|
+
"staleDocEntries": {
|
|
554
|
+
"type": "array",
|
|
555
|
+
"items": {
|
|
556
|
+
"type": "object",
|
|
557
|
+
"properties": {
|
|
558
|
+
"file": {
|
|
559
|
+
"type": "string",
|
|
560
|
+
"description": "Absolute path of the file declaring the contract."
|
|
561
|
+
},
|
|
562
|
+
"exportName": {
|
|
563
|
+
"type": "string",
|
|
564
|
+
"description": "The contract's exported binding name."
|
|
565
|
+
},
|
|
566
|
+
"key": {
|
|
567
|
+
"type": "string",
|
|
568
|
+
"description": "The stale documented variable name."
|
|
569
|
+
}
|
|
570
|
+
},
|
|
571
|
+
"required": [
|
|
572
|
+
"file",
|
|
573
|
+
"exportName",
|
|
574
|
+
"key"
|
|
575
|
+
],
|
|
576
|
+
"additionalProperties": false
|
|
577
|
+
},
|
|
578
|
+
"description": "Documented variable entries with no matching schema variable (the schema key was removed or renamed)."
|
|
579
|
+
},
|
|
580
|
+
"expiringSoon": {
|
|
581
|
+
"type": "array",
|
|
582
|
+
"items": {
|
|
583
|
+
"$ref": "#/definitions/ExpiringEntry"
|
|
584
|
+
},
|
|
585
|
+
"description": "Variables whose `expiresAt` falls within the configured window."
|
|
586
|
+
},
|
|
587
|
+
"nonstandardSensitivityLevels": {
|
|
588
|
+
"type": "array",
|
|
589
|
+
"items": {
|
|
590
|
+
"$ref": "#/definitions/NonstandardSensitivityEntry"
|
|
591
|
+
},
|
|
592
|
+
"description": "Contract- or variable-level `sensitivity` values outside STANDARD_SENSITIVITY_LEVELS. Advisory only -- the declared level is always honored verbatim; this exists purely so vocabulary drift across a repo stays visible."
|
|
593
|
+
},
|
|
594
|
+
"unresolvedLinks": {
|
|
595
|
+
"type": "array",
|
|
596
|
+
"items": {
|
|
597
|
+
"type": "object",
|
|
598
|
+
"properties": {
|
|
599
|
+
"file": {
|
|
600
|
+
"type": "string",
|
|
601
|
+
"description": "Absolute path of the file containing the unlinkable call."
|
|
602
|
+
},
|
|
603
|
+
"reason": {
|
|
604
|
+
"type": "string",
|
|
605
|
+
"description": "Human-readable explanation of why the link couldn't be resolved."
|
|
606
|
+
}
|
|
607
|
+
},
|
|
608
|
+
"required": [
|
|
609
|
+
"file",
|
|
610
|
+
"reason"
|
|
611
|
+
],
|
|
612
|
+
"additionalProperties": false
|
|
613
|
+
},
|
|
614
|
+
"description": "`documentEnv()` calls that couldn't be statically linked to a schema."
|
|
615
|
+
}
|
|
616
|
+
},
|
|
617
|
+
"required": [
|
|
618
|
+
"undocumentedContracts",
|
|
619
|
+
"undocumentedVariables",
|
|
620
|
+
"staleDocEntries",
|
|
621
|
+
"expiringSoon",
|
|
622
|
+
"nonstandardSensitivityLevels",
|
|
623
|
+
"unresolvedLinks"
|
|
624
|
+
],
|
|
625
|
+
"additionalProperties": false,
|
|
626
|
+
"description": "Everything generateDocumentation found that isn't fully documented or up to date -- never blocks generation; a team that wants to gate CI on this reads `Finding[]` (the \"documentation\" family) from the persisted evidence artifact and decides for itself. See ADR 0038."
|
|
627
|
+
},
|
|
628
|
+
"ExpiringEntry": {
|
|
629
|
+
"type": "object",
|
|
630
|
+
"properties": {
|
|
631
|
+
"file": {
|
|
632
|
+
"type": "string",
|
|
633
|
+
"description": "Absolute path of the file declaring the contract."
|
|
634
|
+
},
|
|
635
|
+
"exportName": {
|
|
636
|
+
"type": "string",
|
|
637
|
+
"description": "The contract's exported binding name."
|
|
638
|
+
},
|
|
639
|
+
"key": {
|
|
640
|
+
"type": "string",
|
|
641
|
+
"description": "`undefined` for a contract-level `expiresAt`, set for a per-variable one."
|
|
642
|
+
},
|
|
643
|
+
"expiresAt": {
|
|
644
|
+
"type": "string",
|
|
645
|
+
"description": "The raw ISO date string, unparsed."
|
|
646
|
+
},
|
|
647
|
+
"daysRemaining": {
|
|
648
|
+
"type": "number",
|
|
649
|
+
"description": "Days from `now` until expiry; negative when already expired."
|
|
650
|
+
}
|
|
651
|
+
},
|
|
652
|
+
"required": [
|
|
653
|
+
"file",
|
|
654
|
+
"exportName",
|
|
655
|
+
"expiresAt",
|
|
656
|
+
"daysRemaining"
|
|
657
|
+
],
|
|
658
|
+
"additionalProperties": false,
|
|
659
|
+
"description": "One contract- or variable-level `expiresAt` falling within the configured \"expiring soon\" window."
|
|
660
|
+
},
|
|
661
|
+
"NonstandardSensitivityEntry": {
|
|
662
|
+
"type": "object",
|
|
663
|
+
"properties": {
|
|
664
|
+
"file": {
|
|
665
|
+
"type": "string",
|
|
666
|
+
"description": "Absolute path of the file declaring the contract."
|
|
667
|
+
},
|
|
668
|
+
"exportName": {
|
|
669
|
+
"type": "string",
|
|
670
|
+
"description": "The contract's exported binding name."
|
|
671
|
+
},
|
|
672
|
+
"key": {
|
|
673
|
+
"type": "string",
|
|
674
|
+
"description": "`undefined` for a contract-level `sensitivity`, set for a per-variable one."
|
|
675
|
+
},
|
|
676
|
+
"sensitivity": {
|
|
677
|
+
"type": "string",
|
|
678
|
+
"description": "The declared level, exactly as written."
|
|
679
|
+
}
|
|
680
|
+
},
|
|
681
|
+
"required": [
|
|
682
|
+
"file",
|
|
683
|
+
"exportName",
|
|
684
|
+
"sensitivity"
|
|
685
|
+
],
|
|
686
|
+
"additionalProperties": false,
|
|
687
|
+
"description": "One contract- or variable-level `sensitivity` declaring a level outside STANDARD_SENSITIVITY_LEVELS."
|
|
688
|
+
},
|
|
689
|
+
"GenerateUsageReportResult": {
|
|
690
|
+
"type": "object",
|
|
691
|
+
"properties": {
|
|
692
|
+
"dependencyOwnership": {
|
|
693
|
+
"type": "array",
|
|
694
|
+
"items": {
|
|
695
|
+
"$ref": "#/definitions/OwnershipDependencyEntry"
|
|
696
|
+
},
|
|
697
|
+
"description": "Every contract's ownership/dependency summary."
|
|
698
|
+
},
|
|
699
|
+
"abandonedContracts": {
|
|
700
|
+
"type": "array",
|
|
701
|
+
"items": {
|
|
702
|
+
"$ref": "#/definitions/AbandonedContractFinding"
|
|
703
|
+
},
|
|
704
|
+
"description": "Contracts never imported anywhere in the scanned repository."
|
|
705
|
+
},
|
|
706
|
+
"unresolvedConsumers": {
|
|
707
|
+
"type": "array",
|
|
708
|
+
"items": {
|
|
709
|
+
"$ref": "#/definitions/UnresolvedConsumerFinding"
|
|
710
|
+
},
|
|
711
|
+
"description": "Advisory only, never gates `onOwnershipIssue` -- a contract only reaches here when an ambiguous barrel re-export makes \"abandoned\" or \"consumed\" both unprovable."
|
|
712
|
+
},
|
|
713
|
+
"unconsumedOwnedVariables": {
|
|
714
|
+
"type": "array",
|
|
715
|
+
"items": {
|
|
716
|
+
"$ref": "#/definitions/UnconsumedOwnedVariableFinding"
|
|
717
|
+
},
|
|
718
|
+
"description": "Owned variables with no consumer found in the scanned repository."
|
|
719
|
+
},
|
|
720
|
+
"indeterminate": {
|
|
721
|
+
"type": "array",
|
|
722
|
+
"items": {
|
|
723
|
+
"$ref": "#/definitions/IndeterminateOwnershipFinding"
|
|
724
|
+
},
|
|
725
|
+
"description": "Variables accessed only via dynamic (computed) property access."
|
|
726
|
+
},
|
|
727
|
+
"asserted": {
|
|
728
|
+
"type": "array",
|
|
729
|
+
"items": {
|
|
730
|
+
"$ref": "#/definitions/AssertedDynamicAccessFinding"
|
|
731
|
+
},
|
|
732
|
+
"description": "Variables a developer has re-acknowledged via `dynamicAccess`, freshly -- see ADR 0037."
|
|
733
|
+
},
|
|
734
|
+
"parseWarnings": {
|
|
735
|
+
"type": "array",
|
|
736
|
+
"items": {
|
|
737
|
+
"$ref": "#/definitions/ParseWarning"
|
|
738
|
+
},
|
|
739
|
+
"description": "Schema-discovery parse warnings plus, since ADR 0014, any `packages` resolution failures -- surfaced here too (not just from `generateEnvManifest`/`generateDocumentation`) so a team relying only on `--ownership` output still learns when a cross-package contract failed to resolve."
|
|
740
|
+
},
|
|
741
|
+
"scannedSurfaces": {
|
|
742
|
+
"type": "array",
|
|
743
|
+
"items": {
|
|
744
|
+
"$ref": "#/definitions/ScannedSurface"
|
|
745
|
+
},
|
|
746
|
+
"description": "Every surface actually scanned for usage -- see ADR 0036. Named explicitly next to `unconsumedOwnedVariables` so \"no consumer found\" is never read as a stronger claim than what was actually searched."
|
|
747
|
+
},
|
|
748
|
+
"reportPath": {
|
|
749
|
+
"type": "string",
|
|
750
|
+
"description": "Absolute path the report was written to, or `undefined` if `options.report` wasn't passed."
|
|
751
|
+
}
|
|
752
|
+
},
|
|
753
|
+
"additionalProperties": false,
|
|
754
|
+
"required": [
|
|
755
|
+
"abandonedContracts",
|
|
756
|
+
"asserted",
|
|
757
|
+
"dependencyOwnership",
|
|
758
|
+
"indeterminate",
|
|
759
|
+
"parseWarnings",
|
|
760
|
+
"scannedSurfaces",
|
|
761
|
+
"unconsumedOwnedVariables",
|
|
762
|
+
"unresolvedConsumers"
|
|
763
|
+
],
|
|
764
|
+
"description": "Public result of generateUsageReport."
|
|
765
|
+
},
|
|
766
|
+
"OwnershipDependencyEntry": {
|
|
767
|
+
"type": "object",
|
|
768
|
+
"properties": {
|
|
769
|
+
"contractName": {
|
|
770
|
+
"type": "string",
|
|
771
|
+
"description": "Resolved display name (see DiscoveredContract.contractName)."
|
|
772
|
+
},
|
|
773
|
+
"file": {
|
|
774
|
+
"type": "string",
|
|
775
|
+
"description": "Root-relative path of the file declaring the contract."
|
|
776
|
+
},
|
|
777
|
+
"owner": {
|
|
778
|
+
"type": "string",
|
|
779
|
+
"description": "Contract-level default owner, if set."
|
|
780
|
+
},
|
|
781
|
+
"variableCount": {
|
|
782
|
+
"type": "number",
|
|
783
|
+
"description": "Number of variables declared in this contract's schema."
|
|
784
|
+
},
|
|
785
|
+
"consumers": {
|
|
786
|
+
"type": "array",
|
|
787
|
+
"items": {
|
|
788
|
+
"type": "string"
|
|
789
|
+
},
|
|
790
|
+
"description": "Files coupled to this contract (imported it, referenced it, or read a member from it) -- contract-level \"who depends on this,\" NOT proof any specific variable was read. Blast radius if this contract changes is `consumers.length`, computed by callers/renderers on demand rather than stored redundantly here."
|
|
791
|
+
}
|
|
792
|
+
},
|
|
793
|
+
"required": [
|
|
794
|
+
"contractName",
|
|
795
|
+
"file",
|
|
796
|
+
"variableCount",
|
|
797
|
+
"consumers"
|
|
798
|
+
],
|
|
799
|
+
"additionalProperties": false,
|
|
800
|
+
"description": "One contract's dependency-ownership summary: who owns it, and who depends on it."
|
|
801
|
+
},
|
|
802
|
+
"AbandonedContractFinding": {
|
|
803
|
+
"type": "object",
|
|
804
|
+
"properties": {
|
|
805
|
+
"contractName": {
|
|
806
|
+
"type": "string",
|
|
807
|
+
"description": "Resolved display name (see DiscoveredContract.contractName)."
|
|
808
|
+
},
|
|
809
|
+
"file": {
|
|
810
|
+
"type": "string",
|
|
811
|
+
"description": "Root-relative path of the file declaring the contract."
|
|
812
|
+
},
|
|
813
|
+
"owner": {
|
|
814
|
+
"type": "string",
|
|
815
|
+
"description": "Contract-level default owner, if set."
|
|
816
|
+
}
|
|
817
|
+
},
|
|
818
|
+
"required": [
|
|
819
|
+
"contractName",
|
|
820
|
+
"file"
|
|
821
|
+
],
|
|
822
|
+
"additionalProperties": false,
|
|
823
|
+
"description": "A contract never imported anywhere in the scanned repository."
|
|
824
|
+
},
|
|
825
|
+
"UnresolvedConsumerFinding": {
|
|
826
|
+
"type": "object",
|
|
827
|
+
"properties": {
|
|
828
|
+
"contractName": {
|
|
829
|
+
"type": "string",
|
|
830
|
+
"description": "Resolved display name (see DiscoveredContract.contractName)."
|
|
831
|
+
},
|
|
832
|
+
"file": {
|
|
833
|
+
"type": "string",
|
|
834
|
+
"description": "Root-relative path of the file declaring the contract."
|
|
835
|
+
},
|
|
836
|
+
"reason": {
|
|
837
|
+
"type": "string",
|
|
838
|
+
"description": "Human-readable explanation of why usage couldn't be resolved."
|
|
839
|
+
}
|
|
840
|
+
},
|
|
841
|
+
"required": [
|
|
842
|
+
"contractName",
|
|
843
|
+
"file",
|
|
844
|
+
"reason"
|
|
845
|
+
],
|
|
846
|
+
"additionalProperties": false,
|
|
847
|
+
"description": "A contract reachable only through an unresolved barrel re-export -- can't be proven abandoned or consumed."
|
|
848
|
+
},
|
|
849
|
+
"UnconsumedOwnedVariableFinding": {
|
|
850
|
+
"type": "object",
|
|
851
|
+
"properties": {
|
|
852
|
+
"contractName": {
|
|
853
|
+
"type": "string",
|
|
854
|
+
"description": "Resolved display name (see DiscoveredContract.contractName)."
|
|
855
|
+
},
|
|
856
|
+
"owner": {
|
|
857
|
+
"type": "string",
|
|
858
|
+
"description": "The owning contract's default owner, if set."
|
|
859
|
+
},
|
|
860
|
+
"key": {
|
|
861
|
+
"type": "string",
|
|
862
|
+
"description": "The unconsumed environment variable name."
|
|
863
|
+
},
|
|
864
|
+
"staleOrMissingCitations": {
|
|
865
|
+
"type": "array",
|
|
866
|
+
"items": {
|
|
867
|
+
"$ref": "#/definitions/DynamicAccessCitationProblem"
|
|
868
|
+
},
|
|
869
|
+
"description": "Every `dynamicAccess` citation for this variable that's currently `\"stale\"` or `\"missing\"` (empty when none exist -- see ADR 0037). Empty is the *strongest* \"looks genuinely unused\" signal: no developer has ever claimed otherwise. A non-empty list means someone specifically claimed dynamic access here once and that claim can no longer be verified -- worth a human check before deleting, not a stronger reason to trust \"unconsumed.\" Exposed as the raw citations, not a collapsed `high`/`low` label, matching this codebase's \"show the receipt\" pattern (ADR 0036/0037) -- a reader can judge confidence from the actual evidence rather than trusting a derived summary. See ADR 0038."
|
|
870
|
+
}
|
|
871
|
+
},
|
|
872
|
+
"required": [
|
|
873
|
+
"contractName",
|
|
874
|
+
"key",
|
|
875
|
+
"staleOrMissingCitations"
|
|
876
|
+
],
|
|
877
|
+
"additionalProperties": false,
|
|
878
|
+
"description": "An owned variable with no consumer found in the scanned repository."
|
|
879
|
+
},
|
|
880
|
+
"DynamicAccessCitationProblem": {
|
|
881
|
+
"type": "object",
|
|
882
|
+
"properties": {
|
|
883
|
+
"contractName": {
|
|
884
|
+
"type": "string"
|
|
885
|
+
},
|
|
886
|
+
"file": {
|
|
887
|
+
"type": "string",
|
|
888
|
+
"description": "Root-relative, POSIX-separated."
|
|
889
|
+
},
|
|
890
|
+
"exportName": {
|
|
891
|
+
"type": "string"
|
|
892
|
+
},
|
|
893
|
+
"key": {
|
|
894
|
+
"type": "string",
|
|
895
|
+
"description": "The variable whose `dynamicAccess` citation this is."
|
|
896
|
+
},
|
|
897
|
+
"position": {
|
|
898
|
+
"$ref": "#/definitions/SourcePosition",
|
|
899
|
+
"description": "Where the citation points -- not the variable's own declaration."
|
|
900
|
+
},
|
|
901
|
+
"acknowledgment": {
|
|
902
|
+
"type": "string",
|
|
903
|
+
"enum": [
|
|
904
|
+
"stale",
|
|
905
|
+
"missing"
|
|
906
|
+
]
|
|
907
|
+
}
|
|
908
|
+
},
|
|
909
|
+
"required": [
|
|
910
|
+
"contractName",
|
|
911
|
+
"file",
|
|
912
|
+
"exportName",
|
|
913
|
+
"key",
|
|
914
|
+
"position",
|
|
915
|
+
"acknowledgment"
|
|
916
|
+
],
|
|
917
|
+
"additionalProperties": false,
|
|
918
|
+
"description": "One `dynamicAccess` citation env-cap can no longer vouch for -- the direct input to `finding-model.ts`'s `\"STALE_DYNAMIC_ACCESS_CITATION\"`/`\"MISSING_DYNAMIC_ACCESS_CITATION\"` findings. See ADR 0037."
|
|
919
|
+
},
|
|
920
|
+
"SourcePosition": {
|
|
921
|
+
"type": "object",
|
|
922
|
+
"properties": {
|
|
923
|
+
"file": {
|
|
924
|
+
"type": "string",
|
|
925
|
+
"description": "Root-relative, POSIX-separated."
|
|
926
|
+
},
|
|
927
|
+
"line": {
|
|
928
|
+
"type": "number",
|
|
929
|
+
"description": "1-indexed line number."
|
|
930
|
+
},
|
|
931
|
+
"column": {
|
|
932
|
+
"type": "number",
|
|
933
|
+
"description": "1-indexed column number."
|
|
934
|
+
}
|
|
935
|
+
},
|
|
936
|
+
"required": [
|
|
937
|
+
"file",
|
|
938
|
+
"line",
|
|
939
|
+
"column"
|
|
940
|
+
],
|
|
941
|
+
"additionalProperties": false,
|
|
942
|
+
"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."
|
|
943
|
+
},
|
|
944
|
+
"IndeterminateOwnershipFinding": {
|
|
945
|
+
"type": "object",
|
|
946
|
+
"properties": {
|
|
947
|
+
"contractName": {
|
|
948
|
+
"type": "string",
|
|
949
|
+
"description": "Resolved display name (see DiscoveredContract.contractName)."
|
|
950
|
+
},
|
|
951
|
+
"key": {
|
|
952
|
+
"type": "string",
|
|
953
|
+
"description": "The environment variable name."
|
|
954
|
+
},
|
|
955
|
+
"reason": {
|
|
956
|
+
"type": "string",
|
|
957
|
+
"description": "Human-readable explanation of why usage couldn't be determined."
|
|
958
|
+
},
|
|
959
|
+
"dynamicAccessSites": {
|
|
960
|
+
"type": "array",
|
|
961
|
+
"items": {
|
|
962
|
+
"$ref": "#/definitions/SourcePosition"
|
|
963
|
+
},
|
|
964
|
+
"description": "Every AST-observed dynamic-access site backing `reason`, structured -- see ADR 0036."
|
|
965
|
+
},
|
|
966
|
+
"staleOrMissingCitations": {
|
|
967
|
+
"type": "array",
|
|
968
|
+
"items": {
|
|
969
|
+
"$ref": "#/definitions/DynamicAccessCitationProblem"
|
|
970
|
+
},
|
|
971
|
+
"description": "See UnconsumedOwnedVariableFinding.staleOrMissingCitations."
|
|
972
|
+
}
|
|
973
|
+
},
|
|
974
|
+
"required": [
|
|
975
|
+
"contractName",
|
|
976
|
+
"key",
|
|
977
|
+
"reason",
|
|
978
|
+
"dynamicAccessSites",
|
|
979
|
+
"staleOrMissingCitations"
|
|
980
|
+
],
|
|
981
|
+
"additionalProperties": false,
|
|
982
|
+
"description": "A variable accessed only via dynamic (computed) property access -- usage cannot be determined statically."
|
|
983
|
+
},
|
|
984
|
+
"AssertedDynamicAccessFinding": {
|
|
985
|
+
"type": "object",
|
|
986
|
+
"properties": {
|
|
987
|
+
"contractName": {
|
|
988
|
+
"type": "string",
|
|
989
|
+
"description": "Resolved display name (see DiscoveredContract.contractName)."
|
|
990
|
+
},
|
|
991
|
+
"key": {
|
|
992
|
+
"type": "string",
|
|
993
|
+
"description": "The environment variable name."
|
|
994
|
+
},
|
|
995
|
+
"wouldBeStatus": {
|
|
996
|
+
"type": "string",
|
|
997
|
+
"enum": [
|
|
998
|
+
"unconsumed",
|
|
999
|
+
"indeterminate"
|
|
1000
|
+
],
|
|
1001
|
+
"description": "What this variable's status would be without the fresh assertion."
|
|
1002
|
+
},
|
|
1003
|
+
"dynamicAccessAssertions": {
|
|
1004
|
+
"type": "array",
|
|
1005
|
+
"items": {
|
|
1006
|
+
"$ref": "#/definitions/DynamicAccessAssertion"
|
|
1007
|
+
},
|
|
1008
|
+
"description": "Every citation covering this variable, each with its own current freshness."
|
|
1009
|
+
}
|
|
1010
|
+
},
|
|
1011
|
+
"required": [
|
|
1012
|
+
"contractName",
|
|
1013
|
+
"key",
|
|
1014
|
+
"wouldBeStatus",
|
|
1015
|
+
"dynamicAccessAssertions"
|
|
1016
|
+
],
|
|
1017
|
+
"additionalProperties": false,
|
|
1018
|
+
"description": "A variable that would otherwise be reported `unconsumedOwnedVariables`/`indeterminate`, but has at least one `\"fresh\"` developer-declared `dynamicAccess` citation -- the raw static status is always shown alongside the assertion, never replaced by it. See ADR 0037."
|
|
1019
|
+
},
|
|
1020
|
+
"DynamicAccessAssertion": {
|
|
1021
|
+
"type": "object",
|
|
1022
|
+
"properties": {
|
|
1023
|
+
"file": {
|
|
1024
|
+
"type": "string",
|
|
1025
|
+
"description": "Root-relative, POSIX-separated."
|
|
1026
|
+
},
|
|
1027
|
+
"line": {
|
|
1028
|
+
"type": "number",
|
|
1029
|
+
"description": "1-indexed line number."
|
|
1030
|
+
},
|
|
1031
|
+
"column": {
|
|
1032
|
+
"type": "number",
|
|
1033
|
+
"description": "1-indexed column number."
|
|
1034
|
+
},
|
|
1035
|
+
"acknowledgment": {
|
|
1036
|
+
"type": "string",
|
|
1037
|
+
"enum": [
|
|
1038
|
+
"fresh",
|
|
1039
|
+
"stale",
|
|
1040
|
+
"missing"
|
|
1041
|
+
],
|
|
1042
|
+
"description": "`\"fresh\"` -- the cited file currently exists and either matches the committed baseline hash or has no baseline yet (a brand-new citation, nothing to contradict it yet). `\"stale\"` -- the cited file exists but its content has changed since the committed baseline. `\"missing\"` -- the cited file no longer exists at all. Re-derived from scratch every run; never cached across runs."
|
|
1043
|
+
},
|
|
1044
|
+
"contentHash": {
|
|
1045
|
+
"type": "string",
|
|
1046
|
+
"description": "SHA-256 hex digest of the cited file's content *as observed this run* -- `undefined` iff `acknowledgment === \"missing\"` (nothing to hash). This is the one field that makes freshness checking possible without a snapshot-only shadow type: the live `EvidenceModel.dependency` a caller gets back and the persisted evidence snapshot a later run reads back as its baseline are the exact same shape -- this run's `contentHash` becomes next run's comparison target directly. See `evidence-snapshot.ts` and ADR 0037."
|
|
1047
|
+
}
|
|
1048
|
+
},
|
|
1049
|
+
"required": [
|
|
1050
|
+
"acknowledgment",
|
|
1051
|
+
"column",
|
|
1052
|
+
"file",
|
|
1053
|
+
"line"
|
|
1054
|
+
],
|
|
1055
|
+
"additionalProperties": false,
|
|
1056
|
+
"description": "One developer-declared runtime.VariableDocs.dynamicAccess citation's current acknowledgment state -- a claim, never an observation. Kept fully separate from `VariableAccessStatus` (which stays exactly 3-valued and purely AST-derived) so a developer's assertion can never make env-cap claim it observed something it didn't. See `evidence-snapshot.ts`'s `computeDynamicAccessAcknowledgments()` (where this is computed) and ADR 0037."
|
|
1057
|
+
},
|
|
1058
|
+
"ScannedSurface": {
|
|
1059
|
+
"type": "object",
|
|
1060
|
+
"properties": {
|
|
1061
|
+
"label": {
|
|
1062
|
+
"type": "string",
|
|
1063
|
+
"description": "`\"application\"` for the local project root, `\"package:<name>\"` for an allow-listed package's own source."
|
|
1064
|
+
},
|
|
1065
|
+
"root": {
|
|
1066
|
+
"type": "string",
|
|
1067
|
+
"description": "Root-relative, POSIX-separated."
|
|
1068
|
+
}
|
|
1069
|
+
},
|
|
1070
|
+
"required": [
|
|
1071
|
+
"label",
|
|
1072
|
+
"root"
|
|
1073
|
+
],
|
|
1074
|
+
"additionalProperties": false,
|
|
1075
|
+
"description": "One named surface `buildDependencyGraph()`'s scan actually covered -- the application's own root, plus one entry per allow-listed `packages` (ADR 0014) name whose source was also scanned. See ADR 0036: a claim like \"no consumer found\" is only ever as strong as what was actually searched, and this is what lets a renderer say so explicitly instead of implying an unbounded guarantee it can't back up."
|
|
1076
|
+
},
|
|
1077
|
+
"JsonRequestedPasses": {
|
|
1078
|
+
"type": "object",
|
|
1079
|
+
"properties": {
|
|
1080
|
+
"manifest": {
|
|
1081
|
+
"type": "boolean",
|
|
1082
|
+
"description": "`--location` was passed."
|
|
1083
|
+
},
|
|
1084
|
+
"docs": {
|
|
1085
|
+
"type": "boolean",
|
|
1086
|
+
"description": "`--docs` was passed."
|
|
1087
|
+
},
|
|
1088
|
+
"usage": {
|
|
1089
|
+
"type": "boolean",
|
|
1090
|
+
"description": "`--ownership` was passed."
|
|
1091
|
+
},
|
|
1092
|
+
"evidence": {
|
|
1093
|
+
"type": "boolean",
|
|
1094
|
+
"description": "`--evidence` was passed."
|
|
1095
|
+
}
|
|
1096
|
+
},
|
|
1097
|
+
"required": [
|
|
1098
|
+
"manifest",
|
|
1099
|
+
"docs",
|
|
1100
|
+
"usage",
|
|
1101
|
+
"evidence"
|
|
1102
|
+
],
|
|
1103
|
+
"additionalProperties": false,
|
|
1104
|
+
"description": "Which passes this invocation actually asked for -- recorded explicitly so a consumer never has to infer intent from which top-level keys happen to be present."
|
|
1105
|
+
},
|
|
1106
|
+
"EvidenceModel": {
|
|
1107
|
+
"type": "object",
|
|
1108
|
+
"properties": {
|
|
1109
|
+
"schemaVersion": {
|
|
1110
|
+
"type": "number",
|
|
1111
|
+
"const": 1
|
|
1112
|
+
},
|
|
1113
|
+
"provenance": {
|
|
1114
|
+
"$ref": "#/definitions/EvidenceProvenance"
|
|
1115
|
+
},
|
|
1116
|
+
"contract": {
|
|
1117
|
+
"$ref": "#/definitions/ContractModel"
|
|
1118
|
+
},
|
|
1119
|
+
"dependency": {
|
|
1120
|
+
"$ref": "#/definitions/DependencyModel"
|
|
1121
|
+
},
|
|
1122
|
+
"ownership": {
|
|
1123
|
+
"$ref": "#/definitions/OwnershipModel"
|
|
1124
|
+
},
|
|
1125
|
+
"lifecycle": {
|
|
1126
|
+
"$ref": "#/definitions/LifecycleModel"
|
|
1127
|
+
},
|
|
1128
|
+
"finding": {
|
|
1129
|
+
"$ref": "#/definitions/FindingModel"
|
|
1130
|
+
},
|
|
1131
|
+
"change": {
|
|
1132
|
+
"$ref": "#/definitions/ChangeModel"
|
|
1133
|
+
}
|
|
1134
|
+
},
|
|
1135
|
+
"required": [
|
|
1136
|
+
"schemaVersion",
|
|
1137
|
+
"provenance",
|
|
1138
|
+
"contract",
|
|
1139
|
+
"dependency",
|
|
1140
|
+
"ownership",
|
|
1141
|
+
"lifecycle",
|
|
1142
|
+
"finding",
|
|
1143
|
+
"change"
|
|
1144
|
+
],
|
|
1145
|
+
"additionalProperties": false,
|
|
1146
|
+
"description": "The seventh canonical fact model (ADR 0024): the assembled union of the other six, plus provenance, the immutable input every `defineEvidenceProjection()` projector runs over (`env-cap/evidence`, ADR 0031)."
|
|
1147
|
+
},
|
|
1148
|
+
"EvidenceProvenance": {
|
|
1149
|
+
"type": "object",
|
|
1150
|
+
"properties": {
|
|
1151
|
+
"generatedAt": {
|
|
1152
|
+
"type": "string"
|
|
1153
|
+
},
|
|
1154
|
+
"toolVersion": {
|
|
1155
|
+
"type": "string"
|
|
1156
|
+
},
|
|
1157
|
+
"commit": {
|
|
1158
|
+
"type": "string"
|
|
1159
|
+
}
|
|
1160
|
+
},
|
|
1161
|
+
"required": [
|
|
1162
|
+
"generatedAt",
|
|
1163
|
+
"toolVersion"
|
|
1164
|
+
],
|
|
1165
|
+
"additionalProperties": false,
|
|
1166
|
+
"description": "Who/when/what produced a given `EvidenceModel` instance. Caller-supplied, never ambient-detected -- `generateEvidenceModel()` never shells out to `git` itself, mirroring ADR 0012's live-expiration-callback precedent."
|
|
1167
|
+
},
|
|
1168
|
+
"ContractModel": {
|
|
1169
|
+
"type": "object",
|
|
1170
|
+
"properties": {
|
|
1171
|
+
"schemaVersion": {
|
|
1172
|
+
"type": "number",
|
|
1173
|
+
"const": 3
|
|
1174
|
+
},
|
|
1175
|
+
"contracts": {
|
|
1176
|
+
"type": "array",
|
|
1177
|
+
"items": {
|
|
1178
|
+
"$ref": "#/definitions/ContractModelContract"
|
|
1179
|
+
}
|
|
1180
|
+
}
|
|
1181
|
+
},
|
|
1182
|
+
"required": [
|
|
1183
|
+
"schemaVersion",
|
|
1184
|
+
"contracts"
|
|
1185
|
+
],
|
|
1186
|
+
"additionalProperties": false
|
|
1187
|
+
},
|
|
1188
|
+
"ContractModelContract": {
|
|
1189
|
+
"type": "object",
|
|
1190
|
+
"properties": {
|
|
1191
|
+
"owner": {
|
|
1192
|
+
"type": "string"
|
|
1193
|
+
},
|
|
1194
|
+
"sensitivity": {
|
|
1195
|
+
"type": "string"
|
|
1196
|
+
},
|
|
1197
|
+
"expiresAt": {
|
|
1198
|
+
"type": "string"
|
|
1199
|
+
},
|
|
1200
|
+
"purpose": {
|
|
1201
|
+
"type": "string"
|
|
1202
|
+
},
|
|
1203
|
+
"legalBasis": {
|
|
1204
|
+
"type": "string"
|
|
1205
|
+
},
|
|
1206
|
+
"retention": {
|
|
1207
|
+
"type": "string"
|
|
1208
|
+
},
|
|
1209
|
+
"dataResidency": {
|
|
1210
|
+
"anyOf": [
|
|
1211
|
+
{
|
|
1212
|
+
"type": "string"
|
|
1213
|
+
},
|
|
1214
|
+
{
|
|
1215
|
+
"type": "array",
|
|
1216
|
+
"items": {
|
|
1217
|
+
"type": "string"
|
|
1218
|
+
}
|
|
1219
|
+
}
|
|
1220
|
+
]
|
|
1221
|
+
},
|
|
1222
|
+
"auditRequired": {
|
|
1223
|
+
"type": "boolean"
|
|
1224
|
+
},
|
|
1225
|
+
"metadata": {
|
|
1226
|
+
"type": "object",
|
|
1227
|
+
"additionalProperties": {}
|
|
1228
|
+
},
|
|
1229
|
+
"file": {
|
|
1230
|
+
"type": "string",
|
|
1231
|
+
"description": "Root-relative, POSIX-separated -- matches `DiscoveredContractSummary.file`."
|
|
1232
|
+
},
|
|
1233
|
+
"exportName": {
|
|
1234
|
+
"type": "string"
|
|
1235
|
+
},
|
|
1236
|
+
"contractName": {
|
|
1237
|
+
"type": "string"
|
|
1238
|
+
},
|
|
1239
|
+
"active": {
|
|
1240
|
+
"type": "boolean"
|
|
1241
|
+
},
|
|
1242
|
+
"category": {
|
|
1243
|
+
"type": "string"
|
|
1244
|
+
},
|
|
1245
|
+
"exclusiveGroup": {
|
|
1246
|
+
"type": "string"
|
|
1247
|
+
},
|
|
1248
|
+
"variables": {
|
|
1249
|
+
"type": "array",
|
|
1250
|
+
"items": {
|
|
1251
|
+
"$ref": "#/definitions/ContractModelVariable"
|
|
1252
|
+
}
|
|
1253
|
+
},
|
|
1254
|
+
"documented": {
|
|
1255
|
+
"type": "boolean"
|
|
1256
|
+
},
|
|
1257
|
+
"packageOrigin": {
|
|
1258
|
+
"$ref": "#/definitions/PackageOrigin"
|
|
1259
|
+
},
|
|
1260
|
+
"declaration": {
|
|
1261
|
+
"$ref": "#/definitions/SourcePosition",
|
|
1262
|
+
"description": "Where this contract's `createEnv(...)` call is declared. Always present. See ADR 0036."
|
|
1263
|
+
},
|
|
1264
|
+
"documentation": {
|
|
1265
|
+
"$ref": "#/definitions/SourcePosition",
|
|
1266
|
+
"description": "Where this contract's `documentEnv(...)` call is declared, if one exists. See ADR 0036."
|
|
1267
|
+
}
|
|
1268
|
+
},
|
|
1269
|
+
"required": [
|
|
1270
|
+
"file",
|
|
1271
|
+
"exportName",
|
|
1272
|
+
"contractName",
|
|
1273
|
+
"active",
|
|
1274
|
+
"variables",
|
|
1275
|
+
"documented",
|
|
1276
|
+
"declaration"
|
|
1277
|
+
],
|
|
1278
|
+
"additionalProperties": false,
|
|
1279
|
+
"description": "One `createEnv()` contract's full statically-discoverable contract, active or not."
|
|
1280
|
+
},
|
|
1281
|
+
"ContractModelVariable": {
|
|
1282
|
+
"type": "object",
|
|
1283
|
+
"properties": {
|
|
1284
|
+
"owner": {
|
|
1285
|
+
"type": "string"
|
|
1286
|
+
},
|
|
1287
|
+
"sensitivity": {
|
|
1288
|
+
"type": "string"
|
|
1289
|
+
},
|
|
1290
|
+
"expiresAt": {
|
|
1291
|
+
"type": "string"
|
|
1292
|
+
},
|
|
1293
|
+
"purpose": {
|
|
1294
|
+
"type": "string"
|
|
1295
|
+
},
|
|
1296
|
+
"legalBasis": {
|
|
1297
|
+
"type": "string"
|
|
1298
|
+
},
|
|
1299
|
+
"retention": {
|
|
1300
|
+
"type": "string"
|
|
1301
|
+
},
|
|
1302
|
+
"dataResidency": {
|
|
1303
|
+
"anyOf": [
|
|
1304
|
+
{
|
|
1305
|
+
"type": "string"
|
|
1306
|
+
},
|
|
1307
|
+
{
|
|
1308
|
+
"type": "array",
|
|
1309
|
+
"items": {
|
|
1310
|
+
"type": "string"
|
|
1311
|
+
}
|
|
1312
|
+
}
|
|
1313
|
+
]
|
|
1314
|
+
},
|
|
1315
|
+
"auditRequired": {
|
|
1316
|
+
"type": "boolean"
|
|
1317
|
+
},
|
|
1318
|
+
"metadata": {
|
|
1319
|
+
"type": "object",
|
|
1320
|
+
"additionalProperties": {}
|
|
1321
|
+
},
|
|
1322
|
+
"key": {
|
|
1323
|
+
"type": "string"
|
|
1324
|
+
},
|
|
1325
|
+
"hasDefault": {
|
|
1326
|
+
"type": "boolean"
|
|
1327
|
+
},
|
|
1328
|
+
"defaultValue": {
|
|
1329
|
+
"anyOf": [
|
|
1330
|
+
{
|
|
1331
|
+
"type": "object",
|
|
1332
|
+
"properties": {
|
|
1333
|
+
"ok": {
|
|
1334
|
+
"type": "boolean",
|
|
1335
|
+
"const": true
|
|
1336
|
+
},
|
|
1337
|
+
"value": {}
|
|
1338
|
+
},
|
|
1339
|
+
"required": [
|
|
1340
|
+
"ok",
|
|
1341
|
+
"value"
|
|
1342
|
+
],
|
|
1343
|
+
"additionalProperties": false
|
|
1344
|
+
},
|
|
1345
|
+
{
|
|
1346
|
+
"type": "object",
|
|
1347
|
+
"properties": {
|
|
1348
|
+
"ok": {
|
|
1349
|
+
"type": "boolean",
|
|
1350
|
+
"const": false
|
|
1351
|
+
}
|
|
1352
|
+
},
|
|
1353
|
+
"required": [
|
|
1354
|
+
"ok"
|
|
1355
|
+
],
|
|
1356
|
+
"additionalProperties": false
|
|
1357
|
+
}
|
|
1358
|
+
]
|
|
1359
|
+
},
|
|
1360
|
+
"hasProcessor": {
|
|
1361
|
+
"type": "boolean"
|
|
1362
|
+
},
|
|
1363
|
+
"processorSource": {
|
|
1364
|
+
"type": "string"
|
|
1365
|
+
},
|
|
1366
|
+
"processorReturnType": {
|
|
1367
|
+
"type": "string"
|
|
1368
|
+
},
|
|
1369
|
+
"hasValidator": {
|
|
1370
|
+
"type": "boolean"
|
|
1371
|
+
},
|
|
1372
|
+
"validatorSource": {
|
|
1373
|
+
"type": "string"
|
|
1374
|
+
},
|
|
1375
|
+
"context": {
|
|
1376
|
+
"type": "string"
|
|
1377
|
+
},
|
|
1378
|
+
"description": {
|
|
1379
|
+
"type": "string"
|
|
1380
|
+
},
|
|
1381
|
+
"refreshInstructions": {
|
|
1382
|
+
"type": "string"
|
|
1383
|
+
},
|
|
1384
|
+
"setupInstructions": {
|
|
1385
|
+
"type": "string"
|
|
1386
|
+
},
|
|
1387
|
+
"required": {
|
|
1388
|
+
"type": "boolean"
|
|
1389
|
+
},
|
|
1390
|
+
"documented": {
|
|
1391
|
+
"type": "boolean"
|
|
1392
|
+
},
|
|
1393
|
+
"evidence": {
|
|
1394
|
+
"$ref": "#/definitions/DiscoveredVariableEvidence",
|
|
1395
|
+
"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."
|
|
1396
|
+
},
|
|
1397
|
+
"declaration": {
|
|
1398
|
+
"$ref": "#/definitions/SourcePosition",
|
|
1399
|
+
"description": "Where this variable's own schema property is declared. See ADR 0036."
|
|
1400
|
+
}
|
|
1401
|
+
},
|
|
1402
|
+
"required": [
|
|
1403
|
+
"key",
|
|
1404
|
+
"hasDefault",
|
|
1405
|
+
"hasProcessor",
|
|
1406
|
+
"hasValidator",
|
|
1407
|
+
"documented",
|
|
1408
|
+
"declaration"
|
|
1409
|
+
],
|
|
1410
|
+
"additionalProperties": false,
|
|
1411
|
+
"description": "One variable's full statically-discoverable contract: schema-shaped facts plus linked documentation."
|
|
1412
|
+
},
|
|
1413
|
+
"PackageOrigin": {
|
|
1414
|
+
"type": "object",
|
|
1415
|
+
"properties": {
|
|
1416
|
+
"packageName": {
|
|
1417
|
+
"type": "string",
|
|
1418
|
+
"description": "The allow-listed package name that declared this schema."
|
|
1419
|
+
},
|
|
1420
|
+
"declaredField": {
|
|
1421
|
+
"type": "string",
|
|
1422
|
+
"description": "The `\"envCap.schema\"` value exactly as the package author wrote it."
|
|
1423
|
+
},
|
|
1424
|
+
"resolvedFile": {
|
|
1425
|
+
"type": "string",
|
|
1426
|
+
"description": "Absolute, realpath-canonicalized path to the resolved schema file."
|
|
1427
|
+
},
|
|
1428
|
+
"packageDir": {
|
|
1429
|
+
"type": "string",
|
|
1430
|
+
"description": "Absolute, realpath-canonicalized path to the package's own directory."
|
|
1431
|
+
}
|
|
1432
|
+
},
|
|
1433
|
+
"required": [
|
|
1434
|
+
"packageName",
|
|
1435
|
+
"declaredField",
|
|
1436
|
+
"resolvedFile",
|
|
1437
|
+
"packageDir"
|
|
1438
|
+
],
|
|
1439
|
+
"additionalProperties": false,
|
|
1440
|
+
"description": "Both the authored and resolved forms are kept -- diagnostics benefit from showing exactly what a package author wrote versus what it resolved to."
|
|
1441
|
+
},
|
|
1442
|
+
"DependencyModel": {
|
|
1443
|
+
"type": "object",
|
|
1444
|
+
"properties": {
|
|
1445
|
+
"schemaVersion": {
|
|
1446
|
+
"type": "number",
|
|
1447
|
+
"const": 2
|
|
1448
|
+
},
|
|
1449
|
+
"contracts": {
|
|
1450
|
+
"type": "array",
|
|
1451
|
+
"items": {
|
|
1452
|
+
"$ref": "#/definitions/DependencyModelContract"
|
|
1453
|
+
}
|
|
1454
|
+
},
|
|
1455
|
+
"consumers": {
|
|
1456
|
+
"type": "array",
|
|
1457
|
+
"items": {
|
|
1458
|
+
"$ref": "#/definitions/DependencyModelConsumer"
|
|
1459
|
+
},
|
|
1460
|
+
"description": "Inverse of `contracts[].consumingFiles` -- one entry per file that consumes at least one contract, listing which contracts it reads."
|
|
1461
|
+
},
|
|
1462
|
+
"warnings": {
|
|
1463
|
+
"type": "array",
|
|
1464
|
+
"items": {
|
|
1465
|
+
"$ref": "#/definitions/ParseWarning"
|
|
1466
|
+
}
|
|
1467
|
+
},
|
|
1468
|
+
"scannedSurfaces": {
|
|
1469
|
+
"type": "array",
|
|
1470
|
+
"items": {
|
|
1471
|
+
"$ref": "#/definitions/ScannedSurface"
|
|
1472
|
+
},
|
|
1473
|
+
"description": "Every surface actually scanned for usage -- see ADR 0036. Always has at least one entry (the application root)."
|
|
1474
|
+
}
|
|
1475
|
+
},
|
|
1476
|
+
"required": [
|
|
1477
|
+
"schemaVersion",
|
|
1478
|
+
"contracts",
|
|
1479
|
+
"consumers",
|
|
1480
|
+
"warnings",
|
|
1481
|
+
"scannedSurfaces"
|
|
1482
|
+
],
|
|
1483
|
+
"additionalProperties": false
|
|
1484
|
+
},
|
|
1485
|
+
"DependencyModelContract": {
|
|
1486
|
+
"type": "object",
|
|
1487
|
+
"properties": {
|
|
1488
|
+
"file": {
|
|
1489
|
+
"type": "string",
|
|
1490
|
+
"description": "Root-relative, POSIX-separated -- matches `ContractModelContract.file`."
|
|
1491
|
+
},
|
|
1492
|
+
"exportName": {
|
|
1493
|
+
"type": "string"
|
|
1494
|
+
},
|
|
1495
|
+
"contractName": {
|
|
1496
|
+
"type": "string"
|
|
1497
|
+
},
|
|
1498
|
+
"imported": {
|
|
1499
|
+
"type": "boolean"
|
|
1500
|
+
},
|
|
1501
|
+
"hasDynamicAccess": {
|
|
1502
|
+
"type": "boolean"
|
|
1503
|
+
},
|
|
1504
|
+
"variables": {
|
|
1505
|
+
"type": "array",
|
|
1506
|
+
"items": {
|
|
1507
|
+
"$ref": "#/definitions/DependencyModelVariable"
|
|
1508
|
+
}
|
|
1509
|
+
},
|
|
1510
|
+
"consumingFiles": {
|
|
1511
|
+
"type": "array",
|
|
1512
|
+
"items": {
|
|
1513
|
+
"type": "string"
|
|
1514
|
+
},
|
|
1515
|
+
"description": "Every file coupled to this contract -- contract-level \"who depends on this,\" not proof any specific variable was read."
|
|
1516
|
+
},
|
|
1517
|
+
"ambiguousBarrelFiles": {
|
|
1518
|
+
"type": "array",
|
|
1519
|
+
"items": {
|
|
1520
|
+
"type": "string"
|
|
1521
|
+
},
|
|
1522
|
+
"description": "Files whose import of this contract's name couldn't be verified because it resolved through a file containing an unresolved wildcard re-export."
|
|
1523
|
+
},
|
|
1524
|
+
"dynamicAccessSites": {
|
|
1525
|
+
"type": "array",
|
|
1526
|
+
"items": {
|
|
1527
|
+
"$ref": "#/definitions/SourcePosition"
|
|
1528
|
+
},
|
|
1529
|
+
"description": "Every computed (dynamic) property-access site observed anywhere on this contract -- see ADR 0036."
|
|
1530
|
+
}
|
|
1531
|
+
},
|
|
1532
|
+
"required": [
|
|
1533
|
+
"file",
|
|
1534
|
+
"exportName",
|
|
1535
|
+
"contractName",
|
|
1536
|
+
"imported",
|
|
1537
|
+
"hasDynamicAccess",
|
|
1538
|
+
"variables",
|
|
1539
|
+
"consumingFiles",
|
|
1540
|
+
"ambiguousBarrelFiles",
|
|
1541
|
+
"dynamicAccessSites"
|
|
1542
|
+
],
|
|
1543
|
+
"additionalProperties": false
|
|
1544
|
+
},
|
|
1545
|
+
"DependencyModelVariable": {
|
|
1546
|
+
"type": "object",
|
|
1547
|
+
"properties": {
|
|
1548
|
+
"key": {
|
|
1549
|
+
"type": "string"
|
|
1550
|
+
},
|
|
1551
|
+
"status": {
|
|
1552
|
+
"$ref": "#/definitions/VariableAccessStatus"
|
|
1553
|
+
},
|
|
1554
|
+
"positions": {
|
|
1555
|
+
"type": "array",
|
|
1556
|
+
"items": {
|
|
1557
|
+
"$ref": "#/definitions/SourcePosition"
|
|
1558
|
+
},
|
|
1559
|
+
"description": "Empty unless `status === \"used\"`. Previously discarded before reaching any public type -- see ADR 0027 (line only) and ADR 0036 (full position, file included per entry)."
|
|
1560
|
+
},
|
|
1561
|
+
"dynamicAccessAssertions": {
|
|
1562
|
+
"type": "array",
|
|
1563
|
+
"items": {
|
|
1564
|
+
"$ref": "#/definitions/DynamicAccessAssertion"
|
|
1565
|
+
},
|
|
1566
|
+
"description": "Every developer-declared `dynamicAccess` citation's current freshness for this variable -- a wholly separate, independent fact from `status` above, never folded into it. Empty when no citation was declared, or when no manifest snapshot baseline was available to check against (the manifest pass wasn't also requested). See ADR 0037."
|
|
1567
|
+
}
|
|
1568
|
+
},
|
|
1569
|
+
"required": [
|
|
1570
|
+
"key",
|
|
1571
|
+
"status",
|
|
1572
|
+
"positions",
|
|
1573
|
+
"dynamicAccessAssertions"
|
|
1574
|
+
],
|
|
1575
|
+
"additionalProperties": false,
|
|
1576
|
+
"description": "One variable's access status within a contract, plus every position it was found member-accessed at, aggregated across every consuming file."
|
|
1577
|
+
},
|
|
1578
|
+
"VariableAccessStatus": {
|
|
1579
|
+
"type": "string",
|
|
1580
|
+
"enum": [
|
|
1581
|
+
"used",
|
|
1582
|
+
"unconsumed",
|
|
1583
|
+
"indeterminate"
|
|
1584
|
+
],
|
|
1585
|
+
"description": "What env-cap's static scan could prove about one variable's consumption: it was member-accessed somewhere (`\"used\"`), it was never accessed at all within the scanned surfaces (`\"unconsumed\"`), or a computed (dynamic) property access on the owning contract makes the answer unprovable (`\"indeterminate\"`)."
|
|
1586
|
+
},
|
|
1587
|
+
"DependencyModelConsumer": {
|
|
1588
|
+
"type": "object",
|
|
1589
|
+
"properties": {
|
|
1590
|
+
"file": {
|
|
1591
|
+
"type": "string",
|
|
1592
|
+
"description": "Root-relative, POSIX-separated."
|
|
1593
|
+
},
|
|
1594
|
+
"contracts": {
|
|
1595
|
+
"type": "array",
|
|
1596
|
+
"items": {
|
|
1597
|
+
"$ref": "#/definitions/DependencyModelContractRef"
|
|
1598
|
+
}
|
|
1599
|
+
}
|
|
1600
|
+
},
|
|
1601
|
+
"required": [
|
|
1602
|
+
"file",
|
|
1603
|
+
"contracts"
|
|
1604
|
+
],
|
|
1605
|
+
"additionalProperties": false,
|
|
1606
|
+
"description": "One consuming file, and every contract it depends on -- the inverse of `DependencyModelContract.consumingFiles`."
|
|
1607
|
+
},
|
|
1608
|
+
"DependencyModelContractRef": {
|
|
1609
|
+
"$ref": "#/definitions/ContractRef",
|
|
1610
|
+
"description": "One contract, as referenced from the inverse (`consumers`) index -- see ContractRef for why no `contractName` is carried here."
|
|
1611
|
+
},
|
|
1612
|
+
"ContractRef": {
|
|
1613
|
+
"type": "object",
|
|
1614
|
+
"properties": {
|
|
1615
|
+
"file": {
|
|
1616
|
+
"type": "string",
|
|
1617
|
+
"description": "Root-relative, POSIX-separated path of the file declaring the contract -- see `displayPath()`."
|
|
1618
|
+
},
|
|
1619
|
+
"exportName": {
|
|
1620
|
+
"type": "string",
|
|
1621
|
+
"description": "The binding name the `createEnv()` result is exported as."
|
|
1622
|
+
}
|
|
1623
|
+
},
|
|
1624
|
+
"required": [
|
|
1625
|
+
"file",
|
|
1626
|
+
"exportName"
|
|
1627
|
+
],
|
|
1628
|
+
"additionalProperties": false,
|
|
1629
|
+
"description": "The one shape every model in this package uses to point at a declared contract: the file it's declared in, and the binding it's exported as. Nothing else -- see ADR 0039."
|
|
1630
|
+
},
|
|
1631
|
+
"OwnershipModel": {
|
|
1632
|
+
"type": "object",
|
|
1633
|
+
"properties": {
|
|
1634
|
+
"schemaVersion": {
|
|
1635
|
+
"type": "number",
|
|
1636
|
+
"const": 1
|
|
1637
|
+
},
|
|
1638
|
+
"contracts": {
|
|
1639
|
+
"type": "array",
|
|
1640
|
+
"items": {
|
|
1641
|
+
"$ref": "#/definitions/OwnershipModelContract"
|
|
1642
|
+
}
|
|
1643
|
+
},
|
|
1644
|
+
"unownedContracts": {
|
|
1645
|
+
"type": "array",
|
|
1646
|
+
"items": {
|
|
1647
|
+
"$ref": "#/definitions/OwnershipModelContractRef"
|
|
1648
|
+
},
|
|
1649
|
+
"description": "Every contract with no `owner` set at all."
|
|
1650
|
+
},
|
|
1651
|
+
"unownedVariables": {
|
|
1652
|
+
"type": "array",
|
|
1653
|
+
"items": {
|
|
1654
|
+
"$ref": "#/definitions/OwnershipModelVariableRef"
|
|
1655
|
+
},
|
|
1656
|
+
"description": "Every variable whose effective owner (its own, falling back to the contract's) is still `undefined`."
|
|
1657
|
+
}
|
|
1658
|
+
},
|
|
1659
|
+
"required": [
|
|
1660
|
+
"schemaVersion",
|
|
1661
|
+
"contracts",
|
|
1662
|
+
"unownedContracts",
|
|
1663
|
+
"unownedVariables"
|
|
1664
|
+
],
|
|
1665
|
+
"additionalProperties": false
|
|
1666
|
+
},
|
|
1667
|
+
"OwnershipModelContract": {
|
|
1668
|
+
"type": "object",
|
|
1669
|
+
"properties": {
|
|
1670
|
+
"file": {
|
|
1671
|
+
"type": "string",
|
|
1672
|
+
"description": "Root-relative, POSIX-separated -- matches `ContractModelContract.file`."
|
|
1673
|
+
},
|
|
1674
|
+
"exportName": {
|
|
1675
|
+
"type": "string"
|
|
1676
|
+
},
|
|
1677
|
+
"contractName": {
|
|
1678
|
+
"type": "string"
|
|
1679
|
+
},
|
|
1680
|
+
"owner": {
|
|
1681
|
+
"type": "string",
|
|
1682
|
+
"description": "The contract's own default owner -- not \"effective\" the way a variable's is, since there's no level above a contract to fall back to."
|
|
1683
|
+
},
|
|
1684
|
+
"variables": {
|
|
1685
|
+
"type": "array",
|
|
1686
|
+
"items": {
|
|
1687
|
+
"$ref": "#/definitions/OwnershipModelVariable"
|
|
1688
|
+
}
|
|
1689
|
+
}
|
|
1690
|
+
},
|
|
1691
|
+
"required": [
|
|
1692
|
+
"file",
|
|
1693
|
+
"exportName",
|
|
1694
|
+
"contractName",
|
|
1695
|
+
"variables"
|
|
1696
|
+
],
|
|
1697
|
+
"additionalProperties": false
|
|
1698
|
+
},
|
|
1699
|
+
"OwnershipModelVariable": {
|
|
1700
|
+
"type": "object",
|
|
1701
|
+
"properties": {
|
|
1702
|
+
"key": {
|
|
1703
|
+
"type": "string"
|
|
1704
|
+
},
|
|
1705
|
+
"owner": {
|
|
1706
|
+
"type": "string",
|
|
1707
|
+
"description": "The variable's own `owner`, falling back to the contract's -- see `effectiveOwner()`."
|
|
1708
|
+
}
|
|
1709
|
+
},
|
|
1710
|
+
"required": [
|
|
1711
|
+
"key"
|
|
1712
|
+
],
|
|
1713
|
+
"additionalProperties": false,
|
|
1714
|
+
"description": "One variable's effective owner (its own, falling back to the contract's)."
|
|
1715
|
+
},
|
|
1716
|
+
"OwnershipModelContractRef": {
|
|
1717
|
+
"$ref": "#/definitions/ContractRef",
|
|
1718
|
+
"description": "One contract, referenced by identity only -- see ContractRef for why no `contractName` is carried here. Resolve one from `ContractModel` when a renderer needs display text."
|
|
1719
|
+
},
|
|
1720
|
+
"OwnershipModelVariableRef": {
|
|
1721
|
+
"type": "object",
|
|
1722
|
+
"properties": {
|
|
1723
|
+
"file": {
|
|
1724
|
+
"type": "string",
|
|
1725
|
+
"description": "Root-relative, POSIX-separated path of the file declaring the contract -- see `displayPath()`."
|
|
1726
|
+
},
|
|
1727
|
+
"exportName": {
|
|
1728
|
+
"type": "string",
|
|
1729
|
+
"description": "The binding name the `createEnv()` result is exported as."
|
|
1730
|
+
},
|
|
1731
|
+
"key": {
|
|
1732
|
+
"type": "string"
|
|
1733
|
+
}
|
|
1734
|
+
},
|
|
1735
|
+
"required": [
|
|
1736
|
+
"exportName",
|
|
1737
|
+
"file",
|
|
1738
|
+
"key"
|
|
1739
|
+
],
|
|
1740
|
+
"additionalProperties": false,
|
|
1741
|
+
"description": "One variable, referenced by its owning contract's identity plus its own key -- see ContractRef."
|
|
1742
|
+
},
|
|
1743
|
+
"LifecycleModel": {
|
|
1744
|
+
"type": "object",
|
|
1745
|
+
"properties": {
|
|
1746
|
+
"schemaVersion": {
|
|
1747
|
+
"type": "number",
|
|
1748
|
+
"const": 2
|
|
1749
|
+
},
|
|
1750
|
+
"contracts": {
|
|
1751
|
+
"type": "array",
|
|
1752
|
+
"items": {
|
|
1753
|
+
"$ref": "#/definitions/LifecycleModelContract"
|
|
1754
|
+
},
|
|
1755
|
+
"description": "Only contracts with at least one lifecycle-relevant field set, at the contract level or on at least one variable."
|
|
1756
|
+
},
|
|
1757
|
+
"expiring": {
|
|
1758
|
+
"type": "array",
|
|
1759
|
+
"items": {
|
|
1760
|
+
"$ref": "#/definitions/ExpiringEntry"
|
|
1761
|
+
},
|
|
1762
|
+
"description": "Every contract-/variable-level `expiresAt` within the configured window, soonest-first -- see `computeExpiringEntries()`. `file` is root-relative and POSIX-separated here, matching `LifecycleModelContract.file`/every other canonical model -- unlike `ExpiringEntry`'s own doc comment, which describes its shape in `computeExpiringEntries()`'s other direct consumers (e.g. `DocumentationFindings.expiringSoon`), where `file` stays the absolute path `renderDocs()` itself expects."
|
|
1763
|
+
}
|
|
1764
|
+
},
|
|
1765
|
+
"required": [
|
|
1766
|
+
"schemaVersion",
|
|
1767
|
+
"contracts",
|
|
1768
|
+
"expiring"
|
|
1769
|
+
],
|
|
1770
|
+
"additionalProperties": false
|
|
1771
|
+
},
|
|
1772
|
+
"LifecycleModelContract": {
|
|
1773
|
+
"type": "object",
|
|
1774
|
+
"properties": {
|
|
1775
|
+
"file": {
|
|
1776
|
+
"type": "string",
|
|
1777
|
+
"description": "Root-relative, POSIX-separated -- matches `ContractModelContract.file`."
|
|
1778
|
+
},
|
|
1779
|
+
"exportName": {
|
|
1780
|
+
"type": "string"
|
|
1781
|
+
},
|
|
1782
|
+
"contractName": {
|
|
1783
|
+
"type": "string"
|
|
1784
|
+
},
|
|
1785
|
+
"expiresAt": {
|
|
1786
|
+
"type": "string"
|
|
1787
|
+
},
|
|
1788
|
+
"deprecated": {
|
|
1789
|
+
"type": "boolean"
|
|
1790
|
+
},
|
|
1791
|
+
"deprecatedReason": {
|
|
1792
|
+
"type": "string"
|
|
1793
|
+
},
|
|
1794
|
+
"retention": {
|
|
1795
|
+
"type": "string",
|
|
1796
|
+
"description": "See LifecycleModelVariable.retention."
|
|
1797
|
+
},
|
|
1798
|
+
"variables": {
|
|
1799
|
+
"type": "array",
|
|
1800
|
+
"items": {
|
|
1801
|
+
"$ref": "#/definitions/LifecycleModelVariable"
|
|
1802
|
+
},
|
|
1803
|
+
"description": "Only variables with at least one lifecycle field set (`expiresAt`, `refreshInstructions`, `deprecated`, `removeBy`, `renamedFrom`, `retention`) -- same \"only what's relevant\" scope `renderLifecycleReport()` already uses for its rows."
|
|
1804
|
+
}
|
|
1805
|
+
},
|
|
1806
|
+
"required": [
|
|
1807
|
+
"file",
|
|
1808
|
+
"exportName",
|
|
1809
|
+
"contractName",
|
|
1810
|
+
"variables"
|
|
1811
|
+
],
|
|
1812
|
+
"additionalProperties": false
|
|
1813
|
+
},
|
|
1814
|
+
"LifecycleModelVariable": {
|
|
1815
|
+
"type": "object",
|
|
1816
|
+
"properties": {
|
|
1817
|
+
"key": {
|
|
1818
|
+
"type": "string"
|
|
1819
|
+
},
|
|
1820
|
+
"expiresAt": {
|
|
1821
|
+
"type": "string"
|
|
1822
|
+
},
|
|
1823
|
+
"refreshInstructions": {
|
|
1824
|
+
"type": "string"
|
|
1825
|
+
},
|
|
1826
|
+
"deprecated": {
|
|
1827
|
+
"type": "boolean"
|
|
1828
|
+
},
|
|
1829
|
+
"deprecatedReason": {
|
|
1830
|
+
"type": "string"
|
|
1831
|
+
},
|
|
1832
|
+
"removeBy": {
|
|
1833
|
+
"type": "string"
|
|
1834
|
+
},
|
|
1835
|
+
"renamedFrom": {
|
|
1836
|
+
"type": "string",
|
|
1837
|
+
"description": "The previous variable name this one renames, if set -- see `ManifestChangeReport`'s rename correlation (ADR 0029/0030)."
|
|
1838
|
+
},
|
|
1839
|
+
"retention": {
|
|
1840
|
+
"type": "string",
|
|
1841
|
+
"description": "Descriptive retention policy (e.g. \"delete after 90 days\") -- a policy statement, never computed or parsed, deliberately independent of `expiresAt`'s actual temporal constraint. See ADR 0035."
|
|
1842
|
+
}
|
|
1843
|
+
},
|
|
1844
|
+
"required": [
|
|
1845
|
+
"key"
|
|
1846
|
+
],
|
|
1847
|
+
"additionalProperties": false,
|
|
1848
|
+
"description": "One variable's lifecycle data (expiry, deprecation, rename correlation)."
|
|
1849
|
+
},
|
|
1850
|
+
"FindingModel": {
|
|
1851
|
+
"type": "object",
|
|
1852
|
+
"properties": {
|
|
1853
|
+
"schemaVersion": {
|
|
1854
|
+
"type": "number",
|
|
1855
|
+
"const": 3
|
|
1856
|
+
},
|
|
1857
|
+
"findings": {
|
|
1858
|
+
"type": "array",
|
|
1859
|
+
"items": {
|
|
1860
|
+
"$ref": "#/definitions/Finding"
|
|
1861
|
+
}
|
|
1862
|
+
}
|
|
1863
|
+
},
|
|
1864
|
+
"required": [
|
|
1865
|
+
"schemaVersion",
|
|
1866
|
+
"findings"
|
|
1867
|
+
],
|
|
1868
|
+
"additionalProperties": false
|
|
1869
|
+
},
|
|
1870
|
+
"Finding": {
|
|
1871
|
+
"type": "object",
|
|
1872
|
+
"properties": {
|
|
1873
|
+
"severity": {
|
|
1874
|
+
"type": "string",
|
|
1875
|
+
"enum": [
|
|
1876
|
+
"error",
|
|
1877
|
+
"warning",
|
|
1878
|
+
"info"
|
|
1879
|
+
],
|
|
1880
|
+
"description": "`\"error\"` for a provable, always-blocking violation (e.g. an exclusive-group conflict); `\"warning\"` for everything gated by `onIncompatibility`/`onUndocumented`/`onOwnershipIssue`'s default \"warn\" behavior; `\"info\"` for an observation that is never actionable enough to block anything, even under `--strict` -- see `INFO_ONLY_CODES` in `generate-env-artifacts.ts`."
|
|
1881
|
+
},
|
|
1882
|
+
"code": {
|
|
1883
|
+
"$ref": "#/definitions/FindingCode",
|
|
1884
|
+
"description": "Stable, machine-readable identifier -- always set, unlike CompatibilityIssue.code which stays optional on that narrower, pre-existing type."
|
|
1885
|
+
},
|
|
1886
|
+
"family": {
|
|
1887
|
+
"$ref": "#/definitions/FindingFamily",
|
|
1888
|
+
"description": "Which source check produced this finding."
|
|
1889
|
+
},
|
|
1890
|
+
"message": {
|
|
1891
|
+
"type": "string",
|
|
1892
|
+
"description": "Human-readable explanation, reusing the source finding's own prose where one exists."
|
|
1893
|
+
},
|
|
1894
|
+
"location": {
|
|
1895
|
+
"$ref": "#/definitions/EvidenceReference",
|
|
1896
|
+
"description": "Structured pointer back to what this finding is about."
|
|
1897
|
+
}
|
|
1898
|
+
},
|
|
1899
|
+
"required": [
|
|
1900
|
+
"severity",
|
|
1901
|
+
"code",
|
|
1902
|
+
"family",
|
|
1903
|
+
"message",
|
|
1904
|
+
"location"
|
|
1905
|
+
],
|
|
1906
|
+
"additionalProperties": false,
|
|
1907
|
+
"description": "One rule violation or derived signal, in the Finding Model's canonical shape."
|
|
1908
|
+
},
|
|
1909
|
+
"FindingCode": {
|
|
1910
|
+
"anyOf": [
|
|
1911
|
+
{
|
|
1912
|
+
"$ref": "#/definitions/CompatibilityIssueCode"
|
|
1913
|
+
},
|
|
1914
|
+
{
|
|
1915
|
+
"type": "string",
|
|
1916
|
+
"const": "EXCLUSIVE_GROUP_VIOLATION"
|
|
1917
|
+
},
|
|
1918
|
+
{
|
|
1919
|
+
"type": "string",
|
|
1920
|
+
"const": "ARTIFACT_STALE"
|
|
1921
|
+
},
|
|
1922
|
+
{
|
|
1923
|
+
"type": "string",
|
|
1924
|
+
"const": "ARTIFACT_MISSING"
|
|
1925
|
+
},
|
|
1926
|
+
{
|
|
1927
|
+
"type": "string",
|
|
1928
|
+
"const": "UNDOCUMENTED_CONTRACT"
|
|
1929
|
+
},
|
|
1930
|
+
{
|
|
1931
|
+
"type": "string",
|
|
1932
|
+
"const": "UNDOCUMENTED_VARIABLE"
|
|
1933
|
+
},
|
|
1934
|
+
{
|
|
1935
|
+
"type": "string",
|
|
1936
|
+
"const": "STALE_DOC_ENTRY"
|
|
1937
|
+
},
|
|
1938
|
+
{
|
|
1939
|
+
"type": "string",
|
|
1940
|
+
"const": "EXPIRED"
|
|
1941
|
+
},
|
|
1942
|
+
{
|
|
1943
|
+
"type": "string",
|
|
1944
|
+
"const": "EXPIRING_SOON"
|
|
1945
|
+
},
|
|
1946
|
+
{
|
|
1947
|
+
"type": "string",
|
|
1948
|
+
"const": "UNRESOLVED_DOCUMENTENV_LINK"
|
|
1949
|
+
},
|
|
1950
|
+
{
|
|
1951
|
+
"type": "string",
|
|
1952
|
+
"const": "ABANDONED_CONTRACT"
|
|
1953
|
+
},
|
|
1954
|
+
{
|
|
1955
|
+
"type": "string",
|
|
1956
|
+
"const": "UNRESOLVED_CONSUMER"
|
|
1957
|
+
},
|
|
1958
|
+
{
|
|
1959
|
+
"type": "string",
|
|
1960
|
+
"const": "UNCONSUMED_OWNED_VARIABLE"
|
|
1961
|
+
},
|
|
1962
|
+
{
|
|
1963
|
+
"type": "string",
|
|
1964
|
+
"const": "INDETERMINATE_OWNERSHIP"
|
|
1965
|
+
},
|
|
1966
|
+
{
|
|
1967
|
+
"type": "string",
|
|
1968
|
+
"const": "MISSING_DYNAMIC_ACCESS_CITATION"
|
|
1969
|
+
},
|
|
1970
|
+
{
|
|
1971
|
+
"type": "string",
|
|
1972
|
+
"const": "STALE_DYNAMIC_ACCESS_CITATION"
|
|
1973
|
+
},
|
|
1974
|
+
{
|
|
1975
|
+
"type": "string",
|
|
1976
|
+
"const": "NONSTANDARD_SENSITIVITY_LEVEL"
|
|
1977
|
+
}
|
|
1978
|
+
],
|
|
1979
|
+
"description": "Every stable `code` a Finding can carry. A superset of CompatibilityIssueCode plus one code per non-compatibility source family this model adapts."
|
|
1980
|
+
},
|
|
1981
|
+
"FindingFamily": {
|
|
1982
|
+
"type": "string",
|
|
1983
|
+
"enum": [
|
|
1984
|
+
"compatibility",
|
|
1985
|
+
"drift",
|
|
1986
|
+
"documentation",
|
|
1987
|
+
"ownership"
|
|
1988
|
+
],
|
|
1989
|
+
"description": "Which source check produced a Finding -- coarser than `code`, for a consumer that only wants to filter by kind (e.g. \"show me every documentation gap\") without enumerating every individual code."
|
|
1990
|
+
},
|
|
1991
|
+
"EvidenceReference": {
|
|
1992
|
+
"anyOf": [
|
|
1993
|
+
{
|
|
1994
|
+
"$ref": "#/definitions/ContractEvidenceReference"
|
|
1995
|
+
},
|
|
1996
|
+
{
|
|
1997
|
+
"$ref": "#/definitions/OwnershipEvidenceReference"
|
|
1998
|
+
},
|
|
1999
|
+
{
|
|
2000
|
+
"$ref": "#/definitions/ChangeEvidenceReference"
|
|
2001
|
+
}
|
|
2002
|
+
],
|
|
2003
|
+
"description": "A structured pointer back to where a `Finding` (or, later, any other model's derived fact) came from -- never a formatted string. See ADR 0024 and ADR 0026."
|
|
2004
|
+
},
|
|
2005
|
+
"ContractEvidenceReference": {
|
|
2006
|
+
"type": "object",
|
|
2007
|
+
"properties": {
|
|
2008
|
+
"model": {
|
|
2009
|
+
"type": "string",
|
|
2010
|
+
"const": "contract"
|
|
2011
|
+
},
|
|
2012
|
+
"file": {
|
|
2013
|
+
"type": "string",
|
|
2014
|
+
"description": "Root-relative, POSIX-separated path of the file declaring the contract, when known -- see `displayPath()`."
|
|
2015
|
+
},
|
|
2016
|
+
"exportName": {
|
|
2017
|
+
"type": "string",
|
|
2018
|
+
"description": "The contract's exported binding name, when known."
|
|
2019
|
+
},
|
|
2020
|
+
"variable": {
|
|
2021
|
+
"type": "string",
|
|
2022
|
+
"description": "The environment variable name, when the finding is variable-level rather than contract-level."
|
|
2023
|
+
},
|
|
2024
|
+
"position": {
|
|
2025
|
+
"$ref": "#/definitions/SourcePosition",
|
|
2026
|
+
"description": "Exact file:line:column this finding is about -- the contract's `createEnv()` declaration, its `documentEnv()` declaration, or the specific variable's own declaration, whichever is most relevant to the finding. `undefined` only when no single position is more relevant than another (e.g. an `indeterminate-ownership` finding, which can have multiple candidate sites -- see `IndeterminateOwnershipFinding.dynamicAccessSites` for the full list instead). See ADR 0036."
|
|
2027
|
+
}
|
|
2028
|
+
},
|
|
2029
|
+
"required": [
|
|
2030
|
+
"model"
|
|
2031
|
+
],
|
|
2032
|
+
"additionalProperties": false,
|
|
2033
|
+
"description": "Points at a declared contract and, optionally, one of its variables -- the shape every `CompatibilityIssue`/documentation finding can be resolved to. Unlike ContractRef, both identity fields are optional here: a finding can legitimately know only the file (an unresolvable `documentEnv()` link) or neither."
|
|
2034
|
+
},
|
|
2035
|
+
"OwnershipEvidenceReference": {
|
|
2036
|
+
"type": "object",
|
|
2037
|
+
"properties": {
|
|
2038
|
+
"model": {
|
|
2039
|
+
"type": "string",
|
|
2040
|
+
"const": "ownership"
|
|
2041
|
+
},
|
|
2042
|
+
"contractName": {
|
|
2043
|
+
"type": "string"
|
|
2044
|
+
},
|
|
2045
|
+
"file": {
|
|
2046
|
+
"type": "string",
|
|
2047
|
+
"description": "Root-relative path of the file declaring the contract, when the source finding carries one."
|
|
2048
|
+
},
|
|
2049
|
+
"variable": {
|
|
2050
|
+
"type": "string",
|
|
2051
|
+
"description": "The environment variable name, when the finding is variable-level rather than contract-level."
|
|
2052
|
+
},
|
|
2053
|
+
"position": {
|
|
2054
|
+
"$ref": "#/definitions/SourcePosition",
|
|
2055
|
+
"description": "See ContractEvidenceReference.position."
|
|
2056
|
+
}
|
|
2057
|
+
},
|
|
2058
|
+
"required": [
|
|
2059
|
+
"model",
|
|
2060
|
+
"contractName"
|
|
2061
|
+
],
|
|
2062
|
+
"additionalProperties": false,
|
|
2063
|
+
"description": "Points at a contract by name for an ownership/usage finding -- `usage-report.ts`'s finding types don't consistently carry `file`/`exportName` together, only `contractName`."
|
|
2064
|
+
},
|
|
2065
|
+
"ChangeEvidenceReference": {
|
|
2066
|
+
"type": "object",
|
|
2067
|
+
"properties": {
|
|
2068
|
+
"model": {
|
|
2069
|
+
"type": "string",
|
|
2070
|
+
"const": "change"
|
|
2071
|
+
},
|
|
2072
|
+
"path": {
|
|
2073
|
+
"type": "string",
|
|
2074
|
+
"description": "Absolute path of the generated artifact."
|
|
2075
|
+
}
|
|
2076
|
+
},
|
|
2077
|
+
"required": [
|
|
2078
|
+
"model",
|
|
2079
|
+
"path"
|
|
2080
|
+
],
|
|
2081
|
+
"additionalProperties": false,
|
|
2082
|
+
"description": "Points at a generated artifact's path -- what `checkEnvArtifacts()`'s drift findings are about, not a declared contract or variable at all."
|
|
2083
|
+
},
|
|
2084
|
+
"ChangeModel": {
|
|
2085
|
+
"type": "object",
|
|
2086
|
+
"properties": {
|
|
2087
|
+
"schemaVersion": {
|
|
2088
|
+
"type": "number",
|
|
2089
|
+
"const": 1
|
|
2090
|
+
},
|
|
2091
|
+
"manifest": {
|
|
2092
|
+
"$ref": "#/definitions/ManifestChangeReport",
|
|
2093
|
+
"description": "The existing manifest change report, unmodified -- see ADR 0021. `addedVariables`/`removedVariables` still list a correlated rename's two halves separately; `renamedVariables` below is an additive, separately-computed view, not a filter over this field."
|
|
2094
|
+
},
|
|
2095
|
+
"renamedVariables": {
|
|
2096
|
+
"type": "array",
|
|
2097
|
+
"items": {
|
|
2098
|
+
"$ref": "#/definitions/RenamedVariable"
|
|
2099
|
+
},
|
|
2100
|
+
"description": "Every `addedVariables`/`removedVariables` pair this run's currently declared `renamedFrom` values correlate into a single rename, sorted by contract identity then current key."
|
|
2101
|
+
}
|
|
2102
|
+
},
|
|
2103
|
+
"required": [
|
|
2104
|
+
"schemaVersion",
|
|
2105
|
+
"manifest",
|
|
2106
|
+
"renamedVariables"
|
|
2107
|
+
],
|
|
2108
|
+
"additionalProperties": false
|
|
2109
|
+
},
|
|
2110
|
+
"ManifestChangeReport": {
|
|
2111
|
+
"type": "object",
|
|
2112
|
+
"properties": {
|
|
2113
|
+
"addedContracts": {
|
|
2114
|
+
"type": "array",
|
|
2115
|
+
"items": {
|
|
2116
|
+
"$ref": "#/definitions/ManifestContractRef"
|
|
2117
|
+
},
|
|
2118
|
+
"description": "Contracts present now but not in the previous snapshot."
|
|
2119
|
+
},
|
|
2120
|
+
"removedContracts": {
|
|
2121
|
+
"type": "array",
|
|
2122
|
+
"items": {
|
|
2123
|
+
"$ref": "#/definitions/ManifestContractRef"
|
|
2124
|
+
},
|
|
2125
|
+
"description": "Contracts present in the previous snapshot but not now."
|
|
2126
|
+
},
|
|
2127
|
+
"addedVariables": {
|
|
2128
|
+
"type": "array",
|
|
2129
|
+
"items": {
|
|
2130
|
+
"$ref": "#/definitions/ManifestVariableRef"
|
|
2131
|
+
},
|
|
2132
|
+
"description": "Variables present now but not in the previous snapshot."
|
|
2133
|
+
},
|
|
2134
|
+
"removedVariables": {
|
|
2135
|
+
"type": "array",
|
|
2136
|
+
"items": {
|
|
2137
|
+
"$ref": "#/definitions/ManifestVariableRef"
|
|
2138
|
+
},
|
|
2139
|
+
"description": "Variables present in the previous snapshot but not now."
|
|
2140
|
+
},
|
|
2141
|
+
"updatedContracts": {
|
|
2142
|
+
"type": "array",
|
|
2143
|
+
"items": {
|
|
2144
|
+
"$ref": "#/definitions/ManifestContractUpdate"
|
|
2145
|
+
},
|
|
2146
|
+
"description": "Contracts present in both snapshots with at least one changed field."
|
|
2147
|
+
},
|
|
2148
|
+
"updatedVariables": {
|
|
2149
|
+
"type": "array",
|
|
2150
|
+
"items": {
|
|
2151
|
+
"$ref": "#/definitions/ManifestVariableUpdate"
|
|
2152
|
+
},
|
|
2153
|
+
"description": "Variables present in both snapshots with at least one changed field."
|
|
2154
|
+
}
|
|
2155
|
+
},
|
|
2156
|
+
"required": [
|
|
2157
|
+
"addedContracts",
|
|
2158
|
+
"removedContracts",
|
|
2159
|
+
"addedVariables",
|
|
2160
|
+
"removedVariables",
|
|
2161
|
+
"updatedContracts",
|
|
2162
|
+
"updatedVariables"
|
|
2163
|
+
],
|
|
2164
|
+
"additionalProperties": false,
|
|
2165
|
+
"description": "The result of diffing two `ContractModel.contracts` arrays -- see `diffContracts()`. Comprehensive by construction: every own field of `ContractModelContract`/`ContractModelVariable` (schema facts -- `hasDefault`/`processorSource`/`validatorSource`/... -- alongside documented metadata) participates, and every discovered contract is covered, not only active ones. A field-by-field, hand-maintained diff (this module's previous design) would need updating by hand every time Contract Model gains a field; the generic differ below can't drift out of sync with the model it diffs."
|
|
2166
|
+
},
|
|
2167
|
+
"ManifestContractRef": {
|
|
2168
|
+
"$ref": "#/definitions/ContractRef",
|
|
2169
|
+
"description": "Identifies one contract for ManifestChangeReport purposes -- see ContractRef for why neither a `contractName` nor a pre-formatted `identity` is carried here."
|
|
2170
|
+
},
|
|
2171
|
+
"ManifestVariableRef": {
|
|
2172
|
+
"type": "object",
|
|
2173
|
+
"properties": {
|
|
2174
|
+
"file": {
|
|
2175
|
+
"type": "string",
|
|
2176
|
+
"description": "Root-relative, POSIX-separated path of the file declaring the contract -- see `displayPath()`."
|
|
2177
|
+
},
|
|
2178
|
+
"exportName": {
|
|
2179
|
+
"type": "string",
|
|
2180
|
+
"description": "The binding name the `createEnv()` result is exported as."
|
|
2181
|
+
},
|
|
2182
|
+
"key": {
|
|
2183
|
+
"type": "string",
|
|
2184
|
+
"description": "The environment variable name."
|
|
2185
|
+
}
|
|
2186
|
+
},
|
|
2187
|
+
"required": [
|
|
2188
|
+
"exportName",
|
|
2189
|
+
"file",
|
|
2190
|
+
"key"
|
|
2191
|
+
],
|
|
2192
|
+
"additionalProperties": false,
|
|
2193
|
+
"description": "Identifies one variable for ManifestChangeReport purposes -- its owning contract's identity plus its own key. See ContractRef."
|
|
2194
|
+
},
|
|
2195
|
+
"ManifestContractUpdate": {
|
|
2196
|
+
"type": "object",
|
|
2197
|
+
"properties": {
|
|
2198
|
+
"file": {
|
|
2199
|
+
"type": "string",
|
|
2200
|
+
"description": "Root-relative, POSIX-separated path of the file declaring the contract -- see `displayPath()`."
|
|
2201
|
+
},
|
|
2202
|
+
"exportName": {
|
|
2203
|
+
"type": "string",
|
|
2204
|
+
"description": "The binding name the `createEnv()` result is exported as."
|
|
2205
|
+
},
|
|
2206
|
+
"changes": {
|
|
2207
|
+
"type": "array",
|
|
2208
|
+
"items": {
|
|
2209
|
+
"$ref": "#/definitions/ManifestFieldChange"
|
|
2210
|
+
},
|
|
2211
|
+
"description": "Every field that changed between the previous and current snapshot."
|
|
2212
|
+
}
|
|
2213
|
+
},
|
|
2214
|
+
"required": [
|
|
2215
|
+
"changes",
|
|
2216
|
+
"exportName",
|
|
2217
|
+
"file"
|
|
2218
|
+
],
|
|
2219
|
+
"additionalProperties": false,
|
|
2220
|
+
"description": "A contract present in both snapshots, with at least one changed field."
|
|
2221
|
+
},
|
|
2222
|
+
"ManifestFieldChange": {
|
|
2223
|
+
"type": "object",
|
|
2224
|
+
"properties": {
|
|
2225
|
+
"field": {
|
|
2226
|
+
"type": "string",
|
|
2227
|
+
"description": "The changed field's name."
|
|
2228
|
+
},
|
|
2229
|
+
"previous": {
|
|
2230
|
+
"type": "string",
|
|
2231
|
+
"description": "The value from the previous snapshot, or `undefined` if the field was unset."
|
|
2232
|
+
},
|
|
2233
|
+
"current": {
|
|
2234
|
+
"type": "string",
|
|
2235
|
+
"description": "The value in the current run, or `undefined` if the field is now unset."
|
|
2236
|
+
}
|
|
2237
|
+
},
|
|
2238
|
+
"required": [
|
|
2239
|
+
"field"
|
|
2240
|
+
],
|
|
2241
|
+
"additionalProperties": false,
|
|
2242
|
+
"description": "One field's before/after value in a ManifestContractUpdate or ManifestVariableUpdate."
|
|
2243
|
+
},
|
|
2244
|
+
"ManifestVariableUpdate": {
|
|
2245
|
+
"type": "object",
|
|
2246
|
+
"properties": {
|
|
2247
|
+
"file": {
|
|
2248
|
+
"type": "string",
|
|
2249
|
+
"description": "Root-relative, POSIX-separated path of the file declaring the contract -- see `displayPath()`."
|
|
2250
|
+
},
|
|
2251
|
+
"exportName": {
|
|
2252
|
+
"type": "string",
|
|
2253
|
+
"description": "The binding name the `createEnv()` result is exported as."
|
|
2254
|
+
},
|
|
2255
|
+
"key": {
|
|
2256
|
+
"type": "string",
|
|
2257
|
+
"description": "The environment variable name."
|
|
2258
|
+
},
|
|
2259
|
+
"changes": {
|
|
2260
|
+
"type": "array",
|
|
2261
|
+
"items": {
|
|
2262
|
+
"$ref": "#/definitions/ManifestFieldChange"
|
|
2263
|
+
},
|
|
2264
|
+
"description": "Every field that changed between the previous and current snapshot."
|
|
2265
|
+
}
|
|
2266
|
+
},
|
|
2267
|
+
"required": [
|
|
2268
|
+
"changes",
|
|
2269
|
+
"exportName",
|
|
2270
|
+
"file",
|
|
2271
|
+
"key"
|
|
2272
|
+
],
|
|
2273
|
+
"additionalProperties": false,
|
|
2274
|
+
"description": "A variable present in both snapshots, with at least one changed field."
|
|
2275
|
+
},
|
|
2276
|
+
"RenamedVariable": {
|
|
2277
|
+
"type": "object",
|
|
2278
|
+
"properties": {
|
|
2279
|
+
"contractIdentity": {
|
|
2280
|
+
"type": "string",
|
|
2281
|
+
"description": "The owning contract's identity (`${file}#${exportName}`) -- a rename never crosses contracts."
|
|
2282
|
+
},
|
|
2283
|
+
"file": {
|
|
2284
|
+
"type": "string"
|
|
2285
|
+
},
|
|
2286
|
+
"exportName": {
|
|
2287
|
+
"type": "string"
|
|
2288
|
+
},
|
|
2289
|
+
"contractName": {
|
|
2290
|
+
"type": "string"
|
|
2291
|
+
},
|
|
2292
|
+
"previousKey": {
|
|
2293
|
+
"type": "string",
|
|
2294
|
+
"description": "The variable's key before the rename -- matches a `manifest.removedVariables` entry."
|
|
2295
|
+
},
|
|
2296
|
+
"currentKey": {
|
|
2297
|
+
"type": "string",
|
|
2298
|
+
"description": "The variable's key after the rename -- matches a `manifest.addedVariables` entry."
|
|
2299
|
+
}
|
|
2300
|
+
},
|
|
2301
|
+
"required": [
|
|
2302
|
+
"contractIdentity",
|
|
2303
|
+
"file",
|
|
2304
|
+
"exportName",
|
|
2305
|
+
"contractName",
|
|
2306
|
+
"previousKey",
|
|
2307
|
+
"currentKey"
|
|
2308
|
+
],
|
|
2309
|
+
"additionalProperties": false,
|
|
2310
|
+
"description": "One `addedVariables`/`removedVariables` pair in `manifest`, correlated into a single rename via the current declaration's `renamedFrom` field (ADR 0029)."
|
|
2311
|
+
},
|
|
2312
|
+
"JsonErrorPayload": {
|
|
2313
|
+
"type": "object",
|
|
2314
|
+
"properties": {
|
|
2315
|
+
"schemaVersion": {
|
|
2316
|
+
"type": "number",
|
|
2317
|
+
"const": 1
|
|
2318
|
+
},
|
|
2319
|
+
"kind": {
|
|
2320
|
+
"type": "string",
|
|
2321
|
+
"const": "env-cap-report"
|
|
2322
|
+
},
|
|
2323
|
+
"toolVersion": {
|
|
2324
|
+
"type": "string"
|
|
2325
|
+
},
|
|
2326
|
+
"ok": {
|
|
2327
|
+
"type": "boolean",
|
|
2328
|
+
"const": false
|
|
2329
|
+
},
|
|
2330
|
+
"error": {
|
|
2331
|
+
"$ref": "#/definitions/JsonErrorInfo"
|
|
2332
|
+
}
|
|
2333
|
+
},
|
|
2334
|
+
"required": [
|
|
2335
|
+
"schemaVersion",
|
|
2336
|
+
"kind",
|
|
2337
|
+
"toolVersion",
|
|
2338
|
+
"ok",
|
|
2339
|
+
"error"
|
|
2340
|
+
],
|
|
2341
|
+
"additionalProperties": false,
|
|
2342
|
+
"description": "The `--json` envelope for a failed run (generation threw)."
|
|
2343
|
+
},
|
|
2344
|
+
"JsonErrorInfo": {
|
|
2345
|
+
"type": "object",
|
|
2346
|
+
"properties": {
|
|
2347
|
+
"name": {
|
|
2348
|
+
"type": "string"
|
|
2349
|
+
},
|
|
2350
|
+
"message": {
|
|
2351
|
+
"type": "string"
|
|
2352
|
+
},
|
|
2353
|
+
"issues": {
|
|
2354
|
+
"type": "array",
|
|
2355
|
+
"items": {
|
|
2356
|
+
"$ref": "#/definitions/CompatibilityIssue"
|
|
2357
|
+
},
|
|
2358
|
+
"description": "Populated only when the thrown error carries a `CompatibilityIssue[]` (the generator errors in `build/errors.ts` all do)."
|
|
2359
|
+
}
|
|
2360
|
+
},
|
|
2361
|
+
"required": [
|
|
2362
|
+
"name",
|
|
2363
|
+
"message"
|
|
2364
|
+
],
|
|
2365
|
+
"additionalProperties": false,
|
|
2366
|
+
"description": "A thrown error's shape in the `--json` envelope."
|
|
2367
|
+
}
|
|
2368
|
+
}
|
|
2369
|
+
}
|