logseq-matryca-parser 1.6.0__tar.gz → 1.7.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 (164) hide show
  1. {logseq_matryca_parser-1.6.0 → logseq_matryca_parser-1.7.0}/.cursorignore +15 -15
  2. {logseq_matryca_parser-1.6.0 → logseq_matryca_parser-1.7.0}/.github/dependabot.yml +2 -2
  3. logseq_matryca_parser-1.7.0/.github/workflows/ci.yml +83 -0
  4. {logseq_matryca_parser-1.6.0 → logseq_matryca_parser-1.7.0}/.github/workflows/daily-metrics.yml +5 -5
  5. logseq_matryca_parser-1.7.0/.github/workflows/pypi_publish.yml +153 -0
  6. logseq_matryca_parser-1.7.0/AGENTS.md +26 -0
  7. {logseq_matryca_parser-1.6.0 → logseq_matryca_parser-1.7.0}/CHANGELOG.md +63 -0
  8. logseq_matryca_parser-1.7.0/CLAUDE.md +26 -0
  9. {logseq_matryca_parser-1.6.0 → logseq_matryca_parser-1.7.0}/CONTRIBUTING.md +32 -7
  10. logseq_matryca_parser-1.7.0/Makefile +31 -0
  11. {logseq_matryca_parser-1.6.0 → logseq_matryca_parser-1.7.0}/PKG-INFO +14 -11
  12. {logseq_matryca_parser-1.6.0 → logseq_matryca_parser-1.7.0}/README.md +13 -10
  13. {logseq_matryca_parser-1.6.0 → logseq_matryca_parser-1.7.0}/SECURITY.md +2 -2
  14. logseq_matryca_parser-1.7.0/claude-skill-logseq-read/SKILL.md +83 -0
  15. {logseq_matryca_parser-1.6.0 → logseq_matryca_parser-1.7.0}/claude-skill-logseq-read/scripts/parse_logseq.py +21 -21
  16. {logseq_matryca_parser-1.6.0 → logseq_matryca_parser-1.7.0}/docs/ARCHITECTURE.md +32 -3
  17. logseq_matryca_parser-1.7.0/docs/BUG_HUNT_REPORT.md +1249 -0
  18. {logseq_matryca_parser-1.6.0 → logseq_matryca_parser-1.7.0}/docs/CLEAN_CODE_ARCHITECTURE.md +23 -2
  19. {logseq_matryca_parser-1.6.0 → logseq_matryca_parser-1.7.0}/docs/COOKBOOK.md +23 -1
  20. logseq_matryca_parser-1.7.0/docs/DOCUMENTATION_SYSTEM.md +297 -0
  21. {logseq_matryca_parser-1.6.0 → logseq_matryca_parser-1.7.0}/docs/GOOD_FIRST_ISSUES.md +30 -19
  22. {logseq_matryca_parser-1.6.0 → logseq_matryca_parser-1.7.0}/docs/README.md +40 -0
  23. logseq_matryca_parser-1.7.0/docs/RELEASE_PROCESS.md +118 -0
  24. logseq_matryca_parser-1.7.0/docs/REPOSITORY_IMPROVEMENT_STUDY_2026-07-28.md +439 -0
  25. logseq_matryca_parser-1.7.0/docs/REPOSITORY_STELLAR_ROADMAP_2026-08-06.md +726 -0
  26. logseq_matryca_parser-1.7.0/docs/decisions/index.md +36 -0
  27. {logseq_matryca_parser-1.6.0 → logseq_matryca_parser-1.7.0}/docs/design-docs/LOGSEQ_ASSET_RESOLUTION_SPEC.md +104 -104
  28. {logseq_matryca_parser-1.6.0 → logseq_matryca_parser-1.7.0}/docs/design-docs/LOGSEQ_DATASCRIPT_MAPPING.md +96 -96
  29. {logseq_matryca_parser-1.6.0 → logseq_matryca_parser-1.7.0}/docs/design-docs/LOGSEQ_TEMPORAL_ONTOLOGY.md +114 -114
  30. {logseq_matryca_parser-1.6.0 → logseq_matryca_parser-1.7.0}/docs/design-docs/OFFICIAL_MLDOC_SPECS.md +68 -68
  31. logseq_matryca_parser-1.7.0/docs/index.md +47 -0
  32. {logseq_matryca_parser-1.6.0 → logseq_matryca_parser-1.7.0}/docs/internal/LOCAL_CODE_STUDY.md +3 -3
  33. logseq_matryca_parser-1.7.0/docs/log.md +109 -0
  34. logseq_matryca_parser-1.7.0/docs/maintained.toml +34 -0
  35. logseq_matryca_parser-1.7.0/docs/quality/ISSUE_RECONCILIATION_2026-08-06.md +119 -0
  36. {logseq_matryca_parser-1.6.0 → logseq_matryca_parser-1.7.0}/docs/quality/README.md +23 -1
  37. logseq_matryca_parser-1.7.0/docs/reference/API_STABILITY.md +100 -0
  38. logseq_matryca_parser-1.7.0/docs/reference/DIAGNOSTICS.md +103 -0
  39. logseq_matryca_parser-1.7.0/docs/reference/FILESYSTEM_SAFETY.md +89 -0
  40. logseq_matryca_parser-1.7.0/docs/reference/index.md +55 -0
  41. {logseq_matryca_parser-1.6.0 → logseq_matryca_parser-1.7.0}/metrics/index.json +1 -1
  42. logseq_matryca_parser-1.7.0/metrics/quarters/2026-Q3.json +6741 -0
  43. {logseq_matryca_parser-1.6.0 → logseq_matryca_parser-1.7.0}/pyproject.toml +7 -1
  44. logseq_matryca_parser-1.7.0/release-bundle/RELEASE_NOTES.md +62 -0
  45. logseq_matryca_parser-1.7.0/scripts/check_documentation.py +260 -0
  46. logseq_matryca_parser-1.7.0/scripts/check_release_contract.py +128 -0
  47. logseq_matryca_parser-1.7.0/scripts/check_vendor_free_docs.sh +20 -0
  48. logseq_matryca_parser-1.7.0/scripts/check_wheel_contract.py +80 -0
  49. {logseq_matryca_parser-1.6.0 → logseq_matryca_parser-1.7.0}/src/logseq_matryca_parser/__init__.py +17 -4
  50. logseq_matryca_parser-1.7.0/src/logseq_matryca_parser/_version.py +3 -0
  51. {logseq_matryca_parser-1.6.0 → logseq_matryca_parser-1.7.0}/src/logseq_matryca_parser/agent_writer.py +208 -7
  52. logseq_matryca_parser-1.7.0/src/logseq_matryca_parser/diagnostics.py +127 -0
  53. logseq_matryca_parser-1.7.0/src/logseq_matryca_parser/exceptions.py +47 -0
  54. {logseq_matryca_parser-1.6.0 → logseq_matryca_parser-1.7.0}/src/logseq_matryca_parser/graph.py +98 -4
  55. {logseq_matryca_parser-1.6.0 → logseq_matryca_parser-1.7.0}/src/logseq_matryca_parser/kinetic_commands.py +107 -22
  56. {logseq_matryca_parser-1.6.0 → logseq_matryca_parser-1.7.0}/src/logseq_matryca_parser/lens.py +7 -5
  57. {logseq_matryca_parser-1.6.0 → logseq_matryca_parser-1.7.0}/src/logseq_matryca_parser/logos_core.py +20 -19
  58. {logseq_matryca_parser-1.6.0 → logseq_matryca_parser-1.7.0}/src/logseq_matryca_parser/logos_parser.py +10 -17
  59. logseq_matryca_parser-1.7.0/src/logseq_matryca_parser/py.typed +1 -0
  60. {logseq_matryca_parser-1.6.0 → logseq_matryca_parser-1.7.0}/src/logseq_matryca_parser/synapse.py +4 -4
  61. logseq_matryca_parser-1.7.0/tests/test_check_documentation.py +176 -0
  62. logseq_matryca_parser-1.7.0/tests/test_check_release_contract.py +85 -0
  63. logseq_matryca_parser-1.7.0/tests/test_check_wheel_contract.py +58 -0
  64. logseq_matryca_parser-1.7.0/tests/test_diagnostics.py +100 -0
  65. logseq_matryca_parser-1.7.0/tests/test_graph_collisions.py +128 -0
  66. {logseq_matryca_parser-1.6.0 → logseq_matryca_parser-1.7.0}/tests/test_kinetic.py +40 -0
  67. {logseq_matryca_parser-1.6.0 → logseq_matryca_parser-1.7.0}/tests/test_lens.py +21 -0
  68. {logseq_matryca_parser-1.6.0 → logseq_matryca_parser-1.7.0}/tests/test_logos_parser.py +1 -1
  69. logseq_matryca_parser-1.7.0/tests/test_parser_deep_refresh.py +135 -0
  70. logseq_matryca_parser-1.7.0/tests/test_public_api_contract.py +90 -0
  71. logseq_matryca_parser-1.7.0/tests/test_quality_gate_contract.py +76 -0
  72. {logseq_matryca_parser-1.6.0 → logseq_matryca_parser-1.7.0}/tests/test_synapse.py +99 -1
  73. logseq_matryca_parser-1.7.0/tests/test_writer_security.py +212 -0
  74. logseq_matryca_parser-1.7.0/tests/typing_samples/public_api.py +12 -0
  75. {logseq_matryca_parser-1.6.0 → logseq_matryca_parser-1.7.0}/uv.lock +68 -67
  76. logseq_matryca_parser-1.6.0/.github/workflows/ci.yml +0 -49
  77. logseq_matryca_parser-1.6.0/.github/workflows/github_release.yml +0 -53
  78. logseq_matryca_parser-1.6.0/.github/workflows/pypi_publish.yml +0 -61
  79. logseq_matryca_parser-1.6.0/Makefile +0 -18
  80. logseq_matryca_parser-1.6.0/claude-skill-logseq-read/SKILL.md +0 -83
  81. logseq_matryca_parser-1.6.0/docs/BUG_HUNT_REPORT.md +0 -1251
  82. logseq_matryca_parser-1.6.0/docs/RELEASE_PROCESS.md +0 -85
  83. logseq_matryca_parser-1.6.0/metrics/quarters/2026-Q3.json +0 -185
  84. logseq_matryca_parser-1.6.0/scripts/check_vendor_free_docs.sh +0 -16
  85. logseq_matryca_parser-1.6.0/src/logseq_matryca_parser/exceptions.py +0 -17
  86. {logseq_matryca_parser-1.6.0 → logseq_matryca_parser-1.7.0}/.cursorrules +0 -0
  87. {logseq_matryca_parser-1.6.0 → logseq_matryca_parser-1.7.0}/.github/CODEOWNERS +0 -0
  88. {logseq_matryca_parser-1.6.0 → logseq_matryca_parser-1.7.0}/.github/FUNDING.yml +0 -0
  89. {logseq_matryca_parser-1.6.0 → logseq_matryca_parser-1.7.0}/.github/ISSUE_TEMPLATE/bug_report.yml +0 -0
  90. {logseq_matryca_parser-1.6.0 → logseq_matryca_parser-1.7.0}/.github/ISSUE_TEMPLATE/clean_architecture.yml +0 -0
  91. {logseq_matryca_parser-1.6.0 → logseq_matryca_parser-1.7.0}/.github/ISSUE_TEMPLATE/config.yml +0 -0
  92. {logseq_matryca_parser-1.6.0 → logseq_matryca_parser-1.7.0}/.github/ISSUE_TEMPLATE/feature_request.yml +0 -0
  93. {logseq_matryca_parser-1.6.0 → logseq_matryca_parser-1.7.0}/.github/PULL_REQUEST_TEMPLATE.md +0 -0
  94. {logseq_matryca_parser-1.6.0 → logseq_matryca_parser-1.7.0}/.github/clean_arch_issue_numbers.txt +0 -0
  95. {logseq_matryca_parser-1.6.0 → logseq_matryca_parser-1.7.0}/.github/labels.yml +0 -0
  96. {logseq_matryca_parser-1.6.0 → logseq_matryca_parser-1.7.0}/.github/scripts/create_clean_arch_issues.sh +0 -0
  97. {logseq_matryca_parser-1.6.0 → logseq_matryca_parser-1.7.0}/.github/scripts/create_good_first_issues.sh +0 -0
  98. {logseq_matryca_parser-1.6.0 → logseq_matryca_parser-1.7.0}/.gitignore +0 -0
  99. {logseq_matryca_parser-1.6.0 → logseq_matryca_parser-1.7.0}/.pre-commit-config.yaml +0 -0
  100. {logseq_matryca_parser-1.6.0 → logseq_matryca_parser-1.7.0}/.repomixignore +0 -0
  101. {logseq_matryca_parser-1.6.0 → logseq_matryca_parser-1.7.0}/CODE_OF_CONDUCT.md +0 -0
  102. {logseq_matryca_parser-1.6.0 → logseq_matryca_parser-1.7.0}/LICENSE +0 -0
  103. {logseq_matryca_parser-1.6.0 → logseq_matryca_parser-1.7.0}/NOTICE +0 -0
  104. {logseq_matryca_parser-1.6.0 → logseq_matryca_parser-1.7.0}/docs/CODEQL.md +0 -0
  105. {logseq_matryca_parser-1.6.0 → logseq_matryca_parser-1.7.0}/docs/design-docs/ARCHITECTURE_BLUEPRINT.md +0 -0
  106. {logseq_matryca_parser-1.6.0 → logseq_matryca_parser-1.7.0}/docs/design-docs/CODE_SCAFFOLD.md +0 -0
  107. {logseq_matryca_parser-1.6.0 → logseq_matryca_parser-1.7.0}/docs/design-docs/README.md +0 -0
  108. {logseq_matryca_parser-1.6.0 → logseq_matryca_parser-1.7.0}/docs/design-docs/REFERENCE_SPEC.md +0 -0
  109. {logseq_matryca_parser-1.6.0 → logseq_matryca_parser-1.7.0}/docs/error_log.md +0 -0
  110. {logseq_matryca_parser-1.6.0 → logseq_matryca_parser-1.7.0}/docs/internal/STATIC_ANALYSIS_POLICY.md +0 -0
  111. {logseq_matryca_parser-1.6.0 → logseq_matryca_parser-1.7.0}/docs/logseq_ast_primer.md +0 -0
  112. {logseq_matryca_parser-1.6.0 → logseq_matryca_parser-1.7.0}/docs/quality/CLEAN_ARCH_BACKLOG.md +0 -0
  113. {logseq_matryca_parser-1.6.0 → logseq_matryca_parser-1.7.0}/docs/quality/GITHUB_CLEAN_ARCH_ROADMAP.md +0 -0
  114. {logseq_matryca_parser-1.6.0 → logseq_matryca_parser-1.7.0}/docs/quality/ISSUE_TRIAGE_2026-07.md +0 -0
  115. {logseq_matryca_parser-1.6.0 → logseq_matryca_parser-1.7.0}/docs/rfc/OLLAMA_RAG.md +0 -0
  116. {logseq_matryca_parser-1.6.0 → logseq_matryca_parser-1.7.0}/docs/roadmaps/ROADMAP_AGENT_NATIVE_XRAY.md +0 -0
  117. {logseq_matryca_parser-1.6.0 → logseq_matryca_parser-1.7.0}/docs/roadmaps/ROADMAP_CLI_HYDRATION_AND_ENRICHMENT.md +0 -0
  118. {logseq_matryca_parser-1.6.0 → logseq_matryca_parser-1.7.0}/docs/roadmaps/ROADMAP_CONTEXT_SYNTHESIS_AND_SCOPING.md +0 -0
  119. {logseq_matryca_parser-1.6.0 → logseq_matryca_parser-1.7.0}/docs/roadmaps/ROADMAP_EMBED_EXPANSION_AND_FLUENT_QUERIES.md +0 -0
  120. {logseq_matryca_parser-1.6.0 → logseq_matryca_parser-1.7.0}/docs/roadmaps/ROADMAP_GRAPH_RAG_SEMANTICS.md +0 -0
  121. {logseq_matryca_parser-1.6.0 → logseq_matryca_parser-1.7.0}/docs/roadmaps/ROADMAP_HEADLESS_WRITER.md +0 -0
  122. {logseq_matryca_parser-1.6.0 → logseq_matryca_parser-1.7.0}/docs/roadmaps/ROADMAP_INCREMENTAL_WATCHER.md +0 -0
  123. {logseq_matryca_parser-1.6.0 → logseq_matryca_parser-1.7.0}/docs/roadmaps/ROADMAP_INLINE_SHIELD_AND_NAMESPACES.md +0 -0
  124. {logseq_matryca_parser-1.6.0 → logseq_matryca_parser-1.7.0}/docs/roadmaps/ROADMAP_OBSIDIAN_ADAPTER.md +0 -0
  125. {logseq_matryca_parser-1.6.0 → logseq_matryca_parser-1.7.0}/docs/roadmaps/ROADMAP_ROBUSTNESS_AND_SOFT_BREAKS.md +0 -0
  126. {logseq_matryca_parser-1.6.0 → logseq_matryca_parser-1.7.0}/docs/roadmaps/ROADMAP_TOML_FIX_AND_PYPI_DISTRIBUTION.md +0 -0
  127. {logseq_matryca_parser-1.6.0 → logseq_matryca_parser-1.7.0}/docs/roadmaps/ROADMAP_UUID_AND_GRAPH_SUPERPOWERS.md +0 -0
  128. {logseq_matryca_parser-1.6.0 → logseq_matryca_parser-1.7.0}/examples/demo_logseq_journal.md +0 -0
  129. {logseq_matryca_parser-1.6.0 → logseq_matryca_parser-1.7.0}/examples/run_demo.py +0 -0
  130. {logseq_matryca_parser-1.6.0 → logseq_matryca_parser-1.7.0}/legacy/local_digestor.py +0 -0
  131. {logseq_matryca_parser-1.6.0 → logseq_matryca_parser-1.7.0}/lib/bindings/utils.js +0 -0
  132. {logseq_matryca_parser-1.6.0 → logseq_matryca_parser-1.7.0}/lib/tom-select/tom-select.complete.min.js +0 -0
  133. {logseq_matryca_parser-1.6.0 → logseq_matryca_parser-1.7.0}/lib/tom-select/tom-select.css +0 -0
  134. {logseq_matryca_parser-1.6.0 → logseq_matryca_parser-1.7.0}/lib/vis-9.1.2/vis-network.css +0 -0
  135. {logseq_matryca_parser-1.6.0 → logseq_matryca_parser-1.7.0}/lib/vis-9.1.2/vis-network.min.js +0 -0
  136. {logseq_matryca_parser-1.6.0 → logseq_matryca_parser-1.7.0}/metrics/quarters/2026-Q2.json +0 -0
  137. {logseq_matryca_parser-1.6.0 → logseq_matryca_parser-1.7.0}/repomix-output-parser.xml +0 -0
  138. {logseq_matryca_parser-1.6.0 → logseq_matryca_parser-1.7.0}/scripts/__init__.py +0 -0
  139. {logseq_matryca_parser-1.6.0 → logseq_matryca_parser-1.7.0}/scripts/archive_repository_metrics.py +0 -0
  140. {logseq_matryca_parser-1.6.0 → logseq_matryca_parser-1.7.0}/scripts/debug_pre_release.py +0 -0
  141. {logseq_matryca_parser-1.6.0 → logseq_matryca_parser-1.7.0}/scripts/extract_changelog.py +0 -0
  142. {logseq_matryca_parser-1.6.0 → logseq_matryca_parser-1.7.0}/src/logseq_matryca_parser/.gitignore +0 -0
  143. {logseq_matryca_parser-1.6.0 → logseq_matryca_parser-1.7.0}/src/logseq_matryca_parser/NOTICE +0 -0
  144. {logseq_matryca_parser-1.6.0 → logseq_matryca_parser-1.7.0}/src/logseq_matryca_parser/__main__.py +0 -0
  145. {logseq_matryca_parser-1.6.0 → logseq_matryca_parser-1.7.0}/src/logseq_matryca_parser/agent_press.py +0 -0
  146. {logseq_matryca_parser-1.6.0 → logseq_matryca_parser-1.7.0}/src/logseq_matryca_parser/forge.py +0 -0
  147. {logseq_matryca_parser-1.6.0 → logseq_matryca_parser-1.7.0}/src/logseq_matryca_parser/kinetic.py +0 -0
  148. {logseq_matryca_parser-1.6.0 → logseq_matryca_parser-1.7.0}/src/logseq_matryca_parser/kinetic_export.py +0 -0
  149. {logseq_matryca_parser-1.6.0 → logseq_matryca_parser-1.7.0}/src/logseq_matryca_parser/logseq_markdown.py +0 -0
  150. {logseq_matryca_parser-1.6.0 → logseq_matryca_parser-1.7.0}/src/logseq_matryca_parser/logseq_paths.py +0 -0
  151. {logseq_matryca_parser-1.6.0 → logseq_matryca_parser-1.7.0}/src/logseq_matryca_parser/pyproject.toml +0 -0
  152. {logseq_matryca_parser-1.6.0 → logseq_matryca_parser-1.7.0}/src/logseq_matryca_parser/synapse_embed.py +0 -0
  153. {logseq_matryca_parser-1.6.0 → logseq_matryca_parser-1.7.0}/tests/test_agent_press.py +0 -0
  154. {logseq_matryca_parser-1.6.0 → logseq_matryca_parser-1.7.0}/tests/test_agent_writer.py +0 -0
  155. {logseq_matryca_parser-1.6.0 → logseq_matryca_parser-1.7.0}/tests/test_archive_repository_metrics.py +0 -0
  156. {logseq_matryca_parser-1.6.0 → logseq_matryca_parser-1.7.0}/tests/test_exceptions.py +0 -0
  157. {logseq_matryca_parser-1.6.0 → logseq_matryca_parser-1.7.0}/tests/test_extract_changelog.py +0 -0
  158. {logseq_matryca_parser-1.6.0 → logseq_matryca_parser-1.7.0}/tests/test_forge.py +0 -0
  159. {logseq_matryca_parser-1.6.0 → logseq_matryca_parser-1.7.0}/tests/test_graph.py +0 -0
  160. {logseq_matryca_parser-1.6.0 → logseq_matryca_parser-1.7.0}/tests/test_layer_boundary.py +0 -0
  161. {logseq_matryca_parser-1.6.0 → logseq_matryca_parser-1.7.0}/tests/test_logseq_markdown.py +0 -0
  162. {logseq_matryca_parser-1.6.0 → logseq_matryca_parser-1.7.0}/tests/test_logseq_paths.py +0 -0
  163. {logseq_matryca_parser-1.6.0 → logseq_matryca_parser-1.7.0}/tests/test_package_version.py +0 -0
  164. {logseq_matryca_parser-1.6.0 → logseq_matryca_parser-1.7.0}/tests/test_pre_release_roundtrip.py +0 -0
@@ -1,5 +1,5 @@
1
1
  # .cursorignore
2
- # (Nota: Cursor ignora già automaticamente tutto ciò che è nel .gitignore)
2
+ # Note: Cursor already ignores everything listed in .gitignore.
3
3
 
4
4
  # =========================
5
5
  # Python & Virtual Environments
@@ -27,10 +27,10 @@ build/
27
27
  *.egg-info/
28
28
 
29
29
  # =========================
30
- # Lockfiles (Letali per il Codebase Indexing)
30
+ # Lockfiles (harmful to codebase indexing)
31
31
  # =========================
32
- # I lockfile devono stare su Git, ma l'IA non deve MAI leggerli,
33
- # sono solo un muro di versioni incomprensibili.
32
+ # Lockfiles belong in Git, but the AI should never read them because they are
33
+ # only a wall of dependency versions with no useful semantic context.
34
34
  poetry.lock
35
35
  uv.lock
36
36
  package-lock.json
@@ -38,36 +38,36 @@ yarn.lock
38
38
  pnpm-lock.yaml
39
39
 
40
40
  # =========================
41
- # Output AI e Report (Evitare loop di contesto)
41
+ # AI Outputs and Reports (avoid context loops)
42
42
  # =========================
43
- # Se committi per sbaglio un output, non vogliamo che Cursor lo studi.
43
+ # If an output is committed accidentally, keep it out of the code index.
44
44
  repomix-output.*
45
45
  output_langchain/
46
46
  mappa_cervello.html
47
47
 
48
48
  # =========================
49
- # Dati di Test e Fixtures Mock
49
+ # Test Data and Mock Fixtures
50
50
  # =========================
51
- # Se hai dei file Markdown o JSON enormi che usi solo per testare il parser,
52
- # a Git servono, ma all'IA confondono solo le idee.
51
+ # Large Markdown or JSON fixtures may belong in Git for parser tests, but they
52
+ # should not consume indexing context.
53
53
  tests/fixtures/*.json
54
54
  tests/fixtures/*.edn
55
55
  tests/fixtures/*.md
56
56
  *.csv
57
57
 
58
58
  # =========================
59
- # Assets Vettoriali
59
+ # Vector Assets
60
60
  # =========================
61
- # Le immagini PNG/JPG Cursor le ignora da solo, ma gli SVG sono file di testo!
62
- # Se l'IA legge un SVG, legge migliaia di coordinate matematiche inutili.
61
+ # PNG and JPG files are ignored automatically, while SVG files are text and can
62
+ # add thousands of irrelevant coordinate values to the index.
63
63
  *.svg
64
64
 
65
65
  # =========================
66
- # File di Configurazione Editor
66
+ # Editor Configuration Files
67
67
  # =========================
68
68
  .vscode/
69
69
  .idea/
70
70
  .clinerules
71
71
 
72
- # Esclude lo storico delle metriche per preservare il contesto LLM
73
- metrics/history.json
72
+ # Exclude historical metrics to preserve LLM context.
73
+ metrics/history.json
@@ -1,12 +1,12 @@
1
1
  version: 2
2
2
  updates:
3
- # Mantiene aggiornate le dipendenze Python (legge il pyproject.toml)
3
+ # Keep Python dependencies current (reads pyproject.toml).
4
4
  - package-ecosystem: "pip"
5
5
  directory: "/"
6
6
  schedule:
7
7
  interval: "weekly"
8
8
 
9
- # Mantiene aggiornate le GitHub Actions (legge il tuo .github/workflows/ci.yml)
9
+ # Keep GitHub Actions current (reads .github/workflows/ci.yml).
10
10
  - package-ecosystem: "github-actions"
11
11
  directory: "/"
12
12
  schedule:
@@ -0,0 +1,83 @@
1
+ name: Logos Protocol CI
2
+
3
+ on:
4
+ push:
5
+ branches: [ "main" ]
6
+ pull_request:
7
+
8
+ concurrency:
9
+ group: ${{ github.workflow }}-${{ github.ref }}
10
+ cancel-in-progress: true
11
+
12
+ permissions:
13
+ contents: read
14
+
15
+ jobs:
16
+ build:
17
+ runs-on: ubuntu-latest
18
+ strategy:
19
+ fail-fast: false
20
+ matrix:
21
+ python-version: [ "3.12", "3.13" ]
22
+
23
+ steps:
24
+ - name: Checkout Code
25
+ uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
26
+
27
+ - name: Install uv
28
+ uses: astral-sh/setup-uv@08807647e7069bb48b6ef5acd8ec9567f424441b # v8.1.0
29
+ with:
30
+ python-version: ${{ matrix.python-version }}
31
+ enable-cache: true
32
+
33
+ - name: Sync dependencies
34
+ run: uv sync --all-extras
35
+
36
+ - name: Audit dependencies
37
+ run: |
38
+ uv export --no-dev --no-emit-workspace --no-hashes -o "${{ runner.temp }}/requirements-audit.txt"
39
+ uv run pip-audit -r "${{ runner.temp }}/requirements-audit.txt"
40
+
41
+ - name: Lint
42
+ run: make lint
43
+
44
+ - name: Type check
45
+ run: make check
46
+
47
+ - name: Test
48
+ run: make test
49
+
50
+ - name: Documentation check (non-mutating)
51
+ run: make docs-check
52
+
53
+ - name: Verify checkout unchanged
54
+ run: make verify-clean
55
+
56
+ package-contract:
57
+ runs-on: ubuntu-latest
58
+
59
+ steps:
60
+ - name: Checkout Code
61
+ uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
62
+
63
+ - name: Install uv
64
+ uses: astral-sh/setup-uv@08807647e7069bb48b6ef5acd8ec9567f424441b # v8.1.0
65
+ with:
66
+ python-version: "3.12"
67
+ enable-cache: true
68
+
69
+ - name: Build wheel and source distribution
70
+ run: uv build --out-dir dist-contract
71
+
72
+ - name: Verify wheel metadata and PEP 561 marker
73
+ run: uv run python scripts/check_wheel_contract.py dist-contract/*.whl
74
+
75
+ - name: Verify distribution metadata
76
+ run: uvx --from twine==6.2.0 twine check dist-contract/*
77
+
78
+ - name: Verify downstream typing from the wheel
79
+ run: |
80
+ uv venv "${{ runner.temp }}/typing-venv"
81
+ uv pip install --python "${{ runner.temp }}/typing-venv/bin/python" mypy dist-contract/*.whl
82
+ cd "${{ runner.temp }}"
83
+ "${{ runner.temp }}/typing-venv/bin/python" -m mypy --strict "${{ github.workspace }}/tests/typing_samples/public_api.py"
@@ -2,8 +2,8 @@ name: Daily Metrics Saver
2
2
 
3
3
  on:
4
4
  schedule:
5
- - cron: '0 3 * * *' # Gira ogni giorno alle 03:00 UTC
6
- workflow_dispatch: # Permette l'avvio manuale con un click
5
+ - cron: '0 3 * * *' # Runs daily at 03:00 UTC.
6
+ workflow_dispatch: # Allows one-click manual runs.
7
7
 
8
8
  concurrency:
9
9
  group: daily-metrics-${{ github.repository }}
@@ -13,7 +13,7 @@ permissions:
13
13
  contents: write
14
14
 
15
15
  env:
16
- # Forza l'ambiente di esecuzione su Node.js 24 per prevenire i warning di deprecazione di giugno 2026
16
+ # Force the Node.js 24 runtime to prevent the June 2026 deprecation warnings.
17
17
  FORCE_JAVASCRIPT_ACTIONS_TO_NODE24: true
18
18
 
19
19
  jobs:
@@ -21,12 +21,12 @@ jobs:
21
21
  runs-on: ubuntu-latest
22
22
  steps:
23
23
  - name: Checkout Repository
24
- uses: actions/checkout@v7
24
+ uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
25
25
  with:
26
26
  fetch-depth: 0
27
27
 
28
28
  - name: Set up Python
29
- uses: actions/setup-python@v6
29
+ uses: actions/setup-python@5fda3b95a4ea91299a34e894583c3862153e4b97 # v7.0.0
30
30
  with:
31
31
  python-version: '3.12'
32
32
 
@@ -0,0 +1,153 @@
1
+ name: Release
2
+
3
+ on:
4
+ push:
5
+ tags:
6
+ - "v*"
7
+
8
+ concurrency:
9
+ group: release-${{ github.ref }}
10
+ cancel-in-progress: false
11
+
12
+ permissions:
13
+ contents: read
14
+
15
+ jobs:
16
+ pre-flight:
17
+ name: Pre-flight checks (Python ${{ matrix.python-version }})
18
+ runs-on: ubuntu-latest
19
+ strategy:
20
+ fail-fast: false
21
+ matrix:
22
+ python-version: ["3.12", "3.13"]
23
+ steps:
24
+ - name: Checkout exact tag
25
+ uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
26
+
27
+ - name: Install uv
28
+ uses: astral-sh/setup-uv@08807647e7069bb48b6ef5acd8ec9567f424441b # v8.1.0
29
+ with:
30
+ python-version: ${{ matrix.python-version }}
31
+ enable-cache: true
32
+
33
+ - name: Sync locked dependencies
34
+ run: uv sync --locked --all-extras
35
+
36
+ - name: Audit production dependencies
37
+ run: |
38
+ uv export --no-dev --no-emit-workspace --no-hashes -o "${{ runner.temp }}/requirements-audit.txt"
39
+ uv run pip-audit -r "${{ runner.temp }}/requirements-audit.txt"
40
+
41
+ - name: Run full quality gate
42
+ run: make all
43
+
44
+ - name: Verify checkout unchanged
45
+ run: make verify-clean
46
+
47
+ build:
48
+ name: Build immutable release bundle
49
+ needs: pre-flight
50
+ runs-on: ubuntu-latest
51
+ steps:
52
+ - name: Checkout exact tag
53
+ uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
54
+ with:
55
+ fetch-depth: 0
56
+
57
+ - name: Install uv
58
+ uses: astral-sh/setup-uv@08807647e7069bb48b6ef5acd8ec9567f424441b # v8.1.0
59
+ with:
60
+ python-version: "3.12"
61
+ enable-cache: true
62
+
63
+ - name: Sync locked dependencies
64
+ run: uv sync --locked --all-extras
65
+
66
+ - name: Verify tag, source, runtime, and release notes
67
+ run: |
68
+ uv run python scripts/check_release_contract.py \
69
+ --tag "${GITHUB_REF_NAME}" \
70
+ --notes-out release-bundle/RELEASE_NOTES.md
71
+
72
+ - name: Build wheel and source distribution once
73
+ run: uv build --out-dir release-bundle/dist
74
+
75
+ - name: Verify wheel and package metadata
76
+ run: |
77
+ wheel_count=0
78
+ for wheel in release-bundle/dist/*.whl; do
79
+ uv run python scripts/check_wheel_contract.py "$wheel"
80
+ wheel_count=$((wheel_count + 1))
81
+ done
82
+ test "$wheel_count" -eq 1
83
+ uvx --from twine==6.2.0 twine check release-bundle/dist/*
84
+
85
+ - name: Record and verify distribution digests
86
+ working-directory: release-bundle
87
+ run: |
88
+ sha256sum dist/* > SHA256SUMS
89
+ sha256sum --check SHA256SUMS
90
+
91
+ - name: Upload immutable release bundle
92
+ uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2
93
+ with:
94
+ name: release-bundle-${{ github.ref_name }}
95
+ path: release-bundle/
96
+ if-no-files-found: error
97
+ retention-days: 30
98
+ compression-level: 0
99
+
100
+ publish:
101
+ name: Publish exact distributions to PyPI
102
+ needs: build
103
+ runs-on: ubuntu-latest
104
+ environment:
105
+ name: pypi
106
+ url: https://pypi.org/p/logseq-matryca-parser
107
+ permissions:
108
+ contents: read
109
+ id-token: write
110
+ steps:
111
+ - name: Download immutable release bundle
112
+ uses: actions/download-artifact@d3f86a106a0bac45b974a628896c90dbdf5c8093 # v4.3.0
113
+ with:
114
+ name: release-bundle-${{ github.ref_name }}
115
+ path: release-bundle
116
+
117
+ - name: Verify distribution digests
118
+ working-directory: release-bundle
119
+ run: sha256sum --check SHA256SUMS
120
+
121
+ - name: Publish package distributions with OIDC attestations
122
+ uses: pypa/gh-action-pypi-publish@cef221092ed1bacb1cc03d23a2d87d1d172e277b # v1.14.0
123
+ with:
124
+ packages-dir: release-bundle/dist/
125
+
126
+ github-release:
127
+ name: Publish GitHub Release from exact distributions
128
+ needs: publish
129
+ runs-on: ubuntu-latest
130
+ permissions:
131
+ contents: write
132
+ steps:
133
+ - name: Download immutable release bundle
134
+ uses: actions/download-artifact@d3f86a106a0bac45b974a628896c90dbdf5c8093 # v4.3.0
135
+ with:
136
+ name: release-bundle-${{ github.ref_name }}
137
+ path: release-bundle
138
+
139
+ - name: Verify distribution digests
140
+ working-directory: release-bundle
141
+ run: sha256sum --check SHA256SUMS
142
+
143
+ - name: Create GitHub Release with verified artifacts
144
+ uses: softprops/action-gh-release@b4309332981a82ec1c5618f44dd2e27cc8bfbfda # v3.0.0
145
+ with:
146
+ tag_name: ${{ github.ref_name }}
147
+ name: ${{ github.ref_name }}
148
+ body_path: release-bundle/RELEASE_NOTES.md
149
+ files: |
150
+ release-bundle/dist/*
151
+ release-bundle/SHA256SUMS
152
+ generate_release_notes: false
153
+ make_latest: true
@@ -0,0 +1,26 @@
1
+ # Audit code — maintainer intelligence
2
+
3
+ Maintainers may use **audit code** (local graph-based static analysis) to understand call chains, blast radius, and import cycles before structural work. **Do not** name specific third-party indexer products anywhere in this repository (issues, PRs, CHANGELOG, public docs, or agent config).
4
+
5
+ ## Always do
6
+
7
+ - Run **impact analysis** before editing hub symbols (`StackMachineParser._refresh_node`, `_expand_macros_and_embeds_impl`, `LogseqGraph.load_directory`, `invalidate_and_reload_page`).
8
+ - Use **query** / **context** for cross-module flows instead of guessing from grep alone.
9
+ - Run `check(cycles)` — expect **0** import cycles in `src/`.
10
+ - Run `make all` (and `make vendor-name-check`) after behavior or documentation changes.
11
+
12
+ ## Never do
13
+
14
+ - NEVER add vendor AST indexers to CI, Dockerfiles, or `pyproject.toml`.
15
+ - NEVER ignore **HIGH** or **CRITICAL** impact warnings on parser/graph hubs without explicit user approval.
16
+ - NEVER commit tool-specific cache directories — use `.git/info/exclude` locally (Ghost Tooling policy).
17
+
18
+ ## SSOT
19
+
20
+ | Document | Purpose |
21
+ |----------|---------|
22
+ | [`docs/CLEAN_CODE_ARCHITECTURE.md`](docs/CLEAN_CODE_ARCHITECTURE.md) | Uncle Bob rings, SOLID, public graph APIs |
23
+ | [`docs/internal/LOCAL_CODE_STUDY.md`](docs/internal/LOCAL_CODE_STUDY.md) | Maintainer audit-code runbook (generic MCP surface) |
24
+ | [`docs/internal/STATIC_ANALYSIS_POLICY.md`](docs/internal/STATIC_ANALYSIS_POLICY.md) | Ghost Tooling policy |
25
+
26
+ When the maintainer instructs you to use audit code tooling, follow their workflow — do not document product names in artifacts.
@@ -7,6 +7,69 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
7
7
 
8
8
  ## [Unreleased]
9
9
 
10
+ ## [1.7.0] - 2026-08-08
11
+
12
+ Minor release — structured diagnostics, deterministic title-collision handling,
13
+ arbitrary-depth parser refreshes, typed public APIs, vault-bound writer safety,
14
+ and a governed English documentation system. **No intentional breaking changes**
15
+ to stable package exports or default CLI behavior.
16
+
17
+ ### Added
18
+
19
+ - **Verified immutable release pipeline** — tag, source, runtime, and changelog
20
+ contracts now fail closed before packaging; Python 3.12/3.13 pre-flight runs
21
+ the full quality and dependency-audit gates; wheel and sdist are built once,
22
+ checked with Twine, checksummed, published to PyPI with OIDC attestations, and
23
+ attached byte-for-byte to the GitHub Release
24
+ ([#105](https://github.com/MarcoPorcellato/logseq-matryca-parser/issues/105)).
25
+
26
+ - **Structured diagnostic foundation** — stable immutable `Diagnostic`,
27
+ `DiagnosticCode`, and `DiagnosticSeverity` exports; deterministic
28
+ `collect_graph_diagnostics()` for broken block references; vault-relative
29
+ path enforcement; and pure JSON CLI output through `scan --diagnostics-json`
30
+ ([#110](https://github.com/MarcoPorcellato/logseq-matryca-parser/issues/110)).
31
+ - **Graph title-collision contract** — permissive loading now exposes stable
32
+ diagnostics for derived-title, frontmatter-title, and alias collisions while
33
+ preserving the existing deterministic winner and no-ghost invariants;
34
+ `strict_title_collisions=True` raises `PageTitleCollisionError`, and KINETIC
35
+ renders all findings with `scan --diagnostics`
36
+ ([#102](https://github.com/MarcoPorcellato/logseq-matryca-parser/issues/102)).
37
+ - **Documentation system guide** — [`docs/DOCUMENTATION_SYSTEM.md`](docs/DOCUMENTATION_SYSTEM.md) explains source authority, maintained versus historical surfaces, metadata, freshness, validation, the Matryca Knowledge projection workflow, and the repository's documentation evolution.
38
+ - **Synapse RAG example** — [`examples/run_synapse_rag.py`](examples/run_synapse_rag.py) demonstrates all four `SynapseAdapter` methods (`to_langchain_documents`, `to_llamaindex_nodes`, `to_context_enriched_chunks`, `_expand_macros_and_embeds`) plus table-driven embed expansion edge cases.
39
+ - **Embed expansion edge-case tests** — `TestEmbedExpansionEdgeCases` in [`tests/test_synapse.py`](tests/test_synapse.py) covers cycles, missing targets, and happy-path for both `{{embed [[Page]]}}` and `{{embed ((uuid))}}` (closes [#71](https://github.com/MarcoPorcellato/logseq-matryca-parser/issues/71)).
40
+ - **Contributor onboarding (wave 4)** — ten new Good First Issues (GFI-39…GFI-48) filed on GitHub ([#88](https://github.com/MarcoPorcellato/logseq-matryca-parser/issues/88)–[#97](https://github.com/MarcoPorcellato/logseq-matryca-parser/issues/97)); index updated in [`docs/GOOD_FIRST_ISSUES.md`](docs/GOOD_FIRST_ISSUES.md).
41
+
42
+ ### Changed
43
+
44
+ - **Immutable workflow dependencies** — all release and CI actions are pinned to
45
+ reviewed commit SHAs with readable release comments; the former independent
46
+ GitHub and PyPI tag workflows are consolidated into one ordered release graph.
47
+
48
+ - **Federated documentation profile** — aligned the maintained bundle with Matryca Knowledge `origin/main` at `7a3ebd8`, separating OKF lifecycle from Matryca classification and recording authority, freshness, provenance, and the still-pending private registry activation.
49
+ - **Ghost Tooling** — removed remaining vendor indexer blocks from `AGENTS.md` / `CLAUDE.md`; maintainer guidance now uses **audit code** terminology only.
50
+ - **Repository language** — translated the historical audit reports, design references, Logseq Read skill, maintainer configuration comments, parser warning, demo labels, and optional SYNAPSE dependency errors into English; contributor guidance now makes English the repository default ([#69](https://github.com/MarcoPorcellato/logseq-matryca-parser/issues/69)).
51
+ - **Documentation quality tranche** — added `scripts/check_documentation.py`, source `docs/maintained.toml`, and focused tests; wired the deterministic, non-mutating `docs-check` into `make all` and CI. This implements the source-side MKQ-3 gate; MKQ-4 remains pending until private `okf_entry_points` and projection activation pass against the merged source commit.
52
+
53
+ ### Fixed
54
+
55
+ - **Vault-bound writer and asset reads** — headless child writes now reject
56
+ external/untracked/symlink-swapped targets, verify target identity before
57
+ replacement, preserve permission and ownership metadata, expose typed safe
58
+ diagnostics and configurable limits, and support unified-diff dry runs;
59
+ `file://` and asset symlink reads are confined to the graph
60
+ ([#106](https://github.com/MarcoPorcellato/logseq-matryca-parser/issues/106)).
61
+ - **Deep parser refreshes** — immutable node updates now rebuild the complete
62
+ active branch to the root at arbitrary nesting depth, preserving soft breaks,
63
+ properties, fenced code, queries, list properties, ordering, identity, and
64
+ parent/left relationships ([#113](https://github.com/MarcoPorcellato/logseq-matryca-parser/issues/113)).
65
+ - **LENS topology** — unresolved wikilinks no longer create phantom page nodes when visualization uses a loaded `LogseqGraph`; valid page aliases and tags remain visible ([#59](https://github.com/MarcoPorcellato/logseq-matryca-parser/issues/59)).
66
+
67
+ ### Security
68
+
69
+ - **Artifact lineage** — PyPI publication must succeed before the GitHub Release
70
+ is created, and every consumer re-verifies the SHA-256 manifest for the exact
71
+ distributions produced by the single build job.
72
+
10
73
  ## [1.6.0] - 2026-07-02
11
74
 
12
75
  Minor release — Clean Architecture v1 structural slices (SRP/OCP), new public graph APIs, layer-boundary CI, and documentation SSOT. **No intentional breaking changes** to existing `matryca-parse` CLI behavior or stable package exports.
@@ -0,0 +1,26 @@
1
+ # Audit code — maintainer intelligence
2
+
3
+ Maintainers may use **audit code** (local graph-based static analysis) to understand call chains, blast radius, and import cycles before structural work. **Do not** name specific third-party indexer products anywhere in this repository (issues, PRs, CHANGELOG, public docs, or agent config).
4
+
5
+ ## Always do
6
+
7
+ - Run **impact analysis** before editing hub symbols (`StackMachineParser._refresh_node`, `_expand_macros_and_embeds_impl`, `LogseqGraph.load_directory`, `invalidate_and_reload_page`).
8
+ - Use **query** / **context** for cross-module flows instead of guessing from grep alone.
9
+ - Run `check(cycles)` — expect **0** import cycles in `src/`.
10
+ - Run `make all` (and `make vendor-name-check`) after behavior or documentation changes.
11
+
12
+ ## Never do
13
+
14
+ - NEVER add vendor AST indexers to CI, Dockerfiles, or `pyproject.toml`.
15
+ - NEVER ignore **HIGH** or **CRITICAL** impact warnings on parser/graph hubs without explicit user approval.
16
+ - NEVER commit tool-specific cache directories — use `.git/info/exclude` locally (Ghost Tooling policy).
17
+
18
+ ## SSOT
19
+
20
+ | Document | Purpose |
21
+ |----------|---------|
22
+ | [`docs/CLEAN_CODE_ARCHITECTURE.md`](docs/CLEAN_CODE_ARCHITECTURE.md) | Uncle Bob rings, SOLID, public graph APIs |
23
+ | [`docs/internal/LOCAL_CODE_STUDY.md`](docs/internal/LOCAL_CODE_STUDY.md) | Maintainer audit-code runbook (generic MCP surface) |
24
+ | [`docs/internal/STATIC_ANALYSIS_POLICY.md`](docs/internal/STATIC_ANALYSIS_POLICY.md) | Ghost Tooling policy |
25
+
26
+ When the maintainer instructs you to use audit code tooling, follow their workflow — do not document product names in artifacts.
@@ -17,18 +17,32 @@ User-facing behavior is documented in:
17
17
  - [`docs/ARCHITECTURE.md`](docs/ARCHITECTURE.md) — LOGOS, SYNAPSE, `LogseqGraph`, agents, and data flow
18
18
  - [`docs/internal/LOCAL_CODE_STUDY.md`](docs/internal/LOCAL_CODE_STUDY.md) — maintainer local code audit runbook (not for public issues/CHANGELOG)
19
19
  - [`docs/logseq_ast_primer.md`](docs/logseq_ast_primer.md) — Logseq Spatial Markdown domain rules
20
- - [`CHANGELOG.md`](CHANGELOG.md) — shipped releases (current: **1.6.0**) and **Unreleased** changes (Keep a Changelog)
20
+ - [`CHANGELOG.md`](CHANGELOG.md) — shipped releases (current: **1.7.0**) and **Unreleased** changes (Keep a Changelog)
21
21
  - [`docs/RELEASE_PROCESS.md`](docs/RELEASE_PROCESS.md) — version bump, tag, and PyPI publish checklist
22
22
  - [`docs/CODEQL.md`](docs/CODEQL.md) — CodeQL default setup (no custom `codeql.yml`)
23
23
  - [`docs/GOOD_FIRST_ISSUES.md`](docs/GOOD_FIRST_ISSUES.md) — curated starter tasks for new contributors
24
24
  - [`docs/COOKBOOK.md`](docs/COOKBOOK.md) — integration recipes (Synapse, graph query, watcher)
25
25
  - [`docs/README.md`](docs/README.md) — documentation index (active vs historical)
26
+ - [`docs/DOCUMENTATION_SYSTEM.md`](docs/DOCUMENTATION_SYSTEM.md) — documentation authority, metadata, lifecycle, validation, and federation workflow
26
27
  - [`docs/rfc/OLLAMA_RAG.md`](docs/rfc/OLLAMA_RAG.md) — draft RFC for Ollama local RAG ([#34](https://github.com/MarcoPorcellato/logseq-matryca-parser/issues/34))
27
28
  - [`docs/quality/`](docs/quality/) — architecture backlog, GitHub roadmap (v1.6), triage
28
29
  - [`docs/internal/STATIC_ANALYSIS_POLICY.md`](docs/internal/STATIC_ANALYSIS_POLICY.md) — Ghost Tooling policy (vendor-agnostic CI and public docs)
29
30
 
30
31
  When you add or change observable parser or graph behavior, update the relevant doc sections and add a bullet under **`## [Unreleased]`** in `CHANGELOG.md` (see [`.cursor/rules/05-auto-changelog.mdc`](.cursor/rules/05-auto-changelog.mdc)).
31
32
 
33
+ For documentation changes, first classify the target as maintained, active,
34
+ historical, or generated. Follow the metadata, freshness, supersession, and
35
+ projection rules in [`docs/DOCUMENTATION_SYSTEM.md`](docs/DOCUMENTATION_SYSTEM.md).
36
+
37
+ ### Repository language
38
+
39
+ Use English for documentation, changelog entries, issue and pull-request text,
40
+ code comments, log messages, CLI help, and maintainer-facing configuration.
41
+ Non-English text is appropriate only when it is the data under test, a quoted
42
+ source title, or an intentionally localized runtime fixture. Generated repository
43
+ packs are read-only snapshots: regenerate them from their source files instead of
44
+ editing their embedded copies.
45
+
32
46
  ### Tooling policy
33
47
 
34
48
  CI and automation in this repository are limited to the core runtime and standard open-source linters (Ruff, Mypy, Pytest, CodeQL). Do not add third-party AST indexers, experimental analysis scripts, or custom MCP servers to the public tree, workflows, or `pyproject.toml`. See [`docs/internal/STATIC_ANALYSIS_POLICY.md`](docs/internal/STATIC_ANALYSIS_POLICY.md).
@@ -140,27 +154,38 @@ git checkout -b feat/add-html-exporter
140
154
 
141
155
  ### 4. Code Quality & Linting (Mandatory)
142
156
 
143
- CI runs the same commands as your local environment: `uv sync --all-extras`, then `make lint`, `make check`, and `make test`. Before committing, run the full gate:
157
+ CI runs the same non-mutating checks as your local environment: `uv sync
158
+ --all-extras`, then `make lint`, `make check`, `make test`, and
159
+ `make docs-check`. It finishes with `make verify-clean` to prove that no quality
160
+ step changed the submitted checkout. Before committing, run the full local gate:
144
161
 
145
162
  ```bash
146
163
  make all
147
164
  ```
148
165
 
149
- As of **v1.6.0**, `make all` runs **456** pytest cases with **≥80%** line coverage on `src/logseq_matryca_parser` (currently ~**91%**), plus `make vendor-name-check`. New contributors should mirror patterns in [`docs/GOOD_FIRST_ISSUES.md`](docs/GOOD_FIRST_ISSUES.md) and the module map in that file’s **Test suite** section.
166
+ `make all` runs the current pytest suite with a **≥80%** line-coverage gate on
167
+ `src/logseq_matryca_parser`, plus the vendor-neutral documentation check. Exact
168
+ counts are intentionally not duplicated here; see the dated
169
+ [repository audit](docs/REPOSITORY_STELLAR_ROADMAP_2026-08-06.md) for a verified
170
+ snapshot. New contributors should mirror patterns in
171
+ [`docs/GOOD_FIRST_ISSUES.md`](docs/GOOD_FIRST_ISSUES.md).
150
172
 
151
173
  Or run each step individually:
152
174
 
153
175
  ```bash
154
- make lint # Ruff (with auto-fix)
155
- make check # Mypy on src/, tests/, examples/
176
+ make lint # Ruff verification; never rewrites files
177
+ make check # Mypy on src/, tests/, examples/, and the documentation checker
156
178
  make test # Pytest on tests/
157
179
  ```
158
180
 
181
+ When you explicitly want Ruff to repair local lint findings, use
182
+ `make lint-fix`, inspect the resulting diff, and rerun `make all`.
183
+
159
184
  Equivalent `uv run` invocations:
160
185
 
161
186
  ```bash
162
- uv run ruff check . --fix
163
- uv run mypy src/ tests/ examples/
187
+ uv run ruff check .
188
+ uv run mypy src/ tests/ examples/ scripts/check_documentation.py
164
189
  uv run pytest -v tests/
165
190
  ```
166
191
 
@@ -0,0 +1,31 @@
1
+ .PHONY: all lint lint-fix check test build vendor-name-check docs-check verify-clean
2
+
3
+ all: lint check vendor-name-check docs-check test
4
+
5
+ lint:
6
+ uv run ruff check .
7
+
8
+ lint-fix:
9
+ uv run ruff check . --fix
10
+
11
+ check:
12
+ uv run mypy src/ tests/ examples/ scripts/check_documentation.py scripts/check_release_contract.py scripts/check_wheel_contract.py
13
+
14
+ vendor-name-check:
15
+ bash scripts/check_vendor_free_docs.sh
16
+
17
+ test:
18
+ uv run pytest --cov=src/logseq_matryca_parser --cov-report=term-missing --cov-fail-under=80 -v tests/
19
+
20
+ docs-check:
21
+ uv run python scripts/check_documentation.py --root . --profile docs/maintained.toml --as-of-date $$(date -u +%F)
22
+
23
+ verify-clean:
24
+ @status="$$(git status --porcelain)"; \
25
+ if [ -n "$$status" ]; then \
26
+ printf '%s\n' "$$status"; \
27
+ exit 1; \
28
+ fi
29
+
30
+ build:
31
+ uv run python -m nuitka --standalone --onefile src/logseq_matryca_parser/kinetic.py