@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.
- package/.github/workflows/ci.yml +63 -0
- package/LICENSE +21 -0
- package/README.md +37 -0
- package/docs/prov-spec/.github/workflows/ci.yml +68 -0
- package/docs/prov-spec/CHANGELOG.md +69 -0
- package/docs/prov-spec/CODE_OF_CONDUCT.md +129 -0
- package/docs/prov-spec/CONFORMANCE_LEVELS.md +223 -0
- package/docs/prov-spec/CONTRIBUTING.md +145 -0
- package/docs/prov-spec/IMPLEMENTER_CHECKLIST.md +137 -0
- package/docs/prov-spec/LICENSE +21 -0
- package/docs/prov-spec/PRESS_RELEASE.md +74 -0
- package/docs/prov-spec/README.md +182 -0
- package/docs/prov-spec/SETUP.md +135 -0
- package/docs/prov-spec/WHY.md +86 -0
- package/docs/prov-spec/examples/artifact.example.json +14 -0
- package/docs/prov-spec/examples/artifact.ref.example.json +9 -0
- package/docs/prov-spec/examples/evidence.example.json +6 -0
- package/docs/prov-spec/examples/mcp.envelope.example.json +97 -0
- package/docs/prov-spec/examples/mcp.request.example.json +28 -0
- package/docs/prov-spec/examples/prov.record.example.json +35 -0
- package/docs/prov-spec/interop/PROOF_NODE_ENGINE.md +114 -0
- package/docs/prov-spec/spec/MCP_COMPATIBILITY.md +241 -0
- package/docs/prov-spec/spec/PROV_METHODS_CATALOG.md +142 -0
- package/docs/prov-spec/spec/PROV_METHODS_SPEC.md +397 -0
- package/docs/prov-spec/spec/methods.json +213 -0
- package/docs/prov-spec/spec/schemas/artifact.ref.schema.v0.1.json +58 -0
- package/docs/prov-spec/spec/schemas/artifact.schema.v0.1.json +61 -0
- package/docs/prov-spec/spec/schemas/assist.request.schema.v0.1.json +52 -0
- package/docs/prov-spec/spec/schemas/assist.response.schema.v0.1.json +70 -0
- package/docs/prov-spec/spec/schemas/cli.error.schema.v0.1.json +78 -0
- package/docs/prov-spec/spec/schemas/evidence.schema.v0.1.json +37 -0
- package/docs/prov-spec/spec/schemas/mcp.envelope.schema.v0.1.json +141 -0
- package/docs/prov-spec/spec/schemas/mcp.request.schema.v0.1.json +79 -0
- package/docs/prov-spec/spec/schemas/methods.schema.json +93 -0
- package/docs/prov-spec/spec/schemas/prov-capabilities.schema.json +122 -0
- package/docs/prov-spec/spec/schemas/prov.record.schema.v0.1.json +133 -0
- package/docs/prov-spec/spec/vectors/adapter.wrap.envelope_v0_1/expected.json +4 -0
- package/docs/prov-spec/spec/vectors/adapter.wrap.envelope_v0_1/input.json +1 -0
- package/docs/prov-spec/spec/vectors/adapter.wrap.envelope_v0_1/negative/double_wrapped.json +14 -0
- package/docs/prov-spec/spec/vectors/adapter.wrap.envelope_v0_1/negative/wrong_schema_version.json +11 -0
- package/docs/prov-spec/spec/vectors/engine.extract.evidence.json_pointer/expected.json +24 -0
- package/docs/prov-spec/spec/vectors/engine.extract.evidence.json_pointer/input.json +8 -0
- package/docs/prov-spec/spec/vectors/integrity.digest.sha256/expected.json +7 -0
- package/docs/prov-spec/spec/vectors/integrity.digest.sha256/input.json +1 -0
- package/docs/prov-spec/spec/vectors/integrity.digest.sha256/negative/non_hex_chars.json +16 -0
- package/docs/prov-spec/spec/vectors/integrity.digest.sha256/negative/uppercase_hex.json +16 -0
- package/docs/prov-spec/spec/vectors/integrity.digest.sha256/negative/wrong_length.json +16 -0
- package/docs/prov-spec/spec/vectors/method_id_syntax/negative/hyphen_separator.json +8 -0
- package/docs/prov-spec/spec/vectors/method_id_syntax/negative/reserved_namespace.json +8 -0
- package/docs/prov-spec/spec/vectors/method_id_syntax/negative/starts_with_digit.json +8 -0
- package/docs/prov-spec/spec/vectors/method_id_syntax/negative/uppercase.json +8 -0
- package/docs/prov-spec/spec/vectors/method_id_syntax/positive/valid_ids.json +18 -0
- package/docs/prov-spec/tools/python/prov_validator.py +428 -0
- package/examples/a11y-demo-site/.github/workflows/a11y-artifacts.yml +81 -0
- package/examples/a11y-demo-site/.github/workflows/a11y.yml +34 -0
- package/examples/a11y-demo-site/CODE_OF_CONDUCT.md +129 -0
- package/examples/a11y-demo-site/CONTRIBUTING.md +83 -0
- package/examples/a11y-demo-site/LICENSE +21 -0
- package/examples/a11y-demo-site/README.md +155 -0
- package/examples/a11y-demo-site/html/contact.html +15 -0
- package/examples/a11y-demo-site/html/index.html +20 -0
- package/examples/a11y-demo-site/scripts/a11y.sh +20 -0
- package/package.json +26 -0
- package/src/a11y-assist/.github/workflows/publish.yml +52 -0
- package/src/a11y-assist/.github/workflows/test.yml +30 -0
- package/src/a11y-assist/A11Y_ASSIST_TEST_COVERAGE_REQUIREMENTS.md +104 -0
- package/src/a11y-assist/CODE_OF_CONDUCT.md +129 -0
- package/src/a11y-assist/CONTRIBUTING.md +98 -0
- package/src/a11y-assist/ENGINE.md +363 -0
- package/src/a11y-assist/LICENSE +21 -0
- package/src/a11y-assist/PRESS_RELEASE.md +71 -0
- package/src/a11y-assist/QUICKSTART.md +101 -0
- package/src/a11y-assist/README.md +192 -0
- package/src/a11y-assist/RELEASE_NOTES.md +319 -0
- package/src/a11y-assist/a11y_assist/__init__.py +3 -0
- package/src/a11y-assist/a11y_assist/cli.py +599 -0
- package/src/a11y-assist/a11y_assist/from_cli_error.py +149 -0
- package/src/a11y-assist/a11y_assist/guard.py +444 -0
- package/src/a11y-assist/a11y_assist/ingest.py +407 -0
- package/src/a11y-assist/a11y_assist/methods.py +137 -0
- package/src/a11y-assist/a11y_assist/parse_raw.py +71 -0
- package/src/a11y-assist/a11y_assist/profiles/__init__.py +29 -0
- package/src/a11y-assist/a11y_assist/profiles/cognitive_load.py +245 -0
- package/src/a11y-assist/a11y_assist/profiles/cognitive_load_render.py +86 -0
- package/src/a11y-assist/a11y_assist/profiles/dyslexia.py +144 -0
- package/src/a11y-assist/a11y_assist/profiles/dyslexia_render.py +77 -0
- package/src/a11y-assist/a11y_assist/profiles/plain_language.py +119 -0
- package/src/a11y-assist/a11y_assist/profiles/plain_language_render.py +66 -0
- package/src/a11y-assist/a11y_assist/profiles/screen_reader.py +348 -0
- package/src/a11y-assist/a11y_assist/profiles/screen_reader_render.py +89 -0
- package/src/a11y-assist/a11y_assist/render.py +95 -0
- package/src/a11y-assist/a11y_assist/schemas/assist.request.schema.v0.1.json +52 -0
- package/src/a11y-assist/a11y_assist/schemas/assist.response.schema.v0.1.json +70 -0
- package/src/a11y-assist/a11y_assist/schemas/cli.error.schema.v0.1.json +78 -0
- package/src/a11y-assist/a11y_assist/storage.py +31 -0
- package/src/a11y-assist/pyproject.toml +60 -0
- package/src/a11y-assist/tests/__init__.py +1 -0
- package/src/a11y-assist/tests/fixtures/base_inputs/cli_error_high.json +18 -0
- package/src/a11y-assist/tests/fixtures/base_inputs/cli_error_medium.json +16 -0
- package/src/a11y-assist/tests/fixtures/base_inputs/raw_text_low.txt +3 -0
- package/src/a11y-assist/tests/fixtures/cli_error_good.json +9 -0
- package/src/a11y-assist/tests/fixtures/cli_error_missing_id.json +7 -0
- package/src/a11y-assist/tests/fixtures/cli_error_string_format.json +7 -0
- package/src/a11y-assist/tests/fixtures/expected/cognitive_load_high.txt +20 -0
- package/src/a11y-assist/tests/fixtures/expected/dyslexia_high.txt +20 -0
- package/src/a11y-assist/tests/fixtures/expected/lowvision_high.txt +18 -0
- package/src/a11y-assist/tests/fixtures/expected/plain_language_high.txt +14 -0
- package/src/a11y-assist/tests/fixtures/expected/screen_reader_high.txt +19 -0
- package/src/a11y-assist/tests/fixtures/golden_screen_reader_cli_error.txt +16 -0
- package/src/a11y-assist/tests/fixtures/golden_screen_reader_raw_no_id.txt +14 -0
- package/src/a11y-assist/tests/fixtures/golden_screen_reader_raw_with_id.txt +14 -0
- package/src/a11y-assist/tests/fixtures/raw_good.txt +11 -0
- package/src/a11y-assist/tests/fixtures/raw_no_id.txt +2 -0
- package/src/a11y-assist/tests/test_cognitive_load.py +469 -0
- package/src/a11y-assist/tests/test_dyslexia.py +337 -0
- package/src/a11y-assist/tests/test_explain.py +74 -0
- package/src/a11y-assist/tests/test_golden.py +127 -0
- package/src/a11y-assist/tests/test_guard.py +819 -0
- package/src/a11y-assist/tests/test_guard_integration.py +457 -0
- package/src/a11y-assist/tests/test_ingest.py +311 -0
- package/src/a11y-assist/tests/test_methods_metadata.py +236 -0
- package/src/a11y-assist/tests/test_plain_language.py +348 -0
- package/src/a11y-assist/tests/test_render.py +117 -0
- package/src/a11y-assist/tests/test_screen_reader.py +703 -0
- package/src/a11y-assist/tests/test_storage_last.py +61 -0
- package/src/a11y-assist/tests/test_triage.py +86 -0
- package/src/a11y-ci/.github/workflows/ci.yml +43 -0
- package/src/a11y-ci/.github/workflows/test.yml +30 -0
- package/src/a11y-ci/A11Y_CI_TEST_COVERAGE_REQUIREMENTS.md +94 -0
- package/src/a11y-ci/CODE_OF_CONDUCT.md +129 -0
- package/src/a11y-ci/CONTRIBUTING.md +142 -0
- package/src/a11y-ci/LICENSE +21 -0
- package/src/a11y-ci/README.md +105 -0
- package/src/a11y-ci/a11y_ci/__init__.py +3 -0
- package/src/a11y-ci/a11y_ci/allowlist.py +83 -0
- package/src/a11y-ci/a11y_ci/cli.py +145 -0
- package/src/a11y-ci/a11y_ci/gate.py +131 -0
- package/src/a11y-ci/a11y_ci/render.py +48 -0
- package/src/a11y-ci/a11y_ci/schemas/allowlist.schema.json +24 -0
- package/src/a11y-ci/a11y_ci/scorecard.py +99 -0
- package/src/a11y-ci/npm/package.json +35 -0
- package/src/a11y-ci/pyproject.toml +64 -0
- package/src/a11y-ci/tests/__init__.py +1 -0
- package/src/a11y-ci/tests/fixtures/allowlist_expired.json +10 -0
- package/src/a11y-ci/tests/fixtures/allowlist_ok.json +10 -0
- package/src/a11y-ci/tests/fixtures/baseline_ok.json +7 -0
- package/src/a11y-ci/tests/fixtures/current_fail.json +6 -0
- package/src/a11y-ci/tests/fixtures/current_ok.json +6 -0
- package/src/a11y-ci/tests/fixtures/current_regresses.json +7 -0
- package/src/a11y-ci/tests/test_gate.py +134 -0
- package/src/a11y-evidence-engine/.github/workflows/ci.yml +53 -0
- package/src/a11y-evidence-engine/CODE_OF_CONDUCT.md +129 -0
- package/src/a11y-evidence-engine/CONTRIBUTING.md +128 -0
- package/src/a11y-evidence-engine/LICENSE +21 -0
- package/src/a11y-evidence-engine/README.md +71 -0
- package/src/a11y-evidence-engine/bin/a11y-engine.js +11 -0
- package/src/a11y-evidence-engine/fixtures/bad/button-no-name.html +30 -0
- package/src/a11y-evidence-engine/fixtures/bad/img-missing-alt.html +19 -0
- package/src/a11y-evidence-engine/fixtures/bad/input-missing-label.html +26 -0
- package/src/a11y-evidence-engine/fixtures/bad/missing-lang.html +11 -0
- package/src/a11y-evidence-engine/fixtures/good/index.html +29 -0
- package/src/a11y-evidence-engine/package-lock.json +109 -0
- package/src/a11y-evidence-engine/package.json +45 -0
- package/src/a11y-evidence-engine/src/cli.js +74 -0
- package/src/a11y-evidence-engine/src/evidence/canonicalize.js +52 -0
- package/src/a11y-evidence-engine/src/evidence/json_pointer.js +34 -0
- package/src/a11y-evidence-engine/src/evidence/prov_emit.js +153 -0
- package/src/a11y-evidence-engine/src/fswalk.js +56 -0
- package/src/a11y-evidence-engine/src/html_parse.js +117 -0
- package/src/a11y-evidence-engine/src/ids.js +53 -0
- package/src/a11y-evidence-engine/src/rules/document_missing_lang.js +50 -0
- package/src/a11y-evidence-engine/src/rules/form_control_missing_label.js +105 -0
- package/src/a11y-evidence-engine/src/rules/img_missing_alt.js +77 -0
- package/src/a11y-evidence-engine/src/rules/index.js +37 -0
- package/src/a11y-evidence-engine/src/rules/interactive_missing_name.js +129 -0
- package/src/a11y-evidence-engine/src/scan.js +128 -0
- package/src/a11y-evidence-engine/test/scan.test.js +149 -0
- package/src/a11y-evidence-engine/test/vectors.test.js +200 -0
- package/src/a11y-lint/.github/workflows/ci.yml +46 -0
- package/src/a11y-lint/.github/workflows/test.yml +34 -0
- package/src/a11y-lint/CODE_OF_CONDUCT.md +129 -0
- package/src/a11y-lint/CONTRIBUTING.md +70 -0
- package/src/a11y-lint/GOVERNANCE.md +57 -0
- package/src/a11y-lint/LICENSE +21 -0
- package/src/a11y-lint/PRESS_RELEASE.md +50 -0
- package/src/a11y-lint/README.md +276 -0
- package/src/a11y-lint/RELEASE_NOTES.md +57 -0
- package/src/a11y-lint/RELEASING.md +57 -0
- package/src/a11y-lint/a11y_lint/__init__.py +64 -0
- package/src/a11y-lint/a11y_lint/cli.py +319 -0
- package/src/a11y-lint/a11y_lint/errors.py +252 -0
- package/src/a11y-lint/a11y_lint/render.py +293 -0
- package/src/a11y-lint/a11y_lint/report_md.py +289 -0
- package/src/a11y-lint/a11y_lint/scan_cli_text.py +434 -0
- package/src/a11y-lint/a11y_lint/schemas/cli.error.schema.v0.1.json +83 -0
- package/src/a11y-lint/a11y_lint/scorecard.py +244 -0
- package/src/a11y-lint/a11y_lint/validate.py +225 -0
- package/src/a11y-lint/pyproject.toml +75 -0
- package/src/a11y-lint/tests/__init__.py +1 -0
- package/src/a11y-lint/tests/test_cli.py +200 -0
- package/src/a11y-lint/tests/test_errors.py +188 -0
- package/src/a11y-lint/tests/test_render.py +202 -0
- package/src/a11y-lint/tests/test_report_md.py +188 -0
- package/src/a11y-lint/tests/test_scan_cli_text.py +290 -0
- package/src/a11y-lint/tests/test_scorecard.py +195 -0
- package/src/a11y-lint/tests/test_validate.py +257 -0
- package/src/a11y-mcp-tools/.github/workflows/ci.yml +53 -0
- package/src/a11y-mcp-tools/CODE_OF_CONDUCT.md +129 -0
- package/src/a11y-mcp-tools/CONTRIBUTING.md +136 -0
- package/src/a11y-mcp-tools/LICENSE +21 -0
- package/src/a11y-mcp-tools/PROV_METHODS_CATALOG.md +104 -0
- package/src/a11y-mcp-tools/README.md +168 -0
- package/src/a11y-mcp-tools/bin/cli.js +452 -0
- package/src/a11y-mcp-tools/bin/server.js +244 -0
- package/src/a11y-mcp-tools/fixtures/requests/a11y.diagnose.ok.json +27 -0
- package/src/a11y-mcp-tools/fixtures/requests/a11y.evidence.ok.json +25 -0
- package/src/a11y-mcp-tools/fixtures/responses/a11y.diagnose.ok.json +139 -0
- package/src/a11y-mcp-tools/fixtures/responses/a11y.diagnose.provenance_fail.json +13 -0
- package/src/a11y-mcp-tools/fixtures/responses/a11y.evidence.ok.json +88 -0
- package/src/a11y-mcp-tools/package-lock.json +189 -0
- package/src/a11y-mcp-tools/package.json +49 -0
- package/src/a11y-mcp-tools/src/envelope.js +197 -0
- package/src/a11y-mcp-tools/src/index.js +9 -0
- package/src/a11y-mcp-tools/src/schemas/artifact.js +85 -0
- package/src/a11y-mcp-tools/src/schemas/diagnosis.schema.v0.1.json +137 -0
- package/src/a11y-mcp-tools/src/schemas/envelope.schema.v0.1.json +108 -0
- package/src/a11y-mcp-tools/src/schemas/evidence.bundle.schema.v0.1.json +129 -0
- package/src/a11y-mcp-tools/src/schemas/evidence.js +97 -0
- package/src/a11y-mcp-tools/src/schemas/index.js +11 -0
- package/src/a11y-mcp-tools/src/schemas/provenance.js +140 -0
- package/src/a11y-mcp-tools/src/schemas/tools/a11y.diagnose.request.schema.v0.1.json +77 -0
- package/src/a11y-mcp-tools/src/schemas/tools/a11y.diagnose.response.schema.v0.1.json +50 -0
- package/src/a11y-mcp-tools/src/schemas/tools/a11y.evidence.request.schema.v0.1.json +120 -0
- package/src/a11y-mcp-tools/src/schemas/tools/a11y.evidence.response.schema.v0.1.json +50 -0
- package/src/a11y-mcp-tools/src/tools/diagnose.js +597 -0
- package/src/a11y-mcp-tools/src/tools/evidence.js +481 -0
- package/src/a11y-mcp-tools/src/tools/index.js +10 -0
- package/src/a11y-mcp-tools/test/contract.test.mjs +154 -0
- package/src/a11y-mcp-tools/test/diagnose.test.js +485 -0
- package/src/a11y-mcp-tools/test/evidence.test.js +183 -0
- package/src/a11y-mcp-tools/test/schema.test.js +327 -0
|
@@ -0,0 +1,213 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "schemas/methods.schema.json",
|
|
3
|
+
"schema_version": "methods-catalog@v0.1",
|
|
4
|
+
"spec_version": "0.1.0",
|
|
5
|
+
"generated": false,
|
|
6
|
+
"methods": [
|
|
7
|
+
{
|
|
8
|
+
"id": "adapter.wrap.envelope_v0_1",
|
|
9
|
+
"namespace": "adapter",
|
|
10
|
+
"status": "stable",
|
|
11
|
+
"since": "0.1.0",
|
|
12
|
+
"summary": "Wrapped a legacy tool payload into mcp.envelope.v0.1",
|
|
13
|
+
"when_to_emit": "Adapter created an envelope around non-envelope output",
|
|
14
|
+
"requires": ["envelope.schema_version == 'mcp.envelope.v0.1'"]
|
|
15
|
+
},
|
|
16
|
+
{
|
|
17
|
+
"id": "adapter.pass_through.envelope_v0_1",
|
|
18
|
+
"namespace": "adapter",
|
|
19
|
+
"status": "stable",
|
|
20
|
+
"since": "0.1.0",
|
|
21
|
+
"summary": "Tool returned an envelope already; adapter returned it unchanged",
|
|
22
|
+
"when_to_emit": "Adapter performed pass-through without wrapping",
|
|
23
|
+
"requires": ["no double-wrapping"]
|
|
24
|
+
},
|
|
25
|
+
{
|
|
26
|
+
"id": "adapter.provenance.attach_record_v0_1",
|
|
27
|
+
"namespace": "adapter",
|
|
28
|
+
"status": "stable",
|
|
29
|
+
"since": "0.1.0",
|
|
30
|
+
"summary": "Adapter attached a prov.record.v0.1 record to the envelope",
|
|
31
|
+
"when_to_emit": "Envelope contains a provenance record generated by adapter logic",
|
|
32
|
+
"requires": ["envelope.provenance.schema_version == 'prov.record.v0.1'"]
|
|
33
|
+
},
|
|
34
|
+
{
|
|
35
|
+
"id": "adapter.errors.capture",
|
|
36
|
+
"namespace": "adapter",
|
|
37
|
+
"status": "stable",
|
|
38
|
+
"since": "0.1.0",
|
|
39
|
+
"summary": "Adapter captured an execution failure and emitted errors[] in the envelope",
|
|
40
|
+
"when_to_emit": "Tool failed and adapter populated standardized envelope errors",
|
|
41
|
+
"requires": ["envelope.errors.length >= 1"]
|
|
42
|
+
},
|
|
43
|
+
{
|
|
44
|
+
"id": "adapter.warnings.capture",
|
|
45
|
+
"namespace": "adapter",
|
|
46
|
+
"status": "stable",
|
|
47
|
+
"since": "0.1.0",
|
|
48
|
+
"summary": "Adapter captured non-fatal warnings and emitted warnings[] in the envelope",
|
|
49
|
+
"when_to_emit": "Partial results, degraded mode, etc.",
|
|
50
|
+
"requires": ["envelope.warnings.length >= 1"]
|
|
51
|
+
},
|
|
52
|
+
{
|
|
53
|
+
"id": "engine.prov.record_v0_1.build",
|
|
54
|
+
"namespace": "engine",
|
|
55
|
+
"status": "stable",
|
|
56
|
+
"since": "0.1.0",
|
|
57
|
+
"summary": "Constructed a prov.record.v0.1 record",
|
|
58
|
+
"when_to_emit": "Provenance record created by engine/adapter",
|
|
59
|
+
"requires": ["provenance.schema_version == 'prov.record.v0.1'"]
|
|
60
|
+
},
|
|
61
|
+
{
|
|
62
|
+
"id": "engine.prov.artifact.register_input",
|
|
63
|
+
"namespace": "engine",
|
|
64
|
+
"status": "stable",
|
|
65
|
+
"since": "0.1.0",
|
|
66
|
+
"summary": "Registered one or more input artifacts in provenance",
|
|
67
|
+
"when_to_emit": "Inputs list populated (regardless of digest presence)",
|
|
68
|
+
"requires": ["provenance.inputs.length >= 1"]
|
|
69
|
+
},
|
|
70
|
+
{
|
|
71
|
+
"id": "engine.prov.artifact.register_output",
|
|
72
|
+
"namespace": "engine",
|
|
73
|
+
"status": "stable",
|
|
74
|
+
"since": "0.1.0",
|
|
75
|
+
"summary": "Registered one or more output artifacts in provenance",
|
|
76
|
+
"when_to_emit": "Outputs list populated",
|
|
77
|
+
"requires": ["provenance.outputs.length >= 1"]
|
|
78
|
+
},
|
|
79
|
+
{
|
|
80
|
+
"id": "engine.extract.evidence.json_pointer",
|
|
81
|
+
"namespace": "engine",
|
|
82
|
+
"status": "stable",
|
|
83
|
+
"since": "0.1.0",
|
|
84
|
+
"summary": "Evidence anchors were derived using JSON pointer-style fragments",
|
|
85
|
+
"when_to_emit": "Evidence anchors include #json:/...",
|
|
86
|
+
"requires": ["evidence[].source contains '#json:/'"]
|
|
87
|
+
},
|
|
88
|
+
{
|
|
89
|
+
"id": "engine.extract.evidence.text_lines",
|
|
90
|
+
"namespace": "engine",
|
|
91
|
+
"status": "stable",
|
|
92
|
+
"since": "0.1.0",
|
|
93
|
+
"summary": "Evidence anchors were derived using text line ranges",
|
|
94
|
+
"when_to_emit": "Evidence anchors include #text:line:...",
|
|
95
|
+
"requires": ["evidence[].source contains '#text:line:'"]
|
|
96
|
+
},
|
|
97
|
+
{
|
|
98
|
+
"id": "engine.coerce.evidence.v0_1",
|
|
99
|
+
"namespace": "engine",
|
|
100
|
+
"status": "stable",
|
|
101
|
+
"since": "0.1.0",
|
|
102
|
+
"summary": "Converted or normalized tool-provided evidence into evidence.v0.1",
|
|
103
|
+
"when_to_emit": "Tool evidence was adapted into the canonical evidence schema",
|
|
104
|
+
"requires": ["evidence[].schema_version == 'evidence.v0.1'"]
|
|
105
|
+
},
|
|
106
|
+
{
|
|
107
|
+
"id": "integrity.digest.sha256",
|
|
108
|
+
"namespace": "integrity",
|
|
109
|
+
"status": "stable",
|
|
110
|
+
"since": "0.1.0",
|
|
111
|
+
"summary": "Computed sha256 digest(s) for one or more artifacts",
|
|
112
|
+
"when_to_emit": "Any artifact digest uses sha256 and was computed during this run",
|
|
113
|
+
"requires": ["artifact.digest.alg == 'sha256'", "artifact.digest.value is 64 hex chars"]
|
|
114
|
+
},
|
|
115
|
+
{
|
|
116
|
+
"id": "integrity.digest.sha512",
|
|
117
|
+
"namespace": "integrity",
|
|
118
|
+
"status": "stable",
|
|
119
|
+
"since": "0.1.0",
|
|
120
|
+
"summary": "Computed sha512 digest(s) for one or more artifacts",
|
|
121
|
+
"when_to_emit": "Any artifact digest uses sha512 and was computed during this run",
|
|
122
|
+
"requires": ["artifact.digest.alg == 'sha512'", "artifact.digest.value is 128 hex chars"]
|
|
123
|
+
},
|
|
124
|
+
{
|
|
125
|
+
"id": "integrity.digest.blake3",
|
|
126
|
+
"namespace": "integrity",
|
|
127
|
+
"status": "stable",
|
|
128
|
+
"since": "0.1.0",
|
|
129
|
+
"summary": "Computed blake3 digest(s) for one or more artifacts",
|
|
130
|
+
"when_to_emit": "Any artifact digest uses blake3 and was computed during this run",
|
|
131
|
+
"requires": ["artifact.digest.alg == 'blake3'", "artifact.digest.value is 64 hex chars"]
|
|
132
|
+
},
|
|
133
|
+
{
|
|
134
|
+
"id": "integrity.record_digest.compute",
|
|
135
|
+
"namespace": "integrity",
|
|
136
|
+
"status": "stable",
|
|
137
|
+
"since": "0.1.0",
|
|
138
|
+
"summary": "Computed integrity.record_digest for the provenance record",
|
|
139
|
+
"when_to_emit": "prov.record.integrity.record_digest is populated",
|
|
140
|
+
"requires": ["provenance.integrity.record_digest is present"]
|
|
141
|
+
},
|
|
142
|
+
{
|
|
143
|
+
"id": "integrity.signature.create",
|
|
144
|
+
"namespace": "integrity",
|
|
145
|
+
"status": "stable",
|
|
146
|
+
"since": "0.1.0",
|
|
147
|
+
"summary": "Created a signature over the provenance record digest",
|
|
148
|
+
"when_to_emit": "prov.record.integrity.signature is populated (signing performed)",
|
|
149
|
+
"requires": ["provenance.integrity.signature is present"]
|
|
150
|
+
},
|
|
151
|
+
{
|
|
152
|
+
"id": "integrity.signature.verify",
|
|
153
|
+
"namespace": "integrity",
|
|
154
|
+
"status": "stable",
|
|
155
|
+
"since": "0.1.0",
|
|
156
|
+
"summary": "Verified a provenance record signature successfully",
|
|
157
|
+
"when_to_emit": "provenance.verify tool confirms signature validity",
|
|
158
|
+
"requires": ["signature verification succeeded"]
|
|
159
|
+
},
|
|
160
|
+
{
|
|
161
|
+
"id": "lineage.parent.link",
|
|
162
|
+
"namespace": "lineage",
|
|
163
|
+
"status": "stable",
|
|
164
|
+
"since": "0.1.0",
|
|
165
|
+
"summary": "Linked this provenance record to one or more parent runs via parents[]",
|
|
166
|
+
"when_to_emit": "parents[] populated to indicate dependency",
|
|
167
|
+
"requires": ["provenance.parents.length >= 1"]
|
|
168
|
+
},
|
|
169
|
+
{
|
|
170
|
+
"id": "lineage.graph.build",
|
|
171
|
+
"namespace": "lineage",
|
|
172
|
+
"status": "stable",
|
|
173
|
+
"since": "0.1.0",
|
|
174
|
+
"summary": "Built a lineage graph from one or more provenance records",
|
|
175
|
+
"when_to_emit": "A graph/DAG representation was constructed",
|
|
176
|
+
"requires": ["multiple records linked"]
|
|
177
|
+
}
|
|
178
|
+
],
|
|
179
|
+
"namespaces": {
|
|
180
|
+
"adapter": {
|
|
181
|
+
"description": "Envelope wrapping, transport, execution wrappers",
|
|
182
|
+
"status": "stable"
|
|
183
|
+
},
|
|
184
|
+
"engine": {
|
|
185
|
+
"description": "Evidence extraction, normalization, provenance construction",
|
|
186
|
+
"status": "stable"
|
|
187
|
+
},
|
|
188
|
+
"integrity": {
|
|
189
|
+
"description": "Hashing, signatures, verification",
|
|
190
|
+
"status": "stable"
|
|
191
|
+
},
|
|
192
|
+
"lineage": {
|
|
193
|
+
"description": "Parent linking and graph operations",
|
|
194
|
+
"status": "stable"
|
|
195
|
+
},
|
|
196
|
+
"policy": {
|
|
197
|
+
"description": "Access control, retention policies",
|
|
198
|
+
"status": "reserved"
|
|
199
|
+
},
|
|
200
|
+
"attestation": {
|
|
201
|
+
"description": "Third-party attestations, compliance claims",
|
|
202
|
+
"status": "reserved"
|
|
203
|
+
},
|
|
204
|
+
"execution": {
|
|
205
|
+
"description": "Runtime environment, resource usage",
|
|
206
|
+
"status": "reserved"
|
|
207
|
+
},
|
|
208
|
+
"audit": {
|
|
209
|
+
"description": "Audit trail operations",
|
|
210
|
+
"status": "reserved"
|
|
211
|
+
}
|
|
212
|
+
}
|
|
213
|
+
}
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
3
|
+
"$id": "artifact.ref.v0.1",
|
|
4
|
+
"title": "artifact.ref.v0.1",
|
|
5
|
+
"type": "object",
|
|
6
|
+
"additionalProperties": false,
|
|
7
|
+
"required": ["schema_version"],
|
|
8
|
+
"properties": {
|
|
9
|
+
"schema_version": {
|
|
10
|
+
"type": "string",
|
|
11
|
+
"const": "artifact.ref.v0.1"
|
|
12
|
+
},
|
|
13
|
+
"artifact_id": {
|
|
14
|
+
"type": "string",
|
|
15
|
+
"description": "Reference by artifact_id (UUID or content-addressed id).",
|
|
16
|
+
"minLength": 1
|
|
17
|
+
},
|
|
18
|
+
"locator": {
|
|
19
|
+
"type": "string",
|
|
20
|
+
"description": "Reference by location (file path, URL, MCP resource key).",
|
|
21
|
+
"minLength": 1
|
|
22
|
+
},
|
|
23
|
+
"media_type": {
|
|
24
|
+
"type": "string",
|
|
25
|
+
"description": "Optional media type hint.",
|
|
26
|
+
"minLength": 1
|
|
27
|
+
},
|
|
28
|
+
"digest": {
|
|
29
|
+
"type": "object",
|
|
30
|
+
"description": "Optional digest hint for verification.",
|
|
31
|
+
"additionalProperties": false,
|
|
32
|
+
"required": ["alg", "value"],
|
|
33
|
+
"properties": {
|
|
34
|
+
"alg": {
|
|
35
|
+
"type": "string",
|
|
36
|
+
"enum": ["sha256", "sha512", "blake3"]
|
|
37
|
+
},
|
|
38
|
+
"value": {
|
|
39
|
+
"type": "string",
|
|
40
|
+
"pattern": "^[0-9a-fA-F]+$",
|
|
41
|
+
"minLength": 16
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
},
|
|
45
|
+
"labels": {
|
|
46
|
+
"type": "object",
|
|
47
|
+
"description": "Optional small labels for routing or UI.",
|
|
48
|
+
"additionalProperties": {
|
|
49
|
+
"type": "string",
|
|
50
|
+
"maxLength": 200
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
},
|
|
54
|
+
"anyOf": [
|
|
55
|
+
{ "required": ["artifact_id"] },
|
|
56
|
+
{ "required": ["locator"] }
|
|
57
|
+
]
|
|
58
|
+
}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
3
|
+
"$id": "artifact.v0.1",
|
|
4
|
+
"title": "artifact.v0.1",
|
|
5
|
+
"type": "object",
|
|
6
|
+
"additionalProperties": false,
|
|
7
|
+
"required": ["schema_version", "artifact_id", "media_type"],
|
|
8
|
+
"properties": {
|
|
9
|
+
"schema_version": {
|
|
10
|
+
"type": "string",
|
|
11
|
+
"const": "artifact.v0.1"
|
|
12
|
+
},
|
|
13
|
+
"artifact_id": {
|
|
14
|
+
"type": "string",
|
|
15
|
+
"description": "Stable identifier for the artifact. May be a UUID or content-addressed digest (e.g., sha256:<hex>).",
|
|
16
|
+
"minLength": 1
|
|
17
|
+
},
|
|
18
|
+
"media_type": {
|
|
19
|
+
"type": "string",
|
|
20
|
+
"description": "IANA media type (MIME type), e.g., application/json, text/plain, application/pdf.",
|
|
21
|
+
"minLength": 1
|
|
22
|
+
},
|
|
23
|
+
"locator": {
|
|
24
|
+
"type": "string",
|
|
25
|
+
"description": "Optional location hint (file path, URL, MCP resource key). Not required for determinism.",
|
|
26
|
+
"minLength": 1
|
|
27
|
+
},
|
|
28
|
+
"size_bytes": {
|
|
29
|
+
"type": "integer",
|
|
30
|
+
"description": "Optional size in bytes.",
|
|
31
|
+
"minimum": 0
|
|
32
|
+
},
|
|
33
|
+
"digest": {
|
|
34
|
+
"type": "object",
|
|
35
|
+
"description": "Optional integrity digest(s).",
|
|
36
|
+
"additionalProperties": false,
|
|
37
|
+
"properties": {
|
|
38
|
+
"alg": {
|
|
39
|
+
"type": "string",
|
|
40
|
+
"description": "Digest algorithm. sha256 is recommended.",
|
|
41
|
+
"enum": ["sha256", "sha512", "blake3"]
|
|
42
|
+
},
|
|
43
|
+
"value": {
|
|
44
|
+
"type": "string",
|
|
45
|
+
"description": "Hex digest value (lowercase recommended).",
|
|
46
|
+
"pattern": "^[0-9a-fA-F]+$",
|
|
47
|
+
"minLength": 16
|
|
48
|
+
}
|
|
49
|
+
},
|
|
50
|
+
"required": ["alg", "value"]
|
|
51
|
+
},
|
|
52
|
+
"labels": {
|
|
53
|
+
"type": "object",
|
|
54
|
+
"description": "Optional small labels for consumers (e.g., role=cli_error_json).",
|
|
55
|
+
"additionalProperties": {
|
|
56
|
+
"type": "string",
|
|
57
|
+
"maxLength": 200
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
3
|
+
"$id": "https://a11y-assist.dev/schemas/assist.request.schema.v0.1.json",
|
|
4
|
+
"title": "assist.request.v0.1",
|
|
5
|
+
"description": "Request schema for a11y-assist",
|
|
6
|
+
"type": "object",
|
|
7
|
+
"required": ["profile", "input"],
|
|
8
|
+
"properties": {
|
|
9
|
+
"profile": {
|
|
10
|
+
"type": "string",
|
|
11
|
+
"enum": ["lowvision"],
|
|
12
|
+
"description": "Accessibility profile to use"
|
|
13
|
+
},
|
|
14
|
+
"input": {
|
|
15
|
+
"type": "object",
|
|
16
|
+
"required": ["kind"],
|
|
17
|
+
"properties": {
|
|
18
|
+
"kind": {
|
|
19
|
+
"type": "string",
|
|
20
|
+
"enum": ["cli_error_json", "raw_text", "last_log"],
|
|
21
|
+
"description": "Type of input"
|
|
22
|
+
},
|
|
23
|
+
"path": {
|
|
24
|
+
"type": "string",
|
|
25
|
+
"description": "Path to input file"
|
|
26
|
+
},
|
|
27
|
+
"text": {
|
|
28
|
+
"type": "string",
|
|
29
|
+
"description": "Raw text input"
|
|
30
|
+
}
|
|
31
|
+
},
|
|
32
|
+
"additionalProperties": false
|
|
33
|
+
},
|
|
34
|
+
"preferences": {
|
|
35
|
+
"type": "object",
|
|
36
|
+
"properties": {
|
|
37
|
+
"max_steps": {
|
|
38
|
+
"type": "integer",
|
|
39
|
+
"minimum": 1,
|
|
40
|
+
"maximum": 10,
|
|
41
|
+
"description": "Maximum number of plan steps to return"
|
|
42
|
+
},
|
|
43
|
+
"show_next_command": {
|
|
44
|
+
"type": "boolean",
|
|
45
|
+
"description": "Whether to show suggested safe commands"
|
|
46
|
+
}
|
|
47
|
+
},
|
|
48
|
+
"additionalProperties": false
|
|
49
|
+
}
|
|
50
|
+
},
|
|
51
|
+
"additionalProperties": false
|
|
52
|
+
}
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
3
|
+
"$id": "https://a11y-assist.dev/schemas/assist.response.schema.v0.1.json",
|
|
4
|
+
"title": "assist.response.v0.1",
|
|
5
|
+
"description": "Response schema for a11y-assist with optional audit metadata",
|
|
6
|
+
"type": "object",
|
|
7
|
+
"required": ["confidence", "safest_next_step", "plan"],
|
|
8
|
+
"properties": {
|
|
9
|
+
"anchored_id": {
|
|
10
|
+
"type": ["string", "null"],
|
|
11
|
+
"description": "Error ID this assist is anchored to, if found"
|
|
12
|
+
},
|
|
13
|
+
"confidence": {
|
|
14
|
+
"type": "string",
|
|
15
|
+
"enum": ["High", "Medium", "Low"],
|
|
16
|
+
"description": "Confidence level of the assist"
|
|
17
|
+
},
|
|
18
|
+
"safest_next_step": {
|
|
19
|
+
"type": "string",
|
|
20
|
+
"description": "Single safest next action to take"
|
|
21
|
+
},
|
|
22
|
+
"plan": {
|
|
23
|
+
"type": "array",
|
|
24
|
+
"items": { "type": "string" },
|
|
25
|
+
"minItems": 1,
|
|
26
|
+
"description": "Ordered list of steps to resolve the issue"
|
|
27
|
+
},
|
|
28
|
+
"next_safe_commands": {
|
|
29
|
+
"type": "array",
|
|
30
|
+
"items": { "type": "string" },
|
|
31
|
+
"description": "SAFE-only commands that can be run"
|
|
32
|
+
},
|
|
33
|
+
"notes": {
|
|
34
|
+
"type": "array",
|
|
35
|
+
"items": { "type": "string" },
|
|
36
|
+
"description": "Additional notes and context"
|
|
37
|
+
},
|
|
38
|
+
"methods_applied": {
|
|
39
|
+
"type": "array",
|
|
40
|
+
"items": { "type": "string" },
|
|
41
|
+
"minItems": 0,
|
|
42
|
+
"description": "Stable method identifiers applied to produce this assist output (audit-only)"
|
|
43
|
+
},
|
|
44
|
+
"evidence": {
|
|
45
|
+
"type": "array",
|
|
46
|
+
"items": {
|
|
47
|
+
"type": "object",
|
|
48
|
+
"required": ["field", "source"],
|
|
49
|
+
"properties": {
|
|
50
|
+
"field": {
|
|
51
|
+
"type": "string",
|
|
52
|
+
"description": "Which output field this evidence supports (e.g., safest_next_step, plan[0])"
|
|
53
|
+
},
|
|
54
|
+
"source": {
|
|
55
|
+
"type": "string",
|
|
56
|
+
"description": "Source anchor (e.g., cli.error.fix[1], cli.error.why[0], raw_text:Fix:2)"
|
|
57
|
+
},
|
|
58
|
+
"note": {
|
|
59
|
+
"type": "string",
|
|
60
|
+
"description": "Optional short note clarifying the mapping"
|
|
61
|
+
}
|
|
62
|
+
},
|
|
63
|
+
"additionalProperties": false
|
|
64
|
+
},
|
|
65
|
+
"minItems": 0,
|
|
66
|
+
"description": "Trace anchors mapping assist content back to input (audit-only)"
|
|
67
|
+
}
|
|
68
|
+
},
|
|
69
|
+
"additionalProperties": false
|
|
70
|
+
}
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
3
|
+
"$id": "https://a11y-lint.dev/schemas/cli.error.schema.v0.1.json",
|
|
4
|
+
"title": "CLI Ground Truth Message",
|
|
5
|
+
"description": "Schema for accessible CLI error messages with What/Why/Fix structure",
|
|
6
|
+
"type": "object",
|
|
7
|
+
"required": ["level", "code", "what"],
|
|
8
|
+
"properties": {
|
|
9
|
+
"level": {
|
|
10
|
+
"type": "string",
|
|
11
|
+
"enum": ["OK", "WARN", "ERROR"],
|
|
12
|
+
"description": "Severity level of the message"
|
|
13
|
+
},
|
|
14
|
+
"code": {
|
|
15
|
+
"type": "string",
|
|
16
|
+
"pattern": "^[A-Z][A-Z0-9]{1,3}[0-9]{3}$",
|
|
17
|
+
"description": "Unique error code (e.g., A11Y001, CLI002)",
|
|
18
|
+
"examples": ["A11Y001", "CLI002", "FMT003"]
|
|
19
|
+
},
|
|
20
|
+
"id": {
|
|
21
|
+
"type": "string",
|
|
22
|
+
"description": "Alternate ID field (NAMESPACE.CATEGORY.DETAIL format)"
|
|
23
|
+
},
|
|
24
|
+
"title": {
|
|
25
|
+
"type": "string",
|
|
26
|
+
"description": "Human-readable title"
|
|
27
|
+
},
|
|
28
|
+
"what": {
|
|
29
|
+
"oneOf": [
|
|
30
|
+
{ "type": "string", "minLength": 1, "maxLength": 200 },
|
|
31
|
+
{ "type": "array", "items": { "type": "string" }, "minItems": 1 }
|
|
32
|
+
],
|
|
33
|
+
"description": "Brief description of what happened or was checked"
|
|
34
|
+
},
|
|
35
|
+
"why": {
|
|
36
|
+
"oneOf": [
|
|
37
|
+
{ "type": "string", "minLength": 1, "maxLength": 500 },
|
|
38
|
+
{ "type": "array", "items": { "type": "string" }, "minItems": 1 }
|
|
39
|
+
],
|
|
40
|
+
"description": "Explanation of why this matters for accessibility"
|
|
41
|
+
},
|
|
42
|
+
"fix": {
|
|
43
|
+
"oneOf": [
|
|
44
|
+
{ "type": "string", "minLength": 1, "maxLength": 500 },
|
|
45
|
+
{ "type": "array", "items": { "type": "string" }, "minItems": 1 }
|
|
46
|
+
],
|
|
47
|
+
"description": "Actionable suggestion for how to fix the issue"
|
|
48
|
+
},
|
|
49
|
+
"location": {
|
|
50
|
+
"type": "object",
|
|
51
|
+
"description": "Location of the issue in the source",
|
|
52
|
+
"properties": {
|
|
53
|
+
"file": { "type": "string" },
|
|
54
|
+
"line": { "type": "integer", "minimum": 1 },
|
|
55
|
+
"column": { "type": "integer", "minimum": 1 },
|
|
56
|
+
"context": { "type": "string", "maxLength": 200 }
|
|
57
|
+
}
|
|
58
|
+
},
|
|
59
|
+
"rule": {
|
|
60
|
+
"type": "string",
|
|
61
|
+
"description": "Name of the accessibility rule that was checked"
|
|
62
|
+
},
|
|
63
|
+
"metadata": {
|
|
64
|
+
"type": "object",
|
|
65
|
+
"description": "Additional rule-specific metadata",
|
|
66
|
+
"additionalProperties": true
|
|
67
|
+
}
|
|
68
|
+
},
|
|
69
|
+
"if": {
|
|
70
|
+
"properties": {
|
|
71
|
+
"level": { "const": "ERROR" }
|
|
72
|
+
}
|
|
73
|
+
},
|
|
74
|
+
"then": {
|
|
75
|
+
"required": ["level", "code", "what", "why", "fix"]
|
|
76
|
+
},
|
|
77
|
+
"additionalProperties": true
|
|
78
|
+
}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
3
|
+
"$id": "evidence.v0.1",
|
|
4
|
+
"title": "evidence.v0.1",
|
|
5
|
+
"type": "object",
|
|
6
|
+
"additionalProperties": false,
|
|
7
|
+
"required": ["schema_version", "field", "source"],
|
|
8
|
+
"properties": {
|
|
9
|
+
"schema_version": {
|
|
10
|
+
"type": "string",
|
|
11
|
+
"const": "evidence.v0.1"
|
|
12
|
+
},
|
|
13
|
+
"field": {
|
|
14
|
+
"type": "string",
|
|
15
|
+
"description": "Which output field this evidence supports (e.g., safest_next_step, plan[0], summary).",
|
|
16
|
+
"minLength": 1,
|
|
17
|
+
"maxLength": 200
|
|
18
|
+
},
|
|
19
|
+
"source": {
|
|
20
|
+
"type": "string",
|
|
21
|
+
"description": "Source anchor referencing an artifact + optional fragment, e.g. artifact:<id>#json:/fix/1 or artifact:<id>#text:line:12-14.",
|
|
22
|
+
"minLength": 1,
|
|
23
|
+
"maxLength": 1000
|
|
24
|
+
},
|
|
25
|
+
"method": {
|
|
26
|
+
"type": "string",
|
|
27
|
+
"description": "Optional method ID describing how this evidence mapping was derived.",
|
|
28
|
+
"minLength": 1,
|
|
29
|
+
"maxLength": 200
|
|
30
|
+
},
|
|
31
|
+
"note": {
|
|
32
|
+
"type": "string",
|
|
33
|
+
"description": "Optional short note clarifying the mapping.",
|
|
34
|
+
"maxLength": 400
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
}
|