@nebulacomponents/citable 1.18.2 → 1.20.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 (298) hide show
  1. package/CHANGELOG.md +64 -0
  2. package/README.md +12 -1
  3. package/dist/universal/.agents/skills/citable/SKILL.md +11 -2
  4. package/dist/universal/.agents/skills/citable/VERSION +1 -1
  5. package/dist/universal/.agents/skills/citable/manifest.json +19 -13
  6. package/dist/universal/.agents/skills/citable/schemas/action-plan.schema.json +38 -1
  7. package/dist/universal/.agents/skills/citable/schemas/audit-coverage.schema.json +118 -0
  8. package/dist/universal/.agents/skills/citable/schemas/browser-evidence-plan.schema.json +186 -3
  9. package/dist/universal/.agents/skills/citable/schemas/browser-network-events.schema.json +142 -0
  10. package/dist/universal/.agents/skills/citable/schemas/browser-runtime-events.schema.json +112 -0
  11. package/dist/universal/.agents/skills/citable/schemas/browser-state-observations.schema.json +97 -0
  12. package/dist/universal/.agents/skills/citable/schemas/collection-result.schema.json +35 -0
  13. package/dist/universal/.agents/skills/citable/schemas/config.schema.json +2 -0
  14. package/dist/universal/.agents/skills/citable/schemas/cro-report.schema.json +8 -1
  15. package/dist/universal/.agents/skills/citable/schemas/finding.schema.json +105 -2
  16. package/dist/universal/.agents/skills/citable/schemas/remediation-verification.schema.json +12 -1
  17. package/dist/universal/.agents/skills/citable/schemas/run.schema.json +15 -2
  18. package/dist/universal/.agents/skills/citable/schemas/search-report.schema.json +8 -1
  19. package/dist/universal/.agents/skills/citable/schemas/summary.schema.json +41 -0
  20. package/dist/universal/.claude/agents/citable/manifest.json +2 -2
  21. package/dist/universal/.claude/skills/citable/SKILL.md +11 -2
  22. package/dist/universal/.claude/skills/citable/VERSION +1 -1
  23. package/dist/universal/.claude/skills/citable/manifest.json +19 -13
  24. package/dist/universal/.claude/skills/citable/schemas/action-plan.schema.json +38 -1
  25. package/dist/universal/.claude/skills/citable/schemas/audit-coverage.schema.json +118 -0
  26. package/dist/universal/.claude/skills/citable/schemas/browser-evidence-plan.schema.json +186 -3
  27. package/dist/universal/.claude/skills/citable/schemas/browser-network-events.schema.json +142 -0
  28. package/dist/universal/.claude/skills/citable/schemas/browser-runtime-events.schema.json +112 -0
  29. package/dist/universal/.claude/skills/citable/schemas/browser-state-observations.schema.json +97 -0
  30. package/dist/universal/.claude/skills/citable/schemas/collection-result.schema.json +35 -0
  31. package/dist/universal/.claude/skills/citable/schemas/config.schema.json +2 -0
  32. package/dist/universal/.claude/skills/citable/schemas/cro-report.schema.json +8 -1
  33. package/dist/universal/.claude/skills/citable/schemas/finding.schema.json +105 -2
  34. package/dist/universal/.claude/skills/citable/schemas/remediation-verification.schema.json +12 -1
  35. package/dist/universal/.claude/skills/citable/schemas/run.schema.json +15 -2
  36. package/dist/universal/.claude/skills/citable/schemas/search-report.schema.json +8 -1
  37. package/dist/universal/.claude/skills/citable/schemas/summary.schema.json +41 -0
  38. package/dist/universal/.cursor/skills/citable/SKILL.md +11 -2
  39. package/dist/universal/.cursor/skills/citable/VERSION +1 -1
  40. package/dist/universal/.cursor/skills/citable/manifest.json +19 -13
  41. package/dist/universal/.cursor/skills/citable/schemas/action-plan.schema.json +38 -1
  42. package/dist/universal/.cursor/skills/citable/schemas/audit-coverage.schema.json +118 -0
  43. package/dist/universal/.cursor/skills/citable/schemas/browser-evidence-plan.schema.json +186 -3
  44. package/dist/universal/.cursor/skills/citable/schemas/browser-network-events.schema.json +142 -0
  45. package/dist/universal/.cursor/skills/citable/schemas/browser-runtime-events.schema.json +112 -0
  46. package/dist/universal/.cursor/skills/citable/schemas/browser-state-observations.schema.json +97 -0
  47. package/dist/universal/.cursor/skills/citable/schemas/collection-result.schema.json +35 -0
  48. package/dist/universal/.cursor/skills/citable/schemas/config.schema.json +2 -0
  49. package/dist/universal/.cursor/skills/citable/schemas/cro-report.schema.json +8 -1
  50. package/dist/universal/.cursor/skills/citable/schemas/finding.schema.json +105 -2
  51. package/dist/universal/.cursor/skills/citable/schemas/remediation-verification.schema.json +12 -1
  52. package/dist/universal/.cursor/skills/citable/schemas/run.schema.json +15 -2
  53. package/dist/universal/.cursor/skills/citable/schemas/search-report.schema.json +8 -1
  54. package/dist/universal/.cursor/skills/citable/schemas/summary.schema.json +41 -0
  55. package/dist/universal/.gemini/skills/citable/SKILL.md +11 -2
  56. package/dist/universal/.gemini/skills/citable/VERSION +1 -1
  57. package/dist/universal/.gemini/skills/citable/manifest.json +19 -13
  58. package/dist/universal/.gemini/skills/citable/schemas/action-plan.schema.json +38 -1
  59. package/dist/universal/.gemini/skills/citable/schemas/audit-coverage.schema.json +118 -0
  60. package/dist/universal/.gemini/skills/citable/schemas/browser-evidence-plan.schema.json +186 -3
  61. package/dist/universal/.gemini/skills/citable/schemas/browser-network-events.schema.json +142 -0
  62. package/dist/universal/.gemini/skills/citable/schemas/browser-runtime-events.schema.json +112 -0
  63. package/dist/universal/.gemini/skills/citable/schemas/browser-state-observations.schema.json +97 -0
  64. package/dist/universal/.gemini/skills/citable/schemas/collection-result.schema.json +35 -0
  65. package/dist/universal/.gemini/skills/citable/schemas/config.schema.json +2 -0
  66. package/dist/universal/.gemini/skills/citable/schemas/cro-report.schema.json +8 -1
  67. package/dist/universal/.gemini/skills/citable/schemas/finding.schema.json +105 -2
  68. package/dist/universal/.gemini/skills/citable/schemas/remediation-verification.schema.json +12 -1
  69. package/dist/universal/.gemini/skills/citable/schemas/run.schema.json +15 -2
  70. package/dist/universal/.gemini/skills/citable/schemas/search-report.schema.json +8 -1
  71. package/dist/universal/.gemini/skills/citable/schemas/summary.schema.json +41 -0
  72. package/dist/universal/.github/skills/citable/SKILL.md +11 -2
  73. package/dist/universal/.github/skills/citable/VERSION +1 -1
  74. package/dist/universal/.github/skills/citable/manifest.json +19 -13
  75. package/dist/universal/.github/skills/citable/schemas/action-plan.schema.json +38 -1
  76. package/dist/universal/.github/skills/citable/schemas/audit-coverage.schema.json +118 -0
  77. package/dist/universal/.github/skills/citable/schemas/browser-evidence-plan.schema.json +186 -3
  78. package/dist/universal/.github/skills/citable/schemas/browser-network-events.schema.json +142 -0
  79. package/dist/universal/.github/skills/citable/schemas/browser-runtime-events.schema.json +112 -0
  80. package/dist/universal/.github/skills/citable/schemas/browser-state-observations.schema.json +97 -0
  81. package/dist/universal/.github/skills/citable/schemas/collection-result.schema.json +35 -0
  82. package/dist/universal/.github/skills/citable/schemas/config.schema.json +2 -0
  83. package/dist/universal/.github/skills/citable/schemas/cro-report.schema.json +8 -1
  84. package/dist/universal/.github/skills/citable/schemas/finding.schema.json +105 -2
  85. package/dist/universal/.github/skills/citable/schemas/remediation-verification.schema.json +12 -1
  86. package/dist/universal/.github/skills/citable/schemas/run.schema.json +15 -2
  87. package/dist/universal/.github/skills/citable/schemas/search-report.schema.json +8 -1
  88. package/dist/universal/.github/skills/citable/schemas/summary.schema.json +41 -0
  89. package/dist/universal/.kiro/skills/citable/SKILL.md +11 -2
  90. package/dist/universal/.kiro/skills/citable/VERSION +1 -1
  91. package/dist/universal/.kiro/skills/citable/manifest.json +19 -13
  92. package/dist/universal/.kiro/skills/citable/schemas/action-plan.schema.json +38 -1
  93. package/dist/universal/.kiro/skills/citable/schemas/audit-coverage.schema.json +118 -0
  94. package/dist/universal/.kiro/skills/citable/schemas/browser-evidence-plan.schema.json +186 -3
  95. package/dist/universal/.kiro/skills/citable/schemas/browser-network-events.schema.json +142 -0
  96. package/dist/universal/.kiro/skills/citable/schemas/browser-runtime-events.schema.json +112 -0
  97. package/dist/universal/.kiro/skills/citable/schemas/browser-state-observations.schema.json +97 -0
  98. package/dist/universal/.kiro/skills/citable/schemas/collection-result.schema.json +35 -0
  99. package/dist/universal/.kiro/skills/citable/schemas/config.schema.json +2 -0
  100. package/dist/universal/.kiro/skills/citable/schemas/cro-report.schema.json +8 -1
  101. package/dist/universal/.kiro/skills/citable/schemas/finding.schema.json +105 -2
  102. package/dist/universal/.kiro/skills/citable/schemas/remediation-verification.schema.json +12 -1
  103. package/dist/universal/.kiro/skills/citable/schemas/run.schema.json +15 -2
  104. package/dist/universal/.kiro/skills/citable/schemas/search-report.schema.json +8 -1
  105. package/dist/universal/.kiro/skills/citable/schemas/summary.schema.json +41 -0
  106. package/dist/universal/.opencode/skills/citable/SKILL.md +11 -2
  107. package/dist/universal/.opencode/skills/citable/VERSION +1 -1
  108. package/dist/universal/.opencode/skills/citable/manifest.json +19 -13
  109. package/dist/universal/.opencode/skills/citable/schemas/action-plan.schema.json +38 -1
  110. package/dist/universal/.opencode/skills/citable/schemas/audit-coverage.schema.json +118 -0
  111. package/dist/universal/.opencode/skills/citable/schemas/browser-evidence-plan.schema.json +186 -3
  112. package/dist/universal/.opencode/skills/citable/schemas/browser-network-events.schema.json +142 -0
  113. package/dist/universal/.opencode/skills/citable/schemas/browser-runtime-events.schema.json +112 -0
  114. package/dist/universal/.opencode/skills/citable/schemas/browser-state-observations.schema.json +97 -0
  115. package/dist/universal/.opencode/skills/citable/schemas/collection-result.schema.json +35 -0
  116. package/dist/universal/.opencode/skills/citable/schemas/config.schema.json +2 -0
  117. package/dist/universal/.opencode/skills/citable/schemas/cro-report.schema.json +8 -1
  118. package/dist/universal/.opencode/skills/citable/schemas/finding.schema.json +105 -2
  119. package/dist/universal/.opencode/skills/citable/schemas/remediation-verification.schema.json +12 -1
  120. package/dist/universal/.opencode/skills/citable/schemas/run.schema.json +15 -2
  121. package/dist/universal/.opencode/skills/citable/schemas/search-report.schema.json +8 -1
  122. package/dist/universal/.opencode/skills/citable/schemas/summary.schema.json +41 -0
  123. package/dist/universal/.pi/agent/skills/citable/SKILL.md +11 -2
  124. package/dist/universal/.pi/agent/skills/citable/VERSION +1 -1
  125. package/dist/universal/.pi/agent/skills/citable/manifest.json +19 -13
  126. package/dist/universal/.pi/agent/skills/citable/schemas/action-plan.schema.json +38 -1
  127. package/dist/universal/.pi/agent/skills/citable/schemas/audit-coverage.schema.json +118 -0
  128. package/dist/universal/.pi/agent/skills/citable/schemas/browser-evidence-plan.schema.json +186 -3
  129. package/dist/universal/.pi/agent/skills/citable/schemas/browser-network-events.schema.json +142 -0
  130. package/dist/universal/.pi/agent/skills/citable/schemas/browser-runtime-events.schema.json +112 -0
  131. package/dist/universal/.pi/agent/skills/citable/schemas/browser-state-observations.schema.json +97 -0
  132. package/dist/universal/.pi/agent/skills/citable/schemas/collection-result.schema.json +35 -0
  133. package/dist/universal/.pi/agent/skills/citable/schemas/config.schema.json +2 -0
  134. package/dist/universal/.pi/agent/skills/citable/schemas/cro-report.schema.json +8 -1
  135. package/dist/universal/.pi/agent/skills/citable/schemas/finding.schema.json +105 -2
  136. package/dist/universal/.pi/agent/skills/citable/schemas/remediation-verification.schema.json +12 -1
  137. package/dist/universal/.pi/agent/skills/citable/schemas/run.schema.json +15 -2
  138. package/dist/universal/.pi/agent/skills/citable/schemas/search-report.schema.json +8 -1
  139. package/dist/universal/.pi/agent/skills/citable/schemas/summary.schema.json +41 -0
  140. package/dist/universal/.qoder/skills/citable/SKILL.md +11 -2
  141. package/dist/universal/.qoder/skills/citable/VERSION +1 -1
  142. package/dist/universal/.qoder/skills/citable/manifest.json +19 -13
  143. package/dist/universal/.qoder/skills/citable/schemas/action-plan.schema.json +38 -1
  144. package/dist/universal/.qoder/skills/citable/schemas/audit-coverage.schema.json +118 -0
  145. package/dist/universal/.qoder/skills/citable/schemas/browser-evidence-plan.schema.json +186 -3
  146. package/dist/universal/.qoder/skills/citable/schemas/browser-network-events.schema.json +142 -0
  147. package/dist/universal/.qoder/skills/citable/schemas/browser-runtime-events.schema.json +112 -0
  148. package/dist/universal/.qoder/skills/citable/schemas/browser-state-observations.schema.json +97 -0
  149. package/dist/universal/.qoder/skills/citable/schemas/collection-result.schema.json +35 -0
  150. package/dist/universal/.qoder/skills/citable/schemas/config.schema.json +2 -0
  151. package/dist/universal/.qoder/skills/citable/schemas/cro-report.schema.json +8 -1
  152. package/dist/universal/.qoder/skills/citable/schemas/finding.schema.json +105 -2
  153. package/dist/universal/.qoder/skills/citable/schemas/remediation-verification.schema.json +12 -1
  154. package/dist/universal/.qoder/skills/citable/schemas/run.schema.json +15 -2
  155. package/dist/universal/.qoder/skills/citable/schemas/search-report.schema.json +8 -1
  156. package/dist/universal/.qoder/skills/citable/schemas/summary.schema.json +41 -0
  157. package/dist/universal/.rovodev/skills/citable/SKILL.md +11 -2
  158. package/dist/universal/.rovodev/skills/citable/VERSION +1 -1
  159. package/dist/universal/.rovodev/skills/citable/manifest.json +19 -13
  160. package/dist/universal/.rovodev/skills/citable/schemas/action-plan.schema.json +38 -1
  161. package/dist/universal/.rovodev/skills/citable/schemas/audit-coverage.schema.json +118 -0
  162. package/dist/universal/.rovodev/skills/citable/schemas/browser-evidence-plan.schema.json +186 -3
  163. package/dist/universal/.rovodev/skills/citable/schemas/browser-network-events.schema.json +142 -0
  164. package/dist/universal/.rovodev/skills/citable/schemas/browser-runtime-events.schema.json +112 -0
  165. package/dist/universal/.rovodev/skills/citable/schemas/browser-state-observations.schema.json +97 -0
  166. package/dist/universal/.rovodev/skills/citable/schemas/collection-result.schema.json +35 -0
  167. package/dist/universal/.rovodev/skills/citable/schemas/config.schema.json +2 -0
  168. package/dist/universal/.rovodev/skills/citable/schemas/cro-report.schema.json +8 -1
  169. package/dist/universal/.rovodev/skills/citable/schemas/finding.schema.json +105 -2
  170. package/dist/universal/.rovodev/skills/citable/schemas/remediation-verification.schema.json +12 -1
  171. package/dist/universal/.rovodev/skills/citable/schemas/run.schema.json +15 -2
  172. package/dist/universal/.rovodev/skills/citable/schemas/search-report.schema.json +8 -1
  173. package/dist/universal/.rovodev/skills/citable/schemas/summary.schema.json +41 -0
  174. package/dist/universal/.trae/skills/citable/SKILL.md +11 -2
  175. package/dist/universal/.trae/skills/citable/VERSION +1 -1
  176. package/dist/universal/.trae/skills/citable/manifest.json +19 -13
  177. package/dist/universal/.trae/skills/citable/schemas/action-plan.schema.json +38 -1
  178. package/dist/universal/.trae/skills/citable/schemas/audit-coverage.schema.json +118 -0
  179. package/dist/universal/.trae/skills/citable/schemas/browser-evidence-plan.schema.json +186 -3
  180. package/dist/universal/.trae/skills/citable/schemas/browser-network-events.schema.json +142 -0
  181. package/dist/universal/.trae/skills/citable/schemas/browser-runtime-events.schema.json +112 -0
  182. package/dist/universal/.trae/skills/citable/schemas/browser-state-observations.schema.json +97 -0
  183. package/dist/universal/.trae/skills/citable/schemas/collection-result.schema.json +35 -0
  184. package/dist/universal/.trae/skills/citable/schemas/config.schema.json +2 -0
  185. package/dist/universal/.trae/skills/citable/schemas/cro-report.schema.json +8 -1
  186. package/dist/universal/.trae/skills/citable/schemas/finding.schema.json +105 -2
  187. package/dist/universal/.trae/skills/citable/schemas/remediation-verification.schema.json +12 -1
  188. package/dist/universal/.trae/skills/citable/schemas/run.schema.json +15 -2
  189. package/dist/universal/.trae/skills/citable/schemas/search-report.schema.json +8 -1
  190. package/dist/universal/.trae/skills/citable/schemas/summary.schema.json +41 -0
  191. package/dist/universal/.trae-cn/skills/citable/SKILL.md +11 -2
  192. package/dist/universal/.trae-cn/skills/citable/VERSION +1 -1
  193. package/dist/universal/.trae-cn/skills/citable/manifest.json +19 -13
  194. package/dist/universal/.trae-cn/skills/citable/schemas/action-plan.schema.json +38 -1
  195. package/dist/universal/.trae-cn/skills/citable/schemas/audit-coverage.schema.json +118 -0
  196. package/dist/universal/.trae-cn/skills/citable/schemas/browser-evidence-plan.schema.json +186 -3
  197. package/dist/universal/.trae-cn/skills/citable/schemas/browser-network-events.schema.json +142 -0
  198. package/dist/universal/.trae-cn/skills/citable/schemas/browser-runtime-events.schema.json +112 -0
  199. package/dist/universal/.trae-cn/skills/citable/schemas/browser-state-observations.schema.json +97 -0
  200. package/dist/universal/.trae-cn/skills/citable/schemas/collection-result.schema.json +35 -0
  201. package/dist/universal/.trae-cn/skills/citable/schemas/config.schema.json +2 -0
  202. package/dist/universal/.trae-cn/skills/citable/schemas/cro-report.schema.json +8 -1
  203. package/dist/universal/.trae-cn/skills/citable/schemas/finding.schema.json +105 -2
  204. package/dist/universal/.trae-cn/skills/citable/schemas/remediation-verification.schema.json +12 -1
  205. package/dist/universal/.trae-cn/skills/citable/schemas/run.schema.json +15 -2
  206. package/dist/universal/.trae-cn/skills/citable/schemas/search-report.schema.json +8 -1
  207. package/dist/universal/.trae-cn/skills/citable/schemas/summary.schema.json +41 -0
  208. package/dist/universal/manifest.json +232 -160
  209. package/package.json +1 -1
  210. package/schemas/action-plan.schema.json +38 -1
  211. package/schemas/audit-coverage.schema.json +118 -0
  212. package/schemas/browser-evidence-plan.schema.json +186 -3
  213. package/schemas/browser-network-events.schema.json +142 -0
  214. package/schemas/browser-runtime-events.schema.json +112 -0
  215. package/schemas/browser-state-observations.schema.json +97 -0
  216. package/schemas/collection-result.schema.json +35 -0
  217. package/schemas/config.schema.json +2 -0
  218. package/schemas/cro-report.schema.json +8 -1
  219. package/schemas/finding.schema.json +105 -2
  220. package/schemas/remediation-verification.schema.json +12 -1
  221. package/schemas/run.schema.json +15 -2
  222. package/schemas/search-report.schema.json +8 -1
  223. package/schemas/summary.schema.json +41 -0
  224. package/skill/SKILL.md +11 -2
  225. package/src/acceptance/reproducibility.js +5 -25
  226. package/src/analysis/croRoadmap.js +3 -3
  227. package/src/analysis/strategicRoadmap.js +3 -3
  228. package/src/artifacts/interchange.js +2 -6
  229. package/src/cli/index.js +15 -3
  230. package/src/commands/actionPlan.js +46 -5
  231. package/src/commands/applyRemediation.js +5 -5
  232. package/src/commands/audit.js +75 -8
  233. package/src/commands/ciWorkflow.js +7 -2
  234. package/src/commands/compareSnapshots.js +155 -47
  235. package/src/commands/connect.js +24 -4
  236. package/src/commands/context.js +41 -2
  237. package/src/commands/croSuite.js +51 -13
  238. package/src/commands/delivery.js +7 -7
  239. package/src/commands/governance.js +9 -10
  240. package/src/commands/implementationKit.js +2 -1
  241. package/src/commands/init.js +8 -1
  242. package/src/commands/previewCro.js +1 -1
  243. package/src/commands/prioritize.js +3 -2
  244. package/src/commands/reviews.js +31 -5
  245. package/src/commands/roadmapCmd.js +7 -13
  246. package/src/commands/sweep.js +15 -2
  247. package/src/commands/verifyRemediation.js +94 -19
  248. package/src/connectors/collectionResult.js +80 -0
  249. package/src/connectors/ga4.js +46 -11
  250. package/src/connectors/gsc.js +41 -6
  251. package/src/connectors/index.js +1 -1
  252. package/src/connectors/webflow.js +140 -10
  253. package/src/connectors/wordpress.js +92 -8
  254. package/src/crawler/fetch.js +220 -24
  255. package/src/crawler/resourceValidity.js +119 -0
  256. package/src/crawler/sitemap.js +435 -16
  257. package/src/crawler/sitemapCollector.js +364 -0
  258. package/src/crawler/urlIdentity.js +97 -0
  259. package/src/detectors/agent.js +11 -0
  260. package/src/detectors/ans.js +16 -1
  261. package/src/detectors/arch.js +6 -0
  262. package/src/detectors/claim.js +9 -0
  263. package/src/detectors/crawl.js +7 -0
  264. package/src/detectors/cro.js +21 -0
  265. package/src/detectors/cwv.js +4 -0
  266. package/src/detectors/entity.js +7 -0
  267. package/src/detectors/evd.js +9 -0
  268. package/src/detectors/framework.js +28 -2
  269. package/src/detectors/geoReco.js +16 -0
  270. package/src/detectors/hreflang.js +3 -0
  271. package/src/detectors/lifeMeas.js +9 -0
  272. package/src/detectors/link.js +6 -1
  273. package/src/detectors/page.js +11 -0
  274. package/src/detectors/schemaData.js +16 -1
  275. package/src/detectors/tech.js +34 -3
  276. package/src/evidence/coverage.js +448 -0
  277. package/src/evidence/determination.js +157 -0
  278. package/src/evidence/downstream.js +110 -0
  279. package/src/evidence/hashes.js +109 -0
  280. package/src/evidence/run.js +68 -8
  281. package/src/extractor/page.js +29 -2
  282. package/src/extractor/site.js +298 -50
  283. package/src/observations/browser/correlation.js +83 -0
  284. package/src/observations/browser/networkCollector.js +413 -0
  285. package/src/observations/browser/runtimeEventCollector.js +337 -0
  286. package/src/observations/browser/sanitizer.js +322 -0
  287. package/src/observations/browser/stateCollector.js +386 -0
  288. package/src/observations/browserJourney.js +131 -3
  289. package/src/reporting/executiveCroReport.js +37 -14
  290. package/src/reporting/executiveExport.js +45 -16
  291. package/src/reporting/executiveSearchReport.js +57 -23
  292. package/src/reporting/report.js +56 -9
  293. package/src/shared/epistemicLanguage.js +86 -0
  294. package/src/shared/evidenceSourceResolver.js +48 -17
  295. package/src/shared/htmlEscape.js +8 -4
  296. package/src/shared/runPackageVerifier.js +99 -8
  297. package/src/shared/verifiedRunLoader.js +129 -0
  298. package/src/sow/generateSow.js +1 -1
package/CHANGELOG.md CHANGED
@@ -15,6 +15,70 @@ _No entries yet. See [`BOUNTY.md`](BOUNTY.md) to submit the first one._
15
15
 
16
16
  ## Unreleased
17
17
 
18
+ ## 1.20.0 — 2026-09-20
19
+
20
+ ### Added — Semantic completeness and explicit audit coverage
21
+
22
+ - Replaced the hidden 50-page URL-audit ceiling with declared, bounded budgets
23
+ (`--max-pages`, default 500, hard ceiling 10,000; time budget default 1,800
24
+ seconds, hard ceiling 86,400 seconds).
25
+ - Added reconciled coverage evidence and independent execution, coverage, and
26
+ determination statuses so truncation and partial failures cannot masquerade
27
+ as complete evidence.
28
+ - Propagated coverage requirements through determinations, snapshot comparison,
29
+ remediation, connectors, reports, exports, CI output, and action plans.
30
+ - Added sealed package verification, representation-specific evidence hashes,
31
+ and an adversarial 257-page end-to-end regression fixture.
32
+ - Qualified user-facing language for incomplete, empty, legacy, and unverified
33
+ evidence rather than emitting unsupported clean, verified, resolved, or
34
+ site-wide claims.
35
+
36
+ ## 1.19.0 — 2026-09-11
37
+
38
+ ### Added — Deterministic Bounded Browser-Journey Evidence Acquisition (ADR-003)
39
+
40
+ - **Browser Network Activity Observation (`network-events.json` / `schemas/browser-network-events.schema.json`)**:
41
+ - Captured HTTP/HTTPS network transactions during journey execution via Playwright request/response/failure hooks.
42
+ - Implemented configurable host allowlist filtering (exact match and wildcard subdomains) to isolate target and partner traffic.
43
+ - Recorded request method, URL, status code, protocol, timings, body size, redirects, and failure errors.
44
+ - Deny-by-default payload capture: request and response bodies default to uncaptured (`request_body: false`, `response_body: false`); host allowlist alone never triggers body capture.
45
+ - Explicit status separation: headers, query params, and bodies record status (`not_requested`, `filtered`, `captured`, `truncated`, `unavailable`, `hash_only`, `redacted`).
46
+ - Added strict sanitization of allowlisted request/response headers, query parameters, and JSON payloads with bounded size limits (`max_body_bytes`, `max_field_size`).
47
+ - In-flight request tracking (`summary.in_flight_requests`) and optional bounded settling timeout (`network_policy.settling_timeout_ms`).
48
+ - Added deterministic transaction bounds (`max_events`) with explicit `truncated` flags and epistemic status (`ABSENT`, `TRUNCATED`, `UNOBSERVABLE`, `FAILED`).
49
+ - **Browser State Observation (`state-observations.json` / `schemas/browser-state-observations.schema.json`)**:
50
+ - Captured multi-checkpoint state snapshots at journey stages (`initial`, `before_step`, `step`, `final`).
51
+ - Recorded final URL, allowlisted query parameters, referrer, and navigation type.
52
+ - Governed access to cookies, localStorage, and sessionStorage: dumps only explicitly named keys/cookies declared in policy, unconditionally blocking unlisted storage.
53
+ - HttpOnly cookie semantics: captures presence, length, and security flags (`http_only: true`, `secure: true`, `same_site`), while strictly suppressing raw plaintext values as `[POLICY_RESTRICTED_HTTPONLY]` in `allowlist_values` mode. Context-level failures are recorded in `unavailable_items`.
54
+ - Added safe global variable evaluation using strict AST identifier/bracket path validation (`[a-zA-Z0-9_$.[\]'"]+`) without `eval()` or arbitrary JavaScript execution. Throwing getters during evaluation fail closed to `unavailable_items` without asserting false absence.
55
+ - Extracted DOM query results (presence, text content, attributes) scoped strictly to allowlisted CSS selectors and attributes.
56
+ - **Explicitly Configured Runtime Events (`runtime-events.json` / `schemas/browser-runtime-events.schema.json`)**:
57
+ - Generic listener for global array event queues (e.g. `window.dataLayer`, custom event queues) hooking queues via `Object.defineProperty(window, prop, ...)` to intercept queue reassignment (`window.dataLayer = []`) with polling fallback for unhooked mutations.
58
+ - Safe in-page and Node extraction protecting against hostile throwing getters (`[GETTER_ERROR]`).
59
+ - Detailed collector health reporting in `summary.collector_health` (`status`, `queue_replaced`, `push_replaced`, `polling_fallback_used`, `supported_contexts: ["top_level_main_frame"]`, `unsupported_contexts: ["cross_origin_iframes", "web_workers"]`).
60
+ - Window event listener for declared DOM events (`DOMContentLoaded`, `load`, custom events).
61
+ - Explicit event allowlists, field allowlists, sensitive key redaction, and SHA-256 field hashing.
62
+ - Bounded collection (`max_events`) with explicit truncation counters and `filtered_events` tracking.
63
+ - **Monotonic Sequencing & Temporal Step Correlation**:
64
+ - `src/observations/browser/correlation.js`: Generates monotonically increasing event sequences and microsecond-precision offsets (`monotonic_offset_ms`) from journey start.
65
+ - Explicit phase classification: `during_step`, `between_steps`, and `post_journey`.
66
+ - Asynchronous transaction completion tagging (`ambiguous_async: true`): records `initiated_step_id` and `completed_step_id` when requests resolve across step boundaries or after journey completion.
67
+ - **Mandatory Secret Sanitization & Residual Risk Disclosure (`src/observations/browser/sanitizer.js`)**:
68
+ - Unconditional redaction to `[REDACTED_SECRET]` for Authorization/Bearer headers, Cookie/Set-Cookie headers, basic auth credentials, passwords, session tokens, API keys, private keys, credit cards, and OAuth callback codes.
69
+ - Defense-in-depth regex redaction paired with structural minimization; documented residual risk for novel unstructured secrets in customer-allowlisted payload fields.
70
+ - Recursively applied across headers, query parameters, request/response bodies, state storage values, globals, and runtime event payloads.
71
+ - **Strict ABSENT Epistemic Invariant**:
72
+ - Guarantees that absence (`ABSENT` / `exists: false`) is asserted only when target was in declared scope, collector was active full window, no truncation occurred, candidate was not filtered, and no collector errors occurred.
73
+ - **Resilient Evidence Preservation**:
74
+ - In the event of a required journey step failure, captured partial network events, state observations, and runtime events are preserved and packaged into the failure evidence bundle alongside failure JSON and screenshots.
75
+ - **Schema & Artifact Integration**:
76
+ - Evolved `schemas/browser-evidence-plan.schema.json` backward-compatibly with optional `network_policy`, `state_policy`, `runtime_event_policy`, and `action: "checkpoint"`.
77
+ - All artifacts validated strictly against compiled Ajv schemas via `validateAgainst`.
78
+ - Added summary objects (`network_summary`, `state_summary`, `runtime_events_summary`) and artifact references to the canonical observation envelope (`schemas/observation.schema.json`).
79
+
80
+
81
+
18
82
  ## 1.18.2 — 2026-09-10
19
83
 
20
84
  ### Fixed — Executive Reporting, Evidence Provenance, and Commercial Artifact Hardening
package/README.md CHANGED
@@ -34,6 +34,10 @@ generator, not a Lighthouse wrapper, not an "AI visibility score".
34
34
  - **Separate state reporting** for retrieval eligibility, source extraction and
35
35
  support suitability, and observed citation behavior. These are never merged
36
36
  into an "AI visibility score."
37
+ - **Scope-qualified reporting**: empty, legacy, unverified, incomplete, and
38
+ indeterminate evidence cannot be rendered as a clean, complete, verified, or
39
+ site-wide conclusion. Reports name the evaluated population and preserve
40
+ limitations; absence of findings is not evidence of absence.
37
41
  - **Fail-closed governance**: claims can't become verified without evidence,
38
42
  expired evidence invalidates claims, schema is never fabricated, missing
39
43
  facts return `blocked` with `required_input`.
@@ -168,7 +172,7 @@ npx @nebulacomponents/citable help
168
172
  cd your-site/
169
173
  citable init # creates .citable/ (non-destructive)
170
174
  citable plan-audit --target ./dist --base-url https://example.com # read-only profile/capability plan
171
- citable audit --target ./dist --base-url https://example.com
175
+ citable audit --target ./dist --base-url https://example.com --max-pages 500 --time-budget-seconds 1800
172
176
  citable action-plan <run-id> # ordered actions, blockers, review gates, verification
173
177
  citable observe passages --target ./dist --base-url https://example.com
174
178
  citable observe index --input search-console-export.json
@@ -225,6 +229,13 @@ citable test visual
225
229
  citable corpus benchmark
226
230
  ```
227
231
 
232
+ URL audits are explicitly bounded. The default budget is 500 pages and 1,800
233
+ seconds; `--max-pages` accepts 1–10,000 and `--time-budget-seconds` accepts
234
+ 1–86,400. Every run records requested, discovered, attempted, retrieved,
235
+ evaluated, failed, indeterminate, excluded, and unvisited populations in
236
+ `coverage.json`. A completed process can still have incomplete coverage, and
237
+ reports never widen subset evidence into a site-wide claim.
238
+
228
239
  ## Repository map
229
240
 
230
241
  | Path | Purpose |
@@ -7,7 +7,7 @@ description: >
7
7
  generative engine optimization, structured data governance, claim substantiation,
8
8
  crawler policy, entity consistency, content discoverability, or wants a site audited
9
9
  for how search and AI systems will retrieve, understand, cite, or recommend it.
10
- version: 1.18.2
10
+ version: 1.20.0
11
11
  ---
12
12
 
13
13
  # Citable — evidence and change control for search and AI citation readiness
@@ -69,6 +69,15 @@ Every report must keep these top-level states separate:
69
69
  3. **Observed citation behavior** — only controlled, timestamped provider
70
70
  observations; absent observations are `not_evidenced`, never inferred.
71
71
 
72
+ Presentation language must preserve those boundaries. An empty finding list,
73
+ legacy package, unverified artifact, incomplete crawl, or indeterminate
74
+ determination must not be described as `clean`, `complete`, `verified`,
75
+ `resolved`, `100%`, or `site-wide`. State the evaluated population and the
76
+ limitation instead (for example, "No findings were produced for the 217
77
+ successfully evaluated resources; corpus-wide absence is not established").
78
+ Positive local observations may remain supported, but they must not be widened
79
+ to pages or resources that were not observed.
80
+
72
81
  Within retrieval, distinguish `allowed_by_policy`, `synthetic_fetch_succeeded`,
73
82
  `observed_in_production_logs`, `indexed`, and `returned_by_retrieval`. Within
74
83
  citation testing, distinguish mention, citation, material support, canonical
@@ -86,7 +95,7 @@ prefer running it over re-deriving its checks by hand:
86
95
 
87
96
  ```
88
97
  citable init # initialize .citable/ (non-destructive)
89
- citable audit [scope] --target <dir|url> [--base-url <url>] [--ref-date YYYY-MM-DD]
98
+ citable audit [scope] --target <dir|url> [--base-url <url>] [--max-pages <1..10000>] [--time-budget-seconds <1..86400>] [--ref-date YYYY-MM-DD]
90
99
  citable plan-audit --target <dir|url> [--base-url <url>]
91
100
  citable sweep technical --target <dir|url> # Technical SEO sweep + Core Web Vitals metrics
92
101
  citable inspect <page> --target <dir|url>
@@ -1 +1 @@
1
- 1.18.2
1
+ 1.20.0
@@ -1,11 +1,11 @@
1
1
  {
2
2
  "name": "citable",
3
- "version": "1.18.2",
3
+ "version": "1.20.0",
4
4
  "managedBy": "citable-cli",
5
5
  "provider": "codex",
6
6
  "providerName": "OpenAI Codex",
7
7
  "scope": "bundle",
8
- "sourcePackage": "@nebulacomponents/citable@1.18.2",
8
+ "sourcePackage": "@nebulacomponents/citable@1.20.0",
9
9
  "variantPath": ".agents/skills/citable",
10
10
  "agentProfiles": {
11
11
  "status": "unsupported",
@@ -55,23 +55,28 @@
55
55
  "schemas/acceptance-corpus.schema.json": "sha256:b703be371ee33747d83814e448d18cd01f103f1832480a95df4331b86982165d",
56
56
  "schemas/acceptance-run-context.schema.json": "sha256:56d75c7bcd166c3578a71699df1aa5466327c23c1e06e33773f2493f5caa1a50",
57
57
  "schemas/acceptance-run-receipt.schema.json": "sha256:6c6e66767cf3b9adb42ace087f7e9a428312f41b7ecbaf533fc8d7ba5953da44",
58
- "schemas/action-plan.schema.json": "sha256:e2ca871c92595a55ac56248cd87df67d94449ac39ac216e60751baaec5b74f1e",
58
+ "schemas/action-plan.schema.json": "sha256:56b298e47fef5238b7971fbd7a72220e900fb1494065d6f75871da4dd85816f1",
59
59
  "schemas/artifact-interchange.schema.json": "sha256:c6f628934c8a1b8ea2996e03c2c5abd46c2a0e74c680b0a43e44c2343dc9aa21",
60
60
  "schemas/assumption.schema.json": "sha256:31a0f44bbf1d207e013961ec4c39eea85c3ae9efde1485b5e26084562c816844",
61
+ "schemas/audit-coverage.schema.json": "sha256:8787a80e9917ab83438949cb1556bc6610bc6fb768a37df00a1504e6281f51f4",
61
62
  "schemas/bing-webmaster.schema.json": "sha256:8357c518a8cb4ccd1def2da38950fbba68270e2b1613ad522b50c568a3b8538f",
62
- "schemas/browser-evidence-plan.schema.json": "sha256:81ef14f665b4a00f01afb747576faeb06025722e5c15a36eff3d17e59e978851",
63
+ "schemas/browser-evidence-plan.schema.json": "sha256:1df677fb08338b832d93af2aabec565ef8d621c820cbc77f847dc1c94a814256",
64
+ "schemas/browser-network-events.schema.json": "sha256:aa71380998df74cff929316d7c76332a74c16cd08504214cdb2b86d9d793fee5",
65
+ "schemas/browser-runtime-events.schema.json": "sha256:ff9b6e486ca5a72a6613a4e3e479cd11bcadff52c7481df125aa1670f404a7e4",
66
+ "schemas/browser-state-observations.schema.json": "sha256:7748b9ed7110834e19c1827bd125c0d0cdb50e2dd89a713da03cd643e9c72843",
63
67
  "schemas/canonical-index-import.schema.json": "sha256:ef633662cb30873242ca356443bc4835afe56bb020208e8f42fa47ac8047b66e",
64
68
  "schemas/claim.schema.json": "sha256:ce79ccbfa34ece9b7a309a6962522ea06a1f44c468b4c472b5c376554a788537",
65
69
  "schemas/cli-output-envelope.schema.json": "sha256:6964e8f2f43618bfd0d7a3f5344b37ebc26f04779796bb8ff4675b935b6208c3",
70
+ "schemas/collection-result.schema.json": "sha256:d844aa183300abf220030f6a000f297195a06c02f2cd3a4f15a399e317b8c5d8",
66
71
  "schemas/common.defs.json": "sha256:ac66081df6b86f652e066ea868edecfcd36cdd1b1c81e55a1e3af880f671b727",
67
72
  "schemas/competitor.schema.json": "sha256:2f6fd7e4543846bde56ff4dc62bb41fa366889787b794a7cdb0bff1a3392e591",
68
- "schemas/config.schema.json": "sha256:a87f3bb0087de09035b9f2dafea66e32e4fcc2e3e329abcd0fd8a5ec33318f2a",
73
+ "schemas/config.schema.json": "sha256:da40fe568844a6303d265f83058fce9f4a9a569cd72b271bc219361c71e8e8fa",
69
74
  "schemas/connection.schema.json": "sha256:abcedde8d62d0c0663d4f959e06132a617908058ed965078965445ef3b108310",
70
75
  "schemas/corpus-publication-receipt.schema.json": "sha256:a4d523fd1c1fa53762522891c06c06edb668cd15e1de3c7123d2b9948445ae32",
71
76
  "schemas/corroboration-import.schema.json": "sha256:927983d0590f1ec569e86195d2031be0cd212f9436ff98acca468cbae108d85e",
72
77
  "schemas/crawler-identity.schema.json": "sha256:e1e3e6da203a8bc49fba8f9bbde525368891db022d542fc615b677401825351d",
73
78
  "schemas/crawler.schema.json": "sha256:1a113dfb80bc6cde904c3ea648c82ea1d88fe50f2c1a0e7175d44abba28ac64e",
74
- "schemas/cro-report.schema.json": "sha256:270cfe946d3dce007672c5fd5e052f07e3322c85a2bfcc0cd47f34ce569f2fb1",
79
+ "schemas/cro-report.schema.json": "sha256:96a9c2a7a08eafe07bc78c3f38edc82c714ed96d13024142ece338dbd1e018bf",
75
80
  "schemas/customer-outcome.schema.json": "sha256:c0cdfee31a692feadb31dc6be734d45ae178ee53f28349c2a9e7504bdfcf9e50",
76
81
  "schemas/decision.schema.json": "sha256:7c30f3ad83a6aa0b67ecc51ac6691e5e041b633d01bab17cee2b5218d926204e",
77
82
  "schemas/deployment-receipt.schema.json": "sha256:789455907e7f3039fd55ee5b2568e09871128f513f5ddfe1f3afac1a4dd6b2bd",
@@ -83,7 +88,7 @@
83
88
  "schemas/exception.schema.json": "sha256:c88985494ec66554330fdc5b65d033527d0005acf41f10798b1e831d171f8944",
84
89
  "schemas/experiment.schema.json": "sha256:4b5d16481448597b152269296b67b5776be6f03d8f9afba1833bcee10bf3c05b",
85
90
  "schemas/field-validation-metrics.schema.json": "sha256:bd5daeafc1593f1c4707d75180e1feb1e81d9345a57c1f269eadf13c36cb7012",
86
- "schemas/finding.schema.json": "sha256:1775425b9b989dd4ffc0c607eb9d64e95cad2124f9058f83ef78b0b0030e209f",
91
+ "schemas/finding.schema.json": "sha256:06c0fc028288319828f124cea6791a7ad69a1bc3aa81c176604a83ca0f2da766",
87
92
  "schemas/fleet.schema.json": "sha256:3bf5772695ae4bb49a8c5fdbedee230ddb1d84aff6a3176eeb41527aca6ef2a5",
88
93
  "schemas/funnel.schema.json": "sha256:6c368f29296ac45f5d52bb3a2f95fa935a1f30f3d53aae846156e9aa4c8ec59c",
89
94
  "schemas/initiative.schema.json": "sha256:491f6cc022c7ac1f9ea9ac9ddfcd270cb49c390e2601fe1e73aa6192a9e7689a",
@@ -103,23 +108,24 @@
103
108
  "schemas/release-manifest.schema.json": "sha256:962be645e790b5f3dc6f6ea455e187492d727dcb91d00f91e4e25b40e2dbc360",
104
109
  "schemas/release-state.schema.json": "sha256:9920f68e538915d0d07044f313a9e410775a38ce9bb46a55d9ebe02970784803",
105
110
  "schemas/remediation-spec.schema.json": "sha256:6fe8cb773702862ba6d261198bb5cc2dca3eca0a2310a60ebddd04377654df8d",
106
- "schemas/remediation-verification.schema.json": "sha256:b4e4f3ce8d72ef64cdb879a86b6afe9220e2d9e4d13ed3486348cc8ee38e1319",
111
+ "schemas/remediation-verification.schema.json": "sha256:b56560b4f6fd82b9d3db4ad4f7fd0a0e4b289bfebf2e5a02e7c6727d5ba97291",
107
112
  "schemas/review-item.schema.json": "sha256:df532a70385d5031bbc18654f3ccb436dc6e8d402ccf987e58f8f7e3ad2fb3f1",
108
113
  "schemas/review-policy.schema.json": "sha256:b2d176b1886f78c384b25532a0c3eb18548dfbd17f362a305e622bab562a1d04",
109
114
  "schemas/reviewer.schema.json": "sha256:3716697b752575a1277f2c2b318b1f2565de02bf9dce2a0c165567ab5330d18b",
110
115
  "schemas/risk.schema.json": "sha256:ea3ca47a8457d98ea65df78e07ba6c20479906e8a3df07a6fa4be5644828fc49",
111
- "schemas/run.schema.json": "sha256:46c3178620f3a358d936d535aeadb83454b9b35b551e53e6615cc9862063dacb",
116
+ "schemas/run.schema.json": "sha256:d46e9d0154a4a8acddbc3b4dec69e9202c6a4848b94210ca5ba32ede0d447023",
112
117
  "schemas/sampling-plan.schema.json": "sha256:005f70f149baaacd7de698548d556d3e401c630978748271b0e14a74726dd413",
113
118
  "schemas/scenario.schema.json": "sha256:3f5bc2032d08f973600db068f475176a0e4706b33be42f99c778fe755a0ff38b",
114
119
  "schemas/schedule.schema.json": "sha256:645df065bf33577a960c0bf8bb97e141e9326840303569468dae8a553d468482",
115
- "schemas/search-report.schema.json": "sha256:0ae2dad77cf3c6f2abac22a8180d66bde8ebd044ed6324a56329cd12a3c898f2",
120
+ "schemas/search-report.schema.json": "sha256:d6e837580fdd53365e74d3d8b5101cd5a7d54b72f438155293aac399f676b176",
116
121
  "schemas/source-identity-chain.schema.json": "sha256:a65d9c12eaed1bd6b637c66a2f9362c17287fdfcb454d8676fb611d2d28aa019",
117
122
  "schemas/sow.schema.json": "sha256:3a3fd6048a747a9bc0cfaea98920376b043616a33c953a9eb8b74d0ae32dded0",
123
+ "schemas/summary.schema.json": "sha256:0c9eb076fe992f351c3963728ba247a003648d8fe637b7cdd3016ba5842199c6",
118
124
  "schemas/variance.schema.json": "sha256:68389f64f0a3be13ff8951e8eefba9a5c31d0738325cb47e37c1a8435bea48f0",
119
125
  "scripts/README.md": "sha256:9eee4e8beb4579a183bd714c9dd24b83abd020753eada5caeffae004739d60b5",
120
- "SKILL.md": "sha256:a2c2ce3aced71fc2a66f2e46b4a9fcc10b65819dcef58176b2cefe674d6a941b",
126
+ "SKILL.md": "sha256:77d5647c556f0ba398bcb855c7307b004020a9fec0d9ef3b8e143173ccbfb756",
121
127
  "templates/finding-review.md": "sha256:b270a83d3f015150aac80249ae9314979c0befea39ff92ec455f9a5aaa73404c",
122
- "VERSION": "sha256:0a1b17e91d514c0c9e88520e6091e2d52a6faf8296892cad7355ff0723a42914"
128
+ "VERSION": "sha256:26ac7beccb7951efb69255974ffc70a13bb2e68ae84dcb5456c3fb46294bdba8"
123
129
  },
124
- "treeHash": "sha256:2d4210d9dd26b7952f53964402abf06c8ae12ae43cb8ac5c568f070ab44b0001"
130
+ "treeHash": "sha256:d2abaf43458900a402f054172a8c35811b99cab2272c7503d72ea01b7ed1285b"
125
131
  }
@@ -4,11 +4,23 @@
4
4
  "title": "Finding action plan",
5
5
  "type": "object",
6
6
  "additionalProperties": false,
7
- "required": ["source_run_id", "source_findings_hash", "generated_at", "summary", "actions"],
7
+ "required": ["source_run_id", "source_findings_hash", "generated_at", "summary", "actions", "source_coverage"],
8
8
  "properties": {
9
9
  "source_run_id": { "type": "string", "minLength": 1 },
10
10
  "source_findings_hash": { "type": "string", "pattern": "^[a-f0-9]{64}$" },
11
11
  "generated_at": { "type": "string" },
12
+ "source_coverage": {
13
+ "type": "object",
14
+ "additionalProperties": false,
15
+ "required": ["coverage_status", "determination_status", "evidence_scope", "limitations"],
16
+ "properties": {
17
+ "coverage_status": { "type": "string", "enum": ["complete", "truncated", "indeterminate", "not_applicable"] },
18
+ "determination_status": { "type": "string", "enum": ["supported", "qualified", "indeterminate", "not_applicable"] },
19
+ "artifact": { "type": ["string", "null"] },
20
+ "evidence_scope": { "$ref": "#/definitions/evidenceScope" },
21
+ "limitations": { "type": "array", "items": { "type": "string" } }
22
+ }
23
+ },
12
24
  "summary": {
13
25
  "type": "object",
14
26
  "additionalProperties": false,
@@ -40,6 +52,10 @@
40
52
  "owner": { "type": ["string", "null"] },
41
53
  "decision_owner": { "type": ["string", "null"] },
42
54
  "status": { "type": "string", "enum": ["ready", "blocked"] },
55
+ "coverage_status": { "type": "string", "enum": ["complete", "truncated", "indeterminate", "not_applicable"] },
56
+ "determination_status": { "type": "string", "enum": ["supported", "qualified", "indeterminate", "not_applicable"] },
57
+ "evidence_scope": { "$ref": "#/definitions/evidenceScope" },
58
+ "limitations": { "type": "array", "items": { "type": "string" } },
43
59
  "required_input": { "type": "array", "items": { "type": "string" } },
44
60
  "semantic_gates": { "type": "array", "items": { "type": "string" } },
45
61
  "unsafe_shortcuts": { "type": "array", "items": { "type": "string" } },
@@ -64,5 +80,26 @@
64
80
  }
65
81
  }
66
82
  }
83
+ },
84
+ "definitions": {
85
+ "evidenceScope": {
86
+ "type": "object",
87
+ "additionalProperties": false,
88
+ "required": ["requirement", "satisfaction", "coverage_ref", "resource_ids"],
89
+ "properties": {
90
+ "requirement": { "type": "string", "minLength": 1 },
91
+ "satisfaction": { "type": "string", "enum": ["supported", "qualified", "indeterminate", "not_applicable"] },
92
+ "coverage_ref": { "type": ["string", "null"] },
93
+ "resource_ids": { "type": "array", "uniqueItems": true, "items": { "type": "string", "minLength": 1 } },
94
+ "population": { "type": "string", "enum": ["evaluated_subset", "none_observed"] },
95
+ "evaluated": { "type": ["integer", "null"], "minimum": 0 },
96
+ "eligible": { "type": ["integer", "null"], "minimum": 0 },
97
+ "excluded": { "type": ["integer", "null"], "minimum": 0 },
98
+ "failed": { "type": ["integer", "null"], "minimum": 0 },
99
+ "indeterminate": { "type": ["integer", "null"], "minimum": 0 },
100
+ "unvisited": { "type": ["integer", "null"], "minimum": 0 },
101
+ "denominator": { "type": ["integer", "null"], "minimum": 0 }
102
+ }
103
+ }
67
104
  }
68
105
  }
@@ -0,0 +1,118 @@
1
+ {
2
+ "$id": "citable://schemas/audit-coverage.schema.json",
3
+ "$schema": "http://json-schema.org/draft-07/schema#",
4
+ "title": "Audit coverage",
5
+ "type": "object",
6
+ "additionalProperties": false,
7
+ "required": [
8
+ "schema_version",
9
+ "normalization_version",
10
+ "requested_scope",
11
+ "discovery",
12
+ "populations",
13
+ "resources",
14
+ "stop_reason",
15
+ "coverage_status",
16
+ "reconciliation",
17
+ "limitations"
18
+ ],
19
+ "properties": {
20
+ "schema_version": { "const": 1 },
21
+ "normalization_version": { "type": "string", "minLength": 1 },
22
+ "requested_scope": {
23
+ "type": "object",
24
+ "additionalProperties": false,
25
+ "required": ["start_url", "origin", "max_pages", "time_budget_seconds"],
26
+ "properties": {
27
+ "start_url": { "type": "string", "format": "uri" },
28
+ "origin": { "type": "string", "format": "uri" },
29
+ "max_pages": { "type": "integer", "minimum": 1, "maximum": 10000 },
30
+ "time_budget_seconds": { "type": "integer", "minimum": 1, "maximum": 86400 }
31
+ }
32
+ },
33
+ "discovery": {
34
+ "type": "object",
35
+ "additionalProperties": false,
36
+ "required": ["status", "methods", "limitations"],
37
+ "properties": {
38
+ "status": { "type": "string", "enum": ["complete", "truncated", "indeterminate"] },
39
+ "methods": { "type": "array", "items": { "type": "string" } },
40
+ "limitations": { "type": "array", "items": { "type": "string" } }
41
+ }
42
+ },
43
+ "populations": {
44
+ "type": "object",
45
+ "additionalProperties": false,
46
+ "required": [
47
+ "discovered",
48
+ "eligible",
49
+ "excluded",
50
+ "attempted",
51
+ "retrieved",
52
+ "valid_resource",
53
+ "evaluated",
54
+ "valid_but_unevaluated",
55
+ "failed",
56
+ "indeterminate",
57
+ "unvisited"
58
+ ],
59
+ "properties": {
60
+ "discovered": { "$ref": "#/definitions/populationCount" },
61
+ "eligible": { "$ref": "#/definitions/populationCount" },
62
+ "excluded": { "$ref": "#/definitions/populationCount" },
63
+ "attempted": { "$ref": "#/definitions/populationCount" },
64
+ "retrieved": { "$ref": "#/definitions/populationCount" },
65
+ "valid_resource": { "$ref": "#/definitions/populationCount" },
66
+ "evaluated": { "$ref": "#/definitions/populationCount" },
67
+ "valid_but_unevaluated": { "$ref": "#/definitions/populationCount" },
68
+ "failed": { "$ref": "#/definitions/populationCount" },
69
+ "indeterminate": { "$ref": "#/definitions/populationCount" },
70
+ "unvisited": { "$ref": "#/definitions/populationCount" }
71
+ }
72
+ },
73
+ "resources": {
74
+ "type": "array",
75
+ "items": {
76
+ "type": "object",
77
+ "properties": {
78
+ "resource_id": { "type": ["string", "null"] },
79
+ "requested_url": { "type": ["string", "null"] },
80
+ "effective_url": { "type": ["string", "null"] },
81
+ "canonical_url": { "type": ["string", "null"] },
82
+ "response_body_hash": { "type": ["string", "null"], "pattern": "^[a-f0-9]{64}$" },
83
+ "rendered_dom_hash": { "type": ["string", "null"], "pattern": "^[a-f0-9]{64}$" },
84
+ "extracted_text_hash": { "type": ["string", "null"], "pattern": "^[a-f0-9]{64}$" },
85
+ "structured_data_hash": { "type": ["string", "null"], "pattern": "^[a-f0-9]{64}$" },
86
+ "evidence_hash": { "type": ["string", "null"], "pattern": "^[a-f0-9]{64}$" },
87
+ "artifact_hash": { "type": ["string", "null"], "pattern": "^[a-f0-9]{64}$" }
88
+ }
89
+ }
90
+ },
91
+ "stop_reason": {
92
+ "type": "string",
93
+ "enum": [
94
+ "frontier_exhausted",
95
+ "page_budget_exhausted",
96
+ "time_budget_exhausted",
97
+ "fatal_collection_failure"
98
+ ]
99
+ },
100
+ "coverage_status": {
101
+ "type": "string",
102
+ "enum": ["complete", "truncated", "indeterminate", "not_applicable"]
103
+ },
104
+ "reconciliation": {
105
+ "type": "object",
106
+ "additionalProperties": false,
107
+ "required": ["valid", "errors"],
108
+ "properties": {
109
+ "valid": { "type": "boolean" },
110
+ "errors": { "type": "array", "items": { "type": "string" } }
111
+ }
112
+ },
113
+ "limitations": { "type": "array", "items": { "type": "string" } }
114
+ },
115
+ "definitions": {
116
+ "populationCount": { "type": "integer", "minimum": 0 }
117
+ }
118
+ }