@nebulacomponents/citable 1.15.1 → 1.16.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 (211) hide show
  1. package/CHANGELOG.md +25 -0
  2. package/README.md +3 -3
  3. package/dist/universal/.agents/skills/citable/SKILL.md +5 -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 +14 -11
  10. package/dist/universal/.agents/skills/citable/schemas/experiment.schema.json +1 -1
  11. package/dist/universal/.agents/skills/citable/schemas/fleet.schema.json +93 -0
  12. package/dist/universal/.agents/skills/citable/schemas/funnel.schema.json +116 -0
  13. package/dist/universal/.agents/skills/citable/schemas/mcp-transport-envelope.schema.json +244 -0
  14. package/dist/universal/.agents/skills/citable/schemas/observation.schema.json +1 -1
  15. package/dist/universal/.claude/agents/citable/manifest.json +2 -2
  16. package/dist/universal/.claude/skills/citable/SKILL.md +5 -1
  17. package/dist/universal/.claude/skills/citable/VERSION +1 -1
  18. package/dist/universal/.claude/skills/citable/commands/README.md +3 -1
  19. package/dist/universal/.claude/skills/citable/commands/governance.md +12 -0
  20. package/dist/universal/.claude/skills/citable/commands/measurement.md +20 -0
  21. package/dist/universal/.claude/skills/citable/commands/reporting.md +16 -0
  22. package/dist/universal/.claude/skills/citable/manifest.json +14 -11
  23. package/dist/universal/.claude/skills/citable/schemas/experiment.schema.json +1 -1
  24. package/dist/universal/.claude/skills/citable/schemas/fleet.schema.json +93 -0
  25. package/dist/universal/.claude/skills/citable/schemas/funnel.schema.json +116 -0
  26. package/dist/universal/.claude/skills/citable/schemas/mcp-transport-envelope.schema.json +244 -0
  27. package/dist/universal/.claude/skills/citable/schemas/observation.schema.json +1 -1
  28. package/dist/universal/.cursor/skills/citable/SKILL.md +5 -1
  29. package/dist/universal/.cursor/skills/citable/VERSION +1 -1
  30. package/dist/universal/.cursor/skills/citable/commands/README.md +3 -1
  31. package/dist/universal/.cursor/skills/citable/commands/governance.md +12 -0
  32. package/dist/universal/.cursor/skills/citable/commands/measurement.md +20 -0
  33. package/dist/universal/.cursor/skills/citable/commands/reporting.md +16 -0
  34. package/dist/universal/.cursor/skills/citable/manifest.json +14 -11
  35. package/dist/universal/.cursor/skills/citable/schemas/experiment.schema.json +1 -1
  36. package/dist/universal/.cursor/skills/citable/schemas/fleet.schema.json +93 -0
  37. package/dist/universal/.cursor/skills/citable/schemas/funnel.schema.json +116 -0
  38. package/dist/universal/.cursor/skills/citable/schemas/mcp-transport-envelope.schema.json +244 -0
  39. package/dist/universal/.cursor/skills/citable/schemas/observation.schema.json +1 -1
  40. package/dist/universal/.gemini/skills/citable/SKILL.md +5 -1
  41. package/dist/universal/.gemini/skills/citable/VERSION +1 -1
  42. package/dist/universal/.gemini/skills/citable/commands/README.md +3 -1
  43. package/dist/universal/.gemini/skills/citable/commands/governance.md +12 -0
  44. package/dist/universal/.gemini/skills/citable/commands/measurement.md +20 -0
  45. package/dist/universal/.gemini/skills/citable/commands/reporting.md +16 -0
  46. package/dist/universal/.gemini/skills/citable/manifest.json +14 -11
  47. package/dist/universal/.gemini/skills/citable/schemas/experiment.schema.json +1 -1
  48. package/dist/universal/.gemini/skills/citable/schemas/fleet.schema.json +93 -0
  49. package/dist/universal/.gemini/skills/citable/schemas/funnel.schema.json +116 -0
  50. package/dist/universal/.gemini/skills/citable/schemas/mcp-transport-envelope.schema.json +244 -0
  51. package/dist/universal/.gemini/skills/citable/schemas/observation.schema.json +1 -1
  52. package/dist/universal/.github/skills/citable/SKILL.md +5 -1
  53. package/dist/universal/.github/skills/citable/VERSION +1 -1
  54. package/dist/universal/.github/skills/citable/commands/README.md +3 -1
  55. package/dist/universal/.github/skills/citable/commands/governance.md +12 -0
  56. package/dist/universal/.github/skills/citable/commands/measurement.md +20 -0
  57. package/dist/universal/.github/skills/citable/commands/reporting.md +16 -0
  58. package/dist/universal/.github/skills/citable/manifest.json +14 -11
  59. package/dist/universal/.github/skills/citable/schemas/experiment.schema.json +1 -1
  60. package/dist/universal/.github/skills/citable/schemas/fleet.schema.json +93 -0
  61. package/dist/universal/.github/skills/citable/schemas/funnel.schema.json +116 -0
  62. package/dist/universal/.github/skills/citable/schemas/mcp-transport-envelope.schema.json +244 -0
  63. package/dist/universal/.github/skills/citable/schemas/observation.schema.json +1 -1
  64. package/dist/universal/.kiro/skills/citable/SKILL.md +5 -1
  65. package/dist/universal/.kiro/skills/citable/VERSION +1 -1
  66. package/dist/universal/.kiro/skills/citable/commands/README.md +3 -1
  67. package/dist/universal/.kiro/skills/citable/commands/governance.md +12 -0
  68. package/dist/universal/.kiro/skills/citable/commands/measurement.md +20 -0
  69. package/dist/universal/.kiro/skills/citable/commands/reporting.md +16 -0
  70. package/dist/universal/.kiro/skills/citable/manifest.json +14 -11
  71. package/dist/universal/.kiro/skills/citable/schemas/experiment.schema.json +1 -1
  72. package/dist/universal/.kiro/skills/citable/schemas/fleet.schema.json +93 -0
  73. package/dist/universal/.kiro/skills/citable/schemas/funnel.schema.json +116 -0
  74. package/dist/universal/.kiro/skills/citable/schemas/mcp-transport-envelope.schema.json +244 -0
  75. package/dist/universal/.kiro/skills/citable/schemas/observation.schema.json +1 -1
  76. package/dist/universal/.opencode/skills/citable/SKILL.md +5 -1
  77. package/dist/universal/.opencode/skills/citable/VERSION +1 -1
  78. package/dist/universal/.opencode/skills/citable/commands/README.md +3 -1
  79. package/dist/universal/.opencode/skills/citable/commands/governance.md +12 -0
  80. package/dist/universal/.opencode/skills/citable/commands/measurement.md +20 -0
  81. package/dist/universal/.opencode/skills/citable/commands/reporting.md +16 -0
  82. package/dist/universal/.opencode/skills/citable/manifest.json +14 -11
  83. package/dist/universal/.opencode/skills/citable/schemas/experiment.schema.json +1 -1
  84. package/dist/universal/.opencode/skills/citable/schemas/fleet.schema.json +93 -0
  85. package/dist/universal/.opencode/skills/citable/schemas/funnel.schema.json +116 -0
  86. package/dist/universal/.opencode/skills/citable/schemas/mcp-transport-envelope.schema.json +244 -0
  87. package/dist/universal/.opencode/skills/citable/schemas/observation.schema.json +1 -1
  88. package/dist/universal/.pi/agent/skills/citable/SKILL.md +5 -1
  89. package/dist/universal/.pi/agent/skills/citable/VERSION +1 -1
  90. package/dist/universal/.pi/agent/skills/citable/commands/README.md +3 -1
  91. package/dist/universal/.pi/agent/skills/citable/commands/governance.md +12 -0
  92. package/dist/universal/.pi/agent/skills/citable/commands/measurement.md +20 -0
  93. package/dist/universal/.pi/agent/skills/citable/commands/reporting.md +16 -0
  94. package/dist/universal/.pi/agent/skills/citable/manifest.json +14 -11
  95. package/dist/universal/.pi/agent/skills/citable/schemas/experiment.schema.json +1 -1
  96. package/dist/universal/.pi/agent/skills/citable/schemas/fleet.schema.json +93 -0
  97. package/dist/universal/.pi/agent/skills/citable/schemas/funnel.schema.json +116 -0
  98. package/dist/universal/.pi/agent/skills/citable/schemas/mcp-transport-envelope.schema.json +244 -0
  99. package/dist/universal/.pi/agent/skills/citable/schemas/observation.schema.json +1 -1
  100. package/dist/universal/.qoder/skills/citable/SKILL.md +5 -1
  101. package/dist/universal/.qoder/skills/citable/VERSION +1 -1
  102. package/dist/universal/.qoder/skills/citable/commands/README.md +3 -1
  103. package/dist/universal/.qoder/skills/citable/commands/governance.md +12 -0
  104. package/dist/universal/.qoder/skills/citable/commands/measurement.md +20 -0
  105. package/dist/universal/.qoder/skills/citable/commands/reporting.md +16 -0
  106. package/dist/universal/.qoder/skills/citable/manifest.json +14 -11
  107. package/dist/universal/.qoder/skills/citable/schemas/experiment.schema.json +1 -1
  108. package/dist/universal/.qoder/skills/citable/schemas/fleet.schema.json +93 -0
  109. package/dist/universal/.qoder/skills/citable/schemas/funnel.schema.json +116 -0
  110. package/dist/universal/.qoder/skills/citable/schemas/mcp-transport-envelope.schema.json +244 -0
  111. package/dist/universal/.qoder/skills/citable/schemas/observation.schema.json +1 -1
  112. package/dist/universal/.rovodev/skills/citable/SKILL.md +5 -1
  113. package/dist/universal/.rovodev/skills/citable/VERSION +1 -1
  114. package/dist/universal/.rovodev/skills/citable/commands/README.md +3 -1
  115. package/dist/universal/.rovodev/skills/citable/commands/governance.md +12 -0
  116. package/dist/universal/.rovodev/skills/citable/commands/measurement.md +20 -0
  117. package/dist/universal/.rovodev/skills/citable/commands/reporting.md +16 -0
  118. package/dist/universal/.rovodev/skills/citable/manifest.json +14 -11
  119. package/dist/universal/.rovodev/skills/citable/schemas/experiment.schema.json +1 -1
  120. package/dist/universal/.rovodev/skills/citable/schemas/fleet.schema.json +93 -0
  121. package/dist/universal/.rovodev/skills/citable/schemas/funnel.schema.json +116 -0
  122. package/dist/universal/.rovodev/skills/citable/schemas/mcp-transport-envelope.schema.json +244 -0
  123. package/dist/universal/.rovodev/skills/citable/schemas/observation.schema.json +1 -1
  124. package/dist/universal/.trae/skills/citable/SKILL.md +5 -1
  125. package/dist/universal/.trae/skills/citable/VERSION +1 -1
  126. package/dist/universal/.trae/skills/citable/commands/README.md +3 -1
  127. package/dist/universal/.trae/skills/citable/commands/governance.md +12 -0
  128. package/dist/universal/.trae/skills/citable/commands/measurement.md +20 -0
  129. package/dist/universal/.trae/skills/citable/commands/reporting.md +16 -0
  130. package/dist/universal/.trae/skills/citable/manifest.json +14 -11
  131. package/dist/universal/.trae/skills/citable/schemas/experiment.schema.json +1 -1
  132. package/dist/universal/.trae/skills/citable/schemas/fleet.schema.json +93 -0
  133. package/dist/universal/.trae/skills/citable/schemas/funnel.schema.json +116 -0
  134. package/dist/universal/.trae/skills/citable/schemas/mcp-transport-envelope.schema.json +244 -0
  135. package/dist/universal/.trae/skills/citable/schemas/observation.schema.json +1 -1
  136. package/dist/universal/.trae-cn/skills/citable/SKILL.md +5 -1
  137. package/dist/universal/.trae-cn/skills/citable/VERSION +1 -1
  138. package/dist/universal/.trae-cn/skills/citable/commands/README.md +3 -1
  139. package/dist/universal/.trae-cn/skills/citable/commands/governance.md +12 -0
  140. package/dist/universal/.trae-cn/skills/citable/commands/measurement.md +20 -0
  141. package/dist/universal/.trae-cn/skills/citable/commands/reporting.md +16 -0
  142. package/dist/universal/.trae-cn/skills/citable/manifest.json +14 -11
  143. package/dist/universal/.trae-cn/skills/citable/schemas/experiment.schema.json +1 -1
  144. package/dist/universal/.trae-cn/skills/citable/schemas/fleet.schema.json +93 -0
  145. package/dist/universal/.trae-cn/skills/citable/schemas/funnel.schema.json +116 -0
  146. package/dist/universal/.trae-cn/skills/citable/schemas/mcp-transport-envelope.schema.json +244 -0
  147. package/dist/universal/.trae-cn/skills/citable/schemas/observation.schema.json +1 -1
  148. package/dist/universal/manifest.json +172 -136
  149. package/package.json +1 -1
  150. package/schemas/experiment.schema.json +1 -1
  151. package/schemas/fleet.schema.json +93 -0
  152. package/schemas/funnel.schema.json +116 -0
  153. package/schemas/mcp-transport-envelope.schema.json +244 -0
  154. package/schemas/observation.schema.json +1 -1
  155. package/skill/SKILL.md +5 -1
  156. package/skill/commands/README.md +3 -1
  157. package/skill/commands/governance.md +12 -0
  158. package/skill/commands/measurement.md +20 -0
  159. package/skill/commands/reporting.md +16 -0
  160. package/src/cli/index.js +383 -8
  161. package/src/commands/attributeImpact.js +54 -0
  162. package/src/commands/connect.js +3 -0
  163. package/src/commands/edgeRules.js +120 -0
  164. package/src/commands/exceptions.js +241 -0
  165. package/src/commands/fleet.js +104 -0
  166. package/src/commands/generateLlmsTxt.js +111 -0
  167. package/src/commands/inspectAeo.js +74 -0
  168. package/src/commands/inspectCro.js +82 -0
  169. package/src/commands/inspectGeo.js +52 -0
  170. package/src/commands/inspectSerp.js +317 -0
  171. package/src/commands/lintComponents.js +132 -0
  172. package/src/commands/monitor.js +138 -0
  173. package/src/commands/observe.js +6 -1
  174. package/src/commands/planExperiment.js +68 -0
  175. package/src/commands/probe.js +70 -0
  176. package/src/commands/reportConsensus.js +48 -0
  177. package/src/commands/testFunnel.js +107 -0
  178. package/src/connectors/index.js +6 -1
  179. package/src/connectors/indexnow.js +431 -0
  180. package/src/connectors/mcp/allowlist.js +107 -0
  181. package/src/connectors/mcp/client.js +239 -0
  182. package/src/connectors/mcp/diagnostics.js +214 -0
  183. package/src/connectors/mcp/gscServer.js +155 -0
  184. package/src/connectors/mcp/http.js +130 -0
  185. package/src/connectors/mcp/index.js +7 -0
  186. package/src/connectors/mcp/pilot.js +138 -0
  187. package/src/connectors/mcp/pilotServer.js +80 -0
  188. package/src/connectors/mcp/sanitizer.js +38 -0
  189. package/src/connectors/mcp/stdio.js +178 -0
  190. package/src/crawler/ipRanges.js +161 -0
  191. package/src/detectors/agent.js +127 -0
  192. package/src/detectors/ans.js +282 -0
  193. package/src/detectors/crawl.js +46 -0
  194. package/src/detectors/cro.js +777 -0
  195. package/src/detectors/cwv.js +38 -1
  196. package/src/detectors/evd.js +101 -0
  197. package/src/detectors/framework.js +1 -1
  198. package/src/detectors/geoReco.js +408 -0
  199. package/src/detectors/index.js +4 -2
  200. package/src/detectors/link.js +112 -1
  201. package/src/detectors/page.js +101 -0
  202. package/src/detectors/schemaData.js +529 -0
  203. package/src/detectors/tech.js +306 -0
  204. package/src/extractor/page.js +186 -2
  205. package/src/extractor/site.js +9 -2
  206. package/src/installer/index.js +45 -2
  207. package/src/monitoring/alertDelivery.js +101 -7
  208. package/src/observations/attribution.js +217 -0
  209. package/src/registries/index.js +14 -0
  210. package/src/reporting/consensus.js +416 -0
  211. package/src/reporting/executiveExport.js +132 -0
@@ -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.16.0",
4
4
  "managedBy": "citable-cli",
5
5
  "provider": "opencode",
6
6
  "providerName": "OpenCode",
7
7
  "scope": "bundle",
8
- "sourcePackage": "@nebulacomponents/citable@1.15.1",
8
+ "sourcePackage": "@nebulacomponents/citable@1.16.0",
9
9
  "variantPath": ".opencode/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",
@@ -75,16 +75,19 @@
75
75
  "schemas/evidence-authority.schema.json": "sha256:4f8165a37304ebab019e1c2dfec13f1168ecf89ce9bec88f7dca9c8554e39ac0",
76
76
  "schemas/evidence.schema.json": "sha256:76baec7ad7e89c6952473c01dacb9e3b26953c088331e6314d531ce620df9ec1",
77
77
  "schemas/exception.schema.json": "sha256:c88985494ec66554330fdc5b65d033527d0005acf41f10798b1e831d171f8944",
78
- "schemas/experiment.schema.json": "sha256:3cebebc5745a9eb359261408b0a0421b8370d2c94f8244ce939827cd9da41cb6",
78
+ "schemas/experiment.schema.json": "sha256:4b5d16481448597b152269296b67b5776be6f03d8f9afba1833bcee10bf3c05b",
79
79
  "schemas/field-validation-metrics.schema.json": "sha256:bd5daeafc1593f1c4707d75180e1feb1e81d9345a57c1f269eadf13c36cb7012",
80
80
  "schemas/finding.schema.json": "sha256:85907cd04cd8d2fe24a1e618e0df7160f6d56aa1818db501f345aebce5eb5edb",
81
+ "schemas/fleet.schema.json": "sha256:3bf5772695ae4bb49a8c5fdbedee230ddb1d84aff6a3176eeb41527aca6ef2a5",
82
+ "schemas/funnel.schema.json": "sha256:6c368f29296ac45f5d52bb3a2f95fa935a1f30f3d53aae846156e9aa4c8ec59c",
81
83
  "schemas/initiative.schema.json": "sha256:491f6cc022c7ac1f9ea9ac9ddfcd270cb49c390e2601fe1e73aa6192a9e7689a",
82
84
  "schemas/intervention.schema.json": "sha256:fcf28e117b207e64ffc96088aa70a95370841a2a9fa43ecb1c82b34c2058a818",
83
85
  "schemas/kpi.schema.json": "sha256:a45e2178ac03a97692b2c1dd667abde6b25b936c73ba0c32e4e98becb3d9d1c2",
86
+ "schemas/mcp-transport-envelope.schema.json": "sha256:5b6290e7eff2c8fa486ce30a0a0e589dc516170dc6c8f7e921b59deee157b974",
84
87
  "schemas/media-manifest.schema.json": "sha256:3f37301aab9e913fa7febb15c720ed6384b106f12cef8d26cdd12d93fd85b41f",
85
88
  "schemas/metric.schema.json": "sha256:2ada648e7274a8d78cc9d6e7ed616f91faa79cf9ed07613e2c1fc53b247aac8d",
86
89
  "schemas/objective.schema.json": "sha256:94404dc95d04a6641ea7b9654317d0222793251ad44d3dfd2875738622a36025",
87
- "schemas/observation.schema.json": "sha256:a5daabab86dacaa1a81e1f4c4900a0332bb3bf657ffeed60e5c6e0c5a8e5b7da",
90
+ "schemas/observation.schema.json": "sha256:8b0751ae086b39a4228ce95bc2e58065d30db24625b263f697506434363ba9be",
88
91
  "schemas/page.schema.json": "sha256:11d116b22ab79c152cfc7bbbec3a00cebe6dcd8ea2845b0ce819c15111fb0166",
89
92
  "schemas/project.schema.json": "sha256:ea48fdb6480f7047ba4594bd5908bc1f79c1ad6b9a2c204df900959b5f203dc6",
90
93
  "schemas/prompt-result.schema.json": "sha256:b55be47d7d58d7b1dd8c3b1e849e24e55216212c592cde7eb836953379b85737",
@@ -105,9 +108,9 @@
105
108
  "schemas/source-identity-chain.schema.json": "sha256:a65d9c12eaed1bd6b637c66a2f9362c17287fdfcb454d8676fb611d2d28aa019",
106
109
  "schemas/variance.schema.json": "sha256:68389f64f0a3be13ff8951e8eefba9a5c31d0738325cb47e37c1a8435bea48f0",
107
110
  "scripts/README.md": "sha256:9eee4e8beb4579a183bd714c9dd24b83abd020753eada5caeffae004739d60b5",
108
- "SKILL.md": "sha256:aad95729d5773d7fea33d844670d69b7d2015dcc33b49070aea9f134f8b1701c",
111
+ "SKILL.md": "sha256:5a5dbae5d5af91f58dddf8fd2a1ed71c1740f81e5813b91e9329850ae6a46301",
109
112
  "templates/finding-review.md": "sha256:b270a83d3f015150aac80249ae9314979c0befea39ff92ec455f9a5aaa73404c",
110
- "VERSION": "sha256:3a1d1ce0e8ef392e0cebe5f16555a12b8c6f035af8996a59992c42f617264050"
113
+ "VERSION": "sha256:46081fd90571a274160408ebc81fc91b78ffca4049d477998e3b6909ac245e05"
111
114
  },
112
- "treeHash": "sha256:d922477f575db8f1514008b1ff6a8fddbe92ef4f00af3ae1f915634e7cc59ec2"
115
+ "treeHash": "sha256:ac0e50b9957821d1e1e8efe33b0aa22314eca5d1fdcfc6ac90f017c2ec26d4b3"
113
116
  }
@@ -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" } },
@@ -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
+ }
@@ -0,0 +1,116 @@
1
+ {
2
+ "$id": "citable://schemas/funnel.schema.json",
3
+ "$schema": "http://json-schema.org/draft-07/schema#",
4
+ "title": "Conversion Funnel registry",
5
+ "allOf": [
6
+ {
7
+ "$ref": "citable://schemas/common.defs.json#/definitions/registryFile"
8
+ }
9
+ ],
10
+ "properties": {
11
+ "kind": {
12
+ "const": "funnels"
13
+ },
14
+ "entries": {
15
+ "items": {
16
+ "$ref": "#/definitions/funnel"
17
+ }
18
+ }
19
+ },
20
+ "definitions": {
21
+ "funnelStep": {
22
+ "type": "object",
23
+ "additionalProperties": false,
24
+ "required": [
25
+ "step_id",
26
+ "url_pattern",
27
+ "role"
28
+ ],
29
+ "properties": {
30
+ "step_id": {
31
+ "$ref": "citable://schemas/common.defs.json#/definitions/id"
32
+ },
33
+ "name": {
34
+ "type": "string"
35
+ },
36
+ "url_pattern": {
37
+ "type": "string",
38
+ "minLength": 1
39
+ },
40
+ "page_id": {
41
+ "type": "string"
42
+ },
43
+ "role": {
44
+ "type": "string",
45
+ "enum": [
46
+ "entry",
47
+ "consideration",
48
+ "commitment",
49
+ "completion"
50
+ ]
51
+ },
52
+ "expected_cta": {
53
+ "type": "string"
54
+ },
55
+ "preserve_params": {
56
+ "type": "array",
57
+ "items": {
58
+ "type": "string"
59
+ }
60
+ }
61
+ }
62
+ },
63
+ "funnel": {
64
+ "type": "object",
65
+ "additionalProperties": false,
66
+ "required": [
67
+ "funnel_id",
68
+ "name",
69
+ "primary_goal",
70
+ "steps",
71
+ "status"
72
+ ],
73
+ "properties": {
74
+ "funnel_id": {
75
+ "$ref": "citable://schemas/common.defs.json#/definitions/id"
76
+ },
77
+ "name": {
78
+ "type": "string",
79
+ "minLength": 3
80
+ },
81
+ "description": {
82
+ "type": "string"
83
+ },
84
+ "primary_goal": {
85
+ "type": "string",
86
+ "minLength": 2
87
+ },
88
+ "target_audience": {
89
+ "type": "string"
90
+ },
91
+ "owner": {
92
+ "type": "string"
93
+ },
94
+ "steps": {
95
+ "type": "array",
96
+ "minItems": 2,
97
+ "items": {
98
+ "$ref": "#/definitions/funnelStep"
99
+ }
100
+ },
101
+ "status": {
102
+ "type": "string",
103
+ "enum": [
104
+ "draft",
105
+ "active",
106
+ "deprecated",
107
+ "archived"
108
+ ]
109
+ },
110
+ "provenance": {
111
+ "$ref": "citable://schemas/common.defs.json#/definitions/provenance"
112
+ }
113
+ }
114
+ }
115
+ }
116
+ }
@@ -0,0 +1,244 @@
1
+ {
2
+ "$id": "citable://schemas/mcp-transport-envelope.schema.json",
3
+ "$schema": "http://json-schema.org/draft-07/schema#",
4
+ "title": "Model Context Protocol evidence transport envelope",
5
+ "type": "object",
6
+ "additionalProperties": false,
7
+ "required": [
8
+ "schema_version",
9
+ "transport",
10
+ "server",
11
+ "tool",
12
+ "request",
13
+ "response",
14
+ "provenance",
15
+ "authority",
16
+ "status",
17
+ "collected_at"
18
+ ],
19
+ "properties": {
20
+ "schema_version": {
21
+ "const": 1
22
+ },
23
+ "transport": {
24
+ "type": "object",
25
+ "additionalProperties": false,
26
+ "required": [
27
+ "type",
28
+ "protocol_version",
29
+ "timeout_ms",
30
+ "max_bytes"
31
+ ],
32
+ "properties": {
33
+ "type": {
34
+ "type": "string",
35
+ "enum": [
36
+ "stdio",
37
+ "http"
38
+ ]
39
+ },
40
+ "protocol_version": {
41
+ "type": "string",
42
+ "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}$|^[0-9]+\\.[0-9]+.*$"
43
+ },
44
+ "timeout_ms": {
45
+ "type": "integer",
46
+ "minimum": 100,
47
+ "maximum": 60000
48
+ },
49
+ "max_bytes": {
50
+ "type": "integer",
51
+ "minimum": 1024,
52
+ "maximum": 10485760
53
+ },
54
+ "retries": {
55
+ "type": "integer",
56
+ "minimum": 0,
57
+ "maximum": 5
58
+ }
59
+ }
60
+ },
61
+ "server": {
62
+ "type": "object",
63
+ "additionalProperties": false,
64
+ "required": [
65
+ "server_id",
66
+ "transport_target",
67
+ "allowlisted"
68
+ ],
69
+ "properties": {
70
+ "server_id": {
71
+ "type": "string",
72
+ "pattern": "^[a-z0-9_.-]+$"
73
+ },
74
+ "package_name": {
75
+ "type": [
76
+ "string",
77
+ "null"
78
+ ]
79
+ },
80
+ "pinned_version": {
81
+ "type": [
82
+ "string",
83
+ "null"
84
+ ]
85
+ },
86
+ "transport_target": {
87
+ "type": "string",
88
+ "minLength": 1
89
+ },
90
+ "allowlisted": {
91
+ "type": "boolean"
92
+ },
93
+ "capabilities": {
94
+ "type": "object"
95
+ }
96
+ }
97
+ },
98
+ "tool": {
99
+ "type": "object",
100
+ "additionalProperties": false,
101
+ "required": [
102
+ "name",
103
+ "read_only",
104
+ "input_schema_hash"
105
+ ],
106
+ "properties": {
107
+ "name": {
108
+ "type": "string",
109
+ "pattern": "^[a-zA-Z0-9_.-]+$"
110
+ },
111
+ "description": {
112
+ "type": [
113
+ "string",
114
+ "null"
115
+ ]
116
+ },
117
+ "read_only": {
118
+ "type": "boolean"
119
+ },
120
+ "input_schema_hash": {
121
+ "type": "string",
122
+ "pattern": "^[a-f0-9]{64}$"
123
+ },
124
+ "input_schema": {
125
+ "type": "object"
126
+ }
127
+ }
128
+ },
129
+ "request": {
130
+ "type": "object",
131
+ "additionalProperties": false,
132
+ "required": [
133
+ "arguments_hash",
134
+ "arguments"
135
+ ],
136
+ "properties": {
137
+ "arguments_hash": {
138
+ "type": "string",
139
+ "pattern": "^[a-f0-9]{64}$"
140
+ },
141
+ "arguments": {
142
+ "type": "object"
143
+ },
144
+ "authorization_mode": {
145
+ "type": "string",
146
+ "enum": [
147
+ "none",
148
+ "environment",
149
+ "bearer_token",
150
+ "header"
151
+ ]
152
+ },
153
+ "scopes": {
154
+ "type": "array",
155
+ "items": {
156
+ "type": "string"
157
+ }
158
+ }
159
+ }
160
+ },
161
+ "response": {
162
+ "type": "object",
163
+ "additionalProperties": false,
164
+ "required": [
165
+ "raw_sha256",
166
+ "content_bytes",
167
+ "is_error",
168
+ "retention_reason"
169
+ ],
170
+ "properties": {
171
+ "raw_sha256": {
172
+ "type": "string",
173
+ "pattern": "^[a-f0-9]{64}$"
174
+ },
175
+ "content_bytes": {
176
+ "type": "integer",
177
+ "minimum": 0
178
+ },
179
+ "is_error": {
180
+ "type": "boolean"
181
+ },
182
+ "retention_reason": {
183
+ "type": "string",
184
+ "enum": [
185
+ "raw_preserved",
186
+ "hash_locked_only",
187
+ "redacted_sensitive"
188
+ ]
189
+ },
190
+ "content": {
191
+ "type": "array"
192
+ }
193
+ }
194
+ },
195
+ "provenance": {
196
+ "type": "object",
197
+ "additionalProperties": false,
198
+ "required": [
199
+ "adapter_version",
200
+ "normalization_version",
201
+ "sanitized_redactions"
202
+ ],
203
+ "properties": {
204
+ "adapter_version": {
205
+ "type": "string"
206
+ },
207
+ "normalization_version": {
208
+ "type": "string"
209
+ },
210
+ "sanitized_redactions": {
211
+ "type": "integer",
212
+ "minimum": 0
213
+ },
214
+ "duration_ms": {
215
+ "type": "number",
216
+ "minimum": 0
217
+ }
218
+ }
219
+ },
220
+ "authority": {
221
+ "$ref": "citable://schemas/evidence-authority.schema.json"
222
+ },
223
+ "status": {
224
+ "type": "string",
225
+ "enum": [
226
+ "success",
227
+ "incomplete",
228
+ "failed",
229
+ "unsupported",
230
+ "unauthorized"
231
+ ]
232
+ },
233
+ "collected_at": {
234
+ "type": "string",
235
+ "format": "date-time"
236
+ },
237
+ "limitations": {
238
+ "type": "array",
239
+ "items": {
240
+ "type": "string"
241
+ }
242
+ }
243
+ }
244
+ }
@@ -7,7 +7,7 @@
7
7
  "required": ["observation_id", "kind", "state", "collected_at", "collection_method", "confidence", "source", "evidence_hash", "data"],
8
8
  "properties": {
9
9
  "observation_id": { "type": "string", "minLength": 1 },
10
- "kind": { "type": "string", "enum": ["render", "browser_journey", "index", "citation", "citation_review", "crawler_log", "crawler_probe", "regional_network", "bing_webmaster", "passage", "canonical_freshness", "performance", "corroboration", "metric", "media_pdf", "media_transcript", "media_image", "representation_drift", "stance"] },
10
+ "kind": { "type": "string", "enum": ["render", "browser_journey", "index", "citation", "citation_review", "crawler_log", "crawler_probe", "regional_network", "bing_webmaster", "passage", "canonical_freshness", "performance", "corroboration", "metric", "media_pdf", "media_transcript", "media_image", "representation_drift", "stance", "mcp_transport", "attribution"] },
11
11
  "state": { "type": "string", "enum": ["observed", "not_observed", "not_evidenced", "incomplete", "review_required", "failed"] },
12
12
  "collected_at": { "type": "string", "format": "date-time" },
13
13
  "collection_method": { "type": "string", "enum": ["live_api", "browser", "owner_import", "synthetic_fetch", "static_analysis", "human_review"] },
@@ -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.16.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]
@@ -1 +1 @@
1
- 1.15.1
1
+ 1.16.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 |