@nebulacomponents/citable 1.1.0 → 1.3.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 +40 -1
- package/README.md +14 -2
- package/dist/universal/.agents/skills/citable/SKILL.md +49 -1
- package/dist/universal/.agents/skills/citable/VERSION +1 -1
- package/dist/universal/.agents/skills/citable/commands/README.md +1 -0
- package/dist/universal/.agents/skills/citable/commands/action-findings.md +37 -0
- package/dist/universal/.agents/skills/citable/manifest.json +20 -16
- package/dist/universal/.agents/skills/citable/references/aeo-geo-validation.md +50 -0
- package/dist/universal/.agents/skills/citable/references/capability-boundaries.md +34 -0
- package/dist/universal/.agents/skills/citable/schemas/action-plan.schema.json +55 -0
- package/dist/universal/.agents/skills/citable/schemas/claim.schema.json +2 -0
- package/dist/universal/.agents/skills/citable/schemas/common.defs.json +2 -0
- package/dist/universal/.agents/skills/citable/schemas/competitor.schema.json +1 -0
- package/dist/universal/.agents/skills/citable/schemas/crawler.schema.json +1 -0
- package/dist/universal/.agents/skills/citable/schemas/entity.schema.json +2 -1
- package/dist/universal/.agents/skills/citable/schemas/evidence.schema.json +1 -0
- package/dist/universal/.agents/skills/citable/schemas/experiment.schema.json +1 -0
- package/dist/universal/.agents/skills/citable/schemas/page.schema.json +1 -0
- package/dist/universal/.agents/skills/citable/schemas/prompt.schema.json +1 -0
- package/dist/universal/.agents/skills/citable/schemas/query.schema.json +1 -0
- package/dist/universal/.claude/skills/citable/SKILL.md +49 -1
- package/dist/universal/.claude/skills/citable/VERSION +1 -1
- package/dist/universal/.claude/skills/citable/commands/README.md +1 -0
- package/dist/universal/.claude/skills/citable/commands/action-findings.md +37 -0
- package/dist/universal/.claude/skills/citable/manifest.json +20 -16
- package/dist/universal/.claude/skills/citable/references/aeo-geo-validation.md +50 -0
- package/dist/universal/.claude/skills/citable/references/capability-boundaries.md +34 -0
- package/dist/universal/.claude/skills/citable/schemas/action-plan.schema.json +55 -0
- package/dist/universal/.claude/skills/citable/schemas/claim.schema.json +2 -0
- package/dist/universal/.claude/skills/citable/schemas/common.defs.json +2 -0
- package/dist/universal/.claude/skills/citable/schemas/competitor.schema.json +1 -0
- package/dist/universal/.claude/skills/citable/schemas/crawler.schema.json +1 -0
- package/dist/universal/.claude/skills/citable/schemas/entity.schema.json +2 -1
- package/dist/universal/.claude/skills/citable/schemas/evidence.schema.json +1 -0
- package/dist/universal/.claude/skills/citable/schemas/experiment.schema.json +1 -0
- package/dist/universal/.claude/skills/citable/schemas/page.schema.json +1 -0
- package/dist/universal/.claude/skills/citable/schemas/prompt.schema.json +1 -0
- package/dist/universal/.claude/skills/citable/schemas/query.schema.json +1 -0
- package/dist/universal/.cursor/skills/citable/SKILL.md +49 -1
- package/dist/universal/.cursor/skills/citable/VERSION +1 -1
- package/dist/universal/.cursor/skills/citable/commands/README.md +1 -0
- package/dist/universal/.cursor/skills/citable/commands/action-findings.md +37 -0
- package/dist/universal/.cursor/skills/citable/manifest.json +20 -16
- package/dist/universal/.cursor/skills/citable/references/aeo-geo-validation.md +50 -0
- package/dist/universal/.cursor/skills/citable/references/capability-boundaries.md +34 -0
- package/dist/universal/.cursor/skills/citable/schemas/action-plan.schema.json +55 -0
- package/dist/universal/.cursor/skills/citable/schemas/claim.schema.json +2 -0
- package/dist/universal/.cursor/skills/citable/schemas/common.defs.json +2 -0
- package/dist/universal/.cursor/skills/citable/schemas/competitor.schema.json +1 -0
- package/dist/universal/.cursor/skills/citable/schemas/crawler.schema.json +1 -0
- package/dist/universal/.cursor/skills/citable/schemas/entity.schema.json +2 -1
- package/dist/universal/.cursor/skills/citable/schemas/evidence.schema.json +1 -0
- package/dist/universal/.cursor/skills/citable/schemas/experiment.schema.json +1 -0
- package/dist/universal/.cursor/skills/citable/schemas/page.schema.json +1 -0
- package/dist/universal/.cursor/skills/citable/schemas/prompt.schema.json +1 -0
- package/dist/universal/.cursor/skills/citable/schemas/query.schema.json +1 -0
- package/dist/universal/.gemini/skills/citable/SKILL.md +49 -1
- package/dist/universal/.gemini/skills/citable/VERSION +1 -1
- package/dist/universal/.gemini/skills/citable/commands/README.md +1 -0
- package/dist/universal/.gemini/skills/citable/commands/action-findings.md +37 -0
- package/dist/universal/.gemini/skills/citable/manifest.json +20 -16
- package/dist/universal/.gemini/skills/citable/references/aeo-geo-validation.md +50 -0
- package/dist/universal/.gemini/skills/citable/references/capability-boundaries.md +34 -0
- package/dist/universal/.gemini/skills/citable/schemas/action-plan.schema.json +55 -0
- package/dist/universal/.gemini/skills/citable/schemas/claim.schema.json +2 -0
- package/dist/universal/.gemini/skills/citable/schemas/common.defs.json +2 -0
- package/dist/universal/.gemini/skills/citable/schemas/competitor.schema.json +1 -0
- package/dist/universal/.gemini/skills/citable/schemas/crawler.schema.json +1 -0
- package/dist/universal/.gemini/skills/citable/schemas/entity.schema.json +2 -1
- package/dist/universal/.gemini/skills/citable/schemas/evidence.schema.json +1 -0
- package/dist/universal/.gemini/skills/citable/schemas/experiment.schema.json +1 -0
- package/dist/universal/.gemini/skills/citable/schemas/page.schema.json +1 -0
- package/dist/universal/.gemini/skills/citable/schemas/prompt.schema.json +1 -0
- package/dist/universal/.gemini/skills/citable/schemas/query.schema.json +1 -0
- package/dist/universal/.github/skills/citable/SKILL.md +49 -1
- package/dist/universal/.github/skills/citable/VERSION +1 -1
- package/dist/universal/.github/skills/citable/commands/README.md +1 -0
- package/dist/universal/.github/skills/citable/commands/action-findings.md +37 -0
- package/dist/universal/.github/skills/citable/manifest.json +20 -16
- package/dist/universal/.github/skills/citable/references/aeo-geo-validation.md +50 -0
- package/dist/universal/.github/skills/citable/references/capability-boundaries.md +34 -0
- package/dist/universal/.github/skills/citable/schemas/action-plan.schema.json +55 -0
- package/dist/universal/.github/skills/citable/schemas/claim.schema.json +2 -0
- package/dist/universal/.github/skills/citable/schemas/common.defs.json +2 -0
- package/dist/universal/.github/skills/citable/schemas/competitor.schema.json +1 -0
- package/dist/universal/.github/skills/citable/schemas/crawler.schema.json +1 -0
- package/dist/universal/.github/skills/citable/schemas/entity.schema.json +2 -1
- package/dist/universal/.github/skills/citable/schemas/evidence.schema.json +1 -0
- package/dist/universal/.github/skills/citable/schemas/experiment.schema.json +1 -0
- package/dist/universal/.github/skills/citable/schemas/page.schema.json +1 -0
- package/dist/universal/.github/skills/citable/schemas/prompt.schema.json +1 -0
- package/dist/universal/.github/skills/citable/schemas/query.schema.json +1 -0
- package/dist/universal/.kiro/skills/citable/SKILL.md +49 -1
- package/dist/universal/.kiro/skills/citable/VERSION +1 -1
- package/dist/universal/.kiro/skills/citable/commands/README.md +1 -0
- package/dist/universal/.kiro/skills/citable/commands/action-findings.md +37 -0
- package/dist/universal/.kiro/skills/citable/manifest.json +20 -16
- package/dist/universal/.kiro/skills/citable/references/aeo-geo-validation.md +50 -0
- package/dist/universal/.kiro/skills/citable/references/capability-boundaries.md +34 -0
- package/dist/universal/.kiro/skills/citable/schemas/action-plan.schema.json +55 -0
- package/dist/universal/.kiro/skills/citable/schemas/claim.schema.json +2 -0
- package/dist/universal/.kiro/skills/citable/schemas/common.defs.json +2 -0
- package/dist/universal/.kiro/skills/citable/schemas/competitor.schema.json +1 -0
- package/dist/universal/.kiro/skills/citable/schemas/crawler.schema.json +1 -0
- package/dist/universal/.kiro/skills/citable/schemas/entity.schema.json +2 -1
- package/dist/universal/.kiro/skills/citable/schemas/evidence.schema.json +1 -0
- package/dist/universal/.kiro/skills/citable/schemas/experiment.schema.json +1 -0
- package/dist/universal/.kiro/skills/citable/schemas/page.schema.json +1 -0
- package/dist/universal/.kiro/skills/citable/schemas/prompt.schema.json +1 -0
- package/dist/universal/.kiro/skills/citable/schemas/query.schema.json +1 -0
- package/dist/universal/.opencode/skills/citable/SKILL.md +49 -1
- package/dist/universal/.opencode/skills/citable/VERSION +1 -1
- package/dist/universal/.opencode/skills/citable/commands/README.md +1 -0
- package/dist/universal/.opencode/skills/citable/commands/action-findings.md +37 -0
- package/dist/universal/.opencode/skills/citable/manifest.json +20 -16
- package/dist/universal/.opencode/skills/citable/references/aeo-geo-validation.md +50 -0
- package/dist/universal/.opencode/skills/citable/references/capability-boundaries.md +34 -0
- package/dist/universal/.opencode/skills/citable/schemas/action-plan.schema.json +55 -0
- package/dist/universal/.opencode/skills/citable/schemas/claim.schema.json +2 -0
- package/dist/universal/.opencode/skills/citable/schemas/common.defs.json +2 -0
- package/dist/universal/.opencode/skills/citable/schemas/competitor.schema.json +1 -0
- package/dist/universal/.opencode/skills/citable/schemas/crawler.schema.json +1 -0
- package/dist/universal/.opencode/skills/citable/schemas/entity.schema.json +2 -1
- package/dist/universal/.opencode/skills/citable/schemas/evidence.schema.json +1 -0
- package/dist/universal/.opencode/skills/citable/schemas/experiment.schema.json +1 -0
- package/dist/universal/.opencode/skills/citable/schemas/page.schema.json +1 -0
- package/dist/universal/.opencode/skills/citable/schemas/prompt.schema.json +1 -0
- package/dist/universal/.opencode/skills/citable/schemas/query.schema.json +1 -0
- package/dist/universal/.pi/agent/skills/citable/SKILL.md +49 -1
- package/dist/universal/.pi/agent/skills/citable/VERSION +1 -1
- package/dist/universal/.pi/agent/skills/citable/commands/README.md +1 -0
- package/dist/universal/.pi/agent/skills/citable/commands/action-findings.md +37 -0
- package/dist/universal/.pi/agent/skills/citable/manifest.json +20 -16
- package/dist/universal/.pi/agent/skills/citable/references/aeo-geo-validation.md +50 -0
- package/dist/universal/.pi/agent/skills/citable/references/capability-boundaries.md +34 -0
- package/dist/universal/.pi/agent/skills/citable/schemas/action-plan.schema.json +55 -0
- package/dist/universal/.pi/agent/skills/citable/schemas/claim.schema.json +2 -0
- package/dist/universal/.pi/agent/skills/citable/schemas/common.defs.json +2 -0
- package/dist/universal/.pi/agent/skills/citable/schemas/competitor.schema.json +1 -0
- package/dist/universal/.pi/agent/skills/citable/schemas/crawler.schema.json +1 -0
- package/dist/universal/.pi/agent/skills/citable/schemas/entity.schema.json +2 -1
- package/dist/universal/.pi/agent/skills/citable/schemas/evidence.schema.json +1 -0
- package/dist/universal/.pi/agent/skills/citable/schemas/experiment.schema.json +1 -0
- package/dist/universal/.pi/agent/skills/citable/schemas/page.schema.json +1 -0
- package/dist/universal/.pi/agent/skills/citable/schemas/prompt.schema.json +1 -0
- package/dist/universal/.pi/agent/skills/citable/schemas/query.schema.json +1 -0
- package/dist/universal/.qoder/skills/citable/SKILL.md +49 -1
- package/dist/universal/.qoder/skills/citable/VERSION +1 -1
- package/dist/universal/.qoder/skills/citable/commands/README.md +1 -0
- package/dist/universal/.qoder/skills/citable/commands/action-findings.md +37 -0
- package/dist/universal/.qoder/skills/citable/manifest.json +20 -16
- package/dist/universal/.qoder/skills/citable/references/aeo-geo-validation.md +50 -0
- package/dist/universal/.qoder/skills/citable/references/capability-boundaries.md +34 -0
- package/dist/universal/.qoder/skills/citable/schemas/action-plan.schema.json +55 -0
- package/dist/universal/.qoder/skills/citable/schemas/claim.schema.json +2 -0
- package/dist/universal/.qoder/skills/citable/schemas/common.defs.json +2 -0
- package/dist/universal/.qoder/skills/citable/schemas/competitor.schema.json +1 -0
- package/dist/universal/.qoder/skills/citable/schemas/crawler.schema.json +1 -0
- package/dist/universal/.qoder/skills/citable/schemas/entity.schema.json +2 -1
- package/dist/universal/.qoder/skills/citable/schemas/evidence.schema.json +1 -0
- package/dist/universal/.qoder/skills/citable/schemas/experiment.schema.json +1 -0
- package/dist/universal/.qoder/skills/citable/schemas/page.schema.json +1 -0
- package/dist/universal/.qoder/skills/citable/schemas/prompt.schema.json +1 -0
- package/dist/universal/.qoder/skills/citable/schemas/query.schema.json +1 -0
- package/dist/universal/.rovodev/skills/citable/SKILL.md +49 -1
- package/dist/universal/.rovodev/skills/citable/VERSION +1 -1
- package/dist/universal/.rovodev/skills/citable/commands/README.md +1 -0
- package/dist/universal/.rovodev/skills/citable/commands/action-findings.md +37 -0
- package/dist/universal/.rovodev/skills/citable/manifest.json +20 -16
- package/dist/universal/.rovodev/skills/citable/references/aeo-geo-validation.md +50 -0
- package/dist/universal/.rovodev/skills/citable/references/capability-boundaries.md +34 -0
- package/dist/universal/.rovodev/skills/citable/schemas/action-plan.schema.json +55 -0
- package/dist/universal/.rovodev/skills/citable/schemas/claim.schema.json +2 -0
- package/dist/universal/.rovodev/skills/citable/schemas/common.defs.json +2 -0
- package/dist/universal/.rovodev/skills/citable/schemas/competitor.schema.json +1 -0
- package/dist/universal/.rovodev/skills/citable/schemas/crawler.schema.json +1 -0
- package/dist/universal/.rovodev/skills/citable/schemas/entity.schema.json +2 -1
- package/dist/universal/.rovodev/skills/citable/schemas/evidence.schema.json +1 -0
- package/dist/universal/.rovodev/skills/citable/schemas/experiment.schema.json +1 -0
- package/dist/universal/.rovodev/skills/citable/schemas/page.schema.json +1 -0
- package/dist/universal/.rovodev/skills/citable/schemas/prompt.schema.json +1 -0
- package/dist/universal/.rovodev/skills/citable/schemas/query.schema.json +1 -0
- package/dist/universal/.trae/skills/citable/SKILL.md +49 -1
- package/dist/universal/.trae/skills/citable/VERSION +1 -1
- package/dist/universal/.trae/skills/citable/commands/README.md +1 -0
- package/dist/universal/.trae/skills/citable/commands/action-findings.md +37 -0
- package/dist/universal/.trae/skills/citable/manifest.json +20 -16
- package/dist/universal/.trae/skills/citable/references/aeo-geo-validation.md +50 -0
- package/dist/universal/.trae/skills/citable/references/capability-boundaries.md +34 -0
- package/dist/universal/.trae/skills/citable/schemas/action-plan.schema.json +55 -0
- package/dist/universal/.trae/skills/citable/schemas/claim.schema.json +2 -0
- package/dist/universal/.trae/skills/citable/schemas/common.defs.json +2 -0
- package/dist/universal/.trae/skills/citable/schemas/competitor.schema.json +1 -0
- package/dist/universal/.trae/skills/citable/schemas/crawler.schema.json +1 -0
- package/dist/universal/.trae/skills/citable/schemas/entity.schema.json +2 -1
- package/dist/universal/.trae/skills/citable/schemas/evidence.schema.json +1 -0
- package/dist/universal/.trae/skills/citable/schemas/experiment.schema.json +1 -0
- package/dist/universal/.trae/skills/citable/schemas/page.schema.json +1 -0
- package/dist/universal/.trae/skills/citable/schemas/prompt.schema.json +1 -0
- package/dist/universal/.trae/skills/citable/schemas/query.schema.json +1 -0
- package/dist/universal/.trae-cn/skills/citable/SKILL.md +49 -1
- package/dist/universal/.trae-cn/skills/citable/VERSION +1 -1
- package/dist/universal/.trae-cn/skills/citable/commands/README.md +1 -0
- package/dist/universal/.trae-cn/skills/citable/commands/action-findings.md +37 -0
- package/dist/universal/.trae-cn/skills/citable/manifest.json +20 -16
- package/dist/universal/.trae-cn/skills/citable/references/aeo-geo-validation.md +50 -0
- package/dist/universal/.trae-cn/skills/citable/references/capability-boundaries.md +34 -0
- package/dist/universal/.trae-cn/skills/citable/schemas/action-plan.schema.json +55 -0
- package/dist/universal/.trae-cn/skills/citable/schemas/claim.schema.json +2 -0
- package/dist/universal/.trae-cn/skills/citable/schemas/common.defs.json +2 -0
- package/dist/universal/.trae-cn/skills/citable/schemas/competitor.schema.json +1 -0
- package/dist/universal/.trae-cn/skills/citable/schemas/crawler.schema.json +1 -0
- package/dist/universal/.trae-cn/skills/citable/schemas/entity.schema.json +2 -1
- package/dist/universal/.trae-cn/skills/citable/schemas/evidence.schema.json +1 -0
- package/dist/universal/.trae-cn/skills/citable/schemas/experiment.schema.json +1 -0
- package/dist/universal/.trae-cn/skills/citable/schemas/page.schema.json +1 -0
- package/dist/universal/.trae-cn/skills/citable/schemas/prompt.schema.json +1 -0
- package/dist/universal/.trae-cn/skills/citable/schemas/query.schema.json +1 -0
- package/dist/universal/manifest.json +243 -195
- package/package.json +1 -1
- package/schemas/action-plan.schema.json +55 -0
- package/schemas/claim.schema.json +2 -0
- package/schemas/common.defs.json +2 -0
- package/schemas/competitor.schema.json +1 -0
- package/schemas/crawler.schema.json +1 -0
- package/schemas/entity.schema.json +2 -1
- package/schemas/evidence.schema.json +1 -0
- package/schemas/experiment.schema.json +1 -0
- package/schemas/page.schema.json +1 -0
- package/schemas/prompt.schema.json +1 -0
- package/schemas/query.schema.json +1 -0
- package/skill/SKILL.md +49 -1
- package/skill/commands/README.md +1 -0
- package/skill/commands/action-findings.md +37 -0
- package/skill/references/aeo-geo-validation.md +50 -0
- package/skill/references/capability-boundaries.md +34 -0
- package/src/cli/index.js +19 -0
- package/src/commands/actionPlan.js +120 -0
- package/src/commands/audit.js +6 -1
- package/src/commands/context.js +2 -2
- package/src/commands/selfUpgrade.js +155 -0
- package/src/commands/substantiate.js +2 -2
- package/src/crawler/fetch.js +98 -41
- package/src/detectors/ans.js +43 -0
- package/src/detectors/geoReco.js +48 -0
- package/src/extractor/site.js +12 -4
- package/src/reporting/report.js +58 -1
- package/src/shared/io.js +12 -0
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,41 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## 1.3.0 — 2026-07-18
|
|
4
|
+
|
|
5
|
+
### Added
|
|
6
|
+
|
|
7
|
+
- `citable action-plan [run-id]` converts immutable audit findings into ordered remediation artifacts with owners, blockers, unsafe shortcuts, semantic review gates, and detector-specific verification commands.
|
|
8
|
+
- ANS-009/010 and GEO-005/006 validate prompt-to-page coverage, page-level claim/evidence mapping, primary entity mapping, and complete prompt evaluation briefs.
|
|
9
|
+
- Canonical finding-to-action and AEO/GEO acceptance workflows for installed agent skills.
|
|
10
|
+
- Separate audit posture states for retrieval eligibility, source extraction/support suitability, and observed citation behavior; no aggregate AI visibility score.
|
|
11
|
+
- Capability-boundary and gap-analysis references covering crawler identity, index presence, rendered extraction, passage integrity, canonical consensus, and controlled citation evidence.
|
|
12
|
+
|
|
13
|
+
### Changed
|
|
14
|
+
|
|
15
|
+
- Registry entry schemas now reject unknown properties so misspelled governance fields fail validation instead of being ignored. This is a stricter contract; existing registries with extension fields must migrate those fields into the documented schema before validation.
|
|
16
|
+
- Remote audits now restrict redirects to the audited origin, reject private-network destinations, enforce per-attempt timeouts, and cap response bodies at 5 MiB.
|
|
17
|
+
|
|
18
|
+
### Fixed
|
|
19
|
+
|
|
20
|
+
- Invalid `--ref-date` values now fail closed before expiry or evidence evaluation.
|
|
21
|
+
- `self-upgrade` reports a nonzero process exit status when registry checks or cache refreshes fail.
|
|
22
|
+
- Release packaging supports both array-shaped and package-keyed `npm pack --json` metadata through a shared parser.
|
|
23
|
+
|
|
24
|
+
## 1.2.0 — 2026-07-18
|
|
25
|
+
|
|
26
|
+
### Added
|
|
27
|
+
|
|
28
|
+
- **`self-upgrade` command** — checks npm registry for the latest version and upgrades the npx cache if a newer version is available:
|
|
29
|
+
- `npx @nebulacomponents/citable self-upgrade` — check and upgrade
|
|
30
|
+
- `npx @nebulacomponents/citable self-upgrade --check` — check only, no upgrade
|
|
31
|
+
- `npx @nebulacomponents/citable self-upgrade --json` — machine-readable output
|
|
32
|
+
- Uses Node's built-in `fetch` (no extra deps), 10s timeout, graceful offline error
|
|
33
|
+
- **6 new tests** for self-upgrade (current, update-available, registry failure × 2 each for human/JSON output)
|
|
34
|
+
|
|
35
|
+
### Changed
|
|
36
|
+
|
|
37
|
+
- Test count: 84 → 90
|
|
38
|
+
|
|
3
39
|
## 1.1.0 — 2026-07-18
|
|
4
40
|
|
|
5
41
|
### Added
|
|
@@ -21,7 +57,7 @@
|
|
|
21
57
|
|
|
22
58
|
### Changed
|
|
23
59
|
|
|
24
|
-
- Detector count: 109 → 119
|
|
60
|
+
- Detector count: 102/15 namespaces (0.1.0) → 109/17 (1.0.0) → **119/18 namespaces** (this release)
|
|
25
61
|
- Test count: 46 → 84
|
|
26
62
|
|
|
27
63
|
## 1.0.0 — 2026-07-18
|
|
@@ -38,6 +74,9 @@
|
|
|
38
74
|
- CWV-001: LCP potential blockers (render-blocking scripts, images without dimensions)
|
|
39
75
|
- CWV-002: preconnect hints for fonts
|
|
40
76
|
- CWV-003: image optimization checks (format, dimensions, lazy loading)
|
|
77
|
+
|
|
78
|
+
> **Limitation:** no field or lab data collection; the CWV detectors check
|
|
79
|
+
> infrastructure readiness, not performance.
|
|
41
80
|
- **URL fetch resilience** — retry with exponential backoff + jitter, 5xx handling
|
|
42
81
|
- **CI workflow** — GitHub Actions for Node 22 matrix testing
|
|
43
82
|
|
package/README.md
CHANGED
|
@@ -16,11 +16,14 @@ generator, not a Lighthouse wrapper, not an "AI visibility score".
|
|
|
16
16
|
- **Persistent registries** (`.citable/`): queries, prompts, entities, claims,
|
|
17
17
|
evidence, pages, crawler policies, competitors, experiments — all
|
|
18
18
|
JSON-Schema validated with referential integrity and history-preserving saves.
|
|
19
|
-
- **
|
|
20
|
-
ENTITY, CLAIM, EVD, SCHEMA, LINK, EXT, GEO, RECO, LIFE, MEAS, HREFLANG, CWV), each with
|
|
19
|
+
- **123 detectors** across 18 namespaces (TECH, CRAWL, ARCH, PAGE, ANS,
|
|
20
|
+
ENTITY, CLAIM, EVD, SCHEMA, LINK, EXT, GEO, RECO, LIFE, MEAS, HREFLANG, CWV, AGENT), each with
|
|
21
21
|
remediation, verification, severity, and determinism declared.
|
|
22
22
|
- **Evidence packages** for every run: manifest, findings, report, captured
|
|
23
23
|
robots/sitemaps/headers/schema/link graph, checksums.
|
|
24
|
+
- **Separate state reporting** for retrieval eligibility, source extraction and
|
|
25
|
+
support suitability, and observed citation behavior. These are never merged
|
|
26
|
+
into an "AI visibility score."
|
|
24
27
|
- **Fail-closed governance**: claims can't become verified without evidence,
|
|
25
28
|
expired evidence invalidates claims, schema is never fabricated, missing
|
|
26
29
|
facts return `blocked` with `required_input`.
|
|
@@ -28,6 +31,12 @@ generator, not a Lighthouse wrapper, not an "AI visibility score".
|
|
|
28
31
|
mandatory human-review conditions.
|
|
29
32
|
- **Multi-agent distribution**: Claude Code, Codex-compatible, Cursor, Gemini,
|
|
30
33
|
generic — generated from one canonical `skill/` source.
|
|
34
|
+
- **Agent-readiness detectors** (AGENT namespace): agents are both readers
|
|
35
|
+
and writers of your site — `llms.txt` and Markdown content negotiation shape
|
|
36
|
+
what they consume; MCP Server Cards and A2A Agent Cards expose what they can
|
|
37
|
+
invoke; Content-Signals and Web Bot Auth govern the permissions they receive.
|
|
38
|
+
Citable checks all of these in one pass alongside the rest of your
|
|
39
|
+
SEO/AEO/GEO signal surface.
|
|
31
40
|
|
|
32
41
|
## Install
|
|
33
42
|
|
|
@@ -114,6 +123,7 @@ npx @nebulacomponents/citable help
|
|
|
114
123
|
cd your-site/
|
|
115
124
|
citable init # creates .citable/ (non-destructive)
|
|
116
125
|
citable audit --target ./dist --base-url https://example.com
|
|
126
|
+
citable action-plan <run-id> # ordered actions, blockers, review gates, verification
|
|
117
127
|
citable substantiate # claim/evidence assessment (dry run)
|
|
118
128
|
citable validate # registry schema + referential integrity
|
|
119
129
|
```
|
|
@@ -138,6 +148,8 @@ citable validate # registry schema + referential integrity
|
|
|
138
148
|
workflow and trusted publisher setup
|
|
139
149
|
- [Known limitations](docs/known-limitations.md) — read this before relying on
|
|
140
150
|
any coverage claim
|
|
151
|
+
- [Capability gap analysis](docs/capability-gap-analysis.md) — implemented,
|
|
152
|
+
partial, operator-supplied, and missing evidence boundaries
|
|
141
153
|
|
|
142
154
|
## Requirements
|
|
143
155
|
|
|
@@ -7,7 +7,7 @@ description: >
|
|
|
7
7
|
generative engine optimization, structured data governance, claim substantiation,
|
|
8
8
|
crawler policy, entity consistency, content discoverability, or wants a site audited
|
|
9
9
|
for how search and AI systems will retrieve, understand, cite, or recommend it.
|
|
10
|
-
version:
|
|
10
|
+
version: 1.3.0
|
|
11
11
|
---
|
|
12
12
|
|
|
13
13
|
# Citable — search & generative discoverability governance
|
|
@@ -57,6 +57,19 @@ recommendation would require invented facts.
|
|
|
57
57
|
Report posture per dimension (e.g. `retrieval_eligibility: strong`,
|
|
58
58
|
`answer_extractability: weak`) — never one opaque 0–100 "AI visibility score".
|
|
59
59
|
|
|
60
|
+
Every report must keep these top-level states separate:
|
|
61
|
+
|
|
62
|
+
1. **Retrieval eligibility** — policy and captured technical conditions.
|
|
63
|
+
2. **Source extraction and support suitability** — passage, entity, claim,
|
|
64
|
+
evidence, freshness, and structured-data conditions.
|
|
65
|
+
3. **Observed citation behavior** — only controlled, timestamped provider
|
|
66
|
+
observations; absent observations are `not_evidenced`, never inferred.
|
|
67
|
+
|
|
68
|
+
Within retrieval, distinguish `allowed_by_policy`, `synthetic_fetch_succeeded`,
|
|
69
|
+
`observed_in_production_logs`, `indexed`, and `returned_by_retrieval`. Within
|
|
70
|
+
citation testing, distinguish mention, citation, material support, canonical
|
|
71
|
+
source selection, and recommendation. These states are not interchangeable.
|
|
72
|
+
|
|
60
73
|
## Tooling
|
|
61
74
|
|
|
62
75
|
The `citable` CLI in this repository performs the deterministic work. Always
|
|
@@ -71,6 +84,7 @@ citable substantiate [--write]
|
|
|
71
84
|
citable schema --target <dir|url>
|
|
72
85
|
citable validate [registries|claims|evidence|schema|links]
|
|
73
86
|
citable compare-snapshots [runA runB]
|
|
87
|
+
citable action-plan [run-id] # ordered actions, blockers, semantic gates, verification
|
|
74
88
|
```
|
|
75
89
|
|
|
76
90
|
Audit scopes: `technical seo aeo geo architecture entity claims evidence schema
|
|
@@ -79,6 +93,40 @@ lifecycle corroboration`. Every audit writes an evidence package to
|
|
|
79
93
|
sitemaps, schema, link graph, checksums). A report without its evidence package
|
|
80
94
|
is not a deliverable.
|
|
81
95
|
|
|
96
|
+
## Finding-to-action protocol
|
|
97
|
+
|
|
98
|
+
Detection is the start of the workflow, not the deliverable. For every audit:
|
|
99
|
+
|
|
100
|
+
1. Run `citable action-plan <run-id>`. Use the generated files under
|
|
101
|
+
`.citable/actions/<run-id>/`; never edit the immutable source run.
|
|
102
|
+
2. Work phases in order: **unblock** retrieval/security failures,
|
|
103
|
+
**governance** for owners/entities/claims/evidence, **content** for page and
|
|
104
|
+
answer changes, then **optimization**. Within a phase, critical/high precede
|
|
105
|
+
lower-severity work. Severity never substitutes for confidence.
|
|
106
|
+
3. Before editing, assign an accountable owner and satisfy every
|
|
107
|
+
`required_input`. A blocked action stays blocked; do not write around missing
|
|
108
|
+
facts, evidence, legal review, or source-to-render mapping.
|
|
109
|
+
4. Apply the listed semantic gates. AEO changes require intent alignment and
|
|
110
|
+
answer-extractability review. GEO changes require entity clarity,
|
|
111
|
+
recommendation eligibility, and narrative-accuracy review. Claim/evidence
|
|
112
|
+
changes additionally require claim-boundedness and evidence-strength review.
|
|
113
|
+
5. Make the smallest source or registry change that addresses the evidence.
|
|
114
|
+
Reject every listed unsafe shortcut and every matching anti-pattern.
|
|
115
|
+
6. Run the repository build/test commands, then the action's verification
|
|
116
|
+
command. Re-audit the affected scope and run `compare-snapshots` against the
|
|
117
|
+
source run. A finding is resolved only when its detector no longer reports
|
|
118
|
+
the same subject and no new critical/high regression appears.
|
|
119
|
+
7. Report resolved, persisting, blocked, accepted-risk, and newly introduced
|
|
120
|
+
findings separately. Preserve run IDs, diffs, owners, review evidence, and
|
|
121
|
+
residual risk. Never translate "detector absent" into an outcome guarantee.
|
|
122
|
+
|
|
123
|
+
For the complete AEO/GEO acceptance profile, follow
|
|
124
|
+
`references/aeo-geo-validation.md`. Skipped deterministic checks or incomplete
|
|
125
|
+
mandatory semantic reviews make the relevant posture `not_established`.
|
|
126
|
+
Consult `references/capability-boundaries.md` before claiming any observation;
|
|
127
|
+
it identifies which states the current CLI can collect and which require
|
|
128
|
+
operator data or future adapters.
|
|
129
|
+
|
|
82
130
|
## Command workflows
|
|
83
131
|
|
|
84
132
|
Detailed per-command workflows live in `commands/`. Follow them; they define
|
|
@@ -1 +1 @@
|
|
|
1
|
-
1.
|
|
1
|
+
1.3.0
|
|
@@ -20,6 +20,7 @@ intent, not executability, so statuses are strict:
|
|
|
20
20
|
| /citable schema | implemented |
|
|
21
21
|
| /citable validate, validate-claims, validate-evidence, validate-schema, validate-links | implemented |
|
|
22
22
|
| /citable compare-snapshots / validate-regression | implemented |
|
|
23
|
+
| /citable action-plan | implemented — writes ordered, source-run-bound action artifacts outside immutable evidence packages |
|
|
23
24
|
| /citable ingest, map-site, map-queries, map-prompts, map-entities, map-evidence | specified (ingest.md) |
|
|
24
25
|
| /citable optimize-page | specified (optimize-page.md) — requires source-to-render mapping, claim-preserving rewrites, build execution, rollback; none of that is proven yet |
|
|
25
26
|
| /citable create-page, answer-block, architect, interlink, consolidate, metadata | specified (page-work.md) |
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
---
|
|
2
|
+
command: /citable action-plan [run-id]
|
|
3
|
+
purpose: Convert observed findings into ordered remediation work without changing the immutable audit package or inventing implementation facts.
|
|
4
|
+
preconditions: [completed audit run with findings.json and manifest.json]
|
|
5
|
+
artifacts_created: [.citable/actions/<run-id>/action-plan.json, .citable/actions/<run-id>/action-plan.md]
|
|
6
|
+
failure_behaviour: missing or invalid source run -> fail; review-required action without owner -> blocked with required_input
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
# Detection-to-action workflow
|
|
10
|
+
|
|
11
|
+
1. Generate the plan with `citable action-plan <run-id>`. Confirm the stored
|
|
12
|
+
`source_findings_hash` still matches the source audit before acting.
|
|
13
|
+
2. Triage in generated phase order: unblock, governance, content, optimization.
|
|
14
|
+
Do not skip an earlier phase when it invalidates later evidence or rendering.
|
|
15
|
+
3. Assign owners. Resolve each blocked action's exact required input. Missing
|
|
16
|
+
facts, evidence, legal review, or semantic review are blockers, not drafting
|
|
17
|
+
opportunities.
|
|
18
|
+
4. Capture a before state for each subject. Use the finding's evidence,
|
|
19
|
+
preferred remediation, unsafe shortcuts, and detector lineage as the change
|
|
20
|
+
boundary.
|
|
21
|
+
5. Apply the semantic gates listed on the action using the named rubrics. Store
|
|
22
|
+
quoted passages and registry records supporting the posture decision.
|
|
23
|
+
6. Implement the smallest defensible change in canonical source. Registry
|
|
24
|
+
writes use the loader/saver and retain history. Content claims remain equal
|
|
25
|
+
to or narrower than their registered scope.
|
|
26
|
+
7. Build and test the target repository. Run the generated verification
|
|
27
|
+
command, then compare the new audit to the source run.
|
|
28
|
+
8. Close only with evidence: resolved detector/subject pair, before/after run
|
|
29
|
+
IDs, diff, reviewer, and residual risk. Mark blocked, accepted risk, and
|
|
30
|
+
false positive explicitly; do not silently drop findings.
|
|
31
|
+
|
|
32
|
+
# Execution boundary
|
|
33
|
+
|
|
34
|
+
`action-plan` plans and records work; it does not automatically rewrite a site.
|
|
35
|
+
Source mutation remains agent/operator work because arbitrary repositories need
|
|
36
|
+
their own build architecture, review authority, and rollback path. Follow
|
|
37
|
+
`optimize-page.md` or `page-work.md` when the action requires page changes.
|
|
@@ -1,21 +1,24 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "citable",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.3.0",
|
|
4
4
|
"managedBy": "citable-cli",
|
|
5
5
|
"provider": "codex",
|
|
6
6
|
"providerName": "OpenAI Codex",
|
|
7
7
|
"scope": "bundle",
|
|
8
|
-
"sourcePackage": "@nebulacomponents/citable@1.
|
|
8
|
+
"sourcePackage": "@nebulacomponents/citable@1.3.0",
|
|
9
9
|
"variantPath": ".agents/skills/citable",
|
|
10
10
|
"files": {
|
|
11
|
+
"commands/action-findings.md": "sha256:510361461f24fcd4a550e0a8d960c383aefe23f9a65a54a3ffc44abd4c1293e7",
|
|
11
12
|
"commands/ingest.md": "sha256:cf35659aecd9d0e160909003efdbe056864fc5d824c71b4ef0ee801ce07ff598",
|
|
12
13
|
"commands/measurement.md": "sha256:3550b1e747c5a38cdb712016b9bc773d93596bc4d1b49a309f9cddd816c1b662",
|
|
13
14
|
"commands/optimize-page.md": "sha256:35866f3d7cdeef0376ea7a7d7036085a9b9cf95bbb300ecf4bd77610ebd74d85",
|
|
14
15
|
"commands/page-work.md": "sha256:965a66e59bdf7b0da482d26fade53b3d265885ece5d463fe83b0789ebefaef3e",
|
|
15
|
-
"commands/README.md": "sha256:
|
|
16
|
+
"commands/README.md": "sha256:186ca808e0f303938ef9f8f98c8273c4b7cb76cc791e7d751c3639bf201e3bb1",
|
|
16
17
|
"commands/validate-render.md": "sha256:a8e1d04d40b84d57c35039250d98c6a7302cd44a148a8c3b9d9cfb92678c4347",
|
|
17
18
|
"policies/crawler-policy-template.md": "sha256:15c88a4eeb21f53f71e5250dd3eb2d2791a814b304eaefce8bb30e2bdf2e2e59",
|
|
19
|
+
"references/aeo-geo-validation.md": "sha256:e45828d3ccca54a08513cb4235578c8a8ecf1dc47d1cb98e4a497838103bef70",
|
|
18
20
|
"references/anti-patterns.md": "sha256:de63f8e646af0fbf479b45eb1d050ae62a8637acc320d21b87e4a083fd4c47e7",
|
|
21
|
+
"references/capability-boundaries.md": "sha256:901840fe87080071d0b11aa329d6a7954ffa6c601c58fadc275b55a7a988376a",
|
|
19
22
|
"rubrics/answer-extractability.md": "sha256:c8e741143c34e53afdb3dc7b6976ce7b4485dce13b12d14c193fccb17bacf1da",
|
|
20
23
|
"rubrics/claim-boundedness.md": "sha256:0bab1b85248c252b966175912ebfae13bf18aa7e41573f7466831ac78b5d3e27",
|
|
21
24
|
"rubrics/comparison-fairness.md": "sha256:7afc86903aa4a695060be7b6bca42ba505c106ea7cfa153344189afc5b78a5ba",
|
|
@@ -29,26 +32,27 @@
|
|
|
29
32
|
"rubrics/recommendation-eligibility.md": "sha256:38d2055fc5f6ab5e40fd1b48de4e0518fc4382da0b7062ad09c5afebcc673fc3",
|
|
30
33
|
"rubrics/semantic-clarity.md": "sha256:66d9f4843a4a620ea8c00625c5e17c02baeaa373f2b445ce13de6f81d78ec7ba",
|
|
31
34
|
"rubrics/source-authority.md": "sha256:8dbfe46bdcd0b5351f038be503601268c7d0abb9bed83be9ca58bf54dec5a73b",
|
|
32
|
-
"schemas/
|
|
33
|
-
"schemas/
|
|
34
|
-
"schemas/
|
|
35
|
+
"schemas/action-plan.schema.json": "sha256:4b6c4c877840a065c7c0c0c7b52f696502bf3d4ca6d31179622fc364ea868d5e",
|
|
36
|
+
"schemas/claim.schema.json": "sha256:ce79ccbfa34ece9b7a309a6962522ea06a1f44c468b4c472b5c376554a788537",
|
|
37
|
+
"schemas/common.defs.json": "sha256:effdd812910d1c275c50520bb70d8aec085e53fa8cb68054dc58c04a5d4a66b3",
|
|
38
|
+
"schemas/competitor.schema.json": "sha256:2f6fd7e4543846bde56ff4dc62bb41fa366889787b794a7cdb0bff1a3392e591",
|
|
35
39
|
"schemas/config.schema.json": "sha256:a87f3bb0087de09035b9f2dafea66e32e4fcc2e3e329abcd0fd8a5ec33318f2a",
|
|
36
|
-
"schemas/crawler.schema.json": "sha256:
|
|
40
|
+
"schemas/crawler.schema.json": "sha256:1a113dfb80bc6cde904c3ea648c82ea1d88fe50f2c1a0e7175d44abba28ac64e",
|
|
37
41
|
"schemas/detector-quality.schema.json": "sha256:5e9e1ac80b1198a0ff8fa17b9f7a543d3ccf3ed3d60196152f6ff095cfdebccd",
|
|
38
|
-
"schemas/entity.schema.json": "sha256:
|
|
39
|
-
"schemas/evidence.schema.json": "sha256:
|
|
40
|
-
"schemas/experiment.schema.json": "sha256:
|
|
42
|
+
"schemas/entity.schema.json": "sha256:78a08c35c8f4eb7a804ab46b61a238502f59621ac5218991e783251fbde61c4f",
|
|
43
|
+
"schemas/evidence.schema.json": "sha256:76baec7ad7e89c6952473c01dacb9e3b26953c088331e6314d531ce620df9ec1",
|
|
44
|
+
"schemas/experiment.schema.json": "sha256:3cebebc5745a9eb359261408b0a0421b8370d2c94f8244ce939827cd9da41cb6",
|
|
41
45
|
"schemas/finding.schema.json": "sha256:85907cd04cd8d2fe24a1e618e0df7160f6d56aa1818db501f345aebce5eb5edb",
|
|
42
|
-
"schemas/page.schema.json": "sha256:
|
|
46
|
+
"schemas/page.schema.json": "sha256:627613c35f461177fa946df08edf66fbf6f6bbdfc57eef812572b3af796d5e07",
|
|
43
47
|
"schemas/project.schema.json": "sha256:ea48fdb6480f7047ba4594bd5908bc1f79c1ad6b9a2c204df900959b5f203dc6",
|
|
44
48
|
"schemas/prompt-result.schema.json": "sha256:b55be47d7d58d7b1dd8c3b1e849e24e55216212c592cde7eb836953379b85737",
|
|
45
|
-
"schemas/prompt.schema.json": "sha256:
|
|
46
|
-
"schemas/query.schema.json": "sha256:
|
|
49
|
+
"schemas/prompt.schema.json": "sha256:7f0f50c83a86ac91faa7b79895dbc1fed371e8c0342e18d8c2877cc81f4f0f4c",
|
|
50
|
+
"schemas/query.schema.json": "sha256:3c0793a8c0c48ab39320416790840b345ea987696f35b1cc364f23245a62aacb",
|
|
47
51
|
"schemas/run.schema.json": "sha256:46c3178620f3a358d936d535aeadb83454b9b35b551e53e6615cc9862063dacb",
|
|
48
52
|
"scripts/README.md": "sha256:1c3e952950ef353849621b07c5f615bf7cd20cc5654da4635492a7bd6384e747",
|
|
49
|
-
"SKILL.md": "sha256:
|
|
53
|
+
"SKILL.md": "sha256:b9864498dd1507003386ac82b4cb8aea9056af7435c313e1aa19faa5cb185bf1",
|
|
50
54
|
"templates/finding-review.md": "sha256:b270a83d3f015150aac80249ae9314979c0befea39ff92ec455f9a5aaa73404c",
|
|
51
|
-
"VERSION": "sha256:
|
|
55
|
+
"VERSION": "sha256:64d23f858ef51b0f996e4966d4e27c0371b437e2d2787890b1f7ad22d4ec5663"
|
|
52
56
|
},
|
|
53
|
-
"treeHash": "sha256:
|
|
57
|
+
"treeHash": "sha256:f9dab639bf6d9fa5b638eefa2cc9ee73c7a30cc37d7f85f625ae608976b195aa"
|
|
54
58
|
}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
# AEO/GEO validation profile
|
|
2
|
+
|
|
3
|
+
This profile is an acceptance gate for eligibility and governance conditions,
|
|
4
|
+
not a prediction of citation or recommendation. Report every row as
|
|
5
|
+
`pass | finding | skipped | not_established`; never collapse rows into one score.
|
|
6
|
+
|
|
7
|
+
## Top-level state separation
|
|
8
|
+
|
|
9
|
+
| State | Current evidence boundary |
|
|
10
|
+
| --- | --- |
|
|
11
|
+
| Retrieval eligibility | Static policy plus captured synthetic HTTP response; crawler identity remains simulated unless verified logs/IP evidence are supplied |
|
|
12
|
+
| Source extraction and support suitability | Initial-HTML extraction plus registries/detectors/rubrics; rendered-DOM parity remains not established without a renderer |
|
|
13
|
+
| Observed citation behavior | Operator-supplied prompt-result observations only; report cohort size and property citation presence, never infer from readiness |
|
|
14
|
+
|
|
15
|
+
## AEO checks
|
|
16
|
+
|
|
17
|
+
| Condition | Deterministic controls | Semantic gate |
|
|
18
|
+
| --- | --- | --- |
|
|
19
|
+
| Retrievable, indexable answer surface | TECH, CRAWL, LINK; no skipped critical transport checks | intent-alignment |
|
|
20
|
+
| Governed question coverage | ANS-009; page target_prompts resolve to active prompts | intent-alignment |
|
|
21
|
+
| Direct, self-contained answer | ANS-001…004, ANS-008 | answer-extractability |
|
|
22
|
+
| Atomic, bounded factual claims | ANS-005, CLAIM-004/007/009 | claim-boundedness |
|
|
23
|
+
| Evidence adjacent and supportable | ANS-010, EVD-001…007 | evidence-strength, source-authority |
|
|
24
|
+
| Procedures and comparisons extract cleanly | ANS-006/007 | answer-extractability, comparison-fairness |
|
|
25
|
+
| Entity attribution is stable | ENTITY-001…007, GEO-005 | entity-clarity |
|
|
26
|
+
| Visible schema agrees with content | SCHEMA-001…008 | semantic-clarity |
|
|
27
|
+
|
|
28
|
+
## GEO checks
|
|
29
|
+
|
|
30
|
+
| Condition | Deterministic controls | Semantic gate |
|
|
31
|
+
| --- | --- | --- |
|
|
32
|
+
| Prompt portfolio is evaluable | GEO-006, MEAS-001…003 | narrative-accuracy |
|
|
33
|
+
| Entity and category representation is explicit | GEO-002/003/005, ENTITY-001…007 | entity-clarity |
|
|
34
|
+
| Claims preserve scope, evidence, and legal status | CLAIM-001…009, EVD-001…007, ANS-010 | claim-boundedness, evidence-strength |
|
|
35
|
+
| Recommendation inputs are complete | RECO-001…006 | recommendation-eligibility |
|
|
36
|
+
| Comparisons are fair and corroborated | ANS-007, EXT-001/002 | comparison-fairness, source-authority |
|
|
37
|
+
| Model-directed manipulation is absent | GEO-001/004 | mandatory human review for ambiguous hidden content |
|
|
38
|
+
| Temporal and narrative integrity is governed | LIFE, MEAS, SCHEMA-004/006 | narrative-accuracy |
|
|
39
|
+
|
|
40
|
+
## Acceptance rules
|
|
41
|
+
|
|
42
|
+
- A deterministic finding means the corresponding condition is not met.
|
|
43
|
+
- A skipped detector means the condition is `not_established`, not pass.
|
|
44
|
+
- A heuristic detector absence is not proof; complete the semantic rubric.
|
|
45
|
+
- Any rubric ambiguity condition produces `not_established + review_required`.
|
|
46
|
+
- AEO/GEO posture can improve only after a before/after audit resolves the
|
|
47
|
+
relevant detector/subject pair without introducing critical/high regression.
|
|
48
|
+
- Effectiveness is measured only from repeated, segmented observations using
|
|
49
|
+
the measurement workflow. Eligibility checks alone do not establish engine
|
|
50
|
+
behavior or causal impact.
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
# Capability and observation boundaries
|
|
2
|
+
|
|
3
|
+
Use the narrowest supported state. Never promote evidence across rows.
|
|
4
|
+
|
|
5
|
+
| State | Current capability | Required evidence |
|
|
6
|
+
| --- | --- | --- |
|
|
7
|
+
| Allowed by policy | Implemented | Effective robots rule plus crawler-purpose registry decision |
|
|
8
|
+
| Synthetic fetch succeeded | Partial | Captured status, redirects, headers, body from the declared user agent; label identity simulated |
|
|
9
|
+
| Verified crawler reached edge | Operator supplied | Request log plus provider-published IP verification where supported |
|
|
10
|
+
| Observed in production logs | Operator supplied | Timestamped server/CDN log with URL, status, bytes, latency, cache result, UA, and verification result |
|
|
11
|
+
| Indexed | Operator supplied | Search Console/Bing Webmaster/API or timestamped engine observation |
|
|
12
|
+
| Returned by retrieval | Operator supplied | Provider observation containing retrieved source URL |
|
|
13
|
+
| Cited | Operator supplied | Complete answer observation with citation URL |
|
|
14
|
+
| Materially supports answer | Human review required | Answer claim mapped to a passage that entails it |
|
|
15
|
+
| Recommended | Operator supplied + review | Explicit recommendation, constraints, provider/mode/locale/time |
|
|
16
|
+
|
|
17
|
+
Current CLI URL mode does not prove crawler identity, WAF allowlisting,
|
|
18
|
+
production-log access, index presence, selected canonical, rendered DOM parity,
|
|
19
|
+
or provider citation behavior. Record those states as `not_evidenced` unless the
|
|
20
|
+
specified evidence is supplied.
|
|
21
|
+
|
|
22
|
+
Primary-source lineage for these boundaries:
|
|
23
|
+
|
|
24
|
+
- Perplexity documents separate `PerplexityBot` and `Perplexity-User` purposes,
|
|
25
|
+
published IP lists, and UA-plus-IP verification:
|
|
26
|
+
https://docs.perplexity.ai/docs/resources/perplexity-crawlers
|
|
27
|
+
- Google documents `noindex` as preventing inclusion in Google Search and
|
|
28
|
+
distinguishes crawl/content controls:
|
|
29
|
+
https://developers.google.com/search/docs/crawling-indexing/control-what-you-share
|
|
30
|
+
- Bing documents citation counts as observations that do not indicate ranking,
|
|
31
|
+
authority, or placement:
|
|
32
|
+
https://blogs.bing.com/webmaster/February-2026/Introducing-AI-Performance-in-Bing-Webmaster-Tools-Public-Preview
|
|
33
|
+
- Google requires structured data to describe visible page content:
|
|
34
|
+
https://developers.google.com/search/docs/appearance/structured-data/sd-policies
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$id": "citable://schemas/action-plan.schema.json",
|
|
3
|
+
"$schema": "http://json-schema.org/draft-07/schema#",
|
|
4
|
+
"title": "Finding action plan",
|
|
5
|
+
"type": "object",
|
|
6
|
+
"additionalProperties": false,
|
|
7
|
+
"required": ["source_run_id", "source_findings_hash", "generated_at", "summary", "actions"],
|
|
8
|
+
"properties": {
|
|
9
|
+
"source_run_id": { "type": "string", "minLength": 1 },
|
|
10
|
+
"source_findings_hash": { "type": "string", "pattern": "^[a-f0-9]{64}$" },
|
|
11
|
+
"generated_at": { "type": "string" },
|
|
12
|
+
"summary": {
|
|
13
|
+
"type": "object",
|
|
14
|
+
"additionalProperties": false,
|
|
15
|
+
"required": ["total_actions", "ready", "blocked"],
|
|
16
|
+
"properties": {
|
|
17
|
+
"total_actions": { "type": "integer", "minimum": 0 },
|
|
18
|
+
"ready": { "type": "integer", "minimum": 0 },
|
|
19
|
+
"blocked": { "type": "integer", "minimum": 0 }
|
|
20
|
+
}
|
|
21
|
+
},
|
|
22
|
+
"actions": {
|
|
23
|
+
"type": "array",
|
|
24
|
+
"items": {
|
|
25
|
+
"type": "object",
|
|
26
|
+
"additionalProperties": false,
|
|
27
|
+
"required": ["action_id", "finding_ids", "phase", "priority", "subject", "action", "owner", "status", "required_input", "semantic_gates", "unsafe_shortcuts", "verification"],
|
|
28
|
+
"properties": {
|
|
29
|
+
"action_id": { "$ref": "citable://schemas/common.defs.json#/definitions/id" },
|
|
30
|
+
"finding_ids": { "type": "array", "minItems": 1, "items": { "type": "string" } },
|
|
31
|
+
"phase": { "type": "string", "enum": ["unblock", "governance", "content", "optimization"] },
|
|
32
|
+
"priority": { "type": "string", "enum": ["critical", "high", "medium", "low"] },
|
|
33
|
+
"subject": { "type": "string" },
|
|
34
|
+
"action": { "type": "string", "minLength": 1 },
|
|
35
|
+
"owner": { "type": ["string", "null"] },
|
|
36
|
+
"status": { "type": "string", "enum": ["ready", "blocked"] },
|
|
37
|
+
"required_input": { "type": "array", "items": { "type": "string" } },
|
|
38
|
+
"semantic_gates": { "type": "array", "items": { "type": "string" } },
|
|
39
|
+
"unsafe_shortcuts": { "type": "array", "items": { "type": "string" } },
|
|
40
|
+
"verification": {
|
|
41
|
+
"type": "object",
|
|
42
|
+
"additionalProperties": false,
|
|
43
|
+
"required": ["method", "detector", "command", "expected_result"],
|
|
44
|
+
"properties": {
|
|
45
|
+
"method": { "type": "string" },
|
|
46
|
+
"detector": { "type": "string" },
|
|
47
|
+
"command": { "type": "string" },
|
|
48
|
+
"expected_result": { "type": "string" }
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
}
|
|
@@ -10,6 +10,7 @@
|
|
|
10
10
|
"definitions": {
|
|
11
11
|
"claim": {
|
|
12
12
|
"type": "object",
|
|
13
|
+
"additionalProperties": false,
|
|
13
14
|
"required": ["claim_id", "claim", "claim_type", "status"],
|
|
14
15
|
"properties": {
|
|
15
16
|
"claim_id": { "$ref": "citable://schemas/common.defs.json#/definitions/id" },
|
|
@@ -34,6 +35,7 @@
|
|
|
34
35
|
"source_location": { "type": "string" },
|
|
35
36
|
"support_assessment": {
|
|
36
37
|
"type": "object",
|
|
38
|
+
"additionalProperties": false,
|
|
37
39
|
"required": ["status"],
|
|
38
40
|
"properties": {
|
|
39
41
|
"status": { "type": "string", "enum": ["directly_supported", "partially_supported", "inferred", "contradicted", "not_assessed"] },
|
|
@@ -12,6 +12,7 @@
|
|
|
12
12
|
},
|
|
13
13
|
"provenance": {
|
|
14
14
|
"type": "object",
|
|
15
|
+
"additionalProperties": false,
|
|
15
16
|
"properties": {
|
|
16
17
|
"created": { "$ref": "#/definitions/isoDate" },
|
|
17
18
|
"updated": { "$ref": "#/definitions/isoDate" },
|
|
@@ -21,6 +22,7 @@
|
|
|
21
22
|
},
|
|
22
23
|
"registryFile": {
|
|
23
24
|
"type": "object",
|
|
25
|
+
"additionalProperties": false,
|
|
24
26
|
"required": ["version", "kind", "entries"],
|
|
25
27
|
"properties": {
|
|
26
28
|
"version": { "type": "integer", "minimum": 1 },
|
|
@@ -10,6 +10,7 @@
|
|
|
10
10
|
"definitions": {
|
|
11
11
|
"crawler": {
|
|
12
12
|
"type": "object",
|
|
13
|
+
"additionalProperties": false,
|
|
13
14
|
"required": ["crawler_id", "user_agent", "purpose", "decision", "status"],
|
|
14
15
|
"properties": {
|
|
15
16
|
"crawler_id": { "$ref": "citable://schemas/common.defs.json#/definitions/id" },
|
|
@@ -10,6 +10,7 @@
|
|
|
10
10
|
"definitions": {
|
|
11
11
|
"entity": {
|
|
12
12
|
"type": "object",
|
|
13
|
+
"additionalProperties": false,
|
|
13
14
|
"required": ["entity_id", "canonical_name", "entity_type", "status"],
|
|
14
15
|
"properties": {
|
|
15
16
|
"entity_id": { "$ref": "citable://schemas/common.defs.json#/definitions/id" },
|
|
@@ -26,7 +27,7 @@
|
|
|
26
27
|
"secondary_categories": { "type": "array", "items": { "type": "string" } },
|
|
27
28
|
"definition": { "type": "string" },
|
|
28
29
|
"exclusions": { "type": "array", "items": { "type": "string" } },
|
|
29
|
-
"relationships": { "type": "array", "items": { "type": "object", "required": ["type", "entity"], "properties": { "type": { "type": "string" }, "entity": { "type": "string" } } } },
|
|
30
|
+
"relationships": { "type": "array", "items": { "type": "object", "additionalProperties": false, "required": ["type", "entity"], "properties": { "type": { "type": "string" }, "entity": { "type": "string" } } } },
|
|
30
31
|
"evidence": { "type": "array", "items": { "type": "string" } },
|
|
31
32
|
"schema_types": { "type": "array", "items": { "type": "string" } },
|
|
32
33
|
"status": { "$ref": "citable://schemas/common.defs.json#/definitions/status" },
|
|
@@ -10,6 +10,7 @@
|
|
|
10
10
|
"definitions": {
|
|
11
11
|
"evidence": {
|
|
12
12
|
"type": "object",
|
|
13
|
+
"additionalProperties": false,
|
|
13
14
|
"required": ["evidence_id", "title", "evidence_type", "verification_status"],
|
|
14
15
|
"properties": {
|
|
15
16
|
"evidence_id": { "$ref": "citable://schemas/common.defs.json#/definitions/id" },
|
|
@@ -10,6 +10,7 @@
|
|
|
10
10
|
"definitions": {
|
|
11
11
|
"experiment": {
|
|
12
12
|
"type": "object",
|
|
13
|
+
"additionalProperties": false,
|
|
13
14
|
"required": ["experiment_id", "hypothesis", "primary_metric", "status"],
|
|
14
15
|
"properties": {
|
|
15
16
|
"experiment_id": { "$ref": "citable://schemas/common.defs.json#/definitions/id" },
|
|
@@ -10,6 +10,7 @@
|
|
|
10
10
|
"definitions": {
|
|
11
11
|
"prompt": {
|
|
12
12
|
"type": "object",
|
|
13
|
+
"additionalProperties": false,
|
|
13
14
|
"required": ["prompt_id", "canonical_prompt", "prompt_class", "status"],
|
|
14
15
|
"properties": {
|
|
15
16
|
"prompt_id": { "$ref": "citable://schemas/common.defs.json#/definitions/id" },
|