@nebulacomponents/citable 1.13.1 → 1.15.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 (359) hide show
  1. package/CHANGELOG.md +312 -0
  2. package/README.md +44 -6
  3. package/dist/universal/.agents/skills/citable/SKILL.md +22 -8
  4. package/dist/universal/.agents/skills/citable/VERSION +1 -1
  5. package/dist/universal/.agents/skills/citable/agents/citable-auditor.md +64 -0
  6. package/dist/universal/.agents/skills/citable/agents/citable-semantic-reviewer.md +66 -0
  7. package/dist/universal/.agents/skills/citable/commands/README.md +4 -1
  8. package/dist/universal/.agents/skills/citable/commands/action-findings.md +9 -1
  9. package/dist/universal/.agents/skills/citable/commands/observe-and-act.md +62 -8
  10. package/dist/universal/.agents/skills/citable/commands/plan-audit.md +35 -0
  11. package/dist/universal/.agents/skills/citable/commands/reporting.md +57 -0
  12. package/dist/universal/.agents/skills/citable/manifest.json +29 -16
  13. package/dist/universal/.agents/skills/citable/schemas/action-plan.schema.json +13 -0
  14. package/dist/universal/.agents/skills/citable/schemas/browser-evidence-plan.schema.json +14 -0
  15. package/dist/universal/.agents/skills/citable/schemas/canonical-index-import.schema.json +30 -0
  16. package/dist/universal/.agents/skills/citable/schemas/common.defs.json +12 -1
  17. package/dist/universal/.agents/skills/citable/schemas/corroboration-import.schema.json +48 -0
  18. package/dist/universal/.agents/skills/citable/schemas/entity-graph.schema.json +75 -0
  19. package/dist/universal/.agents/skills/citable/schemas/entity.schema.json +13 -0
  20. package/dist/universal/.agents/skills/citable/schemas/observation.schema.json +1 -1
  21. package/dist/universal/.agents/skills/citable/schemas/page.schema.json +3 -0
  22. package/dist/universal/.agents/skills/citable/schemas/regional-network-import.schema.json +55 -0
  23. package/dist/universal/.agents/skills/citable/schemas/schedule.schema.json +1 -1
  24. package/dist/universal/.agents/skills/citable/schemas/source-identity-chain.schema.json +83 -0
  25. package/dist/universal/.agents/skills/citable/scripts/README.md +3 -1
  26. package/dist/universal/.claude/agents/citable/citable-auditor.md +64 -0
  27. package/dist/universal/.claude/agents/citable/citable-semantic-reviewer.md +66 -0
  28. package/dist/universal/.claude/agents/citable/manifest.json +12 -0
  29. package/dist/universal/.claude/skills/citable/SKILL.md +22 -8
  30. package/dist/universal/.claude/skills/citable/VERSION +1 -1
  31. package/dist/universal/.claude/skills/citable/agents/citable-auditor.md +64 -0
  32. package/dist/universal/.claude/skills/citable/agents/citable-semantic-reviewer.md +66 -0
  33. package/dist/universal/.claude/skills/citable/commands/README.md +4 -1
  34. package/dist/universal/.claude/skills/citable/commands/action-findings.md +9 -1
  35. package/dist/universal/.claude/skills/citable/commands/observe-and-act.md +62 -8
  36. package/dist/universal/.claude/skills/citable/commands/plan-audit.md +35 -0
  37. package/dist/universal/.claude/skills/citable/commands/reporting.md +57 -0
  38. package/dist/universal/.claude/skills/citable/manifest.json +34 -16
  39. package/dist/universal/.claude/skills/citable/schemas/action-plan.schema.json +13 -0
  40. package/dist/universal/.claude/skills/citable/schemas/browser-evidence-plan.schema.json +14 -0
  41. package/dist/universal/.claude/skills/citable/schemas/canonical-index-import.schema.json +30 -0
  42. package/dist/universal/.claude/skills/citable/schemas/common.defs.json +12 -1
  43. package/dist/universal/.claude/skills/citable/schemas/corroboration-import.schema.json +48 -0
  44. package/dist/universal/.claude/skills/citable/schemas/entity-graph.schema.json +75 -0
  45. package/dist/universal/.claude/skills/citable/schemas/entity.schema.json +13 -0
  46. package/dist/universal/.claude/skills/citable/schemas/observation.schema.json +1 -1
  47. package/dist/universal/.claude/skills/citable/schemas/page.schema.json +3 -0
  48. package/dist/universal/.claude/skills/citable/schemas/regional-network-import.schema.json +55 -0
  49. package/dist/universal/.claude/skills/citable/schemas/schedule.schema.json +1 -1
  50. package/dist/universal/.claude/skills/citable/schemas/source-identity-chain.schema.json +83 -0
  51. package/dist/universal/.claude/skills/citable/scripts/README.md +3 -1
  52. package/dist/universal/.cursor/skills/citable/SKILL.md +22 -8
  53. package/dist/universal/.cursor/skills/citable/VERSION +1 -1
  54. package/dist/universal/.cursor/skills/citable/agents/citable-auditor.md +64 -0
  55. package/dist/universal/.cursor/skills/citable/agents/citable-semantic-reviewer.md +66 -0
  56. package/dist/universal/.cursor/skills/citable/commands/README.md +4 -1
  57. package/dist/universal/.cursor/skills/citable/commands/action-findings.md +9 -1
  58. package/dist/universal/.cursor/skills/citable/commands/observe-and-act.md +62 -8
  59. package/dist/universal/.cursor/skills/citable/commands/plan-audit.md +35 -0
  60. package/dist/universal/.cursor/skills/citable/commands/reporting.md +57 -0
  61. package/dist/universal/.cursor/skills/citable/manifest.json +29 -16
  62. package/dist/universal/.cursor/skills/citable/schemas/action-plan.schema.json +13 -0
  63. package/dist/universal/.cursor/skills/citable/schemas/browser-evidence-plan.schema.json +14 -0
  64. package/dist/universal/.cursor/skills/citable/schemas/canonical-index-import.schema.json +30 -0
  65. package/dist/universal/.cursor/skills/citable/schemas/common.defs.json +12 -1
  66. package/dist/universal/.cursor/skills/citable/schemas/corroboration-import.schema.json +48 -0
  67. package/dist/universal/.cursor/skills/citable/schemas/entity-graph.schema.json +75 -0
  68. package/dist/universal/.cursor/skills/citable/schemas/entity.schema.json +13 -0
  69. package/dist/universal/.cursor/skills/citable/schemas/observation.schema.json +1 -1
  70. package/dist/universal/.cursor/skills/citable/schemas/page.schema.json +3 -0
  71. package/dist/universal/.cursor/skills/citable/schemas/regional-network-import.schema.json +55 -0
  72. package/dist/universal/.cursor/skills/citable/schemas/schedule.schema.json +1 -1
  73. package/dist/universal/.cursor/skills/citable/schemas/source-identity-chain.schema.json +83 -0
  74. package/dist/universal/.cursor/skills/citable/scripts/README.md +3 -1
  75. package/dist/universal/.gemini/skills/citable/SKILL.md +22 -8
  76. package/dist/universal/.gemini/skills/citable/VERSION +1 -1
  77. package/dist/universal/.gemini/skills/citable/agents/citable-auditor.md +64 -0
  78. package/dist/universal/.gemini/skills/citable/agents/citable-semantic-reviewer.md +66 -0
  79. package/dist/universal/.gemini/skills/citable/commands/README.md +4 -1
  80. package/dist/universal/.gemini/skills/citable/commands/action-findings.md +9 -1
  81. package/dist/universal/.gemini/skills/citable/commands/observe-and-act.md +62 -8
  82. package/dist/universal/.gemini/skills/citable/commands/plan-audit.md +35 -0
  83. package/dist/universal/.gemini/skills/citable/commands/reporting.md +57 -0
  84. package/dist/universal/.gemini/skills/citable/manifest.json +29 -16
  85. package/dist/universal/.gemini/skills/citable/schemas/action-plan.schema.json +13 -0
  86. package/dist/universal/.gemini/skills/citable/schemas/browser-evidence-plan.schema.json +14 -0
  87. package/dist/universal/.gemini/skills/citable/schemas/canonical-index-import.schema.json +30 -0
  88. package/dist/universal/.gemini/skills/citable/schemas/common.defs.json +12 -1
  89. package/dist/universal/.gemini/skills/citable/schemas/corroboration-import.schema.json +48 -0
  90. package/dist/universal/.gemini/skills/citable/schemas/entity-graph.schema.json +75 -0
  91. package/dist/universal/.gemini/skills/citable/schemas/entity.schema.json +13 -0
  92. package/dist/universal/.gemini/skills/citable/schemas/observation.schema.json +1 -1
  93. package/dist/universal/.gemini/skills/citable/schemas/page.schema.json +3 -0
  94. package/dist/universal/.gemini/skills/citable/schemas/regional-network-import.schema.json +55 -0
  95. package/dist/universal/.gemini/skills/citable/schemas/schedule.schema.json +1 -1
  96. package/dist/universal/.gemini/skills/citable/schemas/source-identity-chain.schema.json +83 -0
  97. package/dist/universal/.gemini/skills/citable/scripts/README.md +3 -1
  98. package/dist/universal/.github/skills/citable/SKILL.md +22 -8
  99. package/dist/universal/.github/skills/citable/VERSION +1 -1
  100. package/dist/universal/.github/skills/citable/agents/citable-auditor.md +64 -0
  101. package/dist/universal/.github/skills/citable/agents/citable-semantic-reviewer.md +66 -0
  102. package/dist/universal/.github/skills/citable/commands/README.md +4 -1
  103. package/dist/universal/.github/skills/citable/commands/action-findings.md +9 -1
  104. package/dist/universal/.github/skills/citable/commands/observe-and-act.md +62 -8
  105. package/dist/universal/.github/skills/citable/commands/plan-audit.md +35 -0
  106. package/dist/universal/.github/skills/citable/commands/reporting.md +57 -0
  107. package/dist/universal/.github/skills/citable/manifest.json +29 -16
  108. package/dist/universal/.github/skills/citable/schemas/action-plan.schema.json +13 -0
  109. package/dist/universal/.github/skills/citable/schemas/browser-evidence-plan.schema.json +14 -0
  110. package/dist/universal/.github/skills/citable/schemas/canonical-index-import.schema.json +30 -0
  111. package/dist/universal/.github/skills/citable/schemas/common.defs.json +12 -1
  112. package/dist/universal/.github/skills/citable/schemas/corroboration-import.schema.json +48 -0
  113. package/dist/universal/.github/skills/citable/schemas/entity-graph.schema.json +75 -0
  114. package/dist/universal/.github/skills/citable/schemas/entity.schema.json +13 -0
  115. package/dist/universal/.github/skills/citable/schemas/observation.schema.json +1 -1
  116. package/dist/universal/.github/skills/citable/schemas/page.schema.json +3 -0
  117. package/dist/universal/.github/skills/citable/schemas/regional-network-import.schema.json +55 -0
  118. package/dist/universal/.github/skills/citable/schemas/schedule.schema.json +1 -1
  119. package/dist/universal/.github/skills/citable/schemas/source-identity-chain.schema.json +83 -0
  120. package/dist/universal/.github/skills/citable/scripts/README.md +3 -1
  121. package/dist/universal/.kiro/skills/citable/SKILL.md +22 -8
  122. package/dist/universal/.kiro/skills/citable/VERSION +1 -1
  123. package/dist/universal/.kiro/skills/citable/agents/citable-auditor.md +64 -0
  124. package/dist/universal/.kiro/skills/citable/agents/citable-semantic-reviewer.md +66 -0
  125. package/dist/universal/.kiro/skills/citable/commands/README.md +4 -1
  126. package/dist/universal/.kiro/skills/citable/commands/action-findings.md +9 -1
  127. package/dist/universal/.kiro/skills/citable/commands/observe-and-act.md +62 -8
  128. package/dist/universal/.kiro/skills/citable/commands/plan-audit.md +35 -0
  129. package/dist/universal/.kiro/skills/citable/commands/reporting.md +57 -0
  130. package/dist/universal/.kiro/skills/citable/manifest.json +29 -16
  131. package/dist/universal/.kiro/skills/citable/schemas/action-plan.schema.json +13 -0
  132. package/dist/universal/.kiro/skills/citable/schemas/browser-evidence-plan.schema.json +14 -0
  133. package/dist/universal/.kiro/skills/citable/schemas/canonical-index-import.schema.json +30 -0
  134. package/dist/universal/.kiro/skills/citable/schemas/common.defs.json +12 -1
  135. package/dist/universal/.kiro/skills/citable/schemas/corroboration-import.schema.json +48 -0
  136. package/dist/universal/.kiro/skills/citable/schemas/entity-graph.schema.json +75 -0
  137. package/dist/universal/.kiro/skills/citable/schemas/entity.schema.json +13 -0
  138. package/dist/universal/.kiro/skills/citable/schemas/observation.schema.json +1 -1
  139. package/dist/universal/.kiro/skills/citable/schemas/page.schema.json +3 -0
  140. package/dist/universal/.kiro/skills/citable/schemas/regional-network-import.schema.json +55 -0
  141. package/dist/universal/.kiro/skills/citable/schemas/schedule.schema.json +1 -1
  142. package/dist/universal/.kiro/skills/citable/schemas/source-identity-chain.schema.json +83 -0
  143. package/dist/universal/.kiro/skills/citable/scripts/README.md +3 -1
  144. package/dist/universal/.opencode/skills/citable/SKILL.md +22 -8
  145. package/dist/universal/.opencode/skills/citable/VERSION +1 -1
  146. package/dist/universal/.opencode/skills/citable/agents/citable-auditor.md +64 -0
  147. package/dist/universal/.opencode/skills/citable/agents/citable-semantic-reviewer.md +66 -0
  148. package/dist/universal/.opencode/skills/citable/commands/README.md +4 -1
  149. package/dist/universal/.opencode/skills/citable/commands/action-findings.md +9 -1
  150. package/dist/universal/.opencode/skills/citable/commands/observe-and-act.md +62 -8
  151. package/dist/universal/.opencode/skills/citable/commands/plan-audit.md +35 -0
  152. package/dist/universal/.opencode/skills/citable/commands/reporting.md +57 -0
  153. package/dist/universal/.opencode/skills/citable/manifest.json +29 -16
  154. package/dist/universal/.opencode/skills/citable/schemas/action-plan.schema.json +13 -0
  155. package/dist/universal/.opencode/skills/citable/schemas/browser-evidence-plan.schema.json +14 -0
  156. package/dist/universal/.opencode/skills/citable/schemas/canonical-index-import.schema.json +30 -0
  157. package/dist/universal/.opencode/skills/citable/schemas/common.defs.json +12 -1
  158. package/dist/universal/.opencode/skills/citable/schemas/corroboration-import.schema.json +48 -0
  159. package/dist/universal/.opencode/skills/citable/schemas/entity-graph.schema.json +75 -0
  160. package/dist/universal/.opencode/skills/citable/schemas/entity.schema.json +13 -0
  161. package/dist/universal/.opencode/skills/citable/schemas/observation.schema.json +1 -1
  162. package/dist/universal/.opencode/skills/citable/schemas/page.schema.json +3 -0
  163. package/dist/universal/.opencode/skills/citable/schemas/regional-network-import.schema.json +55 -0
  164. package/dist/universal/.opencode/skills/citable/schemas/schedule.schema.json +1 -1
  165. package/dist/universal/.opencode/skills/citable/schemas/source-identity-chain.schema.json +83 -0
  166. package/dist/universal/.opencode/skills/citable/scripts/README.md +3 -1
  167. package/dist/universal/.pi/agent/skills/citable/SKILL.md +22 -8
  168. package/dist/universal/.pi/agent/skills/citable/VERSION +1 -1
  169. package/dist/universal/.pi/agent/skills/citable/agents/citable-auditor.md +64 -0
  170. package/dist/universal/.pi/agent/skills/citable/agents/citable-semantic-reviewer.md +66 -0
  171. package/dist/universal/.pi/agent/skills/citable/commands/README.md +4 -1
  172. package/dist/universal/.pi/agent/skills/citable/commands/action-findings.md +9 -1
  173. package/dist/universal/.pi/agent/skills/citable/commands/observe-and-act.md +62 -8
  174. package/dist/universal/.pi/agent/skills/citable/commands/plan-audit.md +35 -0
  175. package/dist/universal/.pi/agent/skills/citable/commands/reporting.md +57 -0
  176. package/dist/universal/.pi/agent/skills/citable/manifest.json +29 -16
  177. package/dist/universal/.pi/agent/skills/citable/schemas/action-plan.schema.json +13 -0
  178. package/dist/universal/.pi/agent/skills/citable/schemas/browser-evidence-plan.schema.json +14 -0
  179. package/dist/universal/.pi/agent/skills/citable/schemas/canonical-index-import.schema.json +30 -0
  180. package/dist/universal/.pi/agent/skills/citable/schemas/common.defs.json +12 -1
  181. package/dist/universal/.pi/agent/skills/citable/schemas/corroboration-import.schema.json +48 -0
  182. package/dist/universal/.pi/agent/skills/citable/schemas/entity-graph.schema.json +75 -0
  183. package/dist/universal/.pi/agent/skills/citable/schemas/entity.schema.json +13 -0
  184. package/dist/universal/.pi/agent/skills/citable/schemas/observation.schema.json +1 -1
  185. package/dist/universal/.pi/agent/skills/citable/schemas/page.schema.json +3 -0
  186. package/dist/universal/.pi/agent/skills/citable/schemas/regional-network-import.schema.json +55 -0
  187. package/dist/universal/.pi/agent/skills/citable/schemas/schedule.schema.json +1 -1
  188. package/dist/universal/.pi/agent/skills/citable/schemas/source-identity-chain.schema.json +83 -0
  189. package/dist/universal/.pi/agent/skills/citable/scripts/README.md +3 -1
  190. package/dist/universal/.qoder/skills/citable/SKILL.md +22 -8
  191. package/dist/universal/.qoder/skills/citable/VERSION +1 -1
  192. package/dist/universal/.qoder/skills/citable/agents/citable-auditor.md +64 -0
  193. package/dist/universal/.qoder/skills/citable/agents/citable-semantic-reviewer.md +66 -0
  194. package/dist/universal/.qoder/skills/citable/commands/README.md +4 -1
  195. package/dist/universal/.qoder/skills/citable/commands/action-findings.md +9 -1
  196. package/dist/universal/.qoder/skills/citable/commands/observe-and-act.md +62 -8
  197. package/dist/universal/.qoder/skills/citable/commands/plan-audit.md +35 -0
  198. package/dist/universal/.qoder/skills/citable/commands/reporting.md +57 -0
  199. package/dist/universal/.qoder/skills/citable/manifest.json +29 -16
  200. package/dist/universal/.qoder/skills/citable/schemas/action-plan.schema.json +13 -0
  201. package/dist/universal/.qoder/skills/citable/schemas/browser-evidence-plan.schema.json +14 -0
  202. package/dist/universal/.qoder/skills/citable/schemas/canonical-index-import.schema.json +30 -0
  203. package/dist/universal/.qoder/skills/citable/schemas/common.defs.json +12 -1
  204. package/dist/universal/.qoder/skills/citable/schemas/corroboration-import.schema.json +48 -0
  205. package/dist/universal/.qoder/skills/citable/schemas/entity-graph.schema.json +75 -0
  206. package/dist/universal/.qoder/skills/citable/schemas/entity.schema.json +13 -0
  207. package/dist/universal/.qoder/skills/citable/schemas/observation.schema.json +1 -1
  208. package/dist/universal/.qoder/skills/citable/schemas/page.schema.json +3 -0
  209. package/dist/universal/.qoder/skills/citable/schemas/regional-network-import.schema.json +55 -0
  210. package/dist/universal/.qoder/skills/citable/schemas/schedule.schema.json +1 -1
  211. package/dist/universal/.qoder/skills/citable/schemas/source-identity-chain.schema.json +83 -0
  212. package/dist/universal/.qoder/skills/citable/scripts/README.md +3 -1
  213. package/dist/universal/.rovodev/skills/citable/SKILL.md +22 -8
  214. package/dist/universal/.rovodev/skills/citable/VERSION +1 -1
  215. package/dist/universal/.rovodev/skills/citable/agents/citable-auditor.md +64 -0
  216. package/dist/universal/.rovodev/skills/citable/agents/citable-semantic-reviewer.md +66 -0
  217. package/dist/universal/.rovodev/skills/citable/commands/README.md +4 -1
  218. package/dist/universal/.rovodev/skills/citable/commands/action-findings.md +9 -1
  219. package/dist/universal/.rovodev/skills/citable/commands/observe-and-act.md +62 -8
  220. package/dist/universal/.rovodev/skills/citable/commands/plan-audit.md +35 -0
  221. package/dist/universal/.rovodev/skills/citable/commands/reporting.md +57 -0
  222. package/dist/universal/.rovodev/skills/citable/manifest.json +29 -16
  223. package/dist/universal/.rovodev/skills/citable/schemas/action-plan.schema.json +13 -0
  224. package/dist/universal/.rovodev/skills/citable/schemas/browser-evidence-plan.schema.json +14 -0
  225. package/dist/universal/.rovodev/skills/citable/schemas/canonical-index-import.schema.json +30 -0
  226. package/dist/universal/.rovodev/skills/citable/schemas/common.defs.json +12 -1
  227. package/dist/universal/.rovodev/skills/citable/schemas/corroboration-import.schema.json +48 -0
  228. package/dist/universal/.rovodev/skills/citable/schemas/entity-graph.schema.json +75 -0
  229. package/dist/universal/.rovodev/skills/citable/schemas/entity.schema.json +13 -0
  230. package/dist/universal/.rovodev/skills/citable/schemas/observation.schema.json +1 -1
  231. package/dist/universal/.rovodev/skills/citable/schemas/page.schema.json +3 -0
  232. package/dist/universal/.rovodev/skills/citable/schemas/regional-network-import.schema.json +55 -0
  233. package/dist/universal/.rovodev/skills/citable/schemas/schedule.schema.json +1 -1
  234. package/dist/universal/.rovodev/skills/citable/schemas/source-identity-chain.schema.json +83 -0
  235. package/dist/universal/.rovodev/skills/citable/scripts/README.md +3 -1
  236. package/dist/universal/.trae/skills/citable/SKILL.md +22 -8
  237. package/dist/universal/.trae/skills/citable/VERSION +1 -1
  238. package/dist/universal/.trae/skills/citable/agents/citable-auditor.md +64 -0
  239. package/dist/universal/.trae/skills/citable/agents/citable-semantic-reviewer.md +66 -0
  240. package/dist/universal/.trae/skills/citable/commands/README.md +4 -1
  241. package/dist/universal/.trae/skills/citable/commands/action-findings.md +9 -1
  242. package/dist/universal/.trae/skills/citable/commands/observe-and-act.md +62 -8
  243. package/dist/universal/.trae/skills/citable/commands/plan-audit.md +35 -0
  244. package/dist/universal/.trae/skills/citable/commands/reporting.md +57 -0
  245. package/dist/universal/.trae/skills/citable/manifest.json +29 -16
  246. package/dist/universal/.trae/skills/citable/schemas/action-plan.schema.json +13 -0
  247. package/dist/universal/.trae/skills/citable/schemas/browser-evidence-plan.schema.json +14 -0
  248. package/dist/universal/.trae/skills/citable/schemas/canonical-index-import.schema.json +30 -0
  249. package/dist/universal/.trae/skills/citable/schemas/common.defs.json +12 -1
  250. package/dist/universal/.trae/skills/citable/schemas/corroboration-import.schema.json +48 -0
  251. package/dist/universal/.trae/skills/citable/schemas/entity-graph.schema.json +75 -0
  252. package/dist/universal/.trae/skills/citable/schemas/entity.schema.json +13 -0
  253. package/dist/universal/.trae/skills/citable/schemas/observation.schema.json +1 -1
  254. package/dist/universal/.trae/skills/citable/schemas/page.schema.json +3 -0
  255. package/dist/universal/.trae/skills/citable/schemas/regional-network-import.schema.json +55 -0
  256. package/dist/universal/.trae/skills/citable/schemas/schedule.schema.json +1 -1
  257. package/dist/universal/.trae/skills/citable/schemas/source-identity-chain.schema.json +83 -0
  258. package/dist/universal/.trae/skills/citable/scripts/README.md +3 -1
  259. package/dist/universal/.trae-cn/skills/citable/SKILL.md +22 -8
  260. package/dist/universal/.trae-cn/skills/citable/VERSION +1 -1
  261. package/dist/universal/.trae-cn/skills/citable/agents/citable-auditor.md +64 -0
  262. package/dist/universal/.trae-cn/skills/citable/agents/citable-semantic-reviewer.md +66 -0
  263. package/dist/universal/.trae-cn/skills/citable/commands/README.md +4 -1
  264. package/dist/universal/.trae-cn/skills/citable/commands/action-findings.md +9 -1
  265. package/dist/universal/.trae-cn/skills/citable/commands/observe-and-act.md +62 -8
  266. package/dist/universal/.trae-cn/skills/citable/commands/plan-audit.md +35 -0
  267. package/dist/universal/.trae-cn/skills/citable/commands/reporting.md +57 -0
  268. package/dist/universal/.trae-cn/skills/citable/manifest.json +29 -16
  269. package/dist/universal/.trae-cn/skills/citable/schemas/action-plan.schema.json +13 -0
  270. package/dist/universal/.trae-cn/skills/citable/schemas/browser-evidence-plan.schema.json +14 -0
  271. package/dist/universal/.trae-cn/skills/citable/schemas/canonical-index-import.schema.json +30 -0
  272. package/dist/universal/.trae-cn/skills/citable/schemas/common.defs.json +12 -1
  273. package/dist/universal/.trae-cn/skills/citable/schemas/corroboration-import.schema.json +48 -0
  274. package/dist/universal/.trae-cn/skills/citable/schemas/entity-graph.schema.json +75 -0
  275. package/dist/universal/.trae-cn/skills/citable/schemas/entity.schema.json +13 -0
  276. package/dist/universal/.trae-cn/skills/citable/schemas/observation.schema.json +1 -1
  277. package/dist/universal/.trae-cn/skills/citable/schemas/page.schema.json +3 -0
  278. package/dist/universal/.trae-cn/skills/citable/schemas/regional-network-import.schema.json +55 -0
  279. package/dist/universal/.trae-cn/skills/citable/schemas/schedule.schema.json +1 -1
  280. package/dist/universal/.trae-cn/skills/citable/schemas/source-identity-chain.schema.json +83 -0
  281. package/dist/universal/.trae-cn/skills/citable/scripts/README.md +3 -1
  282. package/dist/universal/manifest.json +306 -195
  283. package/package.json +1 -1
  284. package/schemas/action-plan.schema.json +13 -0
  285. package/schemas/browser-evidence-plan.schema.json +14 -0
  286. package/schemas/canonical-index-import.schema.json +30 -0
  287. package/schemas/common.defs.json +12 -1
  288. package/schemas/corroboration-import.schema.json +48 -0
  289. package/schemas/entity-graph.schema.json +75 -0
  290. package/schemas/entity.schema.json +13 -0
  291. package/schemas/observation.schema.json +1 -1
  292. package/schemas/page.schema.json +3 -0
  293. package/schemas/regional-network-import.schema.json +55 -0
  294. package/schemas/schedule.schema.json +1 -1
  295. package/schemas/source-identity-chain.schema.json +83 -0
  296. package/scripts/build-dist.js +36 -3
  297. package/skill/SKILL.md +22 -8
  298. package/skill/agents/citable-auditor.md +64 -0
  299. package/skill/agents/citable-semantic-reviewer.md +66 -0
  300. package/skill/commands/README.md +4 -1
  301. package/skill/commands/action-findings.md +9 -1
  302. package/skill/commands/observe-and-act.md +62 -8
  303. package/skill/commands/plan-audit.md +35 -0
  304. package/skill/commands/reporting.md +57 -0
  305. package/src/cli/index.js +115 -15
  306. package/src/commands/actionPlan.js +12 -1
  307. package/src/commands/audit.js +4 -0
  308. package/src/commands/connect.js +29 -0
  309. package/src/commands/context.js +15 -0
  310. package/src/commands/delivery.js +86 -2
  311. package/src/commands/demo.js +36 -0
  312. package/src/commands/fixtures/demo/.citable/claims.yaml +27 -0
  313. package/src/commands/fixtures/demo/.citable/competitors.yaml +3 -0
  314. package/src/commands/fixtures/demo/.citable/config.yaml +18 -0
  315. package/src/commands/fixtures/demo/.citable/crawlers.yaml +30 -0
  316. package/src/commands/fixtures/demo/.citable/entities.yaml +28 -0
  317. package/src/commands/fixtures/demo/.citable/evidence.yaml +19 -0
  318. package/src/commands/fixtures/demo/.citable/experiments.yaml +3 -0
  319. package/src/commands/fixtures/demo/.citable/pages.yaml +54 -0
  320. package/src/commands/fixtures/demo/.citable/prompts.yaml +11 -0
  321. package/src/commands/fixtures/demo/.citable/queries.yaml +10 -0
  322. package/src/commands/fixtures/demo/site/index.html +12 -0
  323. package/src/commands/fixtures/demo/site/learn/execution-governance/index.html +14 -0
  324. package/src/commands/fixtures/demo/site/pricing/index.html +10 -0
  325. package/src/commands/fixtures/demo/site/products/gatekeeper/index.html +15 -0
  326. package/src/commands/fixtures/demo/site/robots.txt +7 -0
  327. package/src/commands/fixtures/demo/site/sitemap.xml +7 -0
  328. package/src/commands/init.js +5 -2
  329. package/src/commands/monitor.js +35 -0
  330. package/src/commands/observe.js +315 -15
  331. package/src/commands/planAudit.js +151 -0
  332. package/src/commands/reportDashboard.js +21 -0
  333. package/src/commands/reportShareOfVoice.js +60 -0
  334. package/src/commands/schemaCmd.js +5 -1
  335. package/src/commands/substantiate.js +22 -10
  336. package/src/connectors/http.js +6 -3
  337. package/src/connectors/index.js +3 -1
  338. package/src/connectors/webflow.js +224 -0
  339. package/src/connectors/wordpress.js +226 -0
  340. package/src/crawler/fetch.js +34 -6
  341. package/src/detectors/geoReco.js +101 -0
  342. package/src/extractor/page.js +17 -0
  343. package/src/installer/index.js +282 -28
  344. package/src/installer/providers.js +11 -0
  345. package/src/monitoring/alertDelivery.js +98 -0
  346. package/src/observations/browserJourney.js +15 -7
  347. package/src/observations/claimDiff.js +83 -0
  348. package/src/observations/common.js +25 -0
  349. package/src/observations/entityGraph.js +89 -0
  350. package/src/observations/renderParity.js +49 -0
  351. package/src/observations/sourceIdentity.js +62 -0
  352. package/src/observations/stance.js +261 -0
  353. package/src/registries/seed.js +95 -0
  354. package/src/registries/seeds/saas-pricing/claims.yaml +18 -0
  355. package/src/registries/seeds/saas-pricing/entities.yaml +20 -0
  356. package/src/registries/seeds/saas-pricing/seed.json +6 -0
  357. package/src/reporting/dashboard.js +254 -0
  358. package/src/reporting/shareOfVoice.js +362 -0
  359. package/src/shared/checklist.js +19 -0
@@ -0,0 +1,64 @@
1
+ ---
2
+ name: citable-auditor
3
+ description: Run a Citable audit or evidence collection when the user needs a plan, immutable or sealed run, observation, capability diagnosis, or evidence-bounded summary. Not for semantic approval, source remediation, content rewriting, or claims that an outcome is guaranteed.
4
+ tools:
5
+ - Read
6
+ - Glob
7
+ - Grep
8
+ - Bash
9
+ model: inherit
10
+ maxTurns: 20
11
+ skills:
12
+ - citable
13
+ ---
14
+
15
+ You are Citable's evidence-collection specialist. Establish what the target
16
+ makes observable, what the selected method could not collect, and where the
17
+ resulting immutable evidence package lives.
18
+
19
+ ## Authority boundary
20
+
21
+ - You may run the Citable CLI and read its artifacts.
22
+ - Never edit the audited property, its source, its registries, or an existing
23
+ run package.
24
+ - Do not use `curl`, `wget`, raw browser automation, or ad hoc HTTP clients.
25
+ Network collection must go through the applicable guarded Citable command.
26
+ - Do not run `citable apply`, use `--write`, or create implementation facts.
27
+ - Do not infer crawling, indexing, ranking, citation, recommendation,
28
+ inclusion, sentiment, or conversion outcomes.
29
+
30
+ ## Workflow
31
+
32
+ 1. Read repository instructions and identify the target and requested evidence
33
+ question.
34
+ 2. Run `citable doctor` when optional browser, API, OCR, or lab capability is
35
+ relevant. Treat `ready` as prerequisite presence only.
36
+ 3. Run `citable plan-audit --target <target>` when the appropriate scopes or
37
+ collectors are not already explicit. The plan is not evidence.
38
+ 4. Run `citable audit [scope] --target <target>` for deterministic and
39
+ heuristic site findings. Preserve the full audit unless the user explicitly
40
+ requested a scope.
41
+ 5. Run only the relevant `citable observe <mode>` commands for external or
42
+ rendered observations. Preserve provider, method, authority, authenticity,
43
+ collection, and representativeness boundaries.
44
+ 6. Read the run manifest, findings, summary, warnings, incomplete state, and
45
+ checksums before reporting.
46
+
47
+ If prerequisites, authorization, source facts, or required inputs are absent,
48
+ preserve `blocked`, `incomplete`, `not_established`, or `not_evidenced`.
49
+ Never translate one of those states into zero, pass, absence, or failure of the
50
+ external system.
51
+
52
+ ## Return contract
53
+
54
+ Report:
55
+
56
+ 1. target, command, scope, and collection method;
57
+ 2. run ID and artifact directory;
58
+ 3. deterministic observations;
59
+ 4. evidence-backed semantic findings and probabilistic inferences, separately;
60
+ 5. skipped checks, collection failures, limitations, and residual unknowns;
61
+ 6. exact next evidence or owner input required;
62
+ 7. whether semantic review or a governed action plan is the next bounded step.
63
+
64
+ A human-readable report without its run package is not a deliverable.
@@ -0,0 +1,66 @@
1
+ ---
2
+ name: citable-semantic-reviewer
3
+ description: Review semantic questions in an existing Citable run, finding, action, or artifact, including claim support, answer extractability, entity clarity, comparison fairness, and narrative accuracy. Not for collecting new evidence, running audits, editing source, or approving publication.
4
+ tools:
5
+ - Read
6
+ - Glob
7
+ - Grep
8
+ model: inherit
9
+ maxTurns: 15
10
+ skills:
11
+ - citable
12
+ ---
13
+
14
+ You are Citable's read-only semantic reviewer. Evaluate meaning against the
15
+ exact source evidence and review policy without changing technical findings,
16
+ registries, source files, or sealed artifacts.
17
+
18
+ ## Preconditions
19
+
20
+ Require an existing source run, finding, review item, or action artifact. Bind
21
+ the review to the available run ID, finding ID and finding hash, review-item
22
+ hash, policy, subject, captured evidence, and declared limitations. If the
23
+ binding or source material is unavailable, return `review_required` with the
24
+ missing input instead of reconstructing it.
25
+
26
+ ## Review dimensions
27
+
28
+ Apply only dimensions relevant to the requested item:
29
+
30
+ - intent alignment and answer extractability;
31
+ - claim boundedness and evidence strength;
32
+ - entity clarity and source identity;
33
+ - information gain and comparison fairness;
34
+ - recommendation eligibility and narrative accuracy;
35
+ - factual accuracy, accessibility, conversion function, legal defensibility,
36
+ and maintainability.
37
+
38
+ Separate deterministic fact from evidence-backed semantic finding,
39
+ probabilistic inference, strategic hypothesis, experiment result, and
40
+ untestable condition. Never present inference as fact.
41
+
42
+ ## Authority boundary
43
+
44
+ - Never edit source files, registries, findings, review items, action plans, or
45
+ sealed run artifacts.
46
+ - Do not collect new external evidence or treat general knowledge as source-run
47
+ evidence.
48
+ - Do not change a technical failure to pass or accepted risk.
49
+ - Do not mark a claim `verified`, complete a required review, approve
50
+ publication, or satisfy an owner-controlled gate. Automation cannot upgrade
51
+ evidence authority.
52
+ - Preserve `review_required` when evidence or accountable authority is missing.
53
+ - Preserve `adjudication_required` when current authorized reviewers disagree.
54
+
55
+ ## Return contract
56
+
57
+ For each reviewed item, report:
58
+
59
+ 1. artifact binding and review dimensions applied;
60
+ 2. supporting and contradicting evidence;
61
+ 3. semantic assessment with confidence and false-positive conditions;
62
+ 4. missing evidence, ambiguity, residual risk, and required owner input;
63
+ 5. proposed disposition: `review_required`, `adjudication_required`, or a
64
+ recommendation for an authorized human reviewer to record.
65
+
66
+ Your output is review context, not an approval or a mutation instruction.
@@ -21,9 +21,12 @@ intent, not executability, so statuses are strict:
21
21
  | /citable validate, validate-claims, validate-evidence, validate-schema, validate-links | implemented |
22
22
  | /citable compare-snapshots / validate-regression | implemented |
23
23
  | /citable action-plan | implemented — writes ordered, source-run-bound action artifacts outside immutable evidence packages |
24
- | /citable observe | implemented — render, index, citation, crawler-log, passage, consensus, performance, and corroboration evidence |
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
27
  | /citable monitor | implemented — compares immutable observation runs and emits evidence-linked alerts |
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
+ | /citable report share-of-voice | implemented — joins competitor registry against recorded citation observations to compute verified share-of-citation |
27
30
  | /citable metrics import | implemented — validates declared CSV/JSON metrics and writes immutable observations |
28
31
  | /citable objectives init / validate | implemented — user-owned metric selection, cohorts, windows, and guardrails |
29
32
  | /citable evaluate | implemented — independent baseline/evaluation comparisons with inconclusive handling |
@@ -15,6 +15,11 @@ failure_behaviour: missing or invalid source run -> fail; review-required action
15
15
  3. Assign owners. Resolve each blocked action's exact required input. Missing
16
16
  facts, evidence, legal review, or semantic review are blockers, not drafting
17
17
  opportunities.
18
+ Treat `decision_owner` independently from implementation responsibility when
19
+ the generated plan names different roles. Empty `depends_on_action_ids`,
20
+ `leading_indicators`, or `monitoring_window` fields mean those relationships
21
+ are not established by the source evidence; do not fill them with generic
22
+ SEO assumptions.
18
23
  4. Capture a before state for each subject. Use the finding's evidence,
19
24
  preferred remediation, unsafe shortcuts, and detector lineage as the change
20
25
  boundary.
@@ -24,7 +29,10 @@ failure_behaviour: missing or invalid source run -> fail; review-required action
24
29
  writes use the loader/saver and retain history. Content claims remain equal
25
30
  to or narrower than their registered scope.
26
31
  7. Build and test the target repository. Run the generated verification
27
- command, then compare the new audit to the source run.
32
+ command, evaluate the explicit `failure_condition`, then compare the new
33
+ audit to the source run. Monitor only the listed leading indicators over the
34
+ declared window; an empty list or null window does not authorize an inferred
35
+ outcome measure.
28
36
  8. Close only with evidence: resolved detector/subject pair, before/after run
29
37
  IDs, diff, reviewer, and residual risk. Mark blocked, accepted risk, and
30
38
  false positive explicitly; do not silently drop findings.
@@ -19,22 +19,69 @@ failure_behaviour: unavailable dependency, credential, source run, reviewer, exa
19
19
  browser version, device, JavaScript, locale, consent, authentication state,
20
20
  and ordered interaction steps. Fill/select values are referenced by
21
21
  environment-variable name and are never written to the plan or artifacts.
22
+ Targets, subresources, and navigation steps must remain on public network
23
+ destinations; unsupported schemes and configured non-public address ranges
24
+ are blocked. DNS validation does not pin the later browser connection, so
25
+ isolated execution with egress controls remains required for untrusted URLs.
26
+ Plans may include a strict semantic-impact policy covering text retention,
27
+ heading, link, and structured-data parity. Deterministic violations name a
28
+ review owner and always remain `review_required`; passing configured checks
29
+ does not establish semantic or retrieval equivalence.
22
30
  - `observe index --input <JSON>` imports owner exports. With `--target`,
23
31
  `--site-url`, and `GSC_ACCESS_TOKEN`, it calls Google URL Inspection, which
24
32
  reports the indexed version rather than performing a live indexability test.
25
33
  - `observe citations --input <JSON>` imports complete controlled observations.
26
34
  With `--endpoint`, the input is a versioned prompt corpus and each prompt runs
27
35
  1-20 times (default 3) through the disclosed adapter protocol. An API is not
28
- presumed equivalent to a provider's consumer search experience.
36
+ presumed equivalent to a provider's consumer search experience. Adapter
37
+ endpoints require HTTPS, must resolve only to public destinations, and may
38
+ not redirect.
39
+ Citation objects may include a strict `source_profile` containing declared
40
+ format, word and heading counts, freshness date, and evidence features.
41
+ Competitive summaries group these profiles by cited domain. Imported profile
42
+ values are comparative metadata, not independently fetched or verified
43
+ qualities.
29
44
  - `observe logs --input <JSON>` imports server/CDN records. User-agent matches
30
45
  without IP verification remain low confidence.
46
+ - `observe probes --target <URL> [--region <label>]` sends one bounded synthetic
47
+ request for every active identity in `crawlers.yaml`, preserving response
48
+ bodies, safe diagnostic headers, redirects, and coarse edge/challenge
49
+ classification. The request merely spoofs each declared user agent: it does
50
+ not establish crawler identity, production access, regional
51
+ representativeness, or alignment between declared policy and actual crawler
52
+ treatment.
53
+ - `observe network --input <JSON>` accepts a strict regional runner export with
54
+ region, network, user agent, DNS answers, TLS authorization/fingerprint,
55
+ status, latency, and cache state for every probe. Citable validates and seals
56
+ these observations but does not operate the runner or infer global coverage.
31
57
  - `observe passages|consensus --target <dir|URL>` performs static extraction.
58
+ Passage observations include raw/extracted byte and visible-token ratios plus
59
+ exact repeated header, navigation, aside, and footer regions across the
60
+ audited page cohort. These classifications are descriptive and do not imply
61
+ content harm, retrieval effects, or ranking effects.
62
+ Versioned passage records also join declared page prompts, questions, and
63
+ expected answer components. This only creates review context:
64
+ question-to-passage suitability remains `review_required`.
65
+ Consensus normalizes parseable HTTP, sitemap, and visible/meta freshness
66
+ dates, preserves conflicts and invalid values, and compares the current
67
+ content hash with the latest immutable page snapshot. A detected hash change
68
+ establishes only an interval after the prior capture—not an exact change
69
+ time, cause, quality improvement, or ranking effect. Lifecycle review dates
70
+ remain a separate governance signal.
71
+ `observe consensus --input <canonical-index-import.json>` additionally joins
72
+ schema-validated engine-selected canonical observations while preserving
73
+ their collection authority and authenticity. Missing engine observations
74
+ remain `null`; they are never inferred from static declarations.
32
75
  - `observe performance` imports evidence or calls CrUX with `CRUX_API_KEY`.
33
76
  `--lighthouse` instead performs 1-5 local lab runs (default 3) using optional
34
77
  `lighthouse` and `chrome-launcher` peers, preserving each result and a median
35
78
  summary. Lab evidence remains separate from CrUX field evidence.
36
- - `observe corroboration --input <JSON>` records observable external mentions;
37
- controlled or unverified sources do not become authority claims.
79
+ - `observe corroboration --input <JSON>` accepts only the versioned
80
+ `corroboration-import` contract. Each mention must disclose source control,
81
+ relationship, collection authority, authenticity, and dataset coverage.
82
+ Legacy independence booleans and undisclosed control fail closed. An
83
+ observable mention does not establish source authority, claim support,
84
+ ranking impact, citation eligibility, or representative coverage.
38
85
 
39
86
  ## Guarded remediation
40
87
 
@@ -44,9 +91,16 @@ reviewer, matches the exact file hash, and identifies exactly one source string.
44
91
  `--write` applies only after all operations validate. Build, tests, semantic
45
92
  review, re-audit, and snapshot comparison remain mandatory afterward.
46
93
 
47
- ## Monitoring
94
+ ## Monitoring and alert delivery
48
95
 
49
- `monitor [runA runB]` reports state changes, missing observations, index loss,
50
- canonical disagreement, and citation-presence changes. Alerts are evidence
51
- changes, not causal explanations or ranking conclusions. Schedule it in CI at
52
- the cadence defined by lifecycle and experiment records.
96
+ `monitor [runA runB] [--webhook <url>] [--min-severity <level>]` reports state
97
+ changes, missing observations, index loss, canonical disagreement, and
98
+ citation-presence changes. With `--webhook`, detected regressions matching or
99
+ exceeding `--min-severity` (default `medium`) are dispatched as sealed JSON
100
+ alert payloads and logged under `.citable/monitoring/deliveries/`. Destination
101
+ URLs must be public network destinations (private/loopback addresses are blocked).
102
+ Alerts are evidence changes, not causal explanations or ranking conclusions.
103
+
104
+ Scheduled monitoring (`schedules run <id> --monitor [--webhook <url>]`) automatically
105
+ compares the scheduled audit against the preceding baseline run and dispatches
106
+ regression alerts when configured in `schedules.yaml`.
@@ -0,0 +1,35 @@
1
+ ---
2
+ command: /citable plan-audit --target <dir|url>
3
+ purpose: Inspect observable target signals and propose an evidence-bounded audit and collector plan without creating a run or treating inferred business profiles as facts.
4
+ preconditions: [readable built output directory or permitted public URL]
5
+ artifacts_created: []
6
+ failure_behaviour: missing or unreadable target -> fail; fewer than two supporting signals -> no profile established; unavailable optional prerequisite -> collector blocked
7
+ ---
8
+
9
+ # Profile-aware audit planning
10
+
11
+ 1. Run `citable plan-audit --target <dir|url>` before choosing optional
12
+ collectors. The command builds the same bounded site model used by audit but
13
+ does not create an audit, observation, snapshot, or remediation artifact.
14
+ 2. Treat every returned profile as `probabilistic_inference`. Preserve its
15
+ confidence and evidence list. A profile changes semantic emphasis only; it
16
+ does not suppress detectors or establish the target's business model.
17
+ 3. Use the proposed full audit as the deterministic baseline. Do not translate
18
+ an inferred profile into a reduced audit that could hide cross-discipline
19
+ findings.
20
+ 4. Read collector states independently. `available` means the prerequisite is
21
+ present, not that browser launch, authorization, property access, quota, or
22
+ collection will succeed. `blocked` lists the missing input and remains
23
+ unresolved until the relevant collector produces evidence.
24
+ 5. Keep profile-specific emphasis bounded:
25
+ SaaS focuses review on pricing, capability claims, and product identity;
26
+ e-commerce on product/offer support; local on identity/NAP and review
27
+ evidence; publisher on authorship/freshness; multilingual on hreflang and
28
+ parity; API/docs on machine interfaces and authentication claims.
29
+
30
+ # Refusal boundary
31
+
32
+ Do not invent an industry, customer segment, locale strategy, product catalog,
33
+ local presence, or API capability to complete the plan. If no profile reaches
34
+ the two-signal threshold, report that none is established and run the full
35
+ audit without profile-specific emphasis.
@@ -0,0 +1,57 @@
1
+ ---
2
+ command: /citable report dashboard [--last N] [--since <run-id>]
3
+ purpose: Fold the summary each audit run already recorded into a cross-run Markdown table and self-contained HTML page without deriving new findings, scores, or causal explanations.
4
+ preconditions: [at least one finalized audit run under .citable/runs/ with a summary.json]
5
+ failure_behaviour: fewer than two audit runs -> explicit insufficient-history state, not a trend; unreadable summary or manifest -> run reported under skipped runs; non-integer --last -> fail
6
+ artifacts_created: [.citable/reports/dashboard.md, .citable/reports/dashboard.html]
7
+ ---
8
+
9
+ # Cross-run evidence reporting
10
+
11
+ 1. Run `citable report dashboard` to read severity counts, retrieval
12
+ eligibility, source extraction and support, and observed citation presence
13
+ rate across run history. Every value is copied from a run's own
14
+ `summary.json`. The command runs no detector, opens no network connection,
15
+ and never edits an immutable run package.
16
+ 2. Treat the output as derived, not canonical. It is written to
17
+ `.citable/reports/`, alongside `monitor` and `action-plan` derived
18
+ artifacts. The evidence of record remains `.citable/runs/<run-id>/`.
19
+ 3. Window the history with `--since <run-id>` (keeps that run and everything
20
+ after it) and `--last N` (keeps the final N runs). Run IDs sort
21
+ chronologically, so both filters are deterministic.
22
+ 4. Read fewer than two runs as no trend. With zero or one run the dashboard
23
+ states insufficient history explicitly instead of drawing a line through a
24
+ single point. Direction, rate of change, and improvement are not established
25
+ by one observation.
26
+ 5. Read skipped runs as a gap in the series, not as absence of a problem. A run
27
+ whose `summary.json` or `manifest.json` cannot be parsed, and an observation
28
+ run whose summary records no severity or posture, is listed with its reason
29
+ rather than counted as zero findings.
30
+ 6. Read a falling count as an observed difference between runs, not as proof
31
+ that a condition was fixed. Use `citable compare-snapshots` to establish
32
+ whether two runs are comparable at all — detector set, configuration,
33
+ observation method, and tool version all change what a count means.
34
+
35
+ # Refusal boundary
36
+
37
+ Do not present the dashboard as an AI visibility score, a ranking forecast, or
38
+ a measure of citation likelihood. The three posture dimensions are reported
39
+ separately and are never combined into a single number. Do not interpolate,
40
+ estimate, or carry forward a missing value: a run with no evidenced citation
41
+ presence rate is omitted from that trend line, not filled in. Do not attribute
42
+ any observed change to a specific intervention.
43
+
44
+ # Share of voice and competitor reporting
45
+
46
+ 1. Run `citable report share-of-voice [--last N] [--since <run-id>]` to evaluate
47
+ first-party and competitor citation presence and share across recorded
48
+ `observe citation` runs.
49
+ 2. Contested competitor domains are loaded from `.citable/competitors.yaml`.
50
+ Citations whose canonical URL matches declared competitor domains are joined
51
+ into per-prompt and aggregate shares.
52
+ 3. Competitor share is calculated strictly from evidenced observations; missing
53
+ observations or unevaluated prompts are never filled with fabricated zeros or
54
+ interpolated estimates.
55
+ 4. Outputs are written to `.citable/reports/share-of-voice.md` and
56
+ `.citable/reports/share-of-voice.html`.
57
+
package/src/cli/index.js CHANGED
@@ -3,6 +3,8 @@ import path from 'node:path';
3
3
  import { pathToFileURL } from 'node:url';
4
4
  import { init } from '../commands/init.js';
5
5
  import { audit } from '../commands/audit.js';
6
+ import { planAudit } from '../commands/planAudit.js';
7
+ import { demo } from '../commands/demo.js';
6
8
  import { validate } from '../commands/validate.js';
7
9
  import { mapClaims } from '../commands/mapClaims.js';
8
10
  import { substantiate } from '../commands/substantiate.js';
@@ -14,9 +16,11 @@ import { projectGithub, runSchedule } from '../commands/delivery.js';
14
16
  import { actionPlan } from '../commands/actionPlan.js';
15
17
  import { observe } from '../commands/observe.js';
16
18
  import { applyRemediation } from '../commands/applyRemediation.js';
17
- import { monitor } from '../commands/monitor.js';
19
+ import { monitor, monitorAndAlert } from '../commands/monitor.js';
20
+ import { reportDashboard } from '../commands/reportDashboard.js';
21
+ import { reportShareOfVoice } from '../commands/reportShareOfVoice.js';
18
22
  import { evaluateObjective, importMetrics, initializeObjective, validateObjectives } from '../commands/measurement.js';
19
- import { configureConnection, connectionStatus, discoverConnections, disconnectConnection, syncConnection, validateConnection } from '../commands/connect.js';
23
+ import { configureConnection, connectionStatus, discoverConnections, disconnectConnection, syncConnection, validateConnection, readCmsContent, applyCmsRemediation } from '../commands/connect.js';
20
24
  import { evaluateDispositions, validateGovernance } from '../commands/governance.js';
21
25
  import { evaluateReviews, initializeSamplingPlan, prioritizeReviews, queueReviews, selectSample } from '../commands/reviews.js';
22
26
  import { selfUpgradeCommand, selfUpgradeExitCode } from '../commands/selfUpgrade.js';
@@ -49,9 +53,11 @@ Commands
49
53
  uninstall Remove managed Citable skill files
50
54
  list List detected providers and installation state
51
55
  doctor Diagnose installer, provider, and integrity problems
52
- init Initialize .citable/ context and registries (non-destructive)
56
+ init [--seed <name>] Initialize .citable/ context and registries (non-destructive)
57
+ demo Run the detector engine against a bundled offline example (no setup, no network)
53
58
  audit [scope] Run detectors; scopes: technical seo aeo geo architecture entity
54
59
  claims evidence schema lifecycle corroboration
60
+ plan-audit Inspect target signals and propose an evidence-bounded audit plan
55
61
  inspect <page> Profile one page (URL path or source file)
56
62
  map-claims Extract material claim candidates from pages (--write to save)
57
63
  substantiate Assess claim/evidence status (--write to apply downgrades)
@@ -60,15 +66,20 @@ Commands
60
66
  compare-snapshots [a b] Regression diff between two audit runs
61
67
  action-plan [run] Turn audit findings into ordered remediation work
62
68
  observe <mode> Collect render, index, citation, log, Bing, passage,
63
- consensus, performance, corroboration, media evidence, or representation evidence
69
+ consensus, performance, corroboration, crawler or regional probes,
70
+ media evidence, or representation evidence
64
71
  apply Apply a reviewed, hash-locked remediation spec
65
- monitor [runA runB] Compare observation runs and emit regression alerts
72
+ monitor [runA runB] Compare observation runs and emit regression alerts [--webhook <url>]
73
+ report dashboard [--last N] [--since <run-id>] Render a cross-run evidence trend as Markdown + HTML
74
+ report share-of-voice [--last N] Compute first-party and competitor citation share
66
75
  metrics import Import declared metric observations from CSV/JSON
67
76
  connect status List optional connectors and configured connections
68
77
  connect configure Configure non-secret connection state (--write to save)
69
78
  connect discover Discover provider properties using environment auth
70
79
  connect validate Verify configured property access
71
80
  connect sync Collect declared metrics into immutable observations
81
+ connect read Read CMS content and hash for remediation targeting
82
+ connect apply Apply reviewed, hash-locked CMS remediation (--write to apply)
72
83
  connect disconnect Remove optional connection state (--write to confirm)
73
84
  objectives init Validate/add one objective from --input (--write to save)
74
85
  objectives validate Validate objective contracts and metric references
@@ -80,7 +91,7 @@ Commands
80
91
  reviews plan Validate/add a sampling plan from --input
81
92
  reviews sample [plan] Select a reproducible census or seeded random sample
82
93
  reviews evaluate Detect stale decisions and require disagreement adjudication
83
- schedules run [id] Execute an active version-pinned audit schedule
94
+ schedules run [id] Execute an active version-pinned schedule [--monitor] [--webhook <url>]
84
95
  project github [run] Render non-authoritative GitHub annotations from a run
85
96
  corpus evaluate Evaluate a disclosed real-property acceptance corpus
86
97
  corpus publish Validate and project an owner-authorized public corpus
@@ -129,6 +140,7 @@ Options
129
140
  --user-agent <value> Disclosed request identity for representation evidence
130
141
  --lighthouse Run local, repeated Lighthouse lab observations
131
142
  --ocr Explicitly request optional OCR for media images
143
+ --seed <name> Overlay a bundled starter registry seed (all entries default to unverified)
132
144
  --write Persist registry changes (map-claims, substantiate)
133
145
  --json Machine-readable output only
134
146
 
@@ -150,6 +162,8 @@ function parseArgs(argv) {
150
162
  else if (a === '--input') args.input = argv[++i];
151
163
  else if (a === '--output') args.output = argv[++i];
152
164
  else if (a === '--run') args.runId = argv[++i];
165
+ else if (a === '--since') args.since = argv[++i];
166
+ else if (a === '--last') args.last = argv[++i];
153
167
  else if (a === '--provider') args.provider = argv[++i];
154
168
  else if (a === '--dataset') args.dataset = argv[++i];
155
169
  else if (a === '--connection-id') args.connectionId = argv[++i];
@@ -168,6 +182,13 @@ function parseArgs(argv) {
168
182
  else if (a === '--user-agent') args.userAgent = argv[++i];
169
183
  else if (a === '--timeout') args.timeout = Number(argv[++i]);
170
184
  else if (a === '--force') args.force = true;
185
+ else if (a === '--seed') args.seed = argv[++i];
186
+ else if (a === '--webhook') args.webhook = argv[++i];
187
+ else if (a === '--min-severity') args.minSeverity = argv[++i];
188
+ else if (a === '--monitor') args.monitor = true;
189
+ else if (a === '--target-id') args.targetId = argv[++i];
190
+ else if (a === '--reviewer') args.reviewer = argv[++i];
191
+ else if (a === '--entity') args.entity = argv[++i];
171
192
  else args._.push(a);
172
193
  }
173
194
  return args;
@@ -191,8 +212,25 @@ export async function main(argv = process.argv.slice(2), options = {}) {
191
212
  try {
192
213
  switch (cmd) {
193
214
  case 'init': {
194
- const r = init(root, { force: args.force });
195
- out(args, `Initialized .citable/\n created: ${r.created.join(', ') || 'nothing'}\n skipped: ${r.skipped.join(', ') || 'nothing'}\n detected framework: ${r.detected.framework ?? 'unknown'}\n unresolved assumptions:\n${r.unresolved.map((u) => ` - ${u}`).join('\n') || ' none'}`, r);
215
+ const r = init(root, { force: args.force, seed: args.seed });
216
+ const seedLines = r.seed
217
+ ? `\n seed "${r.seed.seedName}@${r.seed.seedVersion}": ` +
218
+ Object.entries(r.seed.registriesTouched).map(([k, v]) => `${k}(+${v.added}/skip ${v.skipped})`).join(', ') +
219
+ (r.seed.warnings.length ? `\n seed warnings:\n${r.seed.warnings.map((w) => ` - ${w}`).join('\n')}` : '')
220
+ : '';
221
+ out(args, `Initialized .citable/\n created: ${r.created.join(', ') || 'nothing'}\n skipped: ${r.skipped.join(', ') || 'nothing'}\n detected framework: ${r.detected.framework ?? 'unknown'}\n unresolved assumptions:\n${r.unresolved.map((u) => ` - ${u}`).join('\n') || ' none'}${seedLines}`, r);
222
+ break;
223
+ }
224
+ case 'demo': {
225
+ const r = await demo();
226
+ const nsLines = Object.entries(r.summary.by_namespace)
227
+ .sort(([a], [b]) => a.localeCompare(b))
228
+ .map(([ns, n]) => ` ${ns}: ${n} finding(s)`).join('\n') || ' no findings';
229
+ out(args,
230
+ `citable demo — offline audit of a bundled synthetic example site (not live, not a real company)\n${nsLines}\n\n` +
231
+ `This is a fixed demonstration fixture, not your site. Run "citable init" to set up your own governed context, ` +
232
+ `then "citable audit --target <dir|url>" against your real site.`,
233
+ r);
196
234
  break;
197
235
  }
198
236
  case 'audit': {
@@ -201,6 +239,13 @@ export async function main(argv = process.argv.slice(2), options = {}) {
201
239
  out(args, `Audit ${r.runId}: ${r.summary.total} finding(s) [${Object.entries(r.summary.by_severity).map(([k, v]) => `${k}:${v}`).join(' ')}]\nEvidence package: ${r.dir}\nReport: ${path.join(r.dir, 'report.md')}\nStatus: ${r.manifest.status}${r.manifest.incomplete_checks.length ? `\nIncomplete: ${r.manifest.incomplete_checks.join('; ')}` : ''}`, { runId: r.runId, dir: r.dir, summary: r.summary, status: r.manifest.status });
202
240
  break;
203
241
  }
242
+ case 'plan-audit': {
243
+ const r = await planAudit(root, { target: args.target, baseUrl: args.baseUrl, refDate: args.refDate });
244
+ const profiles = r.classification.profiles.map((profile) => `${profile.id}:${profile.confidence}`).join(', ') || 'none established';
245
+ const collectors = r.collectors.map((collector) => ` ${collector.id}: ${collector.status}`).join('\n');
246
+ out(args, `plan-audit\nProfiles (inference): ${profiles}\nAudit: ${r.audit.command}\nCollectors:\n${collectors}\n\nNo audit or observation package was created.`, r);
247
+ break;
248
+ }
204
249
  case 'inspect': {
205
250
  if (!args._[0]) throw new Error('usage: citable inspect <page> --target <dir|url>');
206
251
  const r = await inspect(root, args._[0], { target: args.target, baseUrl: args.baseUrl, refDate: args.refDate });
@@ -243,7 +288,11 @@ export async function main(argv = process.argv.slice(2), options = {}) {
243
288
  case 'observe': {
244
289
  const mode = args._[0];
245
290
  const r = await observe(root, mode, args);
246
- out(args, `observe ${mode}: ${r.summary.total} observation(s) [${Object.entries(r.summary.by_state).map(([k, v]) => `${k}:${v}`).join(' ')}]\nEvidence package: ${r.dir}\nStatus: ${r.manifest.status}`, r);
291
+ const claimDiffLine = r.summary.citation_metrics?.claim_diff
292
+ ? `\nClaim diff: ${Object.entries(r.summary.citation_metrics.claim_diff).map(([k, v]) => `${k}:${v}`).join(' ')}` : '';
293
+ const stanceLine = r.summary.stance_metrics
294
+ ? `\nStance summary: favorable:${r.summary.stance_metrics.favorable} neutral:${r.summary.stance_metrics.neutral} unfavorable:${r.summary.stance_metrics.unfavorable} mixed:${r.summary.stance_metrics.mixed} review_required:${r.summary.stance_metrics.review_required}` : '';
295
+ out(args, `observe ${mode}: ${r.summary.total} observation(s) [${Object.entries(r.summary.by_state).map(([k, v]) => `${k}:${v}`).join(' ')}]${claimDiffLine}${stanceLine}\nEvidence package: ${r.dir}\nStatus: ${r.manifest.status}`, r);
247
296
  break;
248
297
  }
249
298
  case 'apply': {
@@ -252,11 +301,35 @@ export async function main(argv = process.argv.slice(2), options = {}) {
252
301
  break;
253
302
  }
254
303
  case 'monitor': {
255
- const r = monitor(root, { runA: args._[0], runB: args._[1] });
256
- out(args, `monitor ${r.run_a} → ${r.run_b}: ${r.summary.alerts} alert(s), ${r.summary.critical_or_high} critical/high\nReport: ${path.join(r.dir, 'latest.json')}`, r);
304
+ const r = await monitorAndAlert(root, {
305
+ runA: args._[0],
306
+ runB: args._[1],
307
+ webhookUrl: args.webhook,
308
+ minSeverity: args.minSeverity,
309
+ });
310
+ let msg = `monitor ${r.run_a} → ${r.run_b}: ${r.summary.alerts} alert(s), ${r.summary.critical_or_high} critical/high\nReport: ${path.join(r.dir, 'latest.json')}`;
311
+ if (r.delivery) {
312
+ if (r.delivery.skipped) msg += `\nDelivery: skipped (${r.delivery.reason})`;
313
+ else if (r.delivery.success) msg += `\nDelivery: webhook dispatched to ${r.delivery.target_url} (HTTP ${r.delivery.status_code})`;
314
+ else msg += `\nDelivery: webhook FAILED (${r.delivery.error})`;
315
+ }
316
+ out(args, msg, r);
257
317
  if (r.summary.critical_or_high > 0) process.exitCode = 1;
258
318
  break;
259
319
  }
320
+ case 'report': {
321
+ const sub = args._[0];
322
+ if (sub === 'dashboard') {
323
+ const r = reportDashboard(root, { since: args.since, last: args.last ? Number(args.last) : undefined });
324
+ out(args, `report dashboard: ${r.included} audit run(s) included, ${r.skipped} skipped\nMarkdown: ${r.path_md}\nHTML: ${r.path_html}`, r);
325
+ } else if (sub === 'share-of-voice' || sub === 'citations' || sub === 'share') {
326
+ const r = reportShareOfVoice(root, { since: args.since, last: args.last ? Number(args.last) : undefined });
327
+ out(args, `report share-of-voice: ${r.included} citation run(s) included, ${r.competitors_evaluated} competitor(s) evaluated\nMarkdown: ${r.path_md}\nHTML: ${r.path_html}`, r);
328
+ } else {
329
+ throw new Error('usage: citable report <dashboard|share-of-voice> [--last <n>] [--since <run-id>]');
330
+ }
331
+ break;
332
+ }
260
333
  case 'metrics': {
261
334
  if (args._[0] !== 'import') throw new Error('usage: citable metrics import --provider <name> --input <csv|json>');
262
335
  const r = importMetrics(root, { input: args.input, provider: args.provider });
@@ -281,10 +354,16 @@ export async function main(argv = process.argv.slice(2), options = {}) {
281
354
  } else if (mode === 'sync') {
282
355
  const r = await syncConnection(root, args);
283
356
  out(args, `connect sync ${r.connection_id}: ${r.summary.total} metric observation(s)\nEvidence package: ${r.dir}`, r);
357
+ } else if (mode === 'read') {
358
+ const r = await readCmsContent(root, args);
359
+ out(args, `connect read ${r.connection_id} [${r.target_id}]: title="${r.content.title}" hash=${r.content.content_hash.slice(0, 12)}…\nURL: ${r.content.url || 'n/a'}`, r);
360
+ } else if (mode === 'apply') {
361
+ const r = await applyCmsRemediation(root, args);
362
+ out(args, `connect apply ${r.connection_id} [${r.target_id}]: ${r.status} ${r.dry_run ? '(dry run; use --write to apply)' : 'applied'}\nBefore: ${r.before_hash?.slice(0, 12)}… After: ${r.after_hash?.slice(0, 12)}…\nReviewer: ${r.reviewer}`, r);
284
363
  } else if (mode === 'disconnect') {
285
364
  const r = disconnectConnection(root, args);
286
365
  out(args, `connect disconnect ${r.connection_id}: ${r.disconnected ? 'removed' : 'dry run; use --write to remove'}`, r);
287
- } else throw new Error('usage: citable connect <status|configure|discover|validate|sync> [options]');
366
+ } else throw new Error('usage: citable connect <status|configure|discover|validate|sync|read|apply|disconnect> [options]');
288
367
  break;
289
368
  }
290
369
  case 'objectives': {
@@ -330,9 +409,30 @@ export async function main(argv = process.argv.slice(2), options = {}) {
330
409
  break;
331
410
  }
332
411
  case 'schedules': {
333
- if(args._[0]!=='run') throw new Error('usage: citable schedules run <schedule-id> [--ref-date YYYY-MM-DD]');
334
- const r=await runSchedule(root,{scheduleId:args._[1],refDate:args.refDate});
335
- out(args,`schedule ${r.schedule_execution.schedule_id}: audit ${r.runId}\nEvidence package: ${r.dir}\nExecution record: ${r.execution_file}`,r);
412
+ if (args._[0] !== 'run') throw new Error('usage: citable schedules run <schedule-id> [--ref-date YYYY-MM-DD] [--webhook <url>] [--monitor]');
413
+ const r = await runSchedule(root, {
414
+ scheduleId: args._[1],
415
+ refDate: args.refDate,
416
+ webhook: args.webhook,
417
+ monitor: args.monitor,
418
+ minSeverity: args.minSeverity,
419
+ });
420
+ let msg = `schedule ${r.schedule_execution.schedule_id}: audit ${r.runId}\nEvidence package: ${r.dir}\nExecution record: ${r.execution_file}`;
421
+ if (r.schedule_execution.monitor) {
422
+ const m = r.schedule_execution.monitor;
423
+ if (m.status === 'insufficient_history') {
424
+ msg += `\nMonitor: insufficient history (${m.message})`;
425
+ } else {
426
+ msg += `\nMonitor: compared to ${m.baseline_run} (${m.regressions_count} regression(s), ${m.summary.regression_critical_or_high} critical/high)`;
427
+ }
428
+ }
429
+ if (r.schedule_execution.alert_delivery) {
430
+ const d = r.schedule_execution.alert_delivery;
431
+ if (d.skipped) msg += `\nAlert delivery: skipped (${d.reason})`;
432
+ else if (d.success) msg += `\nAlert delivery: dispatched to ${d.target_url} (HTTP ${d.status_code})`;
433
+ else msg += `\nAlert delivery: FAILED (${d.error})`;
434
+ }
435
+ out(args, msg, r);
336
436
  break;
337
437
  }
338
438
  case 'project': {