@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,145 @@
1
+ # Contributing to prov-spec
2
+
3
+ Thank you for your interest in contributing to prov-spec! This is a formal specification for provenance method IDs, records, and validation.
4
+
5
+ ## How to Contribute
6
+
7
+ ### Reporting Issues
8
+
9
+ If you find a bug or have a suggestion:
10
+
11
+ 1. Check if the issue already exists in [GitHub Issues](https://github.com/mcp-tool-shop-org/prov-spec/issues)
12
+ 2. If not, create a new issue with:
13
+ - A clear, descriptive title
14
+ - Steps to reproduce (for bugs)
15
+ - Expected vs. actual behavior
16
+ - Your environment (Python version, OS)
17
+
18
+ ### Contributing to the Specification
19
+
20
+ **Before proposing a new method ID:**
21
+
22
+ 1. Open an issue describing:
23
+ - The real-world use case
24
+ - Why existing method IDs don't suffice
25
+ - Expected behavior and semantics
26
+ 2. Wait for maintainer feedback
27
+ 3. Method IDs require real-world justification — we don't speculatively add IDs
28
+
29
+ **Spec changes:**
30
+
31
+ 1. Fork the repository and create a branch from `main`
32
+ 2. Make your changes to files in `spec/`
33
+ 3. Update `CHANGELOG.md` following [Keep a Changelog](https://keepachangelog.com/en/1.0.0/)
34
+ 4. Submit a pull request with:
35
+ - Clear description of changes
36
+ - Rationale for the change
37
+ - Backward compatibility analysis
38
+
39
+ ### Contributing Reference Tools
40
+
41
+ Reference tools in `tools/` are provided for convenience and are not normative.
42
+
43
+ 1. **Python validator** (`tools/python/prov_validator.py`):
44
+ - Follow existing code style
45
+ - Add test cases for new features
46
+ - Ensure all test vectors pass
47
+ - Keep dependencies minimal
48
+
49
+ ### Adding Test Vectors
50
+
51
+ Test vectors live in `spec/vectors/[method-id]/`:
52
+
53
+ 1. Create a new directory for the method ID
54
+ 2. Add `input.json` and `expected.json` files
55
+ 3. Follow the format of existing vectors
56
+ 4. Ensure deterministic behavior
57
+ 5. Update the method's documentation
58
+
59
+ ### Development Workflow
60
+
61
+ ```bash
62
+ # Clone the repository
63
+ git clone https://github.com/mcp-tool-shop-org/prov-spec.git
64
+ cd prov-spec
65
+
66
+ # Verify installation
67
+ python tools/python/prov_validator.py --help
68
+
69
+ # List known methods
70
+ python tools/python/prov_validator.py list-methods
71
+
72
+ # Run a specific test vector
73
+ python tools/python/prov_validator.py check-vector integrity.digest.sha256
74
+
75
+ # Validate a provenance record
76
+ python tools/python/prov_validator.py validate-methods record.json --strict
77
+ ```
78
+
79
+ ### Specification Style Guide
80
+
81
+ - Use RFC 2119 keywords (MUST, SHOULD, MAY) consistently
82
+ - Include examples for every requirement
83
+ - Keep language precise and unambiguous
84
+ - Reference existing standards where applicable
85
+ - Use ABNF notation for grammar rules
86
+
87
+ ### Versioning Policy
88
+
89
+ - **Spec version:** Semantic Versioning 2.0.0
90
+ - **Method catalog:** Append-only within major version
91
+ - **Schemas:** `additionalProperties: false` for forward compatibility
92
+ - **Method IDs marked `stable`:** Append-only, semantics never change
93
+
94
+ ### Conformance Levels
95
+
96
+ When adding features, consider the conformance level:
97
+
98
+ | Level | Name | Requirements |
99
+ |-------|------|--------------|
100
+ | **1** | Integrity | `integrity.digest.*` methods |
101
+ | **2** | Engine | Level 1 + `engine.*` methods |
102
+ | **3** | Lineage | Level 2 + `lineage.*` methods |
103
+
104
+ See [CONFORMANCE_LEVELS.md](CONFORMANCE_LEVELS.md) for details.
105
+
106
+ ### Reserved Namespaces
107
+
108
+ These namespaces are reserved for future use:
109
+ - `policy.*` - Access control, permissions
110
+ - `attestation.*` - Signed claims, witnesses
111
+ - `execution.*` - Runtime context, environments
112
+ - `audit.*` - Compliance, logging
113
+
114
+ ### Code Review Process
115
+
116
+ 1. Maintainers review for:
117
+ - Specification clarity
118
+ - Backward compatibility
119
+ - Real-world justification
120
+ - Test coverage
121
+ 2. Address feedback promptly
122
+ 3. Maintainers merge when approved
123
+
124
+ ### Testing Requirements
125
+
126
+ - All test vectors must pass
127
+ - New method IDs require test vectors
128
+ - Schema changes require validation examples
129
+ - Reference tools must validate correctly
130
+
131
+ ## Code of Conduct
132
+
133
+ Please note that this project is released with a [Code of Conduct](CODE_OF_CONDUCT.md). By participating, you agree to abide by its terms.
134
+
135
+ ## Questions?
136
+
137
+ Open an issue or start a discussion. We're here to help!
138
+
139
+ ## References
140
+
141
+ - [PROV_METHODS_SPEC.md](spec/PROV_METHODS_SPEC.md) — Normative specification
142
+ - [CONFORMANCE_LEVELS.md](CONFORMANCE_LEVELS.md) — Conformance tiers
143
+ - [Semantic Versioning](https://semver.org/)
144
+ - [Keep a Changelog](https://keepachangelog.com/)
145
+ - [RFC 2119](https://www.rfc-editor.org/rfc/rfc2119.html) — Key words for RFCs
@@ -0,0 +1,137 @@
1
+ # prov-spec — Implementer Checklist (v0.1.0)
2
+
3
+ This checklist is for engineers implementing prov-spec–compliant provenance methods or validators.
4
+
5
+ **If you can check every box below, your implementation is compliant.**
6
+
7
+ ---
8
+
9
+ ## 1. Scope Check (before you write code)
10
+
11
+ - [ ] I am implementing **specific method IDs**, not "provenance in general"
12
+ - [ ] I understand that prov-spec standardizes **contracts**, not storage, transport, or policy
13
+ - [ ] I am **not adding behavior** that is not explicitly specified
14
+
15
+ > If you want flexibility, stop here—prov-spec is intentionally strict.
16
+
17
+ ---
18
+
19
+ ## 2. Method Identification
20
+
21
+ - [ ] Every provenance record includes a valid `method_id`
22
+ - [ ] The `method_id` **exactly matches** an entry in `spec/methods.json`
23
+ - [ ] I do not invent or rename method IDs
24
+ - [ ] I treat method IDs as **stable contracts**, not strings of convenience
25
+
26
+ > **Rule:** If the ID is marked `stable`, its semantics must never change.
27
+
28
+ ---
29
+
30
+ ## 3. Semantic Compliance (most important)
31
+
32
+ For each implemented method:
33
+
34
+ - [ ] I have read the method's normative requirements in `PROV_METHODS_SPEC.md`
35
+ - [ ] All **MUST** requirements are implemented
36
+ - [ ] All **MUST NOT** constraints are enforced
37
+ - [ ] Optional behavior is clearly optional and documented
38
+
39
+ > **Rule:** Passing tests without meeting semantics is non-compliant.
40
+
41
+ ---
42
+
43
+ ## 4. Canonicalization & Integrity (if applicable)
44
+
45
+ If your method involves hashing, signing, or verification:
46
+
47
+ - [ ] I use the **exact canonicalization algorithm** specified
48
+ - [ ] I hash/sign the **canonical bytes**, not ad-hoc serialization
49
+ - [ ] I reject non-canonical or ambiguous inputs
50
+ - [ ] Digest values match expected length, encoding, and format exactly
51
+
52
+ > **Common failure:** Correct algorithm, wrong bytes.
53
+
54
+ ---
55
+
56
+ ## 5. Record Shape & Fields
57
+
58
+ - [ ] Output records include all required fields
59
+ - [ ] Field names, types, and nesting match the spec
60
+ - [ ] No required fields are omitted
61
+ - [ ] No forbidden fields are added
62
+
63
+ Validate against the JSON Schemas in `spec/schemas/`.
64
+
65
+ ---
66
+
67
+ ## 6. Test Vectors (mandatory)
68
+
69
+ For each implemented method:
70
+
71
+ - [ ] All **positive** test vectors pass
72
+ - [ ] All **negative** (must-fail) vectors fail correctly
73
+ - [ ] Failures are **explicit** (errors), not silent acceptance
74
+
75
+ > **Rule:** If a must-fail vector passes, the implementation is wrong.
76
+
77
+ ---
78
+
79
+ ## 7. Capability Declaration (recommended)
80
+
81
+ If publishing an engine or tool:
82
+
83
+ - [ ] I provide a `prov-capabilities.json`
84
+ - [ ] Declared methods **exactly match** what is implemented
85
+ - [ ] The manifest validates against `prov-capabilities.schema.json`
86
+
87
+ This enables automated interoperability without code imports.
88
+
89
+ ---
90
+
91
+ ## 8. Conformance Level
92
+
93
+ - [ ] I know which conformance level I meet:
94
+ - **Level 1:** Integrity
95
+ - **Level 2:** Engine
96
+ - **Level 3:** Lineage
97
+ - [ ] I do not claim a higher level than implemented
98
+ - [ ] Unsupported levels are not implied
99
+
100
+ > Partial compliance is acceptable—misrepresentation is not.
101
+
102
+ ---
103
+
104
+ ## 9. Language & Tooling Neutrality
105
+
106
+ - [ ] My implementation does **not depend** on prov-spec reference tooling
107
+ - [ ] I treat the Python validator as **optional**
108
+ - [ ] I could replace the validator and still be compliant
109
+
110
+ > Authority lives in the spec and vectors, not in code.
111
+
112
+ ---
113
+
114
+ ## 10. Versioning Discipline
115
+
116
+ - [ ] I record which spec version I target (e.g. `v0.1.0`)
117
+ - [ ] I do not assume future behavior
118
+ - [ ] I understand that stable method semantics **never change**
119
+
120
+ If the spec updates, re-run vectors before upgrading claims.
121
+
122
+ ---
123
+
124
+ ## Final Sanity Check
125
+
126
+ Ask yourself:
127
+
128
+ > *"Could someone else independently implement this method and produce the same result?"*
129
+
130
+ - If the answer is **yes**, you're done.
131
+ - If the answer is **maybe**, re-read the spec.
132
+
133
+ ---
134
+
135
+ **prov-spec exists to make provenance verifiable without trusting the producer.**
136
+
137
+ **This checklist exists to make that practical.**
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2025 prov-spec contributors
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
@@ -0,0 +1,74 @@
1
+ # prov-spec v0.1.0 Released
2
+
3
+ **A formal, language-neutral specification for verifiable provenance**
4
+
5
+ *January 26, 2026*
6
+
7
+ ---
8
+
9
+ Today marks the release of **prov-spec v0.1.0**, a formal, versioned specification and conformance suite for provenance method identifiers, records, and validation.
10
+
11
+ prov-spec defines a minimal, stable interoperability surface for provenance systems—focusing on **what can be verified**, not how systems are built. It is designed to be implementation-agnostic, language-neutral, and durable over time.
12
+
13
+ ---
14
+
15
+ ## What prov-spec provides
16
+
17
+ - Normative specification using RFC 2119 language
18
+ - Stable, append-only method identifiers with frozen semantics
19
+ - Machine-readable catalogs and JSON Schemas
20
+ - Positive and negative test vectors for deterministic validation
21
+ - Conformance levels for incremental adoption
22
+ - Reference validator tooling (optional, non-privileged)
23
+
24
+ ---
25
+
26
+ ## What prov-spec does not do
27
+
28
+ prov-spec intentionally does **not** define:
29
+
30
+ - Storage formats
31
+ - Transport protocols
32
+ - User interfaces
33
+ - Policy or governance models
34
+
35
+ This restraint is deliberate. **prov-spec standardizes contracts, not implementations.**
36
+
37
+ ---
38
+
39
+ ## Proven interoperability
40
+
41
+ To demonstrate language neutrality, a zero-dependency Node.js provenance engine was implemented independently and validated against prov-spec test vectors **without importing any prov-spec code**. The engine passes all applicable vectors, confirming that the specification is executable and portable.
42
+
43
+ ---
44
+
45
+ ## Stability guarantees
46
+
47
+ - Method identifiers marked `stable` are **append-only**
48
+ - Semantics for stable methods will **never change**
49
+ - Compatibility is guaranteed within a major version
50
+
51
+ **prov-spec v0.1.0 is considered stable.**
52
+
53
+ ---
54
+
55
+ ## Who this is for
56
+
57
+ - Provenance engine authors
58
+ - Tool and platform integrators
59
+ - Infrastructure and security teams
60
+ - Auditors and verification systems
61
+ - Anyone who needs provenance to remain verifiable beyond the lifetime of a single system
62
+
63
+ ---
64
+
65
+ ## Availability
66
+
67
+ prov-spec v0.1.0 is available now under the MIT license.
68
+
69
+ - Specification: [github.com/mcp-tool-shop-org/prov-spec](https://github.com/mcp-tool-shop-org/prov-spec)
70
+ - Node.js Reference Engine: [github.com/mcp-tool-shop-org/prov-engine-js](https://github.com/mcp-tool-shop-org/prov-engine-js)
71
+
72
+ ---
73
+
74
+ > **prov-spec exists so provenance can outlive the systems that generate it.**
@@ -0,0 +1,182 @@
1
+ # prov-spec
2
+
3
+ **A formal, versioned specification and conformance suite for provenance method IDs, records, and validation.**
4
+
5
+ [![Spec Version](https://img.shields.io/badge/spec-v0.1.0-blue)](spec/PROV_METHODS_SPEC.md)
6
+ [![License](https://img.shields.io/badge/license-MIT-green)](LICENSE)
7
+
8
+ ---
9
+
10
+ ## What is this?
11
+
12
+ A normative specification defining:
13
+ - **Method IDs** — stable, namespaced identifiers for provenance operations
14
+ - **Provenance Records** — structured JSON documenting tool invocations
15
+ - **Conformance Levels** — testable compliance tiers
16
+ - **Test Vectors** — canonical inputs/outputs for interoperability
17
+
18
+ ## What is this not?
19
+
20
+ - Not a framework
21
+ - Not an SDK
22
+ - Not MCP-specific
23
+ - Not Python-specific
24
+
25
+ ## Who is it for?
26
+
27
+ - **Engine authors** — implement provenance in any language
28
+ - **Tool integrators** — wrap existing tools with provenance
29
+ - **Auditors** — verify provenance claims
30
+ - **Infrastructure builders** — build provenance-aware systems
31
+
32
+ ---
33
+
34
+ ## Stability Guarantee
35
+
36
+ > **Method IDs marked `stable` are append-only and will never change semantics.**
37
+ > **Compatibility is guaranteed within a major version.**
38
+
39
+ ---
40
+
41
+ ## Quick Start
42
+
43
+ ### Verify in 10 seconds
44
+
45
+ ```bash
46
+ # Clone and run a test vector
47
+ git clone https://github.com/prov-spec/prov-spec
48
+ cd prov-spec
49
+ python tools/python/prov_validator.py check-vector integrity.digest.sha256
50
+ ```
51
+
52
+ Expected output: `INFO: Test vector integrity.digest.sha256 passed`
53
+
54
+ ---
55
+
56
+ ### 1. Understand the spec
57
+
58
+ Read [`spec/PROV_METHODS_SPEC.md`](spec/PROV_METHODS_SPEC.md) — the normative specification.
59
+
60
+ ### 2. Check the catalog
61
+
62
+ Browse [`spec/methods.json`](spec/methods.json) — machine-readable method registry.
63
+
64
+ ### 3. Declare conformance
65
+
66
+ Ship a `prov-capabilities.json` in your project:
67
+
68
+ ```json
69
+ {
70
+ "schema": "prov-capabilities@v0.1",
71
+ "engine": {
72
+ "name": "your-engine",
73
+ "version": "1.0.0"
74
+ },
75
+ "implements": [
76
+ "adapter.wrap.envelope_v0_1",
77
+ "integrity.digest.sha256"
78
+ ],
79
+ "conformance_level": "fully-conformant"
80
+ }
81
+ ```
82
+
83
+ ### 4. Validate (optional)
84
+
85
+ Use the reference validator:
86
+
87
+ ```bash
88
+ # List known methods
89
+ python -m prov_validator list-methods
90
+
91
+ # Validate a provenance record
92
+ python -m prov_validator validate-methods record.json --strict
93
+
94
+ # Run test vectors
95
+ python -m prov_validator check-vector integrity.digest.sha256
96
+ ```
97
+
98
+ ---
99
+
100
+ ## Repository Structure
101
+
102
+ ```
103
+ prov-spec/
104
+ ├── spec/ # Normative specification
105
+ │ ├── PROV_METHODS_SPEC.md # Main specification document
106
+ │ ├── methods.json # Machine-readable method catalog
107
+ │ ├── schemas/ # JSON Schemas
108
+ │ │ ├── prov.record.schema.v0.1.json
109
+ │ │ ├── artifact.schema.v0.1.json
110
+ │ │ ├── evidence.schema.v0.1.json
111
+ │ │ ├── mcp.envelope.schema.v0.1.json
112
+ │ │ └── prov-capabilities.schema.json
113
+ │ └── vectors/ # Test vectors
114
+ │ ├── integrity.digest.sha256/
115
+ │ ├── adapter.wrap.envelope_v0_1/
116
+ │ └── ...
117
+ ├── tools/ # Reference implementations (optional)
118
+ │ └── python/ # Python reference validator
119
+ ├── examples/ # Example files
120
+ ├── CONFORMANCE_LEVELS.md # Conformance tiers
121
+ └── CHANGELOG.md # Version history
122
+ ```
123
+
124
+ **Note:** Reference tools are provided for convenience and are not required for conformance.
125
+
126
+ ---
127
+
128
+ ## Conformance Levels
129
+
130
+ | Level | Name | Requirements |
131
+ |-------|------|--------------|
132
+ | **1** | Integrity | `integrity.digest.*` methods |
133
+ | **2** | Engine | Level 1 + `engine.*` methods |
134
+ | **3** | Lineage | Level 2 + `lineage.*` methods |
135
+
136
+ See [`CONFORMANCE_LEVELS.md`](CONFORMANCE_LEVELS.md) for details.
137
+
138
+ ---
139
+
140
+ ## Method Namespaces
141
+
142
+ | Namespace | Purpose |
143
+ |-----------|---------|
144
+ | `adapter.*` | Envelope wrapping, transport |
145
+ | `engine.*` | Evidence extraction, provenance construction |
146
+ | `integrity.*` | Hashing, signatures, verification |
147
+ | `lineage.*` | Parent linking, graph operations |
148
+
149
+ Reserved for future use: `policy.*`, `attestation.*`, `execution.*`, `audit.*`
150
+
151
+ ---
152
+
153
+ ## Versioning
154
+
155
+ - **Spec version:** `v0.1.0`
156
+ - **Method catalog:** append-only within major version
157
+ - **Schemas:** `additionalProperties: false` — forward-compatible within patch
158
+
159
+ ---
160
+
161
+ ## Contributing
162
+
163
+ 1. New method IDs: open an issue with use case
164
+ 2. Spec clarifications: submit PR to `spec/`
165
+ 3. Reference tools: submit PR to `tools/`
166
+
167
+ Method IDs require real-world justification. We don't speculatively add IDs.
168
+
169
+ ---
170
+
171
+ ## License
172
+
173
+ MIT — see [LICENSE](LICENSE)
174
+
175
+ ---
176
+
177
+ ## References
178
+
179
+ - [PROV_METHODS_SPEC.md](spec/PROV_METHODS_SPEC.md) — Normative specification
180
+ - [PROV_METHODS_CATALOG.md](spec/PROV_METHODS_CATALOG.md) — Human-readable catalog
181
+ - [CONFORMANCE_LEVELS.md](CONFORMANCE_LEVELS.md) — Conformance tiers
182
+ - [MCP_COMPATIBILITY.md](spec/MCP_COMPATIBILITY.md) — MCP envelope compatibility
@@ -0,0 +1,135 @@
1
+ # Getting Started with prov-spec
2
+
3
+ This guide is for engineers who want to validate, implement, or integrate with prov-spec.
4
+
5
+ **You do not need to use any specific language or framework to comply.**
6
+
7
+ ---
8
+
9
+ ## Repository Structure
10
+
11
+ ```
12
+ prov-spec/
13
+ ├── spec/ # Normative specification, schemas, vectors
14
+ ├── tools/python/ # Reference validator (optional)
15
+ ├── interop/ # Interoperability proofs
16
+ ├── WHY.md # Design intent and non-goals
17
+ └── CONFORMANCE_LEVELS.md
18
+ ```
19
+
20
+ **Only the `spec/` directory is normative.**
21
+
22
+ ---
23
+
24
+ ## Option A: Validate provenance records (recommended first step)
25
+
26
+ ### Requirements
27
+
28
+ - Python 3.10+
29
+
30
+ ### Run the reference validator
31
+
32
+ ```bash
33
+ cd prov-spec
34
+ python tools/python/prov_validator.py --help
35
+ ```
36
+
37
+ ### Validate a provenance record
38
+
39
+ ```bash
40
+ python tools/python/prov_validator.py \
41
+ validate-methods path/to/record.json --strict
42
+ ```
43
+
44
+ This checks:
45
+ - Method IDs
46
+ - Required fields
47
+ - Semantic constraints
48
+ - Catalog compliance
49
+
50
+ ---
51
+
52
+ ## Option B: Validate against official test vectors
53
+
54
+ ### Run a built-in vector check
55
+
56
+ ```bash
57
+ python tools/python/prov_validator.py \
58
+ check-vector integrity.digest.sha256
59
+ ```
60
+
61
+ Vectors include **must-pass** and **must-fail** cases.
62
+
63
+ **Passing vectors is sufficient to demonstrate method compliance.**
64
+
65
+ ---
66
+
67
+ ## Option C: Declare engine capabilities (no imports required)
68
+
69
+ Third-party engines declare support using a capability manifest:
70
+
71
+ ```json
72
+ {
73
+ "schema": "mcp-tool-shop/prov-capabilities@v0.1",
74
+ "engine": {
75
+ "name": "example-engine",
76
+ "version": "1.0.0"
77
+ },
78
+ "implements": [
79
+ "integrity.digest.sha256",
80
+ "adapter.wrap.envelope_v0_1"
81
+ ]
82
+ }
83
+ ```
84
+
85
+ ### Validate the manifest
86
+
87
+ ```bash
88
+ python tools/python/prov_validator.py \
89
+ validate-manifest prov-capabilities.json
90
+ ```
91
+
92
+ ---
93
+
94
+ ## Option D: Implement prov-spec in any language
95
+
96
+ To implement a method:
97
+
98
+ 1. Read its normative requirements in `spec/PROV_METHODS_SPEC.md`
99
+ 2. Implement the method exactly as specified
100
+ 3. Run the corresponding test vectors
101
+ 4. (Optional) Publish a `prov-capabilities.json`
102
+
103
+ **No SDK, framework, or library is required.**
104
+
105
+ ---
106
+
107
+ ## Reference tooling policy
108
+
109
+ The Python validator is provided for **convenience only**.
110
+
111
+ - It is **not required** for conformance
112
+ - Alternative validators and engines are encouraged
113
+ - All authority lives in the specification and vectors
114
+
115
+ ---
116
+
117
+ ## Versioning and upgrades
118
+
119
+ - v0.1.0 is **stable**
120
+ - Method IDs are **append-only**
121
+ - New behavior will only appear in new versions
122
+ - Existing records remain valid forever
123
+
124
+ ---
125
+
126
+ ## Where to start (TL;DR)
127
+
128
+ If you are new:
129
+
130
+ 1. Run one vector check
131
+ 2. Read `WHY.md`
132
+ 3. Implement one method
133
+ 4. Stop there
134
+
135
+ **prov-spec is intentionally small.**