graphcheck 0.2.0__tar.gz → 0.4.0__tar.gz

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 (243) hide show
  1. {graphcheck-0.2.0 → graphcheck-0.4.0}/.gitignore +2 -1
  2. {graphcheck-0.2.0 → graphcheck-0.4.0}/CHANGELOG.md +219 -4
  3. {graphcheck-0.2.0 → graphcheck-0.4.0}/PKG-INFO +40 -12
  4. {graphcheck-0.2.0 → graphcheck-0.4.0}/README.md +38 -11
  5. graphcheck-0.4.0/docs/schemas/results-1.0.schema.json +715 -0
  6. graphcheck-0.4.0/docs/schemas/results-1.1.schema.json +742 -0
  7. {graphcheck-0.2.0 → graphcheck-0.4.0}/pyproject.toml +21 -1
  8. {graphcheck-0.2.0 → graphcheck-0.4.0}/src/graphcheck/__init__.py +1 -1
  9. graphcheck-0.4.0/src/graphcheck/application/artifacts.py +218 -0
  10. {graphcheck-0.2.0 → graphcheck-0.4.0}/src/graphcheck/application/run.py +63 -28
  11. graphcheck-0.4.0/src/graphcheck/application/suites.py +86 -0
  12. {graphcheck-0.2.0 → graphcheck-0.4.0}/src/graphcheck/baselines.py +27 -12
  13. {graphcheck-0.2.0 → graphcheck-0.4.0}/src/graphcheck/cli.py +149 -95
  14. {graphcheck-0.2.0 → graphcheck-0.4.0}/src/graphcheck/connection_profiles.py +13 -21
  15. {graphcheck-0.2.0 → graphcheck-0.4.0}/src/graphcheck/contracts/check.py +24 -3
  16. graphcheck-0.4.0/src/graphcheck/contracts/historical_results.py +34 -0
  17. {graphcheck-0.2.0 → graphcheck-0.4.0}/src/graphcheck/contracts/profile.py +31 -3
  18. {graphcheck-0.2.0 → graphcheck-0.4.0}/src/graphcheck/contracts/results.py +27 -9
  19. {graphcheck-0.2.0 → graphcheck-0.4.0}/src/graphcheck/contracts/schemas.py +0 -35
  20. {graphcheck-0.2.0 → graphcheck-0.4.0}/src/graphcheck/diff.py +83 -4
  21. {graphcheck-0.2.0 → graphcheck-0.4.0}/src/graphcheck/engine/baseline.py +95 -23
  22. {graphcheck-0.2.0 → graphcheck-0.4.0}/src/graphcheck/engine/compiler.py +191 -3
  23. {graphcheck-0.2.0 → graphcheck-0.4.0}/src/graphcheck/engine/core_pack.py +29 -10
  24. {graphcheck-0.2.0 → graphcheck-0.4.0}/src/graphcheck/engine/evaluator.py +313 -44
  25. {graphcheck-0.2.0 → graphcheck-0.4.0}/src/graphcheck/engine/executor.py +0 -4
  26. graphcheck-0.4.0/src/graphcheck/engine/graphrag_pack.py +449 -0
  27. {graphcheck-0.2.0 → graphcheck-0.4.0}/src/graphcheck/engine/identifiers.py +2 -1
  28. graphcheck-0.4.0/src/graphcheck/engine/limits.py +18 -0
  29. {graphcheck-0.2.0 → graphcheck-0.4.0}/src/graphcheck/engine/parameters.py +2 -32
  30. {graphcheck-0.2.0 → graphcheck-0.4.0}/src/graphcheck/engine/pii_pack.py +13 -15
  31. {graphcheck-0.2.0 → graphcheck-0.4.0}/src/graphcheck/engine/runner.py +305 -69
  32. {graphcheck-0.2.0 → graphcheck-0.4.0}/src/graphcheck/mcp/adapter.py +9 -2
  33. {graphcheck-0.2.0 → graphcheck-0.4.0}/src/graphcheck/neo4j_adapter.py +67 -22
  34. {graphcheck-0.2.0 → graphcheck-0.4.0}/src/graphcheck/packs/__init__.py +12 -1
  35. {graphcheck-0.2.0 → graphcheck-0.4.0}/src/graphcheck/packs/catalog.py +3 -0
  36. graphcheck-0.4.0/src/graphcheck/packs/graphrag.py +97 -0
  37. graphcheck-0.4.0/src/graphcheck/packs/graphrag.yml +68 -0
  38. {graphcheck-0.2.0 → graphcheck-0.4.0}/src/graphcheck/packs/metadata.py +68 -2
  39. {graphcheck-0.2.0 → graphcheck-0.4.0}/src/graphcheck/profiler.py +311 -11
  40. {graphcheck-0.2.0 → graphcheck-0.4.0}/src/graphcheck/project.py +67 -12
  41. graphcheck-0.4.0/src/graphcheck/provenance.py +9 -0
  42. graphcheck-0.4.0/src/graphcheck/reporting/changes.py +236 -0
  43. graphcheck-0.4.0/src/graphcheck/reporting/coverage.py +18 -0
  44. {graphcheck-0.2.0 → graphcheck-0.4.0}/src/graphcheck/reporting/explorer.py +34 -14
  45. {graphcheck-0.2.0 → graphcheck-0.4.0}/src/graphcheck/reporting/history.py +280 -93
  46. {graphcheck-0.2.0 → graphcheck-0.4.0}/src/graphcheck/reporting/html.py +24 -15
  47. {graphcheck-0.2.0 → graphcheck-0.4.0}/src/graphcheck/reporting/presentation.py +10 -7
  48. {graphcheck-0.2.0 → graphcheck-0.4.0}/src/graphcheck/reporting/redaction.py +21 -11
  49. {graphcheck-0.2.0 → graphcheck-0.4.0}/src/graphcheck/reporting/writer.py +50 -13
  50. {graphcheck-0.2.0 → graphcheck-0.4.0}/src/graphcheck/telemetry/policy.py +1 -16
  51. {graphcheck-0.2.0 → graphcheck-0.4.0}/src/graphcheck/telemetry/posthog.py +9 -2
  52. {graphcheck-0.2.0 → graphcheck-0.4.0}/src/graphcheck/yaml_loader.py +2 -2
  53. graphcheck-0.2.0/.gitattributes +0 -2
  54. graphcheck-0.2.0/.github/CODEOWNERS +0 -5
  55. graphcheck-0.2.0/.github/ISSUE_TEMPLATE/bug_report.md +0 -30
  56. graphcheck-0.2.0/.github/ISSUE_TEMPLATE/deliverable.md +0 -15
  57. graphcheck-0.2.0/.github/ISSUE_TEMPLATE/docs.md +0 -19
  58. graphcheck-0.2.0/.github/ISSUE_TEMPLATE/feature_request.md +0 -18
  59. graphcheck-0.2.0/.github/actions/graphcheck-action/README.md +0 -94
  60. graphcheck-0.2.0/.github/actions/graphcheck-action/action.yml +0 -127
  61. graphcheck-0.2.0/.github/actions/graphcheck-action/generate_profile.py +0 -53
  62. graphcheck-0.2.0/.github/actions/graphcheck-action/write_summary.py +0 -102
  63. graphcheck-0.2.0/.github/pull_request_template.md +0 -16
  64. graphcheck-0.2.0/.github/scripts/first-run.sh +0 -43
  65. graphcheck-0.2.0/.github/workflows/ci.yml +0 -269
  66. graphcheck-0.2.0/.github/workflows/graphcheck.yml +0 -33
  67. graphcheck-0.2.0/.github/workflows/release.yml +0 -73
  68. graphcheck-0.2.0/.gitmodules +0 -3
  69. graphcheck-0.2.0/.pre-commit-config.yaml +0 -7
  70. graphcheck-0.2.0/.python-version +0 -1
  71. graphcheck-0.2.0/CONTRIBUTING.md +0 -95
  72. graphcheck-0.2.0/docker-compose.yml +0 -57
  73. graphcheck-0.2.0/docs/agents.md +0 -269
  74. graphcheck-0.2.0/docs/check-reference.md +0 -161
  75. graphcheck-0.2.0/docs/ci-setup.md +0 -89
  76. graphcheck-0.2.0/docs/clean-machine-test-protocol.md +0 -105
  77. graphcheck-0.2.0/docs/compatibility.md +0 -61
  78. graphcheck-0.2.0/docs/docker-quickstart.md +0 -79
  79. graphcheck-0.2.0/docs/graphcheck-demo.gif +0 -0
  80. graphcheck-0.2.0/docs/llms.txt +0 -93
  81. graphcheck-0.2.0/docs/quickstart.md +0 -27
  82. graphcheck-0.2.0/docs/releasing.md +0 -53
  83. graphcheck-0.2.0/docs/samples/report-clean.html +0 -1528
  84. graphcheck-0.2.0/docs/samples/report-findings.html +0 -1528
  85. graphcheck-0.2.0/docs/specs/SPEC-01-results-json.md +0 -166
  86. graphcheck-0.2.0/docs/specs/SPEC-02-check-yaml.md +0 -102
  87. graphcheck-0.2.0/docs/specs/SPEC-03-connector.md +0 -330
  88. graphcheck-0.2.0/docs/specs/SPEC-04 Engine.md +0 -687
  89. graphcheck-0.2.0/docs/specs/SPEC-05-profiler-baseline.md +0 -397
  90. graphcheck-0.2.0/docs/specs/SPEC-06-scorer-html-report.md +0 -445
  91. graphcheck-0.2.0/docs/specs/SPEC-09-packs.md +0 -393
  92. graphcheck-0.2.0/docs/specs/SPEC-10-telemetry-events.md +0 -790
  93. graphcheck-0.2.0/docs/specs/SPEC-11-generate.md +0 -1286
  94. graphcheck-0.2.0/docs/specs/SPEC-12-observability-support +0 -417
  95. graphcheck-0.2.0/docs/specs/check.envelope.schema.json +0 -404
  96. graphcheck-0.2.0/docs/specs/check.schema.json +0 -1130
  97. graphcheck-0.2.0/docs/specs/pack.schema.json +0 -604
  98. graphcheck-0.2.0/docs/specs/profile.schema.json +0 -419
  99. graphcheck-0.2.0/docs/telemetry.md +0 -259
  100. graphcheck-0.2.0/docs/troubleshooting.md +0 -71
  101. graphcheck-0.2.0/docs/user-guide.md +0 -481
  102. graphcheck-0.2.0/examples/checks/example.yml +0 -20
  103. graphcheck-0.2.0/graphcheck.yml +0 -4
  104. graphcheck-0.2.0/monitoring/README.md +0 -71
  105. graphcheck-0.2.0/monitoring/docker-compose.yml +0 -35
  106. graphcheck-0.2.0/monitoring/grafana/dashboards/graphcheck-database-health.json +0 -229
  107. graphcheck-0.2.0/monitoring/grafana/provisioning/dashboards/dashboards.yml +0 -11
  108. graphcheck-0.2.0/monitoring/grafana/provisioning/datasources/prometheus-datasource.yml +0 -9
  109. graphcheck-0.2.0/monitoring/prometheus/README.md +0 -21
  110. graphcheck-0.2.0/monitoring/prometheus/prometheus.yml +0 -13
  111. graphcheck-0.2.0/profiles.yml +0 -15
  112. graphcheck-0.2.0/scripts/generate_sample_reports.py +0 -375
  113. graphcheck-0.2.0/src/graphcheck/application/artifacts.py +0 -145
  114. graphcheck-0.2.0/src/graphcheck/application/suites.py +0 -44
  115. graphcheck-0.2.0/tests/__init__.py +0 -1
  116. graphcheck-0.2.0/tests/conftest.py +0 -196
  117. graphcheck-0.2.0/tests/contracts/fixtures/agent-suite.yml +0 -20
  118. graphcheck-0.2.0/tests/contracts/fixtures/baseline.json +0 -114
  119. graphcheck-0.2.0/tests/contracts/fixtures/results.clean.json +0 -124
  120. graphcheck-0.2.0/tests/contracts/fixtures/results.complete.json +0 -191
  121. graphcheck-0.2.0/tests/contracts/fixtures/results.complete.rendered.json +0 -191
  122. graphcheck-0.2.0/tests/contracts/fixtures/results.failed.json +0 -39
  123. graphcheck-0.2.0/tests/contracts/fixtures/results.generated-only.json +0 -94
  124. graphcheck-0.2.0/tests/contracts/fixtures/results.partial.json +0 -122
  125. graphcheck-0.2.0/tests/contracts/fixtures/suite.invalid-bad-expect.yml +0 -6
  126. graphcheck-0.2.0/tests/contracts/fixtures/suite.invalid-duplicate-key.yml +0 -2
  127. graphcheck-0.2.0/tests/contracts/fixtures/suite.invalid-unknown-check.yml +0 -5
  128. graphcheck-0.2.0/tests/contracts/fixtures/suite.invalid-unknown-key.yml +0 -6
  129. graphcheck-0.2.0/tests/contracts/fixtures/suite.valid.yml +0 -21
  130. graphcheck-0.2.0/tests/contracts/test_agents_example.py +0 -13
  131. graphcheck-0.2.0/tests/contracts/test_check_validation.py +0 -646
  132. graphcheck-0.2.0/tests/contracts/test_profile.py +0 -305
  133. graphcheck-0.2.0/tests/contracts/test_results.py +0 -486
  134. graphcheck-0.2.0/tests/engine/test_baseline.py +0 -362
  135. graphcheck-0.2.0/tests/engine/test_compiler.py +0 -240
  136. graphcheck-0.2.0/tests/engine/test_core_pack_compiler.py +0 -363
  137. graphcheck-0.2.0/tests/engine/test_evaluator.py +0 -867
  138. graphcheck-0.2.0/tests/engine/test_executor.py +0 -153
  139. graphcheck-0.2.0/tests/engine/test_identifiers.py +0 -37
  140. graphcheck-0.2.0/tests/engine/test_parameters.py +0 -176
  141. graphcheck-0.2.0/tests/engine/test_pii_pack_runtime.py +0 -555
  142. graphcheck-0.2.0/tests/engine/test_runner.py +0 -1156
  143. graphcheck-0.2.0/tests/engine/test_sampling.py +0 -276
  144. graphcheck-0.2.0/tests/engine/test_sampling_runner.py +0 -177
  145. graphcheck-0.2.0/tests/generation/test_client.py +0 -548
  146. graphcheck-0.2.0/tests/generation/test_generation.py +0 -361
  147. graphcheck-0.2.0/tests/generation/test_service.py +0 -372
  148. graphcheck-0.2.0/tests/integration/conftest.py +0 -62
  149. graphcheck-0.2.0/tests/integration/test_generate_integration.py +0 -211
  150. graphcheck-0.2.0/tests/integration/test_generate_live.py +0 -56
  151. graphcheck-0.2.0/tests/integration/test_integration_engine.py +0 -279
  152. graphcheck-0.2.0/tests/integration/test_integration_neo4j_adapter.py +0 -280
  153. graphcheck-0.2.0/tests/integration/test_mcp_agent_surface.py +0 -57
  154. graphcheck-0.2.0/tests/integration/test_mcp_failure_isolation.py +0 -189
  155. graphcheck-0.2.0/tests/integration/test_mcp_neo4j_workflow.py +0 -78
  156. graphcheck-0.2.0/tests/integration/test_performance_plans.py +0 -235
  157. graphcheck-0.2.0/tests/observability/__init__.py +0 -1
  158. graphcheck-0.2.0/tests/observability/test_collector.py +0 -253
  159. graphcheck-0.2.0/tests/observability/test_health.py +0 -104
  160. graphcheck-0.2.0/tests/observability/test_monitoring_config.py +0 -89
  161. graphcheck-0.2.0/tests/observability/test_runner.py +0 -109
  162. graphcheck-0.2.0/tests/observability/test_server.py +0 -63
  163. graphcheck-0.2.0/tests/performance/__init__.py +0 -1
  164. graphcheck-0.2.0/tests/performance/budgets.json +0 -50
  165. graphcheck-0.2.0/tests/performance/gates.py +0 -118
  166. graphcheck-0.2.0/tests/performance/helpers.py +0 -322
  167. graphcheck-0.2.0/tests/performance/test_cli_startup.py +0 -138
  168. graphcheck-0.2.0/tests/performance/test_engine_budget.py +0 -335
  169. graphcheck-0.2.0/tests/performance/test_measurement_helpers.py +0 -126
  170. graphcheck-0.2.0/tests/performance/test_memory_gates.py +0 -119
  171. graphcheck-0.2.0/tests/performance/test_regression_gates.py +0 -76
  172. graphcheck-0.2.0/tests/property/test_evaluator_properties.py +0 -320
  173. graphcheck-0.2.0/tests/telemetry/test_boundary_payloads.py +0 -190
  174. graphcheck-0.2.0/tests/telemetry/test_cli_boundary_integration.py +0 -800
  175. graphcheck-0.2.0/tests/telemetry/test_cli_controls.py +0 -146
  176. graphcheck-0.2.0/tests/telemetry/test_engine_events.py +0 -302
  177. graphcheck-0.2.0/tests/telemetry/test_events.py +0 -171
  178. graphcheck-0.2.0/tests/telemetry/test_policy.py +0 -165
  179. graphcheck-0.2.0/tests/telemetry/test_posthog.py +0 -171
  180. graphcheck-0.2.0/tests/telemetry/test_privacy_properties.py +0 -54
  181. graphcheck-0.2.0/tests/telemetry/test_transparency_doc.py +0 -38
  182. graphcheck-0.2.0/tests/test_baselines.py +0 -215
  183. graphcheck-0.2.0/tests/test_cli.py +0 -1086
  184. graphcheck-0.2.0/tests/test_cli_lazy_imports.py +0 -198
  185. graphcheck-0.2.0/tests/test_debug_diagnostics.py +0 -223
  186. graphcheck-0.2.0/tests/test_diff.py +0 -303
  187. graphcheck-0.2.0/tests/test_docker_quickstart.py +0 -99
  188. graphcheck-0.2.0/tests/test_generate_cli.py +0 -104
  189. graphcheck-0.2.0/tests/test_mcp_adapter.py +0 -37
  190. graphcheck-0.2.0/tests/test_monitor_cli.py +0 -124
  191. graphcheck-0.2.0/tests/test_neo4j_adapter.py +0 -2174
  192. graphcheck-0.2.0/tests/test_packaging.py +0 -16
  193. graphcheck-0.2.0/tests/test_packs.py +0 -607
  194. graphcheck-0.2.0/tests/test_profiler.py +0 -889
  195. graphcheck-0.2.0/tests/test_project_profiles.py +0 -255
  196. graphcheck-0.2.0/tests/test_redaction.py +0 -251
  197. graphcheck-0.2.0/tests/test_report_explorer.py +0 -255
  198. graphcheck-0.2.0/tests/test_report_history.py +0 -393
  199. graphcheck-0.2.0/tests/test_reporting.py +0 -1131
  200. graphcheck-0.2.0/tests/test_result_presentation.py +0 -187
  201. graphcheck-0.2.0/tests/test_run_cli.py +0 -1696
  202. graphcheck-0.2.0/tests/test_sample_reports.py +0 -293
  203. graphcheck-0.2.0/tests/test_scoring.py +0 -144
  204. graphcheck-0.2.0/uv.lock +0 -2294
  205. {graphcheck-0.2.0 → graphcheck-0.4.0}/LICENSE +0 -0
  206. /graphcheck-0.2.0/docs/specs/results.schema.json → /graphcheck-0.4.0/docs/schemas/results-1.2.schema.json +0 -0
  207. {graphcheck-0.2.0 → graphcheck-0.4.0}/src/graphcheck/application/__init__.py +0 -0
  208. {graphcheck-0.2.0 → graphcheck-0.4.0}/src/graphcheck/application/paths.py +0 -0
  209. {graphcheck-0.2.0 → graphcheck-0.4.0}/src/graphcheck/bootstrap.py +0 -0
  210. {graphcheck-0.2.0 → graphcheck-0.4.0}/src/graphcheck/contracts/__init__.py +0 -0
  211. {graphcheck-0.2.0 → graphcheck-0.4.0}/src/graphcheck/contracts/scalars.py +0 -0
  212. {graphcheck-0.2.0 → graphcheck-0.4.0}/src/graphcheck/debug_diagnostics.py +0 -0
  213. {graphcheck-0.2.0 → graphcheck-0.4.0}/src/graphcheck/engine/__init__.py +0 -0
  214. {graphcheck-0.2.0 → graphcheck-0.4.0}/src/graphcheck/engine/sampling.py +0 -0
  215. {graphcheck-0.2.0 → graphcheck-0.4.0}/src/graphcheck/errors.py +0 -0
  216. {graphcheck-0.2.0 → graphcheck-0.4.0}/src/graphcheck/generation/__init__.py +0 -0
  217. {graphcheck-0.2.0 → graphcheck-0.4.0}/src/graphcheck/generation/client.py +0 -0
  218. {graphcheck-0.2.0 → graphcheck-0.4.0}/src/graphcheck/generation/config.py +0 -0
  219. {graphcheck-0.2.0 → graphcheck-0.4.0}/src/graphcheck/generation/disclosure.py +0 -0
  220. {graphcheck-0.2.0 → graphcheck-0.4.0}/src/graphcheck/generation/prompts.py +0 -0
  221. {graphcheck-0.2.0 → graphcheck-0.4.0}/src/graphcheck/generation/proposals.py +0 -0
  222. {graphcheck-0.2.0 → graphcheck-0.4.0}/src/graphcheck/generation/service.py +0 -0
  223. {graphcheck-0.2.0 → graphcheck-0.4.0}/src/graphcheck/generation/transmission.py +0 -0
  224. {graphcheck-0.2.0 → graphcheck-0.4.0}/src/graphcheck/generation/writer.py +0 -0
  225. {graphcheck-0.2.0 → graphcheck-0.4.0}/src/graphcheck/mcp/server.py +0 -0
  226. {graphcheck-0.2.0 → graphcheck-0.4.0}/src/graphcheck/observability/__init__.py +0 -0
  227. {graphcheck-0.2.0 → graphcheck-0.4.0}/src/graphcheck/observability/collector.py +0 -0
  228. {graphcheck-0.2.0 → graphcheck-0.4.0}/src/graphcheck/observability/health.py +0 -0
  229. {graphcheck-0.2.0 → graphcheck-0.4.0}/src/graphcheck/observability/metrics.py +0 -0
  230. {graphcheck-0.2.0 → graphcheck-0.4.0}/src/graphcheck/observability/runner.py +0 -0
  231. {graphcheck-0.2.0 → graphcheck-0.4.0}/src/graphcheck/observability/server.py +0 -0
  232. {graphcheck-0.2.0 → graphcheck-0.4.0}/src/graphcheck/packs/core.yml +0 -0
  233. {graphcheck-0.2.0 → graphcheck-0.4.0}/src/graphcheck/packs/pii.yml +0 -0
  234. {graphcheck-0.2.0 → graphcheck-0.4.0}/src/graphcheck/reporting/__init__.py +0 -0
  235. {graphcheck-0.2.0 → graphcheck-0.4.0}/src/graphcheck/scoring.py +0 -0
  236. {graphcheck-0.2.0 → graphcheck-0.4.0}/src/graphcheck/telemetry/__init__.py +0 -0
  237. {graphcheck-0.2.0 → graphcheck-0.4.0}/src/graphcheck/telemetry/collector.py +0 -0
  238. {graphcheck-0.2.0 → graphcheck-0.4.0}/src/graphcheck/telemetry/consent.py +0 -0
  239. {graphcheck-0.2.0 → graphcheck-0.4.0}/src/graphcheck/telemetry/events.py +0 -0
  240. {graphcheck-0.2.0 → graphcheck-0.4.0}/src/graphcheck/telemetry/inactive.py +0 -0
  241. {graphcheck-0.2.0 → graphcheck-0.4.0}/src/graphcheck/telemetry/release.py +0 -0
  242. {graphcheck-0.2.0 → graphcheck-0.4.0}/src/graphcheck/telemetry/runtime.py +0 -0
  243. {graphcheck-0.2.0 → graphcheck-0.4.0}/src/graphcheck/telemetry/types.py +0 -0
@@ -97,6 +97,7 @@ ipython_config.py
97
97
  # Pipfile.lock
98
98
 
99
99
  # UV
100
+ .uv-cache*/
100
101
  # Similar to Pipfile.lock, it is generally recommended to include uv.lock in version control.
101
102
  # This is especially recommended for binary packages to ensure reproducibility, and is more
102
103
  # commonly ignored for libraries.
@@ -222,8 +223,8 @@ __marimo__/
222
223
  # GraphCheck
223
224
  /checks/
224
225
  profiles.yml
225
- !/profiles.yml
226
226
  .graphcheck/
227
+ .hostile-artifacts/
227
228
  .superpowers/
228
229
 
229
230
 
@@ -2,7 +2,221 @@
2
2
 
3
3
  All notable changes to this project are documented here. Format follows [Keep a Changelog](https://keepachangelog.com/en/1.1.0/); this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
4
4
 
5
- ## [Unreleased]
5
+ ## [0.4.0] - 2026-09-18
6
+
7
+ ### Added
8
+
9
+ - The agent guide and schema descriptions now explain regression value shapes, evidence identities,
10
+ and count scope, with a complete aggregate-witness example in the guide. Missing-evidence
11
+ diagnostics identify accepted element aliases and retain the failed assertion.
12
+
13
+ - Published a 10-million-node audit ceiling and sampling thresholds.
14
+ Larger graphs fail before check dispatch with `engine.graph_size_exceeded` and a
15
+ `Fix:` diagnostic; the reference 2 GiB transaction-memory limit cannot complete PII at 10M.
16
+
17
+ - Published the [artifact compatibility policy](docs/reference/artifact-compatibility.md), with
18
+ committed results fixtures for schemas 1.0, 1.1, 1.2, and 2.0 and archived 1.x JSON Schemas.
19
+ The policy includes a tested transformer that writes a validated 2.0 copy. Migration of 1.0/1.1
20
+ requires trusted historical inventory because those schemas did not record it.
21
+ - GraphRAG `chunk_coverage` reports the share of Chunks linked to at least one Entity against
22
+ a configurable threshold (default 0.95), naming entity-less Chunks in evidence.
23
+ `label_explosion` flags labels and relationship types across the whole schema at or below
24
+ a configurable threshold (default 1), reporting findings and node evidence; graphs under a
25
+ configurable minimum node count (default 50) are not evaluated rather than flagged, since a
26
+ small graph makes almost every label look like a singleton.
27
+ - After a comparable previous run, `summary.json` includes a compact `changes` block with new
28
+ failures, fixed checks, and node/relationship count deltas from the runs. Check lists retain
29
+ at most 20 entries each and report omitted counts; first runs and unavailable comparisons
30
+ omit the block. Artifact retries preserve the original block after history is pruned.
31
+ - Runs now include `previous_run_id`, `baseline_ref`, and `config_hash` in results schema 2.0,
32
+ with compatibility for older artifacts and a new lineage fixture. Profile references identify
33
+ the latest existing timestamped snapshot; running checks does not trigger profiling. History
34
+ summaries and `graphcheck report --history` show the previous-run links, assigned under the
35
+ publication lock for concurrent CLI and MCP runs. Redacted exports clear lineage metadata.
36
+ - Added `graphcheck changes [--since <run-id|previous>] [--json]` to combine check outcome,
37
+ coverage, suite-score, and profile deltas through the existing report comparison and profile
38
+ diff implementations. JSON is deterministic; exit codes distinguish no regressions (`0`),
39
+ regressions or new failures (`1`), and invalid or unavailable comparison inputs (`2`).
40
+ - Changes output includes appeared and disappeared evidence element IDs per check, sharing the
41
+ smaller input evidence cap across both directions, counting dropped deltas, and identifying
42
+ truncated input evidence. Added fraud-ring and public-scale hostile acceptance coverage.
43
+ - GraphRAG `embedding_consistency` checks every chunk for missing, invalid, empty, zero,
44
+ NaN-containing, and inconsistent-dimension embeddings. It uses the most frequent valid
45
+ dimension (smallest on ties) and returns exact counts plus capped element-ID, dimension,
46
+ and defect evidence without transferring vectors to Python.
47
+ - Hostile GraphRAG planted/clean cases with expected CLI exit codes, assertions identifying every
48
+ planted defect, and a copyable suite under `examples/graphrag/`. Singleton labels and uncovered
49
+ chunks remain fixture-only assertions. The public-scale hostile lane exercises all five checks
50
+ with a 60-second pack-run budget and verifies planted embedding defects over 265,214 nodes.
51
+ - Drift metrics `degree_distribution` (degree quantiles `p50`/`p95`/`max` per label, relationship
52
+ type, and direction, using `percentileDisc` and `COUNT { }` for Cypher 5/25 compatibility) and
53
+ `schema_inventory` (labels, relationship types, and label-scoped property names added or
54
+ removed since baseline, evaluated as the count of differences rather than net inventory size
55
+ so a simultaneous addition and removal cannot cancel out to zero). See
56
+ [SPEC-04](docs/specifications/spec-04-engine.md) and
57
+ [SPEC-05](docs/specifications/spec-05-profiler-baseline.md) for details.
58
+ - Optional GraphRAG pack enabled by `graphcheck init --pack graphrag`, with configurable
59
+ Document, Chunk, and Entity labels, relationship types/directions, extraction relationship
60
+ selection, and name/embedding properties in `graphcheck.yml`.
61
+ - GraphRAG provenance checks `orphan_chunks`, `entity_without_provenance`, and
62
+ `dangling_extraction_relationships`, with exhaustive counts, capped element-ID evidence,
63
+ and missing configured paths. Chunks may have multiple documents; entity provenance requires
64
+ a direct chunk link, and extraction relationships are flagged when either endpoint lacks one.
65
+ - Seeded `near_duplicate_entities` sampling with normalized-name equality or character-bigram
66
+ Dice similarity strictly above a configurable threshold (default 0.9). Connected duplicate
67
+ groups include normalized keys and element IDs. Samples default to 1,000 names, allow up to
68
+ 2,000 subject to engine limits, and exclude non-string names and names over 256 characters.
69
+ Sampled results state sample size/population without inferring a population confidence interval.
70
+ - GraphRAG metadata/schema validation, planted and clean builder fixtures, and opt-in fraud-ring
71
+ and public-scale acceptance coverage. [GraphRAG documentation](docs/graphrag.md) details the new
72
+ check semantics requiring separate approval.
73
+ - Added `engine.result_row_limit` project configuration, shared by CLI and MCP, with a default
74
+ ceiling of 100,000 competency rows and strict positive-integer validation.
75
+ - Baseline schema 1.1 preserves declared RANGE index property order while reading legacy 1.0
76
+ profiles with unknown order. Diff format 1.1 explains property inventory/type changes and
77
+ distinguishes newly available index-order metadata from known definition changes.
78
+
79
+ ### Changed
80
+
81
+ - Source distributions now contain only application sources, runtime compatibility schemas, and
82
+ release metadata/documentation. Repository tooling, tests, examples, and local caches are excluded.
83
+ - Schema file generation moves to `tools/generate_schemas.py`; runtime schema generation and
84
+ validation remain available. Removed unused Python helpers `default_profiles`, `print_profile`,
85
+ and `count_band`, plus the repository-only `SCHEMAS_DIR` constant and `write_*schema*` helpers
86
+ from `graphcheck.contracts.schemas`.
87
+
88
+ - Reading pre-2.0 results emits one `results.schema_deprecated` warning on stderr per artifact
89
+ read. Removal is planned for CLI 0.5.0, postponed while the current/previous-schema guarantee
90
+ requires support. The warning must ship at least one release before removal. Migrate saved
91
+ artifacts with the transformer above; current 2.0 reads and model revalidation stay quiet.
92
+ - GraphRAG checks report `skipped:model_absent` with an explicit reason when the model is
93
+ unconfigured or any configured role label has no nodes. Completed runs containing only these
94
+ skips exit 0 with a null score and incomplete report coverage. Missing relationship types remain
95
+ defects when role populations exist; actual execution errors remain errors. This new skip/exit
96
+ policy requires separate approval.
97
+ - `no_orphans` accepts optional `to_label` filtering for the opposite endpoint; omitting it
98
+ preserves existing behavior. This additional check semantic requires separate approval.
99
+ - Runs prepare suites once, prefer the C-backed safe YAML parser, and show loading, connecting,
100
+ running, and report-writing stages in interactive terminals.
101
+ - Graph inventory uses one combined request, and built-in same-label completeness checks share
102
+ bounded scans while retaining individual verdicts, evidence, and executed-query provenance.
103
+ - PII candidate selection orders eligible properties within each node while preserving its
104
+ deterministic sampling inputs and final sample ordering.
105
+ - Optional telemetry delivery gets a 50 ms command-exit allowance and pending events may be dropped.
106
+ - Report IDs include a unique component; redacted exports use independent random identifiers.
107
+ Existing history names remain readable, and identical artifact publication can be retried.
108
+ - Corrected read-consistency documentation: measurement and evidence share a transaction and
109
+ deadline, but Neo4j read-committed isolation permits concurrent writes to change observations.
110
+
111
+ ### Fixed
112
+
113
+ - Redaction preserves historical results schema context: 1.0/1.1 artifacts retain unknown
114
+ inventory and 1.2 artifacts keep their original version when exported by `graphcheck redact`.
115
+ - Historical results are validated against their declared archived JSON Schema before
116
+ normalization, rejecting fields and enum values introduced by later schemas. Installed wheels
117
+ include the same contracts.
118
+ - Historical exports also validate the final payload before serialization, rejecting incompatible
119
+ model mutations such as aggregate evidence in schema 1.0 before writing any output file.
120
+ - Schema 1.0 exports always omit graph counts, even if a loaded model was subsequently populated.
121
+ Schema 1.1 exports preserve recorded counts and omit unknown (null) counts.
122
+ - Run configuration hashes include the authenticated username so permission changes between
123
+ users have distinct provenance, while passwords and password environment variables stay excluded.
124
+ - Integration CI initializes the pinned fraud-ring fixture submodule for every Neo4j target,
125
+ so the changes acceptance test can load its Cypher parser and seed data.
126
+ - The fraud-ring changes acceptance test uses the explicit `node_element_id` evidence alias,
127
+ so its planted tax-ID finding fails with evidence and then passes after the repair.
128
+ - GraphRAG embedding consistency accepts stored numeric arrays on Neo4j 5.26 LTS by using
129
+ concrete non-null integer/float list predicates. GraphRAG integration tests now run in every
130
+ supported CI lane, including stored integer, float, and mixed-numeric embedding regressions.
131
+ - Drift checks retain partial run status when using present measurements from incomplete
132
+ baselines, without changing their measured verdict or exit-code precedence.
133
+ - Connection and credential preflight now share the run deadline with check execution.
134
+ - Baseline references and parsed snapshots are pinned per run, and snapshots/selection metadata
135
+ are published atomically so interrupted writes cannot become selectable partial files.
136
+ - Distinct runs cannot overwrite history on timestamp collisions. Managed report readers now
137
+ coordinate with publication/deletion and retain access to healthy records beside corrupt ones.
138
+ - Pruning uses compact summaries instead of retaining full historical results, and partial
139
+ profiles preserve successfully collected relationship counts and property coverage.
140
+ - Equality checks stop on decisive unexpected values or excess duplicates while preserving bag
141
+ semantics, honest partial-stream measurements, and graph-evidence requirements.
142
+ - Escaped Unicode-encoded backticks in schema identifiers and shared the same escaping between
143
+ check compilation and profiling to prevent identifiers from changing the generated Cypher.
144
+ - Configuration errors no longer echo input values or YAML source snippets, connection profile
145
+ representations hide passwords, and project/profile files reject duplicate mapping keys.
146
+ - Missing requested suites now make a run partial with an actionable diagnostic, including when
147
+ the other requested suites pass.
148
+ - Read preflights now reject missing-schema warnings before bounded queries can stop early;
149
+ permissive empty-graph preflights cannot satisfy a stricter cached read.
150
+ - Competency assertions compare every field of ordinary result maps, including maps resembling
151
+ evidence pointers, and graph properties cannot override actual Neo4j element identities.
152
+ - Reduced `contains` assertion work from repeated scans to hash-based membership in both streaming
153
+ and final evaluation while preserving typed value comparisons.
154
+ - Report deletion and pruning now share the publication lock so history mutations cannot race
155
+ with publication or restoration of the `latest` report.
156
+ - The local report explorer rejects malformed authentication without crashing, responds to
157
+ unauthorized requests without waiting for their bodies, and limits socket inactivity.
158
+
159
+ ## [0.3.0] - 2026-09-04
160
+
161
+ ### Added
162
+
163
+ - The GitHub Action now emits bounded inline workflow annotations for failed, errored, and
164
+ warning-severity checks, attaches repository source locations when available, and reports any
165
+ annotations dropped at the per-run cap while retaining the existing Step Summary.
166
+ - Added one CI/CD guide with copy-paste workflows for pull-request gating, scheduled audits with
167
+ alerting, staging merges, and server-enforced read-only production runs.
168
+ - Added a scripted hostile-graph certification set that runs the real `debug`, `profile`, and
169
+ `run` command boundary against noisy LLM Graph Builder-shaped data, a checksum-pinned Stanford
170
+ SNAP scale graph, a three-member Neo4j 4.4 cluster, an APOC-less server, and an empty graph. Its
171
+ manifest drives the runner and integration expectations; the legacy lane uses Docker-assigned
172
+ ports and verifies three unique cluster members, one leader, and two followers before testing.
173
+
174
+ ### Changed
175
+
176
+ - Reduced pull-request CI from 26 expanded jobs to 12: driver compatibility now tests the two
177
+ supported edge combinations, pull requests scan only their commit range for secrets, and the
178
+ Neo4j 4.4 hostile lane, cross-platform first-run trials, and Windows performance gates moved to
179
+ a weekly and manually runnable Extended CI workflow.
180
+ - Added Python 3.14 to the CI test matrix and package classifiers.
181
+ - Reduced GitHub Action startup overhead with cached `uv` and Python setup, binary-only package
182
+ installation, consolidated configuration/profile preparation, and direct helper execution from
183
+ the Action environment.
184
+ - Regenerated the canonical fraud-ring sample reports and linked them from `README.md` and
185
+ `docs/guides/user-guide.md`.
186
+ - Reorganized repository-facing material into dedicated `examples/`, `docs/`, `tools/`, and
187
+ layered `tests/` directories, including a minimal starter and the preserved fraud-ring demo, so
188
+ the repository root stays focused on project essentials.
189
+ - First-run CI now records three independent clean-runner install-to-first-valid-result samples on
190
+ Linux, macOS, and Windows/WSL, uploads structured timing evidence, publishes the per-platform
191
+ medians in the Actions summary, records both the tested GitHub SHA and pull-request head SHA, and
192
+ enforces the under-15-minute adoption budget.
193
+ - The default check concurrency is now two workers across project scaffolding, the engine, and the
194
+ Neo4j connection pool; `graphcheck.yml` and `graphcheck run --concurrency N` still override it.
195
+ - Migrated the breaking results contract from schema 1.2 to 2.0: `run.status` is now
196
+ `run.run_status`, summary `status` is now `coverage_status`, and `load_results()` retains a
197
+ compatibility path for historical artifacts.
198
+ - The Step Summary of `graphora/graphcheck-action` reports the run status and the coverage status
199
+ separately from `v1.0.2`, which reads the schema 2.0 fields and falls back to the historical
200
+ `run.status` and summary `status` for artifacts produced before this migration.
201
+ - The measured first-run path now installs a built wheel without a package cache and verifies the
202
+ baseline-free `init` → `run` path directly and persists that evidence before `profile` runs as a
203
+ separate post-timing smoke check.
204
+
205
+ ### Fixed
206
+
207
+ - Preserved the established GitHub Pages URLs for both sample reports with tested compatibility
208
+ redirects after moving the canonical HTML files under `docs/samples/reports/`.
209
+ - Kept the minimal example's documented first run baseline-free by moving its optional drift check
210
+ outside the default `checks/` discovery directory.
211
+ - Restored pull-request smoke CI after the repository reorganization by staging the fraud-ring
212
+ `graphcheck.yml` and `checks/` at the workspace root expected by the published GitHub Action.
213
+ - First-run stage failures, unexpected profiling faults, and baseline write errors now return an
214
+ actionable `Fix:` diagnostic without exposing a Python traceback.
215
+
216
+ ### Removed
217
+
218
+ - Removed the retired in-repository GraphCheck Action copy and its implementation tests; CI now
219
+ guards the boundary and consumes only the standalone `graphora/graphcheck-action@v1` release.
6
220
 
7
221
  ## [0.2.0] - 2026-08-20
8
222
 
@@ -34,7 +248,7 @@ All notable changes to this project are documented here. Format follows [Keep a
34
248
  - PyPI release tooling: a Trusted Publishing (OIDC) release workflow triggered by a published
35
249
  GitHub Release, guarding that the release tag matches the built version and smoke-testing a
36
250
  clean install before upload; packaging metadata (project URLs, classifiers, keywords, author);
37
- and a single-source version literal in `src/graphcheck/__init__.py`, read at build time by hatch. See `docs/releasing.md`.
251
+ and a single-source version literal in `src/graphcheck/__init__.py`, read at build time by hatch. See `docs/maintainers/releasing.md`.
38
252
  - A release-oriented top-level README with a versioned project header, embedded CLI demo,
39
253
  concise problem statement, quickstart, check-suite example, explicit non-goals, and a preserved
40
254
  full user guide for detailed operational workflows.
@@ -126,7 +340,7 @@ All notable changes to this project are documented here. Format follows [Keep a
126
340
  timed-out, refused, or otherwise unsuccessful delivery.
127
341
  - Telemetry privacy and transparency safeguards: no queries, schema tokens, graph values,
128
342
  credentials, project/check identity, results, verdicts, paths, arguments, or free-form
129
- diagnostics; a complete public event/field inventory in `docs/telemetry.md`; CI enforcement
343
+ diagnostics; a complete public event/field inventory in `docs/reference/telemetry.md`; CI enforcement
130
344
  against allowlist drift; property-based anonymization coverage; explicit network-failure tests;
131
345
  and a fresh-install command matrix proving zero events before opt-in.
132
346
  - A fifteen-part performance roadmap with repeatable cold-CLI, query-plan, allocation-retention,
@@ -143,7 +357,8 @@ All notable changes to this project are documented here. Format follows [Keep a
143
357
  predicates while preserving the existing eager connector API.
144
358
  - Positive project and CLI concurrency controls through `graphcheck.yml` and
145
359
  `graphcheck run --concurrency`, with deterministic output ordering, deadline-aware scheduling,
146
- a conservative default of one worker, and Neo4j pool sizing matched to effective concurrency.
360
+ an initial conservative default of one worker, and Neo4j pool sizing matched to effective
361
+ concurrency.
147
362
  - A secure local report explorer launched by `graphcheck report --open`, with searchable history,
148
363
  in-place report switching, two-run comparisons, multi-select deletion, safe `latest` repair,
149
364
  authenticated same-origin APIs, restrictive browser security headers, and idle shutdown.
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.5
2
2
  Name: graphcheck
3
- Version: 0.2.0
3
+ Version: 0.4.0
4
4
  Summary: Semantic observability for property graphs.
5
5
  Project-URL: Homepage, https://github.com/graphora/graphcheck
6
6
  Project-URL: Repository, https://github.com/graphora/graphcheck
@@ -17,6 +17,7 @@ Classifier: Operating System :: OS Independent
17
17
  Classifier: Programming Language :: Python :: 3
18
18
  Classifier: Programming Language :: Python :: 3.12
19
19
  Classifier: Programming Language :: Python :: 3.13
20
+ Classifier: Programming Language :: Python :: 3.14
20
21
  Classifier: Topic :: Database
21
22
  Classifier: Topic :: Software Development :: Quality Assurance
22
23
  Classifier: Topic :: Software Development :: Testing
@@ -39,8 +40,8 @@ Description-Content-Type: text/markdown
39
40
 
40
41
  # GraphCheck
41
42
 
42
- [![Release](https://img.shields.io/badge/release-v0.1.0-5b5bd6)](https://github.com/graphora/graphcheck/releases)
43
- [![Python](https://img.shields.io/badge/python-3.12%20%7C%203.13-3776ab)](https://www.python.org/)
43
+ [![Release](https://img.shields.io/badge/release-v0.4.0-5b5bd6)](https://github.com/graphora/graphcheck/releases)
44
+ [![Python](https://img.shields.io/badge/python-3.12%20%7C%203.13%20%7C%203.14-3776ab)](https://www.python.org/)
44
45
  [![License](https://img.shields.io/badge/license-Apache--2.0-2ea44f)](LICENSE)
45
46
 
46
47
  **Semantic observability for property graphs.**
@@ -48,7 +49,12 @@ Description-Content-Type: text/markdown
48
49
  </div>
49
50
 
50
51
  <p align="center">
51
- <img src="docs/graphcheck-demo.gif" width="900" alt="GraphCheck command-line demo">
52
+ <img src="docs/assets/graphcheck-demo.gif" width="900" alt="GraphCheck command-line demo">
53
+ </p>
54
+
55
+ <p align="center">
56
+ See a real report: <a href="https://graphora.github.io/graphcheck/docs/samples/report-findings.html">findings</a> and
57
+ <a href="https://graphora.github.io/graphcheck/docs/samples/report-clean.html">clean run</a>
52
58
  </p>
53
59
 
54
60
  ## The problem
@@ -62,10 +68,12 @@ YAML and produces deterministic, evidence-backed JSON and offline HTML reports f
62
68
  ## Quickstart
63
69
 
64
70
  For complete setup, credential, authoring, redaction, baseline, and configuration instructions, see
65
- the **[full user guide](docs/user-guide.md)**.
71
+ the **[full user guide](docs/guides/user-guide.md)**.
66
72
 
67
- GraphCheck requires Python 3.12 or 3.13 and a supported Neo4j server. See the
68
- [compatibility matrix](docs/compatibility.md) for the tested Neo4j and Cypher versions.
73
+ GraphCheck requires Python 3.12, 3.13, or 3.14 and a supported Neo4j server. See the
74
+ [compatibility matrix](docs/reference/compatibility.md) for the tested Neo4j and Cypher versions.
75
+ The audit ceiling is **10 million nodes**, see [supported graph size](docs/reference/compatibility.md#supported-graph-size)
76
+ for measured runtimes, sampling, and the transaction-memory limitation observed with PII at 10M.
69
77
 
70
78
  Install the published CLI and scaffold a project:
71
79
 
@@ -95,6 +103,9 @@ checks/example.yml Example check suite
95
103
  .graphcheck/ Baselines, run history, JSON, and HTML reports
96
104
  ```
97
105
 
106
+ New projects run up to two checks concurrently by default. Set `concurrency` in `graphcheck.yml`
107
+ or pass `graphcheck run --concurrency N` to choose a different positive worker limit.
108
+
98
109
  Edit `profiles.yml` with the URI, database, and credential for your Neo4j instance. Enterprise and
99
110
  Developer deployments must use a user assigned only Neo4j's built-in `reader` role plus the
100
111
  automatic `PUBLIC` role; GraphCheck rejects missing, additional, or custom roles. Community
@@ -112,14 +123,18 @@ Each prepared run writes immutable history plus convenient `latest` copies:
112
123
 
113
124
  ```text
114
125
  .graphcheck/runs/<run-id>/results.json
126
+ .graphcheck/runs/<run-id>/summary.json
115
127
  .graphcheck/runs/<run-id>/report.html
116
128
  .graphcheck/runs/latest/results.json
129
+ .graphcheck/runs/latest/summary.json
117
130
  .graphcheck/runs/latest/report.html
118
131
  ```
119
132
 
120
133
  The HTML report is self-contained and works offline. Exit codes are stable for CI: `0` means all
121
134
  executed checks passed, `1` means an error-severity finding or execution error, `2` means a warning or
122
135
  incomplete evaluation, and `3` means the run could not be prepared or completed.
136
+ See the **[CI/CD guide](docs/guides/ci-cd.md)** for copy-paste pull-request, scheduled, staging, and
137
+ production workflows using the published GitHub Action.
123
138
 
124
139
  For development, use the locked environment instead:
125
140
 
@@ -128,6 +143,9 @@ uv sync --group dev
128
143
  uv run graphcheck --version
129
144
  ```
130
145
 
146
+ Complete runnable projects and reference deployments live under [`examples/`](examples/), including
147
+ the self-contained fraud-ring Docker quickstart and the Prometheus/Grafana monitoring stack.
148
+
131
149
  ## Example
132
150
 
133
151
  Replace `checks/example.yml` with a suite that matches labels in your graph:
@@ -174,11 +192,21 @@ Suite YAML is strict: duplicate keys, unknown fields, invalid payloads, and inco
174
192
  fail before execution. Runtime evaluation is rule-based; generated check suggestions remain inert
175
193
  until a person reviews and activates them.
176
194
 
177
- For the full contracts, see the [check YAML specification](docs/specs/SPEC-02-check-yaml.md),
178
- [`results.json` specification](docs/specs/SPEC-01-results-json.md), and
179
- [engine and CLI specification](docs/specs/SPEC-04%20Engine.md). The
180
- [agent guide](docs/agents.md), [telemetry disclosure](docs/telemetry.md),
181
- and [contributor guide](CONTRIBUTING.md) cover integration and operational workflows.
195
+ For document/chunk/entity graphs, enable the optional [GraphRAG pack](docs/graphrag.md) with
196
+ `graphcheck init --pack graphrag`. It checks provenance, embedding consistency, and sampled duplicate names using your
197
+ configured labels, relationships, and properties.
198
+
199
+ For authoring and execution details, see the [user guide](docs/guides/user-guide.md) and
200
+ [JSON Schemas](docs/schemas/). The [agent guide](docs/guides/agents.md),
201
+ [telemetry disclosure](docs/reference/telemetry.md), and [contributor guide](CONTRIBUTING.md)
202
+ cover integration and operational workflows.
203
+
204
+ ## Support
205
+
206
+ See the [Neo4j compatibility matrix](docs/reference/compatibility.md) for supported servers and
207
+ the [artifact compatibility policy](docs/reference/artifact-compatibility.md) for schema support,
208
+ deprecation deadlines, and migration of saved `results.json` files. Schema versions are independent
209
+ of CLI versions; the current and previous schemas remain readable.
182
210
 
183
211
  ## Non-goals
184
212
 
@@ -2,8 +2,8 @@
2
2
 
3
3
  # GraphCheck
4
4
 
5
- [![Release](https://img.shields.io/badge/release-v0.1.0-5b5bd6)](https://github.com/graphora/graphcheck/releases)
6
- [![Python](https://img.shields.io/badge/python-3.12%20%7C%203.13-3776ab)](https://www.python.org/)
5
+ [![Release](https://img.shields.io/badge/release-v0.4.0-5b5bd6)](https://github.com/graphora/graphcheck/releases)
6
+ [![Python](https://img.shields.io/badge/python-3.12%20%7C%203.13%20%7C%203.14-3776ab)](https://www.python.org/)
7
7
  [![License](https://img.shields.io/badge/license-Apache--2.0-2ea44f)](LICENSE)
8
8
 
9
9
  **Semantic observability for property graphs.**
@@ -11,7 +11,12 @@
11
11
  </div>
12
12
 
13
13
  <p align="center">
14
- <img src="docs/graphcheck-demo.gif" width="900" alt="GraphCheck command-line demo">
14
+ <img src="docs/assets/graphcheck-demo.gif" width="900" alt="GraphCheck command-line demo">
15
+ </p>
16
+
17
+ <p align="center">
18
+ See a real report: <a href="https://graphora.github.io/graphcheck/docs/samples/report-findings.html">findings</a> and
19
+ <a href="https://graphora.github.io/graphcheck/docs/samples/report-clean.html">clean run</a>
15
20
  </p>
16
21
 
17
22
  ## The problem
@@ -25,10 +30,12 @@ YAML and produces deterministic, evidence-backed JSON and offline HTML reports f
25
30
  ## Quickstart
26
31
 
27
32
  For complete setup, credential, authoring, redaction, baseline, and configuration instructions, see
28
- the **[full user guide](docs/user-guide.md)**.
33
+ the **[full user guide](docs/guides/user-guide.md)**.
29
34
 
30
- GraphCheck requires Python 3.12 or 3.13 and a supported Neo4j server. See the
31
- [compatibility matrix](docs/compatibility.md) for the tested Neo4j and Cypher versions.
35
+ GraphCheck requires Python 3.12, 3.13, or 3.14 and a supported Neo4j server. See the
36
+ [compatibility matrix](docs/reference/compatibility.md) for the tested Neo4j and Cypher versions.
37
+ The audit ceiling is **10 million nodes**, see [supported graph size](docs/reference/compatibility.md#supported-graph-size)
38
+ for measured runtimes, sampling, and the transaction-memory limitation observed with PII at 10M.
32
39
 
33
40
  Install the published CLI and scaffold a project:
34
41
 
@@ -58,6 +65,9 @@ checks/example.yml Example check suite
58
65
  .graphcheck/ Baselines, run history, JSON, and HTML reports
59
66
  ```
60
67
 
68
+ New projects run up to two checks concurrently by default. Set `concurrency` in `graphcheck.yml`
69
+ or pass `graphcheck run --concurrency N` to choose a different positive worker limit.
70
+
61
71
  Edit `profiles.yml` with the URI, database, and credential for your Neo4j instance. Enterprise and
62
72
  Developer deployments must use a user assigned only Neo4j's built-in `reader` role plus the
63
73
  automatic `PUBLIC` role; GraphCheck rejects missing, additional, or custom roles. Community
@@ -75,14 +85,18 @@ Each prepared run writes immutable history plus convenient `latest` copies:
75
85
 
76
86
  ```text
77
87
  .graphcheck/runs/<run-id>/results.json
88
+ .graphcheck/runs/<run-id>/summary.json
78
89
  .graphcheck/runs/<run-id>/report.html
79
90
  .graphcheck/runs/latest/results.json
91
+ .graphcheck/runs/latest/summary.json
80
92
  .graphcheck/runs/latest/report.html
81
93
  ```
82
94
 
83
95
  The HTML report is self-contained and works offline. Exit codes are stable for CI: `0` means all
84
96
  executed checks passed, `1` means an error-severity finding or execution error, `2` means a warning or
85
97
  incomplete evaluation, and `3` means the run could not be prepared or completed.
98
+ See the **[CI/CD guide](docs/guides/ci-cd.md)** for copy-paste pull-request, scheduled, staging, and
99
+ production workflows using the published GitHub Action.
86
100
 
87
101
  For development, use the locked environment instead:
88
102
 
@@ -91,6 +105,9 @@ uv sync --group dev
91
105
  uv run graphcheck --version
92
106
  ```
93
107
 
108
+ Complete runnable projects and reference deployments live under [`examples/`](examples/), including
109
+ the self-contained fraud-ring Docker quickstart and the Prometheus/Grafana monitoring stack.
110
+
94
111
  ## Example
95
112
 
96
113
  Replace `checks/example.yml` with a suite that matches labels in your graph:
@@ -137,11 +154,21 @@ Suite YAML is strict: duplicate keys, unknown fields, invalid payloads, and inco
137
154
  fail before execution. Runtime evaluation is rule-based; generated check suggestions remain inert
138
155
  until a person reviews and activates them.
139
156
 
140
- For the full contracts, see the [check YAML specification](docs/specs/SPEC-02-check-yaml.md),
141
- [`results.json` specification](docs/specs/SPEC-01-results-json.md), and
142
- [engine and CLI specification](docs/specs/SPEC-04%20Engine.md). The
143
- [agent guide](docs/agents.md), [telemetry disclosure](docs/telemetry.md),
144
- and [contributor guide](CONTRIBUTING.md) cover integration and operational workflows.
157
+ For document/chunk/entity graphs, enable the optional [GraphRAG pack](docs/graphrag.md) with
158
+ `graphcheck init --pack graphrag`. It checks provenance, embedding consistency, and sampled duplicate names using your
159
+ configured labels, relationships, and properties.
160
+
161
+ For authoring and execution details, see the [user guide](docs/guides/user-guide.md) and
162
+ [JSON Schemas](docs/schemas/). The [agent guide](docs/guides/agents.md),
163
+ [telemetry disclosure](docs/reference/telemetry.md), and [contributor guide](CONTRIBUTING.md)
164
+ cover integration and operational workflows.
165
+
166
+ ## Support
167
+
168
+ See the [Neo4j compatibility matrix](docs/reference/compatibility.md) for supported servers and
169
+ the [artifact compatibility policy](docs/reference/artifact-compatibility.md) for schema support,
170
+ deprecation deadlines, and migration of saved `results.json` files. Schema versions are independent
171
+ of CLI versions; the current and previous schemas remain readable.
145
172
 
146
173
  ## Non-goals
147
174