geopilot 0.0.0-stage → 0.0.1-bootstrap.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (240) hide show
  1. package/LICENSE +202 -0
  2. package/README.md +72 -2
  3. package/dist/agent/install.d.ts +23 -0
  4. package/dist/agent/install.js +75 -0
  5. package/dist/agent/install.js.map +1 -0
  6. package/dist/cache/runs.d.ts +18 -0
  7. package/dist/cache/runs.js +91 -0
  8. package/dist/cache/runs.js.map +1 -0
  9. package/dist/cli/args.d.ts +20 -0
  10. package/dist/cli/args.js +116 -0
  11. package/dist/cli/args.js.map +1 -0
  12. package/dist/cli/commands/agent.d.ts +2 -0
  13. package/dist/cli/commands/agent.js +48 -0
  14. package/dist/cli/commands/agent.js.map +1 -0
  15. package/dist/cli/commands/fix.d.ts +2 -0
  16. package/dist/cli/commands/fix.js +284 -0
  17. package/dist/cli/commands/fix.js.map +1 -0
  18. package/dist/cli/commands/init.d.ts +2 -0
  19. package/dist/cli/commands/init.js +62 -0
  20. package/dist/cli/commands/init.js.map +1 -0
  21. package/dist/cli/commands/insights.d.ts +17 -0
  22. package/dist/cli/commands/insights.js +143 -0
  23. package/dist/cli/commands/insights.js.map +1 -0
  24. package/dist/cli/commands/rules.d.ts +5 -0
  25. package/dist/cli/commands/rules.js +86 -0
  26. package/dist/cli/commands/rules.js.map +1 -0
  27. package/dist/cli/commands/scan.d.ts +14 -0
  28. package/dist/cli/commands/scan.js +127 -0
  29. package/dist/cli/commands/scan.js.map +1 -0
  30. package/dist/cli/commands-list.d.ts +6 -0
  31. package/dist/cli/commands-list.js +15 -0
  32. package/dist/cli/commands-list.js.map +1 -0
  33. package/dist/cli/context.d.ts +26 -0
  34. package/dist/cli/context.js +108 -0
  35. package/dist/cli/context.js.map +1 -0
  36. package/dist/cli/io.d.ts +16 -0
  37. package/dist/cli/io.js +28 -0
  38. package/dist/cli/io.js.map +1 -0
  39. package/dist/cli/main.d.ts +15 -0
  40. package/dist/cli/main.js +118 -0
  41. package/dist/cli/main.js.map +1 -0
  42. package/dist/collect/crawl.d.ts +51 -0
  43. package/dist/collect/crawl.js +187 -0
  44. package/dist/collect/crawl.js.map +1 -0
  45. package/dist/config/config.d.ts +86 -0
  46. package/dist/config/config.js +396 -0
  47. package/dist/config/config.js.map +1 -0
  48. package/dist/core/errors.d.ts +20 -0
  49. package/dist/core/errors.js +32 -0
  50. package/dist/core/errors.js.map +1 -0
  51. package/dist/core/hash.d.ts +7 -0
  52. package/dist/core/hash.js +28 -0
  53. package/dist/core/hash.js.map +1 -0
  54. package/dist/core/redact.d.ts +3 -0
  55. package/dist/core/redact.js +23 -0
  56. package/dist/core/redact.js.map +1 -0
  57. package/dist/core/tty.d.ts +12 -0
  58. package/dist/core/tty.js +33 -0
  59. package/dist/core/tty.js.map +1 -0
  60. package/dist/core/version.d.ts +6 -0
  61. package/dist/core/version.js +10 -0
  62. package/dist/core/version.js.map +1 -0
  63. package/dist/fix/apply.d.ts +119 -0
  64. package/dist/fix/apply.js +334 -0
  65. package/dist/fix/apply.js.map +1 -0
  66. package/dist/fix/diff.d.ts +1 -0
  67. package/dist/fix/diff.js +35 -0
  68. package/dist/fix/diff.js.map +1 -0
  69. package/dist/fix/plan.d.ts +42 -0
  70. package/dist/fix/plan.js +385 -0
  71. package/dist/fix/plan.js.map +1 -0
  72. package/dist/fix/serve.d.ts +13 -0
  73. package/dist/fix/serve.js +112 -0
  74. package/dist/fix/serve.js.map +1 -0
  75. package/dist/fix/variants.d.ts +13 -0
  76. package/dist/fix/variants.js +8 -0
  77. package/dist/fix/variants.js.map +1 -0
  78. package/dist/frameworks/ast.d.ts +84 -0
  79. package/dist/frameworks/ast.js +231 -0
  80. package/dist/frameworks/ast.js.map +1 -0
  81. package/dist/frameworks/nextjs-app/analyze.d.ts +92 -0
  82. package/dist/frameworks/nextjs-app/analyze.js +350 -0
  83. package/dist/frameworks/nextjs-app/analyze.js.map +1 -0
  84. package/dist/frameworks/static/analyze.d.ts +18 -0
  85. package/dist/frameworks/static/analyze.js +66 -0
  86. package/dist/frameworks/static/analyze.js.map +1 -0
  87. package/dist/html/parse.d.ts +50 -0
  88. package/dist/html/parse.js +205 -0
  89. package/dist/html/parse.js.map +1 -0
  90. package/dist/index.d.ts +10 -0
  91. package/dist/index.js +11 -0
  92. package/dist/index.js.map +1 -0
  93. package/dist/insights/validate.d.ts +74 -0
  94. package/dist/insights/validate.js +213 -0
  95. package/dist/insights/validate.js.map +1 -0
  96. package/dist/net/address.d.ts +10 -0
  97. package/dist/net/address.js +116 -0
  98. package/dist/net/address.js.map +1 -0
  99. package/dist/net/fetch.d.ts +53 -0
  100. package/dist/net/fetch.js +281 -0
  101. package/dist/net/fetch.js.map +1 -0
  102. package/dist/repo/detect.d.ts +3 -0
  103. package/dist/repo/detect.js +92 -0
  104. package/dist/repo/detect.js.map +1 -0
  105. package/dist/repo/reader.d.ts +12 -0
  106. package/dist/repo/reader.js +97 -0
  107. package/dist/repo/reader.js.map +1 -0
  108. package/dist/report/render.d.ts +20 -0
  109. package/dist/report/render.js +176 -0
  110. package/dist/report/render.js.map +1 -0
  111. package/dist/robots/crawlers.d.ts +10 -0
  112. package/dist/robots/crawlers.js +20 -0
  113. package/dist/robots/crawlers.js.map +1 -0
  114. package/dist/robots/robots.d.ts +33 -0
  115. package/dist/robots/robots.js +133 -0
  116. package/dist/robots/robots.js.map +1 -0
  117. package/dist/rules/catalogue.d.ts +43 -0
  118. package/dist/rules/catalogue.js +361 -0
  119. package/dist/rules/catalogue.js.map +1 -0
  120. package/dist/rules/context.d.ts +36 -0
  121. package/dist/rules/context.js +129 -0
  122. package/dist/rules/context.js.map +1 -0
  123. package/dist/rules/evaluate.d.ts +11 -0
  124. package/dist/rules/evaluate.js +1070 -0
  125. package/dist/rules/evaluate.js.map +1 -0
  126. package/dist/rules/finalize.d.ts +34 -0
  127. package/dist/rules/finalize.js +93 -0
  128. package/dist/rules/finalize.js.map +1 -0
  129. package/dist/scan.d.ts +27 -0
  130. package/dist/scan.js +147 -0
  131. package/dist/scan.js.map +1 -0
  132. package/dist/scoring/compare.d.ts +21 -0
  133. package/dist/scoring/compare.js +47 -0
  134. package/dist/scoring/compare.js.map +1 -0
  135. package/dist/scoring/score.d.ts +21 -0
  136. package/dist/scoring/score.js +112 -0
  137. package/dist/scoring/score.js.map +1 -0
  138. package/dist/sitemap/sitemap.d.ts +10 -0
  139. package/dist/sitemap/sitemap.js +48 -0
  140. package/dist/sitemap/sitemap.js.map +1 -0
  141. package/dist/types.d.ts +155 -0
  142. package/dist/types.js +13 -0
  143. package/dist/types.js.map +1 -0
  144. package/hosts/claude-project/.claude/agents/geopilot-explainer.md +36 -0
  145. package/hosts/claude-project/.claude/agents/geopilot-fixer.md +42 -0
  146. package/hosts/claude-project/.claude/agents/geopilot-investigator.md +45 -0
  147. package/hosts/claude-project/.claude/agents/geopilot-reviewer.md +41 -0
  148. package/hosts/claude-project/.claude/agents/geopilot-scanner.md +47 -0
  149. package/hosts/claude-project/.claude/skills/geo/SKILL.md +95 -0
  150. package/hosts/claude-project/.claude/skills/geo/references/frameworks.md +20 -0
  151. package/hosts/claude-project/.claude/skills/geo/references/insight-contract.md +42 -0
  152. package/hosts/claude-project/.claude/skills/geo/references/safety.md +30 -0
  153. package/hosts/claude-project/.claude/skills/geo/references/workflow-explain.md +8 -0
  154. package/hosts/claude-project/.claude/skills/geo/references/workflow-fix.md +20 -0
  155. package/hosts/claude-project/.claude/skills/geo/references/workflow-init.md +6 -0
  156. package/hosts/claude-project/.claude/skills/geo/references/workflow-insights.md +13 -0
  157. package/hosts/claude-project/.claude/skills/geo/references/workflow-plan.md +13 -0
  158. package/hosts/claude-project/.claude/skills/geo/references/workflow-review.md +8 -0
  159. package/hosts/claude-project/.claude/skills/geo/references/workflow-scan.md +18 -0
  160. package/hosts/claude-project/.claude/skills/geo/schemas/insights.schema.json +255 -0
  161. package/hosts/claude-project/.claude/skills/geo/scripts/geo.ps1 +11 -0
  162. package/hosts/claude-project/.claude/skills/geo/scripts/geo.sh +11 -0
  163. package/hosts/claude-project/.claude/skills/geopilot-explain/SKILL.md +9 -0
  164. package/hosts/claude-project/.claude/skills/geopilot-fix/SKILL.md +12 -0
  165. package/hosts/claude-project/.claude/skills/geopilot-init/SKILL.md +15 -0
  166. package/hosts/claude-project/.claude/skills/geopilot-insights/SKILL.md +11 -0
  167. package/hosts/claude-project/.claude/skills/geopilot-review/SKILL.md +11 -0
  168. package/hosts/claude-project/.claude/skills/geopilot-scan/SKILL.md +11 -0
  169. package/hosts/geopilot/.claude-plugin/plugin.json +22 -0
  170. package/hosts/geopilot/README.md +25 -0
  171. package/hosts/geopilot/agents/explainer.agent.md +36 -0
  172. package/hosts/geopilot/agents/fixer.agent.md +42 -0
  173. package/hosts/geopilot/agents/investigator.agent.md +45 -0
  174. package/hosts/geopilot/agents/reviewer.agent.md +41 -0
  175. package/hosts/geopilot/agents/scanner.agent.md +47 -0
  176. package/hosts/geopilot/assets/icon.png +0 -0
  177. package/hosts/geopilot/skills/explain/SKILL.md +9 -0
  178. package/hosts/geopilot/skills/fix/SKILL.md +12 -0
  179. package/hosts/geopilot/skills/geo/SKILL.md +95 -0
  180. package/hosts/geopilot/skills/geo/references/frameworks.md +20 -0
  181. package/hosts/geopilot/skills/geo/references/insight-contract.md +42 -0
  182. package/hosts/geopilot/skills/geo/references/safety.md +30 -0
  183. package/hosts/geopilot/skills/geo/references/workflow-explain.md +8 -0
  184. package/hosts/geopilot/skills/geo/references/workflow-fix.md +20 -0
  185. package/hosts/geopilot/skills/geo/references/workflow-init.md +6 -0
  186. package/hosts/geopilot/skills/geo/references/workflow-insights.md +13 -0
  187. package/hosts/geopilot/skills/geo/references/workflow-plan.md +13 -0
  188. package/hosts/geopilot/skills/geo/references/workflow-review.md +8 -0
  189. package/hosts/geopilot/skills/geo/references/workflow-scan.md +18 -0
  190. package/hosts/geopilot/skills/geo/schemas/insights.schema.json +255 -0
  191. package/hosts/geopilot/skills/geo/scripts/geo.ps1 +11 -0
  192. package/hosts/geopilot/skills/geo/scripts/geo.sh +11 -0
  193. package/hosts/geopilot/skills/init/SKILL.md +15 -0
  194. package/hosts/geopilot/skills/insights/SKILL.md +11 -0
  195. package/hosts/geopilot/skills/review/SKILL.md +11 -0
  196. package/hosts/geopilot/skills/scan/SKILL.md +11 -0
  197. package/hosts/opencode/.opencode/agents/geopilot-explainer.md +39 -0
  198. package/hosts/opencode/.opencode/agents/geopilot-fixer.md +45 -0
  199. package/hosts/opencode/.opencode/agents/geopilot-investigator.md +48 -0
  200. package/hosts/opencode/.opencode/agents/geopilot-reviewer.md +44 -0
  201. package/hosts/opencode/.opencode/agents/geopilot-scanner.md +50 -0
  202. package/hosts/opencode/.opencode/commands/geopilot-explain.md +8 -0
  203. package/hosts/opencode/.opencode/commands/geopilot-fix.md +10 -0
  204. package/hosts/opencode/.opencode/commands/geopilot-init.md +12 -0
  205. package/hosts/opencode/.opencode/commands/geopilot-insights.md +10 -0
  206. package/hosts/opencode/.opencode/commands/geopilot-review.md +10 -0
  207. package/hosts/opencode/.opencode/commands/geopilot-scan.md +10 -0
  208. package/hosts/opencode/.opencode/skills/geo/SKILL.md +95 -0
  209. package/hosts/opencode/.opencode/skills/geo/references/frameworks.md +20 -0
  210. package/hosts/opencode/.opencode/skills/geo/references/insight-contract.md +42 -0
  211. package/hosts/opencode/.opencode/skills/geo/references/safety.md +30 -0
  212. package/hosts/opencode/.opencode/skills/geo/references/workflow-explain.md +8 -0
  213. package/hosts/opencode/.opencode/skills/geo/references/workflow-fix.md +20 -0
  214. package/hosts/opencode/.opencode/skills/geo/references/workflow-init.md +6 -0
  215. package/hosts/opencode/.opencode/skills/geo/references/workflow-insights.md +13 -0
  216. package/hosts/opencode/.opencode/skills/geo/references/workflow-plan.md +13 -0
  217. package/hosts/opencode/.opencode/skills/geo/references/workflow-review.md +8 -0
  218. package/hosts/opencode/.opencode/skills/geo/references/workflow-scan.md +18 -0
  219. package/hosts/opencode/.opencode/skills/geo/schemas/insights.schema.json +255 -0
  220. package/hosts/opencode/.opencode/skills/geo/scripts/geo.ps1 +11 -0
  221. package/hosts/opencode/.opencode/skills/geo/scripts/geo.sh +11 -0
  222. package/package.json +65 -4
  223. package/schemas/config-v1.json +392 -0
  224. package/schemas/insights-v1.json +255 -0
  225. package/schemas/merged-v1.json +71 -0
  226. package/schemas/report-v1.json +836 -0
  227. package/skill/geo/SKILL.md +95 -0
  228. package/skill/geo/references/frameworks.md +20 -0
  229. package/skill/geo/references/insight-contract.md +42 -0
  230. package/skill/geo/references/safety.md +30 -0
  231. package/skill/geo/references/workflow-explain.md +8 -0
  232. package/skill/geo/references/workflow-fix.md +20 -0
  233. package/skill/geo/references/workflow-init.md +6 -0
  234. package/skill/geo/references/workflow-insights.md +13 -0
  235. package/skill/geo/references/workflow-plan.md +13 -0
  236. package/skill/geo/references/workflow-review.md +8 -0
  237. package/skill/geo/references/workflow-scan.md +18 -0
  238. package/skill/geo/schemas/insights.schema.json +255 -0
  239. package/skill/geo/scripts/geo.ps1 +11 -0
  240. package/skill/geo/scripts/geo.sh +11 -0
@@ -0,0 +1,836 @@
1
+ {
2
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
3
+ "$id": "https://moelzanaty3.github.io/geopilot/schema/report/v1.json",
4
+ "title": "geo-report/v1",
5
+ "type": "object",
6
+ "properties": {
7
+ "schemaVersion": {
8
+ "const": "geo-report/v1"
9
+ },
10
+ "tool": {
11
+ "type": "object",
12
+ "properties": {
13
+ "name": {
14
+ "type": "string"
15
+ },
16
+ "version": {
17
+ "type": "string"
18
+ },
19
+ "rulesetVersion": {
20
+ "type": "string"
21
+ },
22
+ "scoringVersion": {
23
+ "type": "string"
24
+ }
25
+ },
26
+ "additionalProperties": false,
27
+ "required": [
28
+ "name",
29
+ "version",
30
+ "rulesetVersion",
31
+ "scoringVersion"
32
+ ]
33
+ },
34
+ "run": {
35
+ "type": "object",
36
+ "properties": {
37
+ "id": {
38
+ "type": "string",
39
+ "pattern": "^r-"
40
+ },
41
+ "startedAt": {
42
+ "type": "string",
43
+ "format": "date-time",
44
+ "description": "volatile"
45
+ },
46
+ "durationMs": {
47
+ "type": "number",
48
+ "description": "volatile"
49
+ },
50
+ "targets": {
51
+ "type": "array",
52
+ "items": {
53
+ "type": "string"
54
+ }
55
+ },
56
+ "mode": {
57
+ "enum": [
58
+ "url",
59
+ "repo",
60
+ "mixed"
61
+ ]
62
+ },
63
+ "configHash": {
64
+ "type": "string"
65
+ },
66
+ "gitCommit": {
67
+ "type": [
68
+ "string",
69
+ "null"
70
+ ]
71
+ },
72
+ "profile": {
73
+ "enum": [
74
+ "web",
75
+ "app"
76
+ ]
77
+ },
78
+ "ignoreRobots": {
79
+ "type": "boolean"
80
+ }
81
+ },
82
+ "additionalProperties": false,
83
+ "required": [
84
+ "id",
85
+ "startedAt",
86
+ "durationMs",
87
+ "targets",
88
+ "mode",
89
+ "configHash",
90
+ "gitCommit",
91
+ "profile",
92
+ "ignoreRobots"
93
+ ]
94
+ },
95
+ "framework": {
96
+ "type": "object",
97
+ "properties": {
98
+ "id": {
99
+ "enum": [
100
+ "nextjs-app",
101
+ "static",
102
+ "generic",
103
+ "unknown"
104
+ ]
105
+ },
106
+ "state": {
107
+ "enum": [
108
+ "detected",
109
+ "suspected",
110
+ "unknown"
111
+ ]
112
+ },
113
+ "version": {
114
+ "type": [
115
+ "string",
116
+ "null"
117
+ ]
118
+ },
119
+ "confidence": {
120
+ "enum": [
121
+ "high",
122
+ "medium",
123
+ "low"
124
+ ]
125
+ },
126
+ "capabilityTier": {
127
+ "type": "object",
128
+ "properties": {
129
+ "urlAudit": {
130
+ "enum": [
131
+ "T0",
132
+ "T1",
133
+ "T2",
134
+ "T3",
135
+ null
136
+ ]
137
+ },
138
+ "repo": {
139
+ "enum": [
140
+ "T0",
141
+ "T1",
142
+ "T2",
143
+ "T3",
144
+ null
145
+ ]
146
+ },
147
+ "provenance": {
148
+ "enum": [
149
+ "T0",
150
+ "T1",
151
+ "T2",
152
+ "T3",
153
+ null
154
+ ]
155
+ },
156
+ "fixes": {
157
+ "enum": [
158
+ "T0",
159
+ "T1",
160
+ "T2",
161
+ "T3",
162
+ null
163
+ ]
164
+ }
165
+ },
166
+ "additionalProperties": false,
167
+ "required": [
168
+ "urlAudit",
169
+ "repo",
170
+ "provenance",
171
+ "fixes"
172
+ ]
173
+ },
174
+ "evidence": {
175
+ "type": "array",
176
+ "items": {
177
+ "type": "string"
178
+ }
179
+ }
180
+ },
181
+ "additionalProperties": false,
182
+ "required": [
183
+ "id",
184
+ "state",
185
+ "version",
186
+ "confidence",
187
+ "capabilityTier",
188
+ "evidence"
189
+ ]
190
+ },
191
+ "routes": {
192
+ "type": "array",
193
+ "items": {
194
+ "type": "object",
195
+ "properties": {
196
+ "route": {
197
+ "type": "string"
198
+ },
199
+ "urls": {
200
+ "type": "array",
201
+ "items": {
202
+ "type": "string"
203
+ }
204
+ },
205
+ "files": {
206
+ "type": "array",
207
+ "items": {
208
+ "type": "string"
209
+ }
210
+ },
211
+ "dynamic": {
212
+ "type": "boolean"
213
+ }
214
+ },
215
+ "additionalProperties": false,
216
+ "required": [
217
+ "route",
218
+ "urls",
219
+ "files",
220
+ "dynamic"
221
+ ]
222
+ }
223
+ },
224
+ "evaluations": {
225
+ "type": "array",
226
+ "items": {
227
+ "type": "object",
228
+ "properties": {
229
+ "ruleId": {
230
+ "enum": [
231
+ "GEO-002",
232
+ "GEO-003",
233
+ "GEO-004",
234
+ "GEO-009",
235
+ "GEO-010",
236
+ "GEO-011",
237
+ "GEO-012",
238
+ "GEO-013",
239
+ "GEO-014",
240
+ "GEO-015",
241
+ "GEO-016",
242
+ "GEO-017",
243
+ "GEO-101",
244
+ "GEO-102"
245
+ ]
246
+ },
247
+ "subject": {
248
+ "oneOf": [
249
+ {
250
+ "type": "object",
251
+ "properties": {
252
+ "kind": {
253
+ "const": "site"
254
+ }
255
+ },
256
+ "additionalProperties": false,
257
+ "required": [
258
+ "kind"
259
+ ]
260
+ },
261
+ {
262
+ "type": "object",
263
+ "properties": {
264
+ "kind": {
265
+ "const": "routeGroup"
266
+ },
267
+ "route": {
268
+ "type": "string"
269
+ }
270
+ },
271
+ "additionalProperties": false,
272
+ "required": [
273
+ "kind",
274
+ "route"
275
+ ]
276
+ },
277
+ {
278
+ "type": "object",
279
+ "properties": {
280
+ "kind": {
281
+ "const": "file"
282
+ },
283
+ "path": {
284
+ "type": "string"
285
+ }
286
+ },
287
+ "additionalProperties": false,
288
+ "required": [
289
+ "kind",
290
+ "path"
291
+ ]
292
+ }
293
+ ]
294
+ },
295
+ "status": {
296
+ "enum": [
297
+ "pass",
298
+ "fail",
299
+ "not_applicable",
300
+ "not_evaluated",
301
+ "error"
302
+ ]
303
+ },
304
+ "statusReason": {
305
+ "type": "string"
306
+ },
307
+ "evidenceQuality": {
308
+ "enum": [
309
+ "direct",
310
+ "partial",
311
+ "inferred"
312
+ ]
313
+ },
314
+ "subChecks": {
315
+ "type": "array",
316
+ "items": {
317
+ "type": "object",
318
+ "properties": {
319
+ "id": {
320
+ "type": "string"
321
+ },
322
+ "scope": {
323
+ "enum": [
324
+ "repo",
325
+ "url",
326
+ "both"
327
+ ]
328
+ },
329
+ "status": {
330
+ "enum": [
331
+ "pass",
332
+ "fail",
333
+ "not_run",
334
+ "not_applicable"
335
+ ]
336
+ },
337
+ "reason": {
338
+ "type": "string"
339
+ }
340
+ },
341
+ "additionalProperties": false,
342
+ "required": [
343
+ "id",
344
+ "scope",
345
+ "status"
346
+ ]
347
+ }
348
+ },
349
+ "findings": {
350
+ "type": "array",
351
+ "items": {
352
+ "type": "object",
353
+ "properties": {
354
+ "fingerprint": {
355
+ "type": "string",
356
+ "pattern": "^geo1:GEO-\\d{3}:[0-9a-f]{12}$"
357
+ },
358
+ "ruleId": {
359
+ "enum": [
360
+ "GEO-002",
361
+ "GEO-003",
362
+ "GEO-004",
363
+ "GEO-009",
364
+ "GEO-010",
365
+ "GEO-011",
366
+ "GEO-012",
367
+ "GEO-013",
368
+ "GEO-014",
369
+ "GEO-015",
370
+ "GEO-016",
371
+ "GEO-017",
372
+ "GEO-101",
373
+ "GEO-102"
374
+ ]
375
+ },
376
+ "subCheck": {
377
+ "type": "string"
378
+ },
379
+ "severity": {
380
+ "enum": [
381
+ "high",
382
+ "medium",
383
+ "low",
384
+ "info"
385
+ ]
386
+ },
387
+ "message": {
388
+ "type": "string"
389
+ },
390
+ "evidence": {
391
+ "type": "array",
392
+ "items": {
393
+ "type": "object",
394
+ "required": [
395
+ "kind",
396
+ "detail"
397
+ ],
398
+ "properties": {
399
+ "kind": {
400
+ "enum": [
401
+ "http",
402
+ "html",
403
+ "robots",
404
+ "sitemap",
405
+ "source",
406
+ "config",
407
+ "note"
408
+ ]
409
+ },
410
+ "detail": {
411
+ "type": "string"
412
+ },
413
+ "snippet": {
414
+ "type": "string",
415
+ "maxLength": 300
416
+ }
417
+ }
418
+ }
419
+ },
420
+ "docs": {
421
+ "type": "string"
422
+ },
423
+ "provenance": {
424
+ "type": "object",
425
+ "properties": {
426
+ "level": {
427
+ "enum": [
428
+ "exact",
429
+ "file",
430
+ "candidate",
431
+ "unmapped",
432
+ "absent"
433
+ ]
434
+ },
435
+ "locations": {
436
+ "type": "array",
437
+ "items": {
438
+ "type": "object",
439
+ "properties": {
440
+ "file": {
441
+ "type": "string"
442
+ },
443
+ "line": {
444
+ "type": "integer"
445
+ },
446
+ "column": {
447
+ "type": "integer"
448
+ },
449
+ "endLine": {
450
+ "type": "integer"
451
+ }
452
+ },
453
+ "additionalProperties": false,
454
+ "required": [
455
+ "file"
456
+ ]
457
+ }
458
+ },
459
+ "reason": {
460
+ "type": "string"
461
+ }
462
+ },
463
+ "additionalProperties": false,
464
+ "required": [
465
+ "level",
466
+ "locations",
467
+ "reason"
468
+ ]
469
+ },
470
+ "fixes": {
471
+ "type": "array",
472
+ "items": {
473
+ "type": "object",
474
+ "properties": {
475
+ "fixId": {
476
+ "type": "string"
477
+ },
478
+ "variant": {
479
+ "type": "string"
480
+ },
481
+ "class": {
482
+ "enum": [
483
+ "safe",
484
+ "guarded",
485
+ "contextual",
486
+ "editorial",
487
+ "unsupported"
488
+ ]
489
+ }
490
+ },
491
+ "additionalProperties": false,
492
+ "required": [
493
+ "fixId",
494
+ "variant",
495
+ "class"
496
+ ]
497
+ }
498
+ },
499
+ "evidenceQuality": {
500
+ "enum": [
501
+ "direct",
502
+ "partial",
503
+ "inferred"
504
+ ]
505
+ },
506
+ "capReason": {
507
+ "type": "string"
508
+ }
509
+ },
510
+ "additionalProperties": false,
511
+ "required": [
512
+ "fingerprint",
513
+ "ruleId",
514
+ "subCheck",
515
+ "severity",
516
+ "message",
517
+ "evidence",
518
+ "docs",
519
+ "provenance",
520
+ "fixes",
521
+ "evidenceQuality"
522
+ ]
523
+ }
524
+ },
525
+ "sampledUrls": {
526
+ "type": "array",
527
+ "items": {
528
+ "type": "string"
529
+ }
530
+ }
531
+ },
532
+ "additionalProperties": false,
533
+ "required": [
534
+ "ruleId",
535
+ "subject",
536
+ "status",
537
+ "evidenceQuality",
538
+ "subChecks",
539
+ "findings"
540
+ ],
541
+ "allOf": [
542
+ {
543
+ "if": {
544
+ "properties": {
545
+ "status": {
546
+ "enum": [
547
+ "not_applicable",
548
+ "not_evaluated",
549
+ "error"
550
+ ]
551
+ }
552
+ }
553
+ },
554
+ "then": {
555
+ "required": [
556
+ "statusReason"
557
+ ]
558
+ }
559
+ }
560
+ ]
561
+ }
562
+ },
563
+ "informational": {
564
+ "type": "array",
565
+ "items": {
566
+ "type": "object",
567
+ "properties": {
568
+ "ruleId": {
569
+ "enum": [
570
+ "GEO-002",
571
+ "GEO-003",
572
+ "GEO-004",
573
+ "GEO-009",
574
+ "GEO-010",
575
+ "GEO-011",
576
+ "GEO-012",
577
+ "GEO-013",
578
+ "GEO-014",
579
+ "GEO-015",
580
+ "GEO-016",
581
+ "GEO-017",
582
+ "GEO-101",
583
+ "GEO-102"
584
+ ]
585
+ },
586
+ "message": {
587
+ "type": "string"
588
+ },
589
+ "evidence": {
590
+ "type": "array",
591
+ "items": {
592
+ "type": "object",
593
+ "required": [
594
+ "kind",
595
+ "detail"
596
+ ],
597
+ "properties": {
598
+ "kind": {
599
+ "enum": [
600
+ "http",
601
+ "html",
602
+ "robots",
603
+ "sitemap",
604
+ "source",
605
+ "config",
606
+ "note"
607
+ ]
608
+ },
609
+ "detail": {
610
+ "type": "string"
611
+ },
612
+ "snippet": {
613
+ "type": "string",
614
+ "maxLength": 300
615
+ }
616
+ }
617
+ }
618
+ }
619
+ },
620
+ "additionalProperties": false,
621
+ "required": [
622
+ "ruleId",
623
+ "message",
624
+ "evidence"
625
+ ]
626
+ }
627
+ },
628
+ "readiness": {
629
+ "type": "object",
630
+ "properties": {
631
+ "value": {
632
+ "type": [
633
+ "number",
634
+ "null"
635
+ ],
636
+ "minimum": 0,
637
+ "maximum": 100
638
+ },
639
+ "uncapped": {
640
+ "type": [
641
+ "number",
642
+ "null"
643
+ ]
644
+ },
645
+ "capReason": {
646
+ "type": [
647
+ "string",
648
+ "null"
649
+ ]
650
+ },
651
+ "display": {
652
+ "enum": [
653
+ "readiness",
654
+ "provisional",
655
+ "insufficient_evidence"
656
+ ]
657
+ }
658
+ },
659
+ "additionalProperties": false,
660
+ "required": [
661
+ "value",
662
+ "uncapped",
663
+ "capReason",
664
+ "display"
665
+ ]
666
+ },
667
+ "coverage": {
668
+ "type": "number",
669
+ "minimum": 0,
670
+ "maximum": 100
671
+ },
672
+ "confidence": {
673
+ "type": [
674
+ "number",
675
+ "null"
676
+ ],
677
+ "minimum": 0,
678
+ "maximum": 100
679
+ },
680
+ "assessmentScope": {
681
+ "type": "object",
682
+ "properties": {
683
+ "assessment": {
684
+ "enum": [
685
+ "complete",
686
+ "partial",
687
+ "incomplete"
688
+ ]
689
+ },
690
+ "direct": {
691
+ "type": "array",
692
+ "items": {
693
+ "type": "object",
694
+ "properties": {
695
+ "ruleId": {
696
+ "enum": [
697
+ "GEO-002",
698
+ "GEO-003",
699
+ "GEO-004",
700
+ "GEO-009",
701
+ "GEO-010",
702
+ "GEO-011",
703
+ "GEO-012",
704
+ "GEO-013",
705
+ "GEO-014",
706
+ "GEO-015",
707
+ "GEO-016",
708
+ "GEO-017",
709
+ "GEO-101",
710
+ "GEO-102"
711
+ ]
712
+ },
713
+ "subject": {
714
+ "type": "string"
715
+ }
716
+ },
717
+ "additionalProperties": false,
718
+ "required": [
719
+ "ruleId",
720
+ "subject"
721
+ ]
722
+ }
723
+ },
724
+ "needsRuntime": {
725
+ "type": "array",
726
+ "items": {
727
+ "enum": [
728
+ "GEO-002",
729
+ "GEO-003",
730
+ "GEO-004",
731
+ "GEO-009",
732
+ "GEO-010",
733
+ "GEO-011",
734
+ "GEO-012",
735
+ "GEO-013",
736
+ "GEO-014",
737
+ "GEO-015",
738
+ "GEO-016",
739
+ "GEO-017",
740
+ "GEO-101",
741
+ "GEO-102"
742
+ ]
743
+ }
744
+ },
745
+ "notes": {
746
+ "type": "array",
747
+ "items": {
748
+ "type": "string"
749
+ }
750
+ }
751
+ },
752
+ "additionalProperties": false,
753
+ "required": [
754
+ "assessment",
755
+ "direct",
756
+ "needsRuntime",
757
+ "notes"
758
+ ]
759
+ },
760
+ "suppressed": {
761
+ "type": "array",
762
+ "items": {
763
+ "type": "object",
764
+ "properties": {
765
+ "fingerprint": {
766
+ "type": "string"
767
+ },
768
+ "ruleId": {
769
+ "enum": [
770
+ "GEO-002",
771
+ "GEO-003",
772
+ "GEO-004",
773
+ "GEO-009",
774
+ "GEO-010",
775
+ "GEO-011",
776
+ "GEO-012",
777
+ "GEO-013",
778
+ "GEO-014",
779
+ "GEO-015",
780
+ "GEO-016",
781
+ "GEO-017",
782
+ "GEO-101",
783
+ "GEO-102"
784
+ ]
785
+ },
786
+ "reason": {
787
+ "type": "string"
788
+ },
789
+ "expires": {
790
+ "type": [
791
+ "string",
792
+ "null"
793
+ ]
794
+ }
795
+ },
796
+ "additionalProperties": false,
797
+ "required": [
798
+ "fingerprint",
799
+ "ruleId",
800
+ "reason",
801
+ "expires"
802
+ ]
803
+ }
804
+ },
805
+ "notices": {
806
+ "type": "array",
807
+ "items": {
808
+ "type": "string"
809
+ }
810
+ },
811
+ "baseline": {
812
+ "type": "null"
813
+ },
814
+ "disclaimer": {
815
+ "type": "string"
816
+ }
817
+ },
818
+ "additionalProperties": false,
819
+ "required": [
820
+ "schemaVersion",
821
+ "tool",
822
+ "run",
823
+ "framework",
824
+ "routes",
825
+ "evaluations",
826
+ "informational",
827
+ "readiness",
828
+ "coverage",
829
+ "confidence",
830
+ "assessmentScope",
831
+ "suppressed",
832
+ "notices",
833
+ "baseline",
834
+ "disclaimer"
835
+ ]
836
+ }