@nebulacomponents/citable 1.13.1 → 1.14.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 (305) hide show
  1. package/CHANGELOG.md +246 -0
  2. package/README.md +43 -5
  3. package/dist/universal/.agents/skills/citable/SKILL.md +13 -4
  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/action-findings.md +9 -1
  8. package/dist/universal/.agents/skills/citable/commands/observe-and-act.md +50 -3
  9. package/dist/universal/.agents/skills/citable/commands/plan-audit.md +35 -0
  10. package/dist/universal/.agents/skills/citable/manifest.json +26 -14
  11. package/dist/universal/.agents/skills/citable/schemas/action-plan.schema.json +13 -0
  12. package/dist/universal/.agents/skills/citable/schemas/browser-evidence-plan.schema.json +14 -0
  13. package/dist/universal/.agents/skills/citable/schemas/canonical-index-import.schema.json +30 -0
  14. package/dist/universal/.agents/skills/citable/schemas/common.defs.json +12 -1
  15. package/dist/universal/.agents/skills/citable/schemas/corroboration-import.schema.json +48 -0
  16. package/dist/universal/.agents/skills/citable/schemas/entity-graph.schema.json +75 -0
  17. package/dist/universal/.agents/skills/citable/schemas/entity.schema.json +13 -0
  18. package/dist/universal/.agents/skills/citable/schemas/observation.schema.json +1 -1
  19. package/dist/universal/.agents/skills/citable/schemas/page.schema.json +3 -0
  20. package/dist/universal/.agents/skills/citable/schemas/regional-network-import.schema.json +55 -0
  21. package/dist/universal/.agents/skills/citable/schemas/source-identity-chain.schema.json +83 -0
  22. package/dist/universal/.agents/skills/citable/scripts/README.md +3 -1
  23. package/dist/universal/.claude/agents/citable/citable-auditor.md +64 -0
  24. package/dist/universal/.claude/agents/citable/citable-semantic-reviewer.md +66 -0
  25. package/dist/universal/.claude/agents/citable/manifest.json +12 -0
  26. package/dist/universal/.claude/skills/citable/SKILL.md +13 -4
  27. package/dist/universal/.claude/skills/citable/VERSION +1 -1
  28. package/dist/universal/.claude/skills/citable/agents/citable-auditor.md +64 -0
  29. package/dist/universal/.claude/skills/citable/agents/citable-semantic-reviewer.md +66 -0
  30. package/dist/universal/.claude/skills/citable/commands/action-findings.md +9 -1
  31. package/dist/universal/.claude/skills/citable/commands/observe-and-act.md +50 -3
  32. package/dist/universal/.claude/skills/citable/commands/plan-audit.md +35 -0
  33. package/dist/universal/.claude/skills/citable/manifest.json +31 -14
  34. package/dist/universal/.claude/skills/citable/schemas/action-plan.schema.json +13 -0
  35. package/dist/universal/.claude/skills/citable/schemas/browser-evidence-plan.schema.json +14 -0
  36. package/dist/universal/.claude/skills/citable/schemas/canonical-index-import.schema.json +30 -0
  37. package/dist/universal/.claude/skills/citable/schemas/common.defs.json +12 -1
  38. package/dist/universal/.claude/skills/citable/schemas/corroboration-import.schema.json +48 -0
  39. package/dist/universal/.claude/skills/citable/schemas/entity-graph.schema.json +75 -0
  40. package/dist/universal/.claude/skills/citable/schemas/entity.schema.json +13 -0
  41. package/dist/universal/.claude/skills/citable/schemas/observation.schema.json +1 -1
  42. package/dist/universal/.claude/skills/citable/schemas/page.schema.json +3 -0
  43. package/dist/universal/.claude/skills/citable/schemas/regional-network-import.schema.json +55 -0
  44. package/dist/universal/.claude/skills/citable/schemas/source-identity-chain.schema.json +83 -0
  45. package/dist/universal/.claude/skills/citable/scripts/README.md +3 -1
  46. package/dist/universal/.cursor/skills/citable/SKILL.md +13 -4
  47. package/dist/universal/.cursor/skills/citable/VERSION +1 -1
  48. package/dist/universal/.cursor/skills/citable/agents/citable-auditor.md +64 -0
  49. package/dist/universal/.cursor/skills/citable/agents/citable-semantic-reviewer.md +66 -0
  50. package/dist/universal/.cursor/skills/citable/commands/action-findings.md +9 -1
  51. package/dist/universal/.cursor/skills/citable/commands/observe-and-act.md +50 -3
  52. package/dist/universal/.cursor/skills/citable/commands/plan-audit.md +35 -0
  53. package/dist/universal/.cursor/skills/citable/manifest.json +26 -14
  54. package/dist/universal/.cursor/skills/citable/schemas/action-plan.schema.json +13 -0
  55. package/dist/universal/.cursor/skills/citable/schemas/browser-evidence-plan.schema.json +14 -0
  56. package/dist/universal/.cursor/skills/citable/schemas/canonical-index-import.schema.json +30 -0
  57. package/dist/universal/.cursor/skills/citable/schemas/common.defs.json +12 -1
  58. package/dist/universal/.cursor/skills/citable/schemas/corroboration-import.schema.json +48 -0
  59. package/dist/universal/.cursor/skills/citable/schemas/entity-graph.schema.json +75 -0
  60. package/dist/universal/.cursor/skills/citable/schemas/entity.schema.json +13 -0
  61. package/dist/universal/.cursor/skills/citable/schemas/observation.schema.json +1 -1
  62. package/dist/universal/.cursor/skills/citable/schemas/page.schema.json +3 -0
  63. package/dist/universal/.cursor/skills/citable/schemas/regional-network-import.schema.json +55 -0
  64. package/dist/universal/.cursor/skills/citable/schemas/source-identity-chain.schema.json +83 -0
  65. package/dist/universal/.cursor/skills/citable/scripts/README.md +3 -1
  66. package/dist/universal/.gemini/skills/citable/SKILL.md +13 -4
  67. package/dist/universal/.gemini/skills/citable/VERSION +1 -1
  68. package/dist/universal/.gemini/skills/citable/agents/citable-auditor.md +64 -0
  69. package/dist/universal/.gemini/skills/citable/agents/citable-semantic-reviewer.md +66 -0
  70. package/dist/universal/.gemini/skills/citable/commands/action-findings.md +9 -1
  71. package/dist/universal/.gemini/skills/citable/commands/observe-and-act.md +50 -3
  72. package/dist/universal/.gemini/skills/citable/commands/plan-audit.md +35 -0
  73. package/dist/universal/.gemini/skills/citable/manifest.json +26 -14
  74. package/dist/universal/.gemini/skills/citable/schemas/action-plan.schema.json +13 -0
  75. package/dist/universal/.gemini/skills/citable/schemas/browser-evidence-plan.schema.json +14 -0
  76. package/dist/universal/.gemini/skills/citable/schemas/canonical-index-import.schema.json +30 -0
  77. package/dist/universal/.gemini/skills/citable/schemas/common.defs.json +12 -1
  78. package/dist/universal/.gemini/skills/citable/schemas/corroboration-import.schema.json +48 -0
  79. package/dist/universal/.gemini/skills/citable/schemas/entity-graph.schema.json +75 -0
  80. package/dist/universal/.gemini/skills/citable/schemas/entity.schema.json +13 -0
  81. package/dist/universal/.gemini/skills/citable/schemas/observation.schema.json +1 -1
  82. package/dist/universal/.gemini/skills/citable/schemas/page.schema.json +3 -0
  83. package/dist/universal/.gemini/skills/citable/schemas/regional-network-import.schema.json +55 -0
  84. package/dist/universal/.gemini/skills/citable/schemas/source-identity-chain.schema.json +83 -0
  85. package/dist/universal/.gemini/skills/citable/scripts/README.md +3 -1
  86. package/dist/universal/.github/skills/citable/SKILL.md +13 -4
  87. package/dist/universal/.github/skills/citable/VERSION +1 -1
  88. package/dist/universal/.github/skills/citable/agents/citable-auditor.md +64 -0
  89. package/dist/universal/.github/skills/citable/agents/citable-semantic-reviewer.md +66 -0
  90. package/dist/universal/.github/skills/citable/commands/action-findings.md +9 -1
  91. package/dist/universal/.github/skills/citable/commands/observe-and-act.md +50 -3
  92. package/dist/universal/.github/skills/citable/commands/plan-audit.md +35 -0
  93. package/dist/universal/.github/skills/citable/manifest.json +26 -14
  94. package/dist/universal/.github/skills/citable/schemas/action-plan.schema.json +13 -0
  95. package/dist/universal/.github/skills/citable/schemas/browser-evidence-plan.schema.json +14 -0
  96. package/dist/universal/.github/skills/citable/schemas/canonical-index-import.schema.json +30 -0
  97. package/dist/universal/.github/skills/citable/schemas/common.defs.json +12 -1
  98. package/dist/universal/.github/skills/citable/schemas/corroboration-import.schema.json +48 -0
  99. package/dist/universal/.github/skills/citable/schemas/entity-graph.schema.json +75 -0
  100. package/dist/universal/.github/skills/citable/schemas/entity.schema.json +13 -0
  101. package/dist/universal/.github/skills/citable/schemas/observation.schema.json +1 -1
  102. package/dist/universal/.github/skills/citable/schemas/page.schema.json +3 -0
  103. package/dist/universal/.github/skills/citable/schemas/regional-network-import.schema.json +55 -0
  104. package/dist/universal/.github/skills/citable/schemas/source-identity-chain.schema.json +83 -0
  105. package/dist/universal/.github/skills/citable/scripts/README.md +3 -1
  106. package/dist/universal/.kiro/skills/citable/SKILL.md +13 -4
  107. package/dist/universal/.kiro/skills/citable/VERSION +1 -1
  108. package/dist/universal/.kiro/skills/citable/agents/citable-auditor.md +64 -0
  109. package/dist/universal/.kiro/skills/citable/agents/citable-semantic-reviewer.md +66 -0
  110. package/dist/universal/.kiro/skills/citable/commands/action-findings.md +9 -1
  111. package/dist/universal/.kiro/skills/citable/commands/observe-and-act.md +50 -3
  112. package/dist/universal/.kiro/skills/citable/commands/plan-audit.md +35 -0
  113. package/dist/universal/.kiro/skills/citable/manifest.json +26 -14
  114. package/dist/universal/.kiro/skills/citable/schemas/action-plan.schema.json +13 -0
  115. package/dist/universal/.kiro/skills/citable/schemas/browser-evidence-plan.schema.json +14 -0
  116. package/dist/universal/.kiro/skills/citable/schemas/canonical-index-import.schema.json +30 -0
  117. package/dist/universal/.kiro/skills/citable/schemas/common.defs.json +12 -1
  118. package/dist/universal/.kiro/skills/citable/schemas/corroboration-import.schema.json +48 -0
  119. package/dist/universal/.kiro/skills/citable/schemas/entity-graph.schema.json +75 -0
  120. package/dist/universal/.kiro/skills/citable/schemas/entity.schema.json +13 -0
  121. package/dist/universal/.kiro/skills/citable/schemas/observation.schema.json +1 -1
  122. package/dist/universal/.kiro/skills/citable/schemas/page.schema.json +3 -0
  123. package/dist/universal/.kiro/skills/citable/schemas/regional-network-import.schema.json +55 -0
  124. package/dist/universal/.kiro/skills/citable/schemas/source-identity-chain.schema.json +83 -0
  125. package/dist/universal/.kiro/skills/citable/scripts/README.md +3 -1
  126. package/dist/universal/.opencode/skills/citable/SKILL.md +13 -4
  127. package/dist/universal/.opencode/skills/citable/VERSION +1 -1
  128. package/dist/universal/.opencode/skills/citable/agents/citable-auditor.md +64 -0
  129. package/dist/universal/.opencode/skills/citable/agents/citable-semantic-reviewer.md +66 -0
  130. package/dist/universal/.opencode/skills/citable/commands/action-findings.md +9 -1
  131. package/dist/universal/.opencode/skills/citable/commands/observe-and-act.md +50 -3
  132. package/dist/universal/.opencode/skills/citable/commands/plan-audit.md +35 -0
  133. package/dist/universal/.opencode/skills/citable/manifest.json +26 -14
  134. package/dist/universal/.opencode/skills/citable/schemas/action-plan.schema.json +13 -0
  135. package/dist/universal/.opencode/skills/citable/schemas/browser-evidence-plan.schema.json +14 -0
  136. package/dist/universal/.opencode/skills/citable/schemas/canonical-index-import.schema.json +30 -0
  137. package/dist/universal/.opencode/skills/citable/schemas/common.defs.json +12 -1
  138. package/dist/universal/.opencode/skills/citable/schemas/corroboration-import.schema.json +48 -0
  139. package/dist/universal/.opencode/skills/citable/schemas/entity-graph.schema.json +75 -0
  140. package/dist/universal/.opencode/skills/citable/schemas/entity.schema.json +13 -0
  141. package/dist/universal/.opencode/skills/citable/schemas/observation.schema.json +1 -1
  142. package/dist/universal/.opencode/skills/citable/schemas/page.schema.json +3 -0
  143. package/dist/universal/.opencode/skills/citable/schemas/regional-network-import.schema.json +55 -0
  144. package/dist/universal/.opencode/skills/citable/schemas/source-identity-chain.schema.json +83 -0
  145. package/dist/universal/.opencode/skills/citable/scripts/README.md +3 -1
  146. package/dist/universal/.pi/agent/skills/citable/SKILL.md +13 -4
  147. package/dist/universal/.pi/agent/skills/citable/VERSION +1 -1
  148. package/dist/universal/.pi/agent/skills/citable/agents/citable-auditor.md +64 -0
  149. package/dist/universal/.pi/agent/skills/citable/agents/citable-semantic-reviewer.md +66 -0
  150. package/dist/universal/.pi/agent/skills/citable/commands/action-findings.md +9 -1
  151. package/dist/universal/.pi/agent/skills/citable/commands/observe-and-act.md +50 -3
  152. package/dist/universal/.pi/agent/skills/citable/commands/plan-audit.md +35 -0
  153. package/dist/universal/.pi/agent/skills/citable/manifest.json +26 -14
  154. package/dist/universal/.pi/agent/skills/citable/schemas/action-plan.schema.json +13 -0
  155. package/dist/universal/.pi/agent/skills/citable/schemas/browser-evidence-plan.schema.json +14 -0
  156. package/dist/universal/.pi/agent/skills/citable/schemas/canonical-index-import.schema.json +30 -0
  157. package/dist/universal/.pi/agent/skills/citable/schemas/common.defs.json +12 -1
  158. package/dist/universal/.pi/agent/skills/citable/schemas/corroboration-import.schema.json +48 -0
  159. package/dist/universal/.pi/agent/skills/citable/schemas/entity-graph.schema.json +75 -0
  160. package/dist/universal/.pi/agent/skills/citable/schemas/entity.schema.json +13 -0
  161. package/dist/universal/.pi/agent/skills/citable/schemas/observation.schema.json +1 -1
  162. package/dist/universal/.pi/agent/skills/citable/schemas/page.schema.json +3 -0
  163. package/dist/universal/.pi/agent/skills/citable/schemas/regional-network-import.schema.json +55 -0
  164. package/dist/universal/.pi/agent/skills/citable/schemas/source-identity-chain.schema.json +83 -0
  165. package/dist/universal/.pi/agent/skills/citable/scripts/README.md +3 -1
  166. package/dist/universal/.qoder/skills/citable/SKILL.md +13 -4
  167. package/dist/universal/.qoder/skills/citable/VERSION +1 -1
  168. package/dist/universal/.qoder/skills/citable/agents/citable-auditor.md +64 -0
  169. package/dist/universal/.qoder/skills/citable/agents/citable-semantic-reviewer.md +66 -0
  170. package/dist/universal/.qoder/skills/citable/commands/action-findings.md +9 -1
  171. package/dist/universal/.qoder/skills/citable/commands/observe-and-act.md +50 -3
  172. package/dist/universal/.qoder/skills/citable/commands/plan-audit.md +35 -0
  173. package/dist/universal/.qoder/skills/citable/manifest.json +26 -14
  174. package/dist/universal/.qoder/skills/citable/schemas/action-plan.schema.json +13 -0
  175. package/dist/universal/.qoder/skills/citable/schemas/browser-evidence-plan.schema.json +14 -0
  176. package/dist/universal/.qoder/skills/citable/schemas/canonical-index-import.schema.json +30 -0
  177. package/dist/universal/.qoder/skills/citable/schemas/common.defs.json +12 -1
  178. package/dist/universal/.qoder/skills/citable/schemas/corroboration-import.schema.json +48 -0
  179. package/dist/universal/.qoder/skills/citable/schemas/entity-graph.schema.json +75 -0
  180. package/dist/universal/.qoder/skills/citable/schemas/entity.schema.json +13 -0
  181. package/dist/universal/.qoder/skills/citable/schemas/observation.schema.json +1 -1
  182. package/dist/universal/.qoder/skills/citable/schemas/page.schema.json +3 -0
  183. package/dist/universal/.qoder/skills/citable/schemas/regional-network-import.schema.json +55 -0
  184. package/dist/universal/.qoder/skills/citable/schemas/source-identity-chain.schema.json +83 -0
  185. package/dist/universal/.qoder/skills/citable/scripts/README.md +3 -1
  186. package/dist/universal/.rovodev/skills/citable/SKILL.md +13 -4
  187. package/dist/universal/.rovodev/skills/citable/VERSION +1 -1
  188. package/dist/universal/.rovodev/skills/citable/agents/citable-auditor.md +64 -0
  189. package/dist/universal/.rovodev/skills/citable/agents/citable-semantic-reviewer.md +66 -0
  190. package/dist/universal/.rovodev/skills/citable/commands/action-findings.md +9 -1
  191. package/dist/universal/.rovodev/skills/citable/commands/observe-and-act.md +50 -3
  192. package/dist/universal/.rovodev/skills/citable/commands/plan-audit.md +35 -0
  193. package/dist/universal/.rovodev/skills/citable/manifest.json +26 -14
  194. package/dist/universal/.rovodev/skills/citable/schemas/action-plan.schema.json +13 -0
  195. package/dist/universal/.rovodev/skills/citable/schemas/browser-evidence-plan.schema.json +14 -0
  196. package/dist/universal/.rovodev/skills/citable/schemas/canonical-index-import.schema.json +30 -0
  197. package/dist/universal/.rovodev/skills/citable/schemas/common.defs.json +12 -1
  198. package/dist/universal/.rovodev/skills/citable/schemas/corroboration-import.schema.json +48 -0
  199. package/dist/universal/.rovodev/skills/citable/schemas/entity-graph.schema.json +75 -0
  200. package/dist/universal/.rovodev/skills/citable/schemas/entity.schema.json +13 -0
  201. package/dist/universal/.rovodev/skills/citable/schemas/observation.schema.json +1 -1
  202. package/dist/universal/.rovodev/skills/citable/schemas/page.schema.json +3 -0
  203. package/dist/universal/.rovodev/skills/citable/schemas/regional-network-import.schema.json +55 -0
  204. package/dist/universal/.rovodev/skills/citable/schemas/source-identity-chain.schema.json +83 -0
  205. package/dist/universal/.rovodev/skills/citable/scripts/README.md +3 -1
  206. package/dist/universal/.trae/skills/citable/SKILL.md +13 -4
  207. package/dist/universal/.trae/skills/citable/VERSION +1 -1
  208. package/dist/universal/.trae/skills/citable/agents/citable-auditor.md +64 -0
  209. package/dist/universal/.trae/skills/citable/agents/citable-semantic-reviewer.md +66 -0
  210. package/dist/universal/.trae/skills/citable/commands/action-findings.md +9 -1
  211. package/dist/universal/.trae/skills/citable/commands/observe-and-act.md +50 -3
  212. package/dist/universal/.trae/skills/citable/commands/plan-audit.md +35 -0
  213. package/dist/universal/.trae/skills/citable/manifest.json +26 -14
  214. package/dist/universal/.trae/skills/citable/schemas/action-plan.schema.json +13 -0
  215. package/dist/universal/.trae/skills/citable/schemas/browser-evidence-plan.schema.json +14 -0
  216. package/dist/universal/.trae/skills/citable/schemas/canonical-index-import.schema.json +30 -0
  217. package/dist/universal/.trae/skills/citable/schemas/common.defs.json +12 -1
  218. package/dist/universal/.trae/skills/citable/schemas/corroboration-import.schema.json +48 -0
  219. package/dist/universal/.trae/skills/citable/schemas/entity-graph.schema.json +75 -0
  220. package/dist/universal/.trae/skills/citable/schemas/entity.schema.json +13 -0
  221. package/dist/universal/.trae/skills/citable/schemas/observation.schema.json +1 -1
  222. package/dist/universal/.trae/skills/citable/schemas/page.schema.json +3 -0
  223. package/dist/universal/.trae/skills/citable/schemas/regional-network-import.schema.json +55 -0
  224. package/dist/universal/.trae/skills/citable/schemas/source-identity-chain.schema.json +83 -0
  225. package/dist/universal/.trae/skills/citable/scripts/README.md +3 -1
  226. package/dist/universal/.trae-cn/skills/citable/SKILL.md +13 -4
  227. package/dist/universal/.trae-cn/skills/citable/VERSION +1 -1
  228. package/dist/universal/.trae-cn/skills/citable/agents/citable-auditor.md +64 -0
  229. package/dist/universal/.trae-cn/skills/citable/agents/citable-semantic-reviewer.md +66 -0
  230. package/dist/universal/.trae-cn/skills/citable/commands/action-findings.md +9 -1
  231. package/dist/universal/.trae-cn/skills/citable/commands/observe-and-act.md +50 -3
  232. package/dist/universal/.trae-cn/skills/citable/commands/plan-audit.md +35 -0
  233. package/dist/universal/.trae-cn/skills/citable/manifest.json +26 -14
  234. package/dist/universal/.trae-cn/skills/citable/schemas/action-plan.schema.json +13 -0
  235. package/dist/universal/.trae-cn/skills/citable/schemas/browser-evidence-plan.schema.json +14 -0
  236. package/dist/universal/.trae-cn/skills/citable/schemas/canonical-index-import.schema.json +30 -0
  237. package/dist/universal/.trae-cn/skills/citable/schemas/common.defs.json +12 -1
  238. package/dist/universal/.trae-cn/skills/citable/schemas/corroboration-import.schema.json +48 -0
  239. package/dist/universal/.trae-cn/skills/citable/schemas/entity-graph.schema.json +75 -0
  240. package/dist/universal/.trae-cn/skills/citable/schemas/entity.schema.json +13 -0
  241. package/dist/universal/.trae-cn/skills/citable/schemas/observation.schema.json +1 -1
  242. package/dist/universal/.trae-cn/skills/citable/schemas/page.schema.json +3 -0
  243. package/dist/universal/.trae-cn/skills/citable/schemas/regional-network-import.schema.json +55 -0
  244. package/dist/universal/.trae-cn/skills/citable/schemas/source-identity-chain.schema.json +83 -0
  245. package/dist/universal/.trae-cn/skills/citable/scripts/README.md +3 -1
  246. package/dist/universal/manifest.json +270 -171
  247. package/package.json +1 -1
  248. package/schemas/action-plan.schema.json +13 -0
  249. package/schemas/browser-evidence-plan.schema.json +14 -0
  250. package/schemas/canonical-index-import.schema.json +30 -0
  251. package/schemas/common.defs.json +12 -1
  252. package/schemas/corroboration-import.schema.json +48 -0
  253. package/schemas/entity-graph.schema.json +75 -0
  254. package/schemas/entity.schema.json +13 -0
  255. package/schemas/observation.schema.json +1 -1
  256. package/schemas/page.schema.json +3 -0
  257. package/schemas/regional-network-import.schema.json +55 -0
  258. package/schemas/source-identity-chain.schema.json +83 -0
  259. package/scripts/build-dist.js +36 -3
  260. package/skill/SKILL.md +13 -4
  261. package/skill/agents/citable-auditor.md +64 -0
  262. package/skill/agents/citable-semantic-reviewer.md +66 -0
  263. package/skill/commands/action-findings.md +9 -1
  264. package/skill/commands/observe-and-act.md +50 -3
  265. package/skill/commands/plan-audit.md +35 -0
  266. package/src/cli/index.js +38 -5
  267. package/src/commands/actionPlan.js +12 -1
  268. package/src/commands/audit.js +4 -0
  269. package/src/commands/demo.js +36 -0
  270. package/src/commands/fixtures/demo/.citable/claims.yaml +27 -0
  271. package/src/commands/fixtures/demo/.citable/competitors.yaml +3 -0
  272. package/src/commands/fixtures/demo/.citable/config.yaml +18 -0
  273. package/src/commands/fixtures/demo/.citable/crawlers.yaml +30 -0
  274. package/src/commands/fixtures/demo/.citable/entities.yaml +28 -0
  275. package/src/commands/fixtures/demo/.citable/evidence.yaml +19 -0
  276. package/src/commands/fixtures/demo/.citable/experiments.yaml +3 -0
  277. package/src/commands/fixtures/demo/.citable/pages.yaml +54 -0
  278. package/src/commands/fixtures/demo/.citable/prompts.yaml +11 -0
  279. package/src/commands/fixtures/demo/.citable/queries.yaml +10 -0
  280. package/src/commands/fixtures/demo/site/index.html +12 -0
  281. package/src/commands/fixtures/demo/site/learn/execution-governance/index.html +14 -0
  282. package/src/commands/fixtures/demo/site/pricing/index.html +10 -0
  283. package/src/commands/fixtures/demo/site/products/gatekeeper/index.html +15 -0
  284. package/src/commands/fixtures/demo/site/robots.txt +7 -0
  285. package/src/commands/fixtures/demo/site/sitemap.xml +7 -0
  286. package/src/commands/init.js +5 -2
  287. package/src/commands/observe.js +313 -15
  288. package/src/commands/planAudit.js +151 -0
  289. package/src/commands/schemaCmd.js +5 -1
  290. package/src/commands/substantiate.js +22 -10
  291. package/src/crawler/fetch.js +34 -6
  292. package/src/extractor/page.js +17 -0
  293. package/src/installer/index.js +282 -28
  294. package/src/installer/providers.js +11 -0
  295. package/src/observations/browserJourney.js +15 -7
  296. package/src/observations/claimDiff.js +83 -0
  297. package/src/observations/common.js +15 -0
  298. package/src/observations/entityGraph.js +89 -0
  299. package/src/observations/renderParity.js +49 -0
  300. package/src/observations/sourceIdentity.js +62 -0
  301. package/src/registries/seed.js +95 -0
  302. package/src/registries/seeds/saas-pricing/claims.yaml +18 -0
  303. package/src/registries/seeds/saas-pricing/entities.yaml +20 -0
  304. package/src/registries/seeds/saas-pricing/seed.json +6 -0
  305. package/src/shared/checklist.js +19 -0
@@ -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.
@@ -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
 
@@ -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.
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';
@@ -49,9 +51,11 @@ Commands
49
51
  uninstall Remove managed Citable skill files
50
52
  list List detected providers and installation state
51
53
  doctor Diagnose installer, provider, and integrity problems
52
- init Initialize .citable/ context and registries (non-destructive)
54
+ init [--seed <name>] Initialize .citable/ context and registries (non-destructive)
55
+ demo Run the detector engine against a bundled offline example (no setup, no network)
53
56
  audit [scope] Run detectors; scopes: technical seo aeo geo architecture entity
54
57
  claims evidence schema lifecycle corroboration
58
+ plan-audit Inspect target signals and propose an evidence-bounded audit plan
55
59
  inspect <page> Profile one page (URL path or source file)
56
60
  map-claims Extract material claim candidates from pages (--write to save)
57
61
  substantiate Assess claim/evidence status (--write to apply downgrades)
@@ -60,7 +64,8 @@ Commands
60
64
  compare-snapshots [a b] Regression diff between two audit runs
61
65
  action-plan [run] Turn audit findings into ordered remediation work
62
66
  observe <mode> Collect render, index, citation, log, Bing, passage,
63
- consensus, performance, corroboration, media evidence, or representation evidence
67
+ consensus, performance, corroboration, crawler or regional probes,
68
+ media evidence, or representation evidence
64
69
  apply Apply a reviewed, hash-locked remediation spec
65
70
  monitor [runA runB] Compare observation runs and emit regression alerts
66
71
  metrics import Import declared metric observations from CSV/JSON
@@ -129,6 +134,7 @@ Options
129
134
  --user-agent <value> Disclosed request identity for representation evidence
130
135
  --lighthouse Run local, repeated Lighthouse lab observations
131
136
  --ocr Explicitly request optional OCR for media images
137
+ --seed <name> Overlay a bundled starter registry seed (all entries default to unverified)
132
138
  --write Persist registry changes (map-claims, substantiate)
133
139
  --json Machine-readable output only
134
140
 
@@ -168,6 +174,7 @@ function parseArgs(argv) {
168
174
  else if (a === '--user-agent') args.userAgent = argv[++i];
169
175
  else if (a === '--timeout') args.timeout = Number(argv[++i]);
170
176
  else if (a === '--force') args.force = true;
177
+ else if (a === '--seed') args.seed = argv[++i];
171
178
  else args._.push(a);
172
179
  }
173
180
  return args;
@@ -191,8 +198,25 @@ export async function main(argv = process.argv.slice(2), options = {}) {
191
198
  try {
192
199
  switch (cmd) {
193
200
  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);
201
+ const r = init(root, { force: args.force, seed: args.seed });
202
+ const seedLines = r.seed
203
+ ? `\n seed "${r.seed.seedName}@${r.seed.seedVersion}": ` +
204
+ Object.entries(r.seed.registriesTouched).map(([k, v]) => `${k}(+${v.added}/skip ${v.skipped})`).join(', ') +
205
+ (r.seed.warnings.length ? `\n seed warnings:\n${r.seed.warnings.map((w) => ` - ${w}`).join('\n')}` : '')
206
+ : '';
207
+ 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);
208
+ break;
209
+ }
210
+ case 'demo': {
211
+ const r = await demo();
212
+ const nsLines = Object.entries(r.summary.by_namespace)
213
+ .sort(([a], [b]) => a.localeCompare(b))
214
+ .map(([ns, n]) => ` ${ns}: ${n} finding(s)`).join('\n') || ' no findings';
215
+ out(args,
216
+ `citable demo — offline audit of a bundled synthetic example site (not live, not a real company)\n${nsLines}\n\n` +
217
+ `This is a fixed demonstration fixture, not your site. Run "citable init" to set up your own governed context, ` +
218
+ `then "citable audit --target <dir|url>" against your real site.`,
219
+ r);
196
220
  break;
197
221
  }
198
222
  case 'audit': {
@@ -201,6 +225,13 @@ export async function main(argv = process.argv.slice(2), options = {}) {
201
225
  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
226
  break;
203
227
  }
228
+ case 'plan-audit': {
229
+ const r = await planAudit(root, { target: args.target, baseUrl: args.baseUrl, refDate: args.refDate });
230
+ const profiles = r.classification.profiles.map((profile) => `${profile.id}:${profile.confidence}`).join(', ') || 'none established';
231
+ const collectors = r.collectors.map((collector) => ` ${collector.id}: ${collector.status}`).join('\n');
232
+ out(args, `plan-audit\nProfiles (inference): ${profiles}\nAudit: ${r.audit.command}\nCollectors:\n${collectors}\n\nNo audit or observation package was created.`, r);
233
+ break;
234
+ }
204
235
  case 'inspect': {
205
236
  if (!args._[0]) throw new Error('usage: citable inspect <page> --target <dir|url>');
206
237
  const r = await inspect(root, args._[0], { target: args.target, baseUrl: args.baseUrl, refDate: args.refDate });
@@ -243,7 +274,9 @@ export async function main(argv = process.argv.slice(2), options = {}) {
243
274
  case 'observe': {
244
275
  const mode = args._[0];
245
276
  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);
277
+ const claimDiffLine = r.summary.citation_metrics?.claim_diff
278
+ ? `\nClaim diff: ${Object.entries(r.summary.citation_metrics.claim_diff).map(([k, v]) => `${k}:${v}`).join(' ')}` : '';
279
+ out(args, `observe ${mode}: ${r.summary.total} observation(s) [${Object.entries(r.summary.by_state).map(([k, v]) => `${k}:${v}`).join(' ')}]${claimDiffLine}\nEvidence package: ${r.dir}\nStatus: ${r.manifest.status}`, r);
247
280
  break;
248
281
  }
249
282
  case 'apply': {
@@ -2,6 +2,7 @@ import fs from 'node:fs';
2
2
  import path from 'node:path';
3
3
  import { readJson, writeJson, sha256, nowIso } from '../shared/io.js';
4
4
  import { validateAgainst } from '../shared/schemaValidator.js';
5
+ import { checklistItem, toStringArray } from '../shared/checklist.js';
5
6
 
6
7
  const SEVERITY = { critical: 0, high: 1, medium: 2, low: 3, informational: 3, experimental: 3 };
7
8
  const PHASE = { unblock: 0, governance: 1, content: 2, optimization: 3 };
@@ -57,8 +58,13 @@ function renderPlan(plan) {
57
58
  lines.push(`### ${action.priority.toUpperCase()} · ${action.action_id} · ${action.status}`);
58
59
  lines.push('', `- Subject: \`${action.subject}\``, `- Action: ${action.action}`);
59
60
  lines.push(`- Owner: ${action.owner ?? 'unassigned'}`);
61
+ lines.push(`- Decision owner: ${action.decision_owner ?? 'unassigned'}`);
62
+ lines.push(`- Dependencies: ${action.depends_on_action_ids.length ? action.depends_on_action_ids.join(', ') : 'none established'}`);
60
63
  if (action.required_input.length) lines.push(`- Required input: ${action.required_input.join(', ')}`);
61
64
  if (action.semantic_gates.length) lines.push(`- Semantic gates: ${action.semantic_gates.join(', ')}`);
65
+ lines.push(`- Failure condition: ${action.failure_condition}`);
66
+ lines.push(`- Leading indicators: ${action.leading_indicators.length ? action.leading_indicators.join(', ') : 'none established'}`);
67
+ lines.push(`- Monitoring window: ${action.monitoring_window ?? 'not established'}`);
62
68
  lines.push(`- Verify: \`${action.verification.command}\``, '');
63
69
  }
64
70
  }
@@ -83,15 +89,20 @@ export function actionPlan(root, { runId } = {}) {
83
89
  return {
84
90
  action_id: `ACT-${finding.finding_id.replace(/^F-/, '')}`,
85
91
  finding_ids: [finding.finding_id],
92
+ depends_on_action_ids: [],
86
93
  phase: phaseFor(finding),
87
94
  priority: ['informational', 'experimental'].includes(finding.classification.severity) ? 'low' : finding.classification.severity,
88
95
  subject: finding.subject.identifier,
89
96
  action: finding.remediation.preferred,
90
97
  owner,
98
+ decision_owner: owner,
91
99
  status: blocked ? 'blocked' : 'ready',
92
- required_input: blocked ? ['accountable owner'] : [],
100
+ required_input: blocked ? toStringArray([checklistItem('owner', 'accountable owner')]) : [],
93
101
  semantic_gates: semanticGates(finding),
94
102
  unsafe_shortcuts: finding.remediation.unsafe_shortcuts || [],
103
+ failure_condition: `${finding.verification.detector_to_rerun} still reports the exact subject, or verification cannot complete with sufficient evidence`,
104
+ leading_indicators: [],
105
+ monitoring_window: null,
95
106
  verification: {
96
107
  method: finding.verification.method,
97
108
  detector: finding.verification.detector_to_rerun,
@@ -8,6 +8,8 @@ import { summarize, renderMarkdownReport } from '../reporting/report.js';
8
8
  import { validateAgainst } from '../shared/schemaValidator.js';
9
9
  import { writeJson, sha256 } from '../shared/io.js';
10
10
  import { extractModified } from '../detectors/lifeMeas.js';
11
+ import { buildEntityGraph } from '../observations/entityGraph.js';
12
+ import { buildSourceIdentityChain } from '../observations/sourceIdentity.js';
11
13
 
12
14
  /** `citable audit [scope]` — run detectors and produce an evidence package. */
13
15
  export async function audit(root, { target, scope, baseUrl, refDate } = {}) {
@@ -93,6 +95,8 @@ export async function audit(root, { target, scope, baseUrl, refDate } = {}) {
93
95
  const schemaBlocks = [];
94
96
  for (const p of ctx.site.pages) for (const j of p.jsonLd) schemaBlocks.push({ url: p.url, parseError: j.parseError, blocks: j.blocks });
95
97
  run.writeArtifact('schema/jsonld.json', schemaBlocks);
98
+ run.writeArtifact('schema/entity-graph.json', buildEntityGraph(ctx.site.pages));
99
+ run.writeArtifact('identity/source-chain.json', buildSourceIdentityChain(ctx.registries));
96
100
  for (const p of ctx.site.pages) {
97
101
  run.writeArtifact(`headers/${encodeURIComponent(p.url)}.json`, { status: p.status, headers: p.headers });
98
102
  }
@@ -0,0 +1,36 @@
1
+ import fs from 'node:fs';
2
+ import os from 'node:os';
3
+ import path from 'node:path';
4
+ import { fileURLToPath } from 'node:url';
5
+ import { audit } from './audit.js';
6
+
7
+ const FIXTURE_ROOT = path.resolve(path.dirname(fileURLToPath(import.meta.url)), 'fixtures', 'demo');
8
+ // Pinned so output never drifts as real-world "today" passes the fixture's validity windows.
9
+ const DEMO_REF_DATE = '2026-07-18';
10
+
11
+ /**
12
+ * `citable demo` — run the full detector engine against a bundled, frozen,
13
+ * offline example site. Never fetches the network. Never scores the caller's
14
+ * own project or a real named company — the fixture is synthetic
15
+ * (`https://example.test`, RFC 2606 reserved, non-resolvable).
16
+ */
17
+ export async function demo() {
18
+ const workDir = fs.mkdtempSync(path.join(os.tmpdir(), 'citable-demo-'));
19
+ try {
20
+ fs.cpSync(FIXTURE_ROOT, workDir, { recursive: true });
21
+ const r = await audit(workDir, {
22
+ target: path.join(workDir, 'site'),
23
+ baseUrl: 'https://example.test',
24
+ refDate: DEMO_REF_DATE,
25
+ });
26
+ return {
27
+ runId: r.runId,
28
+ summary: r.summary,
29
+ manifest: r.manifest,
30
+ report: r.report,
31
+ fixture: 'bundled synthetic example site — offline, not fetched, not a real company',
32
+ };
33
+ } finally {
34
+ fs.rmSync(workDir, { recursive: true, force: true });
35
+ }
36
+ }
@@ -0,0 +1,27 @@
1
+ version: 1
2
+ kind: claims
3
+ entries:
4
+ - claim_id: CLAIM-ENFORCE
5
+ claim: >
6
+ Gatekeeper validates whether an AI-initiated action remains admissible
7
+ before execution in configured enforcement deployments.
8
+ claim_type: capability
9
+ entity: ENT-GATEKEEPER
10
+ scope:
11
+ - configured deployments using enforcement mode
12
+ exclusions:
13
+ - advisory-only deployments
14
+ evidence: [EVD-ARCH-SPEC]
15
+ legal_status: approved
16
+ publication_surfaces: ["/products/gatekeeper/"]
17
+ owner: Claim Owner
18
+ status: verified
19
+ valid_from: "2026-05-10"
20
+ expires: "2027-05-10"
21
+ last_verified: "2026-06-01"
22
+ support_assessment:
23
+ status: directly_supported
24
+ assessor: SME Reviewer
25
+ assessment_method: architecture specification review against claim wording
26
+ assessment_date: "2026-06-01"
27
+ confidence: high
@@ -0,0 +1,3 @@
1
+ version: 1
2
+ kind: competitors
3
+ entries: []
@@ -0,0 +1,18 @@
1
+ version: 1
2
+ site:
3
+ base_url: null
4
+ built_output_dir: null
5
+ source_dirs: []
6
+ default_locale: en
7
+ default_jurisdiction: null
8
+ framework:
9
+ name: null
10
+ rendering_model: null
11
+ package_manager: null
12
+ build_command: null
13
+ test_command: null
14
+ audit:
15
+ index_target_default: true
16
+ max_crawl_depth: 4
17
+ thin_content_words: 120
18
+ fetch_external: false
@@ -0,0 +1,30 @@
1
+ version: 1
2
+ kind: crawlers
3
+ entries:
4
+ - crawler_id: CRAWLER-GOOGLEBOT
5
+ user_agent: Googlebot
6
+ vendor: Google
7
+ purpose: search_indexing
8
+ decision: allow
9
+ decision_owner: SEO Owner
10
+ business_rationale: search visibility
11
+ next_review_date: "2027-01-01"
12
+ status: active
13
+ - crawler_id: CRAWLER-GPTBOT
14
+ user_agent: GPTBot
15
+ vendor: OpenAI
16
+ purpose: model_training
17
+ decision: block
18
+ decision_owner: Legal Owner
19
+ legal_rationale: no training license granted
20
+ next_review_date: "2027-01-01"
21
+ status: active
22
+ - crawler_id: CRAWLER-OAI-SEARCHBOT
23
+ user_agent: OAI-SearchBot
24
+ vendor: OpenAI
25
+ purpose: ai_search_discovery
26
+ decision: allow
27
+ decision_owner: SEO Owner
28
+ business_rationale: ChatGPT search inclusion
29
+ next_review_date: "2027-01-01"
30
+ status: active
@@ -0,0 +1,28 @@
1
+ version: 1
2
+ kind: entities
3
+ entries:
4
+ - entity_id: ENT-ORG
5
+ canonical_name: Example Governance
6
+ entity_type: organization
7
+ canonical_url: https://example.test/
8
+ aliases: []
9
+ authoritative_profiles:
10
+ - https://www.linkedin.com/company/example-governance
11
+ category: AI execution governance
12
+ definition: >
13
+ Example Governance is an AI execution governance platform vendor.
14
+ status: verified
15
+ last_verified: "2026-06-01"
16
+ owner: Entity Owner
17
+ - entity_id: ENT-GATEKEEPER
18
+ canonical_name: Gatekeeper
19
+ entity_type: product
20
+ owner_entity: ENT-ORG
21
+ canonical_url: https://example.test/products/gatekeeper/
22
+ category: AI execution governance
23
+ definition: >
24
+ A runtime enforcement component that validates whether an AI-initiated
25
+ action remains admissible before execution.
26
+ status: verified
27
+ last_verified: "2026-06-01"
28
+ owner: Entity Owner
@@ -0,0 +1,19 @@
1
+ version: 1
2
+ kind: evidence
3
+ entries:
4
+ - evidence_id: EVD-ARCH-SPEC
5
+ title: Gatekeeper architecture specification v2
6
+ evidence_type: architecture_specification
7
+ source: internal://specs/gatekeeper-v2.md
8
+ primary_or_secondary: primary
9
+ supports_claims: [CLAIM-ENFORCE]
10
+ methodology: design review
11
+ measurement_period: "2026-05"
12
+ publication_date: "2026-05-10"
13
+ retrieved_date: "2026-06-01"
14
+ valid_until: "2027-05-10"
15
+ integrity_hash: sha256:f685b01d139f89eacd9b8957b55f4986ad8dff1ba6848a61419dd505075d9dc
16
+ access_status: internal
17
+ reuse_status: licensed
18
+ reviewer: SME Reviewer
19
+ verification_status: verified
@@ -0,0 +1,3 @@
1
+ version: 1
2
+ kind: experiments
3
+ entries: []
@@ -0,0 +1,54 @@
1
+ version: 1
2
+ kind: pages
3
+ entries:
4
+ - page_id: PAGE-HOME
5
+ url: /
6
+ page_type: home
7
+ primary_intent: brand navigation
8
+ primary_entities: [ENT-ORG]
9
+ content_owner: Content Owner
10
+ lifecycle_class: evergreen
11
+ review_cadence: quarterly
12
+ next_review_date: "2026-10-01"
13
+ indexing_intent: index
14
+ conversion_action: request demo
15
+ status: active
16
+ - page_id: PAGE-GATEKEEPER
17
+ url: /products/gatekeeper/
18
+ page_type: product
19
+ primary_intent: vendor evaluation of runtime authorization
20
+ primary_entities: [ENT-GATEKEEPER]
21
+ published_claims: [CLAIM-ENFORCE]
22
+ content_owner: Content Owner
23
+ factual_reviewer: SME Reviewer
24
+ lifecycle_class: product_capability
25
+ review_cadence: release-driven
26
+ next_review_date: "2026-12-01"
27
+ indexing_intent: index
28
+ conversion_action: request demo
29
+ status: active
30
+ - page_id: PAGE-DEFN
31
+ url: /learn/execution-governance/
32
+ page_type: definition
33
+ primary_intent: define AI execution governance
34
+ primary_entities: [ENT-ORG]
35
+ content_owner: Content Owner
36
+ factual_reviewer: SME Reviewer
37
+ lifecycle_class: foundational
38
+ review_cadence: semiannual
39
+ next_review_date: "2026-12-15"
40
+ indexing_intent: index
41
+ conversion_action: read product page
42
+ status: active
43
+ - page_id: PAGE-PRICING
44
+ url: /pricing/
45
+ page_type: pricing
46
+ primary_intent: pricing evaluation
47
+ primary_entities: [ENT-GATEKEEPER]
48
+ content_owner: Content Owner
49
+ lifecycle_class: pricing
50
+ review_cadence: on-change
51
+ next_review_date: "2026-08-01"
52
+ indexing_intent: index
53
+ conversion_action: contact sales
54
+ status: active
@@ -0,0 +1,11 @@
1
+ version: 1
2
+ kind: prompts
3
+ entries:
4
+ - prompt_id: P-RECO
5
+ canonical_prompt: What platforms provide runtime authorization for AI agents?
6
+ prompt_class: category
7
+ desired_outcome: mention
8
+ target_entities: [ENT-GATEKEEPER]
9
+ accuracy_status: not_observed
10
+ owner: GEO Owner
11
+ status: active
@@ -0,0 +1,10 @@
1
+ version: 1
2
+ kind: queries
3
+ entries:
4
+ - query_id: Q-DEFN
5
+ canonical_query: what is ai execution governance
6
+ intent: category_discovery
7
+ funnel_stage: awareness
8
+ target_page: /learn/execution-governance/
9
+ business_value: high
10
+ status: active
@@ -0,0 +1,12 @@
1
+ <!doctype html><html lang="en"><head>
2
+ <meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1">
3
+ <title>Example Governance — AI execution governance platform</title>
4
+ <meta name="description" content="Example Governance provides runtime authorization controls for AI agents, with documented scope, evidence, and limitations.">
5
+ <link rel="canonical" href="https://example.test/">
6
+ <script type="application/ld+json">{"@context":"https://schema.org","@type":"Organization","@id":"https://example.test/#organization","name":"Example Governance","url":"https://example.test/"}</script>
7
+ </head><body>
8
+ <h1>AI execution governance for autonomous agents</h1>
9
+ <p>Example Governance is an AI execution governance platform that validates whether an AI-initiated action remains admissible before execution. It does not replace observability tooling; it operates in the execution path.</p>
10
+ <p>The platform is designed for engineering and risk teams at organizations that deploy tool-using AI agents. It is not intended for teams that only need model evaluation dashboards.</p>
11
+ <nav><a href="/products/gatekeeper/">Gatekeeper runtime authorization</a> <a href="/learn/execution-governance/">What is AI execution governance</a> <a href="/pricing/">Pricing and deployment options</a></nav>
12
+ </body></html>
@@ -0,0 +1,14 @@
1
+ <!doctype html><html lang="en"><head>
2
+ <meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1">
3
+ <title>What is AI execution governance? Definition and scope</title>
4
+ <meta name="description" content="A precise definition of AI execution governance, what it excludes, and how it differs from observability and approval workflows.">
5
+ <link rel="canonical" href="https://example.test/learn/execution-governance/">
6
+ </head><body>
7
+ <h1>What is AI execution governance?</h1>
8
+ <p>AI execution governance is the set of enforceable controls that determines whether a specific AI-initiated action is authorized at the moment of execution. It does not include model training governance or after-the-fact observability.</p>
9
+ <h2>How it differs from observability</h2>
10
+ <p>Execution governance differs from observability in one decisive dimension: observability records actions after they occur, whereas execution governance can prevent an inadmissible action. The comparison basis here is enforcement capability, not data collection depth.</p>
11
+ <h2>Limitations of this definition</h2>
12
+ <p>This definition does not apply to fully air-gapped batch systems where no runtime decision point exists. That constraint is a boundary condition, not an implementation detail.</p>
13
+ <p>See <a href="/products/gatekeeper/">Gatekeeper runtime authorization</a> for an implementation, or return to the <a href="/">Example Governance home page</a>.</p>
14
+ </body></html>