engrama 0.13.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 (190) hide show
  1. engrama-0.13.0/.env.example +71 -0
  2. engrama-0.13.0/.github/CODEOWNERS +20 -0
  3. engrama-0.13.0/.github/ISSUE_TEMPLATE/bug.yml +84 -0
  4. engrama-0.13.0/.github/ISSUE_TEMPLATE/config.yml +5 -0
  5. engrama-0.13.0/.github/ISSUE_TEMPLATE/feature.yml +61 -0
  6. engrama-0.13.0/.github/dependabot.yml +92 -0
  7. engrama-0.13.0/.github/pull_request_template.md +37 -0
  8. engrama-0.13.0/.github/workflows/ci.yml +432 -0
  9. engrama-0.13.0/.github/workflows/docs.yml +61 -0
  10. engrama-0.13.0/.github/workflows/links.yml +58 -0
  11. engrama-0.13.0/.github/workflows/release.yml +311 -0
  12. engrama-0.13.0/.gitignore +49 -0
  13. engrama-0.13.0/.lycheeignore +8 -0
  14. engrama-0.13.0/LICENSE +200 -0
  15. engrama-0.13.0/PKG-INFO +185 -0
  16. engrama-0.13.0/README.md +134 -0
  17. engrama-0.13.0/docker-compose.yml +28 -0
  18. engrama-0.13.0/docs/architecture.es.md +707 -0
  19. engrama-0.13.0/docs/architecture.md +681 -0
  20. engrama-0.13.0/docs/assets/engrama.png +0 -0
  21. engrama-0.13.0/docs/assets/engrama.webp +0 -0
  22. engrama-0.13.0/docs/assets/hero_banner.webp +0 -0
  23. engrama-0.13.0/docs/backends.es.md +204 -0
  24. engrama-0.13.0/docs/backends.md +195 -0
  25. engrama-0.13.0/docs/changelog.md +608 -0
  26. engrama-0.13.0/docs/contributing.es.md +143 -0
  27. engrama-0.13.0/docs/contributing.md +138 -0
  28. engrama-0.13.0/docs/ddr-001.es.md +77 -0
  29. engrama-0.13.0/docs/ddr-001.md +77 -0
  30. engrama-0.13.0/docs/ddr-002.es.md +72 -0
  31. engrama-0.13.0/docs/ddr-002.md +72 -0
  32. engrama-0.13.0/docs/ddr-003.es.md +825 -0
  33. engrama-0.13.0/docs/ddr-003.md +803 -0
  34. engrama-0.13.0/docs/ddr-004.es.md +175 -0
  35. engrama-0.13.0/docs/ddr-004.md +165 -0
  36. engrama-0.13.0/docs/ddr-template.es.md +88 -0
  37. engrama-0.13.0/docs/ddr-template.md +84 -0
  38. engrama-0.13.0/docs/glosario.es.md +153 -0
  39. engrama-0.13.0/docs/glosario.md +10 -0
  40. engrama-0.13.0/docs/graph-schema.es.md +205 -0
  41. engrama-0.13.0/docs/graph-schema.md +204 -0
  42. engrama-0.13.0/docs/index.es.md +743 -0
  43. engrama-0.13.0/docs/index.md +777 -0
  44. engrama-0.13.0/docs/portable-storage-spec.md +431 -0
  45. engrama-0.13.0/docs/reference/system-prompts/v0.4.md +411 -0
  46. engrama-0.13.0/docs/reference/system-prompts/v0.5.md +79 -0
  47. engrama-0.13.0/docs/releasing.es.md +131 -0
  48. engrama-0.13.0/docs/releasing.md +129 -0
  49. engrama-0.13.0/docs/roadmap.es.md +297 -0
  50. engrama-0.13.0/docs/roadmap.md +298 -0
  51. engrama-0.13.0/docs/saas/streamable-http.es.md +249 -0
  52. engrama-0.13.0/docs/saas/streamable-http.md +240 -0
  53. engrama-0.13.0/docs/security.es.md +79 -0
  54. engrama-0.13.0/docs/security.md +73 -0
  55. engrama-0.13.0/docs/stylesheets/tokyo-night.css +66 -0
  56. engrama-0.13.0/docs/vision.es.md +43 -0
  57. engrama-0.13.0/docs/vision.md +43 -0
  58. engrama-0.13.0/engrama/__init__.py +17 -0
  59. engrama-0.13.0/engrama/adapters/__init__.py +3 -0
  60. engrama-0.13.0/engrama/adapters/mcp/__init__.py +172 -0
  61. engrama-0.13.0/engrama/adapters/mcp/http.py +179 -0
  62. engrama-0.13.0/engrama/adapters/mcp/server.py +3135 -0
  63. engrama-0.13.0/engrama/adapters/obsidian/__init__.py +7 -0
  64. engrama-0.13.0/engrama/adapters/obsidian/adapter.py +309 -0
  65. engrama-0.13.0/engrama/adapters/obsidian/parser.py +202 -0
  66. engrama-0.13.0/engrama/adapters/obsidian/sync.py +409 -0
  67. engrama-0.13.0/engrama/adapters/sdk/__init__.py +507 -0
  68. engrama-0.13.0/engrama/backends/__init__.py +266 -0
  69. engrama-0.13.0/engrama/backends/neo4j/__init__.py +6 -0
  70. engrama-0.13.0/engrama/backends/neo4j/async_store.py +1328 -0
  71. engrama-0.13.0/engrama/backends/neo4j/backend.py +1260 -0
  72. engrama-0.13.0/engrama/backends/neo4j/schema.cypher +112 -0
  73. engrama-0.13.0/engrama/backends/neo4j/vector.py +272 -0
  74. engrama-0.13.0/engrama/backends/null.py +139 -0
  75. engrama-0.13.0/engrama/backends/sqlite/__init__.py +7 -0
  76. engrama-0.13.0/engrama/backends/sqlite/async_store.py +550 -0
  77. engrama-0.13.0/engrama/backends/sqlite/schema.sql +53 -0
  78. engrama-0.13.0/engrama/backends/sqlite/store.py +1755 -0
  79. engrama-0.13.0/engrama/backends/sqlite/vector.py +277 -0
  80. engrama-0.13.0/engrama/bench/__init__.py +64 -0
  81. engrama-0.13.0/engrama/bench/core.py +127 -0
  82. engrama-0.13.0/engrama/bench/locomo.py +190 -0
  83. engrama-0.13.0/engrama/bench/longmemeval.py +168 -0
  84. engrama-0.13.0/engrama/bench/report.py +177 -0
  85. engrama-0.13.0/engrama/bench/runner.py +714 -0
  86. engrama-0.13.0/engrama/bench/scoring.py +163 -0
  87. engrama-0.13.0/engrama/cli.py +1248 -0
  88. engrama-0.13.0/engrama/core/__init__.py +31 -0
  89. engrama-0.13.0/engrama/core/client.py +145 -0
  90. engrama-0.13.0/engrama/core/engine.py +348 -0
  91. engrama-0.13.0/engrama/core/identity.py +66 -0
  92. engrama-0.13.0/engrama/core/protocols.py +259 -0
  93. engrama-0.13.0/engrama/core/schema.py +564 -0
  94. engrama-0.13.0/engrama/core/scope.py +241 -0
  95. engrama-0.13.0/engrama/core/search.py +459 -0
  96. engrama-0.13.0/engrama/core/security.py +237 -0
  97. engrama-0.13.0/engrama/core/temporal.py +153 -0
  98. engrama-0.13.0/engrama/core/text.py +11 -0
  99. engrama-0.13.0/engrama/embeddings/__init__.py +74 -0
  100. engrama-0.13.0/engrama/embeddings/health.py +59 -0
  101. engrama-0.13.0/engrama/embeddings/null.py +55 -0
  102. engrama-0.13.0/engrama/embeddings/ollama.py +244 -0
  103. engrama-0.13.0/engrama/embeddings/openai_compat.py +224 -0
  104. engrama-0.13.0/engrama/embeddings/text.py +59 -0
  105. engrama-0.13.0/engrama/ingest/__init__.py +6 -0
  106. engrama-0.13.0/engrama/migrate.py +721 -0
  107. engrama-0.13.0/engrama/skills/__init__.py +10 -0
  108. engrama-0.13.0/engrama/skills/associate.py +157 -0
  109. engrama-0.13.0/engrama/skills/forget.py +91 -0
  110. engrama-0.13.0/engrama/skills/onboard/SKILL.md +249 -0
  111. engrama-0.13.0/engrama/skills/onboard/references/example-profiles.md +395 -0
  112. engrama-0.13.0/engrama/skills/onboard/scripts/generate_from_profile.py +476 -0
  113. engrama-0.13.0/engrama/skills/proactive.py +203 -0
  114. engrama-0.13.0/engrama/skills/recall.py +142 -0
  115. engrama-0.13.0/engrama/skills/reflect.py +395 -0
  116. engrama-0.13.0/engrama/skills/remember.py +74 -0
  117. engrama-0.13.0/examples/claude_desktop/config.json +13 -0
  118. engrama-0.13.0/examples/claude_desktop/system-prompt.md +182 -0
  119. engrama-0.13.0/examples/langchain_agent/example.py +4 -0
  120. engrama-0.13.0/mkdocs.yml +113 -0
  121. engrama-0.13.0/profiles/base.yaml +82 -0
  122. engrama-0.13.0/profiles/developer.yaml +44 -0
  123. engrama-0.13.0/profiles/modules/ai.yaml +28 -0
  124. engrama-0.13.0/profiles/modules/hacking.yaml +44 -0
  125. engrama-0.13.0/profiles/modules/photography.yaml +26 -0
  126. engrama-0.13.0/profiles/modules/teaching.yaml +42 -0
  127. engrama-0.13.0/pyproject.toml +79 -0
  128. engrama-0.13.0/scripts/bench_search_context.py +185 -0
  129. engrama-0.13.0/scripts/check_scoped_queries.py +239 -0
  130. engrama-0.13.0/scripts/generate_from_profile.py +672 -0
  131. engrama-0.13.0/scripts/init-schema.cypher +187 -0
  132. engrama-0.13.0/tests/backends/__init__.py +0 -0
  133. engrama-0.13.0/tests/backends/test_degenerate_embeddings.py +197 -0
  134. engrama-0.13.0/tests/backends/test_sqlite.py +972 -0
  135. engrama-0.13.0/tests/backends/test_sqlite_async.py +303 -0
  136. engrama-0.13.0/tests/backends/test_sqlite_vector.py +169 -0
  137. engrama-0.13.0/tests/conftest.py +42 -0
  138. engrama-0.13.0/tests/contracts/__init__.py +0 -0
  139. engrama-0.13.0/tests/contracts/test_async_graphstore_contract.py +372 -0
  140. engrama-0.13.0/tests/contracts/test_graphstore_contract.py +277 -0
  141. engrama-0.13.0/tests/data/locomo_mini.json +50 -0
  142. engrama-0.13.0/tests/data/longmemeval_mini.json +40 -0
  143. engrama-0.13.0/tests/test_adapters.py +118 -0
  144. engrama-0.13.0/tests/test_bench.py +1120 -0
  145. engrama-0.13.0/tests/test_cli.py +115 -0
  146. engrama-0.13.0/tests/test_cold_start_embedding_repro.py +150 -0
  147. engrama-0.13.0/tests/test_composable.py +371 -0
  148. engrama-0.13.0/tests/test_core.py +220 -0
  149. engrama-0.13.0/tests/test_embeddings.py +495 -0
  150. engrama-0.13.0/tests/test_export_import.py +256 -0
  151. engrama-0.13.0/tests/test_export_import_cross_backend.py +114 -0
  152. engrama-0.13.0/tests/test_hybrid_search.py +719 -0
  153. engrama-0.13.0/tests/test_identity.py +42 -0
  154. engrama-0.13.0/tests/test_inline_relations_validation.py +92 -0
  155. engrama-0.13.0/tests/test_mcp_entrypoint.py +75 -0
  156. engrama-0.13.0/tests/test_mcp_http.py +192 -0
  157. engrama-0.13.0/tests/test_mcp_logging_scope.py +121 -0
  158. engrama-0.13.0/tests/test_mcp_remember_fixes.py +208 -0
  159. engrama-0.13.0/tests/test_mcp_remember_merge_key.py +299 -0
  160. engrama-0.13.0/tests/test_mcp_status.py +144 -0
  161. engrama-0.13.0/tests/test_mcp_sync_dry_run.py +203 -0
  162. engrama-0.13.0/tests/test_merge_key_canonical.py +142 -0
  163. engrama-0.13.0/tests/test_migrate_keys.py +287 -0
  164. engrama-0.13.0/tests/test_neo4j_schema_packaging.py +55 -0
  165. engrama-0.13.0/tests/test_neo4j_store.py +298 -0
  166. engrama-0.13.0/tests/test_no_unscoped_match.py +115 -0
  167. engrama-0.13.0/tests/test_obsidian_sync.py +346 -0
  168. engrama-0.13.0/tests/test_openai_compat_embedder.py +256 -0
  169. engrama-0.13.0/tests/test_phase4_skills.py +471 -0
  170. engrama-0.13.0/tests/test_proactive.py +292 -0
  171. engrama-0.13.0/tests/test_protocols.py +165 -0
  172. engrama-0.13.0/tests/test_provenance.py +252 -0
  173. engrama-0.13.0/tests/test_reindex_tool.py +125 -0
  174. engrama-0.13.0/tests/test_sanitiser.py +222 -0
  175. engrama-0.13.0/tests/test_scope.py +218 -0
  176. engrama-0.13.0/tests/test_scope_e2e.py +222 -0
  177. engrama-0.13.0/tests/test_scope_failclosed.py +115 -0
  178. engrama-0.13.0/tests/test_scope_reads.py +219 -0
  179. engrama-0.13.0/tests/test_scope_resolver.py +61 -0
  180. engrama-0.13.0/tests/test_sdk.py +244 -0
  181. engrama-0.13.0/tests/test_skills.py +253 -0
  182. engrama-0.13.0/tests/test_temporal.py +837 -0
  183. engrama-0.13.0/tests/test_tenancy_empty_scope.py +340 -0
  184. engrama-0.13.0/tests/test_tenancy_isolation.py +69 -0
  185. engrama-0.13.0/tests/test_tenancy_migration.py +260 -0
  186. engrama-0.13.0/tests/test_tenancy_standalone.py +65 -0
  187. engrama-0.13.0/tests/test_tenancy_write_identity.py +310 -0
  188. engrama-0.13.0/tests/test_trust_aware_search.py +204 -0
  189. engrama-0.13.0/tests/test_vector_store.py +494 -0
  190. engrama-0.13.0/uv.lock +3385 -0
@@ -0,0 +1,71 @@
1
+ # Engrama — environment variables
2
+ # Copy this file to .env and edit as needed.
3
+ #
4
+ # IMPORTANT: .env is in .gitignore — never commit real credentials.
5
+ #
6
+ # The base install runs on SQLite with zero external services. Skip down
7
+ # to "Optional: Neo4j backend" only if you've decided you need Neo4j
8
+ # (see BACKENDS.md for the decision guide).
9
+
10
+ # === Default backend: SQLite + sqlite-vec (DDR-004) ===
11
+ # Storage lives in a single file under your home directory. Override
12
+ # the path if you want to keep it elsewhere.
13
+ GRAPH_BACKEND=sqlite
14
+ # ENGRAMA_DB_PATH=~/.engrama/engrama.db # default; uncomment to override
15
+
16
+ # === Profile (used by `engrama init`) ===
17
+ ENGRAMA_PROFILE=developer
18
+
19
+ # === Obsidian vault sync (optional) ===
20
+ # Required for engrama_sync_note / engrama_sync_vault /
21
+ # engrama_write_insight_to_vault. Leave it pointing at any directory if
22
+ # you don't use Obsidian; the graph tools will still work.
23
+ VAULT_PATH=~/Documents/vault
24
+
25
+ # === Embeddings (optional, DDR-003 Phase B + DDR-004) ===
26
+ # Providers:
27
+ # none — fulltext only (default, zero-dep).
28
+ # ollama — legacy convenience wrapper around Ollama's /api/embeddings.
29
+ # openai — OpenAI-compatible /v1/embeddings (covers OpenAI, Ollama
30
+ # /v1, LM Studio, vLLM, llama.cpp, Jina, etc.).
31
+ EMBEDDING_PROVIDER=none
32
+ EMBEDDING_MODEL=nomic-embed-text
33
+ EMBEDDING_DIMENSIONS=768
34
+
35
+ # --- ollama provider ---
36
+ OLLAMA_URL=http://localhost:11434
37
+
38
+ # --- openai-compatible provider ---
39
+ # Pick the base URL that matches your service.
40
+ # OpenAI proper: https://api.openai.com/v1
41
+ # Ollama (OpenAI mode): http://localhost:11434/v1
42
+ # LM Studio: http://localhost:1234/v1
43
+ # vLLM: http://localhost:8000/v1
44
+ # llama.cpp server: http://localhost:8080/v1
45
+ # Jina: https://api.jina.ai/v1
46
+ # OPENAI_BASE_URL=https://api.openai.com/v1
47
+ # OPENAI_API_KEY=
48
+
49
+ # === Hybrid search (DDR-003 Phase C) ===
50
+ # Alpha controls fulltext vs vector weight (0.0 = all fulltext, 1.0 = all vector)
51
+ HYBRID_ALPHA=0.6
52
+ # Beta is the graph topology boost weight
53
+ HYBRID_GRAPH_BETA=0.15
54
+
55
+
56
+ # ============================================================
57
+ # Optional: Neo4j backend (opt-in via `uv sync --extra neo4j`)
58
+ # ============================================================
59
+ # Uncomment everything below to switch to Neo4j. Make sure the
60
+ # `neo4j` extra is installed and the database is reachable
61
+ # (e.g. via `docker compose up -d` against the bundled
62
+ # docker-compose.yml).
63
+
64
+ # GRAPH_BACKEND=neo4j
65
+ # NEO4J_URI=bolt://localhost:7687
66
+ # NEO4J_USERNAME=neo4j
67
+ # NEO4J_PASSWORD=CHANGE_ME_BEFORE_FIRST_RUN
68
+ # NEO4J_DATABASE=neo4j
69
+
70
+ # When using Neo4j with embeddings enabled, you may also want:
71
+ # VECTOR_BACKEND=neo4j # default for sqlite is sqlite-vec; for neo4j is none unless explicitly enabled
@@ -0,0 +1,20 @@
1
+ # Auto-assigned reviewers per path.
2
+ #
3
+ # Lines later in the file take precedence over earlier ones, so the most
4
+ # specific match wins. With a single maintainer today, the default rule
5
+ # covers everything; per-path overrides exist as anchor points for future
6
+ # co-maintainers without rewriting the file.
7
+ #
8
+ # Docs: https://docs.github.com/en/repositories/managing-your-repositorys-settings-and-security/customizing-your-repository/about-code-owners
9
+
10
+ # Default owner for everything in the repo.
11
+ * @scops
12
+
13
+ # CI, packaging and supply-chain code is load-bearing; flag it explicitly.
14
+ /.github/ @scops
15
+ /pyproject.toml @scops
16
+ /uv.lock @scops
17
+
18
+ # Architecture decisions and DDRs need an owner-level signoff.
19
+ /DDR-*.md @scops
20
+ /SECURITY.md @scops
@@ -0,0 +1,84 @@
1
+ name: Bug report
2
+ description: Something doesn't work the way the docs / DDRs say it should.
3
+ title: "bug: "
4
+ labels: ["bug", "triage"]
5
+ body:
6
+ - type: markdown
7
+ attributes:
8
+ value: |
9
+ Thanks for taking the time to file a bug. Please include enough
10
+ context that someone unfamiliar with your setup can reproduce it.
11
+ Security-sensitive bugs should go through [private vulnerability
12
+ reporting](../../security/advisories/new) instead of a public issue.
13
+
14
+ - type: input
15
+ id: version
16
+ attributes:
17
+ label: Engrama version
18
+ description: "Output of `python -c \"import engrama; print(engrama.__version__)\"`."
19
+ placeholder: "0.9.0"
20
+ validations:
21
+ required: true
22
+
23
+ - type: dropdown
24
+ id: backend
25
+ attributes:
26
+ label: Backend in use
27
+ description: Which storage backend was active when the bug appeared?
28
+ options:
29
+ - SQLite (default)
30
+ - Neo4j
31
+ - Both / not sure
32
+ validations:
33
+ required: true
34
+
35
+ - type: input
36
+ id: python
37
+ attributes:
38
+ label: Python version
39
+ placeholder: "3.12.4"
40
+ validations:
41
+ required: true
42
+
43
+ - type: input
44
+ id: os
45
+ attributes:
46
+ label: Operating system
47
+ placeholder: "macOS 14.5 / Ubuntu 24.04 / Windows 11"
48
+ validations:
49
+ required: true
50
+
51
+ - type: textarea
52
+ id: reproduce
53
+ attributes:
54
+ label: Steps to reproduce
55
+ description: Minimal commands or code that trigger the bug. Smaller is better.
56
+ placeholder: |
57
+ 1. `engrama init`
58
+ 2. `engrama remember "..."`
59
+ 3. Observed: ...
60
+ validations:
61
+ required: true
62
+
63
+ - type: textarea
64
+ id: expected
65
+ attributes:
66
+ label: Expected behaviour
67
+ validations:
68
+ required: true
69
+
70
+ - type: textarea
71
+ id: actual
72
+ attributes:
73
+ label: Actual behaviour
74
+ description: Include the full traceback if any. Use triple backticks for code blocks.
75
+ validations:
76
+ required: true
77
+
78
+ - type: textarea
79
+ id: extra
80
+ attributes:
81
+ label: Anything else?
82
+ description: Logs, screenshots, related issues, theories about the root cause.
83
+ validations:
84
+ required: false
@@ -0,0 +1,5 @@
1
+ blank_issues_enabled: true
2
+ contact_links:
3
+ - name: Security vulnerability (private)
4
+ url: https://github.com/scops/engrama/security/advisories/new
5
+ about: Report a security issue privately. Do not file a public issue.
@@ -0,0 +1,61 @@
1
+ name: Feature request
2
+ description: Suggest an enhancement, new skill, new backend or API change.
3
+ title: "feat: "
4
+ labels: ["enhancement", "triage"]
5
+ body:
6
+ - type: markdown
7
+ attributes:
8
+ value: |
9
+ Engrama tries to stay small and opinionated. The more concretely
10
+ you describe the problem you're hitting, the easier it is to land
11
+ on a design that fits.
12
+
13
+ - type: textarea
14
+ id: problem
15
+ attributes:
16
+ label: Problem
17
+ description: What are you trying to do that Engrama makes hard or impossible today?
18
+ validations:
19
+ required: true
20
+
21
+ - type: textarea
22
+ id: proposal
23
+ attributes:
24
+ label: Proposal
25
+ description: Sketch the shape — API signature, CLI flag, config key, MCP tool, schema change…
26
+ validations:
27
+ required: true
28
+
29
+ - type: textarea
30
+ id: alternatives
31
+ attributes:
32
+ label: Alternatives considered
33
+ description: What else did you try or think about? Why isn't it enough?
34
+ validations:
35
+ required: false
36
+
37
+ - type: dropdown
38
+ id: scope
39
+ attributes:
40
+ label: Where does this live?
41
+ multiple: true
42
+ options:
43
+ - Skills / engine
44
+ - SQLite backend
45
+ - Neo4j backend
46
+ - Embedding provider
47
+ - MCP adapter
48
+ - SDK / CLI
49
+ - Profiles / schema
50
+ - Docs / repo hygiene
51
+ - Not sure
52
+ validations:
53
+ required: true
54
+
55
+ - type: textarea
56
+ id: extra
57
+ attributes:
58
+ label: Anything else?
59
+ description: Prior art in other projects, links to related issues / DDRs, screenshots.
60
+ validations:
61
+ required: false
@@ -0,0 +1,92 @@
1
+ # Dependabot configuration — see https://docs.github.com/code-security/dependabot
2
+ #
3
+ # Goals:
4
+ # - Catch security advisories on Python dependencies promptly.
5
+ # - Keep GitHub Actions pinned to current versions (security + features).
6
+ # - Avoid PR fatigue: group routine bumps into a single weekly PR per
7
+ # ecosystem; only security and major bumps come as their own PRs.
8
+
9
+ version: 2
10
+
11
+ updates:
12
+ # ---------------------------------------------------------------------------
13
+ # Python dependencies (declared in pyproject.toml; Dependabot reads uv.lock
14
+ # via the `pip` ecosystem, which understands PEP 621 + lockfiles).
15
+ # ---------------------------------------------------------------------------
16
+ - package-ecosystem: "pip"
17
+ directory: "/"
18
+ schedule:
19
+ interval: "weekly"
20
+ day: "monday"
21
+ time: "06:00"
22
+ timezone: "Europe/Madrid"
23
+ open-pull-requests-limit: 5
24
+ labels:
25
+ - "dependencies"
26
+ - "python"
27
+ commit-message:
28
+ prefix: "chore(deps)"
29
+ include: "scope"
30
+ groups:
31
+ # Routine patch + minor bumps batched into one PR to reduce noise.
32
+ python-minor-and-patch:
33
+ applies-to: version-updates
34
+ update-types:
35
+ - "patch"
36
+ - "minor"
37
+ # Security advisories always get their own PR (one per CVE) so they
38
+ # are visible and reviewable in isolation. Achieved by NOT including
39
+ # security-updates in any group.
40
+ ignore:
41
+ # fastmcp v3 introduces breaking changes that fail our MCP test
42
+ # suite (verified on PR #10, closed without merge). Stop Dependabot
43
+ # from re-proposing major bumps until we deliberately migrate.
44
+ # Patch and minor updates within v2 are still welcome.
45
+ - dependency-name: "fastmcp"
46
+ update-types:
47
+ - "version-update:semver-major"
48
+
49
+ # ---------------------------------------------------------------------------
50
+ # GitHub Actions used in .github/workflows/*.yml — keep them pinned to a
51
+ # current major and grab security fixes promptly.
52
+ # ---------------------------------------------------------------------------
53
+ - package-ecosystem: "github-actions"
54
+ directory: "/"
55
+ schedule:
56
+ interval: "weekly"
57
+ day: "monday"
58
+ time: "06:00"
59
+ timezone: "Europe/Madrid"
60
+ open-pull-requests-limit: 3
61
+ labels:
62
+ - "dependencies"
63
+ - "github-actions"
64
+ commit-message:
65
+ prefix: "chore(ci)"
66
+ include: "scope"
67
+ groups:
68
+ actions-minor-and-patch:
69
+ applies-to: version-updates
70
+ update-types:
71
+ - "patch"
72
+ - "minor"
73
+
74
+ # ---------------------------------------------------------------------------
75
+ # Docker — currently only the Neo4j image referenced from
76
+ # docker-compose.yml. Less frequent (monthly) since Neo4j 5.26 is LTS and
77
+ # we pin to a specific minor.
78
+ # ---------------------------------------------------------------------------
79
+ - package-ecosystem: "docker"
80
+ directory: "/"
81
+ schedule:
82
+ interval: "monthly"
83
+ day: "monday"
84
+ time: "06:00"
85
+ timezone: "Europe/Madrid"
86
+ open-pull-requests-limit: 2
87
+ labels:
88
+ - "dependencies"
89
+ - "docker"
90
+ commit-message:
91
+ prefix: "chore(deps)"
92
+ include: "scope"
@@ -0,0 +1,37 @@
1
+ <!--
2
+ Thanks for the contribution! A short, focused PR is much easier to review
3
+ than a long one. If this change is broad, consider splitting it.
4
+ -->
5
+
6
+ ## Summary
7
+
8
+ <!-- One or two sentences. Lead with *why*; the diff already shows *what*. -->
9
+
10
+ ## Backend impact
11
+
12
+ <!-- Tick all that apply. Drives which CI jobs reviewers should focus on. -->
13
+
14
+ - [ ] SQLite (default backend)
15
+ - [ ] Neo4j (opt-in extra)
16
+ - [ ] Both backends (contract / engine / skills / MCP)
17
+ - [ ] None — docs, CI, repo hygiene, or tests only
18
+
19
+ ## Test plan
20
+
21
+ <!--
22
+ What did you actually run locally? Pre-checked the rows you executed.
23
+ Add more bullets for anything specific to this change (manual MCP call,
24
+ CLI invocation, sample script, screenshot, etc.).
25
+ -->
26
+
27
+ - [ ] `uv run ruff format --check . && uv run ruff check .`
28
+ - [ ] `uv run pytest -q tests/backends tests/contracts tests/test_protocols.py tests/test_composable.py tests/test_openai_compat_embedder.py tests/test_cli.py`
29
+ - [ ] Full suite with Neo4j running (only if this PR touches the Neo4j path): `uv run pytest -v`
30
+ - [ ] Manual verification (describe):
31
+
32
+ ## Notes for reviewer
33
+
34
+ <!--
35
+ Open questions, follow-ups deliberately deferred, gotchas, links to
36
+ related issues / DDRs / PRs. Leave empty if nothing applies.
37
+ -->