logseq-matryca-parser 0.3.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 (77) hide show
  1. logseq_matryca_parser-0.3.0/.cursorignore +45 -0
  2. logseq_matryca_parser-0.3.0/.cursorrules +5 -0
  3. logseq_matryca_parser-0.3.0/.github/FUNDING.yml +1 -0
  4. logseq_matryca_parser-0.3.0/.github/ISSUE_TEMPLATE/bug_report.yml +43 -0
  5. logseq_matryca_parser-0.3.0/.github/ISSUE_TEMPLATE/feature_request.yml +30 -0
  6. logseq_matryca_parser-0.3.0/.github/PULL_REQUEST_TEMPLATE.md +17 -0
  7. logseq_matryca_parser-0.3.0/.github/dependabot.yml +13 -0
  8. logseq_matryca_parser-0.3.0/.github/workflows/ci.yml +42 -0
  9. logseq_matryca_parser-0.3.0/.github/workflows/pypi_publish.yml +36 -0
  10. logseq_matryca_parser-0.3.0/.gitignore +75 -0
  11. logseq_matryca_parser-0.3.0/.pre-commit-config.yaml +10 -0
  12. logseq_matryca_parser-0.3.0/.repomixignore +63 -0
  13. logseq_matryca_parser-0.3.0/CONTRIBUTING.md +122 -0
  14. logseq_matryca_parser-0.3.0/LICENSE +201 -0
  15. logseq_matryca_parser-0.3.0/Makefile +15 -0
  16. logseq_matryca_parser-0.3.0/NOTICE +7 -0
  17. logseq_matryca_parser-0.3.0/PKG-INFO +279 -0
  18. logseq_matryca_parser-0.3.0/README.md +243 -0
  19. logseq_matryca_parser-0.3.0/ROADMAP_AGENT_NATIVE_XRAY.md +55 -0
  20. logseq_matryca_parser-0.3.0/ROADMAP_HEADLESS_WRITER.md +50 -0
  21. logseq_matryca_parser-0.3.0/ROADMAP_OBSIDIAN_ADAPTER.md +68 -0
  22. logseq_matryca_parser-0.3.0/SECURITY.md +8 -0
  23. logseq_matryca_parser-0.3.0/claude-skill-logseq-read/SKILL.md +83 -0
  24. logseq_matryca_parser-0.3.0/claude-skill-logseq-read/scripts/parse_logseq.py +275 -0
  25. logseq_matryca_parser-0.3.0/docs/ARCHITECTURE.md +406 -0
  26. logseq_matryca_parser-0.3.0/docs/design-docs/ARCHITECTURE_BLUEPRINT.md +23 -0
  27. logseq_matryca_parser-0.3.0/docs/design-docs/CODE_SCAFFOLD.md +408 -0
  28. logseq_matryca_parser-0.3.0/docs/design-docs/LOGSEQ_ASSET_RESOLUTION_SPEC.md +303 -0
  29. logseq_matryca_parser-0.3.0/docs/design-docs/LOGSEQ_DATASCRIPT_MAPPING.md +283 -0
  30. logseq_matryca_parser-0.3.0/docs/design-docs/LOGSEQ_TEMPORAL_ONTOLOGY.md +363 -0
  31. logseq_matryca_parser-0.3.0/docs/design-docs/OFFICIAL_MLDOC_SPECS.md +294 -0
  32. logseq_matryca_parser-0.3.0/docs/design-docs/REFERENCE_SPEC.md +43 -0
  33. logseq_matryca_parser-0.3.0/docs/error_log.md +48 -0
  34. logseq_matryca_parser-0.3.0/docs/logseq_ast_primer.md +82 -0
  35. logseq_matryca_parser-0.3.0/docs/roadmaps/ROADMAP_CLI_HYDRATION_AND_ENRICHMENT.md +49 -0
  36. logseq_matryca_parser-0.3.0/docs/roadmaps/ROADMAP_CONTEXT_SYNTHESIS_AND_SCOPING.md +41 -0
  37. logseq_matryca_parser-0.3.0/docs/roadmaps/ROADMAP_EMBED_EXPANSION_AND_FLUENT_QUERIES.md +27 -0
  38. logseq_matryca_parser-0.3.0/docs/roadmaps/ROADMAP_GRAPH_RAG_SEMANTICS.md +36 -0
  39. logseq_matryca_parser-0.3.0/docs/roadmaps/ROADMAP_INCREMENTAL_WATCHER.md +42 -0
  40. logseq_matryca_parser-0.3.0/docs/roadmaps/ROADMAP_INLINE_SHIELD_AND_NAMESPACES.md +33 -0
  41. logseq_matryca_parser-0.3.0/docs/roadmaps/ROADMAP_ROBUSTNESS_AND_SOFT_BREAKS.md +51 -0
  42. logseq_matryca_parser-0.3.0/docs/roadmaps/ROADMAP_TOML_FIX_AND_PYPI_DISTRIBUTION.md +76 -0
  43. logseq_matryca_parser-0.3.0/docs/roadmaps/ROADMAP_UUID_AND_GRAPH_SUPERPOWERS.md +43 -0
  44. logseq_matryca_parser-0.3.0/examples/demo_logseq_journal.md +13 -0
  45. logseq_matryca_parser-0.3.0/examples/run_demo.py +53 -0
  46. logseq_matryca_parser-0.3.0/legacy/local_digestor.py +308 -0
  47. logseq_matryca_parser-0.3.0/lib/bindings/utils.js +189 -0
  48. logseq_matryca_parser-0.3.0/lib/tom-select/tom-select.complete.min.js +356 -0
  49. logseq_matryca_parser-0.3.0/lib/tom-select/tom-select.css +334 -0
  50. logseq_matryca_parser-0.3.0/lib/vis-9.1.2/vis-network.css +1 -0
  51. logseq_matryca_parser-0.3.0/lib/vis-9.1.2/vis-network.min.js +27 -0
  52. logseq_matryca_parser-0.3.0/pyproject.toml +69 -0
  53. logseq_matryca_parser-0.3.0/src/logseq_matryca_parser/.gitignore +0 -0
  54. logseq_matryca_parser-0.3.0/src/logseq_matryca_parser/NOTICE +7 -0
  55. logseq_matryca_parser-0.3.0/src/logseq_matryca_parser/__init__.py +61 -0
  56. logseq_matryca_parser-0.3.0/src/logseq_matryca_parser/__main__.py +8 -0
  57. logseq_matryca_parser-0.3.0/src/logseq_matryca_parser/agent_press.py +99 -0
  58. logseq_matryca_parser-0.3.0/src/logseq_matryca_parser/agent_writer.py +250 -0
  59. logseq_matryca_parser-0.3.0/src/logseq_matryca_parser/exceptions.py +13 -0
  60. logseq_matryca_parser-0.3.0/src/logseq_matryca_parser/forge.py +399 -0
  61. logseq_matryca_parser-0.3.0/src/logseq_matryca_parser/graph.py +493 -0
  62. logseq_matryca_parser-0.3.0/src/logseq_matryca_parser/kinetic.py +531 -0
  63. logseq_matryca_parser-0.3.0/src/logseq_matryca_parser/lens.py +427 -0
  64. logseq_matryca_parser-0.3.0/src/logseq_matryca_parser/logos_core.py +171 -0
  65. logseq_matryca_parser-0.3.0/src/logseq_matryca_parser/logos_parser.py +1047 -0
  66. logseq_matryca_parser-0.3.0/src/logseq_matryca_parser/pyproject.toml +0 -0
  67. logseq_matryca_parser-0.3.0/src/logseq_matryca_parser/synapse.py +329 -0
  68. logseq_matryca_parser-0.3.0/tests/test_agent_press.py +117 -0
  69. logseq_matryca_parser-0.3.0/tests/test_agent_writer.py +95 -0
  70. logseq_matryca_parser-0.3.0/tests/test_forge.py +93 -0
  71. logseq_matryca_parser-0.3.0/tests/test_graph.py +319 -0
  72. logseq_matryca_parser-0.3.0/tests/test_kinetic.py +376 -0
  73. logseq_matryca_parser-0.3.0/tests/test_lens.py +80 -0
  74. logseq_matryca_parser-0.3.0/tests/test_logos_parser.py +997 -0
  75. logseq_matryca_parser-0.3.0/tests/test_package_version.py +14 -0
  76. logseq_matryca_parser-0.3.0/tests/test_synapse.py +200 -0
  77. logseq_matryca_parser-0.3.0/uv.lock +2557 -0
@@ -0,0 +1,45 @@
1
+ # .cursorignore
2
+ # (Nota: Cursor ignora già automaticamente tutto ciò che è nel .gitignore)
3
+
4
+ # =========================
5
+ # Lockfiles (Letali per il Codebase Indexing)
6
+ # =========================
7
+ # I lockfile devono stare su Git, ma l'IA non deve MAI leggerli,
8
+ # sono solo un muro di versioni incomprensibili.
9
+ poetry.lock
10
+ uv.lock
11
+ package-lock.json
12
+ yarn.lock
13
+ pnpm-lock.yaml
14
+
15
+ # =========================
16
+ # Output AI e Report (Evitare loop di contesto)
17
+ # =========================
18
+ # Se committi per sbaglio un output, non vogliamo che Cursor lo studi.
19
+ repomix-output.*
20
+ output_langchain/
21
+ mappa_cervello.html
22
+
23
+ # =========================
24
+ # Dati di Test e Fixtures Mock
25
+ # =========================
26
+ # Se hai dei file Markdown o JSON enormi che usi solo per testare il parser,
27
+ # a Git servono, ma all'IA confondono solo le idee.
28
+ tests/fixtures/*.json
29
+ tests/fixtures/*.edn
30
+ tests/fixtures/*.md
31
+ *.csv
32
+
33
+ # =========================
34
+ # Assets Vettoriali
35
+ # =========================
36
+ # Le immagini PNG/JPG Cursor le ignora da solo, ma gli SVG sono file di testo!
37
+ # Se l'IA legge un SVG, legge migliaia di coordinate matematiche inutili.
38
+ *.svg
39
+
40
+ # =========================
41
+ # File di Configurazione Editor
42
+ # =========================
43
+ .vscode/
44
+ .idea/
45
+ .clinerules
@@ -0,0 +1,5 @@
1
+ # General Engineering Rules
2
+ - Always use absolute imports from `logseq_matryca_parser`.
3
+ - Every new function must have a Python type hint.
4
+ - Use `logger.debug` for tracing the Stack-Machine state.
5
+ - Before considering a task finished, run `make lint` via terminal.
@@ -0,0 +1 @@
1
+ github: [MarcoPorcellato]
@@ -0,0 +1,43 @@
1
+ name: 🐛 Bug Report
2
+ description: Create a report to help us fix parsing errors or visualizer bugs.
3
+ title: "[BUG] "
4
+ labels: ["bug", "triage"]
5
+ body:
6
+ - type: markdown
7
+ attributes:
8
+ value: |
9
+ Thanks for taking the time to report a bug in the Logseq Matryca Parser!
10
+ Please fill out this form as completely as possible to help us reproduce and fix the issue.
11
+ - type: textarea
12
+ id: description
13
+ attributes:
14
+ label: Bug Description
15
+ description: A clear and concise description of what the bug is.
16
+ placeholder: When I parse a page with this specific property, the AST breaks...
17
+ validations:
18
+ required: true
19
+ - type: textarea
20
+ id: reproduction
21
+ attributes:
22
+ label: Steps to Reproduce
23
+ description: How can we trigger this bug? Please include a minimal snippet of Logseq Markdown if possible.
24
+ placeholder: |
25
+ 1. Run `matryca-parse visualize /my-graph`
26
+ 2. Wait for the parsing phase
27
+ 3. See error...
28
+ validations:
29
+ required: true
30
+ - type: textarea
31
+ id: expected
32
+ attributes:
33
+ label: Expected Behavior
34
+ description: What did you expect to happen?
35
+ validations:
36
+ required: true
37
+ - type: input
38
+ id: version
39
+ attributes:
40
+ label: Environment & Version
41
+ description: What version of Matryca Parser and Python are you using? (e.g., Parser v0.1.0, Python 3.12, Windows 11)
42
+ validations:
43
+ required: true
@@ -0,0 +1,30 @@
1
+ name: 💡 Feature Request
2
+ description: Suggest an idea, a new exporter, or an AI feature for the Logos Protocol.
3
+ title: "[FEATURE] "
4
+ labels: ["enhancement"]
5
+ body:
6
+ - type: markdown
7
+ attributes:
8
+ value: |
9
+ Have an idea to make the Logseq Matryca Parser even better? We'd love to hear it!
10
+ - type: textarea
11
+ id: problem
12
+ attributes:
13
+ label: Is your feature request related to a problem?
14
+ description: A clear and concise description of what the problem is.
15
+ placeholder: "I'm always frustrated when..."
16
+ validations:
17
+ required: true
18
+ - type: textarea
19
+ id: solution
20
+ attributes:
21
+ label: Proposed Solution
22
+ description: Describe the solution or new feature you'd like to see.
23
+ placeholder: "It would be great if the parser could export to..."
24
+ validations:
25
+ required: true
26
+ - type: textarea
27
+ id: context
28
+ attributes:
29
+ label: Additional Context
30
+ description: Add any other context, links to AI frameworks, or screenshots about the feature request here.
@@ -0,0 +1,17 @@
1
+ ## Description
2
+ Fixes # (issue_number)
3
+
4
+ ## Type of change
5
+ - [ ] 🐛 Bug fix (non-breaking change which fixes an issue)
6
+ - [ ] ✨ New feature (non-breaking change which adds functionality)
7
+ - [ ] 💥 Breaking change (fix or feature that would cause existing functionality to not work as expected)
8
+ - [ ] 📚 Documentation update
9
+
10
+ ## 🛡️ Sovereign Developer Checklist
11
+ - [ ] I have read the `CONTRIBUTING.md` guidelines.
12
+ - [ ] I have executed `make all` locally, and all linters (Ruff), type-checkers (Mypy), and tests (Pytest) pass successfully.
13
+ - [ ] I have added/updated tests for my changes (if applicable).
14
+ - [ ] I have updated the documentation accordingly.
15
+ - [ ] My code follows the strict typing rules (`strict=True`) of this project.
16
+
17
+ ## Screenshots / CLI Output (if applicable)
@@ -0,0 +1,13 @@
1
+ version: 2
2
+ updates:
3
+ # Mantiene aggiornate le dipendenze Python (legge il pyproject.toml)
4
+ - package-ecosystem: "pip"
5
+ directory: "/"
6
+ schedule:
7
+ interval: "weekly"
8
+
9
+ # Mantiene aggiornate le GitHub Actions (legge il tuo .github/workflows/ci.yml)
10
+ - package-ecosystem: "github-actions"
11
+ directory: "/"
12
+ schedule:
13
+ interval: "weekly"
@@ -0,0 +1,42 @@
1
+ name: Logos Protocol CI
2
+
3
+ on:
4
+ push:
5
+ branches: [ "main" ]
6
+ pull_request:
7
+ branches: [ "main" ]
8
+
9
+ permissions:
10
+ contents: read
11
+
12
+ jobs:
13
+ build:
14
+ runs-on: ubuntu-latest
15
+
16
+ steps:
17
+ - name: Checkout Code
18
+ uses: actions/checkout@v6
19
+
20
+ - name: Set up Python 3.12
21
+ uses: actions/setup-python@v6
22
+ with:
23
+ python-version: "3.12"
24
+ cache: 'pip'
25
+
26
+ - name: Install Dependencies
27
+ run: |
28
+ python -m pip install --upgrade pip
29
+ pip install -e ".[all]"
30
+ pip install pytest pytest-cov ruff mypy
31
+
32
+ - name: Lint with Ruff
33
+ run: |
34
+ ruff check .
35
+
36
+ - name: Type Checking with Mypy
37
+ run: |
38
+ mypy src/ tests/ examples/
39
+
40
+ - name: Run Pytest
41
+ run: |
42
+ pytest -v
@@ -0,0 +1,36 @@
1
+ name: Publish to PyPI
2
+
3
+ on:
4
+ push:
5
+ tags:
6
+ - "v*"
7
+
8
+ permissions:
9
+ contents: read
10
+ id-token: write
11
+
12
+ jobs:
13
+ publish:
14
+ runs-on: ubuntu-latest
15
+ environment:
16
+ name: pypi
17
+ url: https://pypi.org/p/logseq-matryca-parser
18
+ steps:
19
+ - name: Checkout
20
+ uses: actions/checkout@v6
21
+
22
+ - name: Set up Python
23
+ uses: actions/setup-python@v6
24
+ with:
25
+ python-version: "3.12"
26
+
27
+ - name: Install build
28
+ run: |
29
+ python -m pip install --upgrade pip
30
+ pip install build
31
+
32
+ - name: Build sdist and wheel
33
+ run: python -m build
34
+
35
+ - name: Publish to PyPI
36
+ uses: pypa/gh-action-pypi-publish@release/v1
@@ -0,0 +1,75 @@
1
+ # =========================
2
+ # OS / System
3
+ # =========================
4
+ **/.DS_Store
5
+ **/.AppleDouble
6
+ **/.LSOverride
7
+ Thumbs.db
8
+ desktop.ini
9
+
10
+ # =========================
11
+ # Python / Bytecode
12
+ # =========================
13
+ __pycache__/
14
+ *.py[cod]
15
+ *$py.class
16
+ *.so
17
+
18
+ # =========================
19
+ # Virtual Environments & Secrets
20
+ # =========================
21
+ .venv/
22
+ venv/
23
+ env/
24
+ .env
25
+ .env.*
26
+ !.env.example
27
+
28
+ # =========================
29
+ # Build & Distribution
30
+ # =========================
31
+ dist/
32
+ build/
33
+ *.egg-info/
34
+ *.egg
35
+ MANIFEST
36
+
37
+ # =========================
38
+ # Testing & Coverage
39
+ # =========================
40
+ .pytest_cache/
41
+ .coverage
42
+ coverage.xml
43
+ htmlcov/
44
+ tests/fixtures/*.json
45
+ repomix-output.*
46
+
47
+ # =========================
48
+ # Logs & Databases (Security/Privacy)
49
+ # =========================
50
+ *.log
51
+ *.sqlite
52
+ *.sqlite3
53
+ *.db
54
+
55
+ # =========================
56
+ # Notebooks & Data
57
+ # =========================
58
+ .ipynb_checkpoints/
59
+ output_langchain/
60
+ mappa_cervello.html
61
+ docs/index.html
62
+ out/graph.json
63
+ out/graph.md
64
+
65
+ # =========================
66
+ # IDEs & Tool Caches
67
+ # =========================
68
+ .mypy_cache/
69
+ .ruff_cache/
70
+ .vscode/
71
+ .idea/
72
+ .rooignore
73
+ .clinerules
74
+ .cursor/rules/
75
+ .cursor/
@@ -0,0 +1,10 @@
1
+ repos:
2
+ - repo: https://github.com/astral-sh/ruff-pre-commit
3
+ rev: v0.3.5
4
+ hooks:
5
+ - id: ruff
6
+ args: [ --fix ]
7
+ - repo: https://github.com/pre-commit/mirrors-mypy
8
+ rev: v1.9.0
9
+ hooks:
10
+ - id: mypy
@@ -0,0 +1,63 @@
1
+ # .repomixignore
2
+
3
+ # =========================
4
+ # Repomix Outputs & AI Generated
5
+ # =========================
6
+ repomix-output.*
7
+ output_langchain/
8
+ mappa_cervello.html
9
+
10
+ # =========================
11
+ # Documentation (Token Optimization)
12
+ # =========================
13
+ docs/
14
+ *.md
15
+ !README.md
16
+ !CHANGELOG.md
17
+ !ARCHITECTURE.md
18
+
19
+ # =========================
20
+ # Third-Party Libraries & Frontend Assets (Massive Token Killers)
21
+ # =========================
22
+ lib/
23
+ *.js
24
+ *.css
25
+ *.min.js
26
+
27
+ # =========================
28
+ # Legacy & Deprecated Code
29
+ # =========================
30
+ legacy/
31
+
32
+ # =========================
33
+ # Locks & Dependencies
34
+ # =========================
35
+ poetry.lock
36
+ uv.lock
37
+ package-lock.json
38
+ yarn.lock
39
+ pnpm-lock.yaml
40
+
41
+ # =========================
42
+ # OS / System / Python Caches
43
+ # =========================
44
+ **/.DS_Store
45
+ Thumbs.db
46
+ __pycache__/
47
+ *.py[cod]
48
+ .pytest_cache/
49
+ .mypy_cache/
50
+ .ruff_cache/
51
+ .venv/
52
+ venv/
53
+
54
+ # =========================
55
+ # Token Killers (Logs, DBs, Vector Graphics)
56
+ # =========================
57
+ *.log
58
+ *.sqlite
59
+ *.sqlite3
60
+ *.db
61
+ *.csv
62
+ *.svg
63
+ tests/fixtures/*.json
@@ -0,0 +1,122 @@
1
+ # 🔱 Contributing to the Logos Protocol
2
+
3
+ First off, thank you for considering contributing to the **Logseq Matryca Parser (Logos Protocol)**!
4
+
5
+ This repository is the foundational AST engine for [Matryca.ai](https://matryca.ai), designed to preserve the spatial hierarchy of thought in Logseq graphs. We value deterministic logic, strict typing, and high performance.
6
+
7
+ To maintain the architectural integrity of the project, please follow the guidelines below.
8
+
9
+ ---
10
+
11
+ ## 🏛️ Architectural Philosophy
12
+
13
+ Before writing any code, please understand our core principles:
14
+
15
+ 1. **The Graph is Sacred:** Logos does not guess or chunk text arbitrarily. It reconstructs the exact hierarchical tree based on spatial indentation.
16
+ 2. **Deterministic Output:** Given the same `.md` file, the parser must *always* produce the exact same AST and identical UUIDs.
17
+ 3. **No Bloat:** We strictly limit external dependencies to maximize compatibility with AOT compilers (like Nuitka) and ensure blazing-fast execution.
18
+
19
+ > **Note:** The `logos_core.py` module is the beating heart of the protocol. If your PR proposes changes to the Pydantic V2 models within it, please open an **Issue** for discussion first.
20
+
21
+ ---
22
+
23
+ ## 🛠️ Development Setup
24
+
25
+ To set up your local environment:
26
+
27
+ 1. **Fork and Clone:**
28
+ ```bash
29
+ git clone https://github.com/YOUR-USERNAME/logseq-matryca-parser.git
30
+ cd logseq-matryca-parser
31
+ ```
32
+
33
+ 2. **Create an Isolated Environment:**
34
+ ```bash
35
+ python3 -m venv .venv
36
+ source .venv/bin/activate # On Windows: .venv\Scripts\activate
37
+ ```
38
+
39
+ 3. **Install the Project in Editable Mode:**
40
+ *(Includes development dependencies)*
41
+ ```bash
42
+ pip install -e .
43
+ pip install pytest mypy ruff
44
+ ```
45
+
46
+ ---
47
+
48
+ ## 🚦 The Contribution Workflow
49
+
50
+ ### 1. Find or Create an Issue
51
+
52
+ Whether it's a bug fix or a new feature (like a new exporter in `forge.py`), check the **Issues** tab first. If it's a new idea, open an Issue to discuss it with the maintainers before investing hours of work.
53
+
54
+ ### 2. Branch Naming Convention
55
+
56
+ Create a branch from `main` using the following naming format:
57
+
58
+ - `feat/your-feature-name` (for new features)
59
+ - `bugfix/issue-number-description` (for bug fixes)
60
+ - `docs/update-readme` (for documentation)
61
+
62
+ **Example:**
63
+ ```bash
64
+ git checkout -b feat/add-html-exporter
65
+ ```
66
+
67
+ ### 3. Write Code & Tests
68
+
69
+ - If you fix a bug, write a unit test in `tests/` that fails without your patch and passes with it.
70
+ - If you add a feature, ensure it is covered by a comprehensive test.
71
+
72
+ ### 4. Code Quality & Linting (Mandatory)
73
+
74
+ We run a strict CI pipeline. Before committing, you must ensure your code passes static analysis and tests.
75
+
76
+ We provide a `Makefile` to simplify running these commands. You can execute them individually or all at once:
77
+
78
+ ```bash
79
+ # Run all checks (linting, static typing, and tests)
80
+ make all
81
+
82
+ # Or run them individually:
83
+ make lint # Check formatting and linting with Ruff
84
+ make check # Check static typing with Mypy
85
+ make test # Run unit tests with Pytest
86
+ ```
87
+
88
+ Alternatively, you can run the commands directly:
89
+
90
+ ```bash
91
+ # Check formatting and linting
92
+ ruff check .
93
+
94
+ # Check static typing
95
+ mypy src/ tests/ examples/
96
+
97
+ # Run tests
98
+ pytest
99
+ ```
100
+
101
+ ### 5. Commit Standards
102
+
103
+ We follow [Conventional Commits](https://www.conventionalcommits.org/). Your commit messages should be structured like this:
104
+
105
+ - `feat(forge): add XML export functionality`
106
+ - `fix(parser): resolve stack overflow on deep indentation`
107
+ - `docs: update setup instructions`
108
+
109
+ ### 6. Submit a Pull Request (PR)
110
+
111
+ - Push your branch and open a PR against the `main` branch.
112
+ - Describe why the change is needed.
113
+ - Link the relevant Issue (e.g., `Fixes #123`).
114
+ - Ensure all GitHub Actions (CI) checks pass.
115
+
116
+ ---
117
+
118
+ ## 🤝 Code of Conduct
119
+
120
+ We expect all contributors to maintain a professional, respectful, and constructive tone. We are building the future of sovereign knowledge management together.
121
+
122
+ > *By contributing to this project, you agree that your contributions will be licensed under its Apache 2.0 License.*