logseq-matryca-parser 1.4.2__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.4.2 → logseq_matryca_parser-1.7.0}/.cursorignore +15 -15
  2. logseq_matryca_parser-1.7.0/.github/ISSUE_TEMPLATE/clean_architecture.yml +61 -0
  3. {logseq_matryca_parser-1.4.2 → logseq_matryca_parser-1.7.0}/.github/ISSUE_TEMPLATE/config.yml +3 -0
  4. logseq_matryca_parser-1.7.0/.github/clean_arch_issue_numbers.txt +7 -0
  5. {logseq_matryca_parser-1.4.2 → logseq_matryca_parser-1.7.0}/.github/dependabot.yml +2 -2
  6. {logseq_matryca_parser-1.4.2 → logseq_matryca_parser-1.7.0}/.github/labels.yml +8 -0
  7. logseq_matryca_parser-1.7.0/.github/scripts/create_clean_arch_issues.sh +277 -0
  8. logseq_matryca_parser-1.7.0/.github/workflows/ci.yml +83 -0
  9. {logseq_matryca_parser-1.4.2 → logseq_matryca_parser-1.7.0}/.github/workflows/daily-metrics.yml +5 -5
  10. logseq_matryca_parser-1.7.0/.github/workflows/pypi_publish.yml +153 -0
  11. logseq_matryca_parser-1.7.0/AGENTS.md +26 -0
  12. {logseq_matryca_parser-1.4.2 → logseq_matryca_parser-1.7.0}/CHANGELOG.md +99 -3
  13. logseq_matryca_parser-1.7.0/CLAUDE.md +26 -0
  14. {logseq_matryca_parser-1.4.2 → logseq_matryca_parser-1.7.0}/CONTRIBUTING.md +54 -7
  15. logseq_matryca_parser-1.7.0/Makefile +31 -0
  16. {logseq_matryca_parser-1.4.2 → logseq_matryca_parser-1.7.0}/PKG-INFO +34 -6
  17. {logseq_matryca_parser-1.4.2 → logseq_matryca_parser-1.7.0}/README.md +33 -5
  18. {logseq_matryca_parser-1.4.2 → logseq_matryca_parser-1.7.0}/SECURITY.md +2 -2
  19. logseq_matryca_parser-1.7.0/claude-skill-logseq-read/SKILL.md +83 -0
  20. {logseq_matryca_parser-1.4.2 → logseq_matryca_parser-1.7.0}/claude-skill-logseq-read/scripts/parse_logseq.py +21 -21
  21. {logseq_matryca_parser-1.4.2 → logseq_matryca_parser-1.7.0}/docs/ARCHITECTURE.md +59 -6
  22. logseq_matryca_parser-1.7.0/docs/BUG_HUNT_REPORT.md +1249 -0
  23. logseq_matryca_parser-1.7.0/docs/CLEAN_CODE_ARCHITECTURE.md +322 -0
  24. {logseq_matryca_parser-1.4.2 → logseq_matryca_parser-1.7.0}/docs/CODEQL.md +1 -1
  25. {logseq_matryca_parser-1.4.2 → logseq_matryca_parser-1.7.0}/docs/COOKBOOK.md +27 -1
  26. logseq_matryca_parser-1.7.0/docs/DOCUMENTATION_SYSTEM.md +297 -0
  27. {logseq_matryca_parser-1.4.2 → logseq_matryca_parser-1.7.0}/docs/GOOD_FIRST_ISSUES.md +54 -20
  28. logseq_matryca_parser-1.7.0/docs/README.md +80 -0
  29. logseq_matryca_parser-1.7.0/docs/RELEASE_PROCESS.md +118 -0
  30. logseq_matryca_parser-1.7.0/docs/REPOSITORY_IMPROVEMENT_STUDY_2026-07-28.md +439 -0
  31. logseq_matryca_parser-1.7.0/docs/REPOSITORY_STELLAR_ROADMAP_2026-08-06.md +726 -0
  32. logseq_matryca_parser-1.7.0/docs/decisions/index.md +36 -0
  33. {logseq_matryca_parser-1.4.2 → logseq_matryca_parser-1.7.0}/docs/design-docs/LOGSEQ_ASSET_RESOLUTION_SPEC.md +104 -104
  34. {logseq_matryca_parser-1.4.2 → logseq_matryca_parser-1.7.0}/docs/design-docs/LOGSEQ_DATASCRIPT_MAPPING.md +96 -96
  35. {logseq_matryca_parser-1.4.2 → logseq_matryca_parser-1.7.0}/docs/design-docs/LOGSEQ_TEMPORAL_ONTOLOGY.md +114 -114
  36. {logseq_matryca_parser-1.4.2 → logseq_matryca_parser-1.7.0}/docs/design-docs/OFFICIAL_MLDOC_SPECS.md +68 -68
  37. logseq_matryca_parser-1.7.0/docs/index.md +47 -0
  38. logseq_matryca_parser-1.7.0/docs/internal/LOCAL_CODE_STUDY.md +117 -0
  39. {logseq_matryca_parser-1.4.2 → logseq_matryca_parser-1.7.0}/docs/internal/STATIC_ANALYSIS_POLICY.md +1 -0
  40. logseq_matryca_parser-1.7.0/docs/log.md +109 -0
  41. logseq_matryca_parser-1.7.0/docs/maintained.toml +34 -0
  42. logseq_matryca_parser-1.7.0/docs/quality/CLEAN_ARCH_BACKLOG.md +67 -0
  43. logseq_matryca_parser-1.7.0/docs/quality/GITHUB_CLEAN_ARCH_ROADMAP.md +87 -0
  44. logseq_matryca_parser-1.7.0/docs/quality/ISSUE_RECONCILIATION_2026-08-06.md +119 -0
  45. logseq_matryca_parser-1.7.0/docs/quality/ISSUE_TRIAGE_2026-07.md +94 -0
  46. logseq_matryca_parser-1.7.0/docs/quality/README.md +47 -0
  47. logseq_matryca_parser-1.7.0/docs/reference/API_STABILITY.md +100 -0
  48. logseq_matryca_parser-1.7.0/docs/reference/DIAGNOSTICS.md +103 -0
  49. logseq_matryca_parser-1.7.0/docs/reference/FILESYSTEM_SAFETY.md +89 -0
  50. logseq_matryca_parser-1.7.0/docs/reference/index.md +55 -0
  51. {logseq_matryca_parser-1.4.2 → logseq_matryca_parser-1.7.0}/metrics/index.json +3 -2
  52. {logseq_matryca_parser-1.4.2 → logseq_matryca_parser-1.7.0}/metrics/quarters/2026-Q2.json +198 -0
  53. logseq_matryca_parser-1.7.0/metrics/quarters/2026-Q3.json +6741 -0
  54. {logseq_matryca_parser-1.4.2 → logseq_matryca_parser-1.7.0}/pyproject.toml +9 -2
  55. logseq_matryca_parser-1.7.0/release-bundle/RELEASE_NOTES.md +62 -0
  56. logseq_matryca_parser-1.7.0/scripts/check_documentation.py +260 -0
  57. logseq_matryca_parser-1.7.0/scripts/check_release_contract.py +128 -0
  58. logseq_matryca_parser-1.7.0/scripts/check_vendor_free_docs.sh +20 -0
  59. logseq_matryca_parser-1.7.0/scripts/check_wheel_contract.py +80 -0
  60. {logseq_matryca_parser-1.4.2 → logseq_matryca_parser-1.7.0}/src/logseq_matryca_parser/__init__.py +17 -4
  61. logseq_matryca_parser-1.7.0/src/logseq_matryca_parser/_version.py +3 -0
  62. {logseq_matryca_parser-1.4.2 → logseq_matryca_parser-1.7.0}/src/logseq_matryca_parser/agent_writer.py +208 -7
  63. logseq_matryca_parser-1.7.0/src/logseq_matryca_parser/diagnostics.py +127 -0
  64. logseq_matryca_parser-1.7.0/src/logseq_matryca_parser/exceptions.py +47 -0
  65. {logseq_matryca_parser-1.4.2 → logseq_matryca_parser-1.7.0}/src/logseq_matryca_parser/graph.py +107 -5
  66. logseq_matryca_parser-1.7.0/src/logseq_matryca_parser/kinetic.py +230 -0
  67. logseq_matryca_parser-1.7.0/src/logseq_matryca_parser/kinetic_commands.py +449 -0
  68. logseq_matryca_parser-1.7.0/src/logseq_matryca_parser/kinetic_export.py +133 -0
  69. {logseq_matryca_parser-1.4.2 → logseq_matryca_parser-1.7.0}/src/logseq_matryca_parser/lens.py +7 -5
  70. {logseq_matryca_parser-1.4.2 → logseq_matryca_parser-1.7.0}/src/logseq_matryca_parser/logos_core.py +20 -19
  71. {logseq_matryca_parser-1.4.2 → logseq_matryca_parser-1.7.0}/src/logseq_matryca_parser/logos_parser.py +10 -17
  72. logseq_matryca_parser-1.7.0/src/logseq_matryca_parser/py.typed +1 -0
  73. {logseq_matryca_parser-1.4.2 → logseq_matryca_parser-1.7.0}/src/logseq_matryca_parser/synapse.py +7 -64
  74. logseq_matryca_parser-1.7.0/src/logseq_matryca_parser/synapse_embed.py +180 -0
  75. logseq_matryca_parser-1.7.0/tests/test_check_documentation.py +176 -0
  76. logseq_matryca_parser-1.7.0/tests/test_check_release_contract.py +85 -0
  77. logseq_matryca_parser-1.7.0/tests/test_check_wheel_contract.py +58 -0
  78. logseq_matryca_parser-1.7.0/tests/test_diagnostics.py +100 -0
  79. logseq_matryca_parser-1.7.0/tests/test_graph_collisions.py +128 -0
  80. {logseq_matryca_parser-1.4.2 → logseq_matryca_parser-1.7.0}/tests/test_kinetic.py +60 -3
  81. logseq_matryca_parser-1.7.0/tests/test_layer_boundary.py +122 -0
  82. {logseq_matryca_parser-1.4.2 → logseq_matryca_parser-1.7.0}/tests/test_lens.py +21 -0
  83. {logseq_matryca_parser-1.4.2 → logseq_matryca_parser-1.7.0}/tests/test_logos_parser.py +1 -1
  84. logseq_matryca_parser-1.7.0/tests/test_parser_deep_refresh.py +135 -0
  85. logseq_matryca_parser-1.7.0/tests/test_public_api_contract.py +90 -0
  86. logseq_matryca_parser-1.7.0/tests/test_quality_gate_contract.py +76 -0
  87. {logseq_matryca_parser-1.4.2 → logseq_matryca_parser-1.7.0}/tests/test_synapse.py +99 -1
  88. logseq_matryca_parser-1.7.0/tests/test_writer_security.py +212 -0
  89. logseq_matryca_parser-1.7.0/tests/typing_samples/public_api.py +12 -0
  90. {logseq_matryca_parser-1.4.2 → logseq_matryca_parser-1.7.0}/uv.lock +68 -67
  91. logseq_matryca_parser-1.4.2/.github/workflows/ci.yml +0 -49
  92. logseq_matryca_parser-1.4.2/.github/workflows/github_release.yml +0 -53
  93. logseq_matryca_parser-1.4.2/.github/workflows/pypi_publish.yml +0 -61
  94. logseq_matryca_parser-1.4.2/Makefile +0 -15
  95. logseq_matryca_parser-1.4.2/claude-skill-logseq-read/SKILL.md +0 -83
  96. logseq_matryca_parser-1.4.2/docs/BUG_HUNT_REPORT.md +0 -1251
  97. logseq_matryca_parser-1.4.2/docs/README.md +0 -37
  98. logseq_matryca_parser-1.4.2/docs/RELEASE_PROCESS.md +0 -85
  99. logseq_matryca_parser-1.4.2/src/logseq_matryca_parser/exceptions.py +0 -17
  100. logseq_matryca_parser-1.4.2/src/logseq_matryca_parser/kinetic.py +0 -674
  101. {logseq_matryca_parser-1.4.2 → logseq_matryca_parser-1.7.0}/.cursorrules +0 -0
  102. {logseq_matryca_parser-1.4.2 → logseq_matryca_parser-1.7.0}/.github/CODEOWNERS +0 -0
  103. {logseq_matryca_parser-1.4.2 → logseq_matryca_parser-1.7.0}/.github/FUNDING.yml +0 -0
  104. {logseq_matryca_parser-1.4.2 → logseq_matryca_parser-1.7.0}/.github/ISSUE_TEMPLATE/bug_report.yml +0 -0
  105. {logseq_matryca_parser-1.4.2 → logseq_matryca_parser-1.7.0}/.github/ISSUE_TEMPLATE/feature_request.yml +0 -0
  106. {logseq_matryca_parser-1.4.2 → logseq_matryca_parser-1.7.0}/.github/PULL_REQUEST_TEMPLATE.md +0 -0
  107. {logseq_matryca_parser-1.4.2 → logseq_matryca_parser-1.7.0}/.github/scripts/create_good_first_issues.sh +0 -0
  108. {logseq_matryca_parser-1.4.2 → logseq_matryca_parser-1.7.0}/.gitignore +0 -0
  109. {logseq_matryca_parser-1.4.2 → logseq_matryca_parser-1.7.0}/.pre-commit-config.yaml +0 -0
  110. {logseq_matryca_parser-1.4.2 → logseq_matryca_parser-1.7.0}/.repomixignore +0 -0
  111. {logseq_matryca_parser-1.4.2 → logseq_matryca_parser-1.7.0}/CODE_OF_CONDUCT.md +0 -0
  112. {logseq_matryca_parser-1.4.2 → logseq_matryca_parser-1.7.0}/LICENSE +0 -0
  113. {logseq_matryca_parser-1.4.2 → logseq_matryca_parser-1.7.0}/NOTICE +0 -0
  114. {logseq_matryca_parser-1.4.2 → logseq_matryca_parser-1.7.0}/docs/design-docs/ARCHITECTURE_BLUEPRINT.md +0 -0
  115. {logseq_matryca_parser-1.4.2 → logseq_matryca_parser-1.7.0}/docs/design-docs/CODE_SCAFFOLD.md +0 -0
  116. {logseq_matryca_parser-1.4.2 → logseq_matryca_parser-1.7.0}/docs/design-docs/README.md +0 -0
  117. {logseq_matryca_parser-1.4.2 → logseq_matryca_parser-1.7.0}/docs/design-docs/REFERENCE_SPEC.md +0 -0
  118. {logseq_matryca_parser-1.4.2 → logseq_matryca_parser-1.7.0}/docs/error_log.md +0 -0
  119. {logseq_matryca_parser-1.4.2 → logseq_matryca_parser-1.7.0}/docs/logseq_ast_primer.md +0 -0
  120. {logseq_matryca_parser-1.4.2 → logseq_matryca_parser-1.7.0}/docs/rfc/OLLAMA_RAG.md +0 -0
  121. {logseq_matryca_parser-1.4.2 → logseq_matryca_parser-1.7.0}/docs/roadmaps/ROADMAP_AGENT_NATIVE_XRAY.md +0 -0
  122. {logseq_matryca_parser-1.4.2 → logseq_matryca_parser-1.7.0}/docs/roadmaps/ROADMAP_CLI_HYDRATION_AND_ENRICHMENT.md +0 -0
  123. {logseq_matryca_parser-1.4.2 → logseq_matryca_parser-1.7.0}/docs/roadmaps/ROADMAP_CONTEXT_SYNTHESIS_AND_SCOPING.md +0 -0
  124. {logseq_matryca_parser-1.4.2 → logseq_matryca_parser-1.7.0}/docs/roadmaps/ROADMAP_EMBED_EXPANSION_AND_FLUENT_QUERIES.md +0 -0
  125. {logseq_matryca_parser-1.4.2 → logseq_matryca_parser-1.7.0}/docs/roadmaps/ROADMAP_GRAPH_RAG_SEMANTICS.md +0 -0
  126. {logseq_matryca_parser-1.4.2 → logseq_matryca_parser-1.7.0}/docs/roadmaps/ROADMAP_HEADLESS_WRITER.md +0 -0
  127. {logseq_matryca_parser-1.4.2 → logseq_matryca_parser-1.7.0}/docs/roadmaps/ROADMAP_INCREMENTAL_WATCHER.md +0 -0
  128. {logseq_matryca_parser-1.4.2 → logseq_matryca_parser-1.7.0}/docs/roadmaps/ROADMAP_INLINE_SHIELD_AND_NAMESPACES.md +0 -0
  129. {logseq_matryca_parser-1.4.2 → logseq_matryca_parser-1.7.0}/docs/roadmaps/ROADMAP_OBSIDIAN_ADAPTER.md +0 -0
  130. {logseq_matryca_parser-1.4.2 → logseq_matryca_parser-1.7.0}/docs/roadmaps/ROADMAP_ROBUSTNESS_AND_SOFT_BREAKS.md +0 -0
  131. {logseq_matryca_parser-1.4.2 → logseq_matryca_parser-1.7.0}/docs/roadmaps/ROADMAP_TOML_FIX_AND_PYPI_DISTRIBUTION.md +0 -0
  132. {logseq_matryca_parser-1.4.2 → logseq_matryca_parser-1.7.0}/docs/roadmaps/ROADMAP_UUID_AND_GRAPH_SUPERPOWERS.md +0 -0
  133. {logseq_matryca_parser-1.4.2 → logseq_matryca_parser-1.7.0}/examples/demo_logseq_journal.md +0 -0
  134. {logseq_matryca_parser-1.4.2 → logseq_matryca_parser-1.7.0}/examples/run_demo.py +0 -0
  135. {logseq_matryca_parser-1.4.2 → logseq_matryca_parser-1.7.0}/legacy/local_digestor.py +0 -0
  136. {logseq_matryca_parser-1.4.2 → logseq_matryca_parser-1.7.0}/lib/bindings/utils.js +0 -0
  137. {logseq_matryca_parser-1.4.2 → logseq_matryca_parser-1.7.0}/lib/tom-select/tom-select.complete.min.js +0 -0
  138. {logseq_matryca_parser-1.4.2 → logseq_matryca_parser-1.7.0}/lib/tom-select/tom-select.css +0 -0
  139. {logseq_matryca_parser-1.4.2 → logseq_matryca_parser-1.7.0}/lib/vis-9.1.2/vis-network.css +0 -0
  140. {logseq_matryca_parser-1.4.2 → logseq_matryca_parser-1.7.0}/lib/vis-9.1.2/vis-network.min.js +0 -0
  141. {logseq_matryca_parser-1.4.2 → logseq_matryca_parser-1.7.0}/repomix-output-parser.xml +0 -0
  142. {logseq_matryca_parser-1.4.2 → logseq_matryca_parser-1.7.0}/scripts/__init__.py +0 -0
  143. {logseq_matryca_parser-1.4.2 → logseq_matryca_parser-1.7.0}/scripts/archive_repository_metrics.py +0 -0
  144. {logseq_matryca_parser-1.4.2 → logseq_matryca_parser-1.7.0}/scripts/debug_pre_release.py +0 -0
  145. {logseq_matryca_parser-1.4.2 → logseq_matryca_parser-1.7.0}/scripts/extract_changelog.py +0 -0
  146. {logseq_matryca_parser-1.4.2 → logseq_matryca_parser-1.7.0}/src/logseq_matryca_parser/.gitignore +0 -0
  147. {logseq_matryca_parser-1.4.2 → logseq_matryca_parser-1.7.0}/src/logseq_matryca_parser/NOTICE +0 -0
  148. {logseq_matryca_parser-1.4.2 → logseq_matryca_parser-1.7.0}/src/logseq_matryca_parser/__main__.py +0 -0
  149. {logseq_matryca_parser-1.4.2 → logseq_matryca_parser-1.7.0}/src/logseq_matryca_parser/agent_press.py +0 -0
  150. {logseq_matryca_parser-1.4.2 → logseq_matryca_parser-1.7.0}/src/logseq_matryca_parser/forge.py +0 -0
  151. {logseq_matryca_parser-1.4.2 → logseq_matryca_parser-1.7.0}/src/logseq_matryca_parser/logseq_markdown.py +0 -0
  152. {logseq_matryca_parser-1.4.2 → logseq_matryca_parser-1.7.0}/src/logseq_matryca_parser/logseq_paths.py +0 -0
  153. {logseq_matryca_parser-1.4.2 → logseq_matryca_parser-1.7.0}/src/logseq_matryca_parser/pyproject.toml +0 -0
  154. {logseq_matryca_parser-1.4.2 → logseq_matryca_parser-1.7.0}/tests/test_agent_press.py +0 -0
  155. {logseq_matryca_parser-1.4.2 → logseq_matryca_parser-1.7.0}/tests/test_agent_writer.py +0 -0
  156. {logseq_matryca_parser-1.4.2 → logseq_matryca_parser-1.7.0}/tests/test_archive_repository_metrics.py +0 -0
  157. {logseq_matryca_parser-1.4.2 → logseq_matryca_parser-1.7.0}/tests/test_exceptions.py +0 -0
  158. {logseq_matryca_parser-1.4.2 → logseq_matryca_parser-1.7.0}/tests/test_extract_changelog.py +0 -0
  159. {logseq_matryca_parser-1.4.2 → logseq_matryca_parser-1.7.0}/tests/test_forge.py +0 -0
  160. {logseq_matryca_parser-1.4.2 → logseq_matryca_parser-1.7.0}/tests/test_graph.py +0 -0
  161. {logseq_matryca_parser-1.4.2 → logseq_matryca_parser-1.7.0}/tests/test_logseq_markdown.py +0 -0
  162. {logseq_matryca_parser-1.4.2 → logseq_matryca_parser-1.7.0}/tests/test_logseq_paths.py +0 -0
  163. {logseq_matryca_parser-1.4.2 → logseq_matryca_parser-1.7.0}/tests/test_package_version.py +0 -0
  164. {logseq_matryca_parser-1.4.2 → 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
@@ -0,0 +1,61 @@
1
+ name: Clean Architecture slice
2
+ description: Structural refactor or layer-boundary work (Uncle Bob contract)
3
+ title: "refactor: "
4
+ labels:
5
+ - architecture
6
+ - clean-code
7
+ body:
8
+ - type: markdown
9
+ attributes:
10
+ value: |
11
+ Use this template for SRP/OCP/ISP/DIP slices. SSOT: [CLEAN_CODE_ARCHITECTURE.md](https://github.com/MarcoPorcellato/logseq-matryca-parser/blob/main/docs/CLEAN_CODE_ARCHITECTURE.md)
12
+ - type: textarea
13
+ id: problem
14
+ attributes:
15
+ label: Problem
16
+ description: Operator- or maintainer-visible issue in one paragraph
17
+ validations:
18
+ required: true
19
+ - type: textarea
20
+ id: lens
21
+ attributes:
22
+ label: Clean Architecture lens
23
+ description: "Table: Ring | SOLID violation | dependency-rule note"
24
+ value: |
25
+ | Ring | SOLID | Dependency rule |
26
+ |------|-------|-----------------|
27
+ | | | |
28
+ validations:
29
+ required: true
30
+ - type: textarea
31
+ id: reproduction
32
+ attributes:
33
+ label: Reproduction
34
+ description: Minimal markdown fixture, Python probe, or import-graph note
35
+ validations:
36
+ required: true
37
+ - type: textarea
38
+ id: expected
39
+ attributes:
40
+ label: Expected vs actual
41
+ description: Precise strings, counts, or module boundaries
42
+ validations:
43
+ required: true
44
+ - type: textarea
45
+ id: fix
46
+ attributes:
47
+ label: Suggested fix
48
+ description: Stay inside the correct ring; no drive-by refactors
49
+ validations:
50
+ required: true
51
+ - type: textarea
52
+ id: dod
53
+ attributes:
54
+ label: Definition of Done
55
+ value: |
56
+ - [ ] `make all` passes (Ruff, Mypy, pytest ≥80% coverage)
57
+ - [ ] `make vendor-name-check` passes
58
+ - [ ] `CHANGELOG.md` updated if operator-visible
59
+ - [ ] `docs/quality/CLEAN_ARCH_BACKLOG.md` updated if DEBT item closed
60
+ validations:
61
+ required: true
@@ -1,5 +1,8 @@
1
1
  blank_issues_enabled: false
2
2
  contact_links:
3
+ - name: Clean Architecture epic (v1.6)
4
+ url: https://github.com/MarcoPorcellato/logseq-matryca-parser/blob/main/docs/quality/GITHUB_CLEAN_ARCH_ROADMAP.md
5
+ about: Milestone, project board, and phase issues for Uncle Bob v1.6 work
3
6
  - name: Security vulnerability
4
7
  url: https://github.com/MarcoPorcellato/logseq-matryca-parser/security/policy
5
8
  about: Report a security issue privately — do not open a public issue
@@ -0,0 +1,7 @@
1
+ milestone=2
2
+ EPIC=78
3
+ PHASE0=79
4
+ PHASE1=80
5
+ PHASE3A=81
6
+ PHASE3B=82
7
+ PHASE4=83
@@ -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:
@@ -36,3 +36,11 @@
36
36
  - name: forge
37
37
  color: bfd4f2
38
38
  description: FORGE exporters and visitors
39
+
40
+ - name: clean-code
41
+ color: "0e8a16"
42
+ description: Clean Architecture / SOLID slice — Uncle Bob contract
43
+
44
+ - name: architecture
45
+ color: "5319e7"
46
+ description: Layer boundaries, dependency rule, structural refactor
@@ -0,0 +1,277 @@
1
+ #!/usr/bin/env bash
2
+ # Bootstrap Clean Architecture v1.6 milestone, epic, and phase issues.
3
+ # Run from repo root: bash .github/scripts/create_clean_arch_issues.sh
4
+ set -euo pipefail
5
+ ROOT="$(cd "$(dirname "$0")/../.." && pwd)"
6
+ cd "$ROOT"
7
+
8
+ REPO="${GITHUB_REPOSITORY:-MarcoPorcellato/logseq-matryca-parser}"
9
+ MILESTONE_TITLE="v1.6 — Clean Architecture & Code Quality"
10
+ OUT="$ROOT/.github/clean_arch_issue_numbers.txt"
11
+ : > "$OUT"
12
+
13
+ milestone_number() {
14
+ gh api "repos/${REPO}/milestones" --paginate \
15
+ --jq ".[] | select(.title==\"${MILESTONE_TITLE}\") | .number" | head -1
16
+ }
17
+
18
+ ensure_milestone() {
19
+ local num
20
+ num=$(milestone_number || true)
21
+ if [[ -n "${num}" ]]; then
22
+ echo "Milestone exists: #${num} (${MILESTONE_TITLE})"
23
+ echo "milestone=${num}" >> "$OUT"
24
+ return
25
+ fi
26
+ num=$(gh api "repos/${REPO}/milestones" -f title="${MILESTONE_TITLE}" \
27
+ -f description="Uncle Bob rings, layer CI, KINETIC/SYNAPSE SRP-OCP slices. SSOT: docs/CLEAN_CODE_ARCHITECTURE.md. Target: v1.6.0." \
28
+ --jq '.number')
29
+ echo "Created milestone #${num}: ${MILESTONE_TITLE}"
30
+ echo "milestone=${num}" >> "$OUT"
31
+ }
32
+
33
+ create_issue() {
34
+ local id="$1"
35
+ local title="$2"
36
+ local labels="$3"
37
+ local body_file="$4"
38
+ local url
39
+ url=$(gh issue create --title "$title" --label "$labels" --body-file "$body_file")
40
+ local num="${url##*/}"
41
+ local ms
42
+ ms=$(milestone_number)
43
+ if [[ -n "${ms}" ]]; then
44
+ gh api -X PATCH "repos/${REPO}/issues/${num}" -f milestone="${ms}" >/dev/null
45
+ fi
46
+ echo "$id=${num}" >> "$OUT"
47
+ echo "Created ${id} -> #${num}"
48
+ }
49
+
50
+ BODY_DIR=$(mktemp -d)
51
+ trap 'rm -rf "$BODY_DIR"' EXIT
52
+
53
+ ensure_milestone
54
+
55
+ # Epic
56
+ cat > "$BODY_DIR/epic.md" <<'EOF'
57
+ ## Goal
58
+
59
+ Ship the v1.6 Clean Architecture contract: SSOT documentation, import-boundary CI, KINETIC export extraction, SYNAPSE embed OCP, graph ISP public API, and a KINETIC command slice.
60
+
61
+ ## Clean Architecture lens
62
+
63
+ | Ring | Modules touched |
64
+ |------|-----------------|
65
+ | Entities | `logos_core` (unchanged in v1) |
66
+ | Use cases | `graph`, `logos_parser` (no FSM refactor) |
67
+ | Adapters | `synapse`, `forge`, `kinetic_export` |
68
+ | Drivers | `kinetic`, `kinetic_commands` |
69
+
70
+ ## Phases (child issues)
71
+
72
+ Update checkboxes when each phase merges:
73
+
74
+ - [ ] Phase 0 — docs SSOT + layer CI + vendor-name-check
75
+ - [ ] Phase 1 — `kinetic_export.py` (DEBT-005)
76
+ - [ ] Phase 2 — SYNAPSE embed OCP (DEBT-006) — #70
77
+ - [ ] Phase 3 — `iter_attached_nodes()` + `kinetic_commands.py`
78
+ - [ ] Phase 4 — hardening + v1 closure
79
+
80
+ ## SSOT
81
+
82
+ - [`docs/CLEAN_CODE_ARCHITECTURE.md`](https://github.com/MarcoPorcellato/logseq-matryca-parser/blob/main/docs/CLEAN_CODE_ARCHITECTURE.md)
83
+ - [`docs/quality/CLEAN_ARCH_BACKLOG.md`](https://github.com/MarcoPorcellato/logseq-matryca-parser/blob/main/docs/quality/CLEAN_ARCH_BACKLOG.md)
84
+ - [`docs/quality/GITHUB_CLEAN_ARCH_ROADMAP.md`](https://github.com/MarcoPorcellato/logseq-matryca-parser/blob/main/docs/quality/GITHUB_CLEAN_ARCH_ROADMAP.md)
85
+
86
+ ## Out of scope (v2 epic)
87
+
88
+ - `logos_parser.py` split (1439 lines, CRITICAL hub — do not refactor in v1.6)
89
+ - Hexagonal `domain/ports.py`
90
+ - Vendor AST indexer in CI (Ghost Tooling policy)
91
+
92
+ ## Definition of Done
93
+
94
+ - [ ] All phase issues closed
95
+ - [ ] `make all` green on `main`
96
+ - [ ] `CHANGELOG.md` ready for v1.6.0
97
+ - [ ] Milestone closed after tag `v1.6.0`
98
+ EOF
99
+ create_issue "EPIC" "Epic: Clean Architecture v1.6 — documentation, layer CI, and SRP/OCP slices" "architecture,enhancement" "$BODY_DIR/epic.md"
100
+
101
+ # Phase 0
102
+ cat > "$BODY_DIR/phase0.md" <<'EOF'
103
+ ## Problem
104
+
105
+ Contributors lack a single Uncle Bob SSOT, automated layer-boundary tests, and a vendor-free code-audit runbook. Two small DIP/SRP slices are already implemented locally but not tracked on `main`.
106
+
107
+ ## Clean Architecture lens
108
+
109
+ | Ring | SOLID | Dependency rule |
110
+ |------|-------|-----------------|
111
+ | Drivers / use cases | SRP, DIP | Public graph API for watcher; remove dead kinetic helper |
112
+ | CI (tests) | — | Inner rings must not import frameworks |
113
+
114
+ ## Deliverables
115
+
116
+ - [ ] `docs/CLEAN_CODE_ARCHITECTURE.md` — rings, SOLID, module map
117
+ - [ ] `tests/test_layer_boundary.py` — import-boundary gate
118
+ - [ ] `scripts/check_vendor_free_docs.sh` + `make vendor-name-check`
119
+ - [ ] `docs/internal/LOCAL_CODE_STUDY.md` — maintainer runbook (generic terminology)
120
+ - [ ] Public `LogseqGraph.is_tracked_markdown_path()` (closes #68)
121
+ - [ ] Remove dead `_parse_graph` from `kinetic.py` (closes #67)
122
+
123
+ ## Reproduction
124
+
125
+ ```bash
126
+ uv run pytest tests/test_layer_boundary.py -q
127
+ make vendor-name-check
128
+ ```
129
+
130
+ ## Expected vs actual
131
+
132
+ - **Expected:** `make all` passes; zero vendor tool names in public docs.
133
+ - **Actual (pre-merge):** slices exist only in working tree.
134
+
135
+ ## Definition of Done
136
+
137
+ - [ ] `make all` passes
138
+ - [ ] `CHANGELOG.md` updated under `[Unreleased]`
139
+ - [ ] PR body: `Fixes #67`, `Fixes #68`, links epic
140
+ EOF
141
+ create_issue "PHASE0" "docs: Clean Architecture SSOT, layer CI, and code-audit runbook" "architecture,clean-code,documentation" "$BODY_DIR/phase0.md"
142
+
143
+ # Phase 1
144
+ cat > "$BODY_DIR/phase1.md" <<'EOF'
145
+ ## Problem
146
+
147
+ `kinetic.py` mixes Typer wiring with five `_export_*` handlers (~700 lines). Export formats cannot be extended without editing the driver module (SRP / OCP violation).
148
+
149
+ ## Clean Architecture lens
150
+
151
+ | Ring | SOLID | Dependency rule |
152
+ |------|-------|-----------------|
153
+ | Drivers | SRP, OCP | `kinetic.py` orchestrates; `kinetic_export.py` owns format handlers |
154
+ | Adapters | — | Handlers may call `forge`, `synapse` via public APIs |
155
+
156
+ ## Suggested fix
157
+
158
+ 1. Create `src/logseq_matryca_parser/kinetic_export.py`
159
+ 2. Move `_export_json`, `_export_markdown`, `_export_obsidian`, `_export_langchain`, etc.
160
+ 3. Registry or dispatcher in `kinetic.export()` — no behavior change
161
+ 4. Extend `tests/test_layer_boundary.py` for the new module
162
+
163
+ ## Reproduction
164
+
165
+ ```bash
166
+ uv run matryca-parse export --help
167
+ make check
168
+ ```
169
+
170
+ ## Expected vs actual
171
+
172
+ - **Expected:** identical CLI output and exit codes; `kinetic.py` shrinks materially.
173
+ - **Actual:** all export logic inline in `kinetic.py`.
174
+
175
+ ## Definition of Done
176
+
177
+ - [ ] `make all` passes
178
+ - [ ] `tests/test_kinetic.py` unchanged behavior
179
+ - [ ] `docs/quality/CLEAN_ARCH_BACKLOG.md` — DEBT-005 closed
180
+ - [ ] `CHANGELOG.md` if operator-visible
181
+
182
+ **Tracking:** DEBT-005
183
+ EOF
184
+ create_issue "PHASE1" "refactor(kinetic): extract export handlers to kinetic_export.py (SRP)" "architecture,clean-code,cli,enhancement" "$BODY_DIR/phase1.md"
185
+
186
+ # Phase 3a — iter_attached_nodes
187
+ cat > "$BODY_DIR/phase3a.md" <<'EOF'
188
+ ## Problem
189
+
190
+ `LogseqGraph._iter_attached_nodes()` is private but is the correct ISP surface for consumers that must skip orphan ghost nodes. Callers risk using `graph.pages` or `_node_registry` directly.
191
+
192
+ ## Clean Architecture lens
193
+
194
+ | Ring | SOLID | Dependency rule |
195
+ |------|-------|-----------------|
196
+ | Use cases | ISP | Public iterator; private implementation unchanged |
197
+ | Adapters | DIP | `agent_read`, LENS, SYNAPSE should prefer public API |
198
+
199
+ ## Suggested fix
200
+
201
+ - Add `LogseqGraph.iter_attached_nodes() -> Iterator[LogseqNode]` (public)
202
+ - Delegate from existing private method
203
+ - Deprecation comment on leaky patterns in docstring only
204
+
205
+ ## Reproduction
206
+
207
+ ```python
208
+ from logseq_matryca_parser.graph import LogseqGraph
209
+ g = LogseqGraph.load_directory("path/to/vault")
210
+ list(g.iter_attached_nodes())
211
+ ```
212
+
213
+ ## Definition of Done
214
+
215
+ - [ ] Public method documented in `CLEAN_CODE_ARCHITECTURE.md` module map
216
+ - [ ] `make all` passes
217
+ - [ ] No new `graph.pages` iteration in drivers without `iter_canonical_pages()`
218
+ EOF
219
+ create_issue "PHASE3A" "refactor(graph): public iter_attached_nodes() (ISP)" "architecture,clean-code,enhancement" "$BODY_DIR/phase3a.md"
220
+
221
+ # Phase 3b — kinetic_commands
222
+ cat > "$BODY_DIR/phase3b.md" <<'EOF'
223
+ ## Problem
224
+
225
+ After Phase 1 export extraction, `kinetic.py` still hosts many Typer subcommands (scan, visualize, agent-write, demo). The driver module remains above the ~550-line SRP threshold.
226
+
227
+ ## Clean Architecture lens
228
+
229
+ | Ring | SOLID | Dependency rule |
230
+ |------|-------|-----------------|
231
+ | Drivers | SRP | `kinetic.py` = app factory + shared helpers; `kinetic_commands.py` = command handlers |
232
+
233
+ ## Suggested fix
234
+
235
+ - Extract command groups to `kinetic_commands.py`
236
+ - `kinetic.py` registers commands via imports
237
+ - Extend `tests/test_layer_boundary.py` if needed
238
+
239
+ ## Related
240
+
241
+ - #61 — replace production `assert` in `agent_write` (include in same PR if still present)
242
+
243
+ ## Definition of Done
244
+
245
+ - [ ] `make all` passes
246
+ - [ ] `tests/test_kinetic.py` green
247
+ - [ ] `kinetic.py` line count ≤ 550 post-extraction
248
+ EOF
249
+ create_issue "PHASE3B" "refactor(kinetic): extract subcommands to kinetic_commands.py (SRP)" "architecture,clean-code,cli,enhancement" "$BODY_DIR/phase3b.md"
250
+
251
+ # Phase 4
252
+ cat > "$BODY_DIR/phase4.md" <<'EOF'
253
+ ## Problem
254
+
255
+ v1.6 documentation and backlog need final cross-links; epic checklist must close; README/COOKBOOK should point to the Uncle Bob SSOT.
256
+
257
+ ## Deliverables
258
+
259
+ - [ ] README + COOKBOOK links to `docs/CLEAN_CODE_ARCHITECTURE.md`
260
+ - [ ] `docs/quality/CLEAN_ARCH_BACKLOG.md` — v1 structural items marked complete
261
+ - [ ] Close epic issue
262
+ - [ ] `CHANGELOG.md` release notes draft for v1.6.0 (no autonomous tag)
263
+
264
+ ## Definition of Done
265
+
266
+ - [ ] `make all` passes
267
+ - [ ] Epic checklist complete
268
+ - [ ] Milestone ready to close after release tag
269
+ EOF
270
+ create_issue "PHASE4" "chore: Clean Architecture v1 hardening + README/COOKBOOK links" "architecture,clean-code,documentation" "$BODY_DIR/phase4.md"
271
+
272
+ echo ""
273
+ echo "=== Issue numbers written to ${OUT} ==="
274
+ cat "$OUT"
275
+ echo ""
276
+ echo "Next: assign milestone to existing #70, #71, #61 via gh issue edit"
277
+ echo "Create GitHub Project: gh project create --title 'Logseq Parser — Clean Architecture v1.6' --owner MarcoPorcellato"
@@ -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