@nebulacomponents/citable 1.4.0 → 1.5.1
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 +37 -0
- package/README.md +34 -6
- package/dist/universal/.agents/skills/citable/SKILL.md +8 -3
- package/dist/universal/.agents/skills/citable/VERSION +1 -1
- package/dist/universal/.agents/skills/citable/commands/README.md +4 -1
- package/dist/universal/.agents/skills/citable/commands/measurement.md +17 -0
- package/dist/universal/.agents/skills/citable/manifest.json +12 -8
- package/dist/universal/.agents/skills/citable/schemas/connection.schema.json +32 -0
- package/dist/universal/.agents/skills/citable/schemas/intervention.schema.json +33 -0
- package/dist/universal/.agents/skills/citable/schemas/metric.schema.json +42 -0
- package/dist/universal/.agents/skills/citable/schemas/objective.schema.json +65 -0
- package/dist/universal/.agents/skills/citable/schemas/observation.schema.json +1 -1
- package/dist/universal/.claude/skills/citable/SKILL.md +8 -3
- package/dist/universal/.claude/skills/citable/VERSION +1 -1
- package/dist/universal/.claude/skills/citable/commands/README.md +4 -1
- package/dist/universal/.claude/skills/citable/commands/measurement.md +17 -0
- package/dist/universal/.claude/skills/citable/manifest.json +12 -8
- package/dist/universal/.claude/skills/citable/schemas/connection.schema.json +32 -0
- package/dist/universal/.claude/skills/citable/schemas/intervention.schema.json +33 -0
- package/dist/universal/.claude/skills/citable/schemas/metric.schema.json +42 -0
- package/dist/universal/.claude/skills/citable/schemas/objective.schema.json +65 -0
- package/dist/universal/.claude/skills/citable/schemas/observation.schema.json +1 -1
- package/dist/universal/.cursor/skills/citable/SKILL.md +8 -3
- package/dist/universal/.cursor/skills/citable/VERSION +1 -1
- package/dist/universal/.cursor/skills/citable/commands/README.md +4 -1
- package/dist/universal/.cursor/skills/citable/commands/measurement.md +17 -0
- package/dist/universal/.cursor/skills/citable/manifest.json +12 -8
- package/dist/universal/.cursor/skills/citable/schemas/connection.schema.json +32 -0
- package/dist/universal/.cursor/skills/citable/schemas/intervention.schema.json +33 -0
- package/dist/universal/.cursor/skills/citable/schemas/metric.schema.json +42 -0
- package/dist/universal/.cursor/skills/citable/schemas/objective.schema.json +65 -0
- package/dist/universal/.cursor/skills/citable/schemas/observation.schema.json +1 -1
- package/dist/universal/.gemini/skills/citable/SKILL.md +8 -3
- package/dist/universal/.gemini/skills/citable/VERSION +1 -1
- package/dist/universal/.gemini/skills/citable/commands/README.md +4 -1
- package/dist/universal/.gemini/skills/citable/commands/measurement.md +17 -0
- package/dist/universal/.gemini/skills/citable/manifest.json +12 -8
- package/dist/universal/.gemini/skills/citable/schemas/connection.schema.json +32 -0
- package/dist/universal/.gemini/skills/citable/schemas/intervention.schema.json +33 -0
- package/dist/universal/.gemini/skills/citable/schemas/metric.schema.json +42 -0
- package/dist/universal/.gemini/skills/citable/schemas/objective.schema.json +65 -0
- package/dist/universal/.gemini/skills/citable/schemas/observation.schema.json +1 -1
- package/dist/universal/.github/skills/citable/SKILL.md +8 -3
- package/dist/universal/.github/skills/citable/VERSION +1 -1
- package/dist/universal/.github/skills/citable/commands/README.md +4 -1
- package/dist/universal/.github/skills/citable/commands/measurement.md +17 -0
- package/dist/universal/.github/skills/citable/manifest.json +12 -8
- package/dist/universal/.github/skills/citable/schemas/connection.schema.json +32 -0
- package/dist/universal/.github/skills/citable/schemas/intervention.schema.json +33 -0
- package/dist/universal/.github/skills/citable/schemas/metric.schema.json +42 -0
- package/dist/universal/.github/skills/citable/schemas/objective.schema.json +65 -0
- package/dist/universal/.github/skills/citable/schemas/observation.schema.json +1 -1
- package/dist/universal/.kiro/skills/citable/SKILL.md +8 -3
- package/dist/universal/.kiro/skills/citable/VERSION +1 -1
- package/dist/universal/.kiro/skills/citable/commands/README.md +4 -1
- package/dist/universal/.kiro/skills/citable/commands/measurement.md +17 -0
- package/dist/universal/.kiro/skills/citable/manifest.json +12 -8
- package/dist/universal/.kiro/skills/citable/schemas/connection.schema.json +32 -0
- package/dist/universal/.kiro/skills/citable/schemas/intervention.schema.json +33 -0
- package/dist/universal/.kiro/skills/citable/schemas/metric.schema.json +42 -0
- package/dist/universal/.kiro/skills/citable/schemas/objective.schema.json +65 -0
- package/dist/universal/.kiro/skills/citable/schemas/observation.schema.json +1 -1
- package/dist/universal/.opencode/skills/citable/SKILL.md +8 -3
- package/dist/universal/.opencode/skills/citable/VERSION +1 -1
- package/dist/universal/.opencode/skills/citable/commands/README.md +4 -1
- package/dist/universal/.opencode/skills/citable/commands/measurement.md +17 -0
- package/dist/universal/.opencode/skills/citable/manifest.json +12 -8
- package/dist/universal/.opencode/skills/citable/schemas/connection.schema.json +32 -0
- package/dist/universal/.opencode/skills/citable/schemas/intervention.schema.json +33 -0
- package/dist/universal/.opencode/skills/citable/schemas/metric.schema.json +42 -0
- package/dist/universal/.opencode/skills/citable/schemas/objective.schema.json +65 -0
- package/dist/universal/.opencode/skills/citable/schemas/observation.schema.json +1 -1
- package/dist/universal/.pi/agent/skills/citable/SKILL.md +8 -3
- package/dist/universal/.pi/agent/skills/citable/VERSION +1 -1
- package/dist/universal/.pi/agent/skills/citable/commands/README.md +4 -1
- package/dist/universal/.pi/agent/skills/citable/commands/measurement.md +17 -0
- package/dist/universal/.pi/agent/skills/citable/manifest.json +12 -8
- package/dist/universal/.pi/agent/skills/citable/schemas/connection.schema.json +32 -0
- package/dist/universal/.pi/agent/skills/citable/schemas/intervention.schema.json +33 -0
- package/dist/universal/.pi/agent/skills/citable/schemas/metric.schema.json +42 -0
- package/dist/universal/.pi/agent/skills/citable/schemas/objective.schema.json +65 -0
- package/dist/universal/.pi/agent/skills/citable/schemas/observation.schema.json +1 -1
- package/dist/universal/.qoder/skills/citable/SKILL.md +8 -3
- package/dist/universal/.qoder/skills/citable/VERSION +1 -1
- package/dist/universal/.qoder/skills/citable/commands/README.md +4 -1
- package/dist/universal/.qoder/skills/citable/commands/measurement.md +17 -0
- package/dist/universal/.qoder/skills/citable/manifest.json +12 -8
- package/dist/universal/.qoder/skills/citable/schemas/connection.schema.json +32 -0
- package/dist/universal/.qoder/skills/citable/schemas/intervention.schema.json +33 -0
- package/dist/universal/.qoder/skills/citable/schemas/metric.schema.json +42 -0
- package/dist/universal/.qoder/skills/citable/schemas/objective.schema.json +65 -0
- package/dist/universal/.qoder/skills/citable/schemas/observation.schema.json +1 -1
- package/dist/universal/.rovodev/skills/citable/SKILL.md +8 -3
- package/dist/universal/.rovodev/skills/citable/VERSION +1 -1
- package/dist/universal/.rovodev/skills/citable/commands/README.md +4 -1
- package/dist/universal/.rovodev/skills/citable/commands/measurement.md +17 -0
- package/dist/universal/.rovodev/skills/citable/manifest.json +12 -8
- package/dist/universal/.rovodev/skills/citable/schemas/connection.schema.json +32 -0
- package/dist/universal/.rovodev/skills/citable/schemas/intervention.schema.json +33 -0
- package/dist/universal/.rovodev/skills/citable/schemas/metric.schema.json +42 -0
- package/dist/universal/.rovodev/skills/citable/schemas/objective.schema.json +65 -0
- package/dist/universal/.rovodev/skills/citable/schemas/observation.schema.json +1 -1
- package/dist/universal/.trae/skills/citable/SKILL.md +8 -3
- package/dist/universal/.trae/skills/citable/VERSION +1 -1
- package/dist/universal/.trae/skills/citable/commands/README.md +4 -1
- package/dist/universal/.trae/skills/citable/commands/measurement.md +17 -0
- package/dist/universal/.trae/skills/citable/manifest.json +12 -8
- package/dist/universal/.trae/skills/citable/schemas/connection.schema.json +32 -0
- package/dist/universal/.trae/skills/citable/schemas/intervention.schema.json +33 -0
- package/dist/universal/.trae/skills/citable/schemas/metric.schema.json +42 -0
- package/dist/universal/.trae/skills/citable/schemas/objective.schema.json +65 -0
- package/dist/universal/.trae/skills/citable/schemas/observation.schema.json +1 -1
- package/dist/universal/.trae-cn/skills/citable/SKILL.md +8 -3
- package/dist/universal/.trae-cn/skills/citable/VERSION +1 -1
- package/dist/universal/.trae-cn/skills/citable/commands/README.md +4 -1
- package/dist/universal/.trae-cn/skills/citable/commands/measurement.md +17 -0
- package/dist/universal/.trae-cn/skills/citable/manifest.json +12 -8
- package/dist/universal/.trae-cn/skills/citable/schemas/connection.schema.json +32 -0
- package/dist/universal/.trae-cn/skills/citable/schemas/intervention.schema.json +33 -0
- package/dist/universal/.trae-cn/skills/citable/schemas/metric.schema.json +42 -0
- package/dist/universal/.trae-cn/skills/citable/schemas/objective.schema.json +65 -0
- package/dist/universal/.trae-cn/skills/citable/schemas/observation.schema.json +1 -1
- package/dist/universal/manifest.json +147 -99
- package/package.json +4 -1
- package/schemas/connection.schema.json +32 -0
- package/schemas/intervention.schema.json +33 -0
- package/schemas/metric.schema.json +42 -0
- package/schemas/objective.schema.json +65 -0
- package/schemas/observation.schema.json +1 -1
- package/skill/SKILL.md +8 -3
- package/skill/commands/README.md +4 -1
- package/skill/commands/measurement.md +17 -0
- package/src/cli/index.js +28 -0
- package/src/commands/measurement.js +205 -0
- package/src/installer/index.js +35 -7
- package/src/installer/providers.js +1 -1
- package/src/registries/index.js +13 -0
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,42 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## Unreleased
|
|
4
|
+
|
|
5
|
+
## 1.5.1 — 2026-07-18
|
|
6
|
+
|
|
7
|
+
### Fixed
|
|
8
|
+
|
|
9
|
+
- `Ship release` now explicitly dispatches trusted npm publishing at the newly
|
|
10
|
+
created tag because GitHub suppresses workflow events generated by its own
|
|
11
|
+
repository token.
|
|
12
|
+
|
|
13
|
+
## 1.5.0 — 2026-07-18
|
|
14
|
+
|
|
15
|
+
### Added
|
|
16
|
+
|
|
17
|
+
- Installer aliases compatible with the common `skills` CLI interface:
|
|
18
|
+
repeatable `--agent`/`-a`, `--skill`/`-s`, `--copy`, `-p`, `-g`, and `*`
|
|
19
|
+
provider selection.
|
|
20
|
+
- Explicit copy-only integrity policy and actionable rejection of unsupported
|
|
21
|
+
symlink installs.
|
|
22
|
+
- Structured pull request controls with code ownership, a required PR contract,
|
|
23
|
+
Conventional Commits title validation, and release-note enforcement.
|
|
24
|
+
- Review-gated release preparation and shipping workflows with semantic-version
|
|
25
|
+
consistency checks, changelog-derived GitHub releases, protected tagging, and
|
|
26
|
+
npm trusted publishing handoff.
|
|
27
|
+
- Optional provider-neutral metric, objective, intervention, and connection-state
|
|
28
|
+
contracts with strict schema and referential validation.
|
|
29
|
+
- CSV/JSON metric imports, user-owned objective creation and validation, and
|
|
30
|
+
evidence-deduplicated baseline/evaluation reporting with explicit guardrails
|
|
31
|
+
and inconclusive outcomes.
|
|
32
|
+
|
|
33
|
+
### Fixed
|
|
34
|
+
|
|
35
|
+
- `citable install --all` now selects every supported provider in addition to
|
|
36
|
+
confirming non-interactively.
|
|
37
|
+
- Release preparation now updates and validates the canonical skill version in
|
|
38
|
+
addition to package, lockfile, changelog, and roadmap versions.
|
|
39
|
+
|
|
3
40
|
## 1.4.0 — 2026-07-18
|
|
4
41
|
|
|
5
42
|
### Added
|
package/README.md
CHANGED
|
@@ -52,6 +52,20 @@ Install into specific agents:
|
|
|
52
52
|
npx @nebulacomponents/citable install --providers=claude,codex,cursor
|
|
53
53
|
```
|
|
54
54
|
|
|
55
|
+
The installer also accepts the common `skills` CLI conventions. `--agent` is
|
|
56
|
+
repeatable, `--skill` accepts `citable` or `*`, and `--copy` explicitly selects
|
|
57
|
+
Citable's default managed-copy mode:
|
|
58
|
+
|
|
59
|
+
```bash
|
|
60
|
+
npx @nebulacomponents/citable install --agent claude-code --agent codex --skill citable --copy -p -y
|
|
61
|
+
```
|
|
62
|
+
|
|
63
|
+
Install into every supported provider layout without prompting:
|
|
64
|
+
|
|
65
|
+
```bash
|
|
66
|
+
npx @nebulacomponents/citable install --all --project
|
|
67
|
+
```
|
|
68
|
+
|
|
55
69
|
Install globally:
|
|
56
70
|
|
|
57
71
|
```bash
|
|
@@ -91,10 +105,13 @@ provider-specific home paths, including `~/.claude/skills/citable/`,
|
|
|
91
105
|
Target resolution is deterministic: explicit `--providers` wins, then project
|
|
92
106
|
harness directories, then user-home harness hints. `--providers=detected`
|
|
93
107
|
selects every detected supported provider; `--providers=all` selects every
|
|
94
|
-
supported provider layout for the requested scope.
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
108
|
+
supported provider layout for the requested scope. `--providers=*` and `--all`
|
|
109
|
+
are equivalent provider selections; `--all` also confirms non-interactively.
|
|
110
|
+
Repeatable `--agent`/`-a`, `--skill`/`-s`, `--copy`, `-p`, and `-g` follow the
|
|
111
|
+
familiar `skills` CLI interface. Unknown provider or skill names fail non-zero.
|
|
112
|
+
Project scope is the default unless `--global`/`--user`/`--scope=global` is
|
|
113
|
+
supplied. The installer never reports success when no install target was
|
|
114
|
+
selected.
|
|
98
115
|
|
|
99
116
|
Managed installs carry `manifest.json` with `managedBy: "citable-cli"` and
|
|
100
117
|
SHA-256 hashes for the installed payload. Repeated installs validate the tree
|
|
@@ -102,7 +119,9 @@ and report `already current`. `update` compares the complete managed tree, not
|
|
|
102
119
|
only `SKILL.md` or the version string. `uninstall` removes managed files only
|
|
103
120
|
and preserves unrelated files in the skill directory. Locally modified managed
|
|
104
121
|
installs and unmanaged `citable/` collisions are refused unless `--force` is
|
|
105
|
-
used.
|
|
122
|
+
used. Symlink mode is intentionally unsupported: provider-specific payloads and
|
|
123
|
+
their manifests must remain an atomic managed unit so validation and uninstall
|
|
124
|
+
do not cross ownership boundaries.
|
|
106
125
|
|
|
107
126
|
The initial installer installs the skill payload only. It does not install
|
|
108
127
|
provider hooks, sidecar configuration, telemetry, or unrelated agent settings.
|
|
@@ -133,6 +152,10 @@ citable observe performance --target https://example.com # CRUX_API_KEY
|
|
|
133
152
|
citable apply --input remediation-spec.json # dry run
|
|
134
153
|
citable apply --input remediation-spec.json --write # reviewed + hash-locked
|
|
135
154
|
citable monitor [runA runB]
|
|
155
|
+
citable metrics import --provider gsc --input metrics.csv
|
|
156
|
+
citable objectives init --input objective.json --write
|
|
157
|
+
citable objectives validate
|
|
158
|
+
citable evaluate OBJECTIVE-PRODUCT_DISCOVERY --ref-date 2026-07-18
|
|
136
159
|
citable substantiate # claim/evidence assessment (dry run)
|
|
137
160
|
citable validate # registry schema + referential integrity
|
|
138
161
|
```
|
|
@@ -143,7 +166,7 @@ citable validate # registry schema + referential integrity
|
|
|
143
166
|
| --- | --- |
|
|
144
167
|
| `skill/` | Canonical agent skill: SKILL.md, command contracts, rubrics, anti-patterns, policies, templates |
|
|
145
168
|
| `src/` | CLI, commands, registries, detectors, crawler/extractor, evidence, reporting |
|
|
146
|
-
| `schemas/` | JSON Schemas:
|
|
169
|
+
| `schemas/` | JSON Schemas: 13 registries plus findings, runs, observations, remediation, config, and prompt results |
|
|
147
170
|
| `tests/` | Unit + integration suites; positive/negative fixtures |
|
|
148
171
|
| `docs/` | ADR, traceability matrix, known limitations |
|
|
149
172
|
| `dist/` | Generated distribution packages (run `npm run build:dist`) |
|
|
@@ -159,6 +182,8 @@ citable validate # registry schema + referential integrity
|
|
|
159
182
|
any coverage claim
|
|
160
183
|
- [Capability gap analysis](docs/capability-gap-analysis.md) — implemented,
|
|
161
184
|
partial, operator-supplied, and missing evidence boundaries
|
|
185
|
+
- [Measurement objectives](docs/measurement-objectives.md) — optional metric
|
|
186
|
+
imports, user-owned objectives, comparison windows, and guardrails
|
|
162
187
|
|
|
163
188
|
## Requirements
|
|
164
189
|
|
|
@@ -168,6 +193,9 @@ an installed Chromium browser. Google index inspection uses `GSC_ACCESS_TOKEN`
|
|
|
168
193
|
and `--site-url`; CrUX uses `CRUX_API_KEY`. Missing dependencies or credentials
|
|
169
194
|
produce incomplete evidence. Supported frameworks for auto-detection: Next.js,
|
|
170
195
|
Astro, Nuxt, SvelteKit, Gatsby (other stacks: audit their built HTML output).
|
|
196
|
+
Metrics and objectives are optional. No analytics or webmaster connection is
|
|
197
|
+
required for core Citable workflows; owner CSV/JSON imports work without live
|
|
198
|
+
provider authorization.
|
|
171
199
|
|
|
172
200
|
## License
|
|
173
201
|
|
|
@@ -7,7 +7,7 @@ description: >
|
|
|
7
7
|
generative engine optimization, structured data governance, claim substantiation,
|
|
8
8
|
crawler policy, entity consistency, content discoverability, or wants a site audited
|
|
9
9
|
for how search and AI systems will retrieve, understand, cite, or recommend it.
|
|
10
|
-
version: 1.
|
|
10
|
+
version: 1.5.1
|
|
11
11
|
---
|
|
12
12
|
|
|
13
13
|
# Citable — search & generative discoverability governance
|
|
@@ -88,6 +88,10 @@ citable action-plan [run-id] # ordered actions, blockers, semantic gate
|
|
|
88
88
|
citable observe <mode> [options] # render/index/citation/log/passage/consensus/performance evidence
|
|
89
89
|
citable apply --input <spec> [--write] # reviewed, hash-locked remediation; dry run by default
|
|
90
90
|
citable monitor [runA runB] # observation regression alerts
|
|
91
|
+
citable metrics import --provider <name> --input <csv|json>
|
|
92
|
+
citable objectives init --input <json|yaml> [--write]
|
|
93
|
+
citable objectives validate
|
|
94
|
+
citable evaluate [objective-id] [--ref-date YYYY-MM-DD]
|
|
91
95
|
```
|
|
92
96
|
|
|
93
97
|
Audit scopes: `technical seo aeo geo architecture entity claims evidence schema
|
|
@@ -144,8 +148,9 @@ mandatory.
|
|
|
144
148
|
|
|
145
149
|
## Registries are the source of truth
|
|
146
150
|
|
|
147
|
-
`.citable/` holds
|
|
148
|
-
evidence, pages, crawlers, competitors, experiments
|
|
151
|
+
`.citable/` holds YAML registries for queries, prompts, entities, claims,
|
|
152
|
+
evidence, pages, crawlers, competitors, experiments, metrics, objectives,
|
|
153
|
+
interventions, and optional connection state, all schema-validated
|
|
149
154
|
(`schemas/*.schema.json`) with referential integrity checks. Rules:
|
|
150
155
|
|
|
151
156
|
- Never overwrite registry content without history — use the loader/saver in
|
|
@@ -1 +1 @@
|
|
|
1
|
-
1.
|
|
1
|
+
1.5.1
|
|
@@ -24,11 +24,14 @@ intent, not executability, so statuses are strict:
|
|
|
24
24
|
| /citable observe | implemented — render, index, citation, crawler-log, passage, consensus, performance, and corroboration evidence |
|
|
25
25
|
| /citable apply | implemented — reviewed, hash-locked source replacements; dry run by default |
|
|
26
26
|
| /citable monitor | implemented — compares immutable observation runs and emits evidence-linked alerts |
|
|
27
|
+
| /citable metrics import | implemented — validates declared CSV/JSON metrics and writes immutable observations |
|
|
28
|
+
| /citable objectives init / validate | implemented — user-owned metric selection, cohorts, windows, and guardrails |
|
|
29
|
+
| /citable evaluate | implemented — independent baseline/evaluation comparisons with inconclusive handling |
|
|
27
30
|
| /citable ingest, map-site, map-queries, map-prompts, map-entities, map-evidence | specified (ingest.md) |
|
|
28
31
|
| /citable optimize-page | specified (optimize-page.md) — requires source-to-render mapping, claim-preserving rewrites, build execution, rollback; none of that is proven yet |
|
|
29
32
|
| /citable create-page, answer-block, architect, interlink, consolidate, metadata | specified (page-work.md) |
|
|
30
33
|
| /citable validate-render | partially implemented by `observe render`; mobile/cross-browser and interaction exploration remain |
|
|
31
|
-
| /citable measure seo/aeo/geo, test-prompts, monitor-crawlers, monitor-contradictions | partially implemented by observation imports, Google/CrUX live APIs, custom citation adapters, and monitor comparisons |
|
|
34
|
+
| /citable measure seo/aeo/geo, test-prompts, monitor-crawlers, monitor-contradictions | partially implemented by metric/observation imports, objective evaluation, Google/CrUX live APIs, custom citation adapters, and monitor comparisons |
|
|
32
35
|
|
|
33
36
|
Shared refusal conditions (all commands): any action that would fabricate
|
|
34
37
|
facts, citations, evidence, authorship, reviews, corroboration, or hidden
|
|
@@ -10,6 +10,23 @@ imports, and a disclosed custom citation-adapter protocol. It does not claim
|
|
|
10
10
|
Bing AI Performance automation or equivalence between an API adapter and a
|
|
11
11
|
consumer answer product. Preserve collector and product mode on every result.
|
|
12
12
|
|
|
13
|
+
# implemented metric and objective workflow
|
|
14
|
+
|
|
15
|
+
`citable metrics import --provider <name> --input <csv|json>` validates every
|
|
16
|
+
row against a declared entry in `metrics.yaml` and writes immutable metric
|
|
17
|
+
observations. `citable objectives init --input <json|yaml>` is dry-run by
|
|
18
|
+
default; `--write` adds the validated objective with registry history.
|
|
19
|
+
`citable objectives validate` checks contracts and metric references.
|
|
20
|
+
`citable evaluate [objective-id]` compares independent baseline and evaluation
|
|
21
|
+
windows, deduplicates repeated evidence, and reports each metric and guardrail
|
|
22
|
+
separately. Insufficient data is `inconclusive`, never zero. Results describe
|
|
23
|
+
temporal association and do not establish causation.
|
|
24
|
+
|
|
25
|
+
Metrics, objectives, interventions, and connection state are optional. The
|
|
26
|
+
absence of provider credentials is `not_configured`, not a finding and not
|
|
27
|
+
evidence of zero activity. Credentials must never enter registries or evidence
|
|
28
|
+
packages.
|
|
29
|
+
|
|
13
30
|
# measure seo
|
|
14
31
|
Inputs the operator exports (Search Console/Bing/analytics CSV or JSON).
|
|
15
32
|
Workflow: validate segmentation (brand vs non-brand, intent, page type,
|
|
@@ -1,20 +1,20 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "citable",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.5.1",
|
|
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.5.1",
|
|
9
9
|
"variantPath": ".agents/skills/citable",
|
|
10
10
|
"files": {
|
|
11
11
|
"commands/action-findings.md": "sha256:510361461f24fcd4a550e0a8d960c383aefe23f9a65a54a3ffc44abd4c1293e7",
|
|
12
12
|
"commands/ingest.md": "sha256:cf35659aecd9d0e160909003efdbe056864fc5d824c71b4ef0ee801ce07ff598",
|
|
13
|
-
"commands/measurement.md": "sha256:
|
|
13
|
+
"commands/measurement.md": "sha256:5d7d94b496d2772ad433cf9fafa85af5c9638c8f326ec2017d2c8d6ef4dd1650",
|
|
14
14
|
"commands/observe-and-act.md": "sha256:02a93bbbfddc3d8e11cb921ddccd19b0666133c4bdb4f4a280bcb131bed37e8c",
|
|
15
15
|
"commands/optimize-page.md": "sha256:35866f3d7cdeef0376ea7a7d7036085a9b9cf95bbb300ecf4bd77610ebd74d85",
|
|
16
16
|
"commands/page-work.md": "sha256:965a66e59bdf7b0da482d26fade53b3d265885ece5d463fe83b0789ebefaef3e",
|
|
17
|
-
"commands/README.md": "sha256:
|
|
17
|
+
"commands/README.md": "sha256:be1f55b439af94670d0711dcd7476eab09a2d7c86c4bcbf85b2ee0b454fb8684",
|
|
18
18
|
"commands/validate-render.md": "sha256:a8e1d04d40b84d57c35039250d98c6a7302cd44a148a8c3b9d9cfb92678c4347",
|
|
19
19
|
"policies/crawler-policy-template.md": "sha256:15c88a4eeb21f53f71e5250dd3eb2d2791a814b304eaefce8bb30e2bdf2e2e59",
|
|
20
20
|
"references/aeo-geo-validation.md": "sha256:e45828d3ccca54a08513cb4235578c8a8ecf1dc47d1cb98e4a497838103bef70",
|
|
@@ -38,13 +38,17 @@
|
|
|
38
38
|
"schemas/common.defs.json": "sha256:effdd812910d1c275c50520bb70d8aec085e53fa8cb68054dc58c04a5d4a66b3",
|
|
39
39
|
"schemas/competitor.schema.json": "sha256:2f6fd7e4543846bde56ff4dc62bb41fa366889787b794a7cdb0bff1a3392e591",
|
|
40
40
|
"schemas/config.schema.json": "sha256:a87f3bb0087de09035b9f2dafea66e32e4fcc2e3e329abcd0fd8a5ec33318f2a",
|
|
41
|
+
"schemas/connection.schema.json": "sha256:cf0e9698dee697fb2c124989c3f478187297594c6ae76ecd04a43470e0a73616",
|
|
41
42
|
"schemas/crawler.schema.json": "sha256:1a113dfb80bc6cde904c3ea648c82ea1d88fe50f2c1a0e7175d44abba28ac64e",
|
|
42
43
|
"schemas/detector-quality.schema.json": "sha256:5e9e1ac80b1198a0ff8fa17b9f7a543d3ccf3ed3d60196152f6ff095cfdebccd",
|
|
43
44
|
"schemas/entity.schema.json": "sha256:78a08c35c8f4eb7a804ab46b61a238502f59621ac5218991e783251fbde61c4f",
|
|
44
45
|
"schemas/evidence.schema.json": "sha256:76baec7ad7e89c6952473c01dacb9e3b26953c088331e6314d531ce620df9ec1",
|
|
45
46
|
"schemas/experiment.schema.json": "sha256:3cebebc5745a9eb359261408b0a0421b8370d2c94f8244ce939827cd9da41cb6",
|
|
46
47
|
"schemas/finding.schema.json": "sha256:85907cd04cd8d2fe24a1e618e0df7160f6d56aa1818db501f345aebce5eb5edb",
|
|
47
|
-
"schemas/
|
|
48
|
+
"schemas/intervention.schema.json": "sha256:fcf28e117b207e64ffc96088aa70a95370841a2a9fa43ecb1c82b34c2058a818",
|
|
49
|
+
"schemas/metric.schema.json": "sha256:2ada648e7274a8d78cc9d6e7ed616f91faa79cf9ed07613e2c1fc53b247aac8d",
|
|
50
|
+
"schemas/objective.schema.json": "sha256:94404dc95d04a6641ea7b9654317d0222793251ad44d3dfd2875738622a36025",
|
|
51
|
+
"schemas/observation.schema.json": "sha256:240ab0030e900dd8d779b63ef0558b1cca3b59a6de1a10cf9b2418b73ad92f02",
|
|
48
52
|
"schemas/page.schema.json": "sha256:627613c35f461177fa946df08edf66fbf6f6bbdfc57eef812572b3af796d5e07",
|
|
49
53
|
"schemas/project.schema.json": "sha256:ea48fdb6480f7047ba4594bd5908bc1f79c1ad6b9a2c204df900959b5f203dc6",
|
|
50
54
|
"schemas/prompt-result.schema.json": "sha256:b55be47d7d58d7b1dd8c3b1e849e24e55216212c592cde7eb836953379b85737",
|
|
@@ -53,9 +57,9 @@
|
|
|
53
57
|
"schemas/remediation-spec.schema.json": "sha256:6fe8cb773702862ba6d261198bb5cc2dca3eca0a2310a60ebddd04377654df8d",
|
|
54
58
|
"schemas/run.schema.json": "sha256:46c3178620f3a358d936d535aeadb83454b9b35b551e53e6615cc9862063dacb",
|
|
55
59
|
"scripts/README.md": "sha256:1c3e952950ef353849621b07c5f615bf7cd20cc5654da4635492a7bd6384e747",
|
|
56
|
-
"SKILL.md": "sha256:
|
|
60
|
+
"SKILL.md": "sha256:ef61c795af6e99099cd6247f4f6fec62ceb8c64f3eaa3e17eeb6b24057f7498c",
|
|
57
61
|
"templates/finding-review.md": "sha256:b270a83d3f015150aac80249ae9314979c0befea39ff92ec455f9a5aaa73404c",
|
|
58
|
-
"VERSION": "sha256:
|
|
62
|
+
"VERSION": "sha256:dfe7d71b3f428eb73ed853f8fded65e2986896e21d69f45ebf06bb623b450e14"
|
|
59
63
|
},
|
|
60
|
-
"treeHash": "sha256:
|
|
64
|
+
"treeHash": "sha256:32f29a5d5aaab9b58e1ceae7ab894fe66fa2b55091248a20221f5f93b8e60915"
|
|
61
65
|
}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$id": "citable://schemas/connection.schema.json",
|
|
3
|
+
"$schema": "http://json-schema.org/draft-07/schema#",
|
|
4
|
+
"title": "Optional connector state registry",
|
|
5
|
+
"type": "object",
|
|
6
|
+
"additionalProperties": false,
|
|
7
|
+
"required": ["version", "kind", "updated", "entries"],
|
|
8
|
+
"properties": {
|
|
9
|
+
"version": { "const": 1 },
|
|
10
|
+
"kind": { "const": "connections" },
|
|
11
|
+
"updated": { "type": "string", "format": "date-time" },
|
|
12
|
+
"entries": {
|
|
13
|
+
"type": "array",
|
|
14
|
+
"items": {
|
|
15
|
+
"type": "object",
|
|
16
|
+
"additionalProperties": false,
|
|
17
|
+
"required": ["connection_id", "provider", "state", "authentication", "scopes", "limitations"],
|
|
18
|
+
"properties": {
|
|
19
|
+
"connection_id": { "type": "string", "pattern": "^CONNECTION-[A-Z0-9][A-Z0-9_-]*$" },
|
|
20
|
+
"provider": { "type": "string", "minLength": 1 },
|
|
21
|
+
"property_id": { "type": ["string", "null"] },
|
|
22
|
+
"state": { "type": "string", "enum": ["not_configured", "configured", "synchronized", "partial", "authorization_expired", "permission_denied", "quota_limited", "temporarily_unavailable"] },
|
|
23
|
+
"authentication": { "type": "string", "enum": ["none", "environment", "os_keychain", "external_secret_manager", "owner_import"] },
|
|
24
|
+
"scopes": { "type": "array", "items": { "type": "string" } },
|
|
25
|
+
"last_synchronized_at": { "type": ["string", "null"], "format": "date-time" },
|
|
26
|
+
"cursor": { "type": ["string", "null"] },
|
|
27
|
+
"limitations": { "type": "array", "items": { "type": "string" } }
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$id": "citable://schemas/intervention.schema.json",
|
|
3
|
+
"$schema": "http://json-schema.org/draft-07/schema#",
|
|
4
|
+
"title": "Intervention registry",
|
|
5
|
+
"type": "object",
|
|
6
|
+
"additionalProperties": false,
|
|
7
|
+
"required": ["version", "kind", "updated", "entries"],
|
|
8
|
+
"properties": {
|
|
9
|
+
"version": { "const": 1 },
|
|
10
|
+
"kind": { "const": "interventions" },
|
|
11
|
+
"updated": { "type": "string", "format": "date-time" },
|
|
12
|
+
"entries": {
|
|
13
|
+
"type": "array",
|
|
14
|
+
"items": {
|
|
15
|
+
"type": "object",
|
|
16
|
+
"additionalProperties": false,
|
|
17
|
+
"required": ["intervention_id", "name", "status", "deployed_at", "affected_urls", "finding_ids", "objective_ids", "limitations"],
|
|
18
|
+
"properties": {
|
|
19
|
+
"intervention_id": { "type": "string", "pattern": "^INTERVENTION-[A-Z0-9][A-Z0-9_-]*$" },
|
|
20
|
+
"name": { "type": "string", "minLength": 1 },
|
|
21
|
+
"status": { "type": "string", "enum": ["planned", "deployed", "rolled_back", "superseded"] },
|
|
22
|
+
"deployed_at": { "type": ["string", "null"], "format": "date-time" },
|
|
23
|
+
"commit": { "type": ["string", "null"] },
|
|
24
|
+
"pull_request": { "type": ["string", "null"] },
|
|
25
|
+
"affected_urls": { "type": "array", "items": { "type": "string" } },
|
|
26
|
+
"finding_ids": { "type": "array", "items": { "type": "string" } },
|
|
27
|
+
"objective_ids": { "type": "array", "items": { "type": "string", "pattern": "^OBJECTIVE-" } },
|
|
28
|
+
"limitations": { "type": "array", "items": { "type": "string" } }
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$id": "citable://schemas/metric.schema.json",
|
|
3
|
+
"$schema": "http://json-schema.org/draft-07/schema#",
|
|
4
|
+
"title": "Metric registry",
|
|
5
|
+
"type": "object",
|
|
6
|
+
"additionalProperties": false,
|
|
7
|
+
"required": ["version", "kind", "updated", "entries"],
|
|
8
|
+
"properties": {
|
|
9
|
+
"version": { "const": 1 },
|
|
10
|
+
"kind": { "const": "metrics" },
|
|
11
|
+
"updated": { "type": "string", "format": "date-time" },
|
|
12
|
+
"entries": {
|
|
13
|
+
"type": "array",
|
|
14
|
+
"items": {
|
|
15
|
+
"type": "object",
|
|
16
|
+
"additionalProperties": false,
|
|
17
|
+
"required": ["metric_id", "name", "provider", "external_name", "unit", "value_type", "aggregation", "direction", "dimensions", "limitations"],
|
|
18
|
+
"properties": {
|
|
19
|
+
"metric_id": { "type": "string", "pattern": "^METRIC-[A-Z0-9][A-Z0-9_-]*$" },
|
|
20
|
+
"name": { "type": "string", "minLength": 1 },
|
|
21
|
+
"description": { "type": "string" },
|
|
22
|
+
"provider": { "type": "string", "minLength": 1 },
|
|
23
|
+
"external_name": { "type": "string", "minLength": 1 },
|
|
24
|
+
"unit": { "type": "string", "enum": ["count", "ratio", "percent", "currency", "duration_ms", "position", "score", "custom"] },
|
|
25
|
+
"custom_unit": { "type": "string", "minLength": 1 },
|
|
26
|
+
"value_type": { "type": "string", "enum": ["integer", "number"] },
|
|
27
|
+
"aggregation": { "type": "string", "enum": ["sum", "average", "minimum", "maximum", "latest", "provider_defined"] },
|
|
28
|
+
"direction": { "type": "string", "enum": ["increase", "decrease", "maintain", "contextual"] },
|
|
29
|
+
"dimensions": { "type": "array", "uniqueItems": true, "items": { "type": "string", "minLength": 1 } },
|
|
30
|
+
"limitations": { "type": "array", "items": { "type": "string", "minLength": 1 } },
|
|
31
|
+
"status": { "type": "string", "enum": ["active", "deprecated"] }
|
|
32
|
+
},
|
|
33
|
+
"allOf": [
|
|
34
|
+
{
|
|
35
|
+
"if": { "properties": { "unit": { "const": "custom" } } },
|
|
36
|
+
"then": { "required": ["custom_unit"] }
|
|
37
|
+
}
|
|
38
|
+
]
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
}
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$id": "citable://schemas/objective.schema.json",
|
|
3
|
+
"$schema": "http://json-schema.org/draft-07/schema#",
|
|
4
|
+
"title": "Objective registry",
|
|
5
|
+
"type": "object",
|
|
6
|
+
"additionalProperties": false,
|
|
7
|
+
"required": ["version", "kind", "updated", "entries"],
|
|
8
|
+
"properties": {
|
|
9
|
+
"version": { "const": 1 },
|
|
10
|
+
"kind": { "const": "objectives" },
|
|
11
|
+
"updated": { "type": "string", "format": "date-time" },
|
|
12
|
+
"entries": {
|
|
13
|
+
"type": "array",
|
|
14
|
+
"items": {
|
|
15
|
+
"type": "object",
|
|
16
|
+
"additionalProperties": false,
|
|
17
|
+
"required": ["objective_id", "name", "status", "primary_metrics", "supporting_metrics", "guardrails", "cohort", "comparison"],
|
|
18
|
+
"properties": {
|
|
19
|
+
"objective_id": { "type": "string", "pattern": "^OBJECTIVE-[A-Z0-9][A-Z0-9_-]*$" },
|
|
20
|
+
"name": { "type": "string", "minLength": 1 },
|
|
21
|
+
"description": { "type": "string" },
|
|
22
|
+
"owner": { "type": ["string", "null"] },
|
|
23
|
+
"status": { "type": "string", "enum": ["draft", "active", "paused", "archived"] },
|
|
24
|
+
"primary_metrics": { "type": "array", "minItems": 1, "uniqueItems": true, "items": { "$ref": "#/definitions/metricRef" } },
|
|
25
|
+
"supporting_metrics": { "type": "array", "uniqueItems": true, "items": { "$ref": "#/definitions/metricRef" } },
|
|
26
|
+
"guardrails": { "type": "array", "items": { "$ref": "#/definitions/guardrail" } },
|
|
27
|
+
"cohort": { "$ref": "#/definitions/cohort" },
|
|
28
|
+
"comparison": {
|
|
29
|
+
"type": "object",
|
|
30
|
+
"additionalProperties": false,
|
|
31
|
+
"required": ["baseline_days", "evaluation_days", "minimum_observations"],
|
|
32
|
+
"properties": {
|
|
33
|
+
"baseline_days": { "type": "integer", "minimum": 1 },
|
|
34
|
+
"evaluation_days": { "type": "integer", "minimum": 1 },
|
|
35
|
+
"minimum_observations": { "type": "integer", "minimum": 1 }
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
},
|
|
42
|
+
"definitions": {
|
|
43
|
+
"metricRef": { "type": "string", "pattern": "^METRIC-[A-Z0-9][A-Z0-9_-]*$" },
|
|
44
|
+
"guardrail": {
|
|
45
|
+
"type": "object",
|
|
46
|
+
"additionalProperties": false,
|
|
47
|
+
"required": ["metric_id", "operator", "threshold"],
|
|
48
|
+
"properties": {
|
|
49
|
+
"metric_id": { "$ref": "#/definitions/metricRef" },
|
|
50
|
+
"operator": { "type": "string", "enum": ["gte", "lte", "increase_by", "decrease_by", "no_regression"] },
|
|
51
|
+
"threshold": { "type": "number" }
|
|
52
|
+
}
|
|
53
|
+
},
|
|
54
|
+
"cohort": {
|
|
55
|
+
"type": "object",
|
|
56
|
+
"additionalProperties": false,
|
|
57
|
+
"required": ["urls", "queries", "labels"],
|
|
58
|
+
"properties": {
|
|
59
|
+
"urls": { "type": "array", "items": { "type": "string" } },
|
|
60
|
+
"queries": { "type": "array", "items": { "type": "string" } },
|
|
61
|
+
"labels": { "type": "array", "items": { "type": "string" } }
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
}
|
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
"required": ["observation_id", "kind", "state", "collected_at", "collection_method", "confidence", "source", "evidence_hash", "data"],
|
|
8
8
|
"properties": {
|
|
9
9
|
"observation_id": { "type": "string", "minLength": 1 },
|
|
10
|
-
"kind": { "type": "string", "enum": ["render", "index", "citation", "citation_review", "crawler_log", "passage", "canonical_freshness", "performance", "corroboration"] },
|
|
10
|
+
"kind": { "type": "string", "enum": ["render", "index", "citation", "citation_review", "crawler_log", "passage", "canonical_freshness", "performance", "corroboration", "metric"] },
|
|
11
11
|
"state": { "type": "string", "enum": ["observed", "not_observed", "not_evidenced", "incomplete", "review_required", "failed"] },
|
|
12
12
|
"collected_at": { "type": "string", "format": "date-time" },
|
|
13
13
|
"collection_method": { "type": "string", "enum": ["live_api", "browser", "owner_import", "synthetic_fetch", "static_analysis", "human_review"] },
|
|
@@ -7,7 +7,7 @@ description: >
|
|
|
7
7
|
generative engine optimization, structured data governance, claim substantiation,
|
|
8
8
|
crawler policy, entity consistency, content discoverability, or wants a site audited
|
|
9
9
|
for how search and AI systems will retrieve, understand, cite, or recommend it.
|
|
10
|
-
version: 1.
|
|
10
|
+
version: 1.5.1
|
|
11
11
|
---
|
|
12
12
|
|
|
13
13
|
# Citable — search & generative discoverability governance
|
|
@@ -88,6 +88,10 @@ citable action-plan [run-id] # ordered actions, blockers, semantic gate
|
|
|
88
88
|
citable observe <mode> [options] # render/index/citation/log/passage/consensus/performance evidence
|
|
89
89
|
citable apply --input <spec> [--write] # reviewed, hash-locked remediation; dry run by default
|
|
90
90
|
citable monitor [runA runB] # observation regression alerts
|
|
91
|
+
citable metrics import --provider <name> --input <csv|json>
|
|
92
|
+
citable objectives init --input <json|yaml> [--write]
|
|
93
|
+
citable objectives validate
|
|
94
|
+
citable evaluate [objective-id] [--ref-date YYYY-MM-DD]
|
|
91
95
|
```
|
|
92
96
|
|
|
93
97
|
Audit scopes: `technical seo aeo geo architecture entity claims evidence schema
|
|
@@ -144,8 +148,9 @@ mandatory.
|
|
|
144
148
|
|
|
145
149
|
## Registries are the source of truth
|
|
146
150
|
|
|
147
|
-
`.citable/` holds
|
|
148
|
-
evidence, pages, crawlers, competitors, experiments
|
|
151
|
+
`.citable/` holds YAML registries for queries, prompts, entities, claims,
|
|
152
|
+
evidence, pages, crawlers, competitors, experiments, metrics, objectives,
|
|
153
|
+
interventions, and optional connection state, all schema-validated
|
|
149
154
|
(`schemas/*.schema.json`) with referential integrity checks. Rules:
|
|
150
155
|
|
|
151
156
|
- Never overwrite registry content without history — use the loader/saver in
|
|
@@ -1 +1 @@
|
|
|
1
|
-
1.
|
|
1
|
+
1.5.1
|
|
@@ -24,11 +24,14 @@ intent, not executability, so statuses are strict:
|
|
|
24
24
|
| /citable observe | implemented — render, index, citation, crawler-log, passage, consensus, performance, and corroboration evidence |
|
|
25
25
|
| /citable apply | implemented — reviewed, hash-locked source replacements; dry run by default |
|
|
26
26
|
| /citable monitor | implemented — compares immutable observation runs and emits evidence-linked alerts |
|
|
27
|
+
| /citable metrics import | implemented — validates declared CSV/JSON metrics and writes immutable observations |
|
|
28
|
+
| /citable objectives init / validate | implemented — user-owned metric selection, cohorts, windows, and guardrails |
|
|
29
|
+
| /citable evaluate | implemented — independent baseline/evaluation comparisons with inconclusive handling |
|
|
27
30
|
| /citable ingest, map-site, map-queries, map-prompts, map-entities, map-evidence | specified (ingest.md) |
|
|
28
31
|
| /citable optimize-page | specified (optimize-page.md) — requires source-to-render mapping, claim-preserving rewrites, build execution, rollback; none of that is proven yet |
|
|
29
32
|
| /citable create-page, answer-block, architect, interlink, consolidate, metadata | specified (page-work.md) |
|
|
30
33
|
| /citable validate-render | partially implemented by `observe render`; mobile/cross-browser and interaction exploration remain |
|
|
31
|
-
| /citable measure seo/aeo/geo, test-prompts, monitor-crawlers, monitor-contradictions | partially implemented by observation imports, Google/CrUX live APIs, custom citation adapters, and monitor comparisons |
|
|
34
|
+
| /citable measure seo/aeo/geo, test-prompts, monitor-crawlers, monitor-contradictions | partially implemented by metric/observation imports, objective evaluation, Google/CrUX live APIs, custom citation adapters, and monitor comparisons |
|
|
32
35
|
|
|
33
36
|
Shared refusal conditions (all commands): any action that would fabricate
|
|
34
37
|
facts, citations, evidence, authorship, reviews, corroboration, or hidden
|
|
@@ -10,6 +10,23 @@ imports, and a disclosed custom citation-adapter protocol. It does not claim
|
|
|
10
10
|
Bing AI Performance automation or equivalence between an API adapter and a
|
|
11
11
|
consumer answer product. Preserve collector and product mode on every result.
|
|
12
12
|
|
|
13
|
+
# implemented metric and objective workflow
|
|
14
|
+
|
|
15
|
+
`citable metrics import --provider <name> --input <csv|json>` validates every
|
|
16
|
+
row against a declared entry in `metrics.yaml` and writes immutable metric
|
|
17
|
+
observations. `citable objectives init --input <json|yaml>` is dry-run by
|
|
18
|
+
default; `--write` adds the validated objective with registry history.
|
|
19
|
+
`citable objectives validate` checks contracts and metric references.
|
|
20
|
+
`citable evaluate [objective-id]` compares independent baseline and evaluation
|
|
21
|
+
windows, deduplicates repeated evidence, and reports each metric and guardrail
|
|
22
|
+
separately. Insufficient data is `inconclusive`, never zero. Results describe
|
|
23
|
+
temporal association and do not establish causation.
|
|
24
|
+
|
|
25
|
+
Metrics, objectives, interventions, and connection state are optional. The
|
|
26
|
+
absence of provider credentials is `not_configured`, not a finding and not
|
|
27
|
+
evidence of zero activity. Credentials must never enter registries or evidence
|
|
28
|
+
packages.
|
|
29
|
+
|
|
13
30
|
# measure seo
|
|
14
31
|
Inputs the operator exports (Search Console/Bing/analytics CSV or JSON).
|
|
15
32
|
Workflow: validate segmentation (brand vs non-brand, intent, page type,
|
|
@@ -1,20 +1,20 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "citable",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.5.1",
|
|
4
4
|
"managedBy": "citable-cli",
|
|
5
5
|
"provider": "claude",
|
|
6
6
|
"providerName": "Claude Code",
|
|
7
7
|
"scope": "bundle",
|
|
8
|
-
"sourcePackage": "@nebulacomponents/citable@1.
|
|
8
|
+
"sourcePackage": "@nebulacomponents/citable@1.5.1",
|
|
9
9
|
"variantPath": ".claude/skills/citable",
|
|
10
10
|
"files": {
|
|
11
11
|
"commands/action-findings.md": "sha256:510361461f24fcd4a550e0a8d960c383aefe23f9a65a54a3ffc44abd4c1293e7",
|
|
12
12
|
"commands/ingest.md": "sha256:cf35659aecd9d0e160909003efdbe056864fc5d824c71b4ef0ee801ce07ff598",
|
|
13
|
-
"commands/measurement.md": "sha256:
|
|
13
|
+
"commands/measurement.md": "sha256:5d7d94b496d2772ad433cf9fafa85af5c9638c8f326ec2017d2c8d6ef4dd1650",
|
|
14
14
|
"commands/observe-and-act.md": "sha256:02a93bbbfddc3d8e11cb921ddccd19b0666133c4bdb4f4a280bcb131bed37e8c",
|
|
15
15
|
"commands/optimize-page.md": "sha256:35866f3d7cdeef0376ea7a7d7036085a9b9cf95bbb300ecf4bd77610ebd74d85",
|
|
16
16
|
"commands/page-work.md": "sha256:965a66e59bdf7b0da482d26fade53b3d265885ece5d463fe83b0789ebefaef3e",
|
|
17
|
-
"commands/README.md": "sha256:
|
|
17
|
+
"commands/README.md": "sha256:be1f55b439af94670d0711dcd7476eab09a2d7c86c4bcbf85b2ee0b454fb8684",
|
|
18
18
|
"commands/validate-render.md": "sha256:a8e1d04d40b84d57c35039250d98c6a7302cd44a148a8c3b9d9cfb92678c4347",
|
|
19
19
|
"policies/crawler-policy-template.md": "sha256:15c88a4eeb21f53f71e5250dd3eb2d2791a814b304eaefce8bb30e2bdf2e2e59",
|
|
20
20
|
"references/aeo-geo-validation.md": "sha256:e45828d3ccca54a08513cb4235578c8a8ecf1dc47d1cb98e4a497838103bef70",
|
|
@@ -38,13 +38,17 @@
|
|
|
38
38
|
"schemas/common.defs.json": "sha256:effdd812910d1c275c50520bb70d8aec085e53fa8cb68054dc58c04a5d4a66b3",
|
|
39
39
|
"schemas/competitor.schema.json": "sha256:2f6fd7e4543846bde56ff4dc62bb41fa366889787b794a7cdb0bff1a3392e591",
|
|
40
40
|
"schemas/config.schema.json": "sha256:a87f3bb0087de09035b9f2dafea66e32e4fcc2e3e329abcd0fd8a5ec33318f2a",
|
|
41
|
+
"schemas/connection.schema.json": "sha256:cf0e9698dee697fb2c124989c3f478187297594c6ae76ecd04a43470e0a73616",
|
|
41
42
|
"schemas/crawler.schema.json": "sha256:1a113dfb80bc6cde904c3ea648c82ea1d88fe50f2c1a0e7175d44abba28ac64e",
|
|
42
43
|
"schemas/detector-quality.schema.json": "sha256:5e9e1ac80b1198a0ff8fa17b9f7a543d3ccf3ed3d60196152f6ff095cfdebccd",
|
|
43
44
|
"schemas/entity.schema.json": "sha256:78a08c35c8f4eb7a804ab46b61a238502f59621ac5218991e783251fbde61c4f",
|
|
44
45
|
"schemas/evidence.schema.json": "sha256:76baec7ad7e89c6952473c01dacb9e3b26953c088331e6314d531ce620df9ec1",
|
|
45
46
|
"schemas/experiment.schema.json": "sha256:3cebebc5745a9eb359261408b0a0421b8370d2c94f8244ce939827cd9da41cb6",
|
|
46
47
|
"schemas/finding.schema.json": "sha256:85907cd04cd8d2fe24a1e618e0df7160f6d56aa1818db501f345aebce5eb5edb",
|
|
47
|
-
"schemas/
|
|
48
|
+
"schemas/intervention.schema.json": "sha256:fcf28e117b207e64ffc96088aa70a95370841a2a9fa43ecb1c82b34c2058a818",
|
|
49
|
+
"schemas/metric.schema.json": "sha256:2ada648e7274a8d78cc9d6e7ed616f91faa79cf9ed07613e2c1fc53b247aac8d",
|
|
50
|
+
"schemas/objective.schema.json": "sha256:94404dc95d04a6641ea7b9654317d0222793251ad44d3dfd2875738622a36025",
|
|
51
|
+
"schemas/observation.schema.json": "sha256:240ab0030e900dd8d779b63ef0558b1cca3b59a6de1a10cf9b2418b73ad92f02",
|
|
48
52
|
"schemas/page.schema.json": "sha256:627613c35f461177fa946df08edf66fbf6f6bbdfc57eef812572b3af796d5e07",
|
|
49
53
|
"schemas/project.schema.json": "sha256:ea48fdb6480f7047ba4594bd5908bc1f79c1ad6b9a2c204df900959b5f203dc6",
|
|
50
54
|
"schemas/prompt-result.schema.json": "sha256:b55be47d7d58d7b1dd8c3b1e849e24e55216212c592cde7eb836953379b85737",
|
|
@@ -53,9 +57,9 @@
|
|
|
53
57
|
"schemas/remediation-spec.schema.json": "sha256:6fe8cb773702862ba6d261198bb5cc2dca3eca0a2310a60ebddd04377654df8d",
|
|
54
58
|
"schemas/run.schema.json": "sha256:46c3178620f3a358d936d535aeadb83454b9b35b551e53e6615cc9862063dacb",
|
|
55
59
|
"scripts/README.md": "sha256:1c3e952950ef353849621b07c5f615bf7cd20cc5654da4635492a7bd6384e747",
|
|
56
|
-
"SKILL.md": "sha256:
|
|
60
|
+
"SKILL.md": "sha256:ef61c795af6e99099cd6247f4f6fec62ceb8c64f3eaa3e17eeb6b24057f7498c",
|
|
57
61
|
"templates/finding-review.md": "sha256:b270a83d3f015150aac80249ae9314979c0befea39ff92ec455f9a5aaa73404c",
|
|
58
|
-
"VERSION": "sha256:
|
|
62
|
+
"VERSION": "sha256:dfe7d71b3f428eb73ed853f8fded65e2986896e21d69f45ebf06bb623b450e14"
|
|
59
63
|
},
|
|
60
|
-
"treeHash": "sha256:
|
|
64
|
+
"treeHash": "sha256:32f29a5d5aaab9b58e1ceae7ab894fe66fa2b55091248a20221f5f93b8e60915"
|
|
61
65
|
}
|