langchain-gestaltdb 0.1.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 (43) hide show
  1. langchain_gestaltdb-0.1.0/.github/workflows/ci.yml +158 -0
  2. langchain_gestaltdb-0.1.0/.github/workflows/publish.yml +121 -0
  3. langchain_gestaltdb-0.1.0/.gitignore +220 -0
  4. langchain_gestaltdb-0.1.0/CHANGELOG.md +28 -0
  5. langchain_gestaltdb-0.1.0/LICENSE +201 -0
  6. langchain_gestaltdb-0.1.0/PKG-INFO +328 -0
  7. langchain_gestaltdb-0.1.0/README.md +308 -0
  8. langchain_gestaltdb-0.1.0/docs/API.md +211 -0
  9. langchain_gestaltdb-0.1.0/docs/RELEASING.md +98 -0
  10. langchain_gestaltdb-0.1.0/examples/claim_agent.py +98 -0
  11. langchain_gestaltdb-0.1.0/examples/claim_writes.py +99 -0
  12. langchain_gestaltdb-0.1.0/examples/graph_agent.py +69 -0
  13. langchain_gestaltdb-0.1.0/langchain_gestaltdb/__init__.py +38 -0
  14. langchain_gestaltdb-0.1.0/langchain_gestaltdb/_ingestion.py +128 -0
  15. langchain_gestaltdb-0.1.0/langchain_gestaltdb/_read_only.py +81 -0
  16. langchain_gestaltdb-0.1.0/langchain_gestaltdb/_schema.py +114 -0
  17. langchain_gestaltdb-0.1.0/langchain_gestaltdb/_serialization.py +79 -0
  18. langchain_gestaltdb-0.1.0/langchain_gestaltdb/_tool_output.py +39 -0
  19. langchain_gestaltdb-0.1.0/langchain_gestaltdb/claim_writes.py +281 -0
  20. langchain_gestaltdb-0.1.0/langchain_gestaltdb/claims.py +423 -0
  21. langchain_gestaltdb-0.1.0/langchain_gestaltdb/graph.py +156 -0
  22. langchain_gestaltdb-0.1.0/langchain_gestaltdb/graph_document.py +57 -0
  23. langchain_gestaltdb-0.1.0/langchain_gestaltdb/py.typed +0 -0
  24. langchain_gestaltdb-0.1.0/langchain_gestaltdb/retrievers.py +257 -0
  25. langchain_gestaltdb-0.1.0/langchain_gestaltdb/toolkits.py +91 -0
  26. langchain_gestaltdb-0.1.0/langchain_gestaltdb/tools.py +119 -0
  27. langchain_gestaltdb-0.1.0/pyproject.toml +75 -0
  28. langchain_gestaltdb-0.1.0/scripts/release.py +169 -0
  29. langchain_gestaltdb-0.1.0/tests/integration_tests/test_backend_contract.py +159 -0
  30. langchain_gestaltdb-0.1.0/tests/integration_tests/test_claim_tools.py +578 -0
  31. langchain_gestaltdb-0.1.0/tests/integration_tests/test_claim_writes.py +482 -0
  32. langchain_gestaltdb-0.1.0/tests/integration_tests/test_gestaltdb_smoke.py +39 -0
  33. langchain_gestaltdb-0.1.0/tests/integration_tests/test_graph.py +51 -0
  34. langchain_gestaltdb-0.1.0/tests/integration_tests/test_ingestion.py +108 -0
  35. langchain_gestaltdb-0.1.0/tests/integration_tests/test_read_only.py +102 -0
  36. langchain_gestaltdb-0.1.0/tests/integration_tests/test_readiness.py +72 -0
  37. langchain_gestaltdb-0.1.0/tests/integration_tests/test_retrievers.py +417 -0
  38. langchain_gestaltdb-0.1.0/tests/integration_tests/test_schema.py +78 -0
  39. langchain_gestaltdb-0.1.0/tests/integration_tests/test_standard_tools.py +157 -0
  40. langchain_gestaltdb-0.1.0/tests/integration_tests/test_tools.py +86 -0
  41. langchain_gestaltdb-0.1.0/tests/unit_tests/test_package.py +15 -0
  42. langchain_gestaltdb-0.1.0/tests/unit_tests/test_release.py +223 -0
  43. langchain_gestaltdb-0.1.0/tests/unit_tests/test_serialization.py +89 -0
@@ -0,0 +1,158 @@
1
+ name: CI
2
+
3
+ on:
4
+ pull_request:
5
+ branches: [main]
6
+ push:
7
+ branches: [main]
8
+ workflow_dispatch:
9
+
10
+ permissions:
11
+ contents: read
12
+
13
+ concurrency:
14
+ group: ci-${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }}
15
+ cancel-in-progress: true
16
+
17
+ jobs:
18
+ quality:
19
+ name: Quality
20
+ runs-on: ubuntu-latest
21
+ timeout-minutes: 10
22
+ steps:
23
+ - uses: actions/checkout@v4
24
+ - uses: astral-sh/setup-uv@v6
25
+ with:
26
+ version: "0.12.21"
27
+ enable-cache: true
28
+ - run: uv sync --python 3.12 --locked --group dev --extra lmdb
29
+ - run: uv run --locked ruff check .
30
+ - run: uv run --locked ruff format --check .
31
+ - run: uv run --locked mypy
32
+
33
+ tests:
34
+ name: Tests (Python ${{ matrix.python }})
35
+ runs-on: ubuntu-latest
36
+ timeout-minutes: 15
37
+ strategy:
38
+ fail-fast: false
39
+ matrix:
40
+ python: ["3.10", "3.11", "3.12", "3.13"]
41
+ steps:
42
+ - uses: actions/checkout@v4
43
+ - uses: astral-sh/setup-uv@v6
44
+ with:
45
+ version: "0.12.21"
46
+ enable-cache: true
47
+ - run: uv sync --python '${{ matrix.python }}' --locked --group dev --extra lmdb
48
+ - run: uv run --locked pytest --cov=langchain_gestaltdb --cov-report=term-missing --cov-fail-under=90
49
+
50
+ latest-dependencies:
51
+ name: Latest dependencies
52
+ runs-on: ubuntu-latest
53
+ timeout-minutes: 15
54
+ steps:
55
+ - uses: actions/checkout@v4
56
+ - uses: astral-sh/setup-uv@v6
57
+ with:
58
+ version: "0.12.21"
59
+ enable-cache: true
60
+ - run: uv sync --python 3.12 --group dev --extra lmdb --upgrade
61
+ - run: uv run --frozen pytest
62
+
63
+ additional-backends:
64
+ name: Backend (${{ matrix.backend }})
65
+ runs-on: ubuntu-latest
66
+ timeout-minutes: 20
67
+ strategy:
68
+ fail-fast: false
69
+ matrix:
70
+ include:
71
+ - backend: leveldb
72
+ extra: leveldb
73
+ - backend: pyrex
74
+ extra: rocksdb
75
+ env:
76
+ GESTALTDB_TEST_BACKEND: ${{ matrix.backend }}
77
+ steps:
78
+ - uses: actions/checkout@v4
79
+ - name: Install LevelDB native library
80
+ if: matrix.backend == 'leveldb'
81
+ run: |
82
+ sudo apt-get update
83
+ sudo apt-get install --yes libleveldb-dev
84
+ - uses: astral-sh/setup-uv@v6
85
+ with:
86
+ version: "0.12.21"
87
+ enable-cache: true
88
+ - run: uv sync --python 3.12 --locked --group dev --extra lmdb --extra '${{ matrix.extra }}'
89
+ - run: uv run --locked pytest tests/integration_tests/test_backend_contract.py
90
+
91
+ minimum-dependencies:
92
+ name: Minimum direct dependencies
93
+ runs-on: ubuntu-latest
94
+ timeout-minutes: 15
95
+ steps:
96
+ - uses: actions/checkout@v4
97
+ - uses: astral-sh/setup-uv@v6
98
+ with:
99
+ version: "0.12.21"
100
+ enable-cache: true
101
+ # Deliberately re-resolve in the disposable runner, not against uv.lock.
102
+ - run: uv sync --python 3.10 --group dev --extra lmdb --resolution lowest-direct
103
+ - run: uv run --frozen pytest
104
+
105
+ distribution:
106
+ name: Installed wheel
107
+ runs-on: ubuntu-latest
108
+ timeout-minutes: 15
109
+ steps:
110
+ - uses: actions/checkout@v4
111
+ - uses: astral-sh/setup-uv@v6
112
+ with:
113
+ version: "0.12.21"
114
+ enable-cache: true
115
+ - run: uv sync --python 3.12 --locked --group dev --extra lmdb
116
+ - run: uv build --no-sources
117
+ - run: uv run --locked twine check dist/*
118
+ - name: Validate release artifact contents
119
+ run: |
120
+ version=$(uv run --locked python -c 'from importlib.metadata import version; print(version("langchain-gestaltdb"))')
121
+ uv run --locked python scripts/release.py verify-artifacts "$version"
122
+ - name: Test installed wheel outside the checkout
123
+ shell: bash
124
+ run: |
125
+ uv venv --python 3.12 "$RUNNER_TEMP/wheel-env"
126
+ wheel=$(find "$GITHUB_WORKSPACE/dist" -maxdepth 1 -name '*.whl' -print -quit)
127
+ uv pip install --python "$RUNNER_TEMP/wheel-env/bin/python" "${wheel}[lmdb]" 'pytest>=8,<10' 'langchain-tests==1.0.0'
128
+ cd "$RUNNER_TEMP"
129
+ "$RUNNER_TEMP/wheel-env/bin/python" -c 'import langchain_gestaltdb; assert "site-packages" in langchain_gestaltdb.__file__'
130
+ "$RUNNER_TEMP/wheel-env/bin/python" -m pytest "$GITHUB_WORKSPACE/tests" -c "$GITHUB_WORKSPACE/pyproject.toml"
131
+ - name: Retain the tested main distributions for explicitly approved releases
132
+ if: github.event_name == 'push' && github.ref == 'refs/heads/main'
133
+ uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4
134
+ with:
135
+ name: distributions-${{ github.sha }}-${{ github.run_attempt }}
136
+ path: dist/*
137
+ if-no-files-found: error
138
+ retention-days: 30
139
+
140
+ gate:
141
+ name: CI gate
142
+ if: always()
143
+ needs: [quality, tests, minimum-dependencies, latest-dependencies, additional-backends, distribution]
144
+ runs-on: ubuntu-latest
145
+ timeout-minutes: 5
146
+ steps:
147
+ - name: Require every job to succeed
148
+ env:
149
+ RESULTS: ${{ toJSON(needs) }}
150
+ run: |
151
+ python3 - <<'PY'
152
+ import json
153
+ import os
154
+ results = json.loads(os.environ["RESULTS"])
155
+ failed = [name for name, job in results.items() if job["result"] != "success"]
156
+ if failed:
157
+ raise SystemExit(f"Required CI jobs did not succeed: {failed}")
158
+ PY
@@ -0,0 +1,121 @@
1
+ name: Publish
2
+ run-name: Publish ${{ inputs.version }} by @${{ github.actor }}
3
+
4
+ on:
5
+ workflow_dispatch:
6
+ inputs:
7
+ version:
8
+ description: "Reviewed stable version (X.Y.Z); must match main's pyproject.toml"
9
+ required: true
10
+ type: string
11
+
12
+ permissions:
13
+ contents: read
14
+
15
+ concurrency:
16
+ group: pypi-publish
17
+ cancel-in-progress: false
18
+
19
+ jobs:
20
+ prepare:
21
+ name: Verify release candidate
22
+ if: github.repository == 'mylonasc/langchain-gestaltdb' && github.ref == 'refs/heads/main'
23
+ runs-on: ubuntu-latest
24
+ timeout-minutes: 10
25
+ permissions:
26
+ contents: read
27
+ actions: read
28
+ steps:
29
+ - uses: actions/checkout@11d5960a326750d5838078e36cf38b85af677262 # v4
30
+ with:
31
+ persist-credentials: false
32
+ - name: Require reviewed version and green exact-main CI
33
+ id: candidate
34
+ env:
35
+ GH_TOKEN: ${{ github.token }}
36
+ VERSION: ${{ inputs.version }}
37
+ run: python3 scripts/release.py preflight "$VERSION"
38
+ - name: Download the distributions tested by that CI run
39
+ uses: actions/download-artifact@d3f86a106a0bac45b974a628896c90dbdf5c8093 # v4
40
+ with:
41
+ name: ${{ steps.candidate.outputs.artifact-name }}
42
+ run-id: ${{ steps.candidate.outputs.ci-run-id }}
43
+ github-token: ${{ github.token }}
44
+ path: dist
45
+ - name: Verify metadata, packaged files and hashes
46
+ env:
47
+ VERSION: ${{ inputs.version }}
48
+ run: python3 scripts/release.py verify-artifacts "$VERSION" | tee -a "$GITHUB_STEP_SUMMARY"
49
+ - uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4
50
+ with:
51
+ name: validated-distributions
52
+ path: dist/*
53
+ if-no-files-found: error
54
+ retention-days: 30
55
+
56
+ publish:
57
+ name: Publish to PyPI
58
+ needs: prepare
59
+ runs-on: ubuntu-latest
60
+ timeout-minutes: 10
61
+ environment:
62
+ name: pypi
63
+ url: https://pypi.org/p/langchain-gestaltdb
64
+ permissions:
65
+ id-token: write
66
+ steps:
67
+ # No checkout, dependency installation or build code in this privileged job.
68
+ - uses: actions/download-artifact@d3f86a106a0bac45b974a628896c90dbdf5c8093 # v4
69
+ with:
70
+ name: validated-distributions
71
+ path: dist
72
+ - name: Publish the approved distributions using Trusted Publishing
73
+ uses: pypa/gh-action-pypi-publish@dc37677b2e1c63e2034f94d8a5b11f265b73ba33 # release/v1
74
+ with:
75
+ packages-dir: dist/
76
+ print-hash: true
77
+ attestations: true
78
+
79
+ verify-install:
80
+ name: Published wheel (Python ${{ matrix.python }})
81
+ needs: publish
82
+ runs-on: ubuntu-latest
83
+ timeout-minutes: 15
84
+ strategy:
85
+ fail-fast: false
86
+ matrix:
87
+ python: ["3.10", "3.11", "3.12", "3.13"]
88
+ steps:
89
+ - uses: actions/checkout@11d5960a326750d5838078e36cf38b85af677262 # v4
90
+ with:
91
+ persist-credentials: false
92
+ - uses: astral-sh/setup-uv@d0cc045d04ccac9d8b7881df0226f9e82c39688e # v6
93
+ with:
94
+ version: "0.12.21"
95
+ - uses: actions/download-artifact@d3f86a106a0bac45b974a628896c90dbdf5c8093 # v4
96
+ with:
97
+ name: validated-distributions
98
+ path: dist
99
+ - name: Verify public hashes and install the wheel from PyPI outside the checkout
100
+ env:
101
+ VERSION: ${{ inputs.version }}
102
+ PYTHON: ${{ matrix.python }}
103
+ run: |
104
+ for attempt in 1 2 3 4 5; do
105
+ if python3 scripts/release.py verify-pypi "$VERSION"; then break; fi
106
+ if [ "$attempt" = 5 ]; then exit 1; fi
107
+ sleep 15
108
+ done
109
+ uv venv --python "$PYTHON" "$RUNNER_TEMP/released-env"
110
+ for attempt in 1 2 3 4 5; do
111
+ if uv pip install --python "$RUNNER_TEMP/released-env/bin/python" --no-cache \
112
+ --index-url https://pypi.org/simple --only-binary langchain-gestaltdb \
113
+ "langchain-gestaltdb[lmdb]==$VERSION" 'pytest>=8,<10' 'langchain-tests==1.0.0'; then
114
+ break
115
+ fi
116
+ if [ "$attempt" = 5 ]; then exit 1; fi
117
+ sleep 15
118
+ done
119
+ cd "$RUNNER_TEMP"
120
+ "$RUNNER_TEMP/released-env/bin/python" -c 'import os, importlib.metadata as m, langchain_gestaltdb as g; assert m.version("langchain-gestaltdb") == os.environ["VERSION"]; assert "site-packages" in g.__file__'
121
+ "$RUNNER_TEMP/released-env/bin/python" -m pytest "$GITHUB_WORKSPACE/tests" -c "$GITHUB_WORKSPACE/pyproject.toml"
@@ -0,0 +1,220 @@
1
+ # Byte-compiled / optimized / DLL files
2
+ __pycache__/
3
+ *.py[codz]
4
+ *$py.class
5
+
6
+ # C extensions
7
+ *.so
8
+
9
+ # Distribution / packaging
10
+ .Python
11
+ build/
12
+ develop-eggs/
13
+ dist/
14
+ downloads/
15
+ eggs/
16
+ .eggs/
17
+ lib/
18
+ lib64/
19
+ parts/
20
+ sdist/
21
+ var/
22
+ wheels/
23
+ share/python-wheels/
24
+ *.egg-info/
25
+ .installed.cfg
26
+ *.egg
27
+ MANIFEST
28
+
29
+ # PyInstaller
30
+ # Usually these files are written by a python script from a template
31
+ # before PyInstaller builds the exe, so as to inject date/other infos into it.
32
+ *.manifest
33
+ *.spec
34
+
35
+ # Installer logs
36
+ pip-log.txt
37
+ pip-delete-this-directory.txt
38
+
39
+ # Unit test / coverage reports
40
+ htmlcov/
41
+ .tox/
42
+ .nox/
43
+ .coverage
44
+ .coverage.*
45
+ .cache
46
+ nosetests.xml
47
+ coverage.xml
48
+ *.cover
49
+ *.py.cover
50
+ *.lcov
51
+ .hypothesis/
52
+ .pytest_cache/
53
+ cover/
54
+
55
+ # Translations
56
+ *.mo
57
+ *.pot
58
+
59
+ # Django stuff:
60
+ *.log
61
+ local_settings.py
62
+ db.sqlite3
63
+ db.sqlite3-journal
64
+
65
+ # Flask stuff:
66
+ instance/
67
+ .webassets-cache
68
+
69
+ # Scrapy stuff:
70
+ .scrapy
71
+
72
+ # Sphinx documentation
73
+ docs/_build/
74
+
75
+ # PyBuilder
76
+ .pybuilder/
77
+ target/
78
+
79
+ # Jupyter Notebook
80
+ .ipynb_checkpoints
81
+
82
+ # IPython
83
+ profile_default/
84
+ ipython_config.py
85
+
86
+ # pyenv
87
+ # For a library or package, you might want to ignore these files since the code is
88
+ # intended to run in multiple environments; otherwise, check them in:
89
+ # .python-version
90
+
91
+ # pipenv
92
+ # According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control.
93
+ # However, in case of collaboration, if having platform-specific dependencies or dependencies
94
+ # having no cross-platform support, pipenv may install dependencies that don't work, or not
95
+ # install all needed dependencies.
96
+ # Pipfile.lock
97
+
98
+ # uv
99
+ # Similar to Pipfile.lock, it is generally recommended to include uv.lock in version control.
100
+ # This is especially recommended for binary packages to ensure reproducibility, and is more
101
+ # commonly ignored for libraries.
102
+ # uv.lock
103
+
104
+ # poetry
105
+ # Similar to Pipfile.lock, it is generally recommended to include poetry.lock in version control.
106
+ # This is especially recommended for binary packages to ensure reproducibility, and is more
107
+ # commonly ignored for libraries.
108
+ # https://python-poetry.org/docs/basic-usage/#commit-your-poetrylock-file-to-version-control
109
+ # poetry.lock
110
+ # poetry.toml
111
+
112
+ # pdm
113
+ # Similar to Pipfile.lock, it is generally recommended to include pdm.lock in version control.
114
+ # pdm recommends including project-wide configuration in pdm.toml, but excluding .pdm-python.
115
+ # https://pdm-project.org/en/latest/usage/project/#working-with-version-control
116
+ # pdm.lock
117
+ # pdm.toml
118
+ .pdm-python
119
+ .pdm-build/
120
+
121
+ # pixi
122
+ # Similar to Pipfile.lock, it is generally recommended to include pixi.lock in version control.
123
+ # pixi.lock
124
+ # Pixi creates a virtual environment in the .pixi directory, just like venv module creates one
125
+ # in the .venv directory. It is recommended not to include this directory in version control.
126
+ .pixi/*
127
+ !.pixi/config.toml
128
+
129
+ # PEP 582; used by e.g. github.com/David-OConnor/pyflow and github.com/pdm-project/pdm
130
+ __pypackages__/
131
+
132
+ # Celery stuff
133
+ celerybeat-schedule*
134
+ celerybeat.pid
135
+
136
+ # Redis
137
+ *.rdb
138
+ *.aof
139
+ *.pid
140
+
141
+ # RabbitMQ
142
+ mnesia/
143
+ rabbitmq/
144
+ rabbitmq-data/
145
+
146
+ # ActiveMQ
147
+ activemq-data/
148
+
149
+ # SageMath parsed files
150
+ *.sage.py
151
+
152
+ # Environments
153
+ .env
154
+ .envrc
155
+ .venv
156
+ env/
157
+ venv/
158
+ ENV/
159
+ env.bak/
160
+ venv.bak/
161
+
162
+ # Spyder project settings
163
+ .spyderproject
164
+ .spyproject
165
+
166
+ # Rope project settings
167
+ .ropeproject
168
+
169
+ # mkdocs/Zensical documentation
170
+ /site
171
+
172
+ # mypy
173
+ .mypy_cache/
174
+ .dmypy.json
175
+ dmypy.json
176
+
177
+ # Pyre type checker
178
+ .pyre/
179
+
180
+ # pytype static type analyzer
181
+ .pytype/
182
+
183
+ # Cython debug symbols
184
+ cython_debug/
185
+
186
+ # PyCharm
187
+ # JetBrains specific template is maintained in a separate JetBrains.gitignore that can
188
+ # be found at https://github.com/github/gitignore/blob/main/Global/JetBrains.gitignore
189
+ # and can be added to the global gitignore or merged into this file. For a more nuclear
190
+ # option (not recommended) you can uncomment the following to ignore the entire idea folder.
191
+ # .idea/
192
+
193
+ # Abstra
194
+ # Abstra is an AI-powered process automation framework.
195
+ # Ignore directories containing user credentials, local state, and settings.
196
+ # Learn more at https://abstra.io/docs
197
+ .abstra/
198
+
199
+ # Visual Studio Code
200
+ # Visual Studio Code specific template is maintained in a separate VisualStudioCode.gitignore that
201
+ # can be found at https://github.com/github/gitignore/blob/main/Global/VisualStudioCode.gitignore
202
+ # and can be added to the global gitignore or merged into this file. However, if you prefer, you
203
+ # could uncomment the following to ignore the entire vscode folder
204
+ # .vscode/
205
+ # Temporary file for partial code execution
206
+ tempCodeRunnerFile.py
207
+
208
+ # Ruff stuff:
209
+ .ruff_cache/
210
+
211
+ # PyPI configuration file
212
+ .pypirc
213
+
214
+ # Marimo
215
+ marimo/_static/
216
+ marimo/_lsp/
217
+ __marimo__/
218
+
219
+ # Streamlit
220
+ .streamlit/secrets.toml
@@ -0,0 +1,28 @@
1
+ # Changelog
2
+
3
+ ## [0.1.0] - 2026-10-18
4
+
5
+ First public release of the Apache-2.0 LangChain integration for GestaltDB.
6
+
7
+ - Embedded graph lifecycle, parameterized Cypher, bounded schema discovery,
8
+ graph-document ingestion and source provenance.
9
+ - Fail-closed read-only query validation, bounded query/schema tools, and an
10
+ application-controlled toolkit with explicit write opt-in.
11
+ - Bounded typed-graph retrieval with indexed/external seeds, source-linked
12
+ Documents, deterministic output ordering and explicit truncation metadata.
13
+ - Four-valued historical claim status, filtered claim search, and bounded
14
+ provenance explanations; claims are separate from Cypher-visible graph edges.
15
+ - Explicitly enabled assertion, correction and retraction tools with validated
16
+ provenance/validity, historical identity preservation and bounded commit receipts.
17
+ - Tested on Python 3.10–3.13 with minimum/latest direct dependencies, installed
18
+ wheels, LMDB, LevelDB and PyRex contracts, and offline agent-style examples.
19
+ - Manual, environment-approved PyPI Trusted Publishing via `publish.yml`, using
20
+ exact-main CI artifacts, attestations and post-publication installation tests.
21
+
22
+ ### Compatibility and limitations
23
+
24
+ Requires `gestaltdb>=0.12.0,<0.13`, `langchain-core>=1.0,<2`, and
25
+ `pydantic>=2.7,<3`. Explicit backend extras: `lmdb`, `leveldb`, `rocksdb` (PyRex).
26
+ Backend guarantees vary; no universal atomicity/snapshot, native async, native
27
+ vector store or computational timeout is claimed. Read-only tools are not a
28
+ multitenant sandbox. See `docs/API.md` and `TECH_DEBT.md` before deployment.