@mcptoolshop/accessibility-suite 0.1.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.
Files changed (241) hide show
  1. package/.github/workflows/ci.yml +63 -0
  2. package/LICENSE +21 -0
  3. package/README.md +37 -0
  4. package/docs/prov-spec/.github/workflows/ci.yml +68 -0
  5. package/docs/prov-spec/CHANGELOG.md +69 -0
  6. package/docs/prov-spec/CODE_OF_CONDUCT.md +129 -0
  7. package/docs/prov-spec/CONFORMANCE_LEVELS.md +223 -0
  8. package/docs/prov-spec/CONTRIBUTING.md +145 -0
  9. package/docs/prov-spec/IMPLEMENTER_CHECKLIST.md +137 -0
  10. package/docs/prov-spec/LICENSE +21 -0
  11. package/docs/prov-spec/PRESS_RELEASE.md +74 -0
  12. package/docs/prov-spec/README.md +182 -0
  13. package/docs/prov-spec/SETUP.md +135 -0
  14. package/docs/prov-spec/WHY.md +86 -0
  15. package/docs/prov-spec/examples/artifact.example.json +14 -0
  16. package/docs/prov-spec/examples/artifact.ref.example.json +9 -0
  17. package/docs/prov-spec/examples/evidence.example.json +6 -0
  18. package/docs/prov-spec/examples/mcp.envelope.example.json +97 -0
  19. package/docs/prov-spec/examples/mcp.request.example.json +28 -0
  20. package/docs/prov-spec/examples/prov.record.example.json +35 -0
  21. package/docs/prov-spec/interop/PROOF_NODE_ENGINE.md +114 -0
  22. package/docs/prov-spec/spec/MCP_COMPATIBILITY.md +241 -0
  23. package/docs/prov-spec/spec/PROV_METHODS_CATALOG.md +142 -0
  24. package/docs/prov-spec/spec/PROV_METHODS_SPEC.md +397 -0
  25. package/docs/prov-spec/spec/methods.json +213 -0
  26. package/docs/prov-spec/spec/schemas/artifact.ref.schema.v0.1.json +58 -0
  27. package/docs/prov-spec/spec/schemas/artifact.schema.v0.1.json +61 -0
  28. package/docs/prov-spec/spec/schemas/assist.request.schema.v0.1.json +52 -0
  29. package/docs/prov-spec/spec/schemas/assist.response.schema.v0.1.json +70 -0
  30. package/docs/prov-spec/spec/schemas/cli.error.schema.v0.1.json +78 -0
  31. package/docs/prov-spec/spec/schemas/evidence.schema.v0.1.json +37 -0
  32. package/docs/prov-spec/spec/schemas/mcp.envelope.schema.v0.1.json +141 -0
  33. package/docs/prov-spec/spec/schemas/mcp.request.schema.v0.1.json +79 -0
  34. package/docs/prov-spec/spec/schemas/methods.schema.json +93 -0
  35. package/docs/prov-spec/spec/schemas/prov-capabilities.schema.json +122 -0
  36. package/docs/prov-spec/spec/schemas/prov.record.schema.v0.1.json +133 -0
  37. package/docs/prov-spec/spec/vectors/adapter.wrap.envelope_v0_1/expected.json +4 -0
  38. package/docs/prov-spec/spec/vectors/adapter.wrap.envelope_v0_1/input.json +1 -0
  39. package/docs/prov-spec/spec/vectors/adapter.wrap.envelope_v0_1/negative/double_wrapped.json +14 -0
  40. package/docs/prov-spec/spec/vectors/adapter.wrap.envelope_v0_1/negative/wrong_schema_version.json +11 -0
  41. package/docs/prov-spec/spec/vectors/engine.extract.evidence.json_pointer/expected.json +24 -0
  42. package/docs/prov-spec/spec/vectors/engine.extract.evidence.json_pointer/input.json +8 -0
  43. package/docs/prov-spec/spec/vectors/integrity.digest.sha256/expected.json +7 -0
  44. package/docs/prov-spec/spec/vectors/integrity.digest.sha256/input.json +1 -0
  45. package/docs/prov-spec/spec/vectors/integrity.digest.sha256/negative/non_hex_chars.json +16 -0
  46. package/docs/prov-spec/spec/vectors/integrity.digest.sha256/negative/uppercase_hex.json +16 -0
  47. package/docs/prov-spec/spec/vectors/integrity.digest.sha256/negative/wrong_length.json +16 -0
  48. package/docs/prov-spec/spec/vectors/method_id_syntax/negative/hyphen_separator.json +8 -0
  49. package/docs/prov-spec/spec/vectors/method_id_syntax/negative/reserved_namespace.json +8 -0
  50. package/docs/prov-spec/spec/vectors/method_id_syntax/negative/starts_with_digit.json +8 -0
  51. package/docs/prov-spec/spec/vectors/method_id_syntax/negative/uppercase.json +8 -0
  52. package/docs/prov-spec/spec/vectors/method_id_syntax/positive/valid_ids.json +18 -0
  53. package/docs/prov-spec/tools/python/prov_validator.py +428 -0
  54. package/examples/a11y-demo-site/.github/workflows/a11y-artifacts.yml +81 -0
  55. package/examples/a11y-demo-site/.github/workflows/a11y.yml +34 -0
  56. package/examples/a11y-demo-site/CODE_OF_CONDUCT.md +129 -0
  57. package/examples/a11y-demo-site/CONTRIBUTING.md +83 -0
  58. package/examples/a11y-demo-site/LICENSE +21 -0
  59. package/examples/a11y-demo-site/README.md +155 -0
  60. package/examples/a11y-demo-site/html/contact.html +15 -0
  61. package/examples/a11y-demo-site/html/index.html +20 -0
  62. package/examples/a11y-demo-site/scripts/a11y.sh +20 -0
  63. package/package.json +26 -0
  64. package/src/a11y-assist/.github/workflows/publish.yml +52 -0
  65. package/src/a11y-assist/.github/workflows/test.yml +30 -0
  66. package/src/a11y-assist/A11Y_ASSIST_TEST_COVERAGE_REQUIREMENTS.md +104 -0
  67. package/src/a11y-assist/CODE_OF_CONDUCT.md +129 -0
  68. package/src/a11y-assist/CONTRIBUTING.md +98 -0
  69. package/src/a11y-assist/ENGINE.md +363 -0
  70. package/src/a11y-assist/LICENSE +21 -0
  71. package/src/a11y-assist/PRESS_RELEASE.md +71 -0
  72. package/src/a11y-assist/QUICKSTART.md +101 -0
  73. package/src/a11y-assist/README.md +192 -0
  74. package/src/a11y-assist/RELEASE_NOTES.md +319 -0
  75. package/src/a11y-assist/a11y_assist/__init__.py +3 -0
  76. package/src/a11y-assist/a11y_assist/cli.py +599 -0
  77. package/src/a11y-assist/a11y_assist/from_cli_error.py +149 -0
  78. package/src/a11y-assist/a11y_assist/guard.py +444 -0
  79. package/src/a11y-assist/a11y_assist/ingest.py +407 -0
  80. package/src/a11y-assist/a11y_assist/methods.py +137 -0
  81. package/src/a11y-assist/a11y_assist/parse_raw.py +71 -0
  82. package/src/a11y-assist/a11y_assist/profiles/__init__.py +29 -0
  83. package/src/a11y-assist/a11y_assist/profiles/cognitive_load.py +245 -0
  84. package/src/a11y-assist/a11y_assist/profiles/cognitive_load_render.py +86 -0
  85. package/src/a11y-assist/a11y_assist/profiles/dyslexia.py +144 -0
  86. package/src/a11y-assist/a11y_assist/profiles/dyslexia_render.py +77 -0
  87. package/src/a11y-assist/a11y_assist/profiles/plain_language.py +119 -0
  88. package/src/a11y-assist/a11y_assist/profiles/plain_language_render.py +66 -0
  89. package/src/a11y-assist/a11y_assist/profiles/screen_reader.py +348 -0
  90. package/src/a11y-assist/a11y_assist/profiles/screen_reader_render.py +89 -0
  91. package/src/a11y-assist/a11y_assist/render.py +95 -0
  92. package/src/a11y-assist/a11y_assist/schemas/assist.request.schema.v0.1.json +52 -0
  93. package/src/a11y-assist/a11y_assist/schemas/assist.response.schema.v0.1.json +70 -0
  94. package/src/a11y-assist/a11y_assist/schemas/cli.error.schema.v0.1.json +78 -0
  95. package/src/a11y-assist/a11y_assist/storage.py +31 -0
  96. package/src/a11y-assist/pyproject.toml +60 -0
  97. package/src/a11y-assist/tests/__init__.py +1 -0
  98. package/src/a11y-assist/tests/fixtures/base_inputs/cli_error_high.json +18 -0
  99. package/src/a11y-assist/tests/fixtures/base_inputs/cli_error_medium.json +16 -0
  100. package/src/a11y-assist/tests/fixtures/base_inputs/raw_text_low.txt +3 -0
  101. package/src/a11y-assist/tests/fixtures/cli_error_good.json +9 -0
  102. package/src/a11y-assist/tests/fixtures/cli_error_missing_id.json +7 -0
  103. package/src/a11y-assist/tests/fixtures/cli_error_string_format.json +7 -0
  104. package/src/a11y-assist/tests/fixtures/expected/cognitive_load_high.txt +20 -0
  105. package/src/a11y-assist/tests/fixtures/expected/dyslexia_high.txt +20 -0
  106. package/src/a11y-assist/tests/fixtures/expected/lowvision_high.txt +18 -0
  107. package/src/a11y-assist/tests/fixtures/expected/plain_language_high.txt +14 -0
  108. package/src/a11y-assist/tests/fixtures/expected/screen_reader_high.txt +19 -0
  109. package/src/a11y-assist/tests/fixtures/golden_screen_reader_cli_error.txt +16 -0
  110. package/src/a11y-assist/tests/fixtures/golden_screen_reader_raw_no_id.txt +14 -0
  111. package/src/a11y-assist/tests/fixtures/golden_screen_reader_raw_with_id.txt +14 -0
  112. package/src/a11y-assist/tests/fixtures/raw_good.txt +11 -0
  113. package/src/a11y-assist/tests/fixtures/raw_no_id.txt +2 -0
  114. package/src/a11y-assist/tests/test_cognitive_load.py +469 -0
  115. package/src/a11y-assist/tests/test_dyslexia.py +337 -0
  116. package/src/a11y-assist/tests/test_explain.py +74 -0
  117. package/src/a11y-assist/tests/test_golden.py +127 -0
  118. package/src/a11y-assist/tests/test_guard.py +819 -0
  119. package/src/a11y-assist/tests/test_guard_integration.py +457 -0
  120. package/src/a11y-assist/tests/test_ingest.py +311 -0
  121. package/src/a11y-assist/tests/test_methods_metadata.py +236 -0
  122. package/src/a11y-assist/tests/test_plain_language.py +348 -0
  123. package/src/a11y-assist/tests/test_render.py +117 -0
  124. package/src/a11y-assist/tests/test_screen_reader.py +703 -0
  125. package/src/a11y-assist/tests/test_storage_last.py +61 -0
  126. package/src/a11y-assist/tests/test_triage.py +86 -0
  127. package/src/a11y-ci/.github/workflows/ci.yml +43 -0
  128. package/src/a11y-ci/.github/workflows/test.yml +30 -0
  129. package/src/a11y-ci/A11Y_CI_TEST_COVERAGE_REQUIREMENTS.md +94 -0
  130. package/src/a11y-ci/CODE_OF_CONDUCT.md +129 -0
  131. package/src/a11y-ci/CONTRIBUTING.md +142 -0
  132. package/src/a11y-ci/LICENSE +21 -0
  133. package/src/a11y-ci/README.md +105 -0
  134. package/src/a11y-ci/a11y_ci/__init__.py +3 -0
  135. package/src/a11y-ci/a11y_ci/allowlist.py +83 -0
  136. package/src/a11y-ci/a11y_ci/cli.py +145 -0
  137. package/src/a11y-ci/a11y_ci/gate.py +131 -0
  138. package/src/a11y-ci/a11y_ci/render.py +48 -0
  139. package/src/a11y-ci/a11y_ci/schemas/allowlist.schema.json +24 -0
  140. package/src/a11y-ci/a11y_ci/scorecard.py +99 -0
  141. package/src/a11y-ci/npm/package.json +35 -0
  142. package/src/a11y-ci/pyproject.toml +64 -0
  143. package/src/a11y-ci/tests/__init__.py +1 -0
  144. package/src/a11y-ci/tests/fixtures/allowlist_expired.json +10 -0
  145. package/src/a11y-ci/tests/fixtures/allowlist_ok.json +10 -0
  146. package/src/a11y-ci/tests/fixtures/baseline_ok.json +7 -0
  147. package/src/a11y-ci/tests/fixtures/current_fail.json +6 -0
  148. package/src/a11y-ci/tests/fixtures/current_ok.json +6 -0
  149. package/src/a11y-ci/tests/fixtures/current_regresses.json +7 -0
  150. package/src/a11y-ci/tests/test_gate.py +134 -0
  151. package/src/a11y-evidence-engine/.github/workflows/ci.yml +53 -0
  152. package/src/a11y-evidence-engine/CODE_OF_CONDUCT.md +129 -0
  153. package/src/a11y-evidence-engine/CONTRIBUTING.md +128 -0
  154. package/src/a11y-evidence-engine/LICENSE +21 -0
  155. package/src/a11y-evidence-engine/README.md +71 -0
  156. package/src/a11y-evidence-engine/bin/a11y-engine.js +11 -0
  157. package/src/a11y-evidence-engine/fixtures/bad/button-no-name.html +30 -0
  158. package/src/a11y-evidence-engine/fixtures/bad/img-missing-alt.html +19 -0
  159. package/src/a11y-evidence-engine/fixtures/bad/input-missing-label.html +26 -0
  160. package/src/a11y-evidence-engine/fixtures/bad/missing-lang.html +11 -0
  161. package/src/a11y-evidence-engine/fixtures/good/index.html +29 -0
  162. package/src/a11y-evidence-engine/package-lock.json +109 -0
  163. package/src/a11y-evidence-engine/package.json +45 -0
  164. package/src/a11y-evidence-engine/src/cli.js +74 -0
  165. package/src/a11y-evidence-engine/src/evidence/canonicalize.js +52 -0
  166. package/src/a11y-evidence-engine/src/evidence/json_pointer.js +34 -0
  167. package/src/a11y-evidence-engine/src/evidence/prov_emit.js +153 -0
  168. package/src/a11y-evidence-engine/src/fswalk.js +56 -0
  169. package/src/a11y-evidence-engine/src/html_parse.js +117 -0
  170. package/src/a11y-evidence-engine/src/ids.js +53 -0
  171. package/src/a11y-evidence-engine/src/rules/document_missing_lang.js +50 -0
  172. package/src/a11y-evidence-engine/src/rules/form_control_missing_label.js +105 -0
  173. package/src/a11y-evidence-engine/src/rules/img_missing_alt.js +77 -0
  174. package/src/a11y-evidence-engine/src/rules/index.js +37 -0
  175. package/src/a11y-evidence-engine/src/rules/interactive_missing_name.js +129 -0
  176. package/src/a11y-evidence-engine/src/scan.js +128 -0
  177. package/src/a11y-evidence-engine/test/scan.test.js +149 -0
  178. package/src/a11y-evidence-engine/test/vectors.test.js +200 -0
  179. package/src/a11y-lint/.github/workflows/ci.yml +46 -0
  180. package/src/a11y-lint/.github/workflows/test.yml +34 -0
  181. package/src/a11y-lint/CODE_OF_CONDUCT.md +129 -0
  182. package/src/a11y-lint/CONTRIBUTING.md +70 -0
  183. package/src/a11y-lint/GOVERNANCE.md +57 -0
  184. package/src/a11y-lint/LICENSE +21 -0
  185. package/src/a11y-lint/PRESS_RELEASE.md +50 -0
  186. package/src/a11y-lint/README.md +276 -0
  187. package/src/a11y-lint/RELEASE_NOTES.md +57 -0
  188. package/src/a11y-lint/RELEASING.md +57 -0
  189. package/src/a11y-lint/a11y_lint/__init__.py +64 -0
  190. package/src/a11y-lint/a11y_lint/cli.py +319 -0
  191. package/src/a11y-lint/a11y_lint/errors.py +252 -0
  192. package/src/a11y-lint/a11y_lint/render.py +293 -0
  193. package/src/a11y-lint/a11y_lint/report_md.py +289 -0
  194. package/src/a11y-lint/a11y_lint/scan_cli_text.py +434 -0
  195. package/src/a11y-lint/a11y_lint/schemas/cli.error.schema.v0.1.json +83 -0
  196. package/src/a11y-lint/a11y_lint/scorecard.py +244 -0
  197. package/src/a11y-lint/a11y_lint/validate.py +225 -0
  198. package/src/a11y-lint/pyproject.toml +75 -0
  199. package/src/a11y-lint/tests/__init__.py +1 -0
  200. package/src/a11y-lint/tests/test_cli.py +200 -0
  201. package/src/a11y-lint/tests/test_errors.py +188 -0
  202. package/src/a11y-lint/tests/test_render.py +202 -0
  203. package/src/a11y-lint/tests/test_report_md.py +188 -0
  204. package/src/a11y-lint/tests/test_scan_cli_text.py +290 -0
  205. package/src/a11y-lint/tests/test_scorecard.py +195 -0
  206. package/src/a11y-lint/tests/test_validate.py +257 -0
  207. package/src/a11y-mcp-tools/.github/workflows/ci.yml +53 -0
  208. package/src/a11y-mcp-tools/CODE_OF_CONDUCT.md +129 -0
  209. package/src/a11y-mcp-tools/CONTRIBUTING.md +136 -0
  210. package/src/a11y-mcp-tools/LICENSE +21 -0
  211. package/src/a11y-mcp-tools/PROV_METHODS_CATALOG.md +104 -0
  212. package/src/a11y-mcp-tools/README.md +168 -0
  213. package/src/a11y-mcp-tools/bin/cli.js +452 -0
  214. package/src/a11y-mcp-tools/bin/server.js +244 -0
  215. package/src/a11y-mcp-tools/fixtures/requests/a11y.diagnose.ok.json +27 -0
  216. package/src/a11y-mcp-tools/fixtures/requests/a11y.evidence.ok.json +25 -0
  217. package/src/a11y-mcp-tools/fixtures/responses/a11y.diagnose.ok.json +139 -0
  218. package/src/a11y-mcp-tools/fixtures/responses/a11y.diagnose.provenance_fail.json +13 -0
  219. package/src/a11y-mcp-tools/fixtures/responses/a11y.evidence.ok.json +88 -0
  220. package/src/a11y-mcp-tools/package-lock.json +189 -0
  221. package/src/a11y-mcp-tools/package.json +49 -0
  222. package/src/a11y-mcp-tools/src/envelope.js +197 -0
  223. package/src/a11y-mcp-tools/src/index.js +9 -0
  224. package/src/a11y-mcp-tools/src/schemas/artifact.js +85 -0
  225. package/src/a11y-mcp-tools/src/schemas/diagnosis.schema.v0.1.json +137 -0
  226. package/src/a11y-mcp-tools/src/schemas/envelope.schema.v0.1.json +108 -0
  227. package/src/a11y-mcp-tools/src/schemas/evidence.bundle.schema.v0.1.json +129 -0
  228. package/src/a11y-mcp-tools/src/schemas/evidence.js +97 -0
  229. package/src/a11y-mcp-tools/src/schemas/index.js +11 -0
  230. package/src/a11y-mcp-tools/src/schemas/provenance.js +140 -0
  231. package/src/a11y-mcp-tools/src/schemas/tools/a11y.diagnose.request.schema.v0.1.json +77 -0
  232. package/src/a11y-mcp-tools/src/schemas/tools/a11y.diagnose.response.schema.v0.1.json +50 -0
  233. package/src/a11y-mcp-tools/src/schemas/tools/a11y.evidence.request.schema.v0.1.json +120 -0
  234. package/src/a11y-mcp-tools/src/schemas/tools/a11y.evidence.response.schema.v0.1.json +50 -0
  235. package/src/a11y-mcp-tools/src/tools/diagnose.js +597 -0
  236. package/src/a11y-mcp-tools/src/tools/evidence.js +481 -0
  237. package/src/a11y-mcp-tools/src/tools/index.js +10 -0
  238. package/src/a11y-mcp-tools/test/contract.test.mjs +154 -0
  239. package/src/a11y-mcp-tools/test/diagnose.test.js +485 -0
  240. package/src/a11y-mcp-tools/test/evidence.test.js +183 -0
  241. package/src/a11y-mcp-tools/test/schema.test.js +327 -0
@@ -0,0 +1,141 @@
1
+ {
2
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
3
+ "$id": "mcp.envelope.v0.1",
4
+ "title": "mcp.envelope.v0.1",
5
+ "type": "object",
6
+ "additionalProperties": false,
7
+ "required": ["schema_version", "result"],
8
+ "properties": {
9
+ "schema_version": {
10
+ "type": "string",
11
+ "const": "mcp.envelope.v0.1"
12
+ },
13
+
14
+ "result": {
15
+ "description": "Tool-specific payload. This schema intentionally does not constrain result shape.",
16
+ "type": ["object", "array", "string", "number", "boolean", "null"]
17
+ },
18
+
19
+ "provenance": {
20
+ "description": "Optional provenance record for this tool invocation.",
21
+ "anyOf": [
22
+ { "$ref": "prov.record.schema.v0.1.json" },
23
+ { "type": "null" }
24
+ ]
25
+ },
26
+
27
+ "errors": {
28
+ "description": "Optional structured errors emitted by the tool or adapter. Tools may also encode errors inside result; this field exists for standardization.",
29
+ "type": "array",
30
+ "items": { "$ref": "#/$defs/envelope_error" }
31
+ },
32
+
33
+ "warnings": {
34
+ "description": "Optional non-fatal warnings (e.g., degraded confidence, partial parsing).",
35
+ "type": "array",
36
+ "items": { "$ref": "#/$defs/envelope_warning" }
37
+ },
38
+
39
+ "meta": {
40
+ "description": "Optional adapter/runtime metadata. Not part of tool semantics.",
41
+ "type": "object",
42
+ "additionalProperties": false,
43
+ "properties": {
44
+ "adapter": {
45
+ "type": "string",
46
+ "description": "Adapter name (e.g., mcp, cli, api).",
47
+ "maxLength": 100
48
+ },
49
+ "request_id": {
50
+ "type": "string",
51
+ "description": "Optional request correlation ID.",
52
+ "maxLength": 200
53
+ },
54
+ "duration_ms": {
55
+ "type": "integer",
56
+ "description": "Optional duration in milliseconds.",
57
+ "minimum": 0
58
+ },
59
+ "schema_hints": {
60
+ "type": "object",
61
+ "description": "Optional hints about schemas used in result, if result is opaque to the caller.",
62
+ "additionalProperties": {
63
+ "type": "string",
64
+ "maxLength": 200
65
+ }
66
+ }
67
+ }
68
+ }
69
+ },
70
+
71
+ "$defs": {
72
+ "envelope_error": {
73
+ "type": "object",
74
+ "additionalProperties": false,
75
+ "required": ["code", "message"],
76
+ "properties": {
77
+ "code": {
78
+ "type": "string",
79
+ "description": "Stable error code (namespaced).",
80
+ "minLength": 1,
81
+ "maxLength": 200
82
+ },
83
+ "message": {
84
+ "type": "string",
85
+ "description": "Human-readable error message.",
86
+ "minLength": 1,
87
+ "maxLength": 2000
88
+ },
89
+ "details": {
90
+ "type": "object",
91
+ "description": "Optional structured details (small).",
92
+ "additionalProperties": {
93
+ "type": ["string", "number", "boolean", "null"]
94
+ }
95
+ },
96
+ "retryable": {
97
+ "type": "boolean",
98
+ "description": "Whether retrying might succeed.",
99
+ "default": false
100
+ },
101
+ "evidence": {
102
+ "type": "array",
103
+ "description": "Optional evidence anchors supporting this error.",
104
+ "items": { "$ref": "evidence.schema.v0.1.json" }
105
+ }
106
+ }
107
+ },
108
+
109
+ "envelope_warning": {
110
+ "type": "object",
111
+ "additionalProperties": false,
112
+ "required": ["code", "message"],
113
+ "properties": {
114
+ "code": {
115
+ "type": "string",
116
+ "description": "Stable warning code (namespaced).",
117
+ "minLength": 1,
118
+ "maxLength": 200
119
+ },
120
+ "message": {
121
+ "type": "string",
122
+ "description": "Human-readable warning message.",
123
+ "minLength": 1,
124
+ "maxLength": 2000
125
+ },
126
+ "details": {
127
+ "type": "object",
128
+ "description": "Optional structured details (small).",
129
+ "additionalProperties": {
130
+ "type": ["string", "number", "boolean", "null"]
131
+ }
132
+ },
133
+ "evidence": {
134
+ "type": "array",
135
+ "description": "Optional evidence anchors supporting this warning.",
136
+ "items": { "$ref": "evidence.schema.v0.1.json" }
137
+ }
138
+ }
139
+ }
140
+ }
141
+ }
@@ -0,0 +1,79 @@
1
+ {
2
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
3
+ "$id": "mcp.request.v0.1",
4
+ "title": "mcp.request.v0.1",
5
+ "type": "object",
6
+ "additionalProperties": false,
7
+ "required": ["schema_version", "tool", "params", "artifacts"],
8
+ "properties": {
9
+ "schema_version": {
10
+ "type": "string",
11
+ "const": "mcp.request.v0.1"
12
+ },
13
+
14
+ "request_id": {
15
+ "type": "string",
16
+ "description": "Optional correlation ID for tracing across systems.",
17
+ "maxLength": 200
18
+ },
19
+
20
+ "tool": {
21
+ "type": "object",
22
+ "additionalProperties": false,
23
+ "required": ["name"],
24
+ "properties": {
25
+ "name": {
26
+ "type": "string",
27
+ "description": "Tool identifier (e.g., a11y-assist.explain, provenance.verify).",
28
+ "minLength": 1,
29
+ "maxLength": 200
30
+ },
31
+ "version": {
32
+ "type": "string",
33
+ "description": "Optional requested tool version (semver string or tag).",
34
+ "maxLength": 100
35
+ }
36
+ }
37
+ },
38
+
39
+ "params": {
40
+ "description": "Tool-specific parameters. This schema intentionally does not constrain param shape.",
41
+ "type": ["object", "array", "string", "number", "boolean", "null"]
42
+ },
43
+
44
+ "artifacts": {
45
+ "type": "array",
46
+ "description": "Optional artifact references supplied as inputs to this call. Tools may ignore if not applicable.",
47
+ "items": { "$ref": "artifact.ref.schema.v0.1.json" }
48
+ },
49
+
50
+ "preferences": {
51
+ "type": "object",
52
+ "description": "Optional execution preferences that are not tool semantics.",
53
+ "additionalProperties": false,
54
+ "properties": {
55
+ "deterministic": {
56
+ "type": "boolean",
57
+ "description": "Hint that caller prefers deterministic behavior (no timestamps, no network).",
58
+ "default": true
59
+ },
60
+ "max_output_bytes": {
61
+ "type": "integer",
62
+ "description": "Optional soft limit for output size.",
63
+ "minimum": 0
64
+ },
65
+ "locale": {
66
+ "type": "string",
67
+ "description": "Optional locale hint (e.g., en-US).",
68
+ "maxLength": 50
69
+ }
70
+ }
71
+ },
72
+
73
+ "time": {
74
+ "type": "string",
75
+ "description": "Optional RFC3339 timestamp. Omit for strict determinism.",
76
+ "format": "date-time"
77
+ }
78
+ }
79
+ }
@@ -0,0 +1,93 @@
1
+ {
2
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
3
+ "$id": "methods.schema.json",
4
+ "title": "Provenance Methods Catalog Schema",
5
+ "description": "Schema for the machine-readable method ID catalog",
6
+ "type": "object",
7
+ "additionalProperties": false,
8
+ "required": ["schema_version", "methods", "namespaces"],
9
+ "properties": {
10
+ "$schema": {
11
+ "type": "string"
12
+ },
13
+ "schema_version": {
14
+ "type": "string",
15
+ "const": "methods-catalog@v0.1"
16
+ },
17
+ "generated": {
18
+ "type": "boolean",
19
+ "description": "Whether this file was auto-generated"
20
+ },
21
+ "methods": {
22
+ "type": "array",
23
+ "items": {
24
+ "$ref": "#/$defs/method_entry"
25
+ }
26
+ },
27
+ "namespaces": {
28
+ "type": "object",
29
+ "additionalProperties": {
30
+ "$ref": "#/$defs/namespace_entry"
31
+ }
32
+ }
33
+ },
34
+ "$defs": {
35
+ "method_entry": {
36
+ "type": "object",
37
+ "additionalProperties": false,
38
+ "required": ["id", "namespace", "status", "since", "summary"],
39
+ "properties": {
40
+ "id": {
41
+ "type": "string",
42
+ "pattern": "^[a-z][a-z0-9_]*(\\.[a-z][a-z0-9_]*)*(_v[0-9]+_[0-9]+)?$",
43
+ "description": "The stable method identifier"
44
+ },
45
+ "namespace": {
46
+ "type": "string",
47
+ "description": "Primary namespace (first segment of id)"
48
+ },
49
+ "status": {
50
+ "type": "string",
51
+ "enum": ["stable", "deprecated", "experimental"],
52
+ "description": "Lifecycle status"
53
+ },
54
+ "since": {
55
+ "type": "string",
56
+ "pattern": "^[0-9]+\\.[0-9]+\\.[0-9]+$",
57
+ "description": "Version when this method was introduced"
58
+ },
59
+ "superseded_by": {
60
+ "type": "string",
61
+ "description": "Replacement method ID if deprecated"
62
+ },
63
+ "summary": {
64
+ "type": "string",
65
+ "description": "Brief description of what the method means"
66
+ },
67
+ "when_to_emit": {
68
+ "type": "string",
69
+ "description": "Conditions under which to claim this method"
70
+ },
71
+ "requires": {
72
+ "type": "array",
73
+ "items": { "type": "string" },
74
+ "description": "Semantic requirements when claiming this method"
75
+ }
76
+ }
77
+ },
78
+ "namespace_entry": {
79
+ "type": "object",
80
+ "additionalProperties": false,
81
+ "required": ["description", "status"],
82
+ "properties": {
83
+ "description": {
84
+ "type": "string"
85
+ },
86
+ "status": {
87
+ "type": "string",
88
+ "enum": ["stable", "reserved", "deprecated"]
89
+ }
90
+ }
91
+ }
92
+ }
93
+ }
@@ -0,0 +1,122 @@
1
+ {
2
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
3
+ "$id": "prov-capabilities.schema.json",
4
+ "title": "Provenance Capabilities Manifest",
5
+ "description": "Schema for third-party engine capability declarations",
6
+ "type": "object",
7
+ "additionalProperties": false,
8
+ "required": ["schema", "engine", "implements"],
9
+ "properties": {
10
+ "schema": {
11
+ "type": "string",
12
+ "const": "prov-capabilities@v0.1",
13
+ "description": "Manifest schema identifier"
14
+ },
15
+ "engine": {
16
+ "type": "object",
17
+ "additionalProperties": false,
18
+ "required": ["name", "version"],
19
+ "properties": {
20
+ "name": {
21
+ "type": "string",
22
+ "minLength": 1,
23
+ "maxLength": 100,
24
+ "description": "Engine name"
25
+ },
26
+ "version": {
27
+ "type": "string",
28
+ "maxLength": 50,
29
+ "description": "Engine version (semver recommended)"
30
+ },
31
+ "vendor": {
32
+ "type": "string",
33
+ "maxLength": 200,
34
+ "description": "Vendor or maintainer name"
35
+ },
36
+ "repo": {
37
+ "type": "string",
38
+ "format": "uri",
39
+ "description": "Source repository URL"
40
+ },
41
+ "license": {
42
+ "type": "string",
43
+ "description": "SPDX license identifier"
44
+ }
45
+ }
46
+ },
47
+ "implements": {
48
+ "type": "array",
49
+ "items": {
50
+ "type": "string",
51
+ "pattern": "^[a-z][a-z0-9_]*(\\.[a-z][a-z0-9_]*)*(_v[0-9]+_[0-9]+)?$"
52
+ },
53
+ "minItems": 1,
54
+ "uniqueItems": true,
55
+ "description": "Method IDs this engine fully implements"
56
+ },
57
+ "optional": {
58
+ "type": "array",
59
+ "items": {
60
+ "type": "string",
61
+ "pattern": "^[a-z][a-z0-9_]*(\\.[a-z][a-z0-9_]*)*(_v[0-9]+_[0-9]+)?$"
62
+ },
63
+ "uniqueItems": true,
64
+ "description": "Method IDs this engine optionally supports"
65
+ },
66
+ "conformance_level": {
67
+ "type": "string",
68
+ "enum": ["syntax-conformant", "semantics-conformant", "fully-conformant"],
69
+ "default": "syntax-conformant",
70
+ "description": "Declared conformance level per PROV_METHODS_SPEC.md Section 9.1"
71
+ },
72
+ "constraints": {
73
+ "type": "object",
74
+ "additionalProperties": false,
75
+ "properties": {
76
+ "canonicalization": {
77
+ "type": "string",
78
+ "enum": ["jcs-subset", "jcs-full", "custom"],
79
+ "description": "JSON canonicalization method used"
80
+ },
81
+ "max_record_bytes": {
82
+ "type": "integer",
83
+ "minimum": 0,
84
+ "description": "Maximum provenance record size in bytes"
85
+ },
86
+ "max_artifacts": {
87
+ "type": "integer",
88
+ "minimum": 0,
89
+ "description": "Maximum artifacts per record"
90
+ },
91
+ "supported_digest_algorithms": {
92
+ "type": "array",
93
+ "items": {
94
+ "type": "string",
95
+ "enum": ["sha256", "sha512", "blake3"]
96
+ },
97
+ "description": "Digest algorithms this engine can compute"
98
+ }
99
+ }
100
+ },
101
+ "test_vectors_validated": {
102
+ "type": "array",
103
+ "items": {
104
+ "type": "string"
105
+ },
106
+ "description": "List of test vector IDs that have been validated"
107
+ },
108
+ "known_deviations": {
109
+ "type": "array",
110
+ "items": {
111
+ "type": "object",
112
+ "properties": {
113
+ "method_id": { "type": "string" },
114
+ "deviation": { "type": "string" },
115
+ "reason": { "type": "string" }
116
+ },
117
+ "required": ["method_id", "deviation"]
118
+ },
119
+ "description": "Documented deviations from spec"
120
+ }
121
+ }
122
+ }
@@ -0,0 +1,133 @@
1
+ {
2
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
3
+ "$id": "prov.record.v0.1",
4
+ "title": "prov.record.v0.1",
5
+ "type": "object",
6
+ "additionalProperties": false,
7
+ "required": ["schema_version", "run_id", "tool", "inputs", "outputs", "methods", "evidence", "parents"],
8
+ "properties": {
9
+ "schema_version": {
10
+ "type": "string",
11
+ "const": "prov.record.v0.1"
12
+ },
13
+ "run_id": {
14
+ "type": "string",
15
+ "description": "Unique identifier for this tool run (UUID recommended).",
16
+ "minLength": 1
17
+ },
18
+ "tool": {
19
+ "type": "object",
20
+ "description": "Tool identity and versioning metadata.",
21
+ "additionalProperties": false,
22
+ "required": ["name", "version"],
23
+ "properties": {
24
+ "name": {
25
+ "type": "string",
26
+ "description": "Tool name, e.g., a11y-assist, payroll-engine, etc.",
27
+ "minLength": 1,
28
+ "maxLength": 200
29
+ },
30
+ "version": {
31
+ "type": "string",
32
+ "description": "Tool version string, e.g., v0.3.1.",
33
+ "minLength": 1,
34
+ "maxLength": 100
35
+ },
36
+ "adapter": {
37
+ "type": "string",
38
+ "description": "Optional adapter name, e.g., cli, mcp, api.",
39
+ "maxLength": 100
40
+ }
41
+ }
42
+ },
43
+ "time": {
44
+ "type": "string",
45
+ "description": "Optional RFC3339 timestamp. Omit for strict determinism.",
46
+ "format": "date-time"
47
+ },
48
+ "inputs": {
49
+ "type": "array",
50
+ "description": "Artifacts consumed by this run.",
51
+ "items": { "$ref": "artifact.schema.v0.1.json" }
52
+ },
53
+ "outputs": {
54
+ "type": "array",
55
+ "description": "Artifacts produced by this run.",
56
+ "items": { "$ref": "artifact.schema.v0.1.json" }
57
+ },
58
+ "methods": {
59
+ "type": "array",
60
+ "description": "Stable method identifiers applied during this run (append-only over time).",
61
+ "items": {
62
+ "type": "string",
63
+ "minLength": 1,
64
+ "maxLength": 200,
65
+ "pattern": "^[a-z0-9]+([._-][a-z0-9]+)*$"
66
+ }
67
+ },
68
+ "evidence": {
69
+ "type": "array",
70
+ "description": "Evidence mappings from outputs back to input sources.",
71
+ "items": { "$ref": "evidence.schema.v0.1.json" }
72
+ },
73
+ "parents": {
74
+ "type": "array",
75
+ "description": "Lineage references to prior run IDs that this run depends on.",
76
+ "items": {
77
+ "type": "string",
78
+ "minLength": 1,
79
+ "maxLength": 200
80
+ }
81
+ },
82
+ "integrity": {
83
+ "type": "object",
84
+ "description": "Optional integrity metadata for the provenance record itself.",
85
+ "additionalProperties": false,
86
+ "properties": {
87
+ "record_digest": {
88
+ "type": "object",
89
+ "description": "Digest over a canonical serialization of this provenance record (excluding signatures).",
90
+ "additionalProperties": false,
91
+ "required": ["alg", "value"],
92
+ "properties": {
93
+ "alg": {
94
+ "type": "string",
95
+ "enum": ["sha256", "sha512", "blake3"]
96
+ },
97
+ "value": {
98
+ "type": "string",
99
+ "pattern": "^[0-9a-fA-F]+$",
100
+ "minLength": 16
101
+ }
102
+ }
103
+ },
104
+ "signature": {
105
+ "type": "object",
106
+ "description": "Optional signature over record_digest for audit-grade provenance.",
107
+ "additionalProperties": false,
108
+ "required": ["alg", "key_id", "value"],
109
+ "properties": {
110
+ "alg": {
111
+ "type": "string",
112
+ "description": "Signature algorithm identifier.",
113
+ "minLength": 1,
114
+ "maxLength": 100
115
+ },
116
+ "key_id": {
117
+ "type": "string",
118
+ "description": "Identifier for the signing key (public key reference).",
119
+ "minLength": 1,
120
+ "maxLength": 200
121
+ },
122
+ "value": {
123
+ "type": "string",
124
+ "description": "Signature value (base64 recommended).",
125
+ "minLength": 16,
126
+ "maxLength": 5000
127
+ }
128
+ }
129
+ }
130
+ }
131
+ }
132
+ }
133
+ }
@@ -0,0 +1,4 @@
1
+ {
2
+ "schema_version": "mcp.envelope.v0.1",
3
+ "result": {"ok": true, "count": 3, "message": "Operation completed"}
4
+ }
@@ -0,0 +1 @@
1
+ {"ok": true, "count": 3, "message": "Operation completed"}
@@ -0,0 +1,14 @@
1
+ {
2
+ "_vector_meta": {
3
+ "id": "adapter.wrap.envelope_v0_1/negative/double_wrapped",
4
+ "expect": "fail",
5
+ "reason": "Envelope is double-wrapped (nested envelope in result)"
6
+ },
7
+ "envelope": {
8
+ "schema_version": "mcp.envelope.v0.1",
9
+ "result": {
10
+ "schema_version": "mcp.envelope.v0.1",
11
+ "result": {"ok": true}
12
+ }
13
+ }
14
+ }
@@ -0,0 +1,11 @@
1
+ {
2
+ "_vector_meta": {
3
+ "id": "adapter.wrap.envelope_v0_1/negative/wrong_schema_version",
4
+ "expect": "fail",
5
+ "reason": "Envelope has wrong schema_version"
6
+ },
7
+ "envelope": {
8
+ "schema_version": "mcp.envelope.v0.2",
9
+ "result": {"ok": true}
10
+ }
11
+ }
@@ -0,0 +1,24 @@
1
+ {
2
+ "evidence": [
3
+ {
4
+ "schema_version": "evidence.v0.1",
5
+ "field": "anchored_id",
6
+ "source": "artifact:clierr-01#json:/id"
7
+ },
8
+ {
9
+ "schema_version": "evidence.v0.1",
10
+ "field": "safest_next_step",
11
+ "source": "artifact:clierr-01#json:/why/0"
12
+ },
13
+ {
14
+ "schema_version": "evidence.v0.1",
15
+ "field": "plan[0]",
16
+ "source": "artifact:clierr-01#json:/fix/0"
17
+ },
18
+ {
19
+ "schema_version": "evidence.v0.1",
20
+ "field": "plan[1]",
21
+ "source": "artifact:clierr-01#json:/fix/1"
22
+ }
23
+ ]
24
+ }
@@ -0,0 +1,8 @@
1
+ {
2
+ "artifact_id": "clierr-01",
3
+ "content": {
4
+ "id": "PAYROLL.EXPORT.SFTP.AUTH",
5
+ "why": ["Credential method mismatch", "SFTP server rejected key"],
6
+ "fix": ["Use password auth", "Update SSH key"]
7
+ }
8
+ }
@@ -0,0 +1,7 @@
1
+ {
2
+ "canonical_form": "{\"key\":\"value\",\"nested\":{\"a\":1,\"b\":2},\"number\":42}",
3
+ "digest": {
4
+ "alg": "sha256",
5
+ "value": "54fb66ce0aa908012dc9c432d77d16df95a3d5033a557d1c14cfc6d82a63ae34"
6
+ }
7
+ }
@@ -0,0 +1 @@
1
+ {"key": "value", "number": 42, "nested": {"a": 1, "b": 2}}
@@ -0,0 +1,16 @@
1
+ {
2
+ "_vector_meta": {
3
+ "id": "integrity.digest.sha256/negative/non_hex_chars",
4
+ "expect": "fail",
5
+ "reason": "Digest value contains non-hex characters"
6
+ },
7
+ "artifact": {
8
+ "schema_version": "artifact.v0.1",
9
+ "artifact_id": "test-001",
10
+ "media_type": "application/json",
11
+ "digest": {
12
+ "alg": "sha256",
13
+ "value": "ghijkl1234567890ghijkl1234567890ghijkl1234567890ghijkl1234567890"
14
+ }
15
+ }
16
+ }