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.
- {logseq_matryca_parser-1.4.2 → logseq_matryca_parser-1.7.0}/.cursorignore +15 -15
- logseq_matryca_parser-1.7.0/.github/ISSUE_TEMPLATE/clean_architecture.yml +61 -0
- {logseq_matryca_parser-1.4.2 → logseq_matryca_parser-1.7.0}/.github/ISSUE_TEMPLATE/config.yml +3 -0
- logseq_matryca_parser-1.7.0/.github/clean_arch_issue_numbers.txt +7 -0
- {logseq_matryca_parser-1.4.2 → logseq_matryca_parser-1.7.0}/.github/dependabot.yml +2 -2
- {logseq_matryca_parser-1.4.2 → logseq_matryca_parser-1.7.0}/.github/labels.yml +8 -0
- logseq_matryca_parser-1.7.0/.github/scripts/create_clean_arch_issues.sh +277 -0
- logseq_matryca_parser-1.7.0/.github/workflows/ci.yml +83 -0
- {logseq_matryca_parser-1.4.2 → logseq_matryca_parser-1.7.0}/.github/workflows/daily-metrics.yml +5 -5
- logseq_matryca_parser-1.7.0/.github/workflows/pypi_publish.yml +153 -0
- logseq_matryca_parser-1.7.0/AGENTS.md +26 -0
- {logseq_matryca_parser-1.4.2 → logseq_matryca_parser-1.7.0}/CHANGELOG.md +99 -3
- logseq_matryca_parser-1.7.0/CLAUDE.md +26 -0
- {logseq_matryca_parser-1.4.2 → logseq_matryca_parser-1.7.0}/CONTRIBUTING.md +54 -7
- logseq_matryca_parser-1.7.0/Makefile +31 -0
- {logseq_matryca_parser-1.4.2 → logseq_matryca_parser-1.7.0}/PKG-INFO +34 -6
- {logseq_matryca_parser-1.4.2 → logseq_matryca_parser-1.7.0}/README.md +33 -5
- {logseq_matryca_parser-1.4.2 → logseq_matryca_parser-1.7.0}/SECURITY.md +2 -2
- logseq_matryca_parser-1.7.0/claude-skill-logseq-read/SKILL.md +83 -0
- {logseq_matryca_parser-1.4.2 → logseq_matryca_parser-1.7.0}/claude-skill-logseq-read/scripts/parse_logseq.py +21 -21
- {logseq_matryca_parser-1.4.2 → logseq_matryca_parser-1.7.0}/docs/ARCHITECTURE.md +59 -6
- logseq_matryca_parser-1.7.0/docs/BUG_HUNT_REPORT.md +1249 -0
- logseq_matryca_parser-1.7.0/docs/CLEAN_CODE_ARCHITECTURE.md +322 -0
- {logseq_matryca_parser-1.4.2 → logseq_matryca_parser-1.7.0}/docs/CODEQL.md +1 -1
- {logseq_matryca_parser-1.4.2 → logseq_matryca_parser-1.7.0}/docs/COOKBOOK.md +27 -1
- logseq_matryca_parser-1.7.0/docs/DOCUMENTATION_SYSTEM.md +297 -0
- {logseq_matryca_parser-1.4.2 → logseq_matryca_parser-1.7.0}/docs/GOOD_FIRST_ISSUES.md +54 -20
- logseq_matryca_parser-1.7.0/docs/README.md +80 -0
- logseq_matryca_parser-1.7.0/docs/RELEASE_PROCESS.md +118 -0
- logseq_matryca_parser-1.7.0/docs/REPOSITORY_IMPROVEMENT_STUDY_2026-07-28.md +439 -0
- logseq_matryca_parser-1.7.0/docs/REPOSITORY_STELLAR_ROADMAP_2026-08-06.md +726 -0
- logseq_matryca_parser-1.7.0/docs/decisions/index.md +36 -0
- {logseq_matryca_parser-1.4.2 → logseq_matryca_parser-1.7.0}/docs/design-docs/LOGSEQ_ASSET_RESOLUTION_SPEC.md +104 -104
- {logseq_matryca_parser-1.4.2 → logseq_matryca_parser-1.7.0}/docs/design-docs/LOGSEQ_DATASCRIPT_MAPPING.md +96 -96
- {logseq_matryca_parser-1.4.2 → logseq_matryca_parser-1.7.0}/docs/design-docs/LOGSEQ_TEMPORAL_ONTOLOGY.md +114 -114
- {logseq_matryca_parser-1.4.2 → logseq_matryca_parser-1.7.0}/docs/design-docs/OFFICIAL_MLDOC_SPECS.md +68 -68
- logseq_matryca_parser-1.7.0/docs/index.md +47 -0
- logseq_matryca_parser-1.7.0/docs/internal/LOCAL_CODE_STUDY.md +117 -0
- {logseq_matryca_parser-1.4.2 → logseq_matryca_parser-1.7.0}/docs/internal/STATIC_ANALYSIS_POLICY.md +1 -0
- logseq_matryca_parser-1.7.0/docs/log.md +109 -0
- logseq_matryca_parser-1.7.0/docs/maintained.toml +34 -0
- logseq_matryca_parser-1.7.0/docs/quality/CLEAN_ARCH_BACKLOG.md +67 -0
- logseq_matryca_parser-1.7.0/docs/quality/GITHUB_CLEAN_ARCH_ROADMAP.md +87 -0
- logseq_matryca_parser-1.7.0/docs/quality/ISSUE_RECONCILIATION_2026-08-06.md +119 -0
- logseq_matryca_parser-1.7.0/docs/quality/ISSUE_TRIAGE_2026-07.md +94 -0
- logseq_matryca_parser-1.7.0/docs/quality/README.md +47 -0
- logseq_matryca_parser-1.7.0/docs/reference/API_STABILITY.md +100 -0
- logseq_matryca_parser-1.7.0/docs/reference/DIAGNOSTICS.md +103 -0
- logseq_matryca_parser-1.7.0/docs/reference/FILESYSTEM_SAFETY.md +89 -0
- logseq_matryca_parser-1.7.0/docs/reference/index.md +55 -0
- {logseq_matryca_parser-1.4.2 → logseq_matryca_parser-1.7.0}/metrics/index.json +3 -2
- {logseq_matryca_parser-1.4.2 → logseq_matryca_parser-1.7.0}/metrics/quarters/2026-Q2.json +198 -0
- logseq_matryca_parser-1.7.0/metrics/quarters/2026-Q3.json +6741 -0
- {logseq_matryca_parser-1.4.2 → logseq_matryca_parser-1.7.0}/pyproject.toml +9 -2
- logseq_matryca_parser-1.7.0/release-bundle/RELEASE_NOTES.md +62 -0
- logseq_matryca_parser-1.7.0/scripts/check_documentation.py +260 -0
- logseq_matryca_parser-1.7.0/scripts/check_release_contract.py +128 -0
- logseq_matryca_parser-1.7.0/scripts/check_vendor_free_docs.sh +20 -0
- logseq_matryca_parser-1.7.0/scripts/check_wheel_contract.py +80 -0
- {logseq_matryca_parser-1.4.2 → logseq_matryca_parser-1.7.0}/src/logseq_matryca_parser/__init__.py +17 -4
- logseq_matryca_parser-1.7.0/src/logseq_matryca_parser/_version.py +3 -0
- {logseq_matryca_parser-1.4.2 → logseq_matryca_parser-1.7.0}/src/logseq_matryca_parser/agent_writer.py +208 -7
- logseq_matryca_parser-1.7.0/src/logseq_matryca_parser/diagnostics.py +127 -0
- logseq_matryca_parser-1.7.0/src/logseq_matryca_parser/exceptions.py +47 -0
- {logseq_matryca_parser-1.4.2 → logseq_matryca_parser-1.7.0}/src/logseq_matryca_parser/graph.py +107 -5
- logseq_matryca_parser-1.7.0/src/logseq_matryca_parser/kinetic.py +230 -0
- logseq_matryca_parser-1.7.0/src/logseq_matryca_parser/kinetic_commands.py +449 -0
- logseq_matryca_parser-1.7.0/src/logseq_matryca_parser/kinetic_export.py +133 -0
- {logseq_matryca_parser-1.4.2 → logseq_matryca_parser-1.7.0}/src/logseq_matryca_parser/lens.py +7 -5
- {logseq_matryca_parser-1.4.2 → logseq_matryca_parser-1.7.0}/src/logseq_matryca_parser/logos_core.py +20 -19
- {logseq_matryca_parser-1.4.2 → logseq_matryca_parser-1.7.0}/src/logseq_matryca_parser/logos_parser.py +10 -17
- logseq_matryca_parser-1.7.0/src/logseq_matryca_parser/py.typed +1 -0
- {logseq_matryca_parser-1.4.2 → logseq_matryca_parser-1.7.0}/src/logseq_matryca_parser/synapse.py +7 -64
- logseq_matryca_parser-1.7.0/src/logseq_matryca_parser/synapse_embed.py +180 -0
- logseq_matryca_parser-1.7.0/tests/test_check_documentation.py +176 -0
- logseq_matryca_parser-1.7.0/tests/test_check_release_contract.py +85 -0
- logseq_matryca_parser-1.7.0/tests/test_check_wheel_contract.py +58 -0
- logseq_matryca_parser-1.7.0/tests/test_diagnostics.py +100 -0
- logseq_matryca_parser-1.7.0/tests/test_graph_collisions.py +128 -0
- {logseq_matryca_parser-1.4.2 → logseq_matryca_parser-1.7.0}/tests/test_kinetic.py +60 -3
- logseq_matryca_parser-1.7.0/tests/test_layer_boundary.py +122 -0
- {logseq_matryca_parser-1.4.2 → logseq_matryca_parser-1.7.0}/tests/test_lens.py +21 -0
- {logseq_matryca_parser-1.4.2 → logseq_matryca_parser-1.7.0}/tests/test_logos_parser.py +1 -1
- logseq_matryca_parser-1.7.0/tests/test_parser_deep_refresh.py +135 -0
- logseq_matryca_parser-1.7.0/tests/test_public_api_contract.py +90 -0
- logseq_matryca_parser-1.7.0/tests/test_quality_gate_contract.py +76 -0
- {logseq_matryca_parser-1.4.2 → logseq_matryca_parser-1.7.0}/tests/test_synapse.py +99 -1
- logseq_matryca_parser-1.7.0/tests/test_writer_security.py +212 -0
- logseq_matryca_parser-1.7.0/tests/typing_samples/public_api.py +12 -0
- {logseq_matryca_parser-1.4.2 → logseq_matryca_parser-1.7.0}/uv.lock +68 -67
- logseq_matryca_parser-1.4.2/.github/workflows/ci.yml +0 -49
- logseq_matryca_parser-1.4.2/.github/workflows/github_release.yml +0 -53
- logseq_matryca_parser-1.4.2/.github/workflows/pypi_publish.yml +0 -61
- logseq_matryca_parser-1.4.2/Makefile +0 -15
- logseq_matryca_parser-1.4.2/claude-skill-logseq-read/SKILL.md +0 -83
- logseq_matryca_parser-1.4.2/docs/BUG_HUNT_REPORT.md +0 -1251
- logseq_matryca_parser-1.4.2/docs/README.md +0 -37
- logseq_matryca_parser-1.4.2/docs/RELEASE_PROCESS.md +0 -85
- logseq_matryca_parser-1.4.2/src/logseq_matryca_parser/exceptions.py +0 -17
- logseq_matryca_parser-1.4.2/src/logseq_matryca_parser/kinetic.py +0 -674
- {logseq_matryca_parser-1.4.2 → logseq_matryca_parser-1.7.0}/.cursorrules +0 -0
- {logseq_matryca_parser-1.4.2 → logseq_matryca_parser-1.7.0}/.github/CODEOWNERS +0 -0
- {logseq_matryca_parser-1.4.2 → logseq_matryca_parser-1.7.0}/.github/FUNDING.yml +0 -0
- {logseq_matryca_parser-1.4.2 → logseq_matryca_parser-1.7.0}/.github/ISSUE_TEMPLATE/bug_report.yml +0 -0
- {logseq_matryca_parser-1.4.2 → logseq_matryca_parser-1.7.0}/.github/ISSUE_TEMPLATE/feature_request.yml +0 -0
- {logseq_matryca_parser-1.4.2 → logseq_matryca_parser-1.7.0}/.github/PULL_REQUEST_TEMPLATE.md +0 -0
- {logseq_matryca_parser-1.4.2 → logseq_matryca_parser-1.7.0}/.github/scripts/create_good_first_issues.sh +0 -0
- {logseq_matryca_parser-1.4.2 → logseq_matryca_parser-1.7.0}/.gitignore +0 -0
- {logseq_matryca_parser-1.4.2 → logseq_matryca_parser-1.7.0}/.pre-commit-config.yaml +0 -0
- {logseq_matryca_parser-1.4.2 → logseq_matryca_parser-1.7.0}/.repomixignore +0 -0
- {logseq_matryca_parser-1.4.2 → logseq_matryca_parser-1.7.0}/CODE_OF_CONDUCT.md +0 -0
- {logseq_matryca_parser-1.4.2 → logseq_matryca_parser-1.7.0}/LICENSE +0 -0
- {logseq_matryca_parser-1.4.2 → logseq_matryca_parser-1.7.0}/NOTICE +0 -0
- {logseq_matryca_parser-1.4.2 → logseq_matryca_parser-1.7.0}/docs/design-docs/ARCHITECTURE_BLUEPRINT.md +0 -0
- {logseq_matryca_parser-1.4.2 → logseq_matryca_parser-1.7.0}/docs/design-docs/CODE_SCAFFOLD.md +0 -0
- {logseq_matryca_parser-1.4.2 → logseq_matryca_parser-1.7.0}/docs/design-docs/README.md +0 -0
- {logseq_matryca_parser-1.4.2 → logseq_matryca_parser-1.7.0}/docs/design-docs/REFERENCE_SPEC.md +0 -0
- {logseq_matryca_parser-1.4.2 → logseq_matryca_parser-1.7.0}/docs/error_log.md +0 -0
- {logseq_matryca_parser-1.4.2 → logseq_matryca_parser-1.7.0}/docs/logseq_ast_primer.md +0 -0
- {logseq_matryca_parser-1.4.2 → logseq_matryca_parser-1.7.0}/docs/rfc/OLLAMA_RAG.md +0 -0
- {logseq_matryca_parser-1.4.2 → logseq_matryca_parser-1.7.0}/docs/roadmaps/ROADMAP_AGENT_NATIVE_XRAY.md +0 -0
- {logseq_matryca_parser-1.4.2 → logseq_matryca_parser-1.7.0}/docs/roadmaps/ROADMAP_CLI_HYDRATION_AND_ENRICHMENT.md +0 -0
- {logseq_matryca_parser-1.4.2 → logseq_matryca_parser-1.7.0}/docs/roadmaps/ROADMAP_CONTEXT_SYNTHESIS_AND_SCOPING.md +0 -0
- {logseq_matryca_parser-1.4.2 → logseq_matryca_parser-1.7.0}/docs/roadmaps/ROADMAP_EMBED_EXPANSION_AND_FLUENT_QUERIES.md +0 -0
- {logseq_matryca_parser-1.4.2 → logseq_matryca_parser-1.7.0}/docs/roadmaps/ROADMAP_GRAPH_RAG_SEMANTICS.md +0 -0
- {logseq_matryca_parser-1.4.2 → logseq_matryca_parser-1.7.0}/docs/roadmaps/ROADMAP_HEADLESS_WRITER.md +0 -0
- {logseq_matryca_parser-1.4.2 → logseq_matryca_parser-1.7.0}/docs/roadmaps/ROADMAP_INCREMENTAL_WATCHER.md +0 -0
- {logseq_matryca_parser-1.4.2 → logseq_matryca_parser-1.7.0}/docs/roadmaps/ROADMAP_INLINE_SHIELD_AND_NAMESPACES.md +0 -0
- {logseq_matryca_parser-1.4.2 → logseq_matryca_parser-1.7.0}/docs/roadmaps/ROADMAP_OBSIDIAN_ADAPTER.md +0 -0
- {logseq_matryca_parser-1.4.2 → logseq_matryca_parser-1.7.0}/docs/roadmaps/ROADMAP_ROBUSTNESS_AND_SOFT_BREAKS.md +0 -0
- {logseq_matryca_parser-1.4.2 → logseq_matryca_parser-1.7.0}/docs/roadmaps/ROADMAP_TOML_FIX_AND_PYPI_DISTRIBUTION.md +0 -0
- {logseq_matryca_parser-1.4.2 → logseq_matryca_parser-1.7.0}/docs/roadmaps/ROADMAP_UUID_AND_GRAPH_SUPERPOWERS.md +0 -0
- {logseq_matryca_parser-1.4.2 → logseq_matryca_parser-1.7.0}/examples/demo_logseq_journal.md +0 -0
- {logseq_matryca_parser-1.4.2 → logseq_matryca_parser-1.7.0}/examples/run_demo.py +0 -0
- {logseq_matryca_parser-1.4.2 → logseq_matryca_parser-1.7.0}/legacy/local_digestor.py +0 -0
- {logseq_matryca_parser-1.4.2 → logseq_matryca_parser-1.7.0}/lib/bindings/utils.js +0 -0
- {logseq_matryca_parser-1.4.2 → logseq_matryca_parser-1.7.0}/lib/tom-select/tom-select.complete.min.js +0 -0
- {logseq_matryca_parser-1.4.2 → logseq_matryca_parser-1.7.0}/lib/tom-select/tom-select.css +0 -0
- {logseq_matryca_parser-1.4.2 → logseq_matryca_parser-1.7.0}/lib/vis-9.1.2/vis-network.css +0 -0
- {logseq_matryca_parser-1.4.2 → logseq_matryca_parser-1.7.0}/lib/vis-9.1.2/vis-network.min.js +0 -0
- {logseq_matryca_parser-1.4.2 → logseq_matryca_parser-1.7.0}/repomix-output-parser.xml +0 -0
- {logseq_matryca_parser-1.4.2 → logseq_matryca_parser-1.7.0}/scripts/__init__.py +0 -0
- {logseq_matryca_parser-1.4.2 → logseq_matryca_parser-1.7.0}/scripts/archive_repository_metrics.py +0 -0
- {logseq_matryca_parser-1.4.2 → logseq_matryca_parser-1.7.0}/scripts/debug_pre_release.py +0 -0
- {logseq_matryca_parser-1.4.2 → logseq_matryca_parser-1.7.0}/scripts/extract_changelog.py +0 -0
- {logseq_matryca_parser-1.4.2 → logseq_matryca_parser-1.7.0}/src/logseq_matryca_parser/.gitignore +0 -0
- {logseq_matryca_parser-1.4.2 → logseq_matryca_parser-1.7.0}/src/logseq_matryca_parser/NOTICE +0 -0
- {logseq_matryca_parser-1.4.2 → logseq_matryca_parser-1.7.0}/src/logseq_matryca_parser/__main__.py +0 -0
- {logseq_matryca_parser-1.4.2 → logseq_matryca_parser-1.7.0}/src/logseq_matryca_parser/agent_press.py +0 -0
- {logseq_matryca_parser-1.4.2 → logseq_matryca_parser-1.7.0}/src/logseq_matryca_parser/forge.py +0 -0
- {logseq_matryca_parser-1.4.2 → logseq_matryca_parser-1.7.0}/src/logseq_matryca_parser/logseq_markdown.py +0 -0
- {logseq_matryca_parser-1.4.2 → logseq_matryca_parser-1.7.0}/src/logseq_matryca_parser/logseq_paths.py +0 -0
- {logseq_matryca_parser-1.4.2 → logseq_matryca_parser-1.7.0}/src/logseq_matryca_parser/pyproject.toml +0 -0
- {logseq_matryca_parser-1.4.2 → logseq_matryca_parser-1.7.0}/tests/test_agent_press.py +0 -0
- {logseq_matryca_parser-1.4.2 → logseq_matryca_parser-1.7.0}/tests/test_agent_writer.py +0 -0
- {logseq_matryca_parser-1.4.2 → logseq_matryca_parser-1.7.0}/tests/test_archive_repository_metrics.py +0 -0
- {logseq_matryca_parser-1.4.2 → logseq_matryca_parser-1.7.0}/tests/test_exceptions.py +0 -0
- {logseq_matryca_parser-1.4.2 → logseq_matryca_parser-1.7.0}/tests/test_extract_changelog.py +0 -0
- {logseq_matryca_parser-1.4.2 → logseq_matryca_parser-1.7.0}/tests/test_forge.py +0 -0
- {logseq_matryca_parser-1.4.2 → logseq_matryca_parser-1.7.0}/tests/test_graph.py +0 -0
- {logseq_matryca_parser-1.4.2 → logseq_matryca_parser-1.7.0}/tests/test_logseq_markdown.py +0 -0
- {logseq_matryca_parser-1.4.2 → logseq_matryca_parser-1.7.0}/tests/test_logseq_paths.py +0 -0
- {logseq_matryca_parser-1.4.2 → logseq_matryca_parser-1.7.0}/tests/test_package_version.py +0 -0
- {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
|
-
#
|
|
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 (
|
|
30
|
+
# Lockfiles (harmful to codebase indexing)
|
|
31
31
|
# =========================
|
|
32
|
-
#
|
|
33
|
-
#
|
|
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
|
-
#
|
|
41
|
+
# AI Outputs and Reports (avoid context loops)
|
|
42
42
|
# =========================
|
|
43
|
-
#
|
|
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
|
-
#
|
|
49
|
+
# Test Data and Mock Fixtures
|
|
50
50
|
# =========================
|
|
51
|
-
#
|
|
52
|
-
#
|
|
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
|
|
59
|
+
# Vector Assets
|
|
60
60
|
# =========================
|
|
61
|
-
#
|
|
62
|
-
#
|
|
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
|
-
#
|
|
66
|
+
# Editor Configuration Files
|
|
67
67
|
# =========================
|
|
68
68
|
.vscode/
|
|
69
69
|
.idea/
|
|
70
70
|
.clinerules
|
|
71
71
|
|
|
72
|
-
#
|
|
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
|
{logseq_matryca_parser-1.4.2 → logseq_matryca_parser-1.7.0}/.github/ISSUE_TEMPLATE/config.yml
RENAMED
|
@@ -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
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
version: 2
|
|
2
2
|
updates:
|
|
3
|
-
#
|
|
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
|
-
#
|
|
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"
|
{logseq_matryca_parser-1.4.2 → logseq_matryca_parser-1.7.0}/.github/workflows/daily-metrics.yml
RENAMED
|
@@ -2,8 +2,8 @@ name: Daily Metrics Saver
|
|
|
2
2
|
|
|
3
3
|
on:
|
|
4
4
|
schedule:
|
|
5
|
-
- cron: '0 3 * * *' #
|
|
6
|
-
workflow_dispatch: #
|
|
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
|
-
#
|
|
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@
|
|
29
|
+
uses: actions/setup-python@5fda3b95a4ea91299a34e894583c3862153e4b97 # v7.0.0
|
|
30
30
|
with:
|
|
31
31
|
python-version: '3.12'
|
|
32
32
|
|