@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.
- package/CHANGELOG.md +246 -0
- package/README.md +43 -5
- package/dist/universal/.agents/skills/citable/SKILL.md +13 -4
- package/dist/universal/.agents/skills/citable/VERSION +1 -1
- package/dist/universal/.agents/skills/citable/agents/citable-auditor.md +64 -0
- package/dist/universal/.agents/skills/citable/agents/citable-semantic-reviewer.md +66 -0
- package/dist/universal/.agents/skills/citable/commands/action-findings.md +9 -1
- package/dist/universal/.agents/skills/citable/commands/observe-and-act.md +50 -3
- package/dist/universal/.agents/skills/citable/commands/plan-audit.md +35 -0
- package/dist/universal/.agents/skills/citable/manifest.json +26 -14
- package/dist/universal/.agents/skills/citable/schemas/action-plan.schema.json +13 -0
- package/dist/universal/.agents/skills/citable/schemas/browser-evidence-plan.schema.json +14 -0
- package/dist/universal/.agents/skills/citable/schemas/canonical-index-import.schema.json +30 -0
- package/dist/universal/.agents/skills/citable/schemas/common.defs.json +12 -1
- package/dist/universal/.agents/skills/citable/schemas/corroboration-import.schema.json +48 -0
- package/dist/universal/.agents/skills/citable/schemas/entity-graph.schema.json +75 -0
- package/dist/universal/.agents/skills/citable/schemas/entity.schema.json +13 -0
- package/dist/universal/.agents/skills/citable/schemas/observation.schema.json +1 -1
- package/dist/universal/.agents/skills/citable/schemas/page.schema.json +3 -0
- package/dist/universal/.agents/skills/citable/schemas/regional-network-import.schema.json +55 -0
- package/dist/universal/.agents/skills/citable/schemas/source-identity-chain.schema.json +83 -0
- package/dist/universal/.agents/skills/citable/scripts/README.md +3 -1
- package/dist/universal/.claude/agents/citable/citable-auditor.md +64 -0
- package/dist/universal/.claude/agents/citable/citable-semantic-reviewer.md +66 -0
- package/dist/universal/.claude/agents/citable/manifest.json +12 -0
- package/dist/universal/.claude/skills/citable/SKILL.md +13 -4
- package/dist/universal/.claude/skills/citable/VERSION +1 -1
- package/dist/universal/.claude/skills/citable/agents/citable-auditor.md +64 -0
- package/dist/universal/.claude/skills/citable/agents/citable-semantic-reviewer.md +66 -0
- package/dist/universal/.claude/skills/citable/commands/action-findings.md +9 -1
- package/dist/universal/.claude/skills/citable/commands/observe-and-act.md +50 -3
- package/dist/universal/.claude/skills/citable/commands/plan-audit.md +35 -0
- package/dist/universal/.claude/skills/citable/manifest.json +31 -14
- package/dist/universal/.claude/skills/citable/schemas/action-plan.schema.json +13 -0
- package/dist/universal/.claude/skills/citable/schemas/browser-evidence-plan.schema.json +14 -0
- package/dist/universal/.claude/skills/citable/schemas/canonical-index-import.schema.json +30 -0
- package/dist/universal/.claude/skills/citable/schemas/common.defs.json +12 -1
- package/dist/universal/.claude/skills/citable/schemas/corroboration-import.schema.json +48 -0
- package/dist/universal/.claude/skills/citable/schemas/entity-graph.schema.json +75 -0
- package/dist/universal/.claude/skills/citable/schemas/entity.schema.json +13 -0
- package/dist/universal/.claude/skills/citable/schemas/observation.schema.json +1 -1
- package/dist/universal/.claude/skills/citable/schemas/page.schema.json +3 -0
- package/dist/universal/.claude/skills/citable/schemas/regional-network-import.schema.json +55 -0
- package/dist/universal/.claude/skills/citable/schemas/source-identity-chain.schema.json +83 -0
- package/dist/universal/.claude/skills/citable/scripts/README.md +3 -1
- package/dist/universal/.cursor/skills/citable/SKILL.md +13 -4
- package/dist/universal/.cursor/skills/citable/VERSION +1 -1
- package/dist/universal/.cursor/skills/citable/agents/citable-auditor.md +64 -0
- package/dist/universal/.cursor/skills/citable/agents/citable-semantic-reviewer.md +66 -0
- package/dist/universal/.cursor/skills/citable/commands/action-findings.md +9 -1
- package/dist/universal/.cursor/skills/citable/commands/observe-and-act.md +50 -3
- package/dist/universal/.cursor/skills/citable/commands/plan-audit.md +35 -0
- package/dist/universal/.cursor/skills/citable/manifest.json +26 -14
- package/dist/universal/.cursor/skills/citable/schemas/action-plan.schema.json +13 -0
- package/dist/universal/.cursor/skills/citable/schemas/browser-evidence-plan.schema.json +14 -0
- package/dist/universal/.cursor/skills/citable/schemas/canonical-index-import.schema.json +30 -0
- package/dist/universal/.cursor/skills/citable/schemas/common.defs.json +12 -1
- package/dist/universal/.cursor/skills/citable/schemas/corroboration-import.schema.json +48 -0
- package/dist/universal/.cursor/skills/citable/schemas/entity-graph.schema.json +75 -0
- package/dist/universal/.cursor/skills/citable/schemas/entity.schema.json +13 -0
- package/dist/universal/.cursor/skills/citable/schemas/observation.schema.json +1 -1
- package/dist/universal/.cursor/skills/citable/schemas/page.schema.json +3 -0
- package/dist/universal/.cursor/skills/citable/schemas/regional-network-import.schema.json +55 -0
- package/dist/universal/.cursor/skills/citable/schemas/source-identity-chain.schema.json +83 -0
- package/dist/universal/.cursor/skills/citable/scripts/README.md +3 -1
- package/dist/universal/.gemini/skills/citable/SKILL.md +13 -4
- package/dist/universal/.gemini/skills/citable/VERSION +1 -1
- package/dist/universal/.gemini/skills/citable/agents/citable-auditor.md +64 -0
- package/dist/universal/.gemini/skills/citable/agents/citable-semantic-reviewer.md +66 -0
- package/dist/universal/.gemini/skills/citable/commands/action-findings.md +9 -1
- package/dist/universal/.gemini/skills/citable/commands/observe-and-act.md +50 -3
- package/dist/universal/.gemini/skills/citable/commands/plan-audit.md +35 -0
- package/dist/universal/.gemini/skills/citable/manifest.json +26 -14
- package/dist/universal/.gemini/skills/citable/schemas/action-plan.schema.json +13 -0
- package/dist/universal/.gemini/skills/citable/schemas/browser-evidence-plan.schema.json +14 -0
- package/dist/universal/.gemini/skills/citable/schemas/canonical-index-import.schema.json +30 -0
- package/dist/universal/.gemini/skills/citable/schemas/common.defs.json +12 -1
- package/dist/universal/.gemini/skills/citable/schemas/corroboration-import.schema.json +48 -0
- package/dist/universal/.gemini/skills/citable/schemas/entity-graph.schema.json +75 -0
- package/dist/universal/.gemini/skills/citable/schemas/entity.schema.json +13 -0
- package/dist/universal/.gemini/skills/citable/schemas/observation.schema.json +1 -1
- package/dist/universal/.gemini/skills/citable/schemas/page.schema.json +3 -0
- package/dist/universal/.gemini/skills/citable/schemas/regional-network-import.schema.json +55 -0
- package/dist/universal/.gemini/skills/citable/schemas/source-identity-chain.schema.json +83 -0
- package/dist/universal/.gemini/skills/citable/scripts/README.md +3 -1
- package/dist/universal/.github/skills/citable/SKILL.md +13 -4
- package/dist/universal/.github/skills/citable/VERSION +1 -1
- package/dist/universal/.github/skills/citable/agents/citable-auditor.md +64 -0
- package/dist/universal/.github/skills/citable/agents/citable-semantic-reviewer.md +66 -0
- package/dist/universal/.github/skills/citable/commands/action-findings.md +9 -1
- package/dist/universal/.github/skills/citable/commands/observe-and-act.md +50 -3
- package/dist/universal/.github/skills/citable/commands/plan-audit.md +35 -0
- package/dist/universal/.github/skills/citable/manifest.json +26 -14
- package/dist/universal/.github/skills/citable/schemas/action-plan.schema.json +13 -0
- package/dist/universal/.github/skills/citable/schemas/browser-evidence-plan.schema.json +14 -0
- package/dist/universal/.github/skills/citable/schemas/canonical-index-import.schema.json +30 -0
- package/dist/universal/.github/skills/citable/schemas/common.defs.json +12 -1
- package/dist/universal/.github/skills/citable/schemas/corroboration-import.schema.json +48 -0
- package/dist/universal/.github/skills/citable/schemas/entity-graph.schema.json +75 -0
- package/dist/universal/.github/skills/citable/schemas/entity.schema.json +13 -0
- package/dist/universal/.github/skills/citable/schemas/observation.schema.json +1 -1
- package/dist/universal/.github/skills/citable/schemas/page.schema.json +3 -0
- package/dist/universal/.github/skills/citable/schemas/regional-network-import.schema.json +55 -0
- package/dist/universal/.github/skills/citable/schemas/source-identity-chain.schema.json +83 -0
- package/dist/universal/.github/skills/citable/scripts/README.md +3 -1
- package/dist/universal/.kiro/skills/citable/SKILL.md +13 -4
- package/dist/universal/.kiro/skills/citable/VERSION +1 -1
- package/dist/universal/.kiro/skills/citable/agents/citable-auditor.md +64 -0
- package/dist/universal/.kiro/skills/citable/agents/citable-semantic-reviewer.md +66 -0
- package/dist/universal/.kiro/skills/citable/commands/action-findings.md +9 -1
- package/dist/universal/.kiro/skills/citable/commands/observe-and-act.md +50 -3
- package/dist/universal/.kiro/skills/citable/commands/plan-audit.md +35 -0
- package/dist/universal/.kiro/skills/citable/manifest.json +26 -14
- package/dist/universal/.kiro/skills/citable/schemas/action-plan.schema.json +13 -0
- package/dist/universal/.kiro/skills/citable/schemas/browser-evidence-plan.schema.json +14 -0
- package/dist/universal/.kiro/skills/citable/schemas/canonical-index-import.schema.json +30 -0
- package/dist/universal/.kiro/skills/citable/schemas/common.defs.json +12 -1
- package/dist/universal/.kiro/skills/citable/schemas/corroboration-import.schema.json +48 -0
- package/dist/universal/.kiro/skills/citable/schemas/entity-graph.schema.json +75 -0
- package/dist/universal/.kiro/skills/citable/schemas/entity.schema.json +13 -0
- package/dist/universal/.kiro/skills/citable/schemas/observation.schema.json +1 -1
- package/dist/universal/.kiro/skills/citable/schemas/page.schema.json +3 -0
- package/dist/universal/.kiro/skills/citable/schemas/regional-network-import.schema.json +55 -0
- package/dist/universal/.kiro/skills/citable/schemas/source-identity-chain.schema.json +83 -0
- package/dist/universal/.kiro/skills/citable/scripts/README.md +3 -1
- package/dist/universal/.opencode/skills/citable/SKILL.md +13 -4
- package/dist/universal/.opencode/skills/citable/VERSION +1 -1
- package/dist/universal/.opencode/skills/citable/agents/citable-auditor.md +64 -0
- package/dist/universal/.opencode/skills/citable/agents/citable-semantic-reviewer.md +66 -0
- package/dist/universal/.opencode/skills/citable/commands/action-findings.md +9 -1
- package/dist/universal/.opencode/skills/citable/commands/observe-and-act.md +50 -3
- package/dist/universal/.opencode/skills/citable/commands/plan-audit.md +35 -0
- package/dist/universal/.opencode/skills/citable/manifest.json +26 -14
- package/dist/universal/.opencode/skills/citable/schemas/action-plan.schema.json +13 -0
- package/dist/universal/.opencode/skills/citable/schemas/browser-evidence-plan.schema.json +14 -0
- package/dist/universal/.opencode/skills/citable/schemas/canonical-index-import.schema.json +30 -0
- package/dist/universal/.opencode/skills/citable/schemas/common.defs.json +12 -1
- package/dist/universal/.opencode/skills/citable/schemas/corroboration-import.schema.json +48 -0
- package/dist/universal/.opencode/skills/citable/schemas/entity-graph.schema.json +75 -0
- package/dist/universal/.opencode/skills/citable/schemas/entity.schema.json +13 -0
- package/dist/universal/.opencode/skills/citable/schemas/observation.schema.json +1 -1
- package/dist/universal/.opencode/skills/citable/schemas/page.schema.json +3 -0
- package/dist/universal/.opencode/skills/citable/schemas/regional-network-import.schema.json +55 -0
- package/dist/universal/.opencode/skills/citable/schemas/source-identity-chain.schema.json +83 -0
- package/dist/universal/.opencode/skills/citable/scripts/README.md +3 -1
- package/dist/universal/.pi/agent/skills/citable/SKILL.md +13 -4
- package/dist/universal/.pi/agent/skills/citable/VERSION +1 -1
- package/dist/universal/.pi/agent/skills/citable/agents/citable-auditor.md +64 -0
- package/dist/universal/.pi/agent/skills/citable/agents/citable-semantic-reviewer.md +66 -0
- package/dist/universal/.pi/agent/skills/citable/commands/action-findings.md +9 -1
- package/dist/universal/.pi/agent/skills/citable/commands/observe-and-act.md +50 -3
- package/dist/universal/.pi/agent/skills/citable/commands/plan-audit.md +35 -0
- package/dist/universal/.pi/agent/skills/citable/manifest.json +26 -14
- package/dist/universal/.pi/agent/skills/citable/schemas/action-plan.schema.json +13 -0
- package/dist/universal/.pi/agent/skills/citable/schemas/browser-evidence-plan.schema.json +14 -0
- package/dist/universal/.pi/agent/skills/citable/schemas/canonical-index-import.schema.json +30 -0
- package/dist/universal/.pi/agent/skills/citable/schemas/common.defs.json +12 -1
- package/dist/universal/.pi/agent/skills/citable/schemas/corroboration-import.schema.json +48 -0
- package/dist/universal/.pi/agent/skills/citable/schemas/entity-graph.schema.json +75 -0
- package/dist/universal/.pi/agent/skills/citable/schemas/entity.schema.json +13 -0
- package/dist/universal/.pi/agent/skills/citable/schemas/observation.schema.json +1 -1
- package/dist/universal/.pi/agent/skills/citable/schemas/page.schema.json +3 -0
- package/dist/universal/.pi/agent/skills/citable/schemas/regional-network-import.schema.json +55 -0
- package/dist/universal/.pi/agent/skills/citable/schemas/source-identity-chain.schema.json +83 -0
- package/dist/universal/.pi/agent/skills/citable/scripts/README.md +3 -1
- package/dist/universal/.qoder/skills/citable/SKILL.md +13 -4
- package/dist/universal/.qoder/skills/citable/VERSION +1 -1
- package/dist/universal/.qoder/skills/citable/agents/citable-auditor.md +64 -0
- package/dist/universal/.qoder/skills/citable/agents/citable-semantic-reviewer.md +66 -0
- package/dist/universal/.qoder/skills/citable/commands/action-findings.md +9 -1
- package/dist/universal/.qoder/skills/citable/commands/observe-and-act.md +50 -3
- package/dist/universal/.qoder/skills/citable/commands/plan-audit.md +35 -0
- package/dist/universal/.qoder/skills/citable/manifest.json +26 -14
- package/dist/universal/.qoder/skills/citable/schemas/action-plan.schema.json +13 -0
- package/dist/universal/.qoder/skills/citable/schemas/browser-evidence-plan.schema.json +14 -0
- package/dist/universal/.qoder/skills/citable/schemas/canonical-index-import.schema.json +30 -0
- package/dist/universal/.qoder/skills/citable/schemas/common.defs.json +12 -1
- package/dist/universal/.qoder/skills/citable/schemas/corroboration-import.schema.json +48 -0
- package/dist/universal/.qoder/skills/citable/schemas/entity-graph.schema.json +75 -0
- package/dist/universal/.qoder/skills/citable/schemas/entity.schema.json +13 -0
- package/dist/universal/.qoder/skills/citable/schemas/observation.schema.json +1 -1
- package/dist/universal/.qoder/skills/citable/schemas/page.schema.json +3 -0
- package/dist/universal/.qoder/skills/citable/schemas/regional-network-import.schema.json +55 -0
- package/dist/universal/.qoder/skills/citable/schemas/source-identity-chain.schema.json +83 -0
- package/dist/universal/.qoder/skills/citable/scripts/README.md +3 -1
- package/dist/universal/.rovodev/skills/citable/SKILL.md +13 -4
- package/dist/universal/.rovodev/skills/citable/VERSION +1 -1
- package/dist/universal/.rovodev/skills/citable/agents/citable-auditor.md +64 -0
- package/dist/universal/.rovodev/skills/citable/agents/citable-semantic-reviewer.md +66 -0
- package/dist/universal/.rovodev/skills/citable/commands/action-findings.md +9 -1
- package/dist/universal/.rovodev/skills/citable/commands/observe-and-act.md +50 -3
- package/dist/universal/.rovodev/skills/citable/commands/plan-audit.md +35 -0
- package/dist/universal/.rovodev/skills/citable/manifest.json +26 -14
- package/dist/universal/.rovodev/skills/citable/schemas/action-plan.schema.json +13 -0
- package/dist/universal/.rovodev/skills/citable/schemas/browser-evidence-plan.schema.json +14 -0
- package/dist/universal/.rovodev/skills/citable/schemas/canonical-index-import.schema.json +30 -0
- package/dist/universal/.rovodev/skills/citable/schemas/common.defs.json +12 -1
- package/dist/universal/.rovodev/skills/citable/schemas/corroboration-import.schema.json +48 -0
- package/dist/universal/.rovodev/skills/citable/schemas/entity-graph.schema.json +75 -0
- package/dist/universal/.rovodev/skills/citable/schemas/entity.schema.json +13 -0
- package/dist/universal/.rovodev/skills/citable/schemas/observation.schema.json +1 -1
- package/dist/universal/.rovodev/skills/citable/schemas/page.schema.json +3 -0
- package/dist/universal/.rovodev/skills/citable/schemas/regional-network-import.schema.json +55 -0
- package/dist/universal/.rovodev/skills/citable/schemas/source-identity-chain.schema.json +83 -0
- package/dist/universal/.rovodev/skills/citable/scripts/README.md +3 -1
- package/dist/universal/.trae/skills/citable/SKILL.md +13 -4
- package/dist/universal/.trae/skills/citable/VERSION +1 -1
- package/dist/universal/.trae/skills/citable/agents/citable-auditor.md +64 -0
- package/dist/universal/.trae/skills/citable/agents/citable-semantic-reviewer.md +66 -0
- package/dist/universal/.trae/skills/citable/commands/action-findings.md +9 -1
- package/dist/universal/.trae/skills/citable/commands/observe-and-act.md +50 -3
- package/dist/universal/.trae/skills/citable/commands/plan-audit.md +35 -0
- package/dist/universal/.trae/skills/citable/manifest.json +26 -14
- package/dist/universal/.trae/skills/citable/schemas/action-plan.schema.json +13 -0
- package/dist/universal/.trae/skills/citable/schemas/browser-evidence-plan.schema.json +14 -0
- package/dist/universal/.trae/skills/citable/schemas/canonical-index-import.schema.json +30 -0
- package/dist/universal/.trae/skills/citable/schemas/common.defs.json +12 -1
- package/dist/universal/.trae/skills/citable/schemas/corroboration-import.schema.json +48 -0
- package/dist/universal/.trae/skills/citable/schemas/entity-graph.schema.json +75 -0
- package/dist/universal/.trae/skills/citable/schemas/entity.schema.json +13 -0
- package/dist/universal/.trae/skills/citable/schemas/observation.schema.json +1 -1
- package/dist/universal/.trae/skills/citable/schemas/page.schema.json +3 -0
- package/dist/universal/.trae/skills/citable/schemas/regional-network-import.schema.json +55 -0
- package/dist/universal/.trae/skills/citable/schemas/source-identity-chain.schema.json +83 -0
- package/dist/universal/.trae/skills/citable/scripts/README.md +3 -1
- package/dist/universal/.trae-cn/skills/citable/SKILL.md +13 -4
- package/dist/universal/.trae-cn/skills/citable/VERSION +1 -1
- package/dist/universal/.trae-cn/skills/citable/agents/citable-auditor.md +64 -0
- package/dist/universal/.trae-cn/skills/citable/agents/citable-semantic-reviewer.md +66 -0
- package/dist/universal/.trae-cn/skills/citable/commands/action-findings.md +9 -1
- package/dist/universal/.trae-cn/skills/citable/commands/observe-and-act.md +50 -3
- package/dist/universal/.trae-cn/skills/citable/commands/plan-audit.md +35 -0
- package/dist/universal/.trae-cn/skills/citable/manifest.json +26 -14
- package/dist/universal/.trae-cn/skills/citable/schemas/action-plan.schema.json +13 -0
- package/dist/universal/.trae-cn/skills/citable/schemas/browser-evidence-plan.schema.json +14 -0
- package/dist/universal/.trae-cn/skills/citable/schemas/canonical-index-import.schema.json +30 -0
- package/dist/universal/.trae-cn/skills/citable/schemas/common.defs.json +12 -1
- package/dist/universal/.trae-cn/skills/citable/schemas/corroboration-import.schema.json +48 -0
- package/dist/universal/.trae-cn/skills/citable/schemas/entity-graph.schema.json +75 -0
- package/dist/universal/.trae-cn/skills/citable/schemas/entity.schema.json +13 -0
- package/dist/universal/.trae-cn/skills/citable/schemas/observation.schema.json +1 -1
- package/dist/universal/.trae-cn/skills/citable/schemas/page.schema.json +3 -0
- package/dist/universal/.trae-cn/skills/citable/schemas/regional-network-import.schema.json +55 -0
- package/dist/universal/.trae-cn/skills/citable/schemas/source-identity-chain.schema.json +83 -0
- package/dist/universal/.trae-cn/skills/citable/scripts/README.md +3 -1
- package/dist/universal/manifest.json +270 -171
- package/package.json +1 -1
- package/schemas/action-plan.schema.json +13 -0
- package/schemas/browser-evidence-plan.schema.json +14 -0
- package/schemas/canonical-index-import.schema.json +30 -0
- package/schemas/common.defs.json +12 -1
- package/schemas/corroboration-import.schema.json +48 -0
- package/schemas/entity-graph.schema.json +75 -0
- package/schemas/entity.schema.json +13 -0
- package/schemas/observation.schema.json +1 -1
- package/schemas/page.schema.json +3 -0
- package/schemas/regional-network-import.schema.json +55 -0
- package/schemas/source-identity-chain.schema.json +83 -0
- package/scripts/build-dist.js +36 -3
- package/skill/SKILL.md +13 -4
- package/skill/agents/citable-auditor.md +64 -0
- package/skill/agents/citable-semantic-reviewer.md +66 -0
- package/skill/commands/action-findings.md +9 -1
- package/skill/commands/observe-and-act.md +50 -3
- package/skill/commands/plan-audit.md +35 -0
- package/src/cli/index.js +38 -5
- package/src/commands/actionPlan.js +12 -1
- package/src/commands/audit.js +4 -0
- package/src/commands/demo.js +36 -0
- package/src/commands/fixtures/demo/.citable/claims.yaml +27 -0
- package/src/commands/fixtures/demo/.citable/competitors.yaml +3 -0
- package/src/commands/fixtures/demo/.citable/config.yaml +18 -0
- package/src/commands/fixtures/demo/.citable/crawlers.yaml +30 -0
- package/src/commands/fixtures/demo/.citable/entities.yaml +28 -0
- package/src/commands/fixtures/demo/.citable/evidence.yaml +19 -0
- package/src/commands/fixtures/demo/.citable/experiments.yaml +3 -0
- package/src/commands/fixtures/demo/.citable/pages.yaml +54 -0
- package/src/commands/fixtures/demo/.citable/prompts.yaml +11 -0
- package/src/commands/fixtures/demo/.citable/queries.yaml +10 -0
- package/src/commands/fixtures/demo/site/index.html +12 -0
- package/src/commands/fixtures/demo/site/learn/execution-governance/index.html +14 -0
- package/src/commands/fixtures/demo/site/pricing/index.html +10 -0
- package/src/commands/fixtures/demo/site/products/gatekeeper/index.html +15 -0
- package/src/commands/fixtures/demo/site/robots.txt +7 -0
- package/src/commands/fixtures/demo/site/sitemap.xml +7 -0
- package/src/commands/init.js +5 -2
- package/src/commands/observe.js +313 -15
- package/src/commands/planAudit.js +151 -0
- package/src/commands/schemaCmd.js +5 -1
- package/src/commands/substantiate.js +22 -10
- package/src/crawler/fetch.js +34 -6
- package/src/extractor/page.js +17 -0
- package/src/installer/index.js +282 -28
- package/src/installer/providers.js +11 -0
- package/src/observations/browserJourney.js +15 -7
- package/src/observations/claimDiff.js +83 -0
- package/src/observations/common.js +15 -0
- package/src/observations/entityGraph.js +89 -0
- package/src/observations/renderParity.js +49 -0
- package/src/observations/sourceIdentity.js +62 -0
- package/src/registries/seed.js +95 -0
- package/src/registries/seeds/saas-pricing/claims.yaml +18 -0
- package/src/registries/seeds/saas-pricing/entities.yaml +20 -0
- package/src/registries/seeds/saas-pricing/seed.json +6 -0
- 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,
|
|
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>`
|
|
37
|
-
|
|
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
|
|
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,
|
|
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
|
-
|
|
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
|
-
|
|
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,
|
package/src/commands/audit.js
CHANGED
|
@@ -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,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,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,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>
|