@nebulacomponents/citable 1.16.0 → 1.17.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +25 -0
- package/README.md +16 -3
- package/dist/universal/.agents/skills/citable/SKILL.md +47 -1
- package/dist/universal/.agents/skills/citable/VERSION +1 -1
- package/dist/universal/.agents/skills/citable/manifest.json +8 -6
- package/dist/universal/.agents/skills/citable/schemas/cli-output-envelope.schema.json +30 -0
- package/dist/universal/.agents/skills/citable/schemas/finding.schema.json +69 -0
- package/dist/universal/.agents/skills/citable/schemas/remediation-verification.schema.json +98 -0
- package/dist/universal/.claude/agents/citable/manifest.json +2 -2
- package/dist/universal/.claude/skills/citable/SKILL.md +47 -1
- package/dist/universal/.claude/skills/citable/VERSION +1 -1
- package/dist/universal/.claude/skills/citable/manifest.json +8 -6
- package/dist/universal/.claude/skills/citable/schemas/cli-output-envelope.schema.json +30 -0
- package/dist/universal/.claude/skills/citable/schemas/finding.schema.json +69 -0
- package/dist/universal/.claude/skills/citable/schemas/remediation-verification.schema.json +98 -0
- package/dist/universal/.cursor/skills/citable/SKILL.md +47 -1
- package/dist/universal/.cursor/skills/citable/VERSION +1 -1
- package/dist/universal/.cursor/skills/citable/manifest.json +8 -6
- package/dist/universal/.cursor/skills/citable/schemas/cli-output-envelope.schema.json +30 -0
- package/dist/universal/.cursor/skills/citable/schemas/finding.schema.json +69 -0
- package/dist/universal/.cursor/skills/citable/schemas/remediation-verification.schema.json +98 -0
- package/dist/universal/.gemini/skills/citable/SKILL.md +47 -1
- package/dist/universal/.gemini/skills/citable/VERSION +1 -1
- package/dist/universal/.gemini/skills/citable/manifest.json +8 -6
- package/dist/universal/.gemini/skills/citable/schemas/cli-output-envelope.schema.json +30 -0
- package/dist/universal/.gemini/skills/citable/schemas/finding.schema.json +69 -0
- package/dist/universal/.gemini/skills/citable/schemas/remediation-verification.schema.json +98 -0
- package/dist/universal/.github/skills/citable/SKILL.md +47 -1
- package/dist/universal/.github/skills/citable/VERSION +1 -1
- package/dist/universal/.github/skills/citable/manifest.json +8 -6
- package/dist/universal/.github/skills/citable/schemas/cli-output-envelope.schema.json +30 -0
- package/dist/universal/.github/skills/citable/schemas/finding.schema.json +69 -0
- package/dist/universal/.github/skills/citable/schemas/remediation-verification.schema.json +98 -0
- package/dist/universal/.kiro/skills/citable/SKILL.md +47 -1
- package/dist/universal/.kiro/skills/citable/VERSION +1 -1
- package/dist/universal/.kiro/skills/citable/manifest.json +8 -6
- package/dist/universal/.kiro/skills/citable/schemas/cli-output-envelope.schema.json +30 -0
- package/dist/universal/.kiro/skills/citable/schemas/finding.schema.json +69 -0
- package/dist/universal/.kiro/skills/citable/schemas/remediation-verification.schema.json +98 -0
- package/dist/universal/.opencode/skills/citable/SKILL.md +47 -1
- package/dist/universal/.opencode/skills/citable/VERSION +1 -1
- package/dist/universal/.opencode/skills/citable/manifest.json +8 -6
- package/dist/universal/.opencode/skills/citable/schemas/cli-output-envelope.schema.json +30 -0
- package/dist/universal/.opencode/skills/citable/schemas/finding.schema.json +69 -0
- package/dist/universal/.opencode/skills/citable/schemas/remediation-verification.schema.json +98 -0
- package/dist/universal/.pi/agent/skills/citable/SKILL.md +47 -1
- package/dist/universal/.pi/agent/skills/citable/VERSION +1 -1
- package/dist/universal/.pi/agent/skills/citable/manifest.json +8 -6
- package/dist/universal/.pi/agent/skills/citable/schemas/cli-output-envelope.schema.json +30 -0
- package/dist/universal/.pi/agent/skills/citable/schemas/finding.schema.json +69 -0
- package/dist/universal/.pi/agent/skills/citable/schemas/remediation-verification.schema.json +98 -0
- package/dist/universal/.qoder/skills/citable/SKILL.md +47 -1
- package/dist/universal/.qoder/skills/citable/VERSION +1 -1
- package/dist/universal/.qoder/skills/citable/manifest.json +8 -6
- package/dist/universal/.qoder/skills/citable/schemas/cli-output-envelope.schema.json +30 -0
- package/dist/universal/.qoder/skills/citable/schemas/finding.schema.json +69 -0
- package/dist/universal/.qoder/skills/citable/schemas/remediation-verification.schema.json +98 -0
- package/dist/universal/.rovodev/skills/citable/SKILL.md +47 -1
- package/dist/universal/.rovodev/skills/citable/VERSION +1 -1
- package/dist/universal/.rovodev/skills/citable/manifest.json +8 -6
- package/dist/universal/.rovodev/skills/citable/schemas/cli-output-envelope.schema.json +30 -0
- package/dist/universal/.rovodev/skills/citable/schemas/finding.schema.json +69 -0
- package/dist/universal/.rovodev/skills/citable/schemas/remediation-verification.schema.json +98 -0
- package/dist/universal/.trae/skills/citable/SKILL.md +47 -1
- package/dist/universal/.trae/skills/citable/VERSION +1 -1
- package/dist/universal/.trae/skills/citable/manifest.json +8 -6
- package/dist/universal/.trae/skills/citable/schemas/cli-output-envelope.schema.json +30 -0
- package/dist/universal/.trae/skills/citable/schemas/finding.schema.json +69 -0
- package/dist/universal/.trae/skills/citable/schemas/remediation-verification.schema.json +98 -0
- package/dist/universal/.trae-cn/skills/citable/SKILL.md +47 -1
- package/dist/universal/.trae-cn/skills/citable/VERSION +1 -1
- package/dist/universal/.trae-cn/skills/citable/manifest.json +8 -6
- package/dist/universal/.trae-cn/skills/citable/schemas/cli-output-envelope.schema.json +30 -0
- package/dist/universal/.trae-cn/skills/citable/schemas/finding.schema.json +69 -0
- package/dist/universal/.trae-cn/skills/citable/schemas/remediation-verification.schema.json +98 -0
- package/dist/universal/manifest.json +100 -76
- package/package.json +1 -1
- package/schemas/cli-output-envelope.schema.json +30 -0
- package/schemas/finding.schema.json +69 -0
- package/schemas/remediation-verification.schema.json +98 -0
- package/skill/SKILL.md +47 -1
- package/src/analysis/saliency.js +119 -0
- package/src/cli/index.js +269 -6
- package/src/commands/audit.js +2 -2
- package/src/commands/ciWorkflow.js +63 -0
- package/src/commands/compatibility.js +205 -0
- package/src/commands/context.js +2 -1
- package/src/commands/edgeRules.js +80 -4
- package/src/commands/edgeSecurity.js +192 -0
- package/src/commands/experimentGuardrails.js +213 -0
- package/src/commands/goldenCorpus.js +155 -0
- package/src/commands/implementationKit.js +202 -0
- package/src/commands/inspectCro.js +60 -0
- package/src/commands/planExperiment.js +52 -0
- package/src/commands/previewCro.js +241 -0
- package/src/commands/remediate.js +461 -0
- package/src/commands/verifyRemediation.js +204 -0
- package/src/commands/visualRegression.js +165 -0
- package/src/components/index.js +556 -0
- package/src/detectors/cro.js +48 -0
- package/src/detectors/framework.js +31 -1
- package/src/reporting/executiveExport.js +113 -1
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "citable",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.17.0",
|
|
4
4
|
"managedBy": "citable-cli",
|
|
5
5
|
"provider": "kiro",
|
|
6
6
|
"providerName": "Kiro",
|
|
7
7
|
"scope": "bundle",
|
|
8
|
-
"sourcePackage": "@nebulacomponents/citable@1.
|
|
8
|
+
"sourcePackage": "@nebulacomponents/citable@1.17.0",
|
|
9
9
|
"variantPath": ".kiro/skills/citable",
|
|
10
10
|
"agentProfiles": {
|
|
11
11
|
"status": "unsupported",
|
|
@@ -58,6 +58,7 @@
|
|
|
58
58
|
"schemas/browser-evidence-plan.schema.json": "sha256:81ef14f665b4a00f01afb747576faeb06025722e5c15a36eff3d17e59e978851",
|
|
59
59
|
"schemas/canonical-index-import.schema.json": "sha256:ef633662cb30873242ca356443bc4835afe56bb020208e8f42fa47ac8047b66e",
|
|
60
60
|
"schemas/claim.schema.json": "sha256:ce79ccbfa34ece9b7a309a6962522ea06a1f44c468b4c472b5c376554a788537",
|
|
61
|
+
"schemas/cli-output-envelope.schema.json": "sha256:6964e8f2f43618bfd0d7a3f5344b37ebc26f04779796bb8ff4675b935b6208c3",
|
|
61
62
|
"schemas/common.defs.json": "sha256:ac66081df6b86f652e066ea868edecfcd36cdd1b1c81e55a1e3af880f671b727",
|
|
62
63
|
"schemas/competitor.schema.json": "sha256:2f6fd7e4543846bde56ff4dc62bb41fa366889787b794a7cdb0bff1a3392e591",
|
|
63
64
|
"schemas/config.schema.json": "sha256:a87f3bb0087de09035b9f2dafea66e32e4fcc2e3e329abcd0fd8a5ec33318f2a",
|
|
@@ -77,7 +78,7 @@
|
|
|
77
78
|
"schemas/exception.schema.json": "sha256:c88985494ec66554330fdc5b65d033527d0005acf41f10798b1e831d171f8944",
|
|
78
79
|
"schemas/experiment.schema.json": "sha256:4b5d16481448597b152269296b67b5776be6f03d8f9afba1833bcee10bf3c05b",
|
|
79
80
|
"schemas/field-validation-metrics.schema.json": "sha256:bd5daeafc1593f1c4707d75180e1feb1e81d9345a57c1f269eadf13c36cb7012",
|
|
80
|
-
"schemas/finding.schema.json": "sha256:
|
|
81
|
+
"schemas/finding.schema.json": "sha256:1775425b9b989dd4ffc0c607eb9d64e95cad2124f9058f83ef78b0b0030e209f",
|
|
81
82
|
"schemas/fleet.schema.json": "sha256:3bf5772695ae4bb49a8c5fdbedee230ddb1d84aff6a3176eeb41527aca6ef2a5",
|
|
82
83
|
"schemas/funnel.schema.json": "sha256:6c368f29296ac45f5d52bb3a2f95fa935a1f30f3d53aae846156e9aa4c8ec59c",
|
|
83
84
|
"schemas/initiative.schema.json": "sha256:491f6cc022c7ac1f9ea9ac9ddfcd270cb49c390e2601fe1e73aa6192a9e7689a",
|
|
@@ -97,6 +98,7 @@
|
|
|
97
98
|
"schemas/release-manifest.schema.json": "sha256:962be645e790b5f3dc6f6ea455e187492d727dcb91d00f91e4e25b40e2dbc360",
|
|
98
99
|
"schemas/release-state.schema.json": "sha256:9920f68e538915d0d07044f313a9e410775a38ce9bb46a55d9ebe02970784803",
|
|
99
100
|
"schemas/remediation-spec.schema.json": "sha256:6fe8cb773702862ba6d261198bb5cc2dca3eca0a2310a60ebddd04377654df8d",
|
|
101
|
+
"schemas/remediation-verification.schema.json": "sha256:b4e4f3ce8d72ef64cdb879a86b6afe9220e2d9e4d13ed3486348cc8ee38e1319",
|
|
100
102
|
"schemas/review-item.schema.json": "sha256:df532a70385d5031bbc18654f3ccb436dc6e8d402ccf987e58f8f7e3ad2fb3f1",
|
|
101
103
|
"schemas/review-policy.schema.json": "sha256:b2d176b1886f78c384b25532a0c3eb18548dfbd17f362a305e622bab562a1d04",
|
|
102
104
|
"schemas/reviewer.schema.json": "sha256:3716697b752575a1277f2c2b318b1f2565de02bf9dce2a0c165567ab5330d18b",
|
|
@@ -108,9 +110,9 @@
|
|
|
108
110
|
"schemas/source-identity-chain.schema.json": "sha256:a65d9c12eaed1bd6b637c66a2f9362c17287fdfcb454d8676fb611d2d28aa019",
|
|
109
111
|
"schemas/variance.schema.json": "sha256:68389f64f0a3be13ff8951e8eefba9a5c31d0738325cb47e37c1a8435bea48f0",
|
|
110
112
|
"scripts/README.md": "sha256:9eee4e8beb4579a183bd714c9dd24b83abd020753eada5caeffae004739d60b5",
|
|
111
|
-
"SKILL.md": "sha256:
|
|
113
|
+
"SKILL.md": "sha256:f39e0863bbcaf178c46afed4ae95834451d96e6b1d07af3883733de707e692ea",
|
|
112
114
|
"templates/finding-review.md": "sha256:b270a83d3f015150aac80249ae9314979c0befea39ff92ec455f9a5aaa73404c",
|
|
113
|
-
"VERSION": "sha256:
|
|
115
|
+
"VERSION": "sha256:00afc49f1599e59129a59b64c2b019de3fe35300c05bb9d96cb25002576ff43b"
|
|
114
116
|
},
|
|
115
|
-
"treeHash": "sha256:
|
|
117
|
+
"treeHash": "sha256:e4c2165da7ae3106c3bfa358445d2e51dd974f656d058bc03f22fd0604d2d4b3"
|
|
116
118
|
}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$id": "citable://schemas/cli-output-envelope.schema.json",
|
|
3
|
+
"$schema": "http://json-schema.org/draft-07/schema#",
|
|
4
|
+
"title": "CLI JSON output envelope",
|
|
5
|
+
"description": "Stable envelope for every `citable <command> --json` output. Consumers read `citable_output_schema` for envelope compatibility and read command data from `result`. The envelope version changes only on breaking envelope changes; command payloads evolve backward-compatibly inside result.",
|
|
6
|
+
"type": "object",
|
|
7
|
+
"required": ["citable_output_schema", "tool_version", "generated_at", "result"],
|
|
8
|
+
"properties": {
|
|
9
|
+
"citable_output_schema": {
|
|
10
|
+
"type": "string",
|
|
11
|
+
"pattern": "^\\d+\\.\\d+$",
|
|
12
|
+
"description": "Envelope contract version. 1.0 is the initial stable contract."
|
|
13
|
+
},
|
|
14
|
+
"tool_version": {
|
|
15
|
+
"type": "string",
|
|
16
|
+
"description": "Citable package version that produced the output."
|
|
17
|
+
},
|
|
18
|
+
"command": {
|
|
19
|
+
"type": ["string", "null"],
|
|
20
|
+
"description": "Top-level command that produced this output."
|
|
21
|
+
},
|
|
22
|
+
"generated_at": {
|
|
23
|
+
"type": "string",
|
|
24
|
+
"description": "ISO-8601 timestamp of when the output was generated."
|
|
25
|
+
},
|
|
26
|
+
"result": {
|
|
27
|
+
"description": "Command-specific payload. Structure is defined per command and evolves backward-compatibly within an envelope major version."
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
}
|
|
@@ -257,6 +257,75 @@
|
|
|
257
257
|
}
|
|
258
258
|
}
|
|
259
259
|
},
|
|
260
|
+
"provenance": {
|
|
261
|
+
"type": "object",
|
|
262
|
+
"required": [
|
|
263
|
+
"detector_version",
|
|
264
|
+
"tool_version",
|
|
265
|
+
"evidence_source",
|
|
266
|
+
"methodology",
|
|
267
|
+
"revalidation_required"
|
|
268
|
+
],
|
|
269
|
+
"properties": {
|
|
270
|
+
"detector_version": {
|
|
271
|
+
"type": "integer",
|
|
272
|
+
"minimum": 1
|
|
273
|
+
},
|
|
274
|
+
"tool_version": {
|
|
275
|
+
"type": "string"
|
|
276
|
+
},
|
|
277
|
+
"source_url": {
|
|
278
|
+
"type": [
|
|
279
|
+
"string",
|
|
280
|
+
"null"
|
|
281
|
+
]
|
|
282
|
+
},
|
|
283
|
+
"source_file": {
|
|
284
|
+
"type": [
|
|
285
|
+
"string",
|
|
286
|
+
"null"
|
|
287
|
+
]
|
|
288
|
+
},
|
|
289
|
+
"evidence_selector": {
|
|
290
|
+
"type": [
|
|
291
|
+
"string",
|
|
292
|
+
"null"
|
|
293
|
+
]
|
|
294
|
+
},
|
|
295
|
+
"evidence_source": {
|
|
296
|
+
"type": "string",
|
|
297
|
+
"enum": [
|
|
298
|
+
"dom_parse",
|
|
299
|
+
"registry",
|
|
300
|
+
"registry+dom_parse",
|
|
301
|
+
"controlled_observation",
|
|
302
|
+
"configuration"
|
|
303
|
+
]
|
|
304
|
+
},
|
|
305
|
+
"viewport": {
|
|
306
|
+
"type": [
|
|
307
|
+
"string",
|
|
308
|
+
"null"
|
|
309
|
+
]
|
|
310
|
+
},
|
|
311
|
+
"viewport_note": {
|
|
312
|
+
"type": [
|
|
313
|
+
"string",
|
|
314
|
+
"null"
|
|
315
|
+
]
|
|
316
|
+
},
|
|
317
|
+
"methodology": {
|
|
318
|
+
"type": "string"
|
|
319
|
+
},
|
|
320
|
+
"revalidation_required": {
|
|
321
|
+
"type": "string",
|
|
322
|
+
"enum": [
|
|
323
|
+
"on_next_audit",
|
|
324
|
+
"human_review_before_action"
|
|
325
|
+
]
|
|
326
|
+
}
|
|
327
|
+
}
|
|
328
|
+
},
|
|
260
329
|
"status": {
|
|
261
330
|
"type": "object",
|
|
262
331
|
"required": [
|
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$id": "citable://schemas/remediation-verification.schema.json",
|
|
3
|
+
"$schema": "http://json-schema.org/draft-07/schema#",
|
|
4
|
+
"title": "Remediation verification record",
|
|
5
|
+
"description": "Closed-loop evidence that a detector finding was addressed: before-run finding, applied patch, re-run detector result, and verdict. Proves only that the detector no longer reports the same subject; it never proves a conversion or outcome guarantee.",
|
|
6
|
+
"type": "object",
|
|
7
|
+
"required": [
|
|
8
|
+
"verification_id", "timestamp", "status", "tool_version",
|
|
9
|
+
"source_run_id", "detector_id", "subject", "verdict",
|
|
10
|
+
"provenance", "limitations"
|
|
11
|
+
],
|
|
12
|
+
"properties": {
|
|
13
|
+
"verification_id": { "type": "string", "pattern": "^VR-[0-9]{14,20}-[a-z0-9]{2,8}$" },
|
|
14
|
+
"timestamp": { "type": "string" },
|
|
15
|
+
"status": { "type": "string", "enum": ["verified", "not_resolved", "blocked", "patch_refused"] },
|
|
16
|
+
"tool_version": { "type": "string" },
|
|
17
|
+
"repository_commit": { "type": ["string", "null"] },
|
|
18
|
+
"source_run_id": { "type": ["string", "null"], "minLength": 1 },
|
|
19
|
+
"recheck_run_id": { "type": ["string", "null"] },
|
|
20
|
+
"detector_id": { "type": ["string", "null"] },
|
|
21
|
+
"subject": {
|
|
22
|
+
"type": ["object", "null"],
|
|
23
|
+
"properties": {
|
|
24
|
+
"type": { "type": "string" },
|
|
25
|
+
"identifier": { "type": ["string", "null"] }
|
|
26
|
+
}
|
|
27
|
+
},
|
|
28
|
+
"verdict": {
|
|
29
|
+
"type": "object",
|
|
30
|
+
"required": ["resolved"],
|
|
31
|
+
"properties": {
|
|
32
|
+
"resolved": { "type": "boolean" },
|
|
33
|
+
"before_finding_ids": { "type": "array", "items": { "type": "string" } },
|
|
34
|
+
"after_finding_ids": { "type": "array", "items": { "type": "string" } },
|
|
35
|
+
"new_regressions": {
|
|
36
|
+
"type": "array",
|
|
37
|
+
"items": {
|
|
38
|
+
"type": "object",
|
|
39
|
+
"required": ["finding_id", "detector_id", "severity", "summary"],
|
|
40
|
+
"properties": {
|
|
41
|
+
"finding_id": { "type": "string" },
|
|
42
|
+
"detector_id": { "type": "string" },
|
|
43
|
+
"severity": { "type": "string" },
|
|
44
|
+
"summary": { "type": "string" }
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
},
|
|
48
|
+
"resolution_definition": {
|
|
49
|
+
"type": "string",
|
|
50
|
+
"description": "States the exact resolution criterion used; detector absence is not an outcome guarantee."
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
},
|
|
54
|
+
"patch": {
|
|
55
|
+
"type": ["object", "null"],
|
|
56
|
+
"properties": {
|
|
57
|
+
"target_file": { "type": "string" },
|
|
58
|
+
"framework": { "type": ["string", "null"] },
|
|
59
|
+
"patcher_class": { "type": ["string", "null"] },
|
|
60
|
+
"confidence": { "type": ["number", "null"] },
|
|
61
|
+
"validation_passed": { "type": "boolean" },
|
|
62
|
+
"applied": { "type": "boolean" },
|
|
63
|
+
"refusal_reason": { "type": ["string", "null"] },
|
|
64
|
+
"rollback_snapshot": { "type": ["string", "null"] },
|
|
65
|
+
"before_sha256": { "type": ["string", "null"] },
|
|
66
|
+
"after_sha256": { "type": ["string", "null"] }
|
|
67
|
+
}
|
|
68
|
+
},
|
|
69
|
+
"provenance": {
|
|
70
|
+
"type": "object",
|
|
71
|
+
"required": ["command", "recheck_target", "detectors_run"],
|
|
72
|
+
"properties": {
|
|
73
|
+
"command": { "type": "string" },
|
|
74
|
+
"recheck_target": { "type": ["string", "null"] },
|
|
75
|
+
"detectors_run": { "type": "array", "items": { "type": "string" } },
|
|
76
|
+
"detectors_skipped": {
|
|
77
|
+
"type": "array",
|
|
78
|
+
"items": {
|
|
79
|
+
"type": "object",
|
|
80
|
+
"properties": {
|
|
81
|
+
"detector_id": { "type": "string" },
|
|
82
|
+
"reason": { "type": "string" }
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
},
|
|
86
|
+
"recheck_errors": { "type": "array", "items": { "type": "string" } },
|
|
87
|
+
"recheck_warnings": { "type": "array", "items": { "type": "string" } }
|
|
88
|
+
}
|
|
89
|
+
},
|
|
90
|
+
"limitations": {
|
|
91
|
+
"type": "array",
|
|
92
|
+
"items": { "type": "string" },
|
|
93
|
+
"minItems": 1
|
|
94
|
+
},
|
|
95
|
+
"bundle_dir": { "type": ["string", "null"] },
|
|
96
|
+
"bundle_checksums": { "type": "object" }
|
|
97
|
+
}
|
|
98
|
+
}
|
|
@@ -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.17.0
|
|
11
11
|
---
|
|
12
12
|
|
|
13
13
|
# Citable — evidence and change control for search and AI citation readiness
|
|
@@ -138,9 +138,18 @@ citable corpus evaluate --input <acceptance-corpus.json>
|
|
|
138
138
|
citable corpus publish --input <acceptance-corpus.json> --output <public-corpus.json>
|
|
139
139
|
citable corpus receipt --run <run-id> [--input <execution-context.json>]
|
|
140
140
|
citable corpus compare-receipts <receipt-a.json> <receipt-b.json>
|
|
141
|
+
citable corpus benchmark [--corpus <dir>] [--output <report.json>] # labeled golden fixtures → per-detector precision/recall gate
|
|
141
142
|
citable artifacts export <run-id> --output <directory>
|
|
142
143
|
citable artifacts verify --input <directory>
|
|
143
144
|
citable artifacts import --input <directory>
|
|
145
|
+
citable inspect cro <page> --target <dir|url> # CRO readiness: CTAs, forms, payment-wallet vs authentication readiness, modeled saliency indices
|
|
146
|
+
citable preview cro <page> [--export <file.html>] # split-screen before/remediated sandbox (layout-contract checked; accessibility-aware)
|
|
147
|
+
citable remediate --finding <id> [--target <file>] [--write] # production-safe patch: framework detection, unified diff, static validation, confidence gate, rollback snapshot; semantic copy changes always refuse automated write
|
|
148
|
+
citable verify remediation --run <run-id> --finding <id> [--target <file>] [--apply] # closed loop: re-run the detector and emit a before/after evidence bundle (schema remediation-verification)
|
|
149
|
+
citable verify page <page> --target <dir|url> # all detectors scoped to one page; pass = no detector currently reports it, never an outcome guarantee
|
|
150
|
+
citable check experiment <id> [--observed-control N --observed-variant N --days-running N] # SRM, stopping, power, contamination; lifecycle: planned|running|inconclusive|validated
|
|
151
|
+
citable compatibility # Node engine, optional adapters, browser, framework, registries, edge size limits
|
|
152
|
+
citable kit export --run <run-id> --finding <id> [--target <file>] # customer-ready implementation kit (finding, diff, evidence, acceptance tests, deployment, limitations)
|
|
144
153
|
```
|
|
145
154
|
|
|
146
155
|
Audit scopes: `technical seo aeo geo architecture entity claims evidence schema
|
|
@@ -194,6 +203,43 @@ monitoring interpretation.
|
|
|
194
203
|
Use `commands/field-validation.md` for acceptance-corpus authorization,
|
|
195
204
|
sanitization, publication refusal, reproducibility, and evidence boundaries.
|
|
196
205
|
|
|
206
|
+
## CRO remediation loop (audit → explain → remediate → verify → hand off)
|
|
207
|
+
|
|
208
|
+
The CRO suite completes the loop. Rules that govern every step:
|
|
209
|
+
|
|
210
|
+
1. **Safe patches only.** `remediate --write` is gated on framework detection,
|
|
211
|
+
static structural validation, idempotency, and an explicit confidence
|
|
212
|
+
threshold. Semantic microcopy replacements are refused for automated write
|
|
213
|
+
(fact ≠ inference): they require a human editorial decision. Every write
|
|
214
|
+
creates a rollback snapshot under `.citable/remediation/snapshots/`.
|
|
215
|
+
2. **A written patch is not a verified repair.** Run
|
|
216
|
+
`verify remediation --run <run-id> --finding <id>`. Resolution means the
|
|
217
|
+
detector no longer reports the same subject — never a conversion guarantee.
|
|
218
|
+
The verification bundle is schema-validated
|
|
219
|
+
(`schemas/remediation-verification.schema.json`).
|
|
220
|
+
3. **Payment wallets ≠ authentication.** Apple Pay/Google Pay/PayPal are
|
|
221
|
+
payment methods; WebAuthn/passkeys are account authentication. Report them
|
|
222
|
+
separately (`inspect cro` returns `payment_wallet_readiness` and
|
|
223
|
+
`authentication_readiness`). Never use "biometric readiness" as a claim.
|
|
224
|
+
4. **Modeled indices are labeled.** Friction Surface Area, CTA Conspicuity
|
|
225
|
+
Index, and gaze-path ordering are heuristic indices over captured DOM
|
|
226
|
+
conditions — not observed user behavior and not revenue estimates. Slide
|
|
227
|
+
decks and kits must keep measured (deterministic findings) and modeled
|
|
228
|
+
(indices, projections) in separate, labeled categories. No latency,
|
|
229
|
+
speed, or "percentage eliminated" figure may be stated without a
|
|
230
|
+
documented measurement methodology.
|
|
231
|
+
5. **Referral fragments are untrusted input.** ScentBeacon-style components
|
|
232
|
+
may match referrer/`:~:text=` against a fixed allowlist to detect the
|
|
233
|
+
referral state; raw values are never rendered, persisted, or transmitted.
|
|
234
|
+
Dynamic claim text must come from registry-bound developer props.
|
|
235
|
+
6. **Experiments carry guardrails.** `check experiment` reports SRM, stopping
|
|
236
|
+
early, underpowered samples, contamination, and unsupported revenue
|
|
237
|
+
attribution, and derives one lifecycle of `planned`, `running`,
|
|
238
|
+
`inconclusive`, or `validated` — never "winner".
|
|
239
|
+
7. **Machine-readable output is a contract.** `--json` wraps every command
|
|
240
|
+
payload in the `citable_output_schema` 1.0 envelope
|
|
241
|
+
(`schemas/cli-output-envelope.schema.json`).
|
|
242
|
+
|
|
197
243
|
## Command workflows
|
|
198
244
|
|
|
199
245
|
Detailed per-command workflows live in `commands/`. Follow them; they define
|
|
@@ -1 +1 @@
|
|
|
1
|
-
1.
|
|
1
|
+
1.17.0
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "citable",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.17.0",
|
|
4
4
|
"managedBy": "citable-cli",
|
|
5
5
|
"provider": "opencode",
|
|
6
6
|
"providerName": "OpenCode",
|
|
7
7
|
"scope": "bundle",
|
|
8
|
-
"sourcePackage": "@nebulacomponents/citable@1.
|
|
8
|
+
"sourcePackage": "@nebulacomponents/citable@1.17.0",
|
|
9
9
|
"variantPath": ".opencode/skills/citable",
|
|
10
10
|
"agentProfiles": {
|
|
11
11
|
"status": "unsupported",
|
|
@@ -58,6 +58,7 @@
|
|
|
58
58
|
"schemas/browser-evidence-plan.schema.json": "sha256:81ef14f665b4a00f01afb747576faeb06025722e5c15a36eff3d17e59e978851",
|
|
59
59
|
"schemas/canonical-index-import.schema.json": "sha256:ef633662cb30873242ca356443bc4835afe56bb020208e8f42fa47ac8047b66e",
|
|
60
60
|
"schemas/claim.schema.json": "sha256:ce79ccbfa34ece9b7a309a6962522ea06a1f44c468b4c472b5c376554a788537",
|
|
61
|
+
"schemas/cli-output-envelope.schema.json": "sha256:6964e8f2f43618bfd0d7a3f5344b37ebc26f04779796bb8ff4675b935b6208c3",
|
|
61
62
|
"schemas/common.defs.json": "sha256:ac66081df6b86f652e066ea868edecfcd36cdd1b1c81e55a1e3af880f671b727",
|
|
62
63
|
"schemas/competitor.schema.json": "sha256:2f6fd7e4543846bde56ff4dc62bb41fa366889787b794a7cdb0bff1a3392e591",
|
|
63
64
|
"schemas/config.schema.json": "sha256:a87f3bb0087de09035b9f2dafea66e32e4fcc2e3e329abcd0fd8a5ec33318f2a",
|
|
@@ -77,7 +78,7 @@
|
|
|
77
78
|
"schemas/exception.schema.json": "sha256:c88985494ec66554330fdc5b65d033527d0005acf41f10798b1e831d171f8944",
|
|
78
79
|
"schemas/experiment.schema.json": "sha256:4b5d16481448597b152269296b67b5776be6f03d8f9afba1833bcee10bf3c05b",
|
|
79
80
|
"schemas/field-validation-metrics.schema.json": "sha256:bd5daeafc1593f1c4707d75180e1feb1e81d9345a57c1f269eadf13c36cb7012",
|
|
80
|
-
"schemas/finding.schema.json": "sha256:
|
|
81
|
+
"schemas/finding.schema.json": "sha256:1775425b9b989dd4ffc0c607eb9d64e95cad2124f9058f83ef78b0b0030e209f",
|
|
81
82
|
"schemas/fleet.schema.json": "sha256:3bf5772695ae4bb49a8c5fdbedee230ddb1d84aff6a3176eeb41527aca6ef2a5",
|
|
82
83
|
"schemas/funnel.schema.json": "sha256:6c368f29296ac45f5d52bb3a2f95fa935a1f30f3d53aae846156e9aa4c8ec59c",
|
|
83
84
|
"schemas/initiative.schema.json": "sha256:491f6cc022c7ac1f9ea9ac9ddfcd270cb49c390e2601fe1e73aa6192a9e7689a",
|
|
@@ -97,6 +98,7 @@
|
|
|
97
98
|
"schemas/release-manifest.schema.json": "sha256:962be645e790b5f3dc6f6ea455e187492d727dcb91d00f91e4e25b40e2dbc360",
|
|
98
99
|
"schemas/release-state.schema.json": "sha256:9920f68e538915d0d07044f313a9e410775a38ce9bb46a55d9ebe02970784803",
|
|
99
100
|
"schemas/remediation-spec.schema.json": "sha256:6fe8cb773702862ba6d261198bb5cc2dca3eca0a2310a60ebddd04377654df8d",
|
|
101
|
+
"schemas/remediation-verification.schema.json": "sha256:b4e4f3ce8d72ef64cdb879a86b6afe9220e2d9e4d13ed3486348cc8ee38e1319",
|
|
100
102
|
"schemas/review-item.schema.json": "sha256:df532a70385d5031bbc18654f3ccb436dc6e8d402ccf987e58f8f7e3ad2fb3f1",
|
|
101
103
|
"schemas/review-policy.schema.json": "sha256:b2d176b1886f78c384b25532a0c3eb18548dfbd17f362a305e622bab562a1d04",
|
|
102
104
|
"schemas/reviewer.schema.json": "sha256:3716697b752575a1277f2c2b318b1f2565de02bf9dce2a0c165567ab5330d18b",
|
|
@@ -108,9 +110,9 @@
|
|
|
108
110
|
"schemas/source-identity-chain.schema.json": "sha256:a65d9c12eaed1bd6b637c66a2f9362c17287fdfcb454d8676fb611d2d28aa019",
|
|
109
111
|
"schemas/variance.schema.json": "sha256:68389f64f0a3be13ff8951e8eefba9a5c31d0738325cb47e37c1a8435bea48f0",
|
|
110
112
|
"scripts/README.md": "sha256:9eee4e8beb4579a183bd714c9dd24b83abd020753eada5caeffae004739d60b5",
|
|
111
|
-
"SKILL.md": "sha256:
|
|
113
|
+
"SKILL.md": "sha256:f39e0863bbcaf178c46afed4ae95834451d96e6b1d07af3883733de707e692ea",
|
|
112
114
|
"templates/finding-review.md": "sha256:b270a83d3f015150aac80249ae9314979c0befea39ff92ec455f9a5aaa73404c",
|
|
113
|
-
"VERSION": "sha256:
|
|
115
|
+
"VERSION": "sha256:00afc49f1599e59129a59b64c2b019de3fe35300c05bb9d96cb25002576ff43b"
|
|
114
116
|
},
|
|
115
|
-
"treeHash": "sha256:
|
|
117
|
+
"treeHash": "sha256:e4c2165da7ae3106c3bfa358445d2e51dd974f656d058bc03f22fd0604d2d4b3"
|
|
116
118
|
}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$id": "citable://schemas/cli-output-envelope.schema.json",
|
|
3
|
+
"$schema": "http://json-schema.org/draft-07/schema#",
|
|
4
|
+
"title": "CLI JSON output envelope",
|
|
5
|
+
"description": "Stable envelope for every `citable <command> --json` output. Consumers read `citable_output_schema` for envelope compatibility and read command data from `result`. The envelope version changes only on breaking envelope changes; command payloads evolve backward-compatibly inside result.",
|
|
6
|
+
"type": "object",
|
|
7
|
+
"required": ["citable_output_schema", "tool_version", "generated_at", "result"],
|
|
8
|
+
"properties": {
|
|
9
|
+
"citable_output_schema": {
|
|
10
|
+
"type": "string",
|
|
11
|
+
"pattern": "^\\d+\\.\\d+$",
|
|
12
|
+
"description": "Envelope contract version. 1.0 is the initial stable contract."
|
|
13
|
+
},
|
|
14
|
+
"tool_version": {
|
|
15
|
+
"type": "string",
|
|
16
|
+
"description": "Citable package version that produced the output."
|
|
17
|
+
},
|
|
18
|
+
"command": {
|
|
19
|
+
"type": ["string", "null"],
|
|
20
|
+
"description": "Top-level command that produced this output."
|
|
21
|
+
},
|
|
22
|
+
"generated_at": {
|
|
23
|
+
"type": "string",
|
|
24
|
+
"description": "ISO-8601 timestamp of when the output was generated."
|
|
25
|
+
},
|
|
26
|
+
"result": {
|
|
27
|
+
"description": "Command-specific payload. Structure is defined per command and evolves backward-compatibly within an envelope major version."
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
}
|
|
@@ -257,6 +257,75 @@
|
|
|
257
257
|
}
|
|
258
258
|
}
|
|
259
259
|
},
|
|
260
|
+
"provenance": {
|
|
261
|
+
"type": "object",
|
|
262
|
+
"required": [
|
|
263
|
+
"detector_version",
|
|
264
|
+
"tool_version",
|
|
265
|
+
"evidence_source",
|
|
266
|
+
"methodology",
|
|
267
|
+
"revalidation_required"
|
|
268
|
+
],
|
|
269
|
+
"properties": {
|
|
270
|
+
"detector_version": {
|
|
271
|
+
"type": "integer",
|
|
272
|
+
"minimum": 1
|
|
273
|
+
},
|
|
274
|
+
"tool_version": {
|
|
275
|
+
"type": "string"
|
|
276
|
+
},
|
|
277
|
+
"source_url": {
|
|
278
|
+
"type": [
|
|
279
|
+
"string",
|
|
280
|
+
"null"
|
|
281
|
+
]
|
|
282
|
+
},
|
|
283
|
+
"source_file": {
|
|
284
|
+
"type": [
|
|
285
|
+
"string",
|
|
286
|
+
"null"
|
|
287
|
+
]
|
|
288
|
+
},
|
|
289
|
+
"evidence_selector": {
|
|
290
|
+
"type": [
|
|
291
|
+
"string",
|
|
292
|
+
"null"
|
|
293
|
+
]
|
|
294
|
+
},
|
|
295
|
+
"evidence_source": {
|
|
296
|
+
"type": "string",
|
|
297
|
+
"enum": [
|
|
298
|
+
"dom_parse",
|
|
299
|
+
"registry",
|
|
300
|
+
"registry+dom_parse",
|
|
301
|
+
"controlled_observation",
|
|
302
|
+
"configuration"
|
|
303
|
+
]
|
|
304
|
+
},
|
|
305
|
+
"viewport": {
|
|
306
|
+
"type": [
|
|
307
|
+
"string",
|
|
308
|
+
"null"
|
|
309
|
+
]
|
|
310
|
+
},
|
|
311
|
+
"viewport_note": {
|
|
312
|
+
"type": [
|
|
313
|
+
"string",
|
|
314
|
+
"null"
|
|
315
|
+
]
|
|
316
|
+
},
|
|
317
|
+
"methodology": {
|
|
318
|
+
"type": "string"
|
|
319
|
+
},
|
|
320
|
+
"revalidation_required": {
|
|
321
|
+
"type": "string",
|
|
322
|
+
"enum": [
|
|
323
|
+
"on_next_audit",
|
|
324
|
+
"human_review_before_action"
|
|
325
|
+
]
|
|
326
|
+
}
|
|
327
|
+
}
|
|
328
|
+
},
|
|
260
329
|
"status": {
|
|
261
330
|
"type": "object",
|
|
262
331
|
"required": [
|
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$id": "citable://schemas/remediation-verification.schema.json",
|
|
3
|
+
"$schema": "http://json-schema.org/draft-07/schema#",
|
|
4
|
+
"title": "Remediation verification record",
|
|
5
|
+
"description": "Closed-loop evidence that a detector finding was addressed: before-run finding, applied patch, re-run detector result, and verdict. Proves only that the detector no longer reports the same subject; it never proves a conversion or outcome guarantee.",
|
|
6
|
+
"type": "object",
|
|
7
|
+
"required": [
|
|
8
|
+
"verification_id", "timestamp", "status", "tool_version",
|
|
9
|
+
"source_run_id", "detector_id", "subject", "verdict",
|
|
10
|
+
"provenance", "limitations"
|
|
11
|
+
],
|
|
12
|
+
"properties": {
|
|
13
|
+
"verification_id": { "type": "string", "pattern": "^VR-[0-9]{14,20}-[a-z0-9]{2,8}$" },
|
|
14
|
+
"timestamp": { "type": "string" },
|
|
15
|
+
"status": { "type": "string", "enum": ["verified", "not_resolved", "blocked", "patch_refused"] },
|
|
16
|
+
"tool_version": { "type": "string" },
|
|
17
|
+
"repository_commit": { "type": ["string", "null"] },
|
|
18
|
+
"source_run_id": { "type": ["string", "null"], "minLength": 1 },
|
|
19
|
+
"recheck_run_id": { "type": ["string", "null"] },
|
|
20
|
+
"detector_id": { "type": ["string", "null"] },
|
|
21
|
+
"subject": {
|
|
22
|
+
"type": ["object", "null"],
|
|
23
|
+
"properties": {
|
|
24
|
+
"type": { "type": "string" },
|
|
25
|
+
"identifier": { "type": ["string", "null"] }
|
|
26
|
+
}
|
|
27
|
+
},
|
|
28
|
+
"verdict": {
|
|
29
|
+
"type": "object",
|
|
30
|
+
"required": ["resolved"],
|
|
31
|
+
"properties": {
|
|
32
|
+
"resolved": { "type": "boolean" },
|
|
33
|
+
"before_finding_ids": { "type": "array", "items": { "type": "string" } },
|
|
34
|
+
"after_finding_ids": { "type": "array", "items": { "type": "string" } },
|
|
35
|
+
"new_regressions": {
|
|
36
|
+
"type": "array",
|
|
37
|
+
"items": {
|
|
38
|
+
"type": "object",
|
|
39
|
+
"required": ["finding_id", "detector_id", "severity", "summary"],
|
|
40
|
+
"properties": {
|
|
41
|
+
"finding_id": { "type": "string" },
|
|
42
|
+
"detector_id": { "type": "string" },
|
|
43
|
+
"severity": { "type": "string" },
|
|
44
|
+
"summary": { "type": "string" }
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
},
|
|
48
|
+
"resolution_definition": {
|
|
49
|
+
"type": "string",
|
|
50
|
+
"description": "States the exact resolution criterion used; detector absence is not an outcome guarantee."
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
},
|
|
54
|
+
"patch": {
|
|
55
|
+
"type": ["object", "null"],
|
|
56
|
+
"properties": {
|
|
57
|
+
"target_file": { "type": "string" },
|
|
58
|
+
"framework": { "type": ["string", "null"] },
|
|
59
|
+
"patcher_class": { "type": ["string", "null"] },
|
|
60
|
+
"confidence": { "type": ["number", "null"] },
|
|
61
|
+
"validation_passed": { "type": "boolean" },
|
|
62
|
+
"applied": { "type": "boolean" },
|
|
63
|
+
"refusal_reason": { "type": ["string", "null"] },
|
|
64
|
+
"rollback_snapshot": { "type": ["string", "null"] },
|
|
65
|
+
"before_sha256": { "type": ["string", "null"] },
|
|
66
|
+
"after_sha256": { "type": ["string", "null"] }
|
|
67
|
+
}
|
|
68
|
+
},
|
|
69
|
+
"provenance": {
|
|
70
|
+
"type": "object",
|
|
71
|
+
"required": ["command", "recheck_target", "detectors_run"],
|
|
72
|
+
"properties": {
|
|
73
|
+
"command": { "type": "string" },
|
|
74
|
+
"recheck_target": { "type": ["string", "null"] },
|
|
75
|
+
"detectors_run": { "type": "array", "items": { "type": "string" } },
|
|
76
|
+
"detectors_skipped": {
|
|
77
|
+
"type": "array",
|
|
78
|
+
"items": {
|
|
79
|
+
"type": "object",
|
|
80
|
+
"properties": {
|
|
81
|
+
"detector_id": { "type": "string" },
|
|
82
|
+
"reason": { "type": "string" }
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
},
|
|
86
|
+
"recheck_errors": { "type": "array", "items": { "type": "string" } },
|
|
87
|
+
"recheck_warnings": { "type": "array", "items": { "type": "string" } }
|
|
88
|
+
}
|
|
89
|
+
},
|
|
90
|
+
"limitations": {
|
|
91
|
+
"type": "array",
|
|
92
|
+
"items": { "type": "string" },
|
|
93
|
+
"minItems": 1
|
|
94
|
+
},
|
|
95
|
+
"bundle_dir": { "type": ["string", "null"] },
|
|
96
|
+
"bundle_checksums": { "type": "object" }
|
|
97
|
+
}
|
|
98
|
+
}
|