@nebulacomponents/citable 1.15.1 → 1.17.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 (264) hide show
  1. package/CHANGELOG.md +50 -0
  2. package/README.md +18 -5
  3. package/dist/universal/.agents/skills/citable/SKILL.md +51 -1
  4. package/dist/universal/.agents/skills/citable/VERSION +1 -1
  5. package/dist/universal/.agents/skills/citable/commands/README.md +3 -1
  6. package/dist/universal/.agents/skills/citable/commands/governance.md +12 -0
  7. package/dist/universal/.agents/skills/citable/commands/measurement.md +20 -0
  8. package/dist/universal/.agents/skills/citable/commands/reporting.md +16 -0
  9. package/dist/universal/.agents/skills/citable/manifest.json +17 -12
  10. package/dist/universal/.agents/skills/citable/schemas/cli-output-envelope.schema.json +30 -0
  11. package/dist/universal/.agents/skills/citable/schemas/experiment.schema.json +1 -1
  12. package/dist/universal/.agents/skills/citable/schemas/finding.schema.json +69 -0
  13. package/dist/universal/.agents/skills/citable/schemas/fleet.schema.json +93 -0
  14. package/dist/universal/.agents/skills/citable/schemas/funnel.schema.json +116 -0
  15. package/dist/universal/.agents/skills/citable/schemas/mcp-transport-envelope.schema.json +244 -0
  16. package/dist/universal/.agents/skills/citable/schemas/observation.schema.json +1 -1
  17. package/dist/universal/.agents/skills/citable/schemas/remediation-verification.schema.json +98 -0
  18. package/dist/universal/.claude/agents/citable/manifest.json +2 -2
  19. package/dist/universal/.claude/skills/citable/SKILL.md +51 -1
  20. package/dist/universal/.claude/skills/citable/VERSION +1 -1
  21. package/dist/universal/.claude/skills/citable/commands/README.md +3 -1
  22. package/dist/universal/.claude/skills/citable/commands/governance.md +12 -0
  23. package/dist/universal/.claude/skills/citable/commands/measurement.md +20 -0
  24. package/dist/universal/.claude/skills/citable/commands/reporting.md +16 -0
  25. package/dist/universal/.claude/skills/citable/manifest.json +17 -12
  26. package/dist/universal/.claude/skills/citable/schemas/cli-output-envelope.schema.json +30 -0
  27. package/dist/universal/.claude/skills/citable/schemas/experiment.schema.json +1 -1
  28. package/dist/universal/.claude/skills/citable/schemas/finding.schema.json +69 -0
  29. package/dist/universal/.claude/skills/citable/schemas/fleet.schema.json +93 -0
  30. package/dist/universal/.claude/skills/citable/schemas/funnel.schema.json +116 -0
  31. package/dist/universal/.claude/skills/citable/schemas/mcp-transport-envelope.schema.json +244 -0
  32. package/dist/universal/.claude/skills/citable/schemas/observation.schema.json +1 -1
  33. package/dist/universal/.claude/skills/citable/schemas/remediation-verification.schema.json +98 -0
  34. package/dist/universal/.cursor/skills/citable/SKILL.md +51 -1
  35. package/dist/universal/.cursor/skills/citable/VERSION +1 -1
  36. package/dist/universal/.cursor/skills/citable/commands/README.md +3 -1
  37. package/dist/universal/.cursor/skills/citable/commands/governance.md +12 -0
  38. package/dist/universal/.cursor/skills/citable/commands/measurement.md +20 -0
  39. package/dist/universal/.cursor/skills/citable/commands/reporting.md +16 -0
  40. package/dist/universal/.cursor/skills/citable/manifest.json +17 -12
  41. package/dist/universal/.cursor/skills/citable/schemas/cli-output-envelope.schema.json +30 -0
  42. package/dist/universal/.cursor/skills/citable/schemas/experiment.schema.json +1 -1
  43. package/dist/universal/.cursor/skills/citable/schemas/finding.schema.json +69 -0
  44. package/dist/universal/.cursor/skills/citable/schemas/fleet.schema.json +93 -0
  45. package/dist/universal/.cursor/skills/citable/schemas/funnel.schema.json +116 -0
  46. package/dist/universal/.cursor/skills/citable/schemas/mcp-transport-envelope.schema.json +244 -0
  47. package/dist/universal/.cursor/skills/citable/schemas/observation.schema.json +1 -1
  48. package/dist/universal/.cursor/skills/citable/schemas/remediation-verification.schema.json +98 -0
  49. package/dist/universal/.gemini/skills/citable/SKILL.md +51 -1
  50. package/dist/universal/.gemini/skills/citable/VERSION +1 -1
  51. package/dist/universal/.gemini/skills/citable/commands/README.md +3 -1
  52. package/dist/universal/.gemini/skills/citable/commands/governance.md +12 -0
  53. package/dist/universal/.gemini/skills/citable/commands/measurement.md +20 -0
  54. package/dist/universal/.gemini/skills/citable/commands/reporting.md +16 -0
  55. package/dist/universal/.gemini/skills/citable/manifest.json +17 -12
  56. package/dist/universal/.gemini/skills/citable/schemas/cli-output-envelope.schema.json +30 -0
  57. package/dist/universal/.gemini/skills/citable/schemas/experiment.schema.json +1 -1
  58. package/dist/universal/.gemini/skills/citable/schemas/finding.schema.json +69 -0
  59. package/dist/universal/.gemini/skills/citable/schemas/fleet.schema.json +93 -0
  60. package/dist/universal/.gemini/skills/citable/schemas/funnel.schema.json +116 -0
  61. package/dist/universal/.gemini/skills/citable/schemas/mcp-transport-envelope.schema.json +244 -0
  62. package/dist/universal/.gemini/skills/citable/schemas/observation.schema.json +1 -1
  63. package/dist/universal/.gemini/skills/citable/schemas/remediation-verification.schema.json +98 -0
  64. package/dist/universal/.github/skills/citable/SKILL.md +51 -1
  65. package/dist/universal/.github/skills/citable/VERSION +1 -1
  66. package/dist/universal/.github/skills/citable/commands/README.md +3 -1
  67. package/dist/universal/.github/skills/citable/commands/governance.md +12 -0
  68. package/dist/universal/.github/skills/citable/commands/measurement.md +20 -0
  69. package/dist/universal/.github/skills/citable/commands/reporting.md +16 -0
  70. package/dist/universal/.github/skills/citable/manifest.json +17 -12
  71. package/dist/universal/.github/skills/citable/schemas/cli-output-envelope.schema.json +30 -0
  72. package/dist/universal/.github/skills/citable/schemas/experiment.schema.json +1 -1
  73. package/dist/universal/.github/skills/citable/schemas/finding.schema.json +69 -0
  74. package/dist/universal/.github/skills/citable/schemas/fleet.schema.json +93 -0
  75. package/dist/universal/.github/skills/citable/schemas/funnel.schema.json +116 -0
  76. package/dist/universal/.github/skills/citable/schemas/mcp-transport-envelope.schema.json +244 -0
  77. package/dist/universal/.github/skills/citable/schemas/observation.schema.json +1 -1
  78. package/dist/universal/.github/skills/citable/schemas/remediation-verification.schema.json +98 -0
  79. package/dist/universal/.kiro/skills/citable/SKILL.md +51 -1
  80. package/dist/universal/.kiro/skills/citable/VERSION +1 -1
  81. package/dist/universal/.kiro/skills/citable/commands/README.md +3 -1
  82. package/dist/universal/.kiro/skills/citable/commands/governance.md +12 -0
  83. package/dist/universal/.kiro/skills/citable/commands/measurement.md +20 -0
  84. package/dist/universal/.kiro/skills/citable/commands/reporting.md +16 -0
  85. package/dist/universal/.kiro/skills/citable/manifest.json +17 -12
  86. package/dist/universal/.kiro/skills/citable/schemas/cli-output-envelope.schema.json +30 -0
  87. package/dist/universal/.kiro/skills/citable/schemas/experiment.schema.json +1 -1
  88. package/dist/universal/.kiro/skills/citable/schemas/finding.schema.json +69 -0
  89. package/dist/universal/.kiro/skills/citable/schemas/fleet.schema.json +93 -0
  90. package/dist/universal/.kiro/skills/citable/schemas/funnel.schema.json +116 -0
  91. package/dist/universal/.kiro/skills/citable/schemas/mcp-transport-envelope.schema.json +244 -0
  92. package/dist/universal/.kiro/skills/citable/schemas/observation.schema.json +1 -1
  93. package/dist/universal/.kiro/skills/citable/schemas/remediation-verification.schema.json +98 -0
  94. package/dist/universal/.opencode/skills/citable/SKILL.md +51 -1
  95. package/dist/universal/.opencode/skills/citable/VERSION +1 -1
  96. package/dist/universal/.opencode/skills/citable/commands/README.md +3 -1
  97. package/dist/universal/.opencode/skills/citable/commands/governance.md +12 -0
  98. package/dist/universal/.opencode/skills/citable/commands/measurement.md +20 -0
  99. package/dist/universal/.opencode/skills/citable/commands/reporting.md +16 -0
  100. package/dist/universal/.opencode/skills/citable/manifest.json +17 -12
  101. package/dist/universal/.opencode/skills/citable/schemas/cli-output-envelope.schema.json +30 -0
  102. package/dist/universal/.opencode/skills/citable/schemas/experiment.schema.json +1 -1
  103. package/dist/universal/.opencode/skills/citable/schemas/finding.schema.json +69 -0
  104. package/dist/universal/.opencode/skills/citable/schemas/fleet.schema.json +93 -0
  105. package/dist/universal/.opencode/skills/citable/schemas/funnel.schema.json +116 -0
  106. package/dist/universal/.opencode/skills/citable/schemas/mcp-transport-envelope.schema.json +244 -0
  107. package/dist/universal/.opencode/skills/citable/schemas/observation.schema.json +1 -1
  108. package/dist/universal/.opencode/skills/citable/schemas/remediation-verification.schema.json +98 -0
  109. package/dist/universal/.pi/agent/skills/citable/SKILL.md +51 -1
  110. package/dist/universal/.pi/agent/skills/citable/VERSION +1 -1
  111. package/dist/universal/.pi/agent/skills/citable/commands/README.md +3 -1
  112. package/dist/universal/.pi/agent/skills/citable/commands/governance.md +12 -0
  113. package/dist/universal/.pi/agent/skills/citable/commands/measurement.md +20 -0
  114. package/dist/universal/.pi/agent/skills/citable/commands/reporting.md +16 -0
  115. package/dist/universal/.pi/agent/skills/citable/manifest.json +17 -12
  116. package/dist/universal/.pi/agent/skills/citable/schemas/cli-output-envelope.schema.json +30 -0
  117. package/dist/universal/.pi/agent/skills/citable/schemas/experiment.schema.json +1 -1
  118. package/dist/universal/.pi/agent/skills/citable/schemas/finding.schema.json +69 -0
  119. package/dist/universal/.pi/agent/skills/citable/schemas/fleet.schema.json +93 -0
  120. package/dist/universal/.pi/agent/skills/citable/schemas/funnel.schema.json +116 -0
  121. package/dist/universal/.pi/agent/skills/citable/schemas/mcp-transport-envelope.schema.json +244 -0
  122. package/dist/universal/.pi/agent/skills/citable/schemas/observation.schema.json +1 -1
  123. package/dist/universal/.pi/agent/skills/citable/schemas/remediation-verification.schema.json +98 -0
  124. package/dist/universal/.qoder/skills/citable/SKILL.md +51 -1
  125. package/dist/universal/.qoder/skills/citable/VERSION +1 -1
  126. package/dist/universal/.qoder/skills/citable/commands/README.md +3 -1
  127. package/dist/universal/.qoder/skills/citable/commands/governance.md +12 -0
  128. package/dist/universal/.qoder/skills/citable/commands/measurement.md +20 -0
  129. package/dist/universal/.qoder/skills/citable/commands/reporting.md +16 -0
  130. package/dist/universal/.qoder/skills/citable/manifest.json +17 -12
  131. package/dist/universal/.qoder/skills/citable/schemas/cli-output-envelope.schema.json +30 -0
  132. package/dist/universal/.qoder/skills/citable/schemas/experiment.schema.json +1 -1
  133. package/dist/universal/.qoder/skills/citable/schemas/finding.schema.json +69 -0
  134. package/dist/universal/.qoder/skills/citable/schemas/fleet.schema.json +93 -0
  135. package/dist/universal/.qoder/skills/citable/schemas/funnel.schema.json +116 -0
  136. package/dist/universal/.qoder/skills/citable/schemas/mcp-transport-envelope.schema.json +244 -0
  137. package/dist/universal/.qoder/skills/citable/schemas/observation.schema.json +1 -1
  138. package/dist/universal/.qoder/skills/citable/schemas/remediation-verification.schema.json +98 -0
  139. package/dist/universal/.rovodev/skills/citable/SKILL.md +51 -1
  140. package/dist/universal/.rovodev/skills/citable/VERSION +1 -1
  141. package/dist/universal/.rovodev/skills/citable/commands/README.md +3 -1
  142. package/dist/universal/.rovodev/skills/citable/commands/governance.md +12 -0
  143. package/dist/universal/.rovodev/skills/citable/commands/measurement.md +20 -0
  144. package/dist/universal/.rovodev/skills/citable/commands/reporting.md +16 -0
  145. package/dist/universal/.rovodev/skills/citable/manifest.json +17 -12
  146. package/dist/universal/.rovodev/skills/citable/schemas/cli-output-envelope.schema.json +30 -0
  147. package/dist/universal/.rovodev/skills/citable/schemas/experiment.schema.json +1 -1
  148. package/dist/universal/.rovodev/skills/citable/schemas/finding.schema.json +69 -0
  149. package/dist/universal/.rovodev/skills/citable/schemas/fleet.schema.json +93 -0
  150. package/dist/universal/.rovodev/skills/citable/schemas/funnel.schema.json +116 -0
  151. package/dist/universal/.rovodev/skills/citable/schemas/mcp-transport-envelope.schema.json +244 -0
  152. package/dist/universal/.rovodev/skills/citable/schemas/observation.schema.json +1 -1
  153. package/dist/universal/.rovodev/skills/citable/schemas/remediation-verification.schema.json +98 -0
  154. package/dist/universal/.trae/skills/citable/SKILL.md +51 -1
  155. package/dist/universal/.trae/skills/citable/VERSION +1 -1
  156. package/dist/universal/.trae/skills/citable/commands/README.md +3 -1
  157. package/dist/universal/.trae/skills/citable/commands/governance.md +12 -0
  158. package/dist/universal/.trae/skills/citable/commands/measurement.md +20 -0
  159. package/dist/universal/.trae/skills/citable/commands/reporting.md +16 -0
  160. package/dist/universal/.trae/skills/citable/manifest.json +17 -12
  161. package/dist/universal/.trae/skills/citable/schemas/cli-output-envelope.schema.json +30 -0
  162. package/dist/universal/.trae/skills/citable/schemas/experiment.schema.json +1 -1
  163. package/dist/universal/.trae/skills/citable/schemas/finding.schema.json +69 -0
  164. package/dist/universal/.trae/skills/citable/schemas/fleet.schema.json +93 -0
  165. package/dist/universal/.trae/skills/citable/schemas/funnel.schema.json +116 -0
  166. package/dist/universal/.trae/skills/citable/schemas/mcp-transport-envelope.schema.json +244 -0
  167. package/dist/universal/.trae/skills/citable/schemas/observation.schema.json +1 -1
  168. package/dist/universal/.trae/skills/citable/schemas/remediation-verification.schema.json +98 -0
  169. package/dist/universal/.trae-cn/skills/citable/SKILL.md +51 -1
  170. package/dist/universal/.trae-cn/skills/citable/VERSION +1 -1
  171. package/dist/universal/.trae-cn/skills/citable/commands/README.md +3 -1
  172. package/dist/universal/.trae-cn/skills/citable/commands/governance.md +12 -0
  173. package/dist/universal/.trae-cn/skills/citable/commands/measurement.md +20 -0
  174. package/dist/universal/.trae-cn/skills/citable/commands/reporting.md +16 -0
  175. package/dist/universal/.trae-cn/skills/citable/manifest.json +17 -12
  176. package/dist/universal/.trae-cn/skills/citable/schemas/cli-output-envelope.schema.json +30 -0
  177. package/dist/universal/.trae-cn/skills/citable/schemas/experiment.schema.json +1 -1
  178. package/dist/universal/.trae-cn/skills/citable/schemas/finding.schema.json +69 -0
  179. package/dist/universal/.trae-cn/skills/citable/schemas/fleet.schema.json +93 -0
  180. package/dist/universal/.trae-cn/skills/citable/schemas/funnel.schema.json +116 -0
  181. package/dist/universal/.trae-cn/skills/citable/schemas/mcp-transport-envelope.schema.json +244 -0
  182. package/dist/universal/.trae-cn/skills/citable/schemas/observation.schema.json +1 -1
  183. package/dist/universal/.trae-cn/skills/citable/schemas/remediation-verification.schema.json +98 -0
  184. package/dist/universal/manifest.json +208 -148
  185. package/package.json +1 -1
  186. package/schemas/cli-output-envelope.schema.json +30 -0
  187. package/schemas/experiment.schema.json +1 -1
  188. package/schemas/finding.schema.json +69 -0
  189. package/schemas/fleet.schema.json +93 -0
  190. package/schemas/funnel.schema.json +116 -0
  191. package/schemas/mcp-transport-envelope.schema.json +244 -0
  192. package/schemas/observation.schema.json +1 -1
  193. package/schemas/remediation-verification.schema.json +98 -0
  194. package/skill/SKILL.md +51 -1
  195. package/skill/commands/README.md +3 -1
  196. package/skill/commands/governance.md +12 -0
  197. package/skill/commands/measurement.md +20 -0
  198. package/skill/commands/reporting.md +16 -0
  199. package/src/analysis/saliency.js +119 -0
  200. package/src/cli/index.js +651 -13
  201. package/src/commands/attributeImpact.js +54 -0
  202. package/src/commands/audit.js +2 -2
  203. package/src/commands/ciWorkflow.js +63 -0
  204. package/src/commands/compatibility.js +205 -0
  205. package/src/commands/connect.js +3 -0
  206. package/src/commands/context.js +2 -1
  207. package/src/commands/edgeRules.js +196 -0
  208. package/src/commands/edgeSecurity.js +192 -0
  209. package/src/commands/exceptions.js +241 -0
  210. package/src/commands/experimentGuardrails.js +213 -0
  211. package/src/commands/fleet.js +104 -0
  212. package/src/commands/generateLlmsTxt.js +111 -0
  213. package/src/commands/goldenCorpus.js +155 -0
  214. package/src/commands/implementationKit.js +202 -0
  215. package/src/commands/inspectAeo.js +74 -0
  216. package/src/commands/inspectCro.js +142 -0
  217. package/src/commands/inspectGeo.js +52 -0
  218. package/src/commands/inspectSerp.js +317 -0
  219. package/src/commands/lintComponents.js +132 -0
  220. package/src/commands/monitor.js +138 -0
  221. package/src/commands/observe.js +6 -1
  222. package/src/commands/planExperiment.js +120 -0
  223. package/src/commands/previewCro.js +241 -0
  224. package/src/commands/probe.js +70 -0
  225. package/src/commands/remediate.js +461 -0
  226. package/src/commands/reportConsensus.js +48 -0
  227. package/src/commands/testFunnel.js +107 -0
  228. package/src/commands/verifyRemediation.js +204 -0
  229. package/src/commands/visualRegression.js +165 -0
  230. package/src/components/index.js +556 -0
  231. package/src/connectors/index.js +6 -1
  232. package/src/connectors/indexnow.js +431 -0
  233. package/src/connectors/mcp/allowlist.js +107 -0
  234. package/src/connectors/mcp/client.js +239 -0
  235. package/src/connectors/mcp/diagnostics.js +214 -0
  236. package/src/connectors/mcp/gscServer.js +155 -0
  237. package/src/connectors/mcp/http.js +130 -0
  238. package/src/connectors/mcp/index.js +7 -0
  239. package/src/connectors/mcp/pilot.js +138 -0
  240. package/src/connectors/mcp/pilotServer.js +80 -0
  241. package/src/connectors/mcp/sanitizer.js +38 -0
  242. package/src/connectors/mcp/stdio.js +178 -0
  243. package/src/crawler/ipRanges.js +161 -0
  244. package/src/detectors/agent.js +127 -0
  245. package/src/detectors/ans.js +282 -0
  246. package/src/detectors/crawl.js +46 -0
  247. package/src/detectors/cro.js +825 -0
  248. package/src/detectors/cwv.js +38 -1
  249. package/src/detectors/evd.js +101 -0
  250. package/src/detectors/framework.js +32 -2
  251. package/src/detectors/geoReco.js +408 -0
  252. package/src/detectors/index.js +4 -2
  253. package/src/detectors/link.js +112 -1
  254. package/src/detectors/page.js +101 -0
  255. package/src/detectors/schemaData.js +529 -0
  256. package/src/detectors/tech.js +306 -0
  257. package/src/extractor/page.js +186 -2
  258. package/src/extractor/site.js +9 -2
  259. package/src/installer/index.js +45 -2
  260. package/src/monitoring/alertDelivery.js +101 -7
  261. package/src/observations/attribution.js +217 -0
  262. package/src/registries/index.js +14 -0
  263. package/src/reporting/consensus.js +416 -0
  264. package/src/reporting/executiveExport.js +244 -0
package/CHANGELOG.md CHANGED
@@ -15,6 +15,56 @@ _No entries yet. See [`BOUNTY.md`](BOUNTY.md) to submit the first one._
15
15
 
16
16
  ## Unreleased
17
17
 
18
+ ## 1.17.0 — 2026-09-08
19
+
20
+ ### Added — Closed-Loop Remediation & Customer Fulfillment (Nebula Release Requests)
21
+
22
+ - Added production-safe patch review in `src/commands/remediate.js`: framework detection (`detectFramework`), idempotent patchers (`applyPatchDetailed` — second application is a fixed point), unified diffs before any write (`unifiedDiff`), structural static validation that fails closed on unknown frameworks (`validatePatchedSource`), explicit confidence scoring with per-factor breakdown and a semantic-copy cap (`computeConfidence`), rollback snapshots with SHA-256 manifests under `.citable/remediation/snapshots/`, and refusal of `--write` when validation fails or confidence is below the 0.7 gate. Semantic microcopy replacements (CRO-012/COMP-003) always refuse automated write: copy decisions are human editorial judgments, not mechanical fixes.
23
+ - Added closed-loop remediation verification `citable verify remediation --run <run-id> --finding <id> [--target <file>] [--apply]` (`src/commands/verifyRemediation.js`): maps source-run finding → gated patch → detector re-run → before/after verdict (`verified`, `not_resolved`, `blocked`, `patch_refused`), detects new critical/high regressions against the full before-run, and emits a checksummed evidence bundle validated against the new contract `schemas/remediation-verification.schema.json`. Resolution means the detector no longer reports the same subject — never an outcome guarantee.
24
+ - Added customer-ready implementation kit exporter `citable kit export --run <run-id> --finding <id> [--target <file>]` (`src/commands/implementationKit.js`): produces a structured directory with the verbatim finding, exact unified diff, Nebula Component template, rendering-evidence manifest (real evidence only — imagery is never fabricated), acceptance tests, deployment/rollback instructions, re-audit script, and explicit limitations/assumptions. Modeled revenue or lift estimates are excluded by policy.
25
+ - Added per-finding provenance envelopes in `src/detectors/framework.js` (`runDetectors`): every finding now records `detector_version`, `tool_version`, source URL/file, evidence selector, evidence source class, viewport (or an explicit note that none was captured), methodology (deterministic vs heuristic), and a revalidation requirement. Contract extended in `schemas/finding.schema.json`. Detector definitions default to `version: 1` and must be bumped on semantic changes.
26
+ - Added `citable compatibility` (`src/commands/compatibility.js`): pre-flight diagnosis of Node engine requirements, optional peer adapters (playwright, lighthouse, chrome-launcher, tesseract.js) distinguishing installed vs importable, browser executable presence (never claiming launch success), project framework detection for remediation format matching, registry/schema freshness, and generated-edge size against documented platform limits.
27
+ - Added `citable verify page <page> --target <dir|url>`: full detector set scoped to a single page with severity breakdown and explicit posture definition (pass = no detector currently reports the page; not an outcome guarantee).
28
+ - Added edge-code security audit `src/commands/edgeSecurity.js` with rules EDGSEC-001 through EDGSEC-007 (CSP unsafe-inline, HTMLRewriter `html:true` injection sinks, unescaped interpolation into HTML/script/Liquid contexts, untrusted referral fragments into parsing DOM sinks, potential PII collection, per-request response variance without cache guidance, worker size limits). Every `citable export edge` now ships with a security summary; `citable audit edge <file> --format <fmt>` audits arbitrary edge code. Also fixed a missing `fs` import that crashed `exportEdgeRules` with `--output`.
29
+ - Added experiment safety guardrails `citable check experiment <id>` (`src/commands/experimentGuardrails.js`): sample-ratio mismatch (chi-square, standard 0.001 alpha), stopping-early, underpowered samples, experiment contamination and variant collisions, revenue attribution without a concluded SRM-clean experiment, and a mutually exclusive lifecycle of `planned | running | inconclusive | validated` with explicit definitions — "winner" language is never used.
30
+ - Added deterministic visual layout-contract suite `citable test visual` (`src/commands/visualRegression.js`): contract checks (three viewport classes, keyboard focus visibility, reduced motion, narrow-mobile collapse, text-zoom wrapping, dark/light preference, aria-pressed toggles, 48px touch targets) plus a 22-cell screenshot matrix that records per-cell captures when playwright and a browser are available and otherwise records an explicit skipped state with required inputs. Preview HTML gained focus-visible outlines, prefers-reduced-motion handling, narrow-width collapse, long-string wrapping, color-scheme adaptation, and accessible viewport toggles.
31
+ - Added structured machine-readable output contract: every `--json` payload is wrapped in the stable envelope `{ citable_output_schema, tool_version, command, generated_at, result }` with contract `schemas/cli-output-envelope.schema.json` (envelope version 1.0).
32
+ - Added golden benchmark corpus `tests/fixtures/golden-corpus/` (version 1, anonymized synthetic fixtures across ecommerce, SaaS, lead generation, checkout, and agency verticals) with page-level detector labels and saliency bounds, plus `citable corpus benchmark` (`src/commands/goldenCorpus.js`) computing per-detector TP/FP/FN, precision, recall, and F1 with a fail-closed regression gate and mutation-tested failure proofs. Emphasis detectors include CRO-021 and the saliency indices.
33
+
34
+ ### Changed — Terminology and Claim-Accuracy Hardening
35
+
36
+ - Split `CRO-021` (detector version 2) into distinct capabilities: payment-wallet readiness (Apple Pay, Google Pay, PayPal Express — payment methods) and authentication readiness (WebAuthn/passkeys — account authentication, reported informationally by `inspect cro` as `express_checkout_readiness`). The misleading "biometric readiness" framing is retired; a passkey-only checkout still fails wallet readiness. Fixtures prove both detection and the wallet/auth distinction.
37
+ - Removed the unsupported "edge cache speeds (<2ms latency)" and "sub-500ms" performance claims from `docs/ROADMAP.md`: no speed or latency figure may be stated publicly without a documented measurement methodology.
38
+ - Hardened `NebulaScentBeacon` referral handling in `src/components/index.js`: referrer and `:~:text=` fragments are documented and enforced as user-controlled untrusted input used only against a fixed allowlist to detect referral state; raw values are never rendered, persisted, or transmitted, and dynamic claim text must come from developer-controlled props.
39
+ - Labeled all modeled outputs as heuristic indices: `calculateVisualSaliency` now returns `fact_status: modeled_index_not_observed_behavior` with interpretation notes; `inspect cro` labels Friction Surface Area and keystroke-effort values as modeled; gaze-path output is explicitly "order of modeled salience, not measured fixations".
40
+ - Distinguished measured outcomes from modeled estimates in executive slide decks (`src/reporting/executiveExport.js`): a dedicated "Measured vs Modeled" slide separates deterministic findings from heuristic indices and states what is not claimed (revenue lift, conversion uplift); the fabricated "100% Mechanical Friction Eliminated" and "Zero Friction" claims were replaced with labeled modeled targets.
41
+
42
+
43
+ ## 1.16.0 — 2026-09-08
44
+
45
+ ### Added — Nebula Components Enterprise Platform Suite
46
+
47
+ - Added multi-property fleet governance with schema `schemas/fleet.schema.json`, registry `fleet.yaml` (29th schema-validated registry), and command `citable fleet [summary|audit]` to manage and audit multi-domain portfolios and staging/production environments.
48
+ - Added Cloudflare & Edge Worker adapter in `src/commands/edgeRules.js` (`citable export edge` and `citable test edge`) to generate Cloudflare Pages `_redirects`, custom WAF bot blocking expressions, and `HTMLRewriter` Worker scripts, with synthetic edge pass-through verification.
49
+ - Added automated AI Search Engine probing runner `citable probe <query|prompt_id>` (`src/commands/probe.js`) generating schema-validated observation envelopes (`observation.schema.json`) for Perplexity, SearchGPT, and Gemini.
50
+ - Added component-level static AST linter `citable lint components [dir]` (`src/commands/lintComponents.js`) detecting touch target violations, unlabelled icon buttons, generic CTA microcopy, missing input labels, autocomplete omission, and image dimension defects in React/Next.js/Vue design system components.
51
+ - Added executive presentation and client deliverables exporter `citable report export` (`src/reporting/executiveExport.js`) supporting printable HTML briefing documents and slide decks, alongside Slack, Microsoft Teams, and Discord structured alert formatters in `src/monitoring/alertDelivery.js`.
52
+ - Added causal impact and differential intervention attribution command `citable attribute impact` (`src/commands/attributeImpact.js`) calculating difference-in-differences lift estimates with explicit statistical caveats.
53
+ - Added detector `GEO-013` (*AI engine assertion contradicts verified publisher claim registry*) to catch generative search hallucinations and factual contradictions against `claims.yaml`.
54
+
55
+ ### Added — Comprehensive Conversion Rate Optimization (CRO) Suite
56
+
57
+ - Added detectors `CRO-007` through `CRO-014` to audit form autocomplete accessibility, disappearing placeholder-only inputs, mobile keyboard input type mismatches, choice overload in hero conversion sections, buried CTAs on long-form commercial pages, low-intent generic CTA microcopy, enclosed checkout distraction leaks, and unprotected confirmation receipt pages lacking `noindex`.
58
+ - Added zero-runtime performance and mobile UX detectors `CRO-015` (touch target dimensions below 44px threshold) and `CRO-016` (diminutive font size on primary conversion CTAs < 12px).
59
+ - Added multi-step funnel modeling with schema `schemas/funnel.schema.json`, registry `funnels.yaml` (28th schema-validated registry), referential integrity verification against `pages.yaml`, and continuity detectors `CRO-017` (missing or erroring funnel steps) and `CRO-018` (funnel progression links stripping declared campaign parameters).
60
+ - Added AI Search claim-to-conversion pathway detector `CRO-019`, validating that landing pages cited by AI answer engines (SearchGPT, Perplexity, Gemini, Bing AI) provide immediate claim corroboration and conversion actions.
61
+ - Added experiment statistical governance detector `CRO-020`, catching underpowered A/B experiments running under 7 days or lacking adequate sample size.
62
+ - Added CLI commands `citable test funnel [id]` for automated synthetic conversion funnel continuity verification and `citable plan experiment` for two-tailed binomial sample size and power calculations.
63
+ - Supported `--scope cro` in `citable audit` for shift-left pre-commit CRO auditing in CI/CD pipelines.
64
+ - Enriched `citable inspect cro <page>` with hero CTA hierarchy, choice overload alerts, form autocomplete/label coverage ratios, and analytics instrumentation detection.
65
+ - Expanded `schemas/experiment.schema.json` discipline enum to include `cro`.
66
+
67
+
18
68
  ## 1.15.1 — 2026-09-07
19
69
 
20
70
  ### Changed — Domain Configuration
package/README.md CHANGED
@@ -21,9 +21,9 @@ generator, not a Lighthouse wrapper, not an "AI visibility score".
21
21
  objectives, interventions, optional connections, reviewers, review policies,
22
22
  governed exceptions, semantic review items, sampling plans, and audit schedules — all
23
23
  JSON-Schema validated with referential integrity and history-preserving saves.
24
- - **124 detectors** across 18 namespaces (TECH, CRAWL, ARCH, PAGE, ANS,
25
- ENTITY, CLAIM, EVD, SCHEMA, LINK, EXT, GEO, RECO, LIFE, MEAS, HREFLANG, CWV, AGENT), each with
26
- remediation, verification, severity, and determinism declared.
24
+ - **181 detectors** across 19 namespaces (TECH, CRAWL, ARCH, PAGE, ANS,
25
+ SCHEMA, CWV, GEO, AEO, CLAIM, EVD, LIFE, AGENT, MEAS, EXP, CONF, SEC, LINK,
26
+ CRO), each with remediation, verification, severity, and determinism declared.
27
27
  - **Evidence packages** for every run: manifest, findings, report, captured
28
28
  robots/sitemaps/headers/raw JSON-LD, a schema-validated normalized entity
29
29
  graph with unresolved references and parse failures, link graph, and
@@ -210,6 +210,19 @@ citable artifacts verify --input ./portable-run
210
210
  citable artifacts import --input ./portable-run
211
211
  citable substantiate # claim/evidence assessment (dry run)
212
212
  citable validate # registry schema + referential integrity
213
+
214
+ # CRO remediation loop: audit → explain → remediate → verify → hand off
215
+ citable inspect cro <page> --target ./dist
216
+ citable remediate --finding CRO-007 --target src/Form.jsx # dry run: diff + validation + confidence
217
+ citable remediate --finding CRO-007 --target src/Form.jsx --write # gated; rollback snapshot created
218
+ citable verify remediation --run <run-id> --finding CRO-007 --target src/Form.jsx --apply
219
+ citable kit export --run <run-id> --finding CRO-007 --target src/Form.jsx
220
+ citable check experiment <id> --observed-control 5000 --observed-variant 4980 --days-running 6
221
+ citable verify page /pricing --target ./dist
222
+ citable compatibility
223
+ citable audit edge worker.js --format cloudflare-worker
224
+ citable test visual
225
+ citable corpus benchmark
213
226
  ```
214
227
 
215
228
  ## Repository map
@@ -218,8 +231,8 @@ citable validate # registry schema + referential integrity
218
231
  | --- | --- |
219
232
  | `skill/` | Canonical agent skill: SKILL.md, command contracts, rubrics, anti-patterns, policies, templates |
220
233
  | `src/` | CLI, commands, registries, detectors, crawler/extractor, evidence, reporting |
221
- | `schemas/` | JSON Schemas: 27 registries plus findings, runs, observations, release governance, remediation, config, and prompt results |
222
- | `tests/` | Unit + integration suites; positive/negative fixtures |
234
+ | `schemas/` | JSON Schemas: 29 registries plus findings, runs, observations, release governance, remediation verification, the CLI output envelope, config, and prompt results |
235
+ | `tests/` | Unit + integration suites; positive/negative fixtures; labeled golden benchmark corpus |
223
236
  | `docs/` | ADR, traceability matrix, known limitations |
224
237
  | `dist/` | Generated distribution packages (run `npm run build:dist`) |
225
238
 
@@ -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.15.1
10
+ version: 1.17.0
11
11
  ---
12
12
 
13
13
  # Citable — evidence and change control for search and AI citation readiness
@@ -97,6 +97,7 @@ citable compare-snapshots [runA runB]
97
97
  citable action-plan [run-id] # ordered actions, blockers, semantic gates, verification
98
98
  citable observe <mode> [options] # render/index/citation/log/probe/passage/consensus/performance/stance evidence
99
99
  citable observe stance --input <citations|prompts.json> [--entity <id>]
100
+ citable observe attribution --input <citations|prompts.json> [--entity <id>]
100
101
  citable observe bing --dataset <search_performance|ai_performance> --input <csv|json>
101
102
  citable observe probes --target <url> [--region <label>]
102
103
  citable observe network --input <regional-network-import.json>
@@ -107,6 +108,7 @@ citable apply --input <spec> [--write] # reviewed, hash-locked remediation; dry
107
108
  citable monitor [runA runB] [--webhook <url>] [--min-severity <sev>] # observation regression alerts
108
109
  citable report dashboard [--last N] [--since <run-id>] # cross-run evidence trend (Markdown + HTML)
109
110
  citable report share-of-voice [--last N] [--since <run-id>] # competitor citation share (Markdown + HTML)
111
+ citable report consensus [--last N] [--since <run-id>] # canonical discovery consensus matrix (Markdown + HTML)
110
112
  citable metrics import --provider <name> --input <csv|json>
111
113
  citable connect status
112
114
  citable connect configure --provider <gsc|ga4|wordpress|webflow> --connection-id <id> --property-id <id> [--credential-env <name>] [--write]
@@ -116,6 +118,8 @@ citable connect sync --connection-id <id> --start-date YYYY-MM-DD --end-date YYY
116
118
  citable connect read --connection-id <id> --target-id <id>
117
119
  citable connect apply --connection-id <id> --input <cms-spec.json> [--write]
118
120
  citable connect disconnect --connection-id <id> [--write]
121
+ citable connect indexnow [--urls <file|list>] [--sitemap <url|file>] [--host <host>] [--key <key>] [--key-location <url>] [--skip-key-verify] [--endpoint <url>] [--write]
122
+ citable connect mcp [--server <id>] [--tool <name>] [--args <json>] [--transport <stdio|http>] [--target <cmd|url>]
119
123
  citable objectives init --input <json|yaml> [--write]
120
124
  citable objectives validate
121
125
  citable evaluate [objective-id] [--ref-date YYYY-MM-DD]
@@ -134,9 +138,18 @@ citable corpus evaluate --input <acceptance-corpus.json>
134
138
  citable corpus publish --input <acceptance-corpus.json> --output <public-corpus.json>
135
139
  citable corpus receipt --run <run-id> [--input <execution-context.json>]
136
140
  citable corpus compare-receipts <receipt-a.json> <receipt-b.json>
141
+ citable corpus benchmark [--corpus <dir>] [--output <report.json>] # labeled golden fixtures → per-detector precision/recall gate
137
142
  citable artifacts export <run-id> --output <directory>
138
143
  citable artifacts verify --input <directory>
139
144
  citable artifacts import --input <directory>
145
+ citable inspect cro <page> --target <dir|url> # CRO readiness: CTAs, forms, payment-wallet vs authentication readiness, modeled saliency indices
146
+ citable preview cro <page> [--export <file.html>] # split-screen before/remediated sandbox (layout-contract checked; accessibility-aware)
147
+ citable remediate --finding <id> [--target <file>] [--write] # production-safe patch: framework detection, unified diff, static validation, confidence gate, rollback snapshot; semantic copy changes always refuse automated write
148
+ citable verify remediation --run <run-id> --finding <id> [--target <file>] [--apply] # closed loop: re-run the detector and emit a before/after evidence bundle (schema remediation-verification)
149
+ citable verify page <page> --target <dir|url> # all detectors scoped to one page; pass = no detector currently reports it, never an outcome guarantee
150
+ citable check experiment <id> [--observed-control N --observed-variant N --days-running N] # SRM, stopping, power, contamination; lifecycle: planned|running|inconclusive|validated
151
+ citable compatibility # Node engine, optional adapters, browser, framework, registries, edge size limits
152
+ citable kit export --run <run-id> --finding <id> [--target <file>] # customer-ready implementation kit (finding, diff, evidence, acceptance tests, deployment, limitations)
140
153
  ```
141
154
 
142
155
  Audit scopes: `technical seo aeo geo architecture entity claims evidence schema
@@ -190,6 +203,43 @@ monitoring interpretation.
190
203
  Use `commands/field-validation.md` for acceptance-corpus authorization,
191
204
  sanitization, publication refusal, reproducibility, and evidence boundaries.
192
205
 
206
+ ## CRO remediation loop (audit → explain → remediate → verify → hand off)
207
+
208
+ The CRO suite completes the loop. Rules that govern every step:
209
+
210
+ 1. **Safe patches only.** `remediate --write` is gated on framework detection,
211
+ static structural validation, idempotency, and an explicit confidence
212
+ threshold. Semantic microcopy replacements are refused for automated write
213
+ (fact ≠ inference): they require a human editorial decision. Every write
214
+ creates a rollback snapshot under `.citable/remediation/snapshots/`.
215
+ 2. **A written patch is not a verified repair.** Run
216
+ `verify remediation --run <run-id> --finding <id>`. Resolution means the
217
+ detector no longer reports the same subject — never a conversion guarantee.
218
+ The verification bundle is schema-validated
219
+ (`schemas/remediation-verification.schema.json`).
220
+ 3. **Payment wallets ≠ authentication.** Apple Pay/Google Pay/PayPal are
221
+ payment methods; WebAuthn/passkeys are account authentication. Report them
222
+ separately (`inspect cro` returns `payment_wallet_readiness` and
223
+ `authentication_readiness`). Never use "biometric readiness" as a claim.
224
+ 4. **Modeled indices are labeled.** Friction Surface Area, CTA Conspicuity
225
+ Index, and gaze-path ordering are heuristic indices over captured DOM
226
+ conditions — not observed user behavior and not revenue estimates. Slide
227
+ decks and kits must keep measured (deterministic findings) and modeled
228
+ (indices, projections) in separate, labeled categories. No latency,
229
+ speed, or "percentage eliminated" figure may be stated without a
230
+ documented measurement methodology.
231
+ 5. **Referral fragments are untrusted input.** ScentBeacon-style components
232
+ may match referrer/`:~:text=` against a fixed allowlist to detect the
233
+ referral state; raw values are never rendered, persisted, or transmitted.
234
+ Dynamic claim text must come from registry-bound developer props.
235
+ 6. **Experiments carry guardrails.** `check experiment` reports SRM, stopping
236
+ early, underpowered samples, contamination, and unsupported revenue
237
+ attribution, and derives one lifecycle of `planned`, `running`,
238
+ `inconclusive`, or `validated` — never "winner".
239
+ 7. **Machine-readable output is a contract.** `--json` wraps every command
240
+ payload in the `citable_output_schema` 1.0 envelope
241
+ (`schemas/cli-output-envelope.schema.json`).
242
+
193
243
  ## Command workflows
194
244
 
195
245
  Detailed per-command workflows live in `commands/`. Follow them; they define
@@ -1 +1 @@
1
- 1.15.1
1
+ 1.17.0
@@ -23,14 +23,16 @@ intent, not executability, so statuses are strict:
23
23
  | /citable action-plan | implemented — writes ordered, source-run-bound action artifacts outside immutable evidence packages |
24
24
  | /citable observe | implemented — render, index, citation, crawler-log, passage, consensus, performance, corroboration, and stance evidence |
25
25
  | /citable apply | implemented — reviewed, hash-locked source replacements; dry run by default |
26
- | /citable connect status / configure / discover / validate / sync / read / apply / disconnect | implemented — GA4, GSC, WordPress, and Webflow adapters with hash-locked CMS remediation |
26
+ | /citable connect status / configure / discover / validate / sync / read / apply / disconnect / indexnow / mcp | implemented — GA4, GSC, WordPress, Webflow, IndexNow, and allowlisted read-only MCP transport adapters |
27
27
  | /citable monitor | implemented — compares immutable observation runs and emits evidence-linked alerts |
28
28
  | /citable report dashboard | implemented — folds each run's recorded summary into a cross-run Markdown/HTML trend; derives no new findings and no combined score |
29
29
  | /citable report share-of-voice | implemented — joins competitor registry against recorded citation observations to compute verified share-of-citation |
30
+ | /citable report consensus | implemented — synthesizes observed canonical signals across publisher headers, tags, sitemaps, and search engines |
30
31
  | /citable metrics import | implemented — validates declared CSV/JSON metrics and writes immutable observations |
31
32
  | /citable objectives init / validate | implemented — user-owned metric selection, cohorts, windows, and guardrails |
32
33
  | /citable evaluate | implemented — independent baseline/evaluation comparisons with inconclusive handling |
33
34
  | /citable governance validate / evaluate | implemented — validates reviewer and exception authority and emits immutable dispositions without changing failed findings |
35
+ | /citable exceptions list / renew / invalidate | implemented — governed exception lifecycle, renewal limits, authority validation, and audit logging |
34
36
  | /citable reviews queue / prioritize / plan / sample / evaluate | implemented — materiality queues, reproducible sampling, stale-decision checks, and independent disagreement adjudication |
35
37
  | /citable schedules run / project github | implemented — canonical scheduled audits and hash-bound non-authoritative GitHub projections |
36
38
  | /citable observe media | implemented — bounded PDF, transcript, image-context, optional OCR, and declared claim-link evidence |
@@ -15,3 +15,15 @@ the exception is expired, revoked, superseded, conflicted, unauthorized, or
15
15
  over-renewed; required roles are absent; or more than one active exception
16
16
  matches a finding. Reviewer records are declarations and do not independently
17
17
  prove real-world identity, competence, independence, or legal authority.
18
+
19
+ ## Governed exception lifecycle
20
+
21
+ Use `citable exceptions <list|renew|invalidate>` to inspect and maintain exceptions in `.citable/registries/exceptions.yaml`:
22
+
23
+ - `citable exceptions list [--expired] [--expiring-soon <days>] [--ref-date YYYY-MM-DD]`:
24
+ Surfaces active, expiring soon, expired, and revoked exceptions with remaining days and renewal counters. Expired exceptions fail closed.
25
+ - `citable exceptions renew --id <exception-id> --until <YYYY-MM-DD> --reviewer <reviewer-id> [--evidence <id>] [--note <text>] [--write]`:
26
+ Extends expiration under strict reviewer authority checks, policy renewal caps, and max duration limits. Appends an immutable renewal event to the exception's audit history.
27
+ - `citable exceptions invalidate --id <exception-id> --reason <text> --reviewer <reviewer-id> [--write]`:
28
+ Revokes an active exception with mandatory justification, recording the actor and note in the audit trail.
29
+
@@ -42,6 +42,13 @@ rows restricted to the `Organic Search` default channel group and inherits the
42
42
  property's reporting identity, thresholding, attribution, and consent choices.
43
43
  Neither source establishes that an intervention caused an observed change.
44
44
 
45
+ `citable connect indexnow` validates and submits discovered or changed URLs directly to
46
+ IndexNow participating engines (Bing, Yandex, Seznam, Naver). It is dry run by default;
47
+ `--write` performs submission. It validates host ownership via pre-flight key verification,
48
+ batches submissions up to 10,000 URLs per protocol chunk, and saves immutable delivery
49
+ receipts under `.citable/monitoring/deliveries/`. An accepted IndexNow submission proves engine
50
+ receipt of the URL list only; it does not prove crawling, indexing, or citation.
51
+
45
52
  # measure seo
46
53
  Inputs the operator exports (Search Console/Bing/analytics CSV or JSON).
47
54
  Workflow: validate segmentation (brand vs non-brand, intent, page type,
@@ -94,3 +101,16 @@ types in the narrative-accuracy rubric; SEV-map material ones; follow the
94
101
  correction runbook (capture → materiality → source lineage → verify internal
95
102
  truth → correct owned → escalate external → recrawl request → retest cohort →
96
103
  preserve before/after → residual risk).
104
+
105
+ # MCP evidence transport
106
+
107
+ 1. Run `citable connect mcp --server <id> --tool <name> [--args <json>] [--transport <stdio|http>] [--target <url>]`
108
+ to collect evidence via an allowlisted read-only MCP transport adapter.
109
+ 2. The transport enforces strict security boundaries:
110
+ - Server allowlist: only explicitly declared servers (e.g. `citable-evidence-pilot`, `gsc-mcp`) are permitted; untrusted servers fail closed.
111
+ - Read-only tools: only tools declared `read_only: true` can be invoked; state-changing tools are refused.
112
+ - Public network boundary: remote HTTP connections enforce HTTPS and reject private, loopback, or non-public IP destinations.
113
+ - Secret sanitization: bearer tokens, API keys, and credential headers are scrubbed from request arguments and responses.
114
+ - Hashes and provenance: argument hashes (`sha256`) and raw payload hashes (`sha256`) are recorded in `mcp-transport-envelope.json`.
115
+ 3. Refusal boundary: MCP operates strictly as a transport into the immutable observation model. An MCP response does not confer evidence authority, authenticity, completeness, or ranking guarantees.
116
+
@@ -55,3 +55,19 @@ any observed change to a specific intervention.
55
55
  4. Outputs are written to `.citable/reports/share-of-voice.md` and
56
56
  `.citable/reports/share-of-voice.html`.
57
57
 
58
+ # Canonical discovery consensus reporting
59
+
60
+ 1. Run `citable report consensus [--last N] [--since <run-id>]` to evaluate
61
+ alignment across observed publisher canonical signals (HTML `rel="canonical"`,
62
+ Open Graph URL, sitemaps, HTTP Link headers) and external engine-observed
63
+ canonical URLs recorded in `observe consensus` / `canonical_freshness` runs.
64
+ 2. The consensus matrix maps target URLs against publisher declarations and
65
+ engine selections (Google, Bing, Perplexity, etc.) to expose divergences and
66
+ unresolved canonical conflicts (e.g. `TECH-019`).
67
+ 3. Outputs are written to `.citable/reports/consensus.md` and
68
+ `.citable/reports/consensus.html`.
69
+ 4. Refusal boundary: Never guarantee crawling, indexing, or ranking outcomes.
70
+ Publisher canonical declarations are treated as advisory hints to engines, not
71
+ authoritative index guarantees. Divergences are reported as factual observations,
72
+ never fabricated or interpolated.
73
+
@@ -1,11 +1,11 @@
1
1
  {
2
2
  "name": "citable",
3
- "version": "1.15.1",
3
+ "version": "1.17.0",
4
4
  "managedBy": "citable-cli",
5
5
  "provider": "codex",
6
6
  "providerName": "OpenAI Codex",
7
7
  "scope": "bundle",
8
- "sourcePackage": "@nebulacomponents/citable@1.15.1",
8
+ "sourcePackage": "@nebulacomponents/citable@1.17.0",
9
9
  "variantPath": ".agents/skills/citable",
10
10
  "agentProfiles": {
11
11
  "status": "unsupported",
@@ -18,16 +18,16 @@
18
18
  "commands/artifact-interchange.md": "sha256:18d56fbfa6bb3f23f08593a9a8135e51c268618b049e53c793969b68000875c3",
19
19
  "commands/delivery.md": "sha256:3b29250f9e9f84442812e320a70d5d2784b4286e91af3866f99cb6062a85a10f",
20
20
  "commands/field-validation.md": "sha256:4f24b2758eef746d704b218364f1e45ee9e07418c8ae111081b1fd41f93dde2d",
21
- "commands/governance.md": "sha256:1fd6272f18b00237fc6e602ac126ae812747937b2bb575068a0d617137eea2b0",
21
+ "commands/governance.md": "sha256:41792a2a08930c604cc7b635c23fb3cbdeebc5af610ef38c795f1a412c4a0816",
22
22
  "commands/ingest.md": "sha256:cf35659aecd9d0e160909003efdbe056864fc5d824c71b4ef0ee801ce07ff598",
23
- "commands/measurement.md": "sha256:9cade6dfec23338e18aa67ede3335ac9e2888dc577a7d4d8e3ceac948bce403f",
23
+ "commands/measurement.md": "sha256:85506abeaade17884290396f029f399a30d6b503dcb730db698d0ab9b3b5de62",
24
24
  "commands/media-evidence.md": "sha256:f2218feabe3360a2c9d569a5fa9b70d4b33a83a270d657151635e6f404fb34e0",
25
25
  "commands/observe-and-act.md": "sha256:32ad048f14610de0e9a00a7faf27ff18ec0d892f5b20d568f519e44a7ffc0faf",
26
26
  "commands/optimize-page.md": "sha256:35866f3d7cdeef0376ea7a7d7036085a9b9cf95bbb300ecf4bd77610ebd74d85",
27
27
  "commands/page-work.md": "sha256:965a66e59bdf7b0da482d26fade53b3d265885ece5d463fe83b0789ebefaef3e",
28
28
  "commands/plan-audit.md": "sha256:69875c9654e13b84566dafb16afe5afe08cffb9f3bded1f2d8d2261ae871c869",
29
- "commands/README.md": "sha256:a8242f715219a549ad4b40a3573b62e1d2249a76a3162622e0cd61f80682d971",
30
- "commands/reporting.md": "sha256:b4e7003d291180ddac574915ebc17a05faac0a72acf5ae2f21bcaa59d273e7ad",
29
+ "commands/README.md": "sha256:9c25573c8af30a8cf02f450f5f3812769aca01ebb422d600e830e78955f18c4a",
30
+ "commands/reporting.md": "sha256:ae89f8620acfef645d52bfe715efa332fdb8f464d890e45240ea341b24adb985",
31
31
  "commands/reviews.md": "sha256:902904aaa405fe5724cf0662c7a5a36eab9a4fe0eb81cbd95ffa2fff946e0ac8",
32
32
  "commands/validate-render.md": "sha256:a8e1d04d40b84d57c35039250d98c6a7302cd44a148a8c3b9d9cfb92678c4347",
33
33
  "policies/crawler-policy-template.md": "sha256:15c88a4eeb21f53f71e5250dd3eb2d2791a814b304eaefce8bb30e2bdf2e2e59",
@@ -58,6 +58,7 @@
58
58
  "schemas/browser-evidence-plan.schema.json": "sha256:81ef14f665b4a00f01afb747576faeb06025722e5c15a36eff3d17e59e978851",
59
59
  "schemas/canonical-index-import.schema.json": "sha256:ef633662cb30873242ca356443bc4835afe56bb020208e8f42fa47ac8047b66e",
60
60
  "schemas/claim.schema.json": "sha256:ce79ccbfa34ece9b7a309a6962522ea06a1f44c468b4c472b5c376554a788537",
61
+ "schemas/cli-output-envelope.schema.json": "sha256:6964e8f2f43618bfd0d7a3f5344b37ebc26f04779796bb8ff4675b935b6208c3",
61
62
  "schemas/common.defs.json": "sha256:ac66081df6b86f652e066ea868edecfcd36cdd1b1c81e55a1e3af880f671b727",
62
63
  "schemas/competitor.schema.json": "sha256:2f6fd7e4543846bde56ff4dc62bb41fa366889787b794a7cdb0bff1a3392e591",
63
64
  "schemas/config.schema.json": "sha256:a87f3bb0087de09035b9f2dafea66e32e4fcc2e3e329abcd0fd8a5ec33318f2a",
@@ -75,16 +76,19 @@
75
76
  "schemas/evidence-authority.schema.json": "sha256:4f8165a37304ebab019e1c2dfec13f1168ecf89ce9bec88f7dca9c8554e39ac0",
76
77
  "schemas/evidence.schema.json": "sha256:76baec7ad7e89c6952473c01dacb9e3b26953c088331e6314d531ce620df9ec1",
77
78
  "schemas/exception.schema.json": "sha256:c88985494ec66554330fdc5b65d033527d0005acf41f10798b1e831d171f8944",
78
- "schemas/experiment.schema.json": "sha256:3cebebc5745a9eb359261408b0a0421b8370d2c94f8244ce939827cd9da41cb6",
79
+ "schemas/experiment.schema.json": "sha256:4b5d16481448597b152269296b67b5776be6f03d8f9afba1833bcee10bf3c05b",
79
80
  "schemas/field-validation-metrics.schema.json": "sha256:bd5daeafc1593f1c4707d75180e1feb1e81d9345a57c1f269eadf13c36cb7012",
80
- "schemas/finding.schema.json": "sha256:85907cd04cd8d2fe24a1e618e0df7160f6d56aa1818db501f345aebce5eb5edb",
81
+ "schemas/finding.schema.json": "sha256:1775425b9b989dd4ffc0c607eb9d64e95cad2124f9058f83ef78b0b0030e209f",
82
+ "schemas/fleet.schema.json": "sha256:3bf5772695ae4bb49a8c5fdbedee230ddb1d84aff6a3176eeb41527aca6ef2a5",
83
+ "schemas/funnel.schema.json": "sha256:6c368f29296ac45f5d52bb3a2f95fa935a1f30f3d53aae846156e9aa4c8ec59c",
81
84
  "schemas/initiative.schema.json": "sha256:491f6cc022c7ac1f9ea9ac9ddfcd270cb49c390e2601fe1e73aa6192a9e7689a",
82
85
  "schemas/intervention.schema.json": "sha256:fcf28e117b207e64ffc96088aa70a95370841a2a9fa43ecb1c82b34c2058a818",
83
86
  "schemas/kpi.schema.json": "sha256:a45e2178ac03a97692b2c1dd667abde6b25b936c73ba0c32e4e98becb3d9d1c2",
87
+ "schemas/mcp-transport-envelope.schema.json": "sha256:5b6290e7eff2c8fa486ce30a0a0e589dc516170dc6c8f7e921b59deee157b974",
84
88
  "schemas/media-manifest.schema.json": "sha256:3f37301aab9e913fa7febb15c720ed6384b106f12cef8d26cdd12d93fd85b41f",
85
89
  "schemas/metric.schema.json": "sha256:2ada648e7274a8d78cc9d6e7ed616f91faa79cf9ed07613e2c1fc53b247aac8d",
86
90
  "schemas/objective.schema.json": "sha256:94404dc95d04a6641ea7b9654317d0222793251ad44d3dfd2875738622a36025",
87
- "schemas/observation.schema.json": "sha256:a5daabab86dacaa1a81e1f4c4900a0332bb3bf657ffeed60e5c6e0c5a8e5b7da",
91
+ "schemas/observation.schema.json": "sha256:8b0751ae086b39a4228ce95bc2e58065d30db24625b263f697506434363ba9be",
88
92
  "schemas/page.schema.json": "sha256:11d116b22ab79c152cfc7bbbec3a00cebe6dcd8ea2845b0ce819c15111fb0166",
89
93
  "schemas/project.schema.json": "sha256:ea48fdb6480f7047ba4594bd5908bc1f79c1ad6b9a2c204df900959b5f203dc6",
90
94
  "schemas/prompt-result.schema.json": "sha256:b55be47d7d58d7b1dd8c3b1e849e24e55216212c592cde7eb836953379b85737",
@@ -94,6 +98,7 @@
94
98
  "schemas/release-manifest.schema.json": "sha256:962be645e790b5f3dc6f6ea455e187492d727dcb91d00f91e4e25b40e2dbc360",
95
99
  "schemas/release-state.schema.json": "sha256:9920f68e538915d0d07044f313a9e410775a38ce9bb46a55d9ebe02970784803",
96
100
  "schemas/remediation-spec.schema.json": "sha256:6fe8cb773702862ba6d261198bb5cc2dca3eca0a2310a60ebddd04377654df8d",
101
+ "schemas/remediation-verification.schema.json": "sha256:b4e4f3ce8d72ef64cdb879a86b6afe9220e2d9e4d13ed3486348cc8ee38e1319",
97
102
  "schemas/review-item.schema.json": "sha256:df532a70385d5031bbc18654f3ccb436dc6e8d402ccf987e58f8f7e3ad2fb3f1",
98
103
  "schemas/review-policy.schema.json": "sha256:b2d176b1886f78c384b25532a0c3eb18548dfbd17f362a305e622bab562a1d04",
99
104
  "schemas/reviewer.schema.json": "sha256:3716697b752575a1277f2c2b318b1f2565de02bf9dce2a0c165567ab5330d18b",
@@ -105,9 +110,9 @@
105
110
  "schemas/source-identity-chain.schema.json": "sha256:a65d9c12eaed1bd6b637c66a2f9362c17287fdfcb454d8676fb611d2d28aa019",
106
111
  "schemas/variance.schema.json": "sha256:68389f64f0a3be13ff8951e8eefba9a5c31d0738325cb47e37c1a8435bea48f0",
107
112
  "scripts/README.md": "sha256:9eee4e8beb4579a183bd714c9dd24b83abd020753eada5caeffae004739d60b5",
108
- "SKILL.md": "sha256:aad95729d5773d7fea33d844670d69b7d2015dcc33b49070aea9f134f8b1701c",
113
+ "SKILL.md": "sha256:f39e0863bbcaf178c46afed4ae95834451d96e6b1d07af3883733de707e692ea",
109
114
  "templates/finding-review.md": "sha256:b270a83d3f015150aac80249ae9314979c0befea39ff92ec455f9a5aaa73404c",
110
- "VERSION": "sha256:3a1d1ce0e8ef392e0cebe5f16555a12b8c6f035af8996a59992c42f617264050"
115
+ "VERSION": "sha256:00afc49f1599e59129a59b64c2b019de3fe35300c05bb9d96cb25002576ff43b"
111
116
  },
112
- "treeHash": "sha256:d922477f575db8f1514008b1ff6a8fddbe92ef4f00af3ae1f915634e7cc59ec2"
117
+ "treeHash": "sha256:e4c2165da7ae3106c3bfa358445d2e51dd974f656d058bc03f22fd0604d2d4b3"
113
118
  }
@@ -0,0 +1,30 @@
1
+ {
2
+ "$id": "citable://schemas/cli-output-envelope.schema.json",
3
+ "$schema": "http://json-schema.org/draft-07/schema#",
4
+ "title": "CLI JSON output envelope",
5
+ "description": "Stable envelope for every `citable <command> --json` output. Consumers read `citable_output_schema` for envelope compatibility and read command data from `result`. The envelope version changes only on breaking envelope changes; command payloads evolve backward-compatibly inside result.",
6
+ "type": "object",
7
+ "required": ["citable_output_schema", "tool_version", "generated_at", "result"],
8
+ "properties": {
9
+ "citable_output_schema": {
10
+ "type": "string",
11
+ "pattern": "^\\d+\\.\\d+$",
12
+ "description": "Envelope contract version. 1.0 is the initial stable contract."
13
+ },
14
+ "tool_version": {
15
+ "type": "string",
16
+ "description": "Citable package version that produced the output."
17
+ },
18
+ "command": {
19
+ "type": ["string", "null"],
20
+ "description": "Top-level command that produced this output."
21
+ },
22
+ "generated_at": {
23
+ "type": "string",
24
+ "description": "ISO-8601 timestamp of when the output was generated."
25
+ },
26
+ "result": {
27
+ "description": "Command-specific payload. Structure is defined per command and evolves backward-compatibly within an envelope major version."
28
+ }
29
+ }
30
+ }
@@ -15,7 +15,7 @@
15
15
  "properties": {
16
16
  "experiment_id": { "$ref": "citable://schemas/common.defs.json#/definitions/id" },
17
17
  "hypothesis": { "type": "string", "minLength": 10 },
18
- "discipline": { "type": "array", "items": { "type": "string", "enum": ["seo", "aeo", "geo"] } },
18
+ "discipline": { "type": "array", "items": { "type": "string", "enum": ["seo", "aeo", "geo", "cro"] } },
19
19
  "primary_metric": { "type": "string" },
20
20
  "secondary_metrics": { "type": "array", "items": { "type": "string" } },
21
21
  "prompt_cohort": { "type": "array", "items": { "type": "string" } },
@@ -257,6 +257,75 @@
257
257
  }
258
258
  }
259
259
  },
260
+ "provenance": {
261
+ "type": "object",
262
+ "required": [
263
+ "detector_version",
264
+ "tool_version",
265
+ "evidence_source",
266
+ "methodology",
267
+ "revalidation_required"
268
+ ],
269
+ "properties": {
270
+ "detector_version": {
271
+ "type": "integer",
272
+ "minimum": 1
273
+ },
274
+ "tool_version": {
275
+ "type": "string"
276
+ },
277
+ "source_url": {
278
+ "type": [
279
+ "string",
280
+ "null"
281
+ ]
282
+ },
283
+ "source_file": {
284
+ "type": [
285
+ "string",
286
+ "null"
287
+ ]
288
+ },
289
+ "evidence_selector": {
290
+ "type": [
291
+ "string",
292
+ "null"
293
+ ]
294
+ },
295
+ "evidence_source": {
296
+ "type": "string",
297
+ "enum": [
298
+ "dom_parse",
299
+ "registry",
300
+ "registry+dom_parse",
301
+ "controlled_observation",
302
+ "configuration"
303
+ ]
304
+ },
305
+ "viewport": {
306
+ "type": [
307
+ "string",
308
+ "null"
309
+ ]
310
+ },
311
+ "viewport_note": {
312
+ "type": [
313
+ "string",
314
+ "null"
315
+ ]
316
+ },
317
+ "methodology": {
318
+ "type": "string"
319
+ },
320
+ "revalidation_required": {
321
+ "type": "string",
322
+ "enum": [
323
+ "on_next_audit",
324
+ "human_review_before_action"
325
+ ]
326
+ }
327
+ }
328
+ },
260
329
  "status": {
261
330
  "type": "object",
262
331
  "required": [
@@ -0,0 +1,93 @@
1
+ {
2
+ "$id": "citable://schemas/fleet.schema.json",
3
+ "$schema": "http://json-schema.org/draft-07/schema#",
4
+ "title": "Fleet Properties registry",
5
+ "allOf": [
6
+ {
7
+ "$ref": "citable://schemas/common.defs.json#/definitions/registryFile"
8
+ }
9
+ ],
10
+ "properties": {
11
+ "kind": {
12
+ "const": "fleet"
13
+ },
14
+ "entries": {
15
+ "items": {
16
+ "$ref": "#/definitions/fleetProperty"
17
+ }
18
+ }
19
+ },
20
+ "definitions": {
21
+ "fleetProperty": {
22
+ "type": "object",
23
+ "additionalProperties": false,
24
+ "required": [
25
+ "property_id",
26
+ "name",
27
+ "primary_domain",
28
+ "environment",
29
+ "status"
30
+ ],
31
+ "properties": {
32
+ "property_id": {
33
+ "$ref": "citable://schemas/common.defs.json#/definitions/id"
34
+ },
35
+ "name": {
36
+ "type": "string",
37
+ "minLength": 1
38
+ },
39
+ "description": {
40
+ "type": "string"
41
+ },
42
+ "primary_domain": {
43
+ "type": "string",
44
+ "minLength": 3
45
+ },
46
+ "domains": {
47
+ "type": "array",
48
+ "items": {
49
+ "type": "string"
50
+ }
51
+ },
52
+ "environment": {
53
+ "type": "string",
54
+ "enum": [
55
+ "production",
56
+ "staging",
57
+ "development",
58
+ "preview"
59
+ ]
60
+ },
61
+ "base_url": {
62
+ "type": "string"
63
+ },
64
+ "built_output_dir": {
65
+ "type": "string"
66
+ },
67
+ "owner": {
68
+ "type": "string"
69
+ },
70
+ "tags": {
71
+ "type": "array",
72
+ "items": {
73
+ "type": "string"
74
+ }
75
+ },
76
+ "audit_schedule": {
77
+ "type": "string"
78
+ },
79
+ "status": {
80
+ "type": "string",
81
+ "enum": [
82
+ "active",
83
+ "paused",
84
+ "archived"
85
+ ]
86
+ },
87
+ "updated": {
88
+ "$ref": "citable://schemas/common.defs.json#/definitions/isoDate"
89
+ }
90
+ }
91
+ }
92
+ }
93
+ }