sidegraph 0.12.0__tar.gz → 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 (509) hide show
  1. {sidegraph-0.12.0 → sidegraph-0.13.0}/.github/workflows/ci.yml +3 -0
  2. {sidegraph-0.12.0 → sidegraph-0.13.0}/CHANGELOG.md +42 -0
  3. {sidegraph-0.12.0 → sidegraph-0.13.0}/CLAUDE.md +1 -1
  4. sidegraph-0.13.0/PKG-INFO +310 -0
  5. sidegraph-0.13.0/README.md +280 -0
  6. {sidegraph-0.12.0 → sidegraph-0.13.0}/docs/getting-started/bootstrap.md +1 -1
  7. {sidegraph-0.12.0 → sidegraph-0.13.0}/docs/getting-started/claude-code-setup.md +8 -6
  8. {sidegraph-0.12.0 → sidegraph-0.13.0}/docs/getting-started/codex-setup.md +7 -6
  9. {sidegraph-0.12.0 → sidegraph-0.13.0}/docs/getting-started/installation.md +41 -37
  10. {sidegraph-0.12.0 → sidegraph-0.13.0}/docs/getting-started/quickstart.md +32 -12
  11. {sidegraph-0.12.0 → sidegraph-0.13.0}/docs/guides/troubleshooting.md +32 -26
  12. {sidegraph-0.12.0 → sidegraph-0.13.0}/docs/guides/verifying-your-setup.md +1 -1
  13. {sidegraph-0.12.0 → sidegraph-0.13.0}/docs/integrations/claude-code.md +17 -15
  14. {sidegraph-0.12.0 → sidegraph-0.13.0}/docs/integrations/codex.md +26 -16
  15. {sidegraph-0.12.0 → sidegraph-0.13.0}/docs/reference/cli.md +8 -6
  16. {sidegraph-0.12.0 → sidegraph-0.13.0}/docs/reference/configuration.md +4 -1
  17. {sidegraph-0.12.0 → sidegraph-0.13.0}/docs/reference/hooks.md +2 -2
  18. {sidegraph-0.12.0 → sidegraph-0.13.0}/docs/reference/mcp-tools.md +4 -1
  19. {sidegraph-0.12.0 → sidegraph-0.13.0}/plugin/sidegraph/.claude-plugin/plugin.json +1 -1
  20. {sidegraph-0.12.0 → sidegraph-0.13.0}/plugin/sidegraph/.codex-plugin/plugin.json +1 -1
  21. sidegraph-0.13.0/plugin/sidegraph/.mcp.json +17 -0
  22. {sidegraph-0.12.0 → sidegraph-0.13.0}/plugin/sidegraph/codex/hooks.json +6 -3
  23. sidegraph-0.13.0/plugin/sidegraph/codex/mcp.json +15 -0
  24. {sidegraph-0.12.0 → sidegraph-0.13.0}/pyproject.toml +1 -1
  25. {sidegraph-0.12.0 → sidegraph-0.13.0}/src/sidegraph/__init__.py +1 -1
  26. {sidegraph-0.12.0 → sidegraph-0.13.0}/src/sidegraph/capture.py +3 -1
  27. {sidegraph-0.12.0 → sidegraph-0.13.0}/src/sidegraph/doctor.py +7 -3
  28. {sidegraph-0.12.0 → sidegraph-0.13.0}/src/sidegraph/engine/reader.py +17 -5
  29. {sidegraph-0.12.0 → sidegraph-0.13.0}/src/sidegraph/githooks.py +2 -0
  30. {sidegraph-0.12.0 → sidegraph-0.13.0}/src/sidegraph/gitio.py +23 -6
  31. {sidegraph-0.12.0 → sidegraph-0.13.0}/src/sidegraph/host/hooks.py +9 -3
  32. {sidegraph-0.12.0 → sidegraph-0.13.0}/src/sidegraph/host/mcp_entry.py +46 -0
  33. {sidegraph-0.12.0 → sidegraph-0.13.0}/src/sidegraph/server.py +4 -1
  34. {sidegraph-0.12.0 → sidegraph-0.13.0}/src/sidegraph/store.py +2 -0
  35. {sidegraph-0.12.0 → sidegraph-0.13.0}/src/sidegraph/verify.py +7 -3
  36. {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_codex_plugin.py +26 -9
  37. sidegraph-0.13.0/tests/test_command_windows.py +408 -0
  38. {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_docs_claims.py +11 -5
  39. sidegraph-0.13.0/tests/test_git_output_utf8.py +222 -0
  40. sidegraph-0.13.0/tests/test_hook_payload_encoding.py +99 -0
  41. {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_host_wiring_checks.py +2 -1
  42. sidegraph-0.13.0/tests/test_mcp_entry_ratify_policy.py +104 -0
  43. sidegraph-0.13.0/tests/test_mcp_entry_repo_root.py +148 -0
  44. {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_public_hook_launch.py +63 -0
  45. {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_session_attribution.py +12 -0
  46. {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_subagent_start_manifests.py +6 -0
  47. sidegraph-0.13.0/tests/test_subprocess_text_encoding.py +111 -0
  48. {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_verify_git_stdin.py +2 -1
  49. {sidegraph-0.12.0 → sidegraph-0.13.0}/uv.lock +1 -1
  50. sidegraph-0.12.0/PKG-INFO +0 -262
  51. sidegraph-0.12.0/README.md +0 -232
  52. sidegraph-0.12.0/plugin/sidegraph/.mcp.json +0 -16
  53. sidegraph-0.12.0/plugin/sidegraph/codex/mcp.json +0 -9
  54. {sidegraph-0.12.0 → sidegraph-0.13.0}/.agents/plugins/marketplace.json +0 -0
  55. {sidegraph-0.12.0 → sidegraph-0.13.0}/.claude-plugin/marketplace.json +0 -0
  56. {sidegraph-0.12.0 → sidegraph-0.13.0}/.github/CODEOWNERS +0 -0
  57. {sidegraph-0.12.0 → sidegraph-0.13.0}/.github/ISSUE_TEMPLATE/bug_report.yml +0 -0
  58. {sidegraph-0.12.0 → sidegraph-0.13.0}/.github/ISSUE_TEMPLATE/config.yml +0 -0
  59. {sidegraph-0.12.0 → sidegraph-0.13.0}/.github/ISSUE_TEMPLATE/feature_request.yml +0 -0
  60. {sidegraph-0.12.0 → sidegraph-0.13.0}/.github/PULL_REQUEST_TEMPLATE.md +0 -0
  61. {sidegraph-0.12.0 → sidegraph-0.13.0}/.github/secret_scanning.yml +0 -0
  62. {sidegraph-0.12.0 → sidegraph-0.13.0}/.github/workflows/publish.yml +0 -0
  63. {sidegraph-0.12.0 → sidegraph-0.13.0}/.github/workflows/scorecard.yml +0 -0
  64. {sidegraph-0.12.0 → sidegraph-0.13.0}/.github/workflows/session-link-gate.yml +0 -0
  65. {sidegraph-0.12.0 → sidegraph-0.13.0}/.gitignore +0 -0
  66. {sidegraph-0.12.0 → sidegraph-0.13.0}/.gitleaks.toml +0 -0
  67. {sidegraph-0.12.0 → sidegraph-0.13.0}/.pre-commit-config.yaml +0 -0
  68. {sidegraph-0.12.0 → sidegraph-0.13.0}/.python-version +0 -0
  69. {sidegraph-0.12.0 → sidegraph-0.13.0}/AGENTS.md +0 -0
  70. {sidegraph-0.12.0 → sidegraph-0.13.0}/CODE_OF_CONDUCT.md +0 -0
  71. {sidegraph-0.12.0 → sidegraph-0.13.0}/CONTRIBUTING.md +0 -0
  72. {sidegraph-0.12.0 → sidegraph-0.13.0}/LICENSE +0 -0
  73. {sidegraph-0.12.0 → sidegraph-0.13.0}/SECURITY.md +0 -0
  74. {sidegraph-0.12.0 → sidegraph-0.13.0}/docs/README.md +0 -0
  75. {sidegraph-0.12.0 → sidegraph-0.13.0}/docs/concepts/anchoring.md +0 -0
  76. {sidegraph-0.12.0 → sidegraph-0.13.0}/docs/concepts/data-model.md +0 -0
  77. {sidegraph-0.12.0 → sidegraph-0.13.0}/docs/concepts/decision-memory.md +0 -0
  78. {sidegraph-0.12.0 → sidegraph-0.13.0}/docs/concepts/mind-model.md +0 -0
  79. {sidegraph-0.12.0 → sidegraph-0.13.0}/docs/concepts/retrieval.md +0 -0
  80. {sidegraph-0.12.0 → sidegraph-0.13.0}/docs/guides/capturing-decisions.md +0 -0
  81. {sidegraph-0.12.0 → sidegraph-0.13.0}/docs/guides/ci-cd-maintenance.md +0 -0
  82. {sidegraph-0.12.0 → sidegraph-0.13.0}/docs/guides/naming-your-domains.md +0 -0
  83. {sidegraph-0.12.0 → sidegraph-0.13.0}/docs/guides/retrieval-in-sessions.md +0 -0
  84. {sidegraph-0.12.0 → sidegraph-0.13.0}/docs/guides/semantic-docs.md +0 -0
  85. {sidegraph-0.12.0 → sidegraph-0.13.0}/docs/guides/surviving-refactors.md +0 -0
  86. {sidegraph-0.12.0 → sidegraph-0.13.0}/docs/guides/team-workflow.md +0 -0
  87. {sidegraph-0.12.0 → sidegraph-0.13.0}/docs/integrations/graphify.md +0 -0
  88. {sidegraph-0.12.0 → sidegraph-0.13.0}/docs/llms.txt +0 -0
  89. {sidegraph-0.12.0 → sidegraph-0.13.0}/docs/pilot-kit/README.md +0 -0
  90. {sidegraph-0.12.0 → sidegraph-0.13.0}/docs/pilot-kit/corpus_fit.py +0 -0
  91. {sidegraph-0.12.0 → sidegraph-0.13.0}/docs/pilot-kit/judge-prompt.md +0 -0
  92. {sidegraph-0.12.0 → sidegraph-0.13.0}/docs/pilot-kit/questions-prompt.md +0 -0
  93. {sidegraph-0.12.0 → sidegraph-0.13.0}/docs/pilot-kit/rubric-template.md +0 -0
  94. {sidegraph-0.12.0 → sidegraph-0.13.0}/docs/reference/git-bindings.md +0 -0
  95. {sidegraph-0.12.0 → sidegraph-0.13.0}/docs/reference/operations.md +0 -0
  96. {sidegraph-0.12.0 → sidegraph-0.13.0}/docs/reference/releasing.md +0 -0
  97. {sidegraph-0.12.0 → sidegraph-0.13.0}/docs/reference/stability.md +0 -0
  98. {sidegraph-0.12.0 → sidegraph-0.13.0}/docs/reference/store-format.md +0 -0
  99. {sidegraph-0.12.0 → sidegraph-0.13.0}/docs/whitepaper/index.md +0 -0
  100. {sidegraph-0.12.0 → sidegraph-0.13.0}/plugin/sidegraph/hooks/hooks.json +0 -0
  101. {sidegraph-0.12.0 → sidegraph-0.13.0}/plugin/sidegraph/skills/check-plan/SKILL.md +0 -0
  102. {sidegraph-0.12.0 → sidegraph-0.13.0}/plugin/sidegraph/skills/check-plan/agents/openai.yaml +0 -0
  103. {sidegraph-0.12.0 → sidegraph-0.13.0}/plugin/sidegraph/skills/explain-why/SKILL.md +0 -0
  104. {sidegraph-0.12.0 → sidegraph-0.13.0}/plugin/sidegraph/skills/explain-why/agents/openai.yaml +0 -0
  105. {sidegraph-0.12.0 → sidegraph-0.13.0}/plugin/sidegraph/skills/heal-anchors/SKILL.md +0 -0
  106. {sidegraph-0.12.0 → sidegraph-0.13.0}/plugin/sidegraph/skills/heal-anchors/agents/openai.yaml +0 -0
  107. {sidegraph-0.12.0 → sidegraph-0.13.0}/plugin/sidegraph/skills/import-adrs/SKILL.md +0 -0
  108. {sidegraph-0.12.0 → sidegraph-0.13.0}/plugin/sidegraph/skills/import-adrs/agents/openai.yaml +0 -0
  109. {sidegraph-0.12.0 → sidegraph-0.13.0}/plugin/sidegraph/skills/manage-domains/SKILL.md +0 -0
  110. {sidegraph-0.12.0 → sidegraph-0.13.0}/plugin/sidegraph/skills/manage-domains/agents/openai.yaml +0 -0
  111. {sidegraph-0.12.0 → sidegraph-0.13.0}/plugin/sidegraph/skills/name-domains/SKILL.md +0 -0
  112. {sidegraph-0.12.0 → sidegraph-0.13.0}/plugin/sidegraph/skills/name-domains/agents/openai.yaml +0 -0
  113. {sidegraph-0.12.0 → sidegraph-0.13.0}/plugin/sidegraph/skills/ratify-decisions/SKILL.md +0 -0
  114. {sidegraph-0.12.0 → sidegraph-0.13.0}/plugin/sidegraph/skills/ratify-decisions/agents/openai.yaml +0 -0
  115. {sidegraph-0.12.0 → sidegraph-0.13.0}/plugin/sidegraph/skills/record-decision/SKILL.md +0 -0
  116. {sidegraph-0.12.0 → sidegraph-0.13.0}/plugin/sidegraph/skills/record-decision/agents/openai.yaml +0 -0
  117. {sidegraph-0.12.0 → sidegraph-0.13.0}/plugin/sidegraph/skills/record-fact/SKILL.md +0 -0
  118. {sidegraph-0.12.0 → sidegraph-0.13.0}/plugin/sidegraph/skills/record-fact/agents/openai.yaml +0 -0
  119. {sidegraph-0.12.0 → sidegraph-0.13.0}/plugin/sidegraph/skills/setup/SKILL.md +0 -0
  120. {sidegraph-0.12.0 → sidegraph-0.13.0}/plugin/sidegraph/skills/setup/agents/openai.yaml +0 -0
  121. {sidegraph-0.12.0 → sidegraph-0.13.0}/plugin/sidegraph/skills/stats/SKILL.md +0 -0
  122. {sidegraph-0.12.0 → sidegraph-0.13.0}/plugin/sidegraph/skills/stats/agents/openai.yaml +0 -0
  123. {sidegraph-0.12.0 → sidegraph-0.13.0}/plugin/sidegraph/skills/triage-drift/SKILL.md +0 -0
  124. {sidegraph-0.12.0 → sidegraph-0.13.0}/plugin/sidegraph/skills/triage-drift/agents/openai.yaml +0 -0
  125. {sidegraph-0.12.0 → sidegraph-0.13.0}/src/sidegraph/anchoring.py +0 -0
  126. {sidegraph-0.12.0 → sidegraph-0.13.0}/src/sidegraph/bash_paths.py +0 -0
  127. {sidegraph-0.12.0 → sidegraph-0.13.0}/src/sidegraph/bootstrap/__init__.py +0 -0
  128. {sidegraph-0.12.0 → sidegraph-0.13.0}/src/sidegraph/bootstrap/apply.py +0 -0
  129. {sidegraph-0.12.0 → sidegraph-0.13.0}/src/sidegraph/bootstrap/catalog.py +0 -0
  130. {sidegraph-0.12.0 → sidegraph-0.13.0}/src/sidegraph/bootstrap/cli.py +0 -0
  131. {sidegraph-0.12.0 → sidegraph-0.13.0}/src/sidegraph/bootstrap/integrations.py +0 -0
  132. {sidegraph-0.12.0 → sidegraph-0.13.0}/src/sidegraph/bootstrap/model.py +0 -0
  133. {sidegraph-0.12.0 → sidegraph-0.13.0}/src/sidegraph/bootstrap/planner.py +0 -0
  134. {sidegraph-0.12.0 → sidegraph-0.13.0}/src/sidegraph/bootstrap/proof.py +0 -0
  135. {sidegraph-0.12.0 → sidegraph-0.13.0}/src/sidegraph/bootstrap/review.py +0 -0
  136. {sidegraph-0.12.0 → sidegraph-0.13.0}/src/sidegraph/bootstrap/scan.py +0 -0
  137. {sidegraph-0.12.0 → sidegraph-0.13.0}/src/sidegraph/cli.py +0 -0
  138. {sidegraph-0.12.0 → sidegraph-0.13.0}/src/sidegraph/config.py +0 -0
  139. {sidegraph-0.12.0 → sidegraph-0.13.0}/src/sidegraph/doc_import.py +0 -0
  140. {sidegraph-0.12.0 → sidegraph-0.13.0}/src/sidegraph/domains.py +0 -0
  141. {sidegraph-0.12.0 → sidegraph-0.13.0}/src/sidegraph/engine/__init__.py +0 -0
  142. {sidegraph-0.12.0 → sidegraph-0.13.0}/src/sidegraph/freshness.py +0 -0
  143. {sidegraph-0.12.0 → sidegraph-0.13.0}/src/sidegraph/gitenv.py +0 -0
  144. {sidegraph-0.12.0 → sidegraph-0.13.0}/src/sidegraph/host/__init__.py +0 -0
  145. {sidegraph-0.12.0 → sidegraph-0.13.0}/src/sidegraph/host/claude_settings.py +0 -0
  146. {sidegraph-0.12.0 → sidegraph-0.13.0}/src/sidegraph/host/launch.py +0 -0
  147. {sidegraph-0.12.0 → sidegraph-0.13.0}/src/sidegraph/host/session_identity.py +0 -0
  148. {sidegraph-0.12.0 → sidegraph-0.13.0}/src/sidegraph/host/subagent.py +0 -0
  149. {sidegraph-0.12.0 → sidegraph-0.13.0}/src/sidegraph/hot_index.py +0 -0
  150. {sidegraph-0.12.0 → sidegraph-0.13.0}/src/sidegraph/importer.py +0 -0
  151. {sidegraph-0.12.0 → sidegraph-0.13.0}/src/sidegraph/input_limits.py +0 -0
  152. {sidegraph-0.12.0 → sidegraph-0.13.0}/src/sidegraph/integrity.py +0 -0
  153. {sidegraph-0.12.0 → sidegraph-0.13.0}/src/sidegraph/nearest_anchored.py +0 -0
  154. {sidegraph-0.12.0 → sidegraph-0.13.0}/src/sidegraph/okf.py +0 -0
  155. {sidegraph-0.12.0 → sidegraph-0.13.0}/src/sidegraph/profiles.py +0 -0
  156. {sidegraph-0.12.0 → sidegraph-0.13.0}/src/sidegraph/redaction_scan.py +0 -0
  157. {sidegraph-0.12.0 → sidegraph-0.13.0}/src/sidegraph/redaction_tokens.py +0 -0
  158. {sidegraph-0.12.0 → sidegraph-0.13.0}/src/sidegraph/retrieval.py +0 -0
  159. {sidegraph-0.12.0 → sidegraph-0.13.0}/src/sidegraph/schema.py +0 -0
  160. {sidegraph-0.12.0 → sidegraph-0.13.0}/src/sidegraph/seed_ladder.py +0 -0
  161. {sidegraph-0.12.0 → sidegraph-0.13.0}/src/sidegraph/stats/__init__.py +0 -0
  162. {sidegraph-0.12.0 → sidegraph-0.13.0}/src/sidegraph/stats/model.py +0 -0
  163. {sidegraph-0.12.0 → sidegraph-0.13.0}/src/sidegraph/stats/render.py +0 -0
  164. {sidegraph-0.12.0 → sidegraph-0.13.0}/src/sidegraph/store_layout.py +0 -0
  165. {sidegraph-0.12.0 → sidegraph-0.13.0}/src/sidegraph/sync.py +0 -0
  166. {sidegraph-0.12.0 → sidegraph-0.13.0}/src/sidegraph/text_paths.py +0 -0
  167. {sidegraph-0.12.0 → sidegraph-0.13.0}/src/sidegraph/tool_rate_limit.py +0 -0
  168. {sidegraph-0.12.0 → sidegraph-0.13.0}/src/sidegraph/validation_errors.py +0 -0
  169. {sidegraph-0.12.0 → sidegraph-0.13.0}/src/sidegraph/viz/__init__.py +0 -0
  170. {sidegraph-0.12.0 → sidegraph-0.13.0}/src/sidegraph/viz/assets/vis-network.min.js +0 -0
  171. {sidegraph-0.12.0 → sidegraph-0.13.0}/src/sidegraph/viz/model.py +0 -0
  172. {sidegraph-0.12.0 → sidegraph-0.13.0}/src/sidegraph/viz/render.py +0 -0
  173. {sidegraph-0.12.0 → sidegraph-0.13.0}/src/sidegraph/viz/template.html +0 -0
  174. {sidegraph-0.12.0 → sidegraph-0.13.0}/src/sidegraph/worktree_seeds.py +0 -0
  175. {sidegraph-0.12.0 → sidegraph-0.13.0}/src/sidegraph/write_boundary.py +0 -0
  176. {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/__init__.py +0 -0
  177. {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/conftest.py +0 -0
  178. {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/fixtures/auto_policy/parity_goldens.json +0 -0
  179. {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/fixtures/bitfinex_slice.json +0 -0
  180. {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/fixtures/bootstrap/flows/bmad/_bmad-output/planning-artifacts/architecture/cache/ARCHITECTURE-SPINE.md +0 -0
  181. {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/fixtures/bootstrap/flows/generic-adr/docs/adr/001-retry.md +0 -0
  182. {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/fixtures/bootstrap/flows/genkovich-sdd/docs/features/cache/adr/001.md +0 -0
  183. {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/fixtures/bootstrap/flows/spec-kit/specs/cache/plan.md +0 -0
  184. {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/fixtures/bootstrap/flows/superpowers/docs/superpowers/specs/2026-07-01-cache-design.md +0 -0
  185. {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/fixtures/bootstrap/graph.json +0 -0
  186. {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/fixtures/bootstrap/hosts/claude/.claude/settings.json +0 -0
  187. {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/fixtures/bootstrap/hosts/claude/.mcp.json +0 -0
  188. {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/fixtures/bootstrap/hosts/codex/.codex/config.toml +0 -0
  189. {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/fixtures/bootstrap/hosts/codex/.codex/hooks/hooks.json +0 -0
  190. {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/fixtures/bootstrap/scan/docs/adr/001-safe.md +0 -0
  191. {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/fixtures/corpus/PUBLIC_CORPORA.txt +0 -0
  192. {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/fixtures/corpus/openspec/_provenance.json +0 -0
  193. {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/fixtures/corpus/openspec/graph.json +0 -0
  194. {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/fixtures/corpus/self-corpus/_provenance.json +0 -0
  195. {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/fixtures/corpus/self-corpus/expected/retrieval-engine-reader.md +0 -0
  196. {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/fixtures/corpus/self-corpus/graph.json +0 -0
  197. {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/fixtures/flows/adr/0001-use-sessions.md +0 -0
  198. {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/fixtures/flows/bmad/ARCHITECTURE-SPINE.md +0 -0
  199. {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/fixtures/flows/bmad/tree/_bmad-output/planning-artifacts/architecture/architecture-payments-2026-07-30/.memlog.md +0 -0
  200. {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/fixtures/flows/bmad/tree/_bmad-output/planning-artifacts/architecture/architecture-payments-2026-07-30/ARCHITECTURE-SPINE.md +0 -0
  201. {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/fixtures/flows/bmad/tree/_bmad-output/planning-artifacts/prds/prd-payments-2026-07-30/prd.md +0 -0
  202. {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/fixtures/flows/genkovich/0001-queue-backpressure.md +0 -0
  203. {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/fixtures/flows/genkovich/sad.md +0 -0
  204. {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/fixtures/flows/genkovich/tree/docs/features/payments/adr/0001-queue-backpressure.md +0 -0
  205. {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/fixtures/flows/genkovich/tree/docs/features/payments/sad.md +0 -0
  206. {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/fixtures/flows/genkovich/tree/docs/features/payments/spec.md +0 -0
  207. {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/fixtures/flows/openspec/design-empty.md +0 -0
  208. {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/fixtures/flows/openspec/design-h3-split.md +0 -0
  209. {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/fixtures/flows/openspec/design-with-summary.md +0 -0
  210. {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/fixtures/flows/openspec/design.md +0 -0
  211. {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/fixtures/flows/openspec/proposal-alternatives.md +0 -0
  212. {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/fixtures/flows/openspec/proposal.md +0 -0
  213. {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/fixtures/flows/openspec/tree/openspec/changes/add-thing/design.md +0 -0
  214. {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/fixtures/flows/openspec/tree/openspec/changes/add-thing/proposal.md +0 -0
  215. {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/fixtures/flows/openspec/tree/openspec/changes/add-thing/specs/cap/spec.md +0 -0
  216. {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/fixtures/flows/openspec/tree/openspec/changes/add-thing/tasks.md +0 -0
  217. {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/fixtures/flows/openspec/tree/openspec/changes/archive/2026-01-01-add-thing/design.md +0 -0
  218. {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/fixtures/flows/openspec/tree/openspec/changes/archive/2026-01-01-add-thing/proposal.md +0 -0
  219. {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/fixtures/flows/openspec/tree/openspec/config.yaml +0 -0
  220. {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/fixtures/flows/openspec/tree/openspec/specs/cap/spec.md +0 -0
  221. {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/fixtures/flows/spec-kit/plan.md +0 -0
  222. {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/fixtures/flows/spec-kit/tree/specs/003-payment-retries/plan.md +0 -0
  223. {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/fixtures/flows/spec-kit/tree/specs/003-payment-retries/spec.md +0 -0
  224. {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/fixtures/flows/superpowers/2026-07-01-example-design.md +0 -0
  225. {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/fixtures/flows/superpowers/2026-07-01-thin-design.md +0 -0
  226. {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/fixtures/member_names_python_graph.json +0 -0
  227. {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/fixtures/member_names_swift_graph.json +0 -0
  228. {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/fixtures/mini_graph.json +0 -0
  229. {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/githooks_support.py +0 -0
  230. {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_agent_brief_manifests.py +0 -0
  231. {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_anchoring.py +0 -0
  232. {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_anchoring_mapping_refresh.py +0 -0
  233. {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_bash_paths.py +0 -0
  234. {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_batch_panel_fixes.py +0 -0
  235. {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_bootstrap_apply.py +0 -0
  236. {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_bootstrap_catalog.py +0 -0
  237. {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_bootstrap_cli.py +0 -0
  238. {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_bootstrap_descriptor_cleanup.py +0 -0
  239. {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_bootstrap_integrations.py +0 -0
  240. {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_bootstrap_model.py +0 -0
  241. {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_bootstrap_planner.py +0 -0
  242. {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_bootstrap_proof.py +0 -0
  243. {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_bootstrap_review.py +0 -0
  244. {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_bootstrap_scan.py +0 -0
  245. {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_bootstrap_scan_regular.py +0 -0
  246. {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_bootstrap_unanchored.py +0 -0
  247. {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_bounded_listings.py +0 -0
  248. {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_capture_auto_accept.py +0 -0
  249. {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_capture_facts.py +0 -0
  250. {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_capture_initiative.py +0 -0
  251. {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_capture_integration.py +0 -0
  252. {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_capture_neighbors.py +0 -0
  253. {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_capture_propose.py +0 -0
  254. {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_capture_redact.py +0 -0
  255. {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_cli_compact.py +0 -0
  256. {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_cli_doctor.py +0 -0
  257. {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_cli_domains.py +0 -0
  258. {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_cli_graph_paths.py +0 -0
  259. {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_cli_import.py +0 -0
  260. {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_cli_init.py +0 -0
  261. {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_cli_init_hooks.py +0 -0
  262. {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_cli_okf.py +0 -0
  263. {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_cli_ratify.py +0 -0
  264. {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_cli_ratify_facts.py +0 -0
  265. {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_cli_stats.py +0 -0
  266. {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_cli_sync.py +0 -0
  267. {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_cli_sync_check.py +0 -0
  268. {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_cli_unreadable_paths.py +0 -0
  269. {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_cli_viz.py +0 -0
  270. {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_community_baseline.py +0 -0
  271. {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_config.py +0 -0
  272. {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_config_ancestor_lookup.py +0 -0
  273. {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_config_borrowed_graph.py +0 -0
  274. {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_corpus_expected_renders.py +0 -0
  275. {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_corpus_self_corpus.py +0 -0
  276. {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_coverage_telemetry_e2e.py +0 -0
  277. {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_digest_integrity.py +0 -0
  278. {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_doc_corpus_integration.py +0 -0
  279. {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_doc_import.py +0 -0
  280. {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_doctor.py +0 -0
  281. {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_doctor_auto_share.py +0 -0
  282. {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_doctor_code_drift.py +0 -0
  283. {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_doctor_dangling_supports.py +0 -0
  284. {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_doctor_duplicate_entity.py +0 -0
  285. {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_doctor_graph_root_mismatch.py +0 -0
  286. {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_doctor_graph_stale.py +0 -0
  287. {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_doctor_integrity.py +0 -0
  288. {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_doctor_never_surfaced.py +0 -0
  289. {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_doctor_scan.py +0 -0
  290. {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_doctor_stale_instructions.py +0 -0
  291. {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_doctor_unhashable_payload.py +0 -0
  292. {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_doctor_unratified_accept.py +0 -0
  293. {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_domains.py +0 -0
  294. {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_entity_duplicate_resolution.py +0 -0
  295. {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_entity_get_or_create_race.py +0 -0
  296. {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_entry_point_arguments.py +0 -0
  297. {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_env_isolation.py +0 -0
  298. {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_fact_reachability_gate.py +0 -0
  299. {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_flow_profile.py +0 -0
  300. {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_git_bindings_blame.py +0 -0
  301. {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_git_bindings_hook.py +0 -0
  302. {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_git_bindings_provenance.py +0 -0
  303. {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_git_config_isolation.py +0 -0
  304. {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_git_env.py +0 -0
  305. {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_githooks.py +0 -0
  306. {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_graph_freshness.py +0 -0
  307. {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_hook_showings.py +0 -0
  308. {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_hook_spawn_guard.py +0 -0
  309. {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_host_agent_brief.py +0 -0
  310. {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_host_agent_state.py +0 -0
  311. {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_host_borrowed_graph.py +0 -0
  312. {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_host_claude_settings.py +0 -0
  313. {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_host_drift_nudge.py +0 -0
  314. {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_host_integrity.py +0 -0
  315. {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_host_launch.py +0 -0
  316. {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_host_pretool.py +0 -0
  317. {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_host_pretool_records.py +0 -0
  318. {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_host_session_key.py +0 -0
  319. {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_host_session_start.py +0 -0
  320. {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_host_session_start_concurrent.py +0 -0
  321. {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_host_stop.py +0 -0
  322. {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_host_subagent_start.py +0 -0
  323. {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_host_subdirectory_launch.py +0 -0
  324. {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_host_touch_events.py +0 -0
  325. {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_hot_index.py +0 -0
  326. {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_hot_index_hook.py +0 -0
  327. {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_hot_path_imports.py +0 -0
  328. {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_import_dry_run_preview.py +0 -0
  329. {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_importer.py +0 -0
  330. {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_index_journal_mode.py +0 -0
  331. {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_installed_wheel_smoke.py +0 -0
  332. {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_integrity.py +0 -0
  333. {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_integrity_refresh_hook.py +0 -0
  334. {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_integrity_replay.py +0 -0
  335. {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_integrity_stranded.py +0 -0
  336. {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_lazy_root.py +0 -0
  337. {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_member_anchor_wiring.py +0 -0
  338. {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_mind_model_additive_fields.py +0 -0
  339. {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_nearest_anchored.py +0 -0
  340. {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_okf.py +0 -0
  341. {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_openspec_profile.py +0 -0
  342. {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_pathless_descriptor_adoption.py +0 -0
  343. {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_pilot_kit_corpus_fit.py +0 -0
  344. {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_portable_json.py +0 -0
  345. {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_proposal_lifecycle.py +0 -0
  346. {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_ratify_listing_gone_dark.py +0 -0
  347. {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_ratify_policy.py +0 -0
  348. {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_reader_community_labels.py +0 -0
  349. {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_reader_doc_nodes.py +0 -0
  350. {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_reader_graph.py +0 -0
  351. {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_reader_integration.py +0 -0
  352. {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_reader_member_name_lookup.py +0 -0
  353. {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_reader_member_names.py +0 -0
  354. {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_reader_nodes_in_file.py +0 -0
  355. {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_reader_perf.py +0 -0
  356. {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_reader_rationale.py +0 -0
  357. {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_reader_read.py +0 -0
  358. {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_reader_resolve.py +0 -0
  359. {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_reader_subdir_mismatch.py +0 -0
  360. {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_reader_version.py +0 -0
  361. {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_redaction_scan.py +0 -0
  362. {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_redaction_seeded.py +0 -0
  363. {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_redaction_tokens.py +0 -0
  364. {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_repo_relative_paths_portable.py +0 -0
  365. {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_repoint_integration.py +0 -0
  366. {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_retrieval_budget_counters.py +0 -0
  367. {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_retrieval_context.py +0 -0
  368. {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_retrieval_drift_marker.py +0 -0
  369. {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_retrieval_drilldown.py +0 -0
  370. {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_retrieval_facts.py +0 -0
  371. {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_retrieval_guessed.py +0 -0
  372. {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_retrieval_ids.py +0 -0
  373. {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_retrieval_integration.py +0 -0
  374. {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_retrieval_rank.py +0 -0
  375. {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_retrieval_seeds.py +0 -0
  376. {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_retrieval_shown_ids.py +0 -0
  377. {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_retrieval_terminal_evidence.py +0 -0
  378. {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_retrieval_thin_tools.py +0 -0
  379. {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_retrieval_toc.py +0 -0
  380. {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_retrieval_toptier.py +0 -0
  381. {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_retrieval_unratified.py +0 -0
  382. {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_sandbox_hygiene.py +0 -0
  383. {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_schema_descriptor.py +0 -0
  384. {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_schema_domain.py +0 -0
  385. {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_schema_fact.py +0 -0
  386. {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_secret_scan_gate.py +0 -0
  387. {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_security_binary_limits.py +0 -0
  388. {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_security_capture_diagnostics.py +0 -0
  389. {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_security_capture_limits.py +0 -0
  390. {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_security_cli_diagnostics.py +0 -0
  391. {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_security_doc_limits.py +0 -0
  392. {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_security_input_limits.py +0 -0
  393. {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_security_mcp_write_diagnostics.py +0 -0
  394. {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_security_numeric_enums.py +0 -0
  395. {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_security_python_shapes.py +0 -0
  396. {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_security_redaction_cursor.py +0 -0
  397. {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_security_redaction_scaling.py +0 -0
  398. {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_security_validation_errors.py +0 -0
  399. {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_security_write_boundary.py +0 -0
  400. {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_seed_ladder.py +0 -0
  401. {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_seed_paths_portable.py +0 -0
  402. {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_server_add_anchors.py +0 -0
  403. {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_server_anchoring.py +0 -0
  404. {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_server_annotations.py +0 -0
  405. {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_server_argument_names.py +0 -0
  406. {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_server_borrowed_graph.py +0 -0
  407. {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_server_capture.py +0 -0
  408. {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_server_commit_hint.py +0 -0
  409. {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_server_coverage_events.py +0 -0
  410. {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_server_decision_listing.py +0 -0
  411. {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_server_domains.py +0 -0
  412. {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_server_drilldown.py +0 -0
  413. {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_server_facts.py +0 -0
  414. {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_server_find_entity.py +0 -0
  415. {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_server_get_store.py +0 -0
  416. {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_server_get_task_context.py +0 -0
  417. {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_server_graph_freshness.py +0 -0
  418. {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_server_graph_path.py +0 -0
  419. {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_server_import.py +0 -0
  420. {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_server_invocation_policy.py +0 -0
  421. {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_server_mcp_smoke.py +0 -0
  422. {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_server_nearest_anchored.py +0 -0
  423. {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_server_prewrite_anchor_validation.py +0 -0
  424. {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_server_ratify_facts.py +0 -0
  425. {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_server_record_types.py +0 -0
  426. {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_server_redaction.py +0 -0
  427. {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_server_refresh.py +0 -0
  428. {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_server_render_events.py +0 -0
  429. {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_server_result_contract.py +0 -0
  430. {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_server_supersede.py +0 -0
  431. {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_server_sync_anchors.py +0 -0
  432. {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_server_telemetry.py +0 -0
  433. {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_server_thin_tools.py +0 -0
  434. {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_server_tolerant_seeds.py +0 -0
  435. {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_server_verify.py +0 -0
  436. {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_skill_frontmatter.py +0 -0
  437. {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_stats_graph.py +0 -0
  438. {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_stats_health.py +0 -0
  439. {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_stats_model.py +0 -0
  440. {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_stats_render.py +0 -0
  441. {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_stats_skill.py +0 -0
  442. {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_stats_snapshot.py +0 -0
  443. {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_stop_hot_path.py +0 -0
  444. {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_stop_rearm.py +0 -0
  445. {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_store.py +0 -0
  446. {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_store_agent_state.py +0 -0
  447. {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_store_atomic_write_tmp_names.py +0 -0
  448. {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_store_bad_file.py +0 -0
  449. {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_store_binding_index.py +0 -0
  450. {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_store_canonical_stat.py +0 -0
  451. {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_store_compact.py +0 -0
  452. {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_store_compact_review.py +0 -0
  453. {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_store_concurrent_open.py +0 -0
  454. {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_store_coverage_telemetry.py +0 -0
  455. {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_store_cross_process_mutations.py +0 -0
  456. {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_store_derived_community.py +0 -0
  457. {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_store_domains.py +0 -0
  458. {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_store_entities.py +0 -0
  459. {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_store_fact_cascade.py +0 -0
  460. {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_store_facts.py +0 -0
  461. {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_store_git_root_symlink.py +0 -0
  462. {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_store_meta.py +0 -0
  463. {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_store_migration.py +0 -0
  464. {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_store_mutation_guard.py +0 -0
  465. {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_store_mutation_immediate.py +0 -0
  466. {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_store_non_file_entries.py +0 -0
  467. {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_store_opens_with_merged_duplicate.py +0 -0
  468. {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_store_persistence.py +0 -0
  469. {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_store_ratification.py +0 -0
  470. {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_store_rebuild_atomicity.py +0 -0
  471. {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_store_record_identity.py +0 -0
  472. {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_store_record_types.py +0 -0
  473. {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_store_render_events.py +0 -0
  474. {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_store_retrieval.py +0 -0
  475. {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_store_slug_conflicts.py +0 -0
  476. {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_store_stamping_marker.py +0 -0
  477. {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_store_symlinks.py +0 -0
  478. {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_store_telemetry.py +0 -0
  479. {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_store_threading.py +0 -0
  480. {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_store_tmp_sweep_age.py +0 -0
  481. {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_store_update_meta_if.py +0 -0
  482. {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_sync_canonical_writes.py +0 -0
  483. {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_sync_clean.py +0 -0
  484. {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_sync_domains.py +0 -0
  485. {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_sync_drift_cache.py +0 -0
  486. {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_sync_fresh_clone.py +0 -0
  487. {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_sync_integration.py +0 -0
  488. {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_sync_moved_adoption.py +0 -0
  489. {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_sync_rebind.py +0 -0
  490. {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_sync_repoint.py +0 -0
  491. {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_sync_report_has_findings.py +0 -0
  492. {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_sync_run.py +0 -0
  493. {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_sync_toc_cache.py +0 -0
  494. {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_sync_volatile_heal.py +0 -0
  495. {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_sync_wiring.py +0 -0
  496. {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_telemetry_retention.py +0 -0
  497. {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_text_paths.py +0 -0
  498. {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_verify_git_framing.py +0 -0
  499. {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_verify_git_revisions.py +0 -0
  500. {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_verify_snapshot.py +0 -0
  501. {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_verify_transitions.py +0 -0
  502. {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_viz_asset_packaged.py +0 -0
  503. {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_viz_model.py +0 -0
  504. {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_viz_render_html.py +0 -0
  505. {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_viz_render_json.py +0 -0
  506. {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/test_worktree_seeds.py +0 -0
  507. {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/wheel_server_trace.py +0 -0
  508. {sidegraph-0.12.0 → sidegraph-0.13.0}/tests/wheel_smoke.py +0 -0
  509. {sidegraph-0.12.0 → sidegraph-0.13.0}/tools/check_no_session_links.py +0 -0
@@ -192,6 +192,9 @@ jobs:
192
192
  tests/test_server_result_contract.py tests/test_server_invocation_policy.py `
193
193
  tests/test_verify_git_stdin.py tests/test_seed_paths_portable.py `
194
194
  tests/test_repo_relative_paths_portable.py `
195
+ tests/test_command_windows.py `
196
+ tests/test_hook_payload_encoding.py `
197
+ tests/test_git_output_utf8.py `
195
198
  $privateTests `
196
199
  tests/test_installed_wheel_smoke.py
197
200
  if ($LASTEXITCODE -ne 0) { exit $LASTEXITCODE }
@@ -7,6 +7,48 @@ interfaces, exactly, and what each one promises: [`docs/reference/stability.md`]
7
7
 
8
8
  ## [Unreleased]
9
9
 
10
+ ## [0.13.0] — 2026-10-14
11
+
12
+ ### Fixed
13
+
14
+ - On Windows, hooks misread the payload the host sends when a path in it has a non-ASCII
15
+ character (an accented or Cyrillic user name or project folder). The Stop capture reminder
16
+ never fired, PreToolUse delivered no records, and for some names SessionStart and
17
+ SubagentStart printed nothing.
18
+ - On Windows, a non-ASCII git user name, branch name or repository path was read back garbled:
19
+ a ratified record could carry a garbled name in its provenance, and `sidegraph-verify
20
+ --against` failed or reported false changes for records containing non-ASCII text.
21
+ - A change to a file whose name has non-ASCII characters, spaces or quotes was missed by the
22
+ drift check and the commit-trailer candidates, because git escaped the name.
23
+ - On Windows, a Codex hook started from a subdirectory of a repository whose path has non-ASCII
24
+ characters now runs from the repository root.
25
+ - A default Git for Windows install no longer breaks the MCP server. Its installer puts only
26
+ `Git\cmd` on PATH, which has no `sh`, so the server, which started with `sh`, did not start.
27
+ The Codex hooks have a Windows command for the same reason (see Changed).
28
+ - The project's ratify policy now applies under Codex. `sidegraph-init` commits it to
29
+ `.claude/settings.json`, which Codex does not read, so under Codex every agent proposal
30
+ waited for review whatever the team chose. The plugin's MCP server now reads the committed
31
+ value when its environment sets none; an explicit `SIDEGRAPH_RATIFY_POLICY` still wins.
32
+
33
+ ### Changed
34
+
35
+ - The plugins launch without `sh` on PATH. Both MCP launchers start `uvx` (`uv` in the
36
+ development manifest) directly, and `sidegraph-mcp --repo-root` anchors the server to the
37
+ project: `CLAUDE_PROJECT_DIR`, else the git top-level, else the working directory. The Codex
38
+ hooks gain a PowerShell `commandWindows` that Windows PowerShell 5.1 parses. On native Windows
39
+ you need no PATH change and no PowerShell 7; Git for Windows at its default options is
40
+ enough. The Codex hooks need a Codex release that supports `commandWindows` (verified with
41
+ 0.162.1). The Windows hook definition changes, so approve the changed hooks once in `/hooks`
42
+ on Windows; other platforms are unaffected.
43
+ - The optional terminal CLI now installs from the same place as the plugin, the public
44
+ repository's `main` branch: `uv tool install git+https://github.com/SantyagoSeaman/sidegraph.git@main`,
45
+ updated after each release with `uv tool upgrade sidegraph`. The docs no longer send you to
46
+ PyPI for it; PyPI still carries every release for pinning an exact version. The `path-skew`
47
+ SessionStart line now offers `uv tool install --reinstall git+https://github.com/SantyagoSeaman/sidegraph.git@main`,
48
+ which moves an older install from PyPI, pinned or not, to the latest release.
49
+ - README: the Quickstart is one numbered sequence with the plugin commands inline, a teammate
50
+ path, and the rarer options below it; "How it works" is a numbered list instead of a diagram.
51
+
10
52
  ## [0.12.0] — 2026-10-12
11
53
 
12
54
  ### Fixed
@@ -13,7 +13,7 @@ task-aware retrieval + decision memory riding on the engine's entity graph.
13
13
  continuing participant in the project. A core feature must preserve, organize, or deliver
14
14
  accumulated project understanding. Document search by itself is not the product.
15
15
 
16
- Sidegraph is pre-1.0 (v0.12.0) — the full loop (capture, ratification, mistakes-first
16
+ Sidegraph is pre-1.0 (v0.13.0) — the full loop (capture, ratification, mistakes-first
17
17
  retrieval, refactor-surviving re-anchoring, semantic docs layer, mind-model domains, and the
18
18
  facts evidence layer) ships and is exercised end-to-end, but interfaces may still move before
19
19
  a stable release. See
@@ -0,0 +1,310 @@
1
+ Metadata-Version: 2.5
2
+ Name: sidegraph
3
+ Version: 0.13.0
4
+ Summary: Own the memory, rent the graph — a durable decision/lessons layer as a sidecar over a code-graph engine.
5
+ Project-URL: Homepage, https://github.com/SantyagoSeaman/sidegraph
6
+ Project-URL: Repository, https://github.com/SantyagoSeaman/sidegraph
7
+ Project-URL: Documentation, https://github.com/SantyagoSeaman/sidegraph/tree/main/docs
8
+ Project-URL: Issues, https://github.com/SantyagoSeaman/sidegraph/issues
9
+ Project-URL: Changelog, https://github.com/SantyagoSeaman/sidegraph/blob/main/CHANGELOG.md
10
+ Author: SantyagoSeaman
11
+ License-Expression: Apache-2.0
12
+ License-File: LICENSE
13
+ Keywords: adr,agent-memory,claude-code,code-graph,codex,coding-agents,decision-log,decision-records,developer-tools,knowledge-graph,mcp,mcp-server,team-memory
14
+ Classifier: Development Status :: 4 - Beta
15
+ Classifier: Environment :: Console
16
+ Classifier: Intended Audience :: Developers
17
+ Classifier: License :: OSI Approved :: Apache Software License
18
+ Classifier: Operating System :: OS Independent
19
+ Classifier: Programming Language :: Python :: 3.13
20
+ Classifier: Programming Language :: Python :: 3.14
21
+ Classifier: Topic :: Software Development :: Documentation
22
+ Classifier: Topic :: Software Development :: Libraries
23
+ Requires-Python: >=3.13
24
+ Requires-Dist: anyio>=4
25
+ Requires-Dist: fastmcp<4,>=3.4.2
26
+ Requires-Dist: mcp<2,>=1.24
27
+ Requires-Dist: pydantic>=2.9
28
+ Requires-Dist: python-ulid>=3.0
29
+ Description-Content-Type: text/markdown
30
+
31
+ # Sidegraph
32
+
33
+ [![tests](https://img.shields.io/github/actions/workflow/status/SantyagoSeaman/sidegraph/ci.yml?label=tests)](https://github.com/SantyagoSeaman/sidegraph/actions/workflows/ci.yml)
34
+ [![release](https://img.shields.io/github/v/release/SantyagoSeaman/sidegraph)](https://github.com/SantyagoSeaman/sidegraph/releases)
35
+ ![Python 3.13+](https://img.shields.io/badge/python-3.13%2B-blue)
36
+ ![License](https://img.shields.io/badge/license-Apache--2.0-green)
37
+ ![MCP](https://img.shields.io/badge/MCP-server-8A2BE2)
38
+ [![Windows x64 full plugin session checked](https://img.shields.io/badge/Windows%20x64-full%20plugin%20session%20checked-blue)](https://github.com/SantyagoSeaman/sidegraph/blob/main/docs/getting-started/installation.md#platform-coverage)
39
+ [![macOS arm64 full plugin session checked](https://img.shields.io/badge/macOS%20arm64-full%20plugin%20session%20checked-blue)](https://github.com/SantyagoSeaman/sidegraph/blob/main/docs/getting-started/installation.md#platform-coverage)
40
+
41
+ Sidegraph is a local MCP server and CLI for preserving engineering decisions and
42
+ facts alongside your code. It records why a design was chosen, which alternatives were
43
+ rejected, and what was learned during implementation, then retrieves that context for
44
+ the files and symbols an agent is working on.
45
+
46
+ Records live in your repository as reviewable JSON files. A derived SQLite index supports
47
+ retrieval; [Graphify](https://github.com/safishamsi/graphify) supplies the code and document
48
+ graph used to anchor records. Claude Code and Codex plugins connect capture and retrieval
49
+ to coding sessions.
50
+
51
+ - Keep decisions, rejected alternatives, and evidence with their provenance and history.
52
+ - Hand the agent the relevant mistakes and constraints before it edits, sized to fit its context.
53
+ - Review agent proposals before accepting them, or let low-risk ones be accepted automatically.
54
+ - Follow code through refactors, and flag records whose code changed or disappeared.
55
+
56
+ [Documentation](docs/README.md) · [Installation](docs/getting-started/installation.md) ·
57
+ [Changelog](CHANGELOG.md) · [Contributing](CONTRIBUTING.md)
58
+
59
+ ## Quickstart
60
+
61
+ ### Set up a repository (once)
62
+
63
+ **You need** Git, Claude Code or Codex, and [uv](https://docs.astral.sh/uv/getting-started/installation/),
64
+ which also downloads Python 3.13 if you do not have it. On Windows you also need
65
+ [Git for Windows](https://gitforwindows.org/) with its default options
66
+ ([details](docs/getting-started/installation.md#windows)); run the commands below in
67
+ PowerShell, using the Windows line where one is given. No API keys and no existing ADRs are required.
68
+
69
+ ```sh
70
+ curl -LsSf https://astral.sh/uv/install.sh | sh # uv on macOS, Linux
71
+ powershell -ExecutionPolicy ByPass -c "irm https://astral.sh/uv/install.ps1 | iex" # uv on Windows
72
+ ```
73
+
74
+ **1. Build the code graph.** [Graphify](https://github.com/safishamsi/graphify) maps your
75
+ functions, classes and files, so a record can point at the exact function it is about.
76
+
77
+ ```sh
78
+ uv tool install "graphifyy==0.9.6" # two y's in the package name; the command is graphify
79
+ cd /path/to/your/repo
80
+ graphify update .
81
+ echo "graphify-out/" >> .gitignore # the graph is rebuilt from your code; keep it out of git
82
+ Add-Content .gitignore "graphify-out/" # the same line on Windows (PowerShell); do not use >> there
83
+ ```
84
+
85
+ **2. Create the store**, the `.sidegraph/` directory that holds the records:
86
+
87
+ ```sh
88
+ uvx --from git+https://github.com/SantyagoSeaman/sidegraph.git@main sidegraph-init
89
+ ```
90
+
91
+ It asks two questions. Both default to yes, so press Enter twice.
92
+
93
+ - *Keep the code graph fresh?* Yes installs a git hook that rebuilds the graph after each commit.
94
+ - *Auto-ratify low-risk records?* Yes means the lessons, gotchas and facts the agent proposes
95
+ are accepted without review. Other proposals still wait for you. The answer is saved in
96
+ `.claude/settings.json`, which you commit. The plugin applies it in Claude Code and in Codex,
97
+ so it covers the whole team.
98
+
99
+ Details: [`sidegraph-init`](docs/reference/cli.md#sidegraph-init).
100
+
101
+ **3. Install the plugin.** It gives the agent the memory at session start and asks it to save
102
+ new decisions at the end of a session. It updates itself: each new session downloads and runs
103
+ the latest Sidegraph release.
104
+
105
+ In Claude Code, run these inside a session in the repository, then start a new session:
106
+
107
+ ```text
108
+ /plugin marketplace add SantyagoSeaman/sidegraph
109
+ /plugin install sidegraph@sidegraph
110
+ ```
111
+
112
+ In Codex, run these in a terminal in the repository, then start `codex` and approve the
113
+ Sidegraph hooks when it asks:
114
+
115
+ ```sh
116
+ codex plugin marketplace add SantyagoSeaman/sidegraph
117
+ codex plugin add sidegraph@sidegraph
118
+ ```
119
+
120
+ **4. Record a decision.** In a session, ask the agent, naming a real file and function:
121
+
122
+ > Record this gotcha: the upstream API limits batch requests to 100 items. We rejected
123
+ > a single unbounded request because it fails for larger imports. Anchor it to
124
+ > `import_batch` in `src/importer.py`.
125
+
126
+ It is saved right away. Records the agent proposes on its own may wait for your review: run
127
+ `/sidegraph:ratify-decisions` in Claude Code, or ask Codex to "review pending decisions".
128
+
129
+ **5. Check and commit.** Start a new session and ask: "Before I edit `src/importer.py`, what
130
+ should I know?" The agent should show the gotcha. Then commit `.sidegraph/` and `.gitignore`,
131
+ and `.claude/settings.json` if step 2 created or changed it. The index file inside
132
+ `.sidegraph/` is git-ignored automatically.
133
+
134
+ ### Each teammate
135
+
136
+ After cloning, each teammate runs steps 1, 2 and 3. In a clone, step 2 leaves the committed
137
+ records and settings alone. It only installs the graph hook there.
138
+
139
+ Next, [name your domains](docs/guides/naming-your-domains.md) to give the memory a table of
140
+ contents, or import existing ADRs and design specs with the
141
+ [preview-first bootstrap](docs/getting-started/bootstrap.md). The
142
+ [verification checklist](docs/guides/verifying-your-setup.md) covers the whole workflow.
143
+
144
+ ### Other options
145
+
146
+ - **Without the graph.** Skip step 1 and answer no to the first question in step 2. Records
147
+ then attach to whole files instead of functions.
148
+ - **Versions.** You always run the latest release. The plugin and the step 2 command install
149
+ Sidegraph from the public repository on GitHub, whose `main` branch changes only when a
150
+ release is published. To pin a version instead, see
151
+ [pinning](docs/getting-started/installation.md#mutable-development-references).
152
+ - **Sidegraph commands in your own terminal.** Optional:
153
+ `uv tool install git+https://github.com/SantyagoSeaman/sidegraph.git@main`, from the same place as the plugin. It does not update itself, so
154
+ after each release run `uv tool upgrade sidegraph`
155
+ ([details](docs/getting-started/installation.md#option-a--the-cli-on-your-path)).
156
+ - **Other MCP clients.** Run `sidegraph-mcp` over stdio; see the
157
+ [MCP reference](docs/reference/mcp-tools.md) and [configuration](docs/reference/configuration.md).
158
+ Automatic memory needs a host with hooks, such as Claude Code or Codex.
159
+ - **Windows details**, including what the plugins need from Git for Windows:
160
+ [Windows setup](docs/getting-started/installation.md#windows).
161
+
162
+ ## Why
163
+
164
+ Code describes the current implementation, but often omits the alternatives a team
165
+ tried, operational constraints it discovered, and reasons for changing direction.
166
+ Sidegraph captures that reasoning and links it to the code and planning documents it
167
+ concerns. It works alongside an existing ADR or specification process.
168
+
169
+ The useful starting point is a project with decisions worth retaining and people willing
170
+ to review them. Memory quality depends on capture, review, and whether the agent actually
171
+ retrieves it. Small tasks answerable directly from code may gain little from the extra
172
+ context. The [engineering whitepaper](docs/whitepaper/index.md) describes the evidence,
173
+ negative results, and adoption criteria; the [pilot kit](docs/pilot-kit/README.md) helps
174
+ evaluate it on your own repository.
175
+
176
+ ## How it works
177
+
178
+ 1. **Capture.** During a session the agent saves a decision when you ask for one. At the end of
179
+ a session the plugin reminds it to propose the decisions worth keeping. Secrets are redacted
180
+ before anything is written.
181
+ 2. **Review.** You accept or drop what the agent proposed; Sidegraph calls this *ratifying*.
182
+ Records are JSON files in `.sidegraph/`, committed with your code.
183
+ 3. **Anchoring.** Each record is linked to the functions, classes, files or document headings it
184
+ is about, using the graph Graphify builds from your code. When a refactor moves code,
185
+ Sidegraph follows the move; when it cannot tell where the code went, it flags the record for
186
+ review.
187
+ 4. **Recall.** At the start of the next session the agent gets a short table of contents of the
188
+ project's areas, called *domains*. Before changing a file it asks for that file's records,
189
+ with known mistakes first. In Claude Code, the agent also receives a file's records the
190
+ first time it reads or edits that file.
191
+ 5. **Subagents.** In Claude Code, when the agent hands a task to a subagent, the records for the
192
+ files named in that task are added to it. In Claude Code and Codex, each new subagent is told
193
+ that the memory exists and how to use it.
194
+
195
+ Domains are named by you or proposed by the agent; each one says what an area is for and which
196
+ code belongs to it. See the [mind model](docs/concepts/mind-model.md) and the
197
+ [anchoring model](docs/concepts/anchoring.md).
198
+
199
+ ## What gets stored
200
+
201
+ | Record | What it is |
202
+ |---|---|
203
+ | `Decision` | Kind (`adr`, `lesson`, `constraint`, or `gotcha`), context, choice, rejected alternatives, consequences, validity, history, and provenance |
204
+ | `Fact` | A benchmark, external constraint, or observed finding that supports a decision or stands alone |
205
+ | `Entity` | A stable ID for a function, class, file or heading, kept when the graph is rebuilt |
206
+ | `AnchorBinding` | The link between a decision or fact and an entity it is about |
207
+ | `Domain` | A named area with a purpose, membership rules, and optional subdomains |
208
+
209
+ Nothing is ever deleted. A reversed decision is closed and replaced by a new one, so *"tried
210
+ before, abandoned because…"* stays retrievable with `get_entity_history`. Dropping a proposal
211
+ marks it rejected; it stays in the history too.
212
+
213
+ Facts follow the same review and history rules as decisions. Accepting or dropping a decision also accepts or drops
214
+ the pending facts attached to it. Details:
215
+ [docs/concepts/data-model.md](docs/concepts/data-model.md) and
216
+ [docs/guides/capturing-decisions.md#facts-the-evidence-layer](docs/guides/capturing-decisions.md#facts-the-evidence-layer).
217
+
218
+ ## MCP tools
219
+
220
+ The `sidegraph-mcp` stdio server exposes retrieval, capture, review and maintenance tools.
221
+ The ones an agent uses most: `get_task_context` (the records for the files or functions it is
222
+ working on), `drill_down` (everything in one domain), `get_entity_history` (every decision
223
+ ever made about one function or file, including reversed ones), `propose_decisions` (drafts
224
+ for review) and `ratify` (accept or drop drafts).
225
+
226
+ See the [MCP reference](docs/reference/mcp-tools.md) for the complete tool set, schemas,
227
+ return shapes, and side effects. The [CLI reference](docs/reference/cli.md) covers setup,
228
+ scripted use, and CI maintenance. Tool names and return shapes are
229
+ [provisional before 1.0](docs/reference/stability.md).
230
+
231
+ ## Works on code and on docs
232
+
233
+ Anchor decisions to functions and classes, or to **headings in your architecture documents**;
234
+ Graphify builds both graphs without an LLM. `sidegraph-bootstrap` turns existing ADRs and
235
+ design specs into anchored decisions, also without an LLM.
236
+
237
+ An optional **semantic pass** (`graphify extract`, which needs an API key for its model
238
+ provider and caches results per file) goes deeper on documentation: it turns prose into
239
+ concepts and themes that records can anchor to. Walkthrough:
240
+ [docs/guides/semantic-docs.md](docs/guides/semantic-docs.md).
241
+
242
+ ## Trust & privacy
243
+
244
+ - **Local runtime:** Sidegraph reads repository files and the graph, and writes records,
245
+ a derived index, and optional setup or export files. It makes no network calls of its own
246
+ and sends nothing anywhere. Installing and updating it downloads it from GitHub. What the agent
247
+ does with Sidegraph's answers is up to your agent host, which sends them to its model
248
+ provider like any other context. Graphify's optional semantic pass uses its own model
249
+ provider. See [SECURITY.md](SECURITY.md) for the data boundary.
250
+ - **Reviewable capture:** text is redacted before storage using best-effort patterns.
251
+ Review drafts and scan the committed store for secrets. Agent proposals wait for human
252
+ review unless the project answered yes to auto-ratify in `sidegraph-init`; even then,
253
+ architecture decisions and domains wait. See the
254
+ [ratification policy](docs/reference/configuration.md).
255
+ - **Preserved history:** a reversal closes the old record and adds a new one. Only two things
256
+ change a record in place: review sets its status, and a confirmed file move updates where
257
+ its anchor points.
258
+ - **Local counts:** for `sidegraph-stats`, Sidegraph counts how often memory was shown. The
259
+ counts stay in `.sidegraph/index.db`, which is git-ignored and never leaves your machine.
260
+ To stop counting, set `SIDEGRAPH_TELEMETRY=off`.
261
+
262
+ ## The engine underneath
263
+
264
+ The graph of your code and documents comes from
265
+ [Graphify](https://github.com/safishamsi/graphify), built without an LLM. Sidegraph only reads
266
+ it and never writes into it. Without a graph, records anchor to files and domains, and recall
267
+ still works. Three things need the graph: anchoring a record to a function, grouping related
268
+ code automatically, and following moved code (see the
269
+ [operations reference](docs/reference/operations.md#the-graph-dependency-stated-plainly)).
270
+ The graph and the local index can be rebuilt at any time. The JSON records in `.sidegraph/`
271
+ cannot: they are the source of truth, so keep them in your repository and backups.
272
+
273
+ ## Status
274
+
275
+ Sidegraph is in beta. Read the [stability policy](docs/reference/stability.md) before
276
+ building automation against it. By default the plugin follows the latest release; for
277
+ reproducible deployments, [pin a version](docs/getting-started/installation.md#mutable-development-references).
278
+ The [changelog](CHANGELOG.md) records release changes.
279
+
280
+ The platform badges at the top summarize the 0.13.0 release checks of 2026-10-14: Windows x64
281
+ and macOS arm64 both ran the full plugin session for Claude Code and Codex. The badges are not
282
+ live CI status; see [Platform coverage](docs/getting-started/installation.md#platform-coverage).
283
+
284
+ ## Contributing and support
285
+
286
+ Bug reports, questions, and feature requests are welcome in
287
+ [GitHub Issues](https://github.com/SantyagoSeaman/sidegraph/issues). Include the commands
288
+ you ran, expected and actual behavior, and package versions; remove secrets from logs.
289
+ For patches, see [Contributing](CONTRIBUTING.md) and the
290
+ [Code of Conduct](CODE_OF_CONDUCT.md). Report vulnerabilities through the private
291
+ channel in [SECURITY.md](SECURITY.md).
292
+
293
+ The public repository holds the released code; development happens in a private repository.
294
+ Contributions are reviewed here and carried over, with attribution, before the next release.
295
+
296
+ ## Documentation
297
+
298
+ [Getting started](docs/getting-started/installation.md) ·
299
+ [Concepts](docs/concepts/decision-memory.md) ·
300
+ [Guides](docs/guides/capturing-decisions.md) ·
301
+ [Reference](docs/reference/mcp-tools.md) ·
302
+ [Integrations](docs/integrations/graphify.md) (Graphify · Claude Code · Codex) ·
303
+ [Verify your setup](docs/guides/verifying-your-setup.md) ·
304
+ [Operations](docs/reference/operations.md) ·
305
+ [Pilot kit](docs/pilot-kit/README.md) ·
306
+ [Engineering whitepaper](docs/whitepaper/index.md)
307
+
308
+ ## License
309
+
310
+ [Apache-2.0](LICENSE).
@@ -0,0 +1,280 @@
1
+ # Sidegraph
2
+
3
+ [![tests](https://img.shields.io/github/actions/workflow/status/SantyagoSeaman/sidegraph/ci.yml?label=tests)](https://github.com/SantyagoSeaman/sidegraph/actions/workflows/ci.yml)
4
+ [![release](https://img.shields.io/github/v/release/SantyagoSeaman/sidegraph)](https://github.com/SantyagoSeaman/sidegraph/releases)
5
+ ![Python 3.13+](https://img.shields.io/badge/python-3.13%2B-blue)
6
+ ![License](https://img.shields.io/badge/license-Apache--2.0-green)
7
+ ![MCP](https://img.shields.io/badge/MCP-server-8A2BE2)
8
+ [![Windows x64 full plugin session checked](https://img.shields.io/badge/Windows%20x64-full%20plugin%20session%20checked-blue)](https://github.com/SantyagoSeaman/sidegraph/blob/main/docs/getting-started/installation.md#platform-coverage)
9
+ [![macOS arm64 full plugin session checked](https://img.shields.io/badge/macOS%20arm64-full%20plugin%20session%20checked-blue)](https://github.com/SantyagoSeaman/sidegraph/blob/main/docs/getting-started/installation.md#platform-coverage)
10
+
11
+ Sidegraph is a local MCP server and CLI for preserving engineering decisions and
12
+ facts alongside your code. It records why a design was chosen, which alternatives were
13
+ rejected, and what was learned during implementation, then retrieves that context for
14
+ the files and symbols an agent is working on.
15
+
16
+ Records live in your repository as reviewable JSON files. A derived SQLite index supports
17
+ retrieval; [Graphify](https://github.com/safishamsi/graphify) supplies the code and document
18
+ graph used to anchor records. Claude Code and Codex plugins connect capture and retrieval
19
+ to coding sessions.
20
+
21
+ - Keep decisions, rejected alternatives, and evidence with their provenance and history.
22
+ - Hand the agent the relevant mistakes and constraints before it edits, sized to fit its context.
23
+ - Review agent proposals before accepting them, or let low-risk ones be accepted automatically.
24
+ - Follow code through refactors, and flag records whose code changed or disappeared.
25
+
26
+ [Documentation](docs/README.md) · [Installation](docs/getting-started/installation.md) ·
27
+ [Changelog](CHANGELOG.md) · [Contributing](CONTRIBUTING.md)
28
+
29
+ ## Quickstart
30
+
31
+ ### Set up a repository (once)
32
+
33
+ **You need** Git, Claude Code or Codex, and [uv](https://docs.astral.sh/uv/getting-started/installation/),
34
+ which also downloads Python 3.13 if you do not have it. On Windows you also need
35
+ [Git for Windows](https://gitforwindows.org/) with its default options
36
+ ([details](docs/getting-started/installation.md#windows)); run the commands below in
37
+ PowerShell, using the Windows line where one is given. No API keys and no existing ADRs are required.
38
+
39
+ ```sh
40
+ curl -LsSf https://astral.sh/uv/install.sh | sh # uv on macOS, Linux
41
+ powershell -ExecutionPolicy ByPass -c "irm https://astral.sh/uv/install.ps1 | iex" # uv on Windows
42
+ ```
43
+
44
+ **1. Build the code graph.** [Graphify](https://github.com/safishamsi/graphify) maps your
45
+ functions, classes and files, so a record can point at the exact function it is about.
46
+
47
+ ```sh
48
+ uv tool install "graphifyy==0.9.6" # two y's in the package name; the command is graphify
49
+ cd /path/to/your/repo
50
+ graphify update .
51
+ echo "graphify-out/" >> .gitignore # the graph is rebuilt from your code; keep it out of git
52
+ Add-Content .gitignore "graphify-out/" # the same line on Windows (PowerShell); do not use >> there
53
+ ```
54
+
55
+ **2. Create the store**, the `.sidegraph/` directory that holds the records:
56
+
57
+ ```sh
58
+ uvx --from git+https://github.com/SantyagoSeaman/sidegraph.git@main sidegraph-init
59
+ ```
60
+
61
+ It asks two questions. Both default to yes, so press Enter twice.
62
+
63
+ - *Keep the code graph fresh?* Yes installs a git hook that rebuilds the graph after each commit.
64
+ - *Auto-ratify low-risk records?* Yes means the lessons, gotchas and facts the agent proposes
65
+ are accepted without review. Other proposals still wait for you. The answer is saved in
66
+ `.claude/settings.json`, which you commit. The plugin applies it in Claude Code and in Codex,
67
+ so it covers the whole team.
68
+
69
+ Details: [`sidegraph-init`](docs/reference/cli.md#sidegraph-init).
70
+
71
+ **3. Install the plugin.** It gives the agent the memory at session start and asks it to save
72
+ new decisions at the end of a session. It updates itself: each new session downloads and runs
73
+ the latest Sidegraph release.
74
+
75
+ In Claude Code, run these inside a session in the repository, then start a new session:
76
+
77
+ ```text
78
+ /plugin marketplace add SantyagoSeaman/sidegraph
79
+ /plugin install sidegraph@sidegraph
80
+ ```
81
+
82
+ In Codex, run these in a terminal in the repository, then start `codex` and approve the
83
+ Sidegraph hooks when it asks:
84
+
85
+ ```sh
86
+ codex plugin marketplace add SantyagoSeaman/sidegraph
87
+ codex plugin add sidegraph@sidegraph
88
+ ```
89
+
90
+ **4. Record a decision.** In a session, ask the agent, naming a real file and function:
91
+
92
+ > Record this gotcha: the upstream API limits batch requests to 100 items. We rejected
93
+ > a single unbounded request because it fails for larger imports. Anchor it to
94
+ > `import_batch` in `src/importer.py`.
95
+
96
+ It is saved right away. Records the agent proposes on its own may wait for your review: run
97
+ `/sidegraph:ratify-decisions` in Claude Code, or ask Codex to "review pending decisions".
98
+
99
+ **5. Check and commit.** Start a new session and ask: "Before I edit `src/importer.py`, what
100
+ should I know?" The agent should show the gotcha. Then commit `.sidegraph/` and `.gitignore`,
101
+ and `.claude/settings.json` if step 2 created or changed it. The index file inside
102
+ `.sidegraph/` is git-ignored automatically.
103
+
104
+ ### Each teammate
105
+
106
+ After cloning, each teammate runs steps 1, 2 and 3. In a clone, step 2 leaves the committed
107
+ records and settings alone. It only installs the graph hook there.
108
+
109
+ Next, [name your domains](docs/guides/naming-your-domains.md) to give the memory a table of
110
+ contents, or import existing ADRs and design specs with the
111
+ [preview-first bootstrap](docs/getting-started/bootstrap.md). The
112
+ [verification checklist](docs/guides/verifying-your-setup.md) covers the whole workflow.
113
+
114
+ ### Other options
115
+
116
+ - **Without the graph.** Skip step 1 and answer no to the first question in step 2. Records
117
+ then attach to whole files instead of functions.
118
+ - **Versions.** You always run the latest release. The plugin and the step 2 command install
119
+ Sidegraph from the public repository on GitHub, whose `main` branch changes only when a
120
+ release is published. To pin a version instead, see
121
+ [pinning](docs/getting-started/installation.md#mutable-development-references).
122
+ - **Sidegraph commands in your own terminal.** Optional:
123
+ `uv tool install git+https://github.com/SantyagoSeaman/sidegraph.git@main`, from the same place as the plugin. It does not update itself, so
124
+ after each release run `uv tool upgrade sidegraph`
125
+ ([details](docs/getting-started/installation.md#option-a--the-cli-on-your-path)).
126
+ - **Other MCP clients.** Run `sidegraph-mcp` over stdio; see the
127
+ [MCP reference](docs/reference/mcp-tools.md) and [configuration](docs/reference/configuration.md).
128
+ Automatic memory needs a host with hooks, such as Claude Code or Codex.
129
+ - **Windows details**, including what the plugins need from Git for Windows:
130
+ [Windows setup](docs/getting-started/installation.md#windows).
131
+
132
+ ## Why
133
+
134
+ Code describes the current implementation, but often omits the alternatives a team
135
+ tried, operational constraints it discovered, and reasons for changing direction.
136
+ Sidegraph captures that reasoning and links it to the code and planning documents it
137
+ concerns. It works alongside an existing ADR or specification process.
138
+
139
+ The useful starting point is a project with decisions worth retaining and people willing
140
+ to review them. Memory quality depends on capture, review, and whether the agent actually
141
+ retrieves it. Small tasks answerable directly from code may gain little from the extra
142
+ context. The [engineering whitepaper](docs/whitepaper/index.md) describes the evidence,
143
+ negative results, and adoption criteria; the [pilot kit](docs/pilot-kit/README.md) helps
144
+ evaluate it on your own repository.
145
+
146
+ ## How it works
147
+
148
+ 1. **Capture.** During a session the agent saves a decision when you ask for one. At the end of
149
+ a session the plugin reminds it to propose the decisions worth keeping. Secrets are redacted
150
+ before anything is written.
151
+ 2. **Review.** You accept or drop what the agent proposed; Sidegraph calls this *ratifying*.
152
+ Records are JSON files in `.sidegraph/`, committed with your code.
153
+ 3. **Anchoring.** Each record is linked to the functions, classes, files or document headings it
154
+ is about, using the graph Graphify builds from your code. When a refactor moves code,
155
+ Sidegraph follows the move; when it cannot tell where the code went, it flags the record for
156
+ review.
157
+ 4. **Recall.** At the start of the next session the agent gets a short table of contents of the
158
+ project's areas, called *domains*. Before changing a file it asks for that file's records,
159
+ with known mistakes first. In Claude Code, the agent also receives a file's records the
160
+ first time it reads or edits that file.
161
+ 5. **Subagents.** In Claude Code, when the agent hands a task to a subagent, the records for the
162
+ files named in that task are added to it. In Claude Code and Codex, each new subagent is told
163
+ that the memory exists and how to use it.
164
+
165
+ Domains are named by you or proposed by the agent; each one says what an area is for and which
166
+ code belongs to it. See the [mind model](docs/concepts/mind-model.md) and the
167
+ [anchoring model](docs/concepts/anchoring.md).
168
+
169
+ ## What gets stored
170
+
171
+ | Record | What it is |
172
+ |---|---|
173
+ | `Decision` | Kind (`adr`, `lesson`, `constraint`, or `gotcha`), context, choice, rejected alternatives, consequences, validity, history, and provenance |
174
+ | `Fact` | A benchmark, external constraint, or observed finding that supports a decision or stands alone |
175
+ | `Entity` | A stable ID for a function, class, file or heading, kept when the graph is rebuilt |
176
+ | `AnchorBinding` | The link between a decision or fact and an entity it is about |
177
+ | `Domain` | A named area with a purpose, membership rules, and optional subdomains |
178
+
179
+ Nothing is ever deleted. A reversed decision is closed and replaced by a new one, so *"tried
180
+ before, abandoned because…"* stays retrievable with `get_entity_history`. Dropping a proposal
181
+ marks it rejected; it stays in the history too.
182
+
183
+ Facts follow the same review and history rules as decisions. Accepting or dropping a decision also accepts or drops
184
+ the pending facts attached to it. Details:
185
+ [docs/concepts/data-model.md](docs/concepts/data-model.md) and
186
+ [docs/guides/capturing-decisions.md#facts-the-evidence-layer](docs/guides/capturing-decisions.md#facts-the-evidence-layer).
187
+
188
+ ## MCP tools
189
+
190
+ The `sidegraph-mcp` stdio server exposes retrieval, capture, review and maintenance tools.
191
+ The ones an agent uses most: `get_task_context` (the records for the files or functions it is
192
+ working on), `drill_down` (everything in one domain), `get_entity_history` (every decision
193
+ ever made about one function or file, including reversed ones), `propose_decisions` (drafts
194
+ for review) and `ratify` (accept or drop drafts).
195
+
196
+ See the [MCP reference](docs/reference/mcp-tools.md) for the complete tool set, schemas,
197
+ return shapes, and side effects. The [CLI reference](docs/reference/cli.md) covers setup,
198
+ scripted use, and CI maintenance. Tool names and return shapes are
199
+ [provisional before 1.0](docs/reference/stability.md).
200
+
201
+ ## Works on code and on docs
202
+
203
+ Anchor decisions to functions and classes, or to **headings in your architecture documents**;
204
+ Graphify builds both graphs without an LLM. `sidegraph-bootstrap` turns existing ADRs and
205
+ design specs into anchored decisions, also without an LLM.
206
+
207
+ An optional **semantic pass** (`graphify extract`, which needs an API key for its model
208
+ provider and caches results per file) goes deeper on documentation: it turns prose into
209
+ concepts and themes that records can anchor to. Walkthrough:
210
+ [docs/guides/semantic-docs.md](docs/guides/semantic-docs.md).
211
+
212
+ ## Trust & privacy
213
+
214
+ - **Local runtime:** Sidegraph reads repository files and the graph, and writes records,
215
+ a derived index, and optional setup or export files. It makes no network calls of its own
216
+ and sends nothing anywhere. Installing and updating it downloads it from GitHub. What the agent
217
+ does with Sidegraph's answers is up to your agent host, which sends them to its model
218
+ provider like any other context. Graphify's optional semantic pass uses its own model
219
+ provider. See [SECURITY.md](SECURITY.md) for the data boundary.
220
+ - **Reviewable capture:** text is redacted before storage using best-effort patterns.
221
+ Review drafts and scan the committed store for secrets. Agent proposals wait for human
222
+ review unless the project answered yes to auto-ratify in `sidegraph-init`; even then,
223
+ architecture decisions and domains wait. See the
224
+ [ratification policy](docs/reference/configuration.md).
225
+ - **Preserved history:** a reversal closes the old record and adds a new one. Only two things
226
+ change a record in place: review sets its status, and a confirmed file move updates where
227
+ its anchor points.
228
+ - **Local counts:** for `sidegraph-stats`, Sidegraph counts how often memory was shown. The
229
+ counts stay in `.sidegraph/index.db`, which is git-ignored and never leaves your machine.
230
+ To stop counting, set `SIDEGRAPH_TELEMETRY=off`.
231
+
232
+ ## The engine underneath
233
+
234
+ The graph of your code and documents comes from
235
+ [Graphify](https://github.com/safishamsi/graphify), built without an LLM. Sidegraph only reads
236
+ it and never writes into it. Without a graph, records anchor to files and domains, and recall
237
+ still works. Three things need the graph: anchoring a record to a function, grouping related
238
+ code automatically, and following moved code (see the
239
+ [operations reference](docs/reference/operations.md#the-graph-dependency-stated-plainly)).
240
+ The graph and the local index can be rebuilt at any time. The JSON records in `.sidegraph/`
241
+ cannot: they are the source of truth, so keep them in your repository and backups.
242
+
243
+ ## Status
244
+
245
+ Sidegraph is in beta. Read the [stability policy](docs/reference/stability.md) before
246
+ building automation against it. By default the plugin follows the latest release; for
247
+ reproducible deployments, [pin a version](docs/getting-started/installation.md#mutable-development-references).
248
+ The [changelog](CHANGELOG.md) records release changes.
249
+
250
+ The platform badges at the top summarize the 0.13.0 release checks of 2026-10-14: Windows x64
251
+ and macOS arm64 both ran the full plugin session for Claude Code and Codex. The badges are not
252
+ live CI status; see [Platform coverage](docs/getting-started/installation.md#platform-coverage).
253
+
254
+ ## Contributing and support
255
+
256
+ Bug reports, questions, and feature requests are welcome in
257
+ [GitHub Issues](https://github.com/SantyagoSeaman/sidegraph/issues). Include the commands
258
+ you ran, expected and actual behavior, and package versions; remove secrets from logs.
259
+ For patches, see [Contributing](CONTRIBUTING.md) and the
260
+ [Code of Conduct](CODE_OF_CONDUCT.md). Report vulnerabilities through the private
261
+ channel in [SECURITY.md](SECURITY.md).
262
+
263
+ The public repository holds the released code; development happens in a private repository.
264
+ Contributions are reviewed here and carried over, with attribution, before the next release.
265
+
266
+ ## Documentation
267
+
268
+ [Getting started](docs/getting-started/installation.md) ·
269
+ [Concepts](docs/concepts/decision-memory.md) ·
270
+ [Guides](docs/guides/capturing-decisions.md) ·
271
+ [Reference](docs/reference/mcp-tools.md) ·
272
+ [Integrations](docs/integrations/graphify.md) (Graphify · Claude Code · Codex) ·
273
+ [Verify your setup](docs/guides/verifying-your-setup.md) ·
274
+ [Operations](docs/reference/operations.md) ·
275
+ [Pilot kit](docs/pilot-kit/README.md) ·
276
+ [Engineering whitepaper](docs/whitepaper/index.md)
277
+
278
+ ## License
279
+
280
+ [Apache-2.0](LICENSE).