@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.
Files changed (137) hide show
  1. package/CHANGELOG.md +37 -0
  2. package/README.md +34 -6
  3. package/dist/universal/.agents/skills/citable/SKILL.md +8 -3
  4. package/dist/universal/.agents/skills/citable/VERSION +1 -1
  5. package/dist/universal/.agents/skills/citable/commands/README.md +4 -1
  6. package/dist/universal/.agents/skills/citable/commands/measurement.md +17 -0
  7. package/dist/universal/.agents/skills/citable/manifest.json +12 -8
  8. package/dist/universal/.agents/skills/citable/schemas/connection.schema.json +32 -0
  9. package/dist/universal/.agents/skills/citable/schemas/intervention.schema.json +33 -0
  10. package/dist/universal/.agents/skills/citable/schemas/metric.schema.json +42 -0
  11. package/dist/universal/.agents/skills/citable/schemas/objective.schema.json +65 -0
  12. package/dist/universal/.agents/skills/citable/schemas/observation.schema.json +1 -1
  13. package/dist/universal/.claude/skills/citable/SKILL.md +8 -3
  14. package/dist/universal/.claude/skills/citable/VERSION +1 -1
  15. package/dist/universal/.claude/skills/citable/commands/README.md +4 -1
  16. package/dist/universal/.claude/skills/citable/commands/measurement.md +17 -0
  17. package/dist/universal/.claude/skills/citable/manifest.json +12 -8
  18. package/dist/universal/.claude/skills/citable/schemas/connection.schema.json +32 -0
  19. package/dist/universal/.claude/skills/citable/schemas/intervention.schema.json +33 -0
  20. package/dist/universal/.claude/skills/citable/schemas/metric.schema.json +42 -0
  21. package/dist/universal/.claude/skills/citable/schemas/objective.schema.json +65 -0
  22. package/dist/universal/.claude/skills/citable/schemas/observation.schema.json +1 -1
  23. package/dist/universal/.cursor/skills/citable/SKILL.md +8 -3
  24. package/dist/universal/.cursor/skills/citable/VERSION +1 -1
  25. package/dist/universal/.cursor/skills/citable/commands/README.md +4 -1
  26. package/dist/universal/.cursor/skills/citable/commands/measurement.md +17 -0
  27. package/dist/universal/.cursor/skills/citable/manifest.json +12 -8
  28. package/dist/universal/.cursor/skills/citable/schemas/connection.schema.json +32 -0
  29. package/dist/universal/.cursor/skills/citable/schemas/intervention.schema.json +33 -0
  30. package/dist/universal/.cursor/skills/citable/schemas/metric.schema.json +42 -0
  31. package/dist/universal/.cursor/skills/citable/schemas/objective.schema.json +65 -0
  32. package/dist/universal/.cursor/skills/citable/schemas/observation.schema.json +1 -1
  33. package/dist/universal/.gemini/skills/citable/SKILL.md +8 -3
  34. package/dist/universal/.gemini/skills/citable/VERSION +1 -1
  35. package/dist/universal/.gemini/skills/citable/commands/README.md +4 -1
  36. package/dist/universal/.gemini/skills/citable/commands/measurement.md +17 -0
  37. package/dist/universal/.gemini/skills/citable/manifest.json +12 -8
  38. package/dist/universal/.gemini/skills/citable/schemas/connection.schema.json +32 -0
  39. package/dist/universal/.gemini/skills/citable/schemas/intervention.schema.json +33 -0
  40. package/dist/universal/.gemini/skills/citable/schemas/metric.schema.json +42 -0
  41. package/dist/universal/.gemini/skills/citable/schemas/objective.schema.json +65 -0
  42. package/dist/universal/.gemini/skills/citable/schemas/observation.schema.json +1 -1
  43. package/dist/universal/.github/skills/citable/SKILL.md +8 -3
  44. package/dist/universal/.github/skills/citable/VERSION +1 -1
  45. package/dist/universal/.github/skills/citable/commands/README.md +4 -1
  46. package/dist/universal/.github/skills/citable/commands/measurement.md +17 -0
  47. package/dist/universal/.github/skills/citable/manifest.json +12 -8
  48. package/dist/universal/.github/skills/citable/schemas/connection.schema.json +32 -0
  49. package/dist/universal/.github/skills/citable/schemas/intervention.schema.json +33 -0
  50. package/dist/universal/.github/skills/citable/schemas/metric.schema.json +42 -0
  51. package/dist/universal/.github/skills/citable/schemas/objective.schema.json +65 -0
  52. package/dist/universal/.github/skills/citable/schemas/observation.schema.json +1 -1
  53. package/dist/universal/.kiro/skills/citable/SKILL.md +8 -3
  54. package/dist/universal/.kiro/skills/citable/VERSION +1 -1
  55. package/dist/universal/.kiro/skills/citable/commands/README.md +4 -1
  56. package/dist/universal/.kiro/skills/citable/commands/measurement.md +17 -0
  57. package/dist/universal/.kiro/skills/citable/manifest.json +12 -8
  58. package/dist/universal/.kiro/skills/citable/schemas/connection.schema.json +32 -0
  59. package/dist/universal/.kiro/skills/citable/schemas/intervention.schema.json +33 -0
  60. package/dist/universal/.kiro/skills/citable/schemas/metric.schema.json +42 -0
  61. package/dist/universal/.kiro/skills/citable/schemas/objective.schema.json +65 -0
  62. package/dist/universal/.kiro/skills/citable/schemas/observation.schema.json +1 -1
  63. package/dist/universal/.opencode/skills/citable/SKILL.md +8 -3
  64. package/dist/universal/.opencode/skills/citable/VERSION +1 -1
  65. package/dist/universal/.opencode/skills/citable/commands/README.md +4 -1
  66. package/dist/universal/.opencode/skills/citable/commands/measurement.md +17 -0
  67. package/dist/universal/.opencode/skills/citable/manifest.json +12 -8
  68. package/dist/universal/.opencode/skills/citable/schemas/connection.schema.json +32 -0
  69. package/dist/universal/.opencode/skills/citable/schemas/intervention.schema.json +33 -0
  70. package/dist/universal/.opencode/skills/citable/schemas/metric.schema.json +42 -0
  71. package/dist/universal/.opencode/skills/citable/schemas/objective.schema.json +65 -0
  72. package/dist/universal/.opencode/skills/citable/schemas/observation.schema.json +1 -1
  73. package/dist/universal/.pi/agent/skills/citable/SKILL.md +8 -3
  74. package/dist/universal/.pi/agent/skills/citable/VERSION +1 -1
  75. package/dist/universal/.pi/agent/skills/citable/commands/README.md +4 -1
  76. package/dist/universal/.pi/agent/skills/citable/commands/measurement.md +17 -0
  77. package/dist/universal/.pi/agent/skills/citable/manifest.json +12 -8
  78. package/dist/universal/.pi/agent/skills/citable/schemas/connection.schema.json +32 -0
  79. package/dist/universal/.pi/agent/skills/citable/schemas/intervention.schema.json +33 -0
  80. package/dist/universal/.pi/agent/skills/citable/schemas/metric.schema.json +42 -0
  81. package/dist/universal/.pi/agent/skills/citable/schemas/objective.schema.json +65 -0
  82. package/dist/universal/.pi/agent/skills/citable/schemas/observation.schema.json +1 -1
  83. package/dist/universal/.qoder/skills/citable/SKILL.md +8 -3
  84. package/dist/universal/.qoder/skills/citable/VERSION +1 -1
  85. package/dist/universal/.qoder/skills/citable/commands/README.md +4 -1
  86. package/dist/universal/.qoder/skills/citable/commands/measurement.md +17 -0
  87. package/dist/universal/.qoder/skills/citable/manifest.json +12 -8
  88. package/dist/universal/.qoder/skills/citable/schemas/connection.schema.json +32 -0
  89. package/dist/universal/.qoder/skills/citable/schemas/intervention.schema.json +33 -0
  90. package/dist/universal/.qoder/skills/citable/schemas/metric.schema.json +42 -0
  91. package/dist/universal/.qoder/skills/citable/schemas/objective.schema.json +65 -0
  92. package/dist/universal/.qoder/skills/citable/schemas/observation.schema.json +1 -1
  93. package/dist/universal/.rovodev/skills/citable/SKILL.md +8 -3
  94. package/dist/universal/.rovodev/skills/citable/VERSION +1 -1
  95. package/dist/universal/.rovodev/skills/citable/commands/README.md +4 -1
  96. package/dist/universal/.rovodev/skills/citable/commands/measurement.md +17 -0
  97. package/dist/universal/.rovodev/skills/citable/manifest.json +12 -8
  98. package/dist/universal/.rovodev/skills/citable/schemas/connection.schema.json +32 -0
  99. package/dist/universal/.rovodev/skills/citable/schemas/intervention.schema.json +33 -0
  100. package/dist/universal/.rovodev/skills/citable/schemas/metric.schema.json +42 -0
  101. package/dist/universal/.rovodev/skills/citable/schemas/objective.schema.json +65 -0
  102. package/dist/universal/.rovodev/skills/citable/schemas/observation.schema.json +1 -1
  103. package/dist/universal/.trae/skills/citable/SKILL.md +8 -3
  104. package/dist/universal/.trae/skills/citable/VERSION +1 -1
  105. package/dist/universal/.trae/skills/citable/commands/README.md +4 -1
  106. package/dist/universal/.trae/skills/citable/commands/measurement.md +17 -0
  107. package/dist/universal/.trae/skills/citable/manifest.json +12 -8
  108. package/dist/universal/.trae/skills/citable/schemas/connection.schema.json +32 -0
  109. package/dist/universal/.trae/skills/citable/schemas/intervention.schema.json +33 -0
  110. package/dist/universal/.trae/skills/citable/schemas/metric.schema.json +42 -0
  111. package/dist/universal/.trae/skills/citable/schemas/objective.schema.json +65 -0
  112. package/dist/universal/.trae/skills/citable/schemas/observation.schema.json +1 -1
  113. package/dist/universal/.trae-cn/skills/citable/SKILL.md +8 -3
  114. package/dist/universal/.trae-cn/skills/citable/VERSION +1 -1
  115. package/dist/universal/.trae-cn/skills/citable/commands/README.md +4 -1
  116. package/dist/universal/.trae-cn/skills/citable/commands/measurement.md +17 -0
  117. package/dist/universal/.trae-cn/skills/citable/manifest.json +12 -8
  118. package/dist/universal/.trae-cn/skills/citable/schemas/connection.schema.json +32 -0
  119. package/dist/universal/.trae-cn/skills/citable/schemas/intervention.schema.json +33 -0
  120. package/dist/universal/.trae-cn/skills/citable/schemas/metric.schema.json +42 -0
  121. package/dist/universal/.trae-cn/skills/citable/schemas/objective.schema.json +65 -0
  122. package/dist/universal/.trae-cn/skills/citable/schemas/observation.schema.json +1 -1
  123. package/dist/universal/manifest.json +147 -99
  124. package/package.json +4 -1
  125. package/schemas/connection.schema.json +32 -0
  126. package/schemas/intervention.schema.json +33 -0
  127. package/schemas/metric.schema.json +42 -0
  128. package/schemas/objective.schema.json +65 -0
  129. package/schemas/observation.schema.json +1 -1
  130. package/skill/SKILL.md +8 -3
  131. package/skill/commands/README.md +4 -1
  132. package/skill/commands/measurement.md +17 -0
  133. package/src/cli/index.js +28 -0
  134. package/src/commands/measurement.js +205 -0
  135. package/src/installer/index.js +35 -7
  136. package/src/installer/providers.js +1 -1
  137. package/src/registries/index.js +13 -0
@@ -1,20 +1,20 @@
1
1
  {
2
2
  "name": "citable",
3
- "version": "1.4.0",
3
+ "version": "1.5.1",
4
4
  "managedBy": "citable-cli",
5
5
  "provider": "gemini",
6
6
  "providerName": "Gemini CLI",
7
7
  "scope": "bundle",
8
- "sourcePackage": "@nebulacomponents/citable@1.4.0",
8
+ "sourcePackage": "@nebulacomponents/citable@1.5.1",
9
9
  "variantPath": ".gemini/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:c90352849a589b4cb66d1275a1888e9a2de5052a62399224c42b00f92bbdd814",
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:71b7f2b7fc5e98cfa2b699ec48f58f3b4e32dfb0233315759fc98f7ae7eecac0",
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/observation.schema.json": "sha256:81d8994591fff4bc23a10f813f1957719d5a2093171520f661ab8792e14748da",
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:1e53637f88647dba7bdafc08545ad966f0f77b2814d956d3fbd57b38b3e34fa0",
60
+ "SKILL.md": "sha256:ef61c795af6e99099cd6247f4f6fec62ceb8c64f3eaa3e17eeb6b24057f7498c",
57
61
  "templates/finding-review.md": "sha256:b270a83d3f015150aac80249ae9314979c0befea39ff92ec455f9a5aaa73404c",
58
- "VERSION": "sha256:78b591400c56b7b67b8cb3b2b8a8e65e9093897f02ce0878e6b5405c68620fa7"
62
+ "VERSION": "sha256:dfe7d71b3f428eb73ed853f8fded65e2986896e21d69f45ebf06bb623b450e14"
59
63
  },
60
- "treeHash": "sha256:d5eb2a8baf1230bc82f28610cf0a875f58f5070cb3953838b8310bad07eca012"
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.4.0
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 nine YAML registries (queries, prompts, entities, claims,
148
- evidence, pages, crawlers, competitors, experiments), all schema-validated
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.4.0
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.4.0",
3
+ "version": "1.5.1",
4
4
  "managedBy": "citable-cli",
5
5
  "provider": "github",
6
6
  "providerName": "GitHub Copilot",
7
7
  "scope": "bundle",
8
- "sourcePackage": "@nebulacomponents/citable@1.4.0",
8
+ "sourcePackage": "@nebulacomponents/citable@1.5.1",
9
9
  "variantPath": ".github/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:c90352849a589b4cb66d1275a1888e9a2de5052a62399224c42b00f92bbdd814",
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:71b7f2b7fc5e98cfa2b699ec48f58f3b4e32dfb0233315759fc98f7ae7eecac0",
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/observation.schema.json": "sha256:81d8994591fff4bc23a10f813f1957719d5a2093171520f661ab8792e14748da",
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:1e53637f88647dba7bdafc08545ad966f0f77b2814d956d3fbd57b38b3e34fa0",
60
+ "SKILL.md": "sha256:ef61c795af6e99099cd6247f4f6fec62ceb8c64f3eaa3e17eeb6b24057f7498c",
57
61
  "templates/finding-review.md": "sha256:b270a83d3f015150aac80249ae9314979c0befea39ff92ec455f9a5aaa73404c",
58
- "VERSION": "sha256:78b591400c56b7b67b8cb3b2b8a8e65e9093897f02ce0878e6b5405c68620fa7"
62
+ "VERSION": "sha256:dfe7d71b3f428eb73ed853f8fded65e2986896e21d69f45ebf06bb623b450e14"
59
63
  },
60
- "treeHash": "sha256:d5eb2a8baf1230bc82f28610cf0a875f58f5070cb3953838b8310bad07eca012"
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.4.0
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 nine YAML registries (queries, prompts, entities, claims,
148
- evidence, pages, crawlers, competitors, experiments), all schema-validated
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.4.0
1
+ 1.5.1